{
 "schema": 1,
 "platform": "c64",
 "game": "mercenary",
 "build": "",
 "source": "regenerator2000 live",
 "regions": {
  "exclude": [
   [
    256,
    511,
    "stack"
   ],
   [
    53248,
    57343,
    "I/O and colour RAM"
   ],
   [
    16384,
    20479,
    "the unread twin of $E000-$EFFF: the routine at $5000 copies it there before the game starts, and the view's bitmap overwrites it once play draws"
   ],
   [
    24576,
    28671,
    "the unread twin of $F000-$FFFF: copied there by $5000, then overwritten by the second bitmap"
   ],
   [
    20527,
    21823,
    "the last rows of the first bitmap ($4000-$553F): the view, cleared and redrawn every other frame; $AA filler at the hand-over"
   ],
   [
    21960,
    21967,
    "eight $AA filler bytes between the row tables $5540 and $55D0 (the builder at $72A2 stops at row 136); nothing reads or writes them"
   ],
   [
    23552,
    24231,
    "the view's colours in the screen matrix (text rows 0-16), painted by $BB4F whenever the place changes"
   ],
   [
    53248,
    57343,
    "not the game's: the packer's leftovers under the I/O area ($D000-$D867 filled with $33, $D868-$DA67 the first unpacker's turbo loader, $DA68-$DFFF packed data). No game code maps this RAM in: every write to $01 stores $35, $36 or $05"
   ]
  ],
  "extra": [
   [
    30720,
    32767,
    "character set"
   ]
  ]
 },
 "blocks": [
  {
   "start": 0,
   "end": 447,
   "type": "Byte"
  },
  {
   "start": 448,
   "end": 677,
   "type": "Undefined"
  },
  {
   "start": 678,
   "end": 678,
   "type": "Byte"
  },
  {
   "start": 679,
   "end": 703,
   "type": "Undefined"
  },
  {
   "start": 704,
   "end": 767,
   "type": "Byte"
  },
  {
   "start": 768,
   "end": 831,
   "type": "Undefined"
  },
  {
   "start": 832,
   "end": 2047,
   "type": "Byte"
  },
  {
   "start": 2048,
   "end": 2149,
   "type": "Address"
  },
  {
   "start": 2150,
   "end": 8543,
   "type": "Byte"
  },
  {
   "start": 8544,
   "end": 8547,
   "type": "Code"
  },
  {
   "start": 8548,
   "end": 8559,
   "type": "Byte"
  },
  {
   "start": 8560,
   "end": 8574,
   "type": "Code"
  },
  {
   "start": 8575,
   "end": 16383,
   "type": "Byte"
  },
  {
   "start": 16384,
   "end": 20479,
   "type": "Undefined"
  },
  {
   "start": 20480,
   "end": 20526,
   "type": "Code"
  },
  {
   "start": 20527,
   "end": 24575,
   "type": "Byte"
  },
  {
   "start": 24576,
   "end": 28671,
   "type": "Undefined"
  },
  {
   "start": 28672,
   "end": 29183,
   "type": "Byte"
  },
  {
   "start": 29184,
   "end": 29429,
   "type": "Code"
  },
  {
   "start": 29430,
   "end": 29433,
   "type": "Byte"
  },
  {
   "start": 29434,
   "end": 29886,
   "type": "Code"
  },
  {
   "start": 29887,
   "end": 29897,
   "type": "Byte"
  },
  {
   "start": 29898,
   "end": 29955,
   "type": "Code"
  },
  {
   "start": 29956,
   "end": 29959,
   "type": "Byte"
  },
  {
   "start": 29960,
   "end": 30165,
   "type": "Code"
  },
  {
   "start": 30166,
   "end": 32767,
   "type": "Byte"
  },
  {
   "start": 32768,
   "end": 32771,
   "type": "Word"
  },
  {
   "start": 32772,
   "end": 32776,
   "type": "Byte"
  },
  {
   "start": 32777,
   "end": 32777,
   "type": "Code"
  },
  {
   "start": 32778,
   "end": 32953,
   "type": "Byte"
  },
  {
   "start": 32954,
   "end": 33367,
   "type": "Code"
  },
  {
   "start": 33368,
   "end": 33373,
   "type": "PETSCII Text"
  },
  {
   "start": 33374,
   "end": 33418,
   "type": "Byte"
  },
  {
   "start": 33419,
   "end": 33878,
   "type": "Code"
  },
  {
   "start": 33879,
   "end": 33910,
   "type": "Byte"
  },
  {
   "start": 33911,
   "end": 36188,
   "type": "Code"
  },
  {
   "start": 36189,
   "end": 36189,
   "type": "Byte"
  },
  {
   "start": 36190,
   "end": 36191,
   "type": "Word"
  },
  {
   "start": 36192,
   "end": 36259,
   "type": "Address"
  },
  {
   "start": 36260,
   "end": 36905,
   "type": "Code"
  },
  {
   "start": 36906,
   "end": 36947,
   "type": "Byte"
  },
  {
   "start": 36948,
   "end": 37100,
   "type": "Code"
  },
  {
   "start": 37101,
   "end": 37109,
   "type": "Byte"
  },
  {
   "start": 37110,
   "end": 37513,
   "type": "Code"
  },
  {
   "start": 37514,
   "end": 37714,
   "type": "Byte"
  },
  {
   "start": 37715,
   "end": 38103,
   "type": "Code"
  },
  {
   "start": 38104,
   "end": 38111,
   "type": "Byte"
  },
  {
   "start": 38112,
   "end": 40364,
   "type": "Code"
  },
  {
   "start": 40365,
   "end": 40540,
   "type": "Byte"
  },
  {
   "start": 40541,
   "end": 40605,
   "type": "Code"
  },
  {
   "start": 40606,
   "end": 40637,
   "type": "Lo/Hi Word"
  },
  {
   "start": 40638,
   "end": 41338,
   "type": "Code"
  },
  {
   "start": 41339,
   "end": 41354,
   "type": "Byte"
  },
  {
   "start": 41355,
   "end": 44041,
   "type": "Code"
  },
  {
   "start": 44042,
   "end": 44059,
   "type": "Byte"
  },
  {
   "start": 44060,
   "end": 44105,
   "type": "Code"
  },
  {
   "start": 44106,
   "end": 44114,
   "type": "Byte"
  },
  {
   "start": 44115,
   "end": 44881,
   "type": "Code"
  },
  {
   "start": 44882,
   "end": 44909,
   "type": "Byte"
  },
  {
   "start": 44910,
   "end": 45692,
   "type": "Code"
  },
  {
   "start": 45693,
   "end": 45696,
   "type": "Byte"
  },
  {
   "start": 45697,
   "end": 46262,
   "type": "Code"
  },
  {
   "start": 46263,
   "end": 46278,
   "type": "Byte"
  },
  {
   "start": 46279,
   "end": 46290,
   "type": "Code"
  },
  {
   "start": 46291,
   "end": 46291,
   "type": "Byte"
  },
  {
   "start": 46292,
   "end": 46934,
   "type": "Code"
  },
  {
   "start": 46935,
   "end": 46938,
   "type": "Byte"
  },
  {
   "start": 46939,
   "end": 47252,
   "type": "Code"
  },
  {
   "start": 47253,
   "end": 47256,
   "type": "Byte"
  },
  {
   "start": 47257,
   "end": 47392,
   "type": "Code"
  },
  {
   "start": 47393,
   "end": 47417,
   "type": "Byte"
  },
  {
   "start": 47418,
   "end": 47492,
   "type": "Code"
  },
  {
   "start": 47493,
   "end": 47546,
   "type": "Byte"
  },
  {
   "start": 47547,
   "end": 47997,
   "type": "Code"
  },
  {
   "start": 47998,
   "end": 48183,
   "type": "Byte"
  },
  {
   "start": 48184,
   "end": 48199,
   "type": "Lo/Hi Address"
  },
  {
   "start": 48200,
   "end": 48383,
   "type": "Byte"
  },
  {
   "start": 48384,
   "end": 48546,
   "type": "Code"
  },
  {
   "start": 48547,
   "end": 48639,
   "type": "Byte"
  },
  {
   "start": 48640,
   "end": 48798,
   "type": "Code"
  },
  {
   "start": 48799,
   "end": 53247,
   "type": "Byte"
  },
  {
   "start": 53248,
   "end": 57343,
   "type": "Undefined"
  },
  {
   "start": 57344,
   "end": 65529,
   "type": "Byte"
  },
  {
   "start": 65530,
   "end": 65535,
   "type": "Word"
  }
 ],
 "symbols": [
  {
   "address": 0,
   "name": "cpu_port_ddr",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1,
   "name": "cpu_port",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 2,
   "name": "bitmap_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 3,
   "name": "bitmap_ptr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4,
   "name": "octant_vector",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5,
   "name": "octant_vector_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6,
   "name": "scratch",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7,
   "name": "scratch_b",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8,
   "name": "fac_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9,
   "name": "fac_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10,
   "name": "ftmp1_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11,
   "name": "ftmp1_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 12,
   "name": "ftmp2_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 13,
   "name": "ftmp2_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14,
   "name": "disc_ptr_c",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15,
   "name": "disc_ptr_c_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16,
   "name": "disc_ptr_d",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 17,
   "name": "disc_ptr_d_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22,
   "name": "ftmp3_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 23,
   "name": "ftmp3_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 24,
   "name": "fadd_expdiff",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 25,
   "name": "item_index",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 26,
   "name": "row_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 27,
   "name": "room_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 28,
   "name": "room_ptr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 29,
   "name": "model_ptr",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 30,
   "name": "model_ptr_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 31,
   "name": "script_pc",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32,
   "name": "script_pc_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33,
   "name": "proj_scale_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34,
   "name": "turn_rate_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35,
   "name": "turn_rate_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36,
   "name": "buffer_flip",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37,
   "name": "draw_page",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38,
   "name": "speed_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39,
   "name": "speed_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 40,
   "name": "roll_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 41,
   "name": "roll_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 42,
   "name": "pitch_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 43,
   "name": "pitch_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44,
   "name": "heading_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 45,
   "name": "heading_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46,
   "name": "sin_roll_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47,
   "name": "sin_roll_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48,
   "name": "cos_roll_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 49,
   "name": "cos_roll_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 50,
   "name": "tan_roll_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 51,
   "name": "tan_roll_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 52,
   "name": "cot_roll_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 53,
   "name": "cot_roll_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 54,
   "name": "sin_pitch_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 55,
   "name": "sin_pitch_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 56,
   "name": "cos_pitch_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 57,
   "name": "cos_pitch_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 58,
   "name": "tan_pitch_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 59,
   "name": "tan_pitch_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 60,
   "name": "sin_heading_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 61,
   "name": "sin_heading_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 62,
   "name": "cos_heading_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 63,
   "name": "cos_heading_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 64,
   "name": "mx_dx_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 65,
   "name": "mx_dx_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 66,
   "name": "mx_dh_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 67,
   "name": "mx_dh_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 68,
   "name": "mx_dy_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 69,
   "name": "mx_dy_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 70,
   "name": "my_dx_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 71,
   "name": "my_dx_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 72,
   "name": "my_dh_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 73,
   "name": "my_dh_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 74,
   "name": "my_dy_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 75,
   "name": "my_dy_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 76,
   "name": "mz_dx_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 77,
   "name": "mz_dx_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 78,
   "name": "mz_dh_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 79,
   "name": "mz_dh_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 80,
   "name": "mz_dy_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 81,
   "name": "mz_dy_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 82,
   "name": "pt_x_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 83,
   "name": "pt_x_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 84,
   "name": "pt_h_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 85,
   "name": "pt_h_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 86,
   "name": "pt_y_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 87,
   "name": "pt_y_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 88,
   "name": "view_x_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 89,
   "name": "view_x_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 90,
   "name": "view_y_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 91,
   "name": "view_y_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 92,
   "name": "view_z_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 93,
   "name": "view_z_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 94,
   "name": "proj_x_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 95,
   "name": "proj_x_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 96,
   "name": "proj_y_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 97,
   "name": "proj_y_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 98,
   "name": "proj_x2_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 99,
   "name": "proj_x2_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 100,
   "name": "proj_y2_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 101,
   "name": "proj_y2_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 102,
   "name": "line_slope",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 103,
   "name": "line_octant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 104,
   "name": "slope_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 105,
   "name": "slope_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 106,
   "name": "line_x0",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 107,
   "name": "line_y0",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 108,
   "name": "line_x1",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 109,
   "name": "line_y1",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 110,
   "name": "clip_code0",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 111,
   "name": "clip_code1",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 112,
   "name": "last_vertex",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 113,
   "name": "last_edge",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 114,
   "name": "player_x_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 115,
   "name": "player_x_mid",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 116,
   "name": "player_x_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 117,
   "name": "player_h_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 118,
   "name": "player_h_mid",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 119,
   "name": "player_h_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 120,
   "name": "player_y_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 121,
   "name": "player_y_mid",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 122,
   "name": "player_y_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 123,
   "name": "horizon_step_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 124,
   "name": "horizon_step_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 125,
   "name": "horizon_side",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 127,
   "name": "on_ground",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 128,
   "name": "joy_dirs",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 129,
   "name": "joy_fire",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 130,
   "name": "horizon_fill_a",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 131,
   "name": "horizon_fill_b",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 132,
   "name": "horizon_edge_mask",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 133,
   "name": "scene_grid_x",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 134,
   "name": "scene_h_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 135,
   "name": "scene_grid_y",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 136,
   "name": "bld_last_vertex_b",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 137,
   "name": "bld_last_vertex",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 138,
   "name": "bld_last_edge_b",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 139,
   "name": "bld_last_edge",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 140,
   "name": "eye_shift_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 141,
   "name": "eye_shift_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 142,
   "name": "view_cx",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 143,
   "name": "view_cy",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 144,
   "name": "clip_left_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 145,
   "name": "clip_left_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 146,
   "name": "clip_right_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 147,
   "name": "clip_right_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 148,
   "name": "clip_top_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 149,
   "name": "clip_top_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 150,
   "name": "clip_bottom_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 151,
   "name": "clip_bottom_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 152,
   "name": "colour_split_edge",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 153,
   "name": "spin_angle_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 154,
   "name": "spin_angle_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 155,
   "name": "spin_sin_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 156,
   "name": "spin_sin_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 157,
   "name": "spin_cos_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 158,
   "name": "spin_cos_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 159,
   "name": "spin_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 160,
   "name": "spin_cx",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 161,
   "name": "spin_cy",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 162,
   "name": "spin_rate",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 163,
   "name": "col_background",
   "type": "ZeroPageField",
   "kind": "user"
  },
  {
   "address": 164,
   "name": "col_unused",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 165,
   "name": "col_pixel10",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 166,
   "name": "col_pixel11",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 168,
   "name": "underground",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 169,
   "name": "vehicle",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 170,
   "name": "walk_speed_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 171,
   "name": "walk_speed_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 172,
   "name": "walk_turn_step",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 173,
   "name": "tmp_index",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 174,
   "name": "wall_hits",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 175,
   "name": "cur_object",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 176,
   "name": "model_last_vertex",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 177,
   "name": "door_guard",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 178,
   "name": "visible_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 179,
   "name": "visible_loop",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 180,
   "name": "last_object_no",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 181,
   "name": "map_vertex_low",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 182,
   "name": "map_edge_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 183,
   "name": "location",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 184,
   "name": "object_key",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 185,
   "name": "view_radius",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 186,
   "name": "el_dial_pos",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 187,
   "name": "el_dial_quarter",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 188,
   "name": "el_dial_label",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 190,
   "name": "comp_dial_pos",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 191,
   "name": "comp_dial_quarter",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 192,
   "name": "comp_dial_label",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 194,
   "name": "col_view_next",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 196,
   "name": "col_area_10",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 197,
   "name": "col_area_11",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 198,
   "name": "col_band",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 199,
   "name": "view_d018",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 200,
   "name": "wipe_mode",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 202,
   "name": "lift_state",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 203,
   "name": "lift_step",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 204,
   "name": "lift_stage",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 205,
   "name": "room",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 207,
   "name": "ovtx_x_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 208,
   "name": "ovtx_x_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 209,
   "name": "ovtx_h_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 210,
   "name": "ovtx_h_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 211,
   "name": "ovtx_y_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 212,
   "name": "ovtx_y_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 213,
   "name": "rel_x_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 214,
   "name": "rel_x_mid",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 215,
   "name": "rel_x_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 216,
   "name": "rel_h_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 217,
   "name": "rel_h_mid",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 218,
   "name": "rel_h_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 219,
   "name": "rel_y_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 220,
   "name": "rel_y_mid",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 221,
   "name": "rel_y_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 222,
   "name": "msg_token",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 223,
   "name": "msg_char",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 224,
   "name": "msg_timer",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 225,
   "name": "msg_hold",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 226,
   "name": "frame_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 227,
   "name": "seconds_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 228,
   "name": "seconds_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 229,
   "name": "script_sp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 230,
   "name": "msg_state",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 231,
   "name": "script_op",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 232,
   "name": "random_lo",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 233,
   "name": "key_new",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 234,
   "name": "key_last",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 235,
   "name": "carried_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 236,
   "name": "set_speed_mant",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 237,
   "name": "set_speed_exp",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 238,
   "name": "map_window_key",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 239,
   "name": "loc_out_of_range",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 240,
   "name": "flash_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 241,
   "name": "east_west_flip",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 242,
   "name": "location_status",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 243,
   "name": "random_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 244,
   "name": "collapse_count",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 245,
   "name": "collapse_location",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 246,
   "name": "band_d018",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 247,
   "name": "room_message",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 248,
   "name": "wall_hit_last",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 249,
   "name": "crash_delay",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 250,
   "name": "on_colony_pad",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 251,
   "name": "hit_old_status",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 252,
   "name": "msg_char_out",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 253,
   "name": "restart_vec",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 254,
   "name": "restart_vec_hi",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 256,
   "name": "vtx_vx_mant",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 320,
   "name": "vtx_vx_exp",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 384,
   "name": "vtx_vy_mant",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 678,
   "name": "kernal_pal_flag",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 704,
   "name": "vtx_vy_exp",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 832,
   "name": "vtx_vz_mant",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 896,
   "name": "vtx_vz_exp",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 960,
   "name": "vtx_px_exp",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1024,
   "name": "vtx_x_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1088,
   "name": "vtx_x_mid",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1089,
   "name": "vtx_x_mid_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1092,
   "name": "vtx_x_mid_4",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1093,
   "name": "vtx_x_mid_5",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1152,
   "name": "vtx_h_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1216,
   "name": "vtx_h_mid",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1217,
   "name": "vtx_h_mid_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1218,
   "name": "vtx_h_mid_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1219,
   "name": "vtx_h_mid_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1280,
   "name": "vtx_y_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1344,
   "name": "vtx_y_mid",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1347,
   "name": "vtx_y_mid_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1348,
   "name": "vtx_y_mid_4",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1351,
   "name": "vtx_y_mid_7",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 1407,
   "name": "vtx_y_mid_63",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1408,
   "name": "edge_from",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1471,
   "name": "edge_from_63",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1472,
   "name": "edge_to",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1536,
   "name": "vtx_px_mant",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1600,
   "name": "vtx_py_exp",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1664,
   "name": "vtx_sx",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1728,
   "name": "vtx_sy",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1792,
   "name": "vtx_clip",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1856,
   "name": "vtx_x_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1920,
   "name": "vtx_h_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 1984,
   "name": "vtx_y_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2048,
   "name": "script_table",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2049,
   "name": "script_table_hi",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2112,
   "name": "script_table_sites",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2150,
   "name": "script_spare_crash",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2156,
   "name": "script_crash_landing",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2236,
   "name": "landing_status_report",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2382,
   "name": "dart_sales_pitch",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2481,
   "name": "landing_long_walk",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2491,
   "name": "wait_for_dart",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2498,
   "name": "idle_nag",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2601,
   "name": "dart_bought",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2620,
   "name": "script_dart_boarded",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2673,
   "name": "dart_job_offer_wait",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2689,
   "name": "script_halt",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2692,
   "name": "wait_15s_or_player",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2703,
   "name": "wait_2s",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2710,
   "name": "wait_3s_unused",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2717,
   "name": "wait_1s",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2724,
   "name": "wait_15s",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2731,
   "name": "ask_buy",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2741,
   "name": "ask_yes_no",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2757,
   "name": "job_offer_message",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2792,
   "name": "script_mechanoid_taken",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2838,
   "name": "script_bank",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2856,
   "name": "script_novabill",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2881,
   "name": "script_advert",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2928,
   "name": "script_sabins_cube",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2949,
   "name": "script_walton_monument",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2996,
   "name": "script_st_stallards",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3019,
   "name": "script_moorby_arch",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3041,
   "name": "script_tyler_point",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3062,
   "name": "script_bosher_stadium",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3086,
   "name": "script_jordan_airport",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3103,
   "name": "script_vector_henge",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3125,
   "name": "script_brother_in_law_house",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3142,
   "name": "script_mechanoid_fort",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3158,
   "name": "script_coach_and_horses",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3199,
   "name": "script_new_ship_destroyed",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3223,
   "name": "script_traitor",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3243,
   "name": "script_good_show",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3265,
   "name": "say_just_destroyed",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3268,
   "name": "palyar_attack_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3276,
   "name": "mechanoid_attack_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3284,
   "name": "script_site_palyar",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3291,
   "name": "script_site_mechanoid",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3298,
   "name": "script_palyar_briefing",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3370,
   "name": "palyar_briefing_fee",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3400,
   "name": "palyar_briefing_sites",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3485,
   "name": "script_mechanoid_briefing",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3588,
   "name": "script_comms_room",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3613,
   "name": "hertz_offer",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3695,
   "name": "hertz_check_funds",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3728,
   "name": "hertz_despatch",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3779,
   "name": "script_power_room",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3799,
   "name": "script_stores",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3818,
   "name": "script_armoury",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3837,
   "name": "script_laboratory",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3856,
   "name": "script_control_room",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3876,
   "name": "script_interview_room",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3896,
   "name": "script_mech_fuel_stores",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3917,
   "name": "script_mech_power_room",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3938,
   "name": "script_mech_stores",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3958,
   "name": "script_mech_armoury",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3978,
   "name": "script_mech_laboratory",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3998,
   "name": "script_engine_room",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4018,
   "name": "script_conference_room",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4038,
   "name": "script_exchequer",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4057,
   "name": "script_kitchen",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4076,
   "name": "script_infirmary",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4095,
   "name": "script_prison",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4096,
   "name": "script_prison_cont",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4112,
   "name": "room_payment",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4125,
   "name": "room_asks_delivery",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4153,
   "name": "room_pays",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4172,
   "name": "mech_room_check_leader",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4223,
   "name": "script_interstellar_ship",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4253,
   "name": "ship_needs_novadrive",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4281,
   "name": "ship_press_y",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4316,
   "name": "ship_launch_check",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4387,
   "name": "escape_ending",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4508,
   "name": "game_over_loop",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4535,
   "name": "say_palyar_attack",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4547,
   "name": "say_mechanoid_attack",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4558,
   "name": "say_sites_destroyed",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4600,
   "name": "script_mechanoid_victory",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4619,
   "name": "script_palyar_victory",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4681,
   "name": "dictionary",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4685,
   "name": "word_s",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4686,
   "name": "word_ing",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4689,
   "name": "word_ed",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4691,
   "name": "word_d",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4692,
   "name": "word_exclaim",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4693,
   "name": "word_question",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4694,
   "name": "word_a",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4695,
   "name": "word_am",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4697,
   "name": "word_dashes",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4702,
   "name": "word_our",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4705,
   "name": "word_just",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4709,
   "name": "word_again",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4714,
   "name": "word_hanger",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4720,
   "name": "word_airport",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4727,
   "name": "word_all",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4730,
   "name": "word_aircraft",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4738,
   "name": "word_reward",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4744,
   "name": "word_and",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4747,
   "name": "word_are",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4750,
   "name": "word_antigrav",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4758,
   "name": "word_author",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4764,
   "name": "word_at",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4766,
   "name": "word_antenna",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4773,
   "name": "word_its",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4776,
   "name": "word_gold",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4780,
   "name": "word_back",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4784,
   "name": "word_buy",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4787,
   "name": "word_be",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4789,
   "name": "word_brief",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4794,
   "name": "word_brother_in_law",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4808,
   "name": "word_call",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4812,
   "name": "word_catering",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4820,
   "name": "word_craft",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4825,
   "name": "word_crash",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4830,
   "name": "word_cr",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4832,
   "name": "word_credits",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4839,
   "name": "word_communication",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4852,
   "name": "word_complex",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4859,
   "name": "word_control",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4864,
   "name": "word_ol_in_control",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4866,
   "name": "word_complete",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4874,
   "name": "word_crystal",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4881,
   "name": "word_is",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4883,
   "name": "word_dark",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4887,
   "name": "word_here",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4891,
   "name": "word_go",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4893,
   "name": "word_deliver",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4897,
   "name": "word_ver_in_deliver",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4900,
   "name": "word_destroy",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4907,
   "name": "word_hyphen",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4908,
   "name": "word_attack",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4914,
   "name": "word_do",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4916,
   "name": "word_done",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4920,
   "name": "word_essential",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4929,
   "name": "word_engine",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4935,
   "name": "word_energy",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4940,
   "name": "word_y_in_energy",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4941,
   "name": "word_end",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4944,
   "name": "word_fee",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4947,
   "name": "word_have",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4951,
   "name": "word_fuel",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4955,
   "name": "word_for",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4958,
   "name": "word_find",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4962,
   "name": "word_from",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4966,
   "name": "word_fund",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4970,
   "name": "word_number_o_9",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4976,
   "name": "word_nine_question_in_number_o_9",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4979,
   "name": "word_your",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4981,
   "name": "word_ur_in_your",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4983,
   "name": "word_land",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4984,
   "name": "word_and_in_land",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4987,
   "name": "word_long",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4991,
   "name": "word_location",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4992,
   "name": "word_ocation_in_location",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4999,
   "name": "word_loc",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5002,
   "name": "word_medical",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5009,
   "name": "word_locked",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5015,
   "name": "word_more",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5019,
   "name": "word_mechanoid",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5021,
   "name": "word_chanoid_in_mechanoid",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5026,
   "name": "word_id_in_chanoid",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5028,
   "name": "word_message",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5035,
   "name": "word_min",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5038,
   "name": "word_may",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5041,
   "name": "word_must",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5045,
   "name": "word_house",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5050,
   "name": "word_need",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5054,
   "name": "word_neutron",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5061,
   "name": "word_novadrive",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5066,
   "name": "word_rive_in_novadrive",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5070,
   "name": "word_not",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5072,
   "name": "word_t_in_not",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5073,
   "name": "word_now",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5076,
   "name": "word_of",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5078,
   "name": "word_ok",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5080,
   "name": "word_offer",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5085,
   "name": "word_on",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5087,
   "name": "word_only",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5091,
   "name": "word_power",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5096,
   "name": "word_armoury",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5102,
   "name": "word_y_in_armoury",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5103,
   "name": "word_laboratory",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5113,
   "name": "word_interview",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5122,
   "name": "word_pay",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5125,
   "name": "word_palyar",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5131,
   "name": "word_paid",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5135,
   "name": "word_plan",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5139,
   "name": "word_please",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5145,
   "name": "word_exchequer",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5154,
   "name": "word_provisions",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5164,
   "name": "word_conference",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5174,
   "name": "word_pad",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5177,
   "name": "word_the_palyar_commanders",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5199,
   "name": "word_most",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5203,
   "name": "word_installation",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5215,
   "name": "word_requirement",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5226,
   "name": "word_report",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5232,
   "name": "word_room",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5236,
   "name": "word_send",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5240,
   "name": "word_i",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5241,
   "name": "word_sale",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5245,
   "name": "word_ship",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5249,
   "name": "word_should",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5255,
   "name": "word_status",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5261,
   "name": "word_stores",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5267,
   "name": "word_start",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5272,
   "name": "word_supplies",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5280,
   "name": "word_infirmary",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5289,
   "name": "word_in",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5291,
   "name": "word_it",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5293,
   "name": "word_them",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5297,
   "name": "word_the",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5300,
   "name": "word_information",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5311,
   "name": "word_there",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5316,
   "name": "word_this",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5320,
   "name": "word_kitchen",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5327,
   "name": "word_to",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5329,
   "name": "word_too",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5332,
   "name": "word_targ",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5336,
   "name": "word_transaction",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5347,
   "name": "word_want",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5351,
   "name": "word_good",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5355,
   "name": "word_work",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5359,
   "name": "word_you",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5362,
   "name": "word_job",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5365,
   "name": "word_us",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5367,
   "name": "word_very",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5371,
   "name": "word_when",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5375,
   "name": "word_walk",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5379,
   "name": "word_we",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5381,
   "name": "word_well",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5385,
   "name": "word_where",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5390,
   "name": "word_will",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5394,
   "name": "word_blank9",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5395,
   "name": "word_blank8",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5396,
   "name": "word_blank7",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5397,
   "name": "word_blank6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5398,
   "name": "word_blank5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5399,
   "name": "word_blank4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5400,
   "name": "word_blank3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5401,
   "name": "word_blank2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5402,
   "name": "word_blank1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5404,
   "name": "dict_spare_bytes",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5407,
   "name": "canned_messages",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5411,
   "name": "msg_very_dark",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5419,
   "name": "msg_too_heavy",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5429,
   "name": "msg_from_palyars",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5435,
   "name": "msg_from_mechanoids",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5440,
   "name": "msg_job_offer",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5446,
   "name": "msg_cheese",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5456,
   "name": "msg_message_ends",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5461,
   "name": "msg_communication_room",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5465,
   "name": "msg_hanger",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5469,
   "name": "msg_kitchen",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5472,
   "name": "msg_engine_room",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5476,
   "name": "msg_mechanoid",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5480,
   "name": "msg_palyar_briefing_room",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5486,
   "name": "msg_conference_room",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5490,
   "name": "msg_bil_room",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5497,
   "name": "msg_photon_emitter",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5515,
   "name": "msg_you_have_credits",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5520,
   "name": "msg_exchequer",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5532,
   "name": "msg_just_destroyed",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5538,
   "name": "msg_anti_time_bomb",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5556,
   "name": "msg_novadrive",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5560,
   "name": "msg_metal_detector",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5578,
   "name": "msg_antigrav",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5582,
   "name": "msg_poweramp",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5594,
   "name": "msg_neutron_fuel",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5599,
   "name": "msg_antenna",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5603,
   "name": "msg_energy_crystal",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5608,
   "name": "msg_coffin",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5618,
   "name": "msg_large_box",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5631,
   "name": "msg_useful_armament",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5650,
   "name": "msg_infirmary",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5653,
   "name": "msg_gold",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5657,
   "name": "msg_sights",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5667,
   "name": "msg_medical_supplies",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5672,
   "name": "msg_essential_supply",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5688,
   "name": "msg_winchester",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5702,
   "name": "msg_catering_provisions",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5707,
   "name": "msg_databank",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5719,
   "name": "msg_pass",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5727,
   "name": "msg_kitchen_sink",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5736,
   "name": "msg_ship_destroyed",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5742,
   "name": "msg_enemy_ship_destroyed",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5754,
   "name": "msg_blank_line",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5756,
   "name": "msg_press_return",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5781,
   "name": "msg_pass_holders_only",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5802,
   "name": "msg_load_number",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5810,
   "name": "msg_save_number",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5818,
   "name": "msg_where_am_i",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5823,
   "name": "msg_you_crashed",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5828,
   "name": "msg_good_landing",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5834,
   "name": "msg_ouch",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5843,
   "name": "text_spare_bytes",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5888,
   "name": "model_skull_sign_x",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 5970,
   "name": "model_obj5_vehicle",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6033,
   "name": "model_coffin",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6089,
   "name": "model_falling_graph",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6138,
   "name": "model_cobweb",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6237,
   "name": "model_tripod_board",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6279,
   "name": "model_kitchen_sink",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6406,
   "name": "model_medical_supplies",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6516,
   "name": "model_pepsi_crate",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6674,
   "name": "model_kitchen_cabinet",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6746,
   "name": "model_large_box",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6784,
   "name": "model_sights",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6840,
   "name": "model_pass",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6885,
   "name": "model_catering_provisions",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6952,
   "name": "model_databank",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 6981,
   "name": "model_pyramid",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7006,
   "name": "model_mast",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7078,
   "name": "model_metal_detector",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7114,
   "name": "model_mechanoid",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7244,
   "name": "model_antigrav",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7300,
   "name": "model_neutron_fuel",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7358,
   "name": "model_radio_console",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7542,
   "name": "model_winchester",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7620,
   "name": "model_poweramp",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7686,
   "name": "model_novadrive",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7764,
   "name": "model_antenna",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7822,
   "name": "model_energy_crystal",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7887,
   "name": "model_standard_lamp",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 7948,
   "name": "model_fireplace",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 8042,
   "name": "model_gold",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 8080,
   "name": "model_sofa",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 8232,
   "name": "model_obj10_craft",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 8345,
   "name": "unused_2099",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 8352,
   "name": "canned_msg_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 8416,
   "name": "canned_msg_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 8480,
   "name": "dict_word_lo",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 8544,
   "name": "after_save_load",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 8548,
   "name": "dict_lo_unused_44",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 8560,
   "name": "reset_trap",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 8562,
   "name": "b_2172",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 8565,
   "name": "reset_trap_page",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8575,
   "name": "dict_word_lo_5f",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 8576,
   "name": "dict_word_lo_60",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 8640,
   "name": "dict_word_lo_a0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 8720,
   "name": "dict_word_hi",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 8960,
   "name": "room_data_lo",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 9152,
   "name": "room_data_hi",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 9344,
   "name": "obj_x_mid",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 9351,
   "name": "obj7_x_mid",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9408,
   "name": "obj_h_mid",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 9415,
   "name": "obj7_h_mid",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9472,
   "name": "obj_y_mid",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9479,
   "name": "obj7_y_mid",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9536,
   "name": "obj_x_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 9543,
   "name": "obj7_x_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9600,
   "name": "obj_h_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 9607,
   "name": "obj7_h_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9664,
   "name": "obj_y_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9671,
   "name": "obj7_y_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9728,
   "name": "loc_structure_lo",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 9984,
   "name": "loc_structure_hi",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 10240,
   "name": "obj_model_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 10304,
   "name": "obj_model_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 10368,
   "name": "obj_x_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 10375,
   "name": "obj7_x_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10432,
   "name": "obj_h_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 10439,
   "name": "obj7_h_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10496,
   "name": "obj_y_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 10503,
   "name": "obj7_y_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10560,
   "name": "obj_location",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 10561,
   "name": "obj1_location",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10567,
   "name": "obj7_location",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10574,
   "name": "obj14_location",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10575,
   "name": "obj15_location",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10624,
   "name": "obj_here_list",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 10625,
   "name": "obj_here_first",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 10688,
   "name": "obj_flags",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 10696,
   "name": "obj8_flags",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 10712,
   "name": "obj24_flags",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10714,
   "name": "obj26_flags",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10715,
   "name": "obj27_flags",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10716,
   "name": "obj28_flags",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10728,
   "name": "obj40_flags",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10734,
   "name": "obj46_flags",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10735,
   "name": "obj47_flags",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10736,
   "name": "obj48_flags",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10744,
   "name": "obj56_flags",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10752,
   "name": "view_range_by_height",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11008,
   "name": "loc_state",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11264,
   "name": "map_road_x_from",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11520,
   "name": "map_road_x_to",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 11776,
   "name": "map_road_y_from",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12032,
   "name": "map_road_y_to",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12288,
   "name": "room_01_hangar_0906",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12306,
   "name": "room_02_hangar_0905",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12340,
   "name": "room_03_hangar_0300",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12366,
   "name": "room_04_hangar_1113",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12404,
   "name": "room_05_hangar_0315_dark",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12422,
   "name": "room_06_hangar_8135",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12444,
   "name": "room_07_hangar_136_136",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12454,
   "name": "room_08_hangar_0808",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12472,
   "name": "room_09",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12486,
   "name": "room_0a",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12508,
   "name": "room_0b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12522,
   "name": "room_0c",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12540,
   "name": "room_0d_dark",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12554,
   "name": "room_0e_dark",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12568,
   "name": "room_0f",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12578,
   "name": "room_10_communication",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12588,
   "name": "room_11_dark",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12606,
   "name": "room_12_mech_laboratory",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12620,
   "name": "room_13",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12634,
   "name": "room_14",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12656,
   "name": "room_15",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12674,
   "name": "room_16",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12688,
   "name": "room_17",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12702,
   "name": "room_18",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12720,
   "name": "room_19",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12738,
   "name": "room_1a",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12756,
   "name": "room_1b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12774,
   "name": "room_1c",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12788,
   "name": "room_1d_dark",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12802,
   "name": "room_1e",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12820,
   "name": "room_1f_dark",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12834,
   "name": "room_20",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12860,
   "name": "room_21",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12898,
   "name": "room_22_mech_armoury",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12916,
   "name": "room_23",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12934,
   "name": "room_24",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12952,
   "name": "room_25",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12970,
   "name": "room_26",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 12988,
   "name": "room_27",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13002,
   "name": "room_28",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13020,
   "name": "room_29_palyar_briefing",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13030,
   "name": "room_2a_bank",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13040,
   "name": "room_2b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13054,
   "name": "room_2c",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13076,
   "name": "room_2d",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13090,
   "name": "room_2e",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13108,
   "name": "room_2f_dark",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13118,
   "name": "room_30_mech_stores",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13132,
   "name": "room_31",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13150,
   "name": "room_32_mech_power_room",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13164,
   "name": "room_33",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13178,
   "name": "room_34_dark",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13188,
   "name": "room_35_dark",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13202,
   "name": "room_36",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13216,
   "name": "room_37",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13230,
   "name": "room_38_dark",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13244,
   "name": "room_39",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13254,
   "name": "room_3a",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13264,
   "name": "room_3b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13278,
   "name": "room_3c",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13292,
   "name": "room_3d",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13310,
   "name": "room_3e_dark",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13324,
   "name": "room_3f_dark",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13338,
   "name": "room_40_dark",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13352,
   "name": "room_41",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13366,
   "name": "room_42",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13380,
   "name": "room_43",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13394,
   "name": "room_44",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13404,
   "name": "room_45_dark",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13418,
   "name": "room_46_mech_fuel_stores",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13432,
   "name": "room_47",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13450,
   "name": "room_48",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13468,
   "name": "room_49_dark",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13478,
   "name": "room_4a",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13496,
   "name": "room_4b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13510,
   "name": "room_4c",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13528,
   "name": "room_4d",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13542,
   "name": "room_4e",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13556,
   "name": "room_4f_bank",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13574,
   "name": "room_50_dark",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13584,
   "name": "room_51_prison",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13594,
   "name": "room_52_dark",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13604,
   "name": "room_53",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13622,
   "name": "room_54",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13640,
   "name": "room_55",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13662,
   "name": "room_56",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13680,
   "name": "room_57",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13698,
   "name": "room_58",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13712,
   "name": "room_59",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13730,
   "name": "room_5a",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13744,
   "name": "room_5b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13762,
   "name": "room_5c",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13780,
   "name": "room_5d",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13802,
   "name": "room_5e",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13820,
   "name": "room_5f",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13846,
   "name": "room_60",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13864,
   "name": "room_61",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13882,
   "name": "room_62",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13896,
   "name": "room_63_dark",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13926,
   "name": "room_64_dark",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13940,
   "name": "room_65",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13954,
   "name": "room_66_mech_briefing",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13972,
   "name": "room_67",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 13990,
   "name": "room_68",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14008,
   "name": "room_69",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14026,
   "name": "room_6a",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14044,
   "name": "room_6b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14062,
   "name": "room_6c",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14084,
   "name": "room_6d",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14098,
   "name": "room_6e",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14116,
   "name": "room_6f",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14134,
   "name": "room_70",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14156,
   "name": "room_71",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14174,
   "name": "room_72_booth_random",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14200,
   "name": "room_73_booth",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14214,
   "name": "room_74_booth",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14228,
   "name": "room_75_booth",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14242,
   "name": "room_76_booth_one_way",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14256,
   "name": "room_77_booth",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14270,
   "name": "room_78_booth_one_way",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14284,
   "name": "room_79_booth_one_way",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14298,
   "name": "room_7a_booth_one_way",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14312,
   "name": "room_7b_booth",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14326,
   "name": "room_7c_booth",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14340,
   "name": "room_7d_booth",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14354,
   "name": "room_7e_booth",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14368,
   "name": "room_7f_booth_one_way",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14382,
   "name": "room_80_booth_one_way",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14396,
   "name": "room_81_booth_one_way",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14410,
   "name": "room_82_booth",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14424,
   "name": "room_83_booth_one_way",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14438,
   "name": "room_84_booth_one_way",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14452,
   "name": "room_85_booth_one_way",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14466,
   "name": "room_86_booth",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14480,
   "name": "room_87_booth",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14494,
   "name": "room_88_engine_room",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14512,
   "name": "room_89",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14522,
   "name": "room_8a",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14536,
   "name": "room_8b",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14550,
   "name": "room_8c",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14564,
   "name": "room_8d",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14590,
   "name": "room_8e",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14604,
   "name": "room_8f",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14618,
   "name": "room_90_laboratory",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14632,
   "name": "room_91",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14650,
   "name": "room_92_armoury",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14664,
   "name": "room_93_stores",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14678,
   "name": "room_94",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14696,
   "name": "room_95",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14714,
   "name": "room_96_dark",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14736,
   "name": "room_97",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14750,
   "name": "room_98",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14764,
   "name": "room_99",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14790,
   "name": "room_9a_interview_room",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14800,
   "name": "room_9b_conference_room",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14818,
   "name": "room_9c",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14844,
   "name": "room_9d",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14874,
   "name": "room_9e",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14888,
   "name": "room_9f_bank",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14902,
   "name": "room_a0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14912,
   "name": "room_a1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14942,
   "name": "room_a2_exchequer",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14952,
   "name": "room_a3_kitchen",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14962,
   "name": "room_a4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14972,
   "name": "room_a5_infirmary",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14982,
   "name": "room_a6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 14992,
   "name": "room_a7",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15002,
   "name": "room_a8_brother_in_law",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15012,
   "name": "room_a9",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15046,
   "name": "room_aa_control_room",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15064,
   "name": "room_ab",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15086,
   "name": "room_ac",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15108,
   "name": "room_ad_power_room",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15126,
   "name": "room_ae",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15141,
   "name": "model_dart",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15171,
   "name": "model_car",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15245,
   "name": "model_winged_craft",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15308,
   "name": "model_diamond",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15352,
   "name": "model_cheese_wedge",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15381,
   "name": "model_rocket",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15452,
   "name": "model_cube",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15490,
   "name": "model_photon_emitter",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15537,
   "name": "model_key_triangle",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15566,
   "name": "model_key_trapezoid",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15604,
   "name": "model_key_pentagon",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15651,
   "name": "model_key_house",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15698,
   "name": "model_key_inverted_trapezoid",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15736,
   "name": "model_key_hexagon",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15792,
   "name": "model_key_bevelled",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15848,
   "name": "model_anti_time_bomb",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15895,
   "name": "model_useful_armament",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 15969,
   "name": "model_table",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16015,
   "name": "model_chair",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16063,
   "name": "model_bed",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16120,
   "name": "model_skull_sign",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16202,
   "name": "model_lift_cage",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16269,
   "name": "model_colony_craft",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16383,
   "name": "f_3FFF",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16631,
   "name": "f_40F7",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 16879,
   "name": "f_41EF",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17127,
   "name": "f_42E7",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17375,
   "name": "f_43DF",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17623,
   "name": "f_44D7",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 17871,
   "name": "f_45CF",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 18119,
   "name": "f_46C7",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 18367,
   "name": "f_47BF",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 18615,
   "name": "f_48B7",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 18863,
   "name": "f_49AF",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 19111,
   "name": "f_4AA7",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 19359,
   "name": "f_4B9F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 19607,
   "name": "f_4C97",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 19855,
   "name": "f_4D8F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 20103,
   "name": "f_4E87",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 20351,
   "name": "f_4F7F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 20480,
   "name": "handover_copy_and_start",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20482,
   "name": "b_5002",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 20484,
   "name": "a_5004",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 20487,
   "name": "a_5007",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 20490,
   "name": "a_500A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 20493,
   "name": "a_500D",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 20524,
   "name": "handover_spare_jmp",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20527,
   "name": "bitmap_a_tail",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20599,
   "name": "f_5077",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 20847,
   "name": "f_516F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 21095,
   "name": "f_5267",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 21343,
   "name": "f_535F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 21575,
   "name": "f_5447",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 21704,
   "name": "f_54C8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 21824,
   "name": "bitmap_row_hi",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 21848,
   "name": "f_5558",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 21968,
   "name": "bitmap_row_lo",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22112,
   "name": "pixel_or_mask",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22248,
   "name": "f_56E8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 22272,
   "name": "pixel_column_offset",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22432,
   "name": "point_x_mantissa",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22448,
   "name": "point_x_exponent",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22464,
   "name": "point_y_mantissa",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22480,
   "name": "point_y_exponent",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22496,
   "name": "script_vars",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22509,
   "name": "script_location",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22510,
   "name": "script_object",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22511,
   "name": "script_value",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22528,
   "name": "log2_table",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22784,
   "name": "exp2_table",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 23040,
   "name": "sine_mantissa",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 23296,
   "name": "sine_exponent",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 23551,
   "name": "f_5BFF",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 23552,
   "name": "screen_matrix",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 23721,
   "name": "f_5CA9",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 23891,
   "name": "f_5D53",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24061,
   "name": "f_5DFD",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24206,
   "name": "f_5E8E",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24207,
   "name": "f_5E8F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24232,
   "name": "panel_row_17",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 24272,
   "name": "panel_row_18",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 24274,
   "name": "f_5ED2",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24275,
   "name": "f_5ED3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24276,
   "name": "f_5ED4",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24312,
   "name": "panel_row_19",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 24338,
   "name": "a_5F12",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 24352,
   "name": "panel_row_20",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 24386,
   "name": "a_5F42",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 24387,
   "name": "a_5F43",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 24388,
   "name": "a_5F44",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 24389,
   "name": "a_5F45",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 24392,
   "name": "panel_row_21",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 24432,
   "name": "panel_row_22",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 24440,
   "name": "message_window",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 24462,
   "name": "a_5F8E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 24472,
   "name": "panel_row_23",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 24512,
   "name": "panel_row_24",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 24552,
   "name": "screen_spare",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 24568,
   "name": "sprite_pointers",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 24575,
   "name": "f_5FFF",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 24823,
   "name": "f_60F7",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 25071,
   "name": "f_61EF",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 25319,
   "name": "f_62E7",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 25567,
   "name": "f_63DF",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 25815,
   "name": "f_64D7",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 26063,
   "name": "f_65CF",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 26311,
   "name": "f_66C7",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 26559,
   "name": "f_67BF",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 26807,
   "name": "f_68B7",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 27055,
   "name": "f_69AF",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 27303,
   "name": "f_6AA7",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 27551,
   "name": "f_6B9F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 27799,
   "name": "f_6C97",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 28047,
   "name": "f_6D8F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 28295,
   "name": "f_6E87",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 28543,
   "name": "f_6F7F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 28672,
   "name": "intro_starfield_mode",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28673,
   "name": "intro_script",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28681,
   "name": "intro_first_message",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28707,
   "name": "intro_countdown",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28783,
   "name": "intro_novadrive_on",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28791,
   "name": "f_7077",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 28841,
   "name": "intro_destination",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28866,
   "name": "intro_damage_report",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28940,
   "name": "intro_set_credits",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28946,
   "name": "intro_emergency",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29039,
   "name": "f_716F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 29043,
   "name": "intro_novadrive_off",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29105,
   "name": "intro_script_park",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29108,
   "name": "intro_spare",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29184,
   "name": "startup_entry",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 29187,
   "name": "start_play",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 29275,
   "name": "b_725B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29287,
   "name": "f_7267",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 29328,
   "name": "startup_init",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 29333,
   "name": "b_7295",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29346,
   "name": "build_row_tables",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29350,
   "name": "b_72A6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29381,
   "name": "build_column_tables",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29383,
   "name": "b_72C7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29414,
   "name": "start_intro_script",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29430,
   "name": "intro_colours",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29434,
   "name": "intro_init_stars",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 29436,
   "name": "b_72FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29465,
   "name": "intro_frame",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 29468,
   "name": "b_731C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29478,
   "name": "b_7326",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29515,
   "name": "b_734B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29535,
   "name": "f_735F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 29552,
   "name": "intro_move_stars",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 29555,
   "name": "j_7373",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 29557,
   "name": "j_7375",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 29704,
   "name": "b_7408",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29707,
   "name": "intro_speed_control",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 29753,
   "name": "b_7439",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29767,
   "name": "f_7447",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 29787,
   "name": "j_745B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 29796,
   "name": "b_7464",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29799,
   "name": "intro_end_starfield",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 29810,
   "name": "intro_respawn_star",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 29887,
   "name": "intro_last_star",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29888,
   "name": "intro_spread_mask",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29889,
   "name": "intro_spread_offset",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29890,
   "name": "intro_star_depth",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29891,
   "name": "intro_speed",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29892,
   "name": "intro_speed_exponent",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29893,
   "name": "intro_accel_mantissa",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29894,
   "name": "intro_accel_exponent",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29895,
   "name": "intro_decel_mantissa",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29896,
   "name": "intro_decel_exponent",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29897,
   "name": "intro_dead_counter",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29898,
   "name": "intro_planet_approach",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29902,
   "name": "b_74CE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29928,
   "name": "b_74E8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29956,
   "name": "planet_distance_step",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29960,
   "name": "draw_planet_disc",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29982,
   "name": "j_751E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30009,
   "name": "r_7539",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 30010,
   "name": "b_753A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30016,
   "name": "b_7540",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30018,
   "name": "b_7542",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30076,
   "name": "a_757C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30077,
   "name": "a_757D",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30078,
   "name": "a_757E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30079,
   "name": "a_757F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30080,
   "name": "f_7580",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30081,
   "name": "a_7581",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30082,
   "name": "a_7582",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30115,
   "name": "b_75A3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30117,
   "name": "j_75A5",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30141,
   "name": "b_75BD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30144,
   "name": "f_75C0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30145,
   "name": "a_75C1",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30146,
   "name": "a_75C2",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30165,
   "name": "r_75D5",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 30166,
   "name": "planet_edge_left",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30170,
   "name": "planet_edge_right",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30174,
   "name": "planet_columns_left",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30194,
   "name": "planet_columns_right",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30208,
   "name": "f_7600",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30214,
   "name": "leftover_name_list",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30272,
   "name": "sight_sprite",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30336,
   "name": "dial_tape",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30338,
   "name": "f_7682",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30340,
   "name": "f_7684",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30347,
   "name": "f_768B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30351,
   "name": "dial_tape_row15",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 30415,
   "name": "dial_tape_row79",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30432,
   "name": "f_76E0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30433,
   "name": "f_76E1",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30434,
   "name": "f_76E2",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30435,
   "name": "f_76E3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30440,
   "name": "f_76E8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 30464,
   "name": "credits",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30468,
   "name": "offer_amount",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30496,
   "name": "figure_text",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30560,
   "name": "pixel_and_mask",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30720,
   "name": "panel_charset",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30800,
   "name": "charset_title_signs",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30848,
   "name": "charset_title_digits",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30976,
   "name": "charset_title_letters",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31192,
   "name": "charset_hatched_frames",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31232,
   "name": "charset_checker_and_letters",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31448,
   "name": "charset_odd_pieces",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31488,
   "name": "charset_blanks",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31616,
   "name": "charset_bar_phases",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31680,
   "name": "charset_spare_dial",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31744,
   "name": "charset_reverse_figures",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 31872,
   "name": "charset_message_signs",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32000,
   "name": "charset_solid_and_inverse_titles",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32216,
   "name": "charset_slants",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32256,
   "name": "charset_message_letters",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32262,
   "name": "compass_right_slot_base",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32472,
   "name": "compass_glyphs",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32473,
   "name": "f_7ED9",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32480,
   "name": "f_7EE0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32488,
   "name": "f_7EE8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32496,
   "name": "f_7EF0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32504,
   "name": "f_7EF8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32512,
   "name": "compass_glyph_e0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32640,
   "name": "compass_tick_glyphs",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32704,
   "name": "el_dial_glyphs",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32719,
   "name": "f_7FCF",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32720,
   "name": "f_7FD0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32721,
   "name": "f_7FD1",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32735,
   "name": "f_7FDF",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32736,
   "name": "a_7FE0",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32737,
   "name": "f_7FE1",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32738,
   "name": "f_7FE2",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32739,
   "name": "f_7FE3",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32740,
   "name": "f_7FE4",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32741,
   "name": "f_7FE5",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32747,
   "name": "f_7FEB",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32748,
   "name": "f_7FEC",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32749,
   "name": "f_7FED",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32750,
   "name": "f_7FEE",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32751,
   "name": "a_7FEF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32752,
   "name": "a_7FF0",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32753,
   "name": "f_7FF1",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 32767,
   "name": "a_7FFF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32768,
   "name": "cart_header",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32772,
   "name": "cart_signature_blank",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32777,
   "name": "nmi_rti",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32778,
   "name": "obj_angle_xh",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32794,
   "name": "obj_angle_hy",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32810,
   "name": "obj_heading",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32826,
   "name": "bin_to_bcd",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32954,
   "name": "resume_game",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32961,
   "name": "resume_warm_start",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32991,
   "name": "b_80DF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32997,
   "name": "restart_with_setup",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33000,
   "name": "quit_situation",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 33077,
   "name": "hardware_setup",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33085,
   "name": "hardware_setup_keep_zp",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33182,
   "name": "save_or_load_game",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 33249,
   "name": "load_scatter",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 33264,
   "name": "b_81F0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33285,
   "name": "b_8205",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33291,
   "name": "save_load_exit",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 33295,
   "name": "b_820F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33304,
   "name": "save_gather",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 33306,
   "name": "j_821A",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 33321,
   "name": "b_8229",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33342,
   "name": "b_823E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33348,
   "name": "b_8244",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33368,
   "name": "save_file_name",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33374,
   "name": "save_slot_digit",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33375,
   "name": "save_not_load",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33376,
   "name": "save_state_table",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33377,
   "name": "save_state_table_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33378,
   "name": "save_state_table_len",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33419,
   "name": "fp_square",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33442,
   "name": "fp_sqrt",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33467,
   "name": "umul8",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33475,
   "name": "b_82C3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33482,
   "name": "b_82CA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33491,
   "name": "smul8_q7",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33506,
   "name": "b_82E2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33517,
   "name": "b_82ED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33529,
   "name": "r_82F9",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 33530,
   "name": "fp_mul",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33546,
   "name": "b_830A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33562,
   "name": "fp_saturate",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 33576,
   "name": "b_8328",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33580,
   "name": "b_832C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33588,
   "name": "fp_div",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33609,
   "name": "b_8349",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33625,
   "name": "b_8359",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33644,
   "name": "b_836C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33651,
   "name": "b_8373",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33667,
   "name": "b_8383",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33675,
   "name": "fp_add",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33706,
   "name": "b_83AA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33707,
   "name": "fp_add_shift_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33730,
   "name": "b_83C2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33739,
   "name": "b_83CB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33740,
   "name": "b_83CC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33745,
   "name": "b_83D1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33749,
   "name": "fp_normalise",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 33753,
   "name": "b_83D9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33772,
   "name": "b_83EC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33781,
   "name": "b_83F5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33795,
   "name": "b_8403",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33796,
   "name": "fp_add_shift_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33817,
   "name": "j_8419",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 33822,
   "name": "fp_cos10",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33823,
   "name": "fp_sin10",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33833,
   "name": "b_8429",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33844,
   "name": "sincos64",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33858,
   "name": "cos64",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33861,
   "name": "sin64",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33878,
   "name": "r_8456",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 33879,
   "name": "sine64_table",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33911,
   "name": "fp_to_int8",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33926,
   "name": "b_8486",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33927,
   "name": "fp_to_int8_shift",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33935,
   "name": "b_848F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33950,
   "name": "r_849E",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 33951,
   "name": "b_849F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33957,
   "name": "b_84A5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33958,
   "name": "r_84A6",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 33959,
   "name": "fp_to_int16",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 33985,
   "name": "b_84C1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 33986,
   "name": "fp_to_int16_shift",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34048,
   "name": "r_8500",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34049,
   "name": "b_8501",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34059,
   "name": "b_850B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34064,
   "name": "int24_to_fp",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34087,
   "name": "b_8527",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34104,
   "name": "b_8538",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34108,
   "name": "b_853C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34127,
   "name": "b_854F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34131,
   "name": "b_8553",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34140,
   "name": "main_loop",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 34185,
   "name": "b_8589",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34209,
   "name": "main_loop_surface",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 34224,
   "name": "b_85B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34239,
   "name": "b_85BF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34245,
   "name": "b_85C5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34261,
   "name": "b_85D5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34290,
   "name": "scatter_carried_objects",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34297,
   "name": "b_85F9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34347,
   "name": "b_862B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34356,
   "name": "hired_ship_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34376,
   "name": "b_8648",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34403,
   "name": "r_8663",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34404,
   "name": "b_8664",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34448,
   "name": "move_objects",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34450,
   "name": "b_8692",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34533,
   "name": "b_86E5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34568,
   "name": "b_8708",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34574,
   "name": "remove_object",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 34587,
   "name": "missile_collisions",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 34603,
   "name": "b_872B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34680,
   "name": "b_8778",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34688,
   "name": "b_8780",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34702,
   "name": "b_878E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34714,
   "name": "r_879A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34715,
   "name": "building_hit_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34723,
   "name": "b_87A3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34745,
   "name": "b_87B9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34752,
   "name": "r_87C0",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34753,
   "name": "b_87C1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34781,
   "name": "b_87DD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34787,
   "name": "b_87E3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34795,
   "name": "b_87EB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34798,
   "name": "j_87EE",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 34812,
   "name": "b_87FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34834,
   "name": "b_8812",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34838,
   "name": "b_8816",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34859,
   "name": "b_882B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34867,
   "name": "missile_hit_test",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34906,
   "name": "b_885A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34917,
   "name": "b_8865",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34922,
   "name": "fire_missile",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 34928,
   "name": "r_8870",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 34929,
   "name": "b_8871",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34988,
   "name": "b_88AC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 34990,
   "name": "b_88AE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35020,
   "name": "b_88CC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35022,
   "name": "b_88CE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35052,
   "name": "b_88EC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35054,
   "name": "b_88EE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35105,
   "name": "attack_ship_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35110,
   "name": "r_8926",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35111,
   "name": "b_8927",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35172,
   "name": "b_8964",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35196,
   "name": "b_897C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35224,
   "name": "b_8998",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35247,
   "name": "vector_shift_negate",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35279,
   "name": "b_89CF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35291,
   "name": "copy_object_position",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35346,
   "name": "set_object_velocity",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35392,
   "name": "object_difference",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35468,
   "name": "start_script",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35505,
   "name": "r_8AB1",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35506,
   "name": "script_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35533,
   "name": "script_dispatch_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35534,
   "name": "script_dispatch_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35535,
   "name": "r_8ACF",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35536,
   "name": "op24_if_peek",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35552,
   "name": "op24_peek_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35553,
   "name": "op24_peek_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35557,
   "name": "op10_if_random",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35568,
   "name": "op7_if_clock",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 35587,
   "name": "op23_if_bebd_below",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35598,
   "name": "op34_if_craft",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35607,
   "name": "op29_if_obj_in_room",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35620,
   "name": "op19_if_player_in_room",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35629,
   "name": "op18_if_flags",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35639,
   "name": "op12_if_carried",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35649,
   "name": "op9_if_code",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35655,
   "name": "op6_if_square",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35671,
   "name": "op31_if_at_location",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35680,
   "name": "op11_if_key",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35698,
   "name": "op26_if_destroyed",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35708,
   "name": "op33_if_obj_flags",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35719,
   "name": "script_test_false",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 35722,
   "name": "script_test_true",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 35723,
   "name": "script_test_carry",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 35730,
   "name": "script_next",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 35741,
   "name": "r_8B9D",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 35742,
   "name": "script_branch",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 35747,
   "name": "op4_call",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35762,
   "name": "op3_jump",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 35774,
   "name": "op5_return",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35785,
   "name": "script_push",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35794,
   "name": "script_pop",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35803,
   "name": "op32_obj_flags",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35820,
   "name": "b_8BEC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35829,
   "name": "op15_set_var",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35875,
   "name": "location_digits",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35894,
   "name": "op1_print",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35904,
   "name": "b_8C40",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35918,
   "name": "op2_clock_reset",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35927,
   "name": "op8_call_code",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35933,
   "name": "script_call_code",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35945,
   "name": "script_call_jsr",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 35946,
   "name": "script_call_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35947,
   "name": "script_call_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35948,
   "name": "op13_set_counter",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35955,
   "name": "op14_add_counter",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 35960,
   "name": "b_8C78",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35974,
   "name": "b_8C86",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 35977,
   "name": "counter_opcode",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 35992,
   "name": "op21_sum_counters",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36016,
   "name": "b_8CB0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36059,
   "name": "op30_copy_var",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36083,
   "name": "op16_set_flags",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36095,
   "name": "op17_clear_flags",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36109,
   "name": "op25_poke",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36125,
   "name": "op25_poke_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36126,
   "name": "op25_poke_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36130,
   "name": "op20_message",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36141,
   "name": "b_8D2D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36148,
   "name": "op27_random_message",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36160,
   "name": "op28_clear_key",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36166,
   "name": "op22_add_bebd",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36181,
   "name": "b_8D55",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36183,
   "name": "b_8D57",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36189,
   "name": "unused_8d5d",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36190,
   "name": "script_handlers",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36192,
   "name": "script_handlers_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36260,
   "name": "message_start_short",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36266,
   "name": "message_start",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36290,
   "name": "r_8DC2",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 36291,
   "name": "message_tick",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36316,
   "name": "b_8DDC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36318,
   "name": "b_8DDE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36320,
   "name": "b_8DE0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36342,
   "name": "b_8DF6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36357,
   "name": "message_next_char",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 36361,
   "name": "message_char_read",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36362,
   "name": "message_char_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36363,
   "name": "message_char_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36374,
   "name": "b_8E16",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36378,
   "name": "r_8E1A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 36379,
   "name": "b_8E1B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36382,
   "name": "message_next_token",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 36390,
   "name": "message_token_read",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36391,
   "name": "message_token_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36392,
   "name": "message_token_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36413,
   "name": "b_8E3D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36432,
   "name": "b_8E50",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36437,
   "name": "message_literal",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 36459,
   "name": "b_8E6B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36460,
   "name": "message_literal_scan",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36461,
   "name": "message_scan_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36462,
   "name": "message_scan_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36468,
   "name": "message_figure",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 36492,
   "name": "b_8E8C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36513,
   "name": "b_8EA1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36517,
   "name": "b_8EA5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36530,
   "name": "b_8EB2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36538,
   "name": "b_8EBA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36546,
   "name": "build_road_list",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36591,
   "name": "b_8EEF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36627,
   "name": "b_8F13",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36642,
   "name": "road_list_own_square",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 36665,
   "name": "b_8F39",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36678,
   "name": "r_8F46",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 36679,
   "name": "road_list_scan",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 36681,
   "name": "b_8F49",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36710,
   "name": "map_readers",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 36711,
   "name": "map_reader_2c00_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36716,
   "name": "map_reader_2d00_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36721,
   "name": "b_8F71",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36722,
   "name": "map_reader_2e00_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36727,
   "name": "map_reader_2f00_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 36735,
   "name": "road_window_axis",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36753,
   "name": "b_8F91",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36758,
   "name": "b_8F96",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36775,
   "name": "b_8FA7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36780,
   "name": "b_8FAC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36782,
   "name": "road_vertex_slot",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36784,
   "name": "b_8FB0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36801,
   "name": "b_8FC1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36803,
   "name": "road_add",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36824,
   "name": "b_8FD8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36838,
   "name": "b_8FE6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36853,
   "name": "r_8FF5",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 36854,
   "name": "b_8FF6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36856,
   "name": "road_list_preset",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36862,
   "name": "b_8FFE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36886,
   "name": "b_9016",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36906,
   "name": "road_overview",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 36948,
   "name": "draw_roads",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36956,
   "name": "b_905C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36979,
   "name": "b_9073",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 36990,
   "name": "b_907E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37004,
   "name": "b_908C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37021,
   "name": "b_909D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37029,
   "name": "r_90A5",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 37030,
   "name": "b_90A6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37042,
   "name": "b_90B2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37054,
   "name": "go_through_door",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37077,
   "name": "b_90D5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37101,
   "name": "room_exit_position",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37110,
   "name": "enter_room",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 37145,
   "name": "b_9119",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37159,
   "name": "b_9127",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37192,
   "name": "b_9148",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37218,
   "name": "build_room",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37231,
   "name": "b_916F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37263,
   "name": "b_918F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37351,
   "name": "j_91E7",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 37386,
   "name": "b_920A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37412,
   "name": "b_9224",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37414,
   "name": "b_9226",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37423,
   "name": "room_add_door",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 37427,
   "name": "b_9233",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37429,
   "name": "b_9235",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37454,
   "name": "j_924E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 37464,
   "name": "room_door_page",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37486,
   "name": "b_926E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37492,
   "name": "b_9274",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37514,
   "name": "door_plain",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37523,
   "name": "door_triangle_sign",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37540,
   "name": "door_arrow_up",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37559,
   "name": "door_arrow_down",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37578,
   "name": "door_cross",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37591,
   "name": "door_diagonal",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37602,
   "name": "door_triangle",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37609,
   "name": "door_trapezium",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37618,
   "name": "door_pentagon",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37629,
   "name": "door_pointed",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37640,
   "name": "door_wide_top",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37649,
   "name": "door_hexagon",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37662,
   "name": "door_bevelled",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 37675,
   "name": "door_outline_offsets",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37690,
   "name": "room_box_from",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37702,
   "name": "room_box_to",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37715,
   "name": "mirror_world",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37725,
   "name": "b_935D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37739,
   "name": "b_936B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37748,
   "name": "list_room_objects",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37757,
   "name": "b_937D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37768,
   "name": "b_9388",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37780,
   "name": "b_9394",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37790,
   "name": "keep_in_room",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37806,
   "name": "b_93AE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37819,
   "name": "b_93BB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37831,
   "name": "b_93C7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37844,
   "name": "b_93D4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37858,
   "name": "b_93E2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37870,
   "name": "b_93EE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37884,
   "name": "b_93FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37896,
   "name": "b_9408",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37911,
   "name": "b_9417",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37914,
   "name": "find_carried_object",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37916,
   "name": "b_941C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37924,
   "name": "r_9424",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 37925,
   "name": "find_local_object",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37927,
   "name": "b_9427",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37935,
   "name": "r_942F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 37936,
   "name": "door_locked",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 37941,
   "name": "b_9435",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37943,
   "name": "door_check",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37949,
   "name": "b_943D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37950,
   "name": "b_943E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38049,
   "name": "b_94A1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38060,
   "name": "b_94AC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38064,
   "name": "j_94B0",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 38075,
   "name": "b_94BB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38077,
   "name": "j_94BD",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 38103,
   "name": "r_94D7",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 38104,
   "name": "bit_masks",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 38109,
   "name": "bit_mask_20",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38112,
   "name": "city_view_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38132,
   "name": "b_94F4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38140,
   "name": "b_94FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38157,
   "name": "enter_square",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38173,
   "name": "b_951D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38187,
   "name": "b_952B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38194,
   "name": "set_view_range",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 38210,
   "name": "b_9542",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38227,
   "name": "b_9553",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38240,
   "name": "j_9560",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 38261,
   "name": "load_building",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38328,
   "name": "b_95B8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38330,
   "name": "b_95BA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38356,
   "name": "b_95D4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38357,
   "name": "b_95D5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38373,
   "name": "b_95E5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38379,
   "name": "j_95EB",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 38460,
   "name": "b_963C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38461,
   "name": "b_963D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38526,
   "name": "b_967E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38540,
   "name": "r_968C",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 38541,
   "name": "building_coord",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38562,
   "name": "b_96A2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38565,
   "name": "r_96A5",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 38566,
   "name": "collapse_building",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38572,
   "name": "collapse_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38576,
   "name": "b_96B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38595,
   "name": "b_96C3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38598,
   "name": "b_96C6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38608,
   "name": "b_96D0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38611,
   "name": "b_96D3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38616,
   "name": "project_building",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38620,
   "name": "b_96DC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38631,
   "name": "draw_building",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38638,
   "name": "b_96EE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38647,
   "name": "b_96F7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38662,
   "name": "object_loop",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38674,
   "name": "b_9712",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38677,
   "name": "b_9715",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38683,
   "name": "b_971B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38695,
   "name": "r_9727",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 38696,
   "name": "draw_object",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38716,
   "name": "r_973C",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 38717,
   "name": "b_973D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38741,
   "name": "b_9755",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38794,
   "name": "b_978A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38805,
   "name": "b_9795",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38816,
   "name": "b_97A0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38827,
   "name": "b_97AB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38837,
   "name": "b_97B5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38861,
   "name": "b_97CD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38881,
   "name": "b_97E1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38906,
   "name": "take_or_board",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38947,
   "name": "b_9823",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38972,
   "name": "j_983C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 38984,
   "name": "b_9848",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38989,
   "name": "b_984D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38991,
   "name": "b_984F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39089,
   "name": "object_event",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39103,
   "name": "b_98BF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39107,
   "name": "b_98C3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39112,
   "name": "leave_craft",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39116,
   "name": "r_98CC",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 39117,
   "name": "b_98CD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39166,
   "name": "drop_object",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 39175,
   "name": "b_9907",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39195,
   "name": "place_object",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 39248,
   "name": "stop_craft",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39255,
   "name": "object_offset",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39322,
   "name": "within_box",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39357,
   "name": "r_99BD",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 39358,
   "name": "abs_compare",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39381,
   "name": "b_99D5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39389,
   "name": "draw_edge",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 39419,
   "name": "b_99FB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39431,
   "name": "b_9A07",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39468,
   "name": "b_9A2C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39535,
   "name": "b_9A6F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39572,
   "name": "b_9A94",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39648,
   "name": "b_9AE0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39689,
   "name": "b_9B09",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39700,
   "name": "b_9B14",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39710,
   "name": "b_9B1E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39724,
   "name": "edge_end_behind",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 39745,
   "name": "b_9B41",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39779,
   "name": "b_9B63",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39828,
   "name": "b_9B94",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39880,
   "name": "b_9BC8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39921,
   "name": "b_9BF1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39932,
   "name": "b_9BFC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39941,
   "name": "b_9C05",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39952,
   "name": "edge_octant",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 39983,
   "name": "b_9C2F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 39990,
   "name": "edge_clip_start",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 40022,
   "name": "b_9C56",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40060,
   "name": "b_9C7C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40129,
   "name": "b_9CC1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40198,
   "name": "b_9D06",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40267,
   "name": "b_9D4B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40333,
   "name": "edge_plot",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 40344,
   "name": "r_9D98",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 40345,
   "name": "load_motion_record",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40352,
   "name": "b_9DA0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40365,
   "name": "motion_rec_0",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40381,
   "name": "motion_rec_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40397,
   "name": "motion_rec_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40413,
   "name": "motion_rec_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40429,
   "name": "motion_rec_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40445,
   "name": "motion_rec_5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40461,
   "name": "motion_rec_6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40477,
   "name": "motion_rec_7",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40493,
   "name": "motion_rec_8_grounded",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40495,
   "name": "grounded_params",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40509,
   "name": "motion_rec_9_fall",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40525,
   "name": "motion_rec_10_intro",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40541,
   "name": "motion_starship",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40544,
   "name": "motion_descent_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40550,
   "name": "motion_descent_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40554,
   "name": "b_9E6A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40592,
   "name": "b_9E90",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40595,
   "name": "height_to_float",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40606,
   "name": "descent_step_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40622,
   "name": "descent_step_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 40638,
   "name": "motion_fall",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 40654,
   "name": "crash_landing",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 40662,
   "name": "motion_spin",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 40674,
   "name": "b_9EE2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40686,
   "name": "b_9EEE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40698,
   "name": "b_9EFA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40701,
   "name": "motion_ground",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40726,
   "name": "r_9F16",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 40727,
   "name": "motion_flight",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 40734,
   "name": "b_9F1E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40774,
   "name": "b_9F46",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40794,
   "name": "b_9F5A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40816,
   "name": "b_9F70",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40838,
   "name": "b_9F86",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40856,
   "name": "b_9F98",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40927,
   "name": "b_9FDF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40961,
   "name": "craft_add_x_step",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 40974,
   "name": "b_A00E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 40996,
   "name": "b_A024",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41015,
   "name": "craft_climb",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 41053,
   "name": "b_A05D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41065,
   "name": "b_A069",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41067,
   "name": "b_A06B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41094,
   "name": "b_A086",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41096,
   "name": "b_A088",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41114,
   "name": "craft_touchdown_test",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 41135,
   "name": "craft_land",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 41142,
   "name": "b_A0B6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41166,
   "name": "b_A0CE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41175,
   "name": "b_A0D7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41186,
   "name": "craft_colony_deck",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 41207,
   "name": "craft_airborne",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 41218,
   "name": "craft_turn",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 41251,
   "name": "b_A123",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41259,
   "name": "spin_step",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 41276,
   "name": "r_A13C",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 41277,
   "name": "colony_pad_test",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41315,
   "name": "b_A163",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41317,
   "name": "move_player",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41328,
   "name": "b_A170",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41339,
   "name": "stick_mirror_map",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 41355,
   "name": "walk_model",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 41362,
   "name": "b_A192",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41377,
   "name": "b_A1A1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41388,
   "name": "b_A1AC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41409,
   "name": "b_A1C1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41430,
   "name": "b_A1D6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41450,
   "name": "b_A1EA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41453,
   "name": "walk_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41490,
   "name": "b_A212",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41492,
   "name": "b_A214",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41533,
   "name": "b_A23D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41535,
   "name": "b_A23F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41545,
   "name": "r_A249",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 41546,
   "name": "elevator_ride",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 41595,
   "name": "b_A27B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41614,
   "name": "b_A28E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41661,
   "name": "b_A2BD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41680,
   "name": "b_A2D0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41722,
   "name": "b_A2FA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41737,
   "name": "r_A309",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 41738,
   "name": "b_A30A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 41760,
   "name": "view_matrix",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 41769,
   "name": "b_A329",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42162,
   "name": "spin_points",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42167,
   "name": "b_A4B7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42170,
   "name": "j_A4BA",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 42307,
   "name": "r_A543",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 42308,
   "name": "view_trig",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42446,
   "name": "vertex_rel",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42527,
   "name": "model_vertex_rel",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42619,
   "name": "square_centre_rel",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42669,
   "name": "orient_vertex",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42701,
   "name": "b_A6CD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42719,
   "name": "b_A6DF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42737,
   "name": "b_A6F1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42792,
   "name": "rotate_pair",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42844,
   "name": "project_vertex",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 42852,
   "name": "b_A764",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42855,
   "name": "b_A767",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42874,
   "name": "b_A77A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42904,
   "name": "b_A798",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42934,
   "name": "b_A7B6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 42989,
   "name": "b_A7ED",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43019,
   "name": "b_A80B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43049,
   "name": "b_A829",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43103,
   "name": "b_A85F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43133,
   "name": "b_A87D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43137,
   "name": "b_A881",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43156,
   "name": "b_A894",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43186,
   "name": "b_A8B2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43216,
   "name": "b_A8D0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43241,
   "name": "project_vertex_y",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 43250,
   "name": "b_A8F2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43279,
   "name": "b_A90F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43309,
   "name": "b_A92D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43315,
   "name": "b_A933",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43354,
   "name": "b_A95A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43385,
   "name": "project_vertex_level",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 43404,
   "name": "b_A98C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43434,
   "name": "b_A9AA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43484,
   "name": "b_A9DC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43514,
   "name": "b_A9FA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43570,
   "name": "b_AA32",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43600,
   "name": "b_AA50",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43604,
   "name": "b_AA54",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43618,
   "name": "escape_starfield",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 43625,
   "name": "b_AA69",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43635,
   "name": "b_AA73",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43647,
   "name": "b_AA7F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43669,
   "name": "escape_star_frame",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 43678,
   "name": "b_AA9E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43688,
   "name": "b_AAA8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43725,
   "name": "b_AACD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43762,
   "name": "escape_star_update",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 43765,
   "name": "j_AAF5",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 43767,
   "name": "j_AAF7",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 43914,
   "name": "b_AB8A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43917,
   "name": "b_AB8D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43959,
   "name": "b_ABB7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43962,
   "name": "b_ABBA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 43965,
   "name": "escape_star_respawn",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 44042,
   "name": "escape_colour_timer",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44043,
   "name": "escape_colour_step",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44044,
   "name": "escape_colour_table",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44045,
   "name": "escape_colour_matrix",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44060,
   "name": "escape_colour_tick",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44070,
   "name": "escape_colour_apply",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44099,
   "name": "r_AC43",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 44100,
   "name": "b_AC44",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44106,
   "name": "escape_star_last",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44107,
   "name": "escape_star_spread_mask",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44108,
   "name": "escape_star_spread_bias",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44109,
   "name": "escape_star_far_exp",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44110,
   "name": "escape_star_speed",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44111,
   "name": "escape_star_speed_exp",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44112,
   "name": "escape_star_accel",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44113,
   "name": "escape_star_accel_exp",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44114,
   "name": "escape_star_countdown",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44115,
   "name": "line_octant_0_step",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 44129,
   "name": "draw_line_octant_0",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 44150,
   "name": "line_octant_0_pixel_op",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44152,
   "name": "line_octant_0_mask_page",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44161,
   "name": "r_AC81",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 44162,
   "name": "line_octant_1_step",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 44176,
   "name": "draw_line_octant_1",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 44197,
   "name": "line_octant_1_pixel_op",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44199,
   "name": "line_octant_1_mask_page",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44208,
   "name": "r_ACB0",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 44209,
   "name": "line_octant_2_step",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 44223,
   "name": "draw_line_octant_2",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 44244,
   "name": "line_octant_2_pixel_op",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44246,
   "name": "line_octant_2_mask_page",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44255,
   "name": "r_ACDF",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 44256,
   "name": "line_octant_3_step",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 44270,
   "name": "draw_line_octant_3",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 44291,
   "name": "line_octant_3_pixel_op",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44293,
   "name": "line_octant_3_mask_page",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44302,
   "name": "r_AD0E",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 44303,
   "name": "line_octant_4_step",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 44317,
   "name": "draw_line_octant_4",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 44338,
   "name": "line_octant_4_pixel_op",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44340,
   "name": "line_octant_4_mask_page",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44349,
   "name": "r_AD3D",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 44350,
   "name": "line_octant_5_step",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 44364,
   "name": "draw_line_octant_5",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 44385,
   "name": "line_octant_5_pixel_op",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44387,
   "name": "line_octant_5_mask_page",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44396,
   "name": "r_AD6C",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 44397,
   "name": "line_octant_6_step",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 44411,
   "name": "draw_line_octant_6",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 44432,
   "name": "line_octant_6_pixel_op",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44434,
   "name": "line_octant_6_mask_page",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44443,
   "name": "r_AD9B",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 44444,
   "name": "line_octant_7_step",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 44458,
   "name": "draw_line_octant_7",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 44479,
   "name": "line_octant_7_pixel_op",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44481,
   "name": "line_octant_7_mask_page",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 44490,
   "name": "r_ADCA",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 44491,
   "name": "plot_point_dot",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 44526,
   "name": "r_ADEE",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 44527,
   "name": "random",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44540,
   "name": "line_mode_clear",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44546,
   "name": "line_mode_or",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44550,
   "name": "line_mode_patch",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 44599,
   "name": "view_curtain_top",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44619,
   "name": "view_split_line",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 44647,
   "name": "view_normal",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 44662,
   "name": "view_mode_operands_normal",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44683,
   "name": "view_split_badline",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 44694,
   "name": "wipe_close",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44701,
   "name": "b_AE9D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44722,
   "name": "b_AEB2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44728,
   "name": "b_AEB8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44755,
   "name": "wipe_finish",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 44772,
   "name": "b_AEE4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44779,
   "name": "b_AEEB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44787,
   "name": "wipe_open",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44819,
   "name": "b_AF13",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44823,
   "name": "j_AF17",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 44825,
   "name": "b_AF19",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44849,
   "name": "b_AF31",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44858,
   "name": "wipe_hum_high",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44862,
   "name": "wipe_hum_low",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44864,
   "name": "b_AF40",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44866,
   "name": "b_AF42",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44882,
   "name": "wipe_hum_table",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 44910,
   "name": "frame_start",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 44918,
   "name": "b_AF76",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44932,
   "name": "flip_buffers",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 44951,
   "name": "b_AF97",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44961,
   "name": "b_AFA1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44968,
   "name": "ground_flash",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 44983,
   "name": "b_AFB7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 44989,
   "name": "b_AFBD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45002,
   "name": "black_flash_countdown",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 45013,
   "name": "draw_sky_ground",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 45041,
   "name": "b_AFF1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45047,
   "name": "b_AFF7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45074,
   "name": "b_B012",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45078,
   "name": "b_B016",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45099,
   "name": "b_B02B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45162,
   "name": "horizon_side_entry",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 45226,
   "name": "horizon_off_view",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 45248,
   "name": "b_B0C0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45250,
   "name": "b_B0C2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45255,
   "name": "b_B0C7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45272,
   "name": "b_B0D8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45278,
   "name": "b_B0DE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45281,
   "name": "horizon_rows",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 45287,
   "name": "j_B0E7",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 45305,
   "name": "b_B0F9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45311,
   "name": "horizon_right_entry",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 45323,
   "name": "b_B10B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45329,
   "name": "horizon_left_entry",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 45341,
   "name": "b_B11D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45397,
   "name": "b_B155",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45415,
   "name": "r_B167",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 45416,
   "name": "horizon_fill_rest",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 45430,
   "name": "b_B176",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45432,
   "name": "fill_rows",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 45438,
   "name": "b_B17E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45462,
   "name": "r_B196",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 45463,
   "name": "clear_view_interior",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 45473,
   "name": "fill_view_4000",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45543,
   "name": "fill_view_6000",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 45613,
   "name": "flash_white",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45618,
   "name": "set_target_colours_surface",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45620,
   "name": "b_B234",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45634,
   "name": "flash_black",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45636,
   "name": "flash_view",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 45648,
   "name": "b_B250",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45664,
   "name": "b_B260",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45680,
   "name": "reset_colours",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45682,
   "name": "b_B272",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45693,
   "name": "surface_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 45697,
   "name": "scan_keyboard",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45722,
   "name": "b_B29A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45736,
   "name": "b_B2A8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45771,
   "name": "j_B2CB",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 45777,
   "name": "b_B2D1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45784,
   "name": "b_B2D8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45791,
   "name": "b_B2DF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45792,
   "name": "b_B2E0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45812,
   "name": "b_B2F4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45816,
   "name": "b_B2F8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45822,
   "name": "read_controls",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 45859,
   "name": "r_B323",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 45860,
   "name": "b_B324",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45873,
   "name": "key_dispatch",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 45887,
   "name": "b_B33F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45897,
   "name": "b_B349",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45910,
   "name": "b_B356",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45921,
   "name": "b_B361",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45932,
   "name": "b_B36C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45943,
   "name": "b_B377",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45954,
   "name": "save_load_dialog",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 45963,
   "name": "b_B38B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 45991,
   "name": "b_B3A7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46013,
   "name": "b_B3BD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46033,
   "name": "b_B3D1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46038,
   "name": "show_message_wait",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46045,
   "name": "b_B3DD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46052,
   "name": "key_ctrl_q",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 46070,
   "name": "key_e_or_speed",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 46077,
   "name": "key_e_elevator",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 46080,
   "name": "elevator_start",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 46110,
   "name": "b_B41E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46124,
   "name": "b_B42C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46127,
   "name": "r_B42F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 46128,
   "name": "b_B430",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46142,
   "name": "b_B43E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46165,
   "name": "b_B455",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46176,
   "name": "b_B460",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46192,
   "name": "b_B470",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46206,
   "name": "key_speed_digit",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 46233,
   "name": "key_speed_trim",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 46258,
   "name": "key_used",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46262,
   "name": "elevator_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 46263,
   "name": "elevator_squares",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 46270,
   "name": "elevator_y",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 46279,
   "name": "panel_msg_colour",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46284,
   "name": "b_B4CC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46291,
   "name": "msg_colour_now",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 46292,
   "name": "panel_el_colour",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46317,
   "name": "panel_comp_colour",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46342,
   "name": "panel_init_colours",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46346,
   "name": "b_B50A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46375,
   "name": "b_B527",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46397,
   "name": "panel_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46402,
   "name": "b_B542",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46431,
   "name": "b_B55F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46435,
   "name": "b_B563",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46437,
   "name": "b_B565",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46445,
   "name": "b_B56D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46515,
   "name": "b_B5B3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46517,
   "name": "b_B5B5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46570,
   "name": "b_B5EA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46577,
   "name": "b_B5F1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46579,
   "name": "b_B5F3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46583,
   "name": "b_B5F7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46621,
   "name": "b_B61D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46639,
   "name": "alt_next_digit",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46668,
   "name": "loc_coordinate",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46678,
   "name": "b_B656",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46690,
   "name": "panel_two_digits",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46715,
   "name": "el_dial_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46740,
   "name": "b_B694",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46747,
   "name": "b_B69B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46768,
   "name": "b_B6B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46797,
   "name": "b_B6CD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46813,
   "name": "j_B6DD",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 46857,
   "name": "b_B709",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46886,
   "name": "b_B726",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46894,
   "name": "b_B72E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46921,
   "name": "el_dial_quarter_colour",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 46935,
   "name": "el_dial_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 46939,
   "name": "el_dial_back",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 46958,
   "name": "b_B76E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 46989,
   "name": "b_B78D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47005,
   "name": "j_B79D",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 47049,
   "name": "b_B7C9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47078,
   "name": "b_B7E6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47086,
   "name": "b_B7EE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47113,
   "name": "comp_dial_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47138,
   "name": "b_B822",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47145,
   "name": "b_B829",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47164,
   "name": "b_B83C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47168,
   "name": "b_B840",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47222,
   "name": "b_B876",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47224,
   "name": "b_B878",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47239,
   "name": "comp_quarter_colour",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47252,
   "name": "r_B894",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 47253,
   "name": "comp_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47257,
   "name": "comp_dial_forward",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 47278,
   "name": "b_B8AE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47310,
   "name": "b_B8CE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47312,
   "name": "b_B8D0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47326,
   "name": "b_B8DE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47328,
   "name": "b_B8E0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47350,
   "name": "zp_swap",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47352,
   "name": "b_B8F8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47370,
   "name": "b_B90A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47376,
   "name": "sid_init",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47378,
   "name": "b_B912",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47393,
   "name": "sid_init_values",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47418,
   "name": "sound_voice2",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47429,
   "name": "beep_surface_vehicle",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47433,
   "name": "beep_vehicle",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47437,
   "name": "beep",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47447,
   "name": "r_B957",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 47448,
   "name": "sound_voice1",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47457,
   "name": "b_B961",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47493,
   "name": "sound_save_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47494,
   "name": "sound_save_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47495,
   "name": "snd_freq_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47496,
   "name": "snd_attack_decay",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47497,
   "name": "snd_sustain_release",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47498,
   "name": "snd_control",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 47531,
   "name": "snd_engine_freq_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47533,
   "name": "snd_engine_sr",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47547,
   "name": "irq_view",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 47549,
   "name": "irq_view_d018_src",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47554,
   "name": "irq_view_d011",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47569,
   "name": "irq_view_next_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47574,
   "name": "irq_view_next_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47579,
   "name": "irq_view_next_line",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47590,
   "name": "irq_split_delayed",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 47608,
   "name": "irq_split",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 47610,
   "name": "irq_split_d018_src",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47615,
   "name": "irq_split_d011",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 47646,
   "name": "irq_panel",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 47700,
   "name": "b_BA54",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47712,
   "name": "j_BA60",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 47730,
   "name": "b_BA72",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47736,
   "name": "b_BA78",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47739,
   "name": "elevator_ride_down",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 47783,
   "name": "b_BAA7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47791,
   "name": "b_BAAF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47805,
   "name": "b_BABD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47811,
   "name": "b_BAC3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47813,
   "name": "b_BAC5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47819,
   "name": "b_BACB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47826,
   "name": "b_BAD2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47830,
   "name": "b_BAD6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47837,
   "name": "elevator_ride_up",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 47901,
   "name": "b_BB1D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47919,
   "name": "elevator_ride_end",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47927,
   "name": "split_both_text",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47944,
   "name": "view_colours",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47951,
   "name": "view_colours_y",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 47965,
   "name": "b_BB5D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47967,
   "name": "b_BB5F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 47997,
   "name": "r_BB7D",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 47998,
   "name": "flash_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48009,
   "name": "elevator_steps",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48037,
   "name": "elevator_hum_pitch",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48066,
   "name": "col_msg_window",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48067,
   "name": "col_el_dial",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48068,
   "name": "col_loc_figures",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48069,
   "name": "col_alt_figures",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48070,
   "name": "col_speed_figures",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48071,
   "name": "col_comp_dial",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48074,
   "name": "shaft_colours",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48078,
   "name": "shaft_colour_12",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48079,
   "name": "shaft_colour_13",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48080,
   "name": "octant_map",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48081,
   "name": "row_mask_7",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48088,
   "name": "octant_clip_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48096,
   "name": "octant_clip_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48104,
   "name": "clip_index_bits",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48120,
   "name": "clip_start_test",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48152,
   "name": "clip_end_test",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48184,
   "name": "octant_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48192,
   "name": "octant_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48200,
   "name": "pixel_masks",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48204,
   "name": "horizon_edge_bytes",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48208,
   "name": "key_speed_values",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48272,
   "name": "unused_bc90",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48314,
   "name": "atari_dos_menu_text",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 48384,
   "name": "fill_row_right",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 48547,
   "name": "shot_timer",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48555,
   "name": "shot_dx_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48563,
   "name": "shot_dx_mid",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48571,
   "name": "shot_dx_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48579,
   "name": "shot_dh_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48587,
   "name": "shot_dh_mid",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48595,
   "name": "shot_dh_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48603,
   "name": "shot_dy_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48611,
   "name": "shot_dy_mid",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48619,
   "name": "shot_dy_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48640,
   "name": "fill_row_left",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 48800,
   "name": "motion_handler",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48802,
   "name": "mot_turn_keep",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48803,
   "name": "mot_turn_keep_exp",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48804,
   "name": "mot_turn_push",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48805,
   "name": "mot_turn_push_exp",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48806,
   "name": "mot_pitch_step",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48807,
   "name": "mot_bank_scale",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48808,
   "name": "mot_climb",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48809,
   "name": "mot_climb_exp",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48810,
   "name": "mot_drag",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48811,
   "name": "mot_drag_exp",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48813,
   "name": "mot_ceiling",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48814,
   "name": "mot_thrust",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48815,
   "name": "mot_thrust_exp",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48816,
   "name": "carried_list",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48817,
   "name": "carried_first",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48827,
   "name": "sites_lost_palyar",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48828,
   "name": "sites_lost_mechanoid",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48829,
   "name": "script_standing",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48830,
   "name": "rot_sin",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48831,
   "name": "rot_cos",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48832,
   "name": "script_flags",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48834,
   "name": "script_stack",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48888,
   "name": "attack_on",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48889,
   "name": "location_word",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 48894,
   "name": "escape_state",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48895,
   "name": "hired_ship_state",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 48897,
   "name": "zp_copy",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49149,
   "name": "restart_vec_copy",
   "type": "Pointer",
   "kind": "user"
  },
  {
   "address": 49152,
   "name": "city_vaned_pyramid",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49279,
   "name": "city_octagon_frustum",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49404,
   "name": "city_inverted_pyramid",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49489,
   "name": "city_twin_pyramids",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49624,
   "name": "city_banded_arch",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49733,
   "name": "city_ribbed_dome",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 49898,
   "name": "city_spire_group",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50038,
   "name": "city_arrowhead_spike",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50129,
   "name": "city_bosher_stadium",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50292,
   "name": "city_star_needle",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50411,
   "name": "models_end_mark_c4eb",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50414,
   "name": "city_flared_column",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50593,
   "name": "city_apsed_hall",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50731,
   "name": "city_spire_clusters",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 50916,
   "name": "city_two_pyramids",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 51022,
   "name": "city_faceted_gem",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 51119,
   "name": "models_end_mark_c7af",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 51122,
   "name": "city_atari_sign",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 51246,
   "name": "city_commodore_sign",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 51354,
   "name": "city_four_blocks",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 51527,
   "name": "city_octagon_tower",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 51640,
   "name": "city_ground_star",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 51799,
   "name": "city_arcade",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52000,
   "name": "city_crown",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52183,
   "name": "city_strut_tent",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52314,
   "name": "city_road_grid_spike",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52513,
   "name": "city_arrow_marking",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52672,
   "name": "city_ground_grid",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52769,
   "name": "models_end_mark_ce21",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52772,
   "name": "city_encounter_billboard",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 52982,
   "name": "city_start_pad_spinner",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 53029,
   "name": "city_sabins_cube",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 53095,
   "name": "models_end_mark_cf67",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 53098,
   "name": "stale_object_models_copy",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 55295,
   "name": "f_D7FF",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55296,
   "name": "a_D800",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 55465,
   "name": "f_D8A9",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55635,
   "name": "f_D953",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55805,
   "name": "f_D9FD",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55975,
   "name": "f_DAA7",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56058,
   "name": "a_DAFA",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 56059,
   "name": "a_DAFB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 56064,
   "name": "f_DB00",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56073,
   "name": "f_DB09",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56082,
   "name": "f_DB12",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56098,
   "name": "a_DB22",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 56099,
   "name": "a_DB23",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 56130,
   "name": "a_DB42",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 56131,
   "name": "a_DB43",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 56132,
   "name": "a_DB44",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 56133,
   "name": "a_DB45",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 56135,
   "name": "f_DB47",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56138,
   "name": "a_DB4A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 56139,
   "name": "a_DB4B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 56170,
   "name": "a_DB6A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 56171,
   "name": "a_DB6B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 56172,
   "name": "a_DB6C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 56173,
   "name": "a_DB6D",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 56178,
   "name": "a_DB72",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 56179,
   "name": "a_DB73",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 56183,
   "name": "f_DB77",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 57344,
   "name": "city_road_ew",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57373,
   "name": "city_road_ns",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57402,
   "name": "city_road_cross",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57455,
   "name": "city_road_tee_south",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57496,
   "name": "city_road_tee_north",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57537,
   "name": "city_road_tee_west",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57578,
   "name": "city_road_tee_east",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57619,
   "name": "city_road_bend_es",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57648,
   "name": "city_road_bend_ws",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57677,
   "name": "city_road_bend_wn",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57706,
   "name": "city_road_bend_en",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57735,
   "name": "city_road_end_w",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57754,
   "name": "city_road_end_e",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57773,
   "name": "city_road_end_n",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57792,
   "name": "city_road_end_s",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57811,
   "name": "city_jordan_airport",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 57919,
   "name": "city_airport_ground_sign",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58040,
   "name": "city_ruled_cube",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58169,
   "name": "city_square_tower",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58205,
   "name": "city_radar_dish",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58317,
   "name": "city_spinner_tower",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58404,
   "name": "city_lattice_pylon",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58487,
   "name": "city_bridge_ns",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58606,
   "name": "city_small_block",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58676,
   "name": "city_pyramid_roof_tower",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58754,
   "name": "city_leaning_beam",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58829,
   "name": "city_flat_arch_ns",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58918,
   "name": "city_obelisk",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 58965,
   "name": "city_cottage",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59066,
   "name": "city_four_towers",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59263,
   "name": "city_vault",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59391,
   "name": "city_cone_in_rim",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59465,
   "name": "city_plinth_tower",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59533,
   "name": "city_novabill_head",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59638,
   "name": "city_tripod_needle",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59686,
   "name": "city_linked_towers",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59815,
   "name": "city_lift_cage",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 59937,
   "name": "city_hooked_wall",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60068,
   "name": "city_stepped_block",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60222,
   "name": "city_crossed_slabs",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60393,
   "name": "city_mechanoid_fort",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60490,
   "name": "city_vector_henge",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60655,
   "name": "city_stacked_cubes",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60832,
   "name": "city_lattice_mast",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 60975,
   "name": "city_bowtie_cones",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61104,
   "name": "city_maze_marking",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61271,
   "name": "city_walton_monument",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61440,
   "name": "f_F000",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 61443,
   "name": "city_tyler_point",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61530,
   "name": "city_spike_scatter",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61706,
   "name": "city_i_block",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61840,
   "name": "city_two_long_houses",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 61953,
   "name": "city_triangle_pyramid",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62045,
   "name": "city_cone_drum",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62164,
   "name": "city_moorby_arch",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62285,
   "name": "city_flared_prisms",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62419,
   "name": "city_st_stallards",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62536,
   "name": "city_coach_and_horses",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62695,
   "name": "city_faceted_gate",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62811,
   "name": "city_canopy",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 62944,
   "name": "city_cross_wings",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 63082,
   "name": "city_pyramid_cross_base",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 63232,
   "name": "city_five_blocks",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 63362,
   "name": "city_upright_star",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 63476,
   "name": "city_five_pyramids",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 63595,
   "name": "city_five_spikes",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 63743,
   "name": "city_roofed_hall",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 63910,
   "name": "city_stepped_pyramid",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64027,
   "name": "city_octagon_ring",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64136,
   "name": "models_end_mark_fa88",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64139,
   "name": "city_twin_hex_towers",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64331,
   "name": "city_arch_on_legs",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64496,
   "name": "city_water_tower",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64641,
   "name": "city_ziggurat",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64771,
   "name": "city_h_frame",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 64922,
   "name": "city_spike_field",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 65071,
   "name": "city_funnel",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 65176,
   "name": "city_chamfered_pair",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 65332,
   "name": "city_horned_base",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 65409,
   "name": "s_FF81",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 65412,
   "name": "s_FF84",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 65424,
   "name": "s_FF90",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 65466,
   "name": "s_FFBA",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 65469,
   "name": "s_FFBD",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 65488,
   "name": "models_end_mark_ffd0",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 65493,
   "name": "s_FFD5",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 65496,
   "name": "s_FFD8",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 65530,
   "name": "nmi_vector",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 65532,
   "name": "reset_vector_unused",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 65534,
   "name": "irq_vector",
   "type": "UserDefined",
   "kind": "user"
  }
 ],
 "comments": [
  {
   "address": 0,
   "type": "line",
   "text": "6510 data direction register for the port at $01. The game never writes it: the one listed reference, STA $0000,X at $500B, is the hand-over copy loop whose operand high bytes $5011-$501A step up page by page, so that store really fills $F000-$FFFF."
  },
  {
   "address": 1,
   "type": "line",
   "text": "6510 processor port, the memory banking. $8135 sets $36 while it sets up and $35 for play (RAM at $A000 and $E000, I/O at $D000); $80BA and $819E-$81BB set $36 around the KERNAL save/load; $B3BB sets $05 (cassette motor on) while CTRL+S/L waits for a key, $B3C8 puts $35 back. No write in the game sets $34 or $30, so the RAM under the I/O area is never visible to the game's code."
  },
  {
   "address": 2,
   "type": "line",
   "text": "Pointer low byte ($02/$03), mostly a bitmap address: the row base from $55D0/$5540 plus $25 in the octant line routines $AC53-$ADCA and the dot plotter $ADCB, the row being filled by the horizon code $B0E1-$B196 and the unrolled fillers $BD00/$BE00, the star plots of $7319 and $AA95, the disc of $7508. $9575 uses it as the pointer to a building model (from $2600/$2700)."
  },
  {
   "address": 3,
   "type": "line",
   "text": "Pointer high byte, pair of $02: the bitmap page ($40-$5F or $60-$7F: row table $5540 plus $25 or $40); $AF6E starts it at $25 for the horizon fill, which steps it with INC/DEC; in $9575 the building model's page."
  },
  {
   "address": 4,
   "type": "line",
   "text": "Low byte of the line-routine vector used by JMP ($0004) at $9D95: $9C1A loads it from $BC38 by the octant number in $67. The start-up disc routine $7508 uses $04/$05 as a bitmap pointer instead (the lower row, left half)."
  },
  {
   "address": 5,
   "type": "line",
   "text": "High byte of the line-routine vector (from $BC40 at $9C1F): with $04 it points at one of the eight octant routines $AC61-$ADAA. In $7508, the lower disc row's bitmap page."
  },
  {
   "address": 6,
   "type": "line",
   "text": "Scratch byte shared by many routines: the product's low byte in $82BB and the first factor in $82D3, shift work in the float routines $8334/$838B/$84A7/$8510, Y save in the octant routines, the column in the key scan $B281, loop counter of the BCD money ops $8C73/$8C98 and of $8E88, row/column work in $871B/$8EC2/$950D, height bits in the building loader $9575, flag bits in $99DD and $9437."
  },
  {
   "address": 7,
   "type": "line",
   "text": "Second scratch byte: the low byte of a 24-bit integer handed to $8510 (int to float) by $A5CE/$A61F/$9728/$94E0 and the starfields; the result sign in $82D3; the key being built by the matrix scan $B281 (row*8+column, bit 6 SHIFT, bit 7 CTRL) before it goes to $E9; reverse-video bit of the LOC figures ($B64C); saved Y in script op 21."
  },
  {
   "address": 8,
   "type": "line",
   "text": "Float accumulator, mantissa byte (float: mantissa byte, then exponent byte = exponent*4 + sign in bit 0): operand and result of the log-table arithmetic $82FA (multiply), $8334 (divide), $838B (add), $828B (square), $8510 (int to float). Also a plain temporary: multiplicand of $82BB, argument of $8EC2 (view radius) and of $90BE (destination room, 0 = the surface), the octant routines' error term (starts at $80), the horizon's x fraction."
  },
  {
   "address": 9,
   "type": "line",
   "text": "Float accumulator, exponent-and-sign byte, pair of $08: bits 7-2 the signed power of two, bit 0 the sign, bit 1 the carry catcher the add/multiply routines clear. Also a plain temporary: multiplier of $82BB, the $90BE entry offset into the room record, $886A's exponent offset for the missile speed, the horizon's integer x ($B0E1)."
  },
  {
   "address": 10,
   "type": "line",
   "text": "Float temporary 1, mantissa: partial sums in the view transform $A75C, the matrix build $A320, the clipper $99DD and $A4B2. Elsewhere a saved index: X in $871B, $8833 and $9602; the out-of-city flags shifted in by $8EC2; the first coordinate of the 2-D rotation $A728; a float in the disc routine $7508."
  },
  {
   "address": 11,
   "type": "line",
   "text": "Float temporary 1, exponent byte (pair of $0A); also the saved Y of $8833 and the second coordinate of the 2-D rotation $A728."
  },
  {
   "address": 12,
   "type": "line",
   "text": "Float temporary 2, mantissa (partial products in $A75C and $99DD); the product in $A728. In the start-up disc routine $7508 it is the upper row number, counting down from $43."
  },
  {
   "address": 13,
   "type": "line",
   "text": "Float temporary 2, exponent byte (pair of $0C). In $7508 the lower disc row number, counting up from $44."
  },
  {
   "address": 14,
   "type": "line",
   "text": "Low byte of a bitmap pointer used only by the start-up planet disc $7508: the upper row's right half ($02 + $A0)."
  },
  {
   "address": 15,
   "type": "line",
   "text": "High byte of the $7508 upper-row right-half pointer (pair of $0E)."
  },
  {
   "address": 16,
   "type": "line",
   "text": "Low byte of $7508's pointer to the lower row's right half ($04 + $A0)."
  },
  {
   "address": 17,
   "type": "line",
   "text": "High byte of $7508's lower-row right-half pointer (pair of $10). The next bytes, $12-$15, are not referenced by any code found."
  },
  {
   "address": 22,
   "type": "line",
   "text": "Float temporary 3, mantissa: sin(roll)*sin(pitch), then cos(roll)*sin(pitch), in the matrix build $A320; in the horizon code $AF6E, tan(pitch) scaled by $21 (clamped to $00/$74 on overflow)."
  },
  {
   "address": 23,
   "type": "line",
   "text": "Float temporary 3, exponent byte (pair of $16). The BIT $17 at $FFBD is in RAM under the KERNAL that the tracer followed a JSR into, not game code."
  },
  {
   "address": 24,
   "type": "line",
   "text": "Float add $838B: exponent byte of X,Y minus that of $08/$09; bit 0 then says whether the signs differ (add or subtract the mantissas). Read again at $8359 and $8410."
  },
  {
   "address": 25,
   "type": "line",
   "text": "Loop index of the item being processed: the vertex number $A75C stores its results under (vertex loops $96D8, $9054, $9728, $A4B2), the edge number in $96E7 and $9054, the star number in the starfields $7319/$AA95, the map window width in $8EC2, the raster line of the wipe in $AE96/$AEF3."
  },
  {
   "address": 26,
   "type": "line",
   "text": "Row counter: rows of the map window still to scan in $8EC2; in the horizon fill ($AF6E, $B0E1, $B178) the bitmap row being filled, from $78 up to $FF (136 rows through the tables $5558/$54C8)."
  },
  {
   "address": 27,
   "type": "line",
   "text": "Pointer to the current underground room's record, low byte, from $2300,X ($90FA); read by $90BE (entry position), $9162 (size, colours, name message, contents) and the door test $9437."
  },
  {
   "address": 28,
   "type": "line",
   "text": "Room record pointer high byte, from $23C0,X (pair of $1B). $9127 writes back into the record through it: entering a transporter room rewrites that room's first door (record bytes 5 and 6)."
  },
  {
   "address": 29,
   "type": "line",
   "text": "Pointer to the current object's model, low byte, from $2800,X ($9728): byte 0 the last vertex number, then three bytes per vertex, each offset by $80 (read by $A61F), then the edge count and packed or byte-pair edges."
  },
  {
   "address": 30,
   "type": "line",
   "text": "Object model pointer high byte, from $2840,X (pair of $1D)."
  },
  {
   "address": 31,
   "type": "line",
   "text": "Event-script program counter, low byte: the interpreter $8AB2 reads operations through ($1F),Y and the handlers step it ($8B92). Set from the word table $0800 ($7203, $8A8C); $7290 points it at $7001, the opening sequence's script."
  },
  {
   "address": 32,
   "type": "line",
   "text": "Event-script program counter, high byte (pair of $1F); calls push both bytes on $BEC2 through $8BC9."
  },
  {
   "address": 33,
   "type": "line",
   "text": "Projection scale as an exponent increment: $18, i.e. times 64 (the focal length in pixels), added to the exponent of X/Z and Y/Z before they become screen offsets ($A86B, $A91B, $AA3E) and used by the clipper $99DD and the horizon $B023. No code writes it; the value comes from the game's zero-page image ($BF21), which a saved position also restores. (The references from $FFC6/$FFC8 are RAM under the KERNAL, not code.)"
  },
  {
   "address": 34,
   "type": "line",
   "text": "Flight model turn rate (float, mantissa), in the vehicle handler $9F17: multiplied each pass by the damping $BEA2/$BEA3, joystick left or right adds $BEA4/$BEA5 or its negative; its integer adds to the heading $2C/$2D ($A102), and while airborne it sets the roll $28/$29 ($A119)."
  },
  {
   "address": 35,
   "type": "line",
   "text": "Flight model turn rate, exponent byte (pair of $22); $A11B adds $BEA7 to it to scale the bank angle."
  },
  {
   "address": 36,
   "type": "line",
   "text": "Pass counter for the double buffer: $AF6E increments it each pass; bit 0 set means draw into $6000 and show $4000 ($25 = $60, $C7 = $70), clear the reverse. $90BE decrements it once when a door leads back to the surface. $FFC4 AND ($24,X) is RAM under the KERNAL, not game code."
  },
  {
   "address": 37,
   "type": "line",
   "text": "High byte of the bitmap being drawn, $40 or $60, set by $AF6E each pass; added to the row table $5540 by the line routines, the dot plotter $ADCB and the horizon code."
  },
  {
   "address": 38,
   "type": "line",
   "text": "Actual speed of the craft (float, mantissa): in $9F17 it moves towards the set speed $EC/$ED (times $BEAE/$BEAF, smoothed by $BEAA/$BEAB), then scales the step of the position. SPEED on the panel shows it ($B5A8, '+' or '-' from the sign) and its top bits set the engine note on SID voice 2 ($B5FC)."
  },
  {
   "address": 39,
   "type": "line",
   "text": "Actual speed, exponent byte (pair of $26); $9950 stores $88 (a value of about 2^-30, i.e. stopped). On the ground $A024 keeps the craft level, with no climb, until this exponent reaches $1C (a speed of 128 or more): the take-off speed."
  },
  {
   "address": 40,
   "type": "line",
   "text": "Roll (bank) angle, low byte; the angle has 1024 steps per turn with the quarter in bits 0-1 of $29. Set while airborne from the turn rate ($A119), zeroed on landing ($A0B6) and by L ($98D5); $A544 takes its sine and cosine."
  },
  {
   "address": 41,
   "type": "line",
   "text": "Roll angle high bits (pair of $28; only bits 0-1 count). The horizon code reads it to pick which side gets which fill ($AFDE, $B0B0)."
  },
  {
   "address": 42,
   "type": "line",
   "text": "Pitch angle, low byte (1024 steps per turn, quarter in $2B); $0200 is level, $0300 at start-up (the forward vector points straight down). Stick up/down adds or takes $BEA6 in flight ($9F60); on the ground below take-off speed $A02C holds it level. The EL dial follows it ($B67B)."
  },
  {
   "address": 43,
   "type": "line",
   "text": "Pitch angle quarter, 0-3 (pair of $2A): 2 = level, set by $80E8, $98DC and $A030; 3 at start-up ($7203); the interstellar ship's handler $AA62 sets 1 while $BEFE is 0 ($AA6E)."
  },
  {
   "address": 44,
   "type": "line",
   "text": "Heading, low byte (1024 steps per turn, quarter in $2D). Walking turns it by $AC per pass ($A1B2), flight by the turn rate ($A10C); boarding restores a vehicle's heading from $802A,X and L stores it back there. COMP shows it ($B809)."
  },
  {
   "address": 45,
   "type": "line",
   "text": "Heading quarter, 0-3 (pair of $2C, masked with AND #$03); 2 after start-up and CTRL+Q."
  },
  {
   "address": 46,
   "type": "line",
   "text": "sin(roll) as a float, mantissa ($A544, from the table $5A00/$5B00 through $841F)."
  },
  {
   "address": 47,
   "type": "line",
   "text": "sin(roll), exponent byte (pair of $2E); read by $A320 and the horizon code $B035."
  },
  {
   "address": 48,
   "type": "line",
   "text": "cos(roll) as a float, mantissa ($A544 through $841E, the sine a quarter turn on)."
  },
  {
   "address": 49,
   "type": "line",
   "text": "cos(roll), exponent byte (pair of $30)."
  },
  {
   "address": 50,
   "type": "line",
   "text": "sin(roll)/cos(roll) as a float, mantissa ($A544, divide $8334); the horizon code $AF6E uses it for the slope."
  },
  {
   "address": 51,
   "type": "line",
   "text": "tan(roll), exponent byte (pair of $32)."
  },
  {
   "address": 52,
   "type": "line",
   "text": "cos(roll)/sin(roll) as a float, mantissa ($A544); $AFF7 turns it into the horizon's per-row step $7B/$7C."
  },
  {
   "address": 53,
   "type": "line",
   "text": "cot(roll), exponent byte (pair of $34); its sign picks the horizon's direction $7D."
  },
  {
   "address": 54,
   "type": "line",
   "text": "sin(pitch) as a float, mantissa ($A544): the height component of the forward vector, copied into the matrix as $4E/$4F; the flight model's climb rate ($A037) and the missile's vertical speed ($88B1) use it."
  },
  {
   "address": 55,
   "type": "line",
   "text": "sin(pitch), exponent byte (pair of $36)."
  },
  {
   "address": 56,
   "type": "line",
   "text": "cos(pitch) as a float, mantissa ($A544); scales the horizontal step in flight ($9FB9, $9FE8) and several matrix entries."
  },
  {
   "address": 57,
   "type": "line",
   "text": "cos(pitch), exponent byte (pair of $38)."
  },
  {
   "address": 58,
   "type": "line",
   "text": "sin(pitch)/cos(pitch) as a float, mantissa ($A544); the horizon code $B01E scales it by $21 into $16/$17."
  },
  {
   "address": 59,
   "type": "line",
   "text": "tan(pitch), exponent byte (pair of $3A)."
  },
  {
   "address": 60,
   "type": "line",
   "text": "sin(heading) as a float, mantissa ($A544): the X step of walking ($A221) and flight ($9FF0), and the heading-only view transform $A979 used on foot and underground."
  },
  {
   "address": 61,
   "type": "line",
   "text": "sin(heading), exponent byte (pair of $3C)."
  },
  {
   "address": 62,
   "type": "line",
   "text": "cos(heading) as a float, mantissa ($A544): the Y step of walking ($A1F6) and flight ($9FC1), and the transform $A979."
  },
  {
   "address": 63,
   "type": "line",
   "text": "cos(heading), exponent byte (pair of $3E)."
  },
  {
   "address": 64,
   "type": "line",
   "text": "View matrix, screen-x row, weight of the X offset (float mantissa), built by $A320 from the roll, pitch and heading terms (sign flipped by $F1). $A75C: X' = dX*$40 + dH*$42 + dY*$44. Built on the surface in a craft, while falling or during the elevator ride; on foot and underground $A75C uses the heading alone ($A979)."
  },
  {
   "address": 65,
   "type": "line",
   "text": "View matrix screen-x row, X weight, exponent byte (pair of $40)."
  },
  {
   "address": 66,
   "type": "line",
   "text": "View matrix screen-x row, weight of the height offset (float mantissa): -sin(roll)*cos(pitch); $A37E also uses it to shift the view centre $8E."
  },
  {
   "address": 67,
   "type": "line",
   "text": "View matrix screen-x row, height weight, exponent byte (pair of $42)."
  },
  {
   "address": 68,
   "type": "line",
   "text": "View matrix screen-x row, weight of the Y offset (float mantissa), from $A320."
  },
  {
   "address": 69,
   "type": "line",
   "text": "View matrix screen-x row, Y weight, exponent byte (pair of $44)."
  },
  {
   "address": 70,
   "type": "line",
   "text": "View matrix screen-y row, weight of the X offset (float mantissa): $A75C forms Y' = dX*$46 + dH*$48 + dY*$4A."
  },
  {
   "address": 71,
   "type": "line",
   "text": "View matrix screen-y row, X weight, exponent byte (pair of $46)."
  },
  {
   "address": 72,
   "type": "line",
   "text": "View matrix screen-y row, weight of the height offset (float mantissa): cos(roll)*cos(pitch); $A429 also uses it to shift the view centre $8F."
  },
  {
   "address": 73,
   "type": "line",
   "text": "View matrix screen-y row, height weight, exponent byte (pair of $48)."
  },
  {
   "address": 74,
   "type": "line",
   "text": "View matrix screen-y row, weight of the Y offset (float mantissa), from $A320."
  },
  {
   "address": 75,
   "type": "line",
   "text": "View matrix screen-y row, Y weight, exponent byte (pair of $4A)."
  },
  {
   "address": 76,
   "type": "line",
   "text": "View matrix depth row, weight of the X offset (float mantissa): cos(pitch)*sin(heading), the forward vector's X; $A75C forms Z = dX*$4C + dH*$4E + dY*$50, and a missile launched by $886A flies along ($4C, $36, $50)."
  },
  {
   "address": 77,
   "type": "line",
   "text": "View matrix depth row, X weight, exponent byte (pair of $4C)."
  },
  {
   "address": 78,
   "type": "line",
   "text": "View matrix depth row, weight of the height offset (float mantissa): a copy of sin(pitch) $36 ($A49A)."
  },
  {
   "address": 79,
   "type": "line",
   "text": "View matrix depth row, height weight, exponent byte (pair of $4E)."
  },
  {
   "address": 80,
   "type": "line",
   "text": "View matrix depth row, weight of the Y offset (float mantissa): cos(pitch)*cos(heading), the forward vector's Y."
  },
  {
   "address": 81,
   "type": "line",
   "text": "View matrix depth row, Y weight, exponent byte (pair of $50)."
  },
  {
   "address": 82,
   "type": "line",
   "text": "Point being transformed, X (float mantissa): before $A75C the offset from the player along X, from $A5CE (scene vertex), $A61F (object vertex), $A67B (map corner) or $9728 (a whole object as one point); in the clipper $99DD endpoint A's view X' (from $0100); in the starfields the star's X."
  },
  {
   "address": 83,
   "type": "line",
   "text": "Point being transformed, X, exponent byte (pair of $52)."
  },
  {
   "address": 84,
   "type": "line",
   "text": "Point being transformed, height (float mantissa); in $99DD endpoint A's view Y' (from $0180); in the starfields the star's Y; the start-up disc $7508 keeps a row value here."
  },
  {
   "address": 85,
   "type": "line",
   "text": "Point being transformed, height, exponent byte (pair of $54)."
  },
  {
   "address": 86,
   "type": "line",
   "text": "Point being transformed, Y (float mantissa); in $99DD endpoint A's depth (from $0340); in the starfields the star's depth. The start-up approach $74CA uses $56/$57 as a 16-bit count from $03FF down to 0 while the planet grows, before $7203 starts the descent."
  },
  {
   "address": 87,
   "type": "line",
   "text": "Point being transformed, Y, exponent byte (pair of $56); in $99DD endpoint A's depth exponent (from $0380)."
  },
  {
   "address": 88,
   "type": "line",
   "text": "Result of the view transform $A75C: X' (float mantissa), stored to $0100,Y; in $99DD endpoint B's X'."
  },
  {
   "address": 89,
   "type": "line",
   "text": "View X', exponent byte (pair of $58), stored to $0140,Y."
  },
  {
   "address": 90,
   "type": "line",
   "text": "Result of $A75C: Y' (float mantissa, the exponent raised by 1 at $A8ED for the pixel aspect), stored to $0180,Y; endpoint B's Y' in $99DD."
  },
  {
   "address": 91,
   "type": "line",
   "text": "View Y', exponent byte (pair of $5A), stored to $02C0,Y."
  },
  {
   "address": 92,
   "type": "line",
   "text": "Result of $A75C: depth Z (float mantissa), stored to $0340,Y; endpoint B's depth in $99DD."
  },
  {
   "address": 93,
   "type": "line",
   "text": "View depth, exponent byte (pair of $5C), stored to $0380,Y; its sign bit becomes bit 7 of the clip code (behind the viewer)."
  },
  {
   "address": 94,
   "type": "line",
   "text": "X'/Z as a float, mantissa: the perspective x of the vertex $A75C is working on (stored to $0600,Y), endpoint A's in $99DD. The starfields keep the star's screen x here."
  },
  {
   "address": 95,
   "type": "line",
   "text": "X'/Z, exponent byte (pair of $5E), stored to $03C0,Y."
  },
  {
   "address": 96,
   "type": "line",
   "text": "Y'/Z as a float, mantissa, for the vertex in $A75C (stored to $7600,Y) and endpoint A in $99DD."
  },
  {
   "address": 97,
   "type": "line",
   "text": "Y'/Z, exponent byte (pair of $60), stored to $0640,Y."
  },
  {
   "address": 98,
   "type": "line",
   "text": "Endpoint B's X'/Z (float mantissa) in the edge clipper $99DD, loaded from $0600,Y."
  },
  {
   "address": 99,
   "type": "line",
   "text": "Endpoint B's X'/Z, exponent byte (pair of $62), from $03C0,Y."
  },
  {
   "address": 100,
   "type": "line",
   "text": "Endpoint B's Y'/Z (float mantissa) in $99DD, from $7600,Y."
  },
  {
   "address": 101,
   "type": "line",
   "text": "Endpoint B's Y'/Z, exponent byte (pair of $64), from $0640,Y."
  },
  {
   "address": 102,
   "type": "line",
   "text": "Slope of the line being drawn as a fraction 0-255 ($FF when the slope is 1), from $99DD; the octant routines $AC53-$ADCA add it to the error term $08 each step."
  },
  {
   "address": 103,
   "type": "line",
   "text": "Line direction: $99DD builds bit 0 (sign of dy), bit 1 (sign of dx), bit 2 (steep), then $9C10 maps it through $BBD0 to the octant number 0-7 that picks the routine ($BC38/$BC40) and the edge-exit tables $BBD8/$BBE0."
  },
  {
   "address": 104,
   "type": "line",
   "text": "Slope of the edge as a float, mantissa (dy/dx or dx/dy), from $99DD; used to move a clipped endpoint onto the screen edge."
  },
  {
   "address": 105,
   "type": "line",
   "text": "Edge slope, exponent byte (pair of $68)."
  },
  {
   "address": 106,
   "type": "line",
   "text": "Screen x (0-159) of endpoint A: from $0680 or computed by $A75C, moved onto the edge by the clipper; the start x handed to the octant routine ($9D8D)."
  },
  {
   "address": 107,
   "type": "line",
   "text": "Screen y (0-135) of endpoint A (from $06C0 or $A75C, clipped), the start y of the line."
  },
  {
   "address": 108,
   "type": "line",
   "text": "Screen x of endpoint B, where the octant routines stop (CPX $6C); replaced by the edge exit from $BBD8 when B is off screen."
  },
  {
   "address": 109,
   "type": "line",
   "text": "Screen y of endpoint B, the octant routines' stop row (CPY $6D); replaced from $BBE0 when B is off screen."
  },
  {
   "address": 110,
   "type": "line",
   "text": "Clip code of the vertex $A75C is projecting and of endpoint A in $99DD: bit 7 behind the viewer, bit 0 x off screen, bit 1 y off screen (stored to $0700,Y); the clipper widens it to edge bits 1 right, 2 bottom, 4 left, 8 top."
  },
  {
   "address": 111,
   "type": "line",
   "text": "Clip code of endpoint B in $99DD (from $0700,Y); non-zero sends the line end to the screen edge."
  },
  {
   "address": 112,
   "type": "line",
   "text": "Number of the scene's last vertex: $96D8 transforms vertices $70 down to 0. $950D copies the building's $89; the room builder $9162 starts at 7 (the box's eight corners) and counts it up as it adds each shape from the templates at $928A."
  },
  {
   "address": 113,
   "type": "line",
   "text": "Number of the scene's last edge: $96E7 draws edges $71 down to 0 from $0580/$05C0. $950D copies the building's $8B; $9162 counts it up from 11 (the box's twelve edges)."
  },
  {
   "address": 114,
   "type": "line",
   "text": "Player X position, low byte of three ($74:$73:$72). Walking ($A22D) and flight ($A003) add to it; in a room $939E keeps $73:$72 between $00:20 and ($0440-1):DF."
  },
  {
   "address": 115,
   "type": "line",
   "text": "Player X position, middle byte: the place within the grid square, $80 its centre; the elevator test wants $70-$73 ($B40C)."
  },
  {
   "address": 116,
   "type": "line",
   "text": "Player X position, high byte: the grid column shown by LOC (0-15 in the city, signed further out; $EF flags beyond +-99). 0 underground ($9162). Script op 6 tests it."
  },
  {
   "address": 117,
   "type": "line",
   "text": "Player height, low byte of three ($77:$76:$75). $3F on the ground (landing, $A0BE; the ground vehicles' handler, $9F04); the elevator ride computes it from $CB ($A256)."
  },
  {
   "address": 118,
   "type": "line",
   "text": "Player height, middle byte; $8C/$8D and the altitude table $2A00 (view radius) are taken from it."
  },
  {
   "address": 119,
   "type": "line",
   "text": "Player height, high byte: $7F at start-up (high above the city for the opening sequence), 0 on the ground; the Colony Craft pad is at $40xx ($A0E2). From $20 up, $9536 draws the fixed city outline from $902A instead of the map window."
  },
  {
   "address": 120,
   "type": "line",
   "text": "Player Y position, low byte of three ($7A:$79:$78); room clamp as for X ($93BB)."
  },
  {
   "address": 121,
   "type": "line",
   "text": "Player Y position, middle byte (place within the square, $80 its centre)."
  },
  {
   "address": 122,
   "type": "line",
   "text": "Player Y position, high byte: the grid row shown by LOC (0-15 in the city, signed further out); 0 underground. Script op 6 tests it."
  },
  {
   "address": 123,
   "type": "line",
   "text": "Horizon edge: fraction of the x step per bitmap row, from cot(roll) ($B018); $B13F/$B155 add or subtract it."
  },
  {
   "address": 124,
   "type": "line",
   "text": "Horizon edge: whole pixels of the x step per row (pair of $7B)."
  },
  {
   "address": 125,
   "type": "line",
   "text": "Horizon direction flag, 0 or 1, the sign of cot(roll) ($B002): whether the edge moves right or left down the view, and which fill goes on which side. $7E is not referenced by any code found."
  },
  {
   "address": 127,
   "type": "line",
   "text": "Landed flag: $3F when the craft or player is on the ground ($A0BC), 0 while airborne ($A0F9). L ($98CD), D ($9903) and E ($B408) need it set; while it is set the flight model does not bank ($A115) and holds the craft level below take-off speed ($A024)."
  },
  {
   "address": 128,
   "type": "line",
   "text": "Joystick directions from $DC00 bits 0-3, 0 = pressed (up, down, left, right), read by $B2FE; $A165 swaps left and right through $A17B while $F1 is set; walking and flight test it with BIT."
  },
  {
   "address": 129,
   "type": "line",
   "text": "Joystick fire from $DC00 bit 4, 0 = pressed ($B2FE); $886A launches a missile when it reads 0."
  },
  {
   "address": 130,
   "type": "line",
   "text": "Fill byte on one side of the horizon, $55 or $AA (colour from the screen matrix or from $A5), swapped with $83 when the view is upside down ($AFD5-$AFF5)."
  },
  {
   "address": 131,
   "type": "line",
   "text": "Fill byte on the other side of the horizon, $AA or $55 (pair of $82); the unrolled filler at $BD00 writes it."
  },
  {
   "address": 132,
   "type": "line",
   "text": "$00 or $FF: EOR mask for the byte where the horizon crosses a row ($B125), set with $82/$83."
  },
  {
   "address": 133,
   "type": "line",
   "text": "Grid column of the building now in the vertex arrays ($9568); $94FE rebuilds the scene when the player's $74 differs. $80 at start-up and CTRL+Q, which forces a rebuild."
  },
  {
   "address": 134,
   "type": "line",
   "text": "Player height high byte when the scene was last built ($956E); no code found reads it."
  },
  {
   "address": 135,
   "type": "line",
   "text": "Grid row of the building now loaded ($9572); compared with $7A by $9504."
  },
  {
   "address": 136,
   "type": "line",
   "text": "Building model byte 0 (its last vertex number), written by $9575 beside $89; no code found reads this copy."
  },
  {
   "address": 137,
   "type": "line",
   "text": "Last vertex number of the loaded building (model byte 0, $9589): $950D copies it to $70, the collapse step $96AC and the loader $95E5 count from it."
  },
  {
   "address": 138,
   "type": "line",
   "text": "Building model byte 1 (its last edge number), written by $9575 beside $8B; no code found reads this copy."
  },
  {
   "address": 139,
   "type": "line",
   "text": "Last edge number of the loaded building (model byte 1): the edge unpacking loop $95BA stops there and $950D copies it to $71."
  },
  {
   "address": 140,
   "type": "line",
   "text": "Height term for the view centre (float mantissa): $94E0 sets the player's height middle byte divided by 16, or 16 when $77 is non-zero; $A320 multiplies it by $42 and $48 to offset $8E/$8F and the clip bounds."
  },
  {
   "address": 141,
   "type": "line",
   "text": "Height term, exponent byte (pair of $8C); $90F6 stores $E0 (zero) on entering a room."
  },
  {
   "address": 142,
   "type": "line",
   "text": "Screen x of the view centre: $50 (80) plus the height term times $42 ($A38E); added to every projected x ($A875, $AA48, $9CF7)."
  },
  {
   "address": 143,
   "type": "line",
   "text": "Screen y of the view centre: $44 (68) plus the height term times $48 ($A439); added to every projected y ($A925, $9CB2)."
  },
  {
   "address": 144,
   "type": "line",
   "text": "Left clip bound (float mantissa): -80 plus the height term ($A399); $9D0C uses it to put a line end on the left edge (x = 0)."
  },
  {
   "address": 145,
   "type": "line",
   "text": "Left clip bound, exponent byte (pair of $90)."
  },
  {
   "address": 146,
   "type": "line",
   "text": "Right clip bound (float mantissa, $A3A4); $9C82 puts a line end on the right edge (x = 159)."
  },
  {
   "address": 147,
   "type": "line",
   "text": "Right clip bound, exponent byte (pair of $92)."
  },
  {
   "address": 148,
   "type": "line",
   "text": "Top clip bound (float mantissa): -68 less the centre shift ($A444); $9D51 puts a line end on the top row."
  },
  {
   "address": 149,
   "type": "line",
   "text": "Top clip bound, exponent byte (pair of $94)."
  },
  {
   "address": 150,
   "type": "line",
   "text": "Bottom clip bound (float mantissa, $A44F); $9CC7 puts a line end on row 135."
  },
  {
   "address": 151,
   "type": "line",
   "text": "Bottom clip bound, exponent byte (pair of $96)."
  },
  {
   "address": 152,
   "type": "line",
   "text": "Edge number at which the building's lines change colour (model byte 2, $9597): $96E7 draws edges above it with the pattern set by $AE02 and the rest with $ADFC's. $9162 sets $FF in rooms."
  },
  {
   "address": 153,
   "type": "line",
   "text": "Angle of the building's rotating part, low byte (1024 steps per turn): $A12B adds $A2 each pass unless the building is destroyed ($F2 bit 7)."
  },
  {
   "address": 154,
   "type": "line",
   "text": "Rotating part's angle, high byte (pair of $99); $A544 takes its sine and cosine into $9B-$9E."
  },
  {
   "address": 155,
   "type": "line",
   "text": "Sine of the rotating part's angle (float mantissa), used by $A4B2."
  },
  {
   "address": 156,
   "type": "line",
   "text": "Sine of the rotating part's angle, exponent byte (pair of $9B)."
  },
  {
   "address": 157,
   "type": "line",
   "text": "Cosine of the rotating part's angle (float mantissa), used by $A4B2."
  },
  {
   "address": 158,
   "type": "line",
   "text": "Cosine of the rotating part's angle, exponent byte (pair of $9D)."
  },
  {
   "address": 159,
   "type": "line",
   "text": "Number of the building's vertices that rotate, from the low nibble of model byte 3 plus 1 (0 when that byte is 0): $A4B2 turns vertices 0 to $9F-1 about ($A0, $A1)."
  },
  {
   "address": 160,
   "type": "line",
   "text": "X middle byte of the rotation centre (model byte 4), added by $A4F8 to each rotated vertex."
  },
  {
   "address": 161,
   "type": "line",
   "text": "Y middle byte of the rotation centre (model byte 5), added by $A537."
  },
  {
   "address": 162,
   "type": "line",
   "text": "Rotation speed, the high nibble of model byte 3 halved (0-120 angle steps per pass), added to $99/$9A by $A12B."
  },
  {
   "address": 163,
   "type": "line",
   "text": "Colour of %00 pixels in the view: the raster interrupt $B9BB writes it to $D021 at line 0. Set from $B27D (1, white), by the wipes ($AEA9, $AEF5), the elevator ride ($BAA1-$BB1F) and the flash $B244; $7259 fills $A3-$A7 from $B27D, $7293 $A3-$A6 from $72F6."
  },
  {
   "address": 164,
   "type": "line",
   "text": "Written with the colour table but read by no code found (the screen matrix's %01 colour is the constant 6 in $BB48): $B27D gives 6, the starfield palette $AC31 other values."
  },
  {
   "address": 165,
   "type": "line",
   "text": "Colour of %10 pixels: $BB48 puts it in the screen matrix's low nibble (with 6 above it) through $BB4F. The area colour $C4 after a wipe; $AFB8 cycles it through $BB7E while $F0 counts (transporter flash). $A7, next door, gets the byte $A9 from the 5-byte copy at $7259 and is never read."
  },
  {
   "address": 166,
   "type": "line",
   "text": "Colour of %11 pixels, written into colour RAM by $BB4F (skipped when $D800 and $5C00 already match); from $C5 after a wipe, set with $A3 by the flash $B244 (0 after a crash, $11 when shot down). $80BA writes it plus 1 into $D800 to force the refill."
  },
  {
   "address": 168,
   "type": "line",
   "text": "Scene mode: 0 on the surface, 1 inside a complex (set at the bottom of the elevator ride, $A2F1; cleared going up, $A298, or by a door to the surface, $90C2). The main loop $8562 picks its branch by it."
  },
  {
   "address": 169,
   "type": "line",
   "text": "What the player is in: 0-7 the vehicle object of that number (B, $98A0), $80 on foot (L, $98E2), 9 falling ($8988 ship shot down, $A1E1 walking off the Colony Craft pad, $90CB door to the surface), $0A the opening descent ($7244); $80E8 sets 1. $9D99 loads that entry's 16 bytes of handler and flight constants into $BEA0; script op 34 tests it."
  },
  {
   "address": 170,
   "type": "line",
   "text": "Walking step (float mantissa), $40 from $7203, never changed: $A1ED multiplies it by the heading's sine and cosine."
  },
  {
   "address": 171,
   "type": "line",
   "text": "Walking step, exponent byte, $18 (pair of $AA; with $40 that is 80 position units, $0050, per pass); $A1ED XORs the direction (1 forward, 0 back) into its sign bit."
  },
  {
   "address": 172,
   "type": "line",
   "text": "Heading change per pass while walking with the stick left or right ($A1B5), $10 (1/64 of a turn) from $7203 and $80E8."
  },
  {
   "address": 173,
   "type": "line",
   "text": "Saved index: the byte offset into the object model in $9728/$A61F, into the room record in $9162, the missile's object slot in $886A."
  },
  {
   "address": 174,
   "type": "line",
   "text": "Room walls hit this pass: $939E starts it at 0 and decrements it for each axis it clamps; copied to $F8."
  },
  {
   "address": 175,
   "type": "line",
   "text": "Number of the object $9728 is handling (from the visible list $2980); read by the take/board test $97FA, $98B1 and the per-object rotation $A6AD."
  },
  {
   "address": 176,
   "type": "line",
   "text": "Last vertex number of the current object's model (its byte 0), the end of $9728's vertex loop."
  },
  {
   "address": 177,
   "type": "line",
   "text": "Set to 2 after a door takes the player to another room ($8587); each walking step ($A247) counts it down, and $8575 tests no door until it is 0."
  },
  {
   "address": 178,
   "type": "line",
   "text": "Number of objects in the current room or on the surface ($CD): $9374 lists them at $2981 onwards; $9706 draws and tests them, $9425 searches them."
  },
  {
   "address": 179,
   "type": "line",
   "text": "Loop counter of $9706 over the visible objects, from $B2 down to 1."
  },
  {
   "address": 180,
   "type": "line",
   "text": "Highest object number $9374 scans, $3F from $7203 (objects 0-63)."
  },
  {
   "address": 181,
   "type": "line",
   "text": "Lowest used entry of the map-corner table $7540-$757F (it fills downwards from $3B, $3C-$3F being the current square's own lines); these share the vertex slots $B5-$3F with the scene ($9073)."
  },
  {
   "address": 182,
   "type": "line",
   "text": "Highest used entry of the map line tables $7580/$75C0 (entries 3 upwards, built by $8FC3); $9086 draws them."
  },
  {
   "address": 183,
   "type": "line",
   "text": "The grid square the player is in as an index, row*16 + column ($951D), 0 outside the city ($8F1E), so no building is loaded for index 0 ($952D). Indexes the city tables $2600/$2700/$2B00/$2C00-$2F00; script op 31 and the missile hit test ($87A4) compare with it."
  },
  {
   "address": 184,
   "type": "line",
   "text": "The new key for this pass copied by $9706 for the object test $97FA: T ($16) takes, B ($1C) boards; $FF once one object has used it."
  },
  {
   "address": 185,
   "type": "line",
   "text": "View distance in grid squares for the city lines: $9554 reads it from $2A00 by altitude and calls $8EC2 when it changes; $FF forces that ($950F), $40 after the whole-city outline $8FF8. $974C drops objects below the player that are further away."
  },
  {
   "address": 186,
   "type": "line",
   "text": "EL dial: position within the quarter, $00-$8F (144 steps, the pitch times 9/16); $B67B moves it one step per frame towards the pitch and scrolls the dial glyphs at $7FD0-$7FFF."
  },
  {
   "address": 187,
   "type": "line",
   "text": "EL dial: the quarter (0-3) of the pitch shown (pair of $BA); $B749 colours the dial by it through $B757."
  },
  {
   "address": 188,
   "type": "line",
   "text": "EL dial: index of the next scale figure to scroll in (from $768B going up, $7682 going down)."
  },
  {
   "address": 190,
   "type": "line",
   "text": "COMP dial: position within the quarter, $00-$8F (the heading times 9/16); $B809 moves it one step per frame and scrolls the glyphs at $7ED8-$7F07. $BD is not referenced by any code found."
  },
  {
   "address": 191,
   "type": "line",
   "text": "COMP dial: the quarter (0-3) of the heading shown (pair of $BE); $B887 colours the dial through $B895."
  },
  {
   "address": 192,
   "type": "line",
   "text": "COMP dial: index of the next compass label to scroll in (text at $7684/$768F). $C1 is not referenced by any code found."
  },
  {
   "address": 194,
   "type": "line",
   "text": "View background to use after a wipe or the elevator ride ($AEC9, $AF28, $BAD8): 1 from $B27D ($B232) and from $9374, 0 in a dark room ($9200), $BBCE or $BBCA for the elevator. $C3 gets the table's 6 from $B232 and is not read."
  },
  {
   "address": 196,
   "type": "line",
   "text": "%10 colour of the current area, the source of $A5: 5 from $B27D, a room's own from its record ($91DB), 0 in a dark room."
  },
  {
   "address": 197,
   "type": "line",
   "text": "%11 colour of the current area, the source of $A6: $0B from $B27D, a room's own ($91E5), 0 in a dark room."
  },
  {
   "address": 198,
   "type": "line",
   "text": "Background of the text-mode band that the variant interrupt $B9F8 shows while a wipe or the elevator ride moves the split ($BA05)."
  },
  {
   "address": 199,
   "type": "line",
   "text": "$D018 value for the view, written at line 0 by $B9BB: $78 while $6000 is shown, $70 for $4000 ($AF6E); $AA75 sets $70 for the starfield."
  },
  {
   "address": 200,
   "type": "line",
   "text": "Room transition: $FF runs the wipe $AE96 before the next frame flip, $7F the wipe $AEF3 after it, 0 none ($AED3 clears it). The door test sets $7F or $FF by the door's direction ($94C4); $90BE flips one frame with 0, then sets $7F."
  },
  {
   "address": 202,
   "type": "line",
   "text": "Elevator ride: 0 none, $80 going down, 1 going up (E, $B474); the panel interrupt runs the ride while it is set ($BA54) and $BB2F ends it. Meanwhile the walking and flight handlers run the ride code $A24A instead, and E is ignored ($B400)."
  },
  {
   "address": 203,
   "type": "line",
   "text": "Elevator ride: position of the moving split within the current stage (up to $84), stepped each frame from $BB89 by the panel interrupt; $A24A turns it into the height."
  },
  {
   "address": 204,
   "type": "line",
   "text": "Elevator ride: stage number, 13 down to 0 going down, 0 up to 14 going up ($B470, $BA99, $BAFD); the main loop enters the complex at stage 8 ($A2D4) or the surface at stage 12 ($A292)."
  },
  {
   "address": 205,
   "type": "line",
   "text": "Room or complex the player is in, 0 on the surface: the elevator sets the complex number 1-8 from its table at $B4B6/$B4BE ($B441), a door the target room ($914A). Rooms $72 (random exit) and $7F (mirror) are special in $90BE. Objects whose $2940 matches it are in play ($9374)."
  },
  {
   "address": 207,
   "type": "line",
   "text": "Object vertex offset, X, low byte: $A61F reads the model's signed byte, $A6AD rotates it by the object's angles ($802A, $801A, $800A) and multiplies by 16 into $D0:$CF."
  },
  {
   "address": 208,
   "type": "line",
   "text": "Object vertex offset, X, high byte (pair of $CF), added to $D6 by $A63E."
  },
  {
   "address": 209,
   "type": "line",
   "text": "Object vertex offset, height, low byte (from the model, rotated and times 16)."
  },
  {
   "address": 210,
   "type": "line",
   "text": "Object vertex offset, height, high byte (pair of $D1)."
  },
  {
   "address": 211,
   "type": "line",
   "text": "Object vertex offset, Y, low byte (from the model, rotated and times 16)."
  },
  {
   "address": 212,
   "type": "line",
   "text": "Object vertex offset, Y, high byte (pair of $D3)."
  },
  {
   "address": 213,
   "type": "line",
   "text": "Relative position, X, low byte of three ($D7:$D6:$D5): object minus player ($9957) or object minus object ($8A40). $999A compares all three axes with a range; $89AF divides the vector by 2^Y and inverts it, $8A12 stores it as a velocity."
  },
  {
   "address": 214,
   "type": "line",
   "text": "Relative position, X, middle byte; $978A takes 8 off it before drawing an object."
  },
  {
   "address": 215,
   "type": "line",
   "text": "Relative position, X, high byte."
  },
  {
   "address": 216,
   "type": "line",
   "text": "Relative position, height, low byte of three ($DA:$D9:$D8)."
  },
  {
   "address": 217,
   "type": "line",
   "text": "Relative position, height, middle byte."
  },
  {
   "address": 218,
   "type": "line",
   "text": "Relative position, height, high byte; negative (object below the player) makes $974C apply the view radius $B9."
  },
  {
   "address": 219,
   "type": "line",
   "text": "Relative position, Y, low byte of three ($DD:$DC:$DB)."
  },
  {
   "address": 220,
   "type": "line",
   "text": "Relative position, Y, middle byte."
  },
  {
   "address": 221,
   "type": "line",
   "text": "Relative position, Y, high byte."
  },
  {
   "address": 222,
   "type": "line",
   "text": "Message printer: index of the current token in the message ($8E22), read through the operand $8E27 that $8DAA or script op 1 points at the message. Zeroed when a message starts."
  },
  {
   "address": 223,
   "type": "line",
   "text": "Message printer: index of the next character within the current word or literal (read through the operand $8E0A); 0 means fetch the next token."
  },
  {
   "address": 224,
   "type": "line",
   "text": "Message window frame counter: $8DC3 counts it every frame, scrolling one character per frame while it is below 26, then holding until it reaches $E1. The intro script pokes 100; $B3D6 waits for 30."
  },
  {
   "address": 225,
   "type": "line",
   "text": "Frames a part of a message stays in the window before the next scrolls in ($8DD0): 8 in the zero-page image, poked by the scripts to $7D, $32, $19 and $96."
  },
  {
   "address": 226,
   "type": "line",
   "text": "Frame counter, 0-49: the panel interrupt counts it and carries into the seconds at 50 ($BA60); the wipes wait on it."
  },
  {
   "address": 227,
   "type": "line",
   "text": "Seconds clock, low byte (with $E4), counted by the panel interrupt; script op 7 tests it (reading until it is stable), op 2 zeroes it."
  },
  {
   "address": 228,
   "type": "line",
   "text": "Seconds clock, high byte (pair of $E3)."
  },
  {
   "address": 229,
   "type": "line",
   "text": "Script call stack pointer: index into $BEC2 for the return addresses pushed by $8BC9 and pulled by $8BD2; 0 from $7203."
  },
  {
   "address": 230,
   "type": "line",
   "text": "Message printer state: 0 idle, $FF while the text prints ($8DC0, $8C45), 1 when the text has ended and blanks scroll in ($8E52); counted down per part by $8DD6. The panel interrupt calls $8DC3 while it is non-zero, and the script interpreter waits."
  },
  {
   "address": 231,
   "type": "line",
   "text": "The script operation byte being run ($8ABB): bits 0-5 pick the handler, bit 7 inverts a test and bit 6 makes a taken branch a call ($8B8C, $8B9E)."
  },
  {
   "address": 232,
   "type": "line",
   "text": "Random generator, low byte of the 16-bit shift register $F3:$E8: $ADEF shifts it right one bit with feedback from its own bits. Script op 10 compares its operand with it."
  },
  {
   "address": 233,
   "type": "line",
   "text": "Newest key from the matrix scan (key number with bit 6 SHIFT and bit 7 CTRL), written by $B281 only when it differs from $EA; $B4B2 writes 4 once a key has been used. The dispatch $B331, the object test $9706 and script op 11 read it."
  },
  {
   "address": 234,
   "type": "line",
   "text": "Key seen by the last scan, $FF when none is held ($B2F8): lets $B281 report a key only once, and the + and - speed keys repeat while held ($B356)."
  },
  {
   "address": 235,
   "type": "line",
   "text": "Number of objects carried, 0-10; their numbers are at $BEB1 upwards (T adds at $982D and refuses the eleventh, D drops the last one, $98FE). CTRL+Q scatters them ($85F2)."
  },
  {
   "address": 236,
   "type": "line",
   "text": "Speed set with the keys (float mantissa): a digit sets 0 ($B491), + and - multiply by 1.03 or 0.98 ($B499); the flight model $9F17 steers $26/$27 towards it."
  },
  {
   "address": 237,
   "type": "line",
   "text": "Set speed, exponent byte (pair of $EC): from the digit's entry in $BC50 with SHIFT as the sign ($B48D); $88 (stopped) from $9950."
  },
  {
   "address": 238,
   "type": "line",
   "text": "City map window state for $8EC2: 0 while the lines hold the whole 16 x 16 city (so it is not rebuilt), $FF for a partial window (rebuilt each time); $80BA sets $FF, $8FF8 $40."
  },
  {
   "address": 239,
   "type": "line",
   "text": "Non-zero when LOC's X or Y is beyond +-99 ($B654); $9054 then draws no ground lines."
  },
  {
   "address": 240,
   "type": "line",
   "text": "Transporter flash: $0A on entering a transporter room ($913F), $1F for the mirror room ($9371); $AF6E counts it down, cycling $A5 through $BB7E; doors are ignored meanwhile ($9437)."
  },
  {
   "address": 241,
   "type": "line",
   "text": "Mirror flag, 0 or 1, toggled by room $7F ($9353): XORed into the view's x signs ($A360, $AA13) so east and west swap, and $A165 swaps the stick's left and right."
  },
  {
   "address": 242,
   "type": "line",
   "text": "Status byte of the current grid square, from $2B00 ($9580): bit 7 destroyed (the missile sets it at $8765; the spin stops, $9685 flattens the building), bits 5-6 read by $B53D for the panel colour when object $1A is carried."
  },
  {
   "address": 243,
   "type": "line",
   "text": "Random generator, high byte (pair of $E8), rotated by $ADEF."
  },
  {
   "address": 244,
   "type": "line",
   "text": "Building collapse countdown: $10 when a missile destroys the building at $F5 ($876A); $879B runs one step of the collapse per pass while the player is there, and at the end starts a script: the building's own ($2B00 bits 0-4 plus 32) or $0A/$1A when the balance $BEBC-$BEBB passes 104."
  },
  {
   "address": 245,
   "type": "line",
   "text": "Grid index (row*16 + column) of the square whose building the missile hit ($875B)."
  },
  {
   "address": 246,
   "type": "line",
   "text": "$D018 for the text band shown by the variant interrupt $B9F8: $7E from the zero-page image, written by no code."
  },
  {
   "address": 247,
   "type": "line",
   "text": "Canned message printed when the wipe into a room ends ($AEE4): the room's name from bits 3-7 of its record's byte 1 ($9224), 1 ('ITS VERY DARK IN HERE') in a dark room, 0 none."
  },
  {
   "address": 248,
   "type": "line",
   "text": "Last pass's $AE: the bump sound ($9413) plays only on the first pass against a wall."
  },
  {
   "address": 249,
   "type": "line",
   "text": "Crash flash delay: 2 after a crash landing ($A0DF, flight model); $AF6E counts it down and calls the flash $B242 at 0."
  },
  {
   "address": 250,
   "type": "line",
   "text": "Colony Craft flag: $FF when landed on the pad above 08-08 ($A0EF) or leaving complex 8 by elevator ($B460). Walking off the pad drops the player ($A1DA, vehicle 9); at the surface end of the ride $A30E puts the height back to $40FF."
  },
  {
   "address": 251,
   "type": "line",
   "text": "The $2B00 status of the square before the missile hit ($8761), compared at $87C1. While the KERNAL's zero page is swapped in for a save or load ($819E-$8255) this address is the copy pointer's low byte."
  },
  {
   "address": 252,
   "type": "line",
   "text": "Next character for the message window, stored at $5F8E by $8DEB (its value also sets the tick's pitch); $A0 is a blank. In the save/load code, the KERNAL-side copy pointer's high byte."
  },
  {
   "address": 253,
   "type": "line",
   "text": "In the game's own zero page, $60: the low byte of $2160, the restart address that $8215 jumps through as $BFFD after a save or load ($B8F6 has swapped the page to $BF02-$BFFF). No game code writes it. In the KERNAL context of $819E it is the segment and SAVE pointer."
  },
  {
   "address": 254,
   "type": "line",
   "text": "High byte ($21) of the restart address $2160 (pair of $FD); $FF beside it holds $7D and is not referenced by any code found."
  },
  {
   "address": 256,
   "type": "line",
   "text": "Vertex table, 64 entries (one per vertex 0-63): view-space X' mantissa, float with its exponent at $0140; written by the transform $A75C (from $58), read by the edge drawer $99DD. The starfields $7319 and $AA95 keep each star's X here. It lies in the stack page: $0100-$01BF hold three of these tables, and the stack, reset to $01FF by $80C5 and $B3F1, keeps to $01C0-$01FF. CMP $0100 at $8ADF and STA $0100 at $8D1C are script ops 24/25, whose operands the script rewrites first."
  },
  {
   "address": 320,
   "type": "line",
   "text": "Vertex table: view-space X' exponent byte, one per vertex (pair of the mantissas at $0100), from $59; the starfields' star X exponent."
  },
  {
   "address": 384,
   "type": "line",
   "text": "Vertex table: view-space Y' mantissa, one per vertex, from $5A; its exponents are at $02C0 (not $01C0, which the stack uses). The starfields' star Y."
  },
  {
   "address": 678,
   "type": "line",
   "text": "The KERNAL's PAL flag (1 PAL, 0 NTSC), read once by the hand-over at $5024, which loops back to $5000 for ever on NTSC. $02A7-$02BF are not referenced by any code found."
  },
  {
   "address": 704,
   "type": "line",
   "text": "Vertex table: view-space Y' exponent byte, one per vertex (pair of the mantissas at $0180), from $5B; the starfields' star Y exponent."
  },
  {
   "address": 832,
   "type": "line",
   "text": "Vertex table: depth Z mantissa, one per vertex (exponents at $0380), from $5C; the starfields' star depth, to which each frame adds the speed at $74C3 or $AC4E."
  },
  {
   "address": 896,
   "type": "line",
   "text": "Vertex table: depth Z exponent byte, one per vertex (pair of $0340); the sign bit marks a vertex behind the viewer and $99EB compares two of these to choose which end to clip. The starfields set every entry to 1 (negative) before the first frame ($72FE, $AA7F), so each star is placed anew."
  },
  {
   "address": 960,
   "type": "line",
   "text": "Vertex table: exponent byte of X'/Z, one per vertex (the mantissas are at $0600), from $5F by $A943; reloaded by the clipper $99DD."
  },
  {
   "address": 1024,
   "type": "line",
   "text": "Vertex table: world X low byte, one per vertex (24-bit with the middle bytes at $0440 and high bytes at $0740): 0 for building vertices ($9649), a template byte for room shapes ($9256), turned by the rotation $A4B2; $A5CE subtracts the player's X. The starfields keep each star's previous screen x here, to erase it."
  },
  {
   "address": 1088,
   "type": "line",
   "text": "Vertex table: world X middle byte of vertex 0 (the array runs on at $0441, $0444 and $0445, where the room builder writes single corners). For a room, corner 0 gets the width ($91A2), which $939E also reads as the room's X size; for buildings the model's X ($9655), moved towards $80 by the collapse $96AC and set by the rotation $A4FA."
  },
  {
   "address": 1089,
   "type": "line",
   "text": "Vertex table: world X middle bytes of vertices 1-3 (part of $0440); room corner 1 gets the room's width at $91A5."
  },
  {
   "address": 1092,
   "type": "line",
   "text": "Vertex table: world X middle byte of vertex 4 (part of $0440); room corner 4 gets the width at $91A8."
  },
  {
   "address": 1093,
   "type": "line",
   "text": "Vertex table: world X middle bytes of vertices 5-63 (the rest of $0440); room corner 5 gets the width at $91AB, the others come from the building and room loaders."
  },
  {
   "address": 1152,
   "type": "line",
   "text": "Vertex table: world height low byte, one per vertex (24-bit with $04C0 and $0780): 0 for building vertices ($95FC, $964C), a template byte for room shapes ($925D). The starfields keep each star's previous screen y here."
  },
  {
   "address": 1216,
   "type": "line",
   "text": "Vertex table: world height middle byte of vertex 0 (continued at $04C1-$04C3). A room's corners 0-3 get its height (the ceiling; corners 4-7 are the floor at 0), here by $91B3; for buildings the model's height ($961C, $967E), which the collapse $96AC counts down to 0."
  },
  {
   "address": 1217,
   "type": "line",
   "text": "Vertex table: world height middle byte of vertex 1 (part of $04C0); room corner 1, the ceiling height, from $91B6."
  },
  {
   "address": 1218,
   "type": "line",
   "text": "Vertex table: world height middle byte of vertex 2 (part of $04C0); room corner 2, the ceiling height, from $91B9."
  },
  {
   "address": 1219,
   "type": "line",
   "text": "Vertex table: world height middle bytes of vertices 3-63 (the rest of $04C0); room corner 3 gets the ceiling height from $91BC."
  },
  {
   "address": 1280,
   "type": "line",
   "text": "Vertex table: world Y low byte, one per vertex (24-bit with $0540 and $07C0): 0 for rooms and static building vertices ($964F), set by the rotation $A4B2 for a building's turning part."
  },
  {
   "address": 1344,
   "type": "line",
   "text": "Vertex table: world Y middle bytes of vertices 0-2 (continued at $0543, $0544, $0547, $057F). Room corner 0 gets the depth ($91C4), which $939E also reads as the room's Y size; building vertices from the model ($965B), moved by the collapse $96AC and the rotation $A539."
  },
  {
   "address": 1347,
   "type": "line",
   "text": "Vertex table: world Y middle byte of vertex 3 (part of $0540); room corner 3 gets the depth at $91C7."
  },
  {
   "address": 1348,
   "type": "line",
   "text": "Vertex table: world Y middle bytes of vertices 4-6 (part of $0540); room corner 4 gets the depth at $91CA."
  },
  {
   "address": 1351,
   "type": "line",
   "text": "Vertex table: world Y middle bytes of vertices 7-62 (part of $0540); room corner 7 gets the depth at $91CD."
  },
  {
   "address": 1407,
   "type": "line",
   "text": "Vertex table: world Y middle byte of vertex 63, the last of $0540. Its symbol comes from STA $057F,Y at $9192, Y 12 down to 1, which fills $0580-$058B with the room box's edge starts from $933B."
  },
  {
   "address": 1408,
   "type": "line",
   "text": "Edge list, 64 entries: the first vertex of each edge (the second at $05C0). The building loader $9575 unpacks the model's edges (high nibble, or the first of two bytes); the room builder copies the box's 12 edges ($9192) and chains each template shape's vertices ($9275). $96E7 draws edges $71 down to 0."
  },
  {
   "address": 1471,
   "type": "line",
   "text": "Edge list: the first vertex of edge 63, the last of $0580. Its symbol comes from STA $05BF,Y at $9198, Y 12 down to 1, which fills $05C0-$05CB with the box's edge ends from $9347."
  },
  {
   "address": 1472,
   "type": "line",
   "text": "Edge list, 64 entries: the second vertex of each edge (pair of $0580): the model's low nibble or second byte ($95CB, $95DE), the box's from $9347, the next vertex of a room shape ($927C)."
  },
  {
   "address": 1536,
   "type": "line",
   "text": "Vertex table: X'/Z mantissa, one per vertex (exponents at $03C0), the perspective x from $A75C ($5E); the clipper $99DD reloads it."
  },
  {
   "address": 1600,
   "type": "line",
   "text": "Vertex table: exponent byte of Y'/Z, one per vertex (the mantissas are at $7600), from $61 by $A94D; read by $99DD."
  },
  {
   "address": 1664,
   "type": "line",
   "text": "Vertex table: screen x (0-159) of each projected vertex ($A952), a line end for $99DD and the dot of a distant object ($ADD8). The starfields keep each star's current screen x here ($73F5, $AB77), 1 before the first frame ($7304, $AA85)."
  },
  {
   "address": 1728,
   "type": "line",
   "text": "Vertex table: screen y (0-135) of each projected vertex ($A957). The starfields keep each star's current screen y here ($73F0, $AB72), 1 before the first frame ($7301, $AA82)."
  },
  {
   "address": 1792,
   "type": "line",
   "text": "Vertex table: clip code of each projected vertex from $A75C ($6E): bit 7 behind the viewer, bit 0 x off screen, bit 1 y off screen, 0 on screen. $99DD drops an edge with both ends behind; $ADCB plots a distant object's dot only when it is 0."
  },
  {
   "address": 1856,
   "type": "line",
   "text": "Vertex table: world X high byte (the grid column), one per vertex: the player's $74 for building vertices ($95F2, $963F), 0 in rooms."
  },
  {
   "address": 1920,
   "type": "line",
   "text": "Vertex table: world height high byte, one per vertex, always 0: cleared by $B8F6 at every zero-page swap, by the room builder $9162 and by the star setup $72FA; nothing else writes it."
  },
  {
   "address": 1984,
   "type": "line",
   "text": "Vertex table: world Y high byte (the grid row), one per vertex: the player's $7A for building vertices ($95F7, $9644), 0 in rooms."
  },
  {
   "address": 2048,
   "type": "line",
   "text": "Event-script table: 51 little-endian addresses, script n at $0800 + 2n (typed address). The starter $8A8C doubles the script number and loads $0800,Y/$0801,Y into the script pointer $1F/$20; it refuses while $BEC0 bit 6 (an event script is running) is set, sets that bit and pushes the running pointer on the script stack $BEC2 (depth $E5), so an event interrupts the background script and the event's closing return resumes it. Script 0 is no event: the start-up code at $7203, entered by the JMP at $746F, empties the stack and loads entry 0 directly."
  },
  {
   "address": 2049,
   "type": "line",
   "text": "High bytes of script_table as the starter reads them ($8AAC LDA $0801,Y; $720B reads $0801 for script 0). Entries 0-31, to $083F: 0 the landing (start-up); 1, 7 and 12 the objects of the same number when taken ($9839) or boarded ($986B) with $29C0 bit 2 set, started at $98C0; 2-6, 8, 9, 11, 13-20, 22-25, 28 and 29 the rooms whose record (split table $2300/$23C0) holds the number in byte 1 bits 3-7 with byte 2 bit 7 set, started on entry at $921E; 10 and 26 the site tally ($8813); 27 a missile hitting object 0 ($8797). Entries 21, 30 and 31 point at script_spare_crash, and no room, object or square names them."
  },
  {
   "address": 2112,
   "type": "line",
   "text": "Entries 32-50 of script_table, the city squares' scripts: when a missile destroys a square, $87A3-$8813 starts script 32 + ($2B00[square] AND $1F) and clears those five bits, so each runs once. 32 and 33 go to script_spare_crash and no square uses them; 34 and 35 are the unnamed Palyar and Mechanoid squares, 36-50 the named ones."
  },
  {
   "address": 2150,
   "type": "line",
   "text": "Spare script for the unused entries 21, 30, 31, 32 and 33: prints \"CRASH\", clears $BEC0 bit 6 and returns. No room record, object flag or $2B00 entry at the hand-over names any of these numbers."
  },
  {
   "address": 2150,
   "type": "side",
   "text": "print \"CRASH\""
  },
  {
   "address": 2153,
   "type": "side",
   "text": "clear $BEC0 bit 6 (event script running)"
  },
  {
   "address": 2155,
   "type": "side",
   "text": "return"
  },
  {
   "address": 2156,
   "type": "line",
   "text": "Script 0, the landing, run as the background script from the start-up ($7203). Sets $29C0 bit 2 on objects 1 (the Dominion Dart), 7 (the interstellar ship) and 12 (the Mechanoid), so taking or boarding them runs scripts 1, 7 and 12; then, 2 s apart, \"CRASH IMMINENT!\", \"RETURNING TO - - -\" \"MANUAL CONTROL\", silences SID voice 1 ($D404 = 0), and 2 s later one of canned messages 60-63 at random (\"WHERE AM I\", \"YOU CRASHED\", \"GOOD LANDING!\", \"OUCH!\"), whatever the landing was like."
  },
  {
   "address": 2156,
   "type": "side",
   "text": "$57EE := $01 (object 1, the Dominion Dart)"
  },
  {
   "address": 2159,
   "type": "side",
   "text": "$29C0[$57EE] OR $04: sets bit 2"
  },
  {
   "address": 2161,
   "type": "side",
   "text": "$57EE := $07 (object 7, the interstellar ship)"
  },
  {
   "address": 2164,
   "type": "side",
   "text": "$29C0[$57EE] OR $04: sets bit 2"
  },
  {
   "address": 2166,
   "type": "side",
   "text": "$57EE := $0C (object 12, the Mechanoid)"
  },
  {
   "address": 2169,
   "type": "side",
   "text": "$29C0[$57EE] OR $04: sets bit 2"
  },
  {
   "address": 2171,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 2173,
   "type": "side",
   "text": "call wait_2s"
  },
  {
   "address": 2176,
   "type": "side",
   "text": "call wait_2s"
  },
  {
   "address": 2179,
   "type": "side",
   "text": "print \"CRASH IMMINENT!\""
  },
  {
   "address": 2193,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 2195,
   "type": "side",
   "text": "call wait_2s"
  },
  {
   "address": 2198,
   "type": "side",
   "text": "print \"RETURNING TO - - -\""
  },
  {
   "address": 2213,
   "type": "side",
   "text": "print \"MANUAL CONTROL\""
  },
  {
   "address": 2224,
   "type": "side",
   "text": "poke $D404 := $00"
  },
  {
   "address": 2228,
   "type": "side",
   "text": "call wait_2s"
  },
  {
   "address": 2231,
   "type": "side",
   "text": "canned message 60 + (random AND 3)"
  },
  {
   "address": 2234,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 2236,
   "type": "line",
   "text": "Script 0's status report, and where it starts again after idle_nag: clears $BEC0 bit 7 (player activity), then \"STATUS REPORT\", \"CRASH LANDED ON TARG\", \"PRESTINIUM DESTROYED\", \"STATE OF WAR BETWEEN\" \"PALYARS AND MECHANOIDS\", \"LOCATION NEAR AIRBASE\", \"AIRCRAFT ON PAD\", \"TYPE - DOMINION DART\", \"MESSAGE RECEIVED\", \"CRAFT FOR SALE\", \"PRICE 5OOO CREDITS\" (zeros written as the letter O, which draws the same glyph), and canned message 21, \"YOU HAVE [figure 8] CREDITS\" (9000 at the start)."
  },
  {
   "address": 2236,
   "type": "side",
   "text": "clear $BEC0 bit 7 (player touched the controls)"
  },
  {
   "address": 2238,
   "type": "side",
   "text": "print \"STATUS REPORT\""
  },
  {
   "address": 2243,
   "type": "side",
   "text": "print \"CRASH LANDED ON TARG\""
  },
  {
   "address": 2251,
   "type": "side",
   "text": "print \"PRESTINIUM DESTROYED\""
  },
  {
   "address": 2267,
   "type": "side",
   "text": "print \"STATE OF WAR BETWEEN\""
  },
  {
   "address": 2291,
   "type": "side",
   "text": "print \"PALYARS AND MECHANOIDS\""
  },
  {
   "address": 2298,
   "type": "side",
   "text": "print \"LOCATION NEAR AIRBASE\""
  },
  {
   "address": 2315,
   "type": "side",
   "text": "print \"AIRCRAFT ON PAD\""
  },
  {
   "address": 2321,
   "type": "side",
   "text": "print \"TYPE - DOMINION DART\""
  },
  {
   "address": 2345,
   "type": "side",
   "text": "print \"MESSAGE RECEIVED\""
  },
  {
   "address": 2358,
   "type": "side",
   "text": "print \"CRAFT FOR SALE\""
  },
  {
   "address": 2364,
   "type": "side",
   "text": "print \"PRICE 5OOO CREDITS\""
  },
  {
   "address": 2380,
   "type": "side",
   "text": "canned message 21 \"YOU HAVE [figure 8] CREDITS\""
  },
  {
   "address": 2382,
   "type": "line",
   "text": "Script 0's sale: ask_buy (\"DO YOU WANT TO BUY?\", 5 s for a Y) four times, between \"I THINK YOU SHOULD BUY\", \"IS THIS SENSIBLE\" and \"YOU PLAN TO WALK\"; a Y at any of them goes to dart_bought. After the fourth \"YOU MUST BE CRAZY\"; then, if $BEC0 bit 7 shows the player touched the controls since the report, landing_long_walk; if not, a blank line, idle_nag, \"NOW YOU ARE HERE - - -\", \"I WILL START AGAIN\" and back to landing_status_report."
  },
  {
   "address": 2382,
   "type": "side",
   "text": "call ask_buy"
  },
  {
   "address": 2385,
   "type": "side",
   "text": "if $BEC0 bit 0 (last answer was Y) goto dart_bought"
  },
  {
   "address": 2389,
   "type": "side",
   "text": "print \"I THINK YOU SHOULD BUY\""
  },
  {
   "address": 2401,
   "type": "side",
   "text": "call ask_buy"
  },
  {
   "address": 2404,
   "type": "side",
   "text": "if $BEC0 bit 0 (last answer was Y) goto dart_bought"
  },
  {
   "address": 2408,
   "type": "side",
   "text": "print \"IS THIS SENSIBLE\""
  },
  {
   "address": 2422,
   "type": "side",
   "text": "call ask_buy"
  },
  {
   "address": 2425,
   "type": "side",
   "text": "if $BEC0 bit 0 (last answer was Y) goto dart_bought"
  },
  {
   "address": 2429,
   "type": "side",
   "text": "print \"YOU PLAN TO WALK\""
  },
  {
   "address": 2436,
   "type": "side",
   "text": "call ask_buy"
  },
  {
   "address": 2439,
   "type": "side",
   "text": "if $BEC0 bit 0 (last answer was Y) goto dart_bought"
  },
  {
   "address": 2443,
   "type": "side",
   "text": "print \"YOU MUST BE CRAZY\""
  },
  {
   "address": 2455,
   "type": "side",
   "text": "if $BEC0 bit 7 (player touched the controls) goto landing_long_walk"
  },
  {
   "address": 2459,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 2461,
   "type": "side",
   "text": "call idle_nag"
  },
  {
   "address": 2464,
   "type": "side",
   "text": "print \"NOW YOU ARE HERE - - -\""
  },
  {
   "address": 2471,
   "type": "side",
   "text": "print \"I WILL START AGAIN\""
  },
  {
   "address": 2478,
   "type": "side",
   "text": "jump landing_status_report"
  },
  {
   "address": 2481,
   "type": "line",
   "text": "Script 0 after four refusals from an active player: \"IT WILL BE A LONG WALK\", a blank line (canned message 50), then wait_for_dart."
  },
  {
   "address": 2481,
   "type": "side",
   "text": "print \"IT WILL BE A LONG WALK\""
  },
  {
   "address": 2489,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 2491,
   "type": "line",
   "text": "Script 0's last loop, one test a pass: when the player rides object 1, the Dart ($A9 = 1), it jumps to script_dart_boarded. This also catches the Dart that CTRL+Q gives ($80E8 sets $A9 = 1 without the boarding routine, so script 1 is not started as an event)."
  },
  {
   "address": 2491,
   "type": "side",
   "text": "if the player rides object 1 ($A9) goto script_dart_boarded"
  },
  {
   "address": 2495,
   "type": "side",
   "text": "jump wait_for_dart"
  },
  {
   "address": 2498,
   "type": "line",
   "text": "Script 0's subroutine for a player who does nothing: \"IS ANYBODY THERE\", \"AM I TALKING TO MYSELF\", \"ARE YOU STILL ALIVE\", \"WHERE ARE YOU\", each followed by wait_15s_or_player (live: about 18 s apart), then silence. As soon as $BEC0 bit 7 shows the stick or a key was touched: \"AH! YOU ARE BACK\", 2 s, return."
  },
  {
   "address": 2498,
   "type": "side",
   "text": "print \"IS ANYBODY THERE\""
  },
  {
   "address": 2511,
   "type": "side",
   "text": "call wait_15s_or_player"
  },
  {
   "address": 2514,
   "type": "side",
   "text": "if $BEC0 bit 7 (player touched the controls) goto $0A1B"
  },
  {
   "address": 2518,
   "type": "side",
   "text": "print \"AM I TALKING TO MYSELF\""
  },
  {
   "address": 2540,
   "type": "side",
   "text": "call wait_15s_or_player"
  },
  {
   "address": 2543,
   "type": "side",
   "text": "if $BEC0 bit 7 (player touched the controls) goto $0A1B"
  },
  {
   "address": 2547,
   "type": "side",
   "text": "print \"ARE YOU STILL ALIVE\""
  },
  {
   "address": 2564,
   "type": "side",
   "text": "call wait_15s_or_player"
  },
  {
   "address": 2567,
   "type": "side",
   "text": "if $BEC0 bit 7 (player touched the controls) goto $0A1B"
  },
  {
   "address": 2571,
   "type": "side",
   "text": "print \"WHERE ARE YOU\""
  },
  {
   "address": 2577,
   "type": "side",
   "text": "call wait_15s_or_player"
  },
  {
   "address": 2580,
   "type": "side",
   "text": "if $BEC0 bit 7 (player touched the controls) goto $0A1B"
  },
  {
   "address": 2584,
   "type": "side",
   "text": "jump $0A11"
  },
  {
   "address": 2587,
   "type": "side",
   "text": "print \"AH! YOU ARE BACK\""
  },
  {
   "address": 2597,
   "type": "side",
   "text": "call wait_2s"
  },
  {
   "address": 2600,
   "type": "side",
   "text": "return"
  },
  {
   "address": 2601,
   "type": "line",
   "text": "Script 0 on a Y: adds 99995000 to figure 8 (the credits, BCD at $7700), which in eight-digit ten's complement takes 5000 off; \"TRANSACTION COMPLETED\", \"YOU HAVE [figure 8] CREDITS\" (4000 live), a blank line, then wait_for_dart. The balance is not checked; it is 9000 whenever the offer is made."
  },
  {
   "address": 2601,
   "type": "side",
   "text": "figure 8 += 99995000 (BCD: 5000 less)"
  },
  {
   "address": 2607,
   "type": "side",
   "text": "print \"TRANSACTION COMPLETED\""
  },
  {
   "address": 2613,
   "type": "side",
   "text": "canned message 21 \"YOU HAVE [figure 8] CREDITS\""
  },
  {
   "address": 2615,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 2617,
   "type": "side",
   "text": "jump wait_for_dart"
  },
  {
   "address": 2620,
   "type": "line",
   "text": "Script 1: object 1, the Dominion Dart, boarded or taken while its $29C0 bit 2 is set, or reached from wait_for_dart. Clears bits 2 and 3 of the Dart's flags (it runs once) and releases $BEC0 bit 6 at once, so events can run while it waits. Not bought ($BEC0 bit 0, the last yes/no answer, clear): \"THIS CRAFT BELONGED TO\", \"THE PALYAR COMMANDER'S\", \"BROTHER-IN-LAW\", \"HE IS NOT TOO PLEASED\", sets $BEC0 bit 5 (the brother-in-law is angry, read by the ending), say_palyar_attack, a blank line, script_halt."
  },
  {
   "address": 2620,
   "type": "side",
   "text": "$57EE := $01 (object 1, the Dominion Dart)"
  },
  {
   "address": 2623,
   "type": "side",
   "text": "$29C0[$57EE] AND $F3: clears bits 2 and 3"
  },
  {
   "address": 2625,
   "type": "side",
   "text": "clear $BEC0 bit 6 (event script running)"
  },
  {
   "address": 2627,
   "type": "side",
   "text": "if $BEC0 bit 0 (last answer was Y) goto dart_job_offer_wait"
  },
  {
   "address": 2631,
   "type": "side",
   "text": "print \"THIS CRAFT BELONGED TO\""
  },
  {
   "address": 2645,
   "type": "side",
   "text": "print \"THE PALYAR COMMANDER'S\""
  },
  {
   "address": 2648,
   "type": "side",
   "text": "print \"BROTHER-IN-LAW\""
  },
  {
   "address": 2652,
   "type": "side",
   "text": "print \"HE IS NOT TOO PLEASED\""
  },
  {
   "address": 2663,
   "type": "side",
   "text": "set $BEC0 bit 5 (brother-in-law angry)"
  },
  {
   "address": 2665,
   "type": "side",
   "text": "call say_palyar_attack"
  },
  {
   "address": 2668,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 2670,
   "type": "side",
   "text": "jump script_halt"
  },
  {
   "address": 2673,
   "type": "line",
   "text": "Script 1 when the Dart was bought: every 15 s (wait_15s) a random byte of 80 or less (81 chances in 256) brings job_offer_message; so does being off the surface ($CD, the room, not 0, tested through $57EF = 0). Then script_halt."
  },
  {
   "address": 2673,
   "type": "side",
   "text": "call wait_15s"
  },
  {
   "address": 2676,
   "type": "side",
   "text": "if random <= 80 goto $0A7E"
  },
  {
   "address": 2680,
   "type": "side",
   "text": "$57EF := $00 (room $00)"
  },
  {
   "address": 2683,
   "type": "side",
   "text": "if the player is in room $57EF ($CD) goto dart_job_offer_wait"
  },
  {
   "address": 2686,
   "type": "side",
   "text": "call job_offer_message"
  },
  {
   "address": 2689,
   "type": "line",
   "text": "A jump to itself, where script 1 ends for good: the script machine runs it once a pass for the rest of the game, events interrupt it and return to it, and script 0's pointer stays on the script stack."
  },
  {
   "address": 2689,
   "type": "side",
   "text": "jump script_halt"
  },
  {
   "address": 2692,
   "type": "line",
   "text": "Script subroutine: zeroes the seconds clock ($E3-$E4) and returns when it reaches 15, or sooner as soon as $BEC0 bit 7 shows the player touched the stick or a key ($B31B, $B329). Used by idle_nag."
  },
  {
   "address": 2692,
   "type": "side",
   "text": "clock := 0 (seconds, $E3-$E4)"
  },
  {
   "address": 2693,
   "type": "side",
   "text": "if $BEC0 bit 7 (player touched the controls) goto $0A8E"
  },
  {
   "address": 2697,
   "type": "side",
   "text": "if clock < 15 s goto $0A85"
  },
  {
   "address": 2702,
   "type": "side",
   "text": "return"
  },
  {
   "address": 2703,
   "type": "line",
   "text": "Script subroutine: zeroes the seconds clock and loops until it reads 2. The frame count $E2 is not reset, so the wait is 1 to 2 s, counted from when the previous message has gone. Called by script 0, the ending, and the opening's script ($7073, $7109, $7177, $717A)."
  },
  {
   "address": 2703,
   "type": "side",
   "text": "clock := 0 (seconds, $E3-$E4)"
  },
  {
   "address": 2704,
   "type": "side",
   "text": "if clock < 2 s goto $0A90"
  },
  {
   "address": 2709,
   "type": "side",
   "text": "return"
  },
  {
   "address": 2710,
   "type": "line",
   "text": "A 3-second wait built like wait_2s (clock := 0, loop while the clock is below 3, return) that nothing uses: no script jumps to or calls $0A96, and the address appears nowhere else in memory."
  },
  {
   "address": 2710,
   "type": "side",
   "text": "clock := 0 (unreached)"
  },
  {
   "address": 2711,
   "type": "side",
   "text": "if clock < 3 s goto $0A97 (unreached)"
  },
  {
   "address": 2716,
   "type": "side",
   "text": "return (unreached)"
  },
  {
   "address": 2717,
   "type": "line",
   "text": "Script subroutine: waits for one tick of the seconds clock (0.02 to 1 s, since zeroing $E3-$E4 leaves the frame count $E2 running). The first call of most event scripts, before they speak."
  },
  {
   "address": 2717,
   "type": "side",
   "text": "clock := 0 (seconds, $E3-$E4)"
  },
  {
   "address": 2718,
   "type": "side",
   "text": "if clock < 1 s goto $0A9E"
  },
  {
   "address": 2723,
   "type": "side",
   "text": "return"
  },
  {
   "address": 2724,
   "type": "line",
   "text": "Script subroutine: waits until the seconds clock reads 15. Used by dart_job_offer_wait, by escape_ending before the GAME OVER loop, and by game_over_loop."
  },
  {
   "address": 2724,
   "type": "side",
   "text": "clock := 0 (seconds, $E3-$E4)"
  },
  {
   "address": 2725,
   "type": "side",
   "text": "if clock < 15 s goto $0AA5"
  },
  {
   "address": 2730,
   "type": "side",
   "text": "return"
  },
  {
   "address": 2731,
   "type": "line",
   "text": "Script subroutine: clears the key ($B4B2), prints \"DO YOU WANT TO BUY?\", and goes on into ask_yes_no."
  },
  {
   "address": 2731,
   "type": "side",
   "text": "clear the key ($B4B2)"
  },
  {
   "address": 2732,
   "type": "side",
   "text": "print \"DO YOU WANT TO BUY?\""
  },
  {
   "address": 2741,
   "type": "line",
   "text": "Script subroutine: zeroes the clock and waits up to 5 s (counted after the question has finished showing) for key Y, number $19 (the test masks SHIFT and CTRL off $E9). A Y sets $BEC0 bit 0, anything else clears it; then return. Script 2 calls it after its own question."
  },
  {
   "address": 2741,
   "type": "side",
   "text": "clock := 0 (seconds, $E3-$E4)"
  },
  {
   "address": 2742,
   "type": "side",
   "text": "if key Y ($19) pressed goto $0AC2"
  },
  {
   "address": 2746,
   "type": "side",
   "text": "if clock < 5 s goto $0AB6"
  },
  {
   "address": 2751,
   "type": "side",
   "text": "clear $BEC0 bit 0 (last answer was Y)"
  },
  {
   "address": 2753,
   "type": "side",
   "text": "return"
  },
  {
   "address": 2754,
   "type": "side",
   "text": "set $BEC0 bit 0 (last answer was Y)"
  },
  {
   "address": 2756,
   "type": "side",
   "text": "return"
  },
  {
   "address": 2757,
   "type": "line",
   "text": "Script 1's job offer: canned messages 3 \"MESSAGE FROM PALYARS\" and 5 \"- - - JOB OFFER - - -\", \"FOR MORE INFORMATION\", \"GO TO THE BRIEFING ROOM\", \"IN COMPLEX AT LOC O9-O6\", canned message 7 \"MESSAGE ENDS\", a blank line, return."
  },
  {
   "address": 2757,
   "type": "side",
   "text": "canned message 3 \"MESSAGE FROM PALYARS\""
  },
  {
   "address": 2759,
   "type": "side",
   "text": "canned message 5 \"- - - JOB OFFER - - -\""
  },
  {
   "address": 2761,
   "type": "side",
   "text": "print \"FOR MORE INFORMATION\""
  },
  {
   "address": 2767,
   "type": "side",
   "text": "print \"GO TO THE BRIEFING ROOM\""
  },
  {
   "address": 2775,
   "type": "side",
   "text": "print \"IN COMPLEX AT LOC O9-O6\""
  },
  {
   "address": 2787,
   "type": "side",
   "text": "canned message 7 \"MESSAGE ENDS\""
  },
  {
   "address": 2789,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 2791,
   "type": "side",
   "text": "return"
  },
  {
   "address": 2792,
   "type": "line",
   "text": "Script 12: object 12, the Mechanoid, taken while its $29C0 bit 2 is set, which nothing clears, so every time: 1 s, canned message 12 (its name, \"MECHANOID\"), \"THE MECHANOID DEMANDS\", \"THAT YOU PUT HIM DOWN\", a blank line, releases $BEC0 bit 6. The byte after it, $0B15, is a second return that nothing reaches."
  },
  {
   "address": 2792,
   "type": "side",
   "text": "call wait_1s"
  },
  {
   "address": 2795,
   "type": "side",
   "text": "canned message 12 \"MECHANOID\""
  },
  {
   "address": 2797,
   "type": "side",
   "text": "print \"THE MECHANOID DEMANDS\""
  },
  {
   "address": 2810,
   "type": "side",
   "text": "print \"THAT YOU PUT HIM DOWN\""
  },
  {
   "address": 2832,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 2834,
   "type": "side",
   "text": "clear $BEC0 bit 6 (event script running)"
  },
  {
   "address": 2836,
   "type": "side",
   "text": "return"
  },
  {
   "address": 2837,
   "type": "side",
   "text": "return, unreached: script 12 has already returned"
  },
  {
   "address": 2838,
   "type": "line",
   "text": "Scripts 8 and 29 (one body), the banks: entering room $2A or $4F (script 8) or $9F (script 29). 1 s, \"BANK\", canned message 21 \"YOU HAVE [figure 8] CREDITS\", a blank line, releases $BEC0 bit 6."
  },
  {
   "address": 2838,
   "type": "side",
   "text": "call wait_1s"
  },
  {
   "address": 2841,
   "type": "side",
   "text": "print \"BANK\""
  },
  {
   "address": 2849,
   "type": "side",
   "text": "canned message 21 \"YOU HAVE [figure 8] CREDITS\""
  },
  {
   "address": 2851,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 2853,
   "type": "side",
   "text": "clear $BEC0 bit 6 (event script running)"
  },
  {
   "address": 2855,
   "type": "side",
   "text": "return"
  },
  {
   "address": 2856,
   "type": "line",
   "text": "Script 36, square 03-08 destroyed ($2B00 entry $44, Mechanoid): say_just_destroyed (\"YOU HAVE JUST DESTROYED\"), \"NOVABILL - WELL DONE!\", a blank line, and no reprisal."
  },
  {
   "address": 2856,
   "type": "side",
   "text": "call say_just_destroyed"
  },
  {
   "address": 2859,
   "type": "side",
   "text": "print \"NOVABILL - WELL DONE!\""
  },
  {
   "address": 2876,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 2878,
   "type": "side",
   "text": "clear $BEC0 bit 6 (event script running)"
  },
  {
   "address": 2880,
   "type": "side",
   "text": "return"
  },
  {
   "address": 2881,
   "type": "line",
   "text": "Script 37, square 02-03 destroyed ($2B00 entry $05, Palyar): say_just_destroyed (\"YOU HAVE JUST DESTROYED\"), \"THE AUTHORS ADVERT\", \"THINGS ARE GOING TO BE\", \"TOUGH FROM NOW ON\"; sets $BEC0 bit 3, which nothing reads; then palyar_attack_end. What lasts is the square's destroyed bit: script 7 will not launch while $2B00[$32] bit 7 is set."
  },
  {
   "address": 2881,
   "type": "side",
   "text": "call say_just_destroyed"
  },
  {
   "address": 2884,
   "type": "side",
   "text": "print \"THE AUTHORS ADVERT\""
  },
  {
   "address": 2897,
   "type": "side",
   "text": "print \"THINGS ARE GOING TO BE\""
  },
  {
   "address": 2911,
   "type": "side",
   "text": "print \"TOUGH FROM NOW ON\""
  },
  {
   "address": 2923,
   "type": "side",
   "text": "set $BEC0 bit 3 (advert destroyed; read by nothing)"
  },
  {
   "address": 2925,
   "type": "side",
   "text": "jump palyar_attack_end"
  },
  {
   "address": 2928,
   "type": "line",
   "text": "Script 38, square 12-03 destroyed ($2B00 entry $46, Mechanoid): say_just_destroyed (\"YOU HAVE JUST DESTROYED\"), \"SABINS CUBE\", then mechanoid_attack_end."
  },
  {
   "address": 2928,
   "type": "side",
   "text": "call say_just_destroyed"
  },
  {
   "address": 2931,
   "type": "side",
   "text": "print \"SABINS CUBE\""
  },
  {
   "address": 2946,
   "type": "side",
   "text": "jump mechanoid_attack_end"
  },
  {
   "address": 2949,
   "type": "line",
   "text": "Script 39, square 06-00 destroyed ($2B00 entry $07, Palyar): say_just_destroyed (\"YOU HAVE JUST DESTROYED\"), \"THE WALTON MONUMENT\", \"TO THE FAMOUS ARCHITECT\", then palyar_attack_end."
  },
  {
   "address": 2949,
   "type": "side",
   "text": "call say_just_destroyed"
  },
  {
   "address": 2952,
   "type": "side",
   "text": "print \"THE WALTON MONUMENT\""
  },
  {
   "address": 2972,
   "type": "side",
   "text": "print \"TO THE FAMOUS ARCHITECT\""
  },
  {
   "address": 2993,
   "type": "side",
   "text": "jump palyar_attack_end"
  },
  {
   "address": 2996,
   "type": "line",
   "text": "Script 40, square 06-03 destroyed ($2B00 entry $08, Palyar): say_just_destroyed (\"YOU HAVE JUST DESTROYED\"), \"ST. STALLARDS\", then palyar_attack_end."
  },
  {
   "address": 2996,
   "type": "side",
   "text": "call say_just_destroyed"
  },
  {
   "address": 2999,
   "type": "side",
   "text": "print \"ST. STALLARDS\""
  },
  {
   "address": 3016,
   "type": "side",
   "text": "jump palyar_attack_end"
  },
  {
   "address": 3019,
   "type": "line",
   "text": "Script 41, square 10-01 destroyed ($2B00 entry $49, Mechanoid): say_just_destroyed (\"YOU HAVE JUST DESTROYED\"), \"THE MOORBY ARCH\", then mechanoid_attack_end."
  },
  {
   "address": 3019,
   "type": "side",
   "text": "call say_just_destroyed"
  },
  {
   "address": 3022,
   "type": "side",
   "text": "print \"THE MOORBY ARCH\""
  },
  {
   "address": 3038,
   "type": "side",
   "text": "jump mechanoid_attack_end"
  },
  {
   "address": 3041,
   "type": "line",
   "text": "Script 42, square 07-00 destroyed ($2B00 entry $4A, Mechanoid): say_just_destroyed (\"YOU HAVE JUST DESTROYED\"), \"TYLER POINT\", then mechanoid_attack_end."
  },
  {
   "address": 3041,
   "type": "side",
   "text": "call say_just_destroyed"
  },
  {
   "address": 3044,
   "type": "side",
   "text": "print \"TYLER POINT\""
  },
  {
   "address": 3059,
   "type": "side",
   "text": "jump mechanoid_attack_end"
  },
  {
   "address": 3062,
   "type": "line",
   "text": "Script 43, square 08-07 destroyed ($2B00 entry $0B, Palyar): say_just_destroyed (\"YOU HAVE JUST DESTROYED\"), \"BOSHER STADIUM\", then palyar_attack_end."
  },
  {
   "address": 3062,
   "type": "side",
   "text": "call say_just_destroyed"
  },
  {
   "address": 3065,
   "type": "side",
   "text": "print \"BOSHER STADIUM\""
  },
  {
   "address": 3083,
   "type": "side",
   "text": "jump palyar_attack_end"
  },
  {
   "address": 3086,
   "type": "line",
   "text": "Script 44, square 12-13 destroyed ($2B00 entry $0C, Palyar): say_just_destroyed (\"YOU HAVE JUST DESTROYED\"), \"JORDAN AIRPORT\", then palyar_attack_end."
  },
  {
   "address": 3086,
   "type": "side",
   "text": "call say_just_destroyed"
  },
  {
   "address": 3089,
   "type": "side",
   "text": "print \"JORDAN AIRPORT\""
  },
  {
   "address": 3100,
   "type": "side",
   "text": "jump palyar_attack_end"
  },
  {
   "address": 3103,
   "type": "line",
   "text": "Script 45, square 02-04 destroyed ($2B00 entry $4D, Mechanoid): say_just_destroyed (\"YOU HAVE JUST DESTROYED\"), \"VECTOR HENGE\", then mechanoid_attack_end."
  },
  {
   "address": 3103,
   "type": "side",
   "text": "call say_just_destroyed"
  },
  {
   "address": 3106,
   "type": "side",
   "text": "print \"VECTOR HENGE\""
  },
  {
   "address": 3122,
   "type": "side",
   "text": "jump mechanoid_attack_end"
  },
  {
   "address": 3125,
   "type": "line",
   "text": "Script 46, square 07-09 destroyed ($2B00 entry $0E, Palyar): say_just_destroyed (\"YOU HAVE JUST DESTROYED\"), \"THE PALYAR COMMANDER'S\", \"BROTHER-IN-LAWS HOUSE\", sets $BEC0 bit 5 (the brother-in-law is angry), then palyar_attack_end."
  },
  {
   "address": 3125,
   "type": "side",
   "text": "call say_just_destroyed"
  },
  {
   "address": 3128,
   "type": "side",
   "text": "print \"THE PALYAR COMMANDER'S\""
  },
  {
   "address": 3131,
   "type": "side",
   "text": "print \"BROTHER-IN-LAWS HOUSE\""
  },
  {
   "address": 3137,
   "type": "side",
   "text": "set $BEC0 bit 5 (brother-in-law angry)"
  },
  {
   "address": 3139,
   "type": "side",
   "text": "jump palyar_attack_end"
  },
  {
   "address": 3142,
   "type": "line",
   "text": "Script 47, square 01-04 destroyed ($2B00 entry $4F, Mechanoid): say_just_destroyed (\"YOU HAVE JUST DESTROYED\"), \"THE MECHANOID FORT\", then mechanoid_attack_end."
  },
  {
   "address": 3142,
   "type": "side",
   "text": "call say_just_destroyed"
  },
  {
   "address": 3145,
   "type": "side",
   "text": "print \"THE MECHANOID FORT\""
  },
  {
   "address": 3155,
   "type": "side",
   "text": "jump mechanoid_attack_end"
  },
  {
   "address": 3158,
   "type": "line",
   "text": "Script 48, square 15-02 destroyed ($2B00 entry $10, Palyar): say_just_destroyed (\"YOU HAVE JUST DESTROYED\"), \"THE COACH AND HORSES\", \"YOU WILL NOT BE POPULAR\", then palyar_attack_end."
  },
  {
   "address": 3158,
   "type": "side",
   "text": "call say_just_destroyed"
  },
  {
   "address": 3161,
   "type": "side",
   "text": "print \"THE COACH AND HORSES\""
  },
  {
   "address": 3182,
   "type": "side",
   "text": "print \"YOU WILL NOT BE POPULAR\""
  },
  {
   "address": 3196,
   "type": "side",
   "text": "jump palyar_attack_end"
  },
  {
   "address": 3199,
   "type": "line",
   "text": "Script 27, started at $8797 when a missile hits object 0 (the brother-in-law's new ship): \"YOU HAVE JUST DESTROYED\", \"THE PALYAR COMMANDER'S\", \"BROTHER-IN-LAWS\", \"NEW SHIP\", sets $BEC0 bit 5 (the brother-in-law is angry), then palyar_attack_end."
  },
  {
   "address": 3199,
   "type": "side",
   "text": "call say_just_destroyed"
  },
  {
   "address": 3202,
   "type": "side",
   "text": "print \"THE PALYAR COMMANDER'S\""
  },
  {
   "address": 3205,
   "type": "side",
   "text": "print \"BROTHER-IN-LAWS\""
  },
  {
   "address": 3210,
   "type": "side",
   "text": "print \"NEW SHIP\""
  },
  {
   "address": 3218,
   "type": "side",
   "text": "set $BEC0 bit 5 (brother-in-law angry)"
  },
  {
   "address": 3220,
   "type": "side",
   "text": "jump palyar_attack_end"
  },
  {
   "address": 3223,
   "type": "line",
   "text": "Script 49, a square whose $2B00 entry is $11 or $51 destroyed (03-13, 09-13, 04-15, 09-15, 13-04): 1 s, \"TRAITOR!\", a blank line, releases $BEC0 bit 6; no reprisal. One of the two signs (features.md: Commodore and Atari); which one stands on these squares is not settled here."
  },
  {
   "address": 3223,
   "type": "side",
   "text": "call wait_1s"
  },
  {
   "address": 3226,
   "type": "side",
   "text": "print \"TRAITOR!\""
  },
  {
   "address": 3238,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 3240,
   "type": "side",
   "text": "clear $BEC0 bit 6 (event script running)"
  },
  {
   "address": 3242,
   "type": "side",
   "text": "return"
  },
  {
   "address": 3243,
   "type": "line",
   "text": "Script 50, a square whose $2B00 entry is $12 or $52 destroyed (14-05, 14-08, 12-11, 06-15, 11-15): 1 s, \"GOOD SHOW!\", a blank line, releases $BEC0 bit 6; no reprisal. The other sign of script_traitor's pair."
  },
  {
   "address": 3243,
   "type": "side",
   "text": "call wait_1s"
  },
  {
   "address": 3246,
   "type": "side",
   "text": "print \"GOOD SHOW!\""
  },
  {
   "address": 3260,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 3262,
   "type": "side",
   "text": "clear $BEC0 bit 6 (event script running)"
  },
  {
   "address": 3264,
   "type": "side",
   "text": "return"
  },
  {
   "address": 3265,
   "type": "line",
   "text": "Script subroutine: canned message 23, \"YOU HAVE JUST DESTROYED\", the first line of scripts 27 and 36-48."
  },
  {
   "address": 3265,
   "type": "side",
   "text": "canned message 23 \"YOU HAVE JUST DESTROYED\""
  },
  {
   "address": 3267,
   "type": "side",
   "text": "return"
  },
  {
   "address": 3268,
   "type": "line",
   "text": "Common end of the Palyar sites' scripts: say_palyar_attack (\"PALYAR SHIP ATTACKING\", attack pending in $BEF8), a blank line, releases $BEC0 bit 6, returns."
  },
  {
   "address": 3268,
   "type": "side",
   "text": "call say_palyar_attack"
  },
  {
   "address": 3271,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 3273,
   "type": "side",
   "text": "clear $BEC0 bit 6 (event script running)"
  },
  {
   "address": 3275,
   "type": "side",
   "text": "return"
  },
  {
   "address": 3276,
   "type": "line",
   "text": "Common end of the Mechanoid sites' scripts: say_mechanoid_attack (\"MECHANOID SHIP ATTACK\", attack pending in $BEF8), a blank line, releases $BEC0 bit 6, returns."
  },
  {
   "address": 3276,
   "type": "side",
   "text": "call say_mechanoid_attack"
  },
  {
   "address": 3279,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 3281,
   "type": "side",
   "text": "clear $BEC0 bit 6 (event script running)"
  },
  {
   "address": 3283,
   "type": "side",
   "text": "return"
  },
  {
   "address": 3284,
   "type": "line",
   "text": "Script 34, an unnamed Palyar square destroyed ($2B00 entry $02, 100 squares): a random byte of 80 or less (81 chances in 256) brings palyar_attack_end; otherwise it only releases $BEC0 bit 6."
  },
  {
   "address": 3284,
   "type": "side",
   "text": "if random <= 80 goto palyar_attack_end"
  },
  {
   "address": 3288,
   "type": "side",
   "text": "clear $BEC0 bit 6 (event script running)"
  },
  {
   "address": 3290,
   "type": "side",
   "text": "return"
  },
  {
   "address": 3291,
   "type": "line",
   "text": "Script 35, an unnamed Mechanoid square destroyed ($2B00 entry $43, 106 squares): a random byte of 80 or less (81 chances in 256) brings mechanoid_attack_end; otherwise it only releases $BEC0 bit 6."
  },
  {
   "address": 3291,
   "type": "side",
   "text": "if random <= 80 goto mechanoid_attack_end"
  },
  {
   "address": 3295,
   "type": "side",
   "text": "clear $BEC0 bit 6 (event script running)"
  },
  {
   "address": 3297,
   "type": "side",
   "text": "return"
  },
  {
   "address": 3298,
   "type": "line",
   "text": "Script 28, entering room $29, the Palyar briefing room: 1 s, $57EF := $29, \"PALYAR BRIEFING ROOM\", a blank line, and each paragraph only while the player is still in the room ($57EF against $CD; leaving jumps to $0D9A, the end): \"WE WILL REWARD\", \"DELIVERY OF OUR NEEDS\", \"TO APPROPRIATE ROOMS IN\", \"THE PALYAR COLONY CRAFT\"."
  },
  {
   "address": 3298,
   "type": "side",
   "text": "call wait_1s"
  },
  {
   "address": 3301,
   "type": "side",
   "text": "$57EF := $29 (room $29)"
  },
  {
   "address": 3304,
   "type": "side",
   "text": "print \"PALYAR BRIEFING ROOM\""
  },
  {
   "address": 3311,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 3313,
   "type": "side",
   "text": "if the player is not in room $57EF ($CD) goto $0D9A"
  },
  {
   "address": 3316,
   "type": "side",
   "text": "print \"WE WILL REWARD\""
  },
  {
   "address": 3322,
   "type": "side",
   "text": "print \"DELIVERY OF OUR NEEDS\""
  },
  {
   "address": 3338,
   "type": "side",
   "text": "print \"TO APPROPRIATE ROOMS IN\""
  },
  {
   "address": 3356,
   "type": "side",
   "text": "print \"THE PALYAR COLONY CRAFT\""
  },
  {
   "address": 3368,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 3370,
   "type": "line",
   "text": "Script 28, second paragraph if the player stayed: \"THERE IS A BIG FEE FOR\", \"A CAPTURED MECHANOID\" (object 12, which the interview room buys for 250000), a blank line."
  },
  {
   "address": 3370,
   "type": "side",
   "text": "if the player is not in room $57EF ($CD) goto $0D9A"
  },
  {
   "address": 3373,
   "type": "side",
   "text": "print \"THERE IS A BIG FEE FOR\""
  },
  {
   "address": 3384,
   "type": "side",
   "text": "print \"A CAPTURED MECHANOID\""
  },
  {
   "address": 3398,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 3400,
   "type": "line",
   "text": "Script 28, last paragraph if the player stayed: \"ONLY WHEN YOU KNOW HOW\", \"TO CHOOSE THEM FROM US\", \"DESTROY ALL MECHANOID\", \"OCCUPIED LOCATIONS FOR\", \"VERY SPECIAL GRATITUDE\", \"BRIEFING ENDS\"; at $0D9A releases $BEC0 bit 6 and returns (script_palyar_victory is the gratitude)."
  },
  {
   "address": 3400,
   "type": "side",
   "text": "if the player is not in room $57EF ($CD) goto $0D9A"
  },
  {
   "address": 3403,
   "type": "side",
   "text": "print \"ONLY WHEN YOU KNOW HOW\""
  },
  {
   "address": 3417,
   "type": "side",
   "text": "print \"TO CHOOSE THEM FROM US\""
  },
  {
   "address": 3430,
   "type": "side",
   "text": "print \"DESTROY ALL MECHANOID\""
  },
  {
   "address": 3436,
   "type": "side",
   "text": "print \"OCCUPIED LOCATIONS FOR\""
  },
  {
   "address": 3450,
   "type": "side",
   "text": "print \"VERY SPECIAL GRATITUDE\""
  },
  {
   "address": 3471,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 3473,
   "type": "side",
   "text": "print \"BRIEFING ENDS\""
  },
  {
   "address": 3480,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 3482,
   "type": "side",
   "text": "clear $BEC0 bit 6 (event script running)"
  },
  {
   "address": 3484,
   "type": "side",
   "text": "return"
  },
  {
   "address": 3485,
   "type": "line",
   "text": "Script 13, entering room $66, the Mechanoid briefing room, where the Mechanoid (object 12) starts: 1 s, $57EF := $66, \"MECHANOID BRIEFING ROOM\", \"WE WILL PAY\", \"FOR PALYAR REQUIREMENTS\", \"WHEN DELIVERED TO OUR\", \"CONTROL IN THIS COMPLEX\"; if the player is still in the room, \"WE MAY ALSO PAY FOR\", \"DESTRUCTION OF SELECTED\", \"PALYAR INSTALLATIONS\", \"BRIEFING ENDS\". No script pays for Palyar sites."
  },
  {
   "address": 3485,
   "type": "side",
   "text": "call wait_1s"
  },
  {
   "address": 3488,
   "type": "side",
   "text": "$57EF := $66 (room $66)"
  },
  {
   "address": 3491,
   "type": "side",
   "text": "print \"MECHANOID BRIEFING ROOM\""
  },
  {
   "address": 3497,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 3499,
   "type": "side",
   "text": "print \"WE WILL PAY\""
  },
  {
   "address": 3505,
   "type": "side",
   "text": "print \"FOR PALYAR REQUIREMENTS\""
  },
  {
   "address": 3511,
   "type": "side",
   "text": "print \"WHEN DELIVERED TO OUR\""
  },
  {
   "address": 3519,
   "type": "side",
   "text": "print \"CONTROL IN THIS COMPLEX\""
  },
  {
   "address": 3525,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 3527,
   "type": "side",
   "text": "if the player is not in room $57EF ($CD) goto $0E01"
  },
  {
   "address": 3530,
   "type": "side",
   "text": "print \"WE MAY ALSO PAY FOR\""
  },
  {
   "address": 3542,
   "type": "side",
   "text": "print \"DESTRUCTION OF SELECTED\""
  },
  {
   "address": 3568,
   "type": "side",
   "text": "print \"PALYAR INSTALLATIONS\""
  },
  {
   "address": 3574,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 3576,
   "type": "side",
   "text": "print \"BRIEFING ENDS\""
  },
  {
   "address": 3583,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 3585,
   "type": "side",
   "text": "clear $BEC0 bit 6 (event script running)"
  },
  {
   "address": 3587,
   "type": "side",
   "text": "return"
  },
  {
   "address": 3588,
   "type": "line",
   "text": "Script 2, entering room $10: canned message 8 \"COMMUNICATION ROOM\"; $57EE := 30 (the Antenna), $57EF := $10. The radio works when the Antenna lies in this room ($2940) or is carried ($941A); otherwise \"NOT WORKING\" and the end."
  },
  {
   "address": 3588,
   "type": "side",
   "text": "canned message 8 \"COMMUNICATION ROOM\""
  },
  {
   "address": 3590,
   "type": "side",
   "text": "$57EE := $1E (object 30, ANTENNA)"
  },
  {
   "address": 3593,
   "type": "side",
   "text": "$57EF := $10 (room $10)"
  },
  {
   "address": 3596,
   "type": "side",
   "text": "if object [$57EE] lies in room [$57EF] ($2940) goto hertz_offer"
  },
  {
   "address": 3599,
   "type": "side",
   "text": "if carrying object [$57EE] goto hertz_offer"
  },
  {
   "address": 3602,
   "type": "side",
   "text": "print \"NOT WORKING\""
  },
  {
   "address": 3608,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 3610,
   "type": "side",
   "text": "clear $BEC0 bit 6 (event script running)"
  },
  {
   "address": 3612,
   "type": "side",
   "text": "return"
  },
  {
   "address": 3613,
   "type": "line",
   "text": "Script 2 with the Antenna: \"MESSAGE FROM\", \"HERTZ SPACESHIP RENTAL\", \"SHIP FOR HIRE 999999 CR\", clears the key, \"DO YOU WANT TO HIRE?\" and ask_yes_no; without a Y, \"OK PLEASE CALL AGAIN\", \"MESSAGE ENDS\"."
  },
  {
   "address": 3613,
   "type": "side",
   "text": "print \"MESSAGE FROM\""
  },
  {
   "address": 3618,
   "type": "side",
   "text": "print \"HERTZ SPACESHIP RENTAL\""
  },
  {
   "address": 3643,
   "type": "side",
   "text": "print \"SHIP FOR HIRE 999999 CR\""
  },
  {
   "address": 3660,
   "type": "side",
   "text": "clear the key ($B4B2)"
  },
  {
   "address": 3661,
   "type": "side",
   "text": "print \"DO YOU WANT TO HIRE?\""
  },
  {
   "address": 3674,
   "type": "side",
   "text": "call ask_yes_no"
  },
  {
   "address": 3677,
   "type": "side",
   "text": "if $BEC0 bit 0 (last answer was Y) goto hertz_check_funds"
  },
  {
   "address": 3681,
   "type": "side",
   "text": "print \"OK PLEASE CALL AGAIN\""
  },
  {
   "address": 3688,
   "type": "side",
   "text": "canned message 7 \"MESSAGE ENDS\""
  },
  {
   "address": 3690,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 3692,
   "type": "side",
   "text": "clear $BEC0 bit 6 (event script running)"
  },
  {
   "address": 3694,
   "type": "side",
   "text": "return"
  },
  {
   "address": 3695,
   "type": "line",
   "text": "Script 2 on a Y: goes on only if the top byte of figure 8 ($7700) is above 0, i.e. with 1,000,000 credits or more although the price is 999,999; otherwise \"INSUFFICIENT FUNDS\", \"YOU HAVE [figure 8] CREDITS\", \"MESSAGE ENDS\"."
  },
  {
   "address": 3695,
   "type": "side",
   "text": "if [$7700] > $00 goto hertz_despatch"
  },
  {
   "address": 3701,
   "type": "side",
   "text": "print \"INSUFFICIENT FUNDS\""
  },
  {
   "address": 3719,
   "type": "side",
   "text": "canned message 21 \"YOU HAVE [figure 8] CREDITS\""
  },
  {
   "address": 3721,
   "type": "side",
   "text": "canned message 7 \"MESSAGE ENDS\""
  },
  {
   "address": 3723,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 3725,
   "type": "side",
   "text": "clear $BEC0 bit 6 (event script running)"
  },
  {
   "address": 3727,
   "type": "side",
   "text": "return"
  },
  {
   "address": 3728,
   "type": "line",
   "text": "Script 2, paid: adds 99000001 to figure 8 (999,999 less), \"SHIP DESPATCHED\", \"IT WILL LAND\", \"AT LOC 8-8 IN 2 MINS\"; $BEFF := $FF, which makes $8664 put object 7 (the interstellar ship) at 08-08, height $7F high byte, and $8634 (called at $855F every pass) lower it; sets $BEC0 bit 2 (hired: script 7 needs no Novadrive)."
  },
  {
   "address": 3728,
   "type": "side",
   "text": "figure 8 += 99000001 (BCD: 999999 less)"
  },
  {
   "address": 3734,
   "type": "side",
   "text": "print \"SHIP DESPATCHED\""
  },
  {
   "address": 3749,
   "type": "side",
   "text": "print \"IT WILL LAND\""
  },
  {
   "address": 3755,
   "type": "side",
   "text": "print \"AT LOC 8-8 IN 2 MINS\""
  },
  {
   "address": 3770,
   "type": "side",
   "text": "poke $BEFF := $FF"
  },
  {
   "address": 3774,
   "type": "side",
   "text": "set $BEC0 bit 2 (ship hired)"
  },
  {
   "address": 3776,
   "type": "side",
   "text": "clear $BEC0 bit 6 (event script running)"
  },
  {
   "address": 3778,
   "type": "side",
   "text": "return"
  },
  {
   "address": 3779,
   "type": "line",
   "text": "Script 14, entering room $AD: \"POWER ROOM\". Buys object 31 (ENERGY CRYSTAL) for 100000 credits: $57EE := 31, $57EF := $AD, figure 9 := 100000, then room_payment."
  },
  {
   "address": 3779,
   "type": "side",
   "text": "$57EE := $1F (object 31, ENERGY CRYSTAL)"
  },
  {
   "address": 3782,
   "type": "side",
   "text": "$57EF := $AD (room $AD)"
  },
  {
   "address": 3785,
   "type": "side",
   "text": "figure 9 := 00100000 (BCD)"
  },
  {
   "address": 3791,
   "type": "side",
   "text": "print \"POWER ROOM\""
  },
  {
   "address": 3796,
   "type": "side",
   "text": "jump room_payment"
  },
  {
   "address": 3799,
   "type": "line",
   "text": "Script 15, entering room $93: \"STORES\". Buys object 34 (LARGE BOX) for 35000 credits: $57EE := 34, $57EF := $93, figure 9 := 35000, then room_payment."
  },
  {
   "address": 3799,
   "type": "side",
   "text": "$57EE := $22 (object 34, LARGE BOX)"
  },
  {
   "address": 3802,
   "type": "side",
   "text": "$57EF := $93 (room $93)"
  },
  {
   "address": 3805,
   "type": "side",
   "text": "figure 9 := 00035000 (BCD)"
  },
  {
   "address": 3811,
   "type": "side",
   "text": "print \"STORES\""
  },
  {
   "address": 3815,
   "type": "side",
   "text": "jump room_payment"
  },
  {
   "address": 3818,
   "type": "line",
   "text": "Script 16, entering room $92: \"ARMOURY\". Buys object 35 (USEFUL ARMAMENT) for 65000 credits: $57EE := 35, $57EF := $92, figure 9 := 65000, then room_payment."
  },
  {
   "address": 3818,
   "type": "side",
   "text": "$57EE := $23 (object 35, USEFUL ARMAMENT)"
  },
  {
   "address": 3821,
   "type": "side",
   "text": "$57EF := $92 (room $92)"
  },
  {
   "address": 3824,
   "type": "side",
   "text": "figure 9 := 00065000 (BCD)"
  },
  {
   "address": 3830,
   "type": "side",
   "text": "print \"ARMOURY\""
  },
  {
   "address": 3834,
   "type": "side",
   "text": "jump room_payment"
  },
  {
   "address": 3837,
   "type": "line",
   "text": "Script 17, entering room $90: \"LABORATORY\". Buys object 43 (WINCHESTER) for 100000 credits: $57EE := 43, $57EF := $90, figure 9 := 100000, then room_payment."
  },
  {
   "address": 3837,
   "type": "side",
   "text": "$57EE := $2B (object 43, WINCHESTER)"
  },
  {
   "address": 3840,
   "type": "side",
   "text": "$57EF := $90 (room $90)"
  },
  {
   "address": 3843,
   "type": "side",
   "text": "figure 9 := 00100000 (BCD)"
  },
  {
   "address": 3849,
   "type": "side",
   "text": "print \"LABORATORY\""
  },
  {
   "address": 3853,
   "type": "side",
   "text": "jump room_payment"
  },
  {
   "address": 3856,
   "type": "line",
   "text": "Script 18, entering room $AA: \"CONTROL ROOM\". Buys object 45 (DATABANK) for 100000 credits: $57EE := 45, $57EF := $AA, figure 9 := 100000, then room_payment."
  },
  {
   "address": 3856,
   "type": "side",
   "text": "$57EE := $2D (object 45, DATABANK)"
  },
  {
   "address": 3859,
   "type": "side",
   "text": "$57EF := $AA (room $AA)"
  },
  {
   "address": 3862,
   "type": "side",
   "text": "figure 9 := 00100000 (BCD)"
  },
  {
   "address": 3868,
   "type": "side",
   "text": "print \"CONTROL ROOM\""
  },
  {
   "address": 3873,
   "type": "side",
   "text": "jump room_payment"
  },
  {
   "address": 3876,
   "type": "line",
   "text": "Script 19, entering room $9A: \"INTERVIEW ROOM\". Buys object 12 (MECHANOID) for 250000 credits: $57EE := 12, $57EF := $9A, figure 9 := 250000, then room_payment."
  },
  {
   "address": 3876,
   "type": "side",
   "text": "$57EE := $0C (object 12, the Mechanoid)"
  },
  {
   "address": 3879,
   "type": "side",
   "text": "$57EF := $9A (room $9A)"
  },
  {
   "address": 3882,
   "type": "side",
   "text": "figure 9 := 00250000 (BCD)"
  },
  {
   "address": 3888,
   "type": "side",
   "text": "print \"INTERVIEW ROOM\""
  },
  {
   "address": 3893,
   "type": "side",
   "text": "jump room_payment"
  },
  {
   "address": 3896,
   "type": "line",
   "text": "Script 20, entering room $46: \"MECHANOID FUEL STORES\". Buys object 29 (NEUTRON FUEL) for 250000 credits: $57EE := 29, $57EF := $46, figure 9 := 250000, then mech_room_check_leader (only while the Mechanoid is at home)."
  },
  {
   "address": 3896,
   "type": "side",
   "text": "$57EE := $1D (object 29, NEUTRON FUEL)"
  },
  {
   "address": 3899,
   "type": "side",
   "text": "$57EF := $46 (room $46)"
  },
  {
   "address": 3902,
   "type": "side",
   "text": "figure 9 := 00250000 (BCD)"
  },
  {
   "address": 3908,
   "type": "side",
   "text": "print \"MECHANOID FUEL STORES\""
  },
  {
   "address": 3914,
   "type": "side",
   "text": "jump mech_room_check_leader"
  },
  {
   "address": 3917,
   "type": "line",
   "text": "Script 22, entering room $32: \"MECHANOID POWER ROOM\". Buys object 31 (ENERGY CRYSTAL) for 100000 credits: $57EE := 31, $57EF := $32, figure 9 := 100000, then mech_room_check_leader (only while the Mechanoid is at home)."
  },
  {
   "address": 3917,
   "type": "side",
   "text": "$57EE := $1F (object 31, ENERGY CRYSTAL)"
  },
  {
   "address": 3920,
   "type": "side",
   "text": "$57EF := $32 (room $32)"
  },
  {
   "address": 3923,
   "type": "side",
   "text": "figure 9 := 00100000 (BCD)"
  },
  {
   "address": 3929,
   "type": "side",
   "text": "print \"MECHANOID POWER ROOM\""
  },
  {
   "address": 3935,
   "type": "side",
   "text": "jump mech_room_check_leader"
  },
  {
   "address": 3938,
   "type": "line",
   "text": "Script 23, entering room $30: \"MECHANOID STORES\". Buys object 34 (LARGE BOX) for 80000 credits: $57EE := 34, $57EF := $30, figure 9 := 80000, then mech_room_check_leader (only while the Mechanoid is at home)."
  },
  {
   "address": 3938,
   "type": "side",
   "text": "$57EE := $22 (object 34, LARGE BOX)"
  },
  {
   "address": 3941,
   "type": "side",
   "text": "$57EF := $30 (room $30)"
  },
  {
   "address": 3944,
   "type": "side",
   "text": "figure 9 := 00080000 (BCD)"
  },
  {
   "address": 3950,
   "type": "side",
   "text": "print \"MECHANOID STORES\""
  },
  {
   "address": 3955,
   "type": "side",
   "text": "jump mech_room_check_leader"
  },
  {
   "address": 3958,
   "type": "line",
   "text": "Script 24, entering room $22: \"MECHANOID ARMOURY\". Buys object 35 (USEFUL ARMAMENT) for 120000 credits: $57EE := 35, $57EF := $22, figure 9 := 120000, then mech_room_check_leader (only while the Mechanoid is at home)."
  },
  {
   "address": 3958,
   "type": "side",
   "text": "$57EE := $23 (object 35, USEFUL ARMAMENT)"
  },
  {
   "address": 3961,
   "type": "side",
   "text": "$57EF := $22 (room $22)"
  },
  {
   "address": 3964,
   "type": "side",
   "text": "figure 9 := 00120000 (BCD)"
  },
  {
   "address": 3970,
   "type": "side",
   "text": "print \"MECHANOID ARMOURY\""
  },
  {
   "address": 3975,
   "type": "side",
   "text": "jump mech_room_check_leader"
  },
  {
   "address": 3978,
   "type": "line",
   "text": "Script 25, entering room $12: \"MECHANOID LABORATORY\". Buys object 43 (WINCHESTER) for 250000 credits: $57EE := 43, $57EF := $12, figure 9 := 250000, then mech_room_check_leader (only while the Mechanoid is at home)."
  },
  {
   "address": 3978,
   "type": "side",
   "text": "$57EE := $2B (object 43, WINCHESTER)"
  },
  {
   "address": 3981,
   "type": "side",
   "text": "$57EF := $12 (room $12)"
  },
  {
   "address": 3984,
   "type": "side",
   "text": "figure 9 := 00250000 (BCD)"
  },
  {
   "address": 3990,
   "type": "side",
   "text": "print \"MECHANOID LABORATORY\""
  },
  {
   "address": 3995,
   "type": "side",
   "text": "jump mech_room_check_leader"
  },
  {
   "address": 3998,
   "type": "line",
   "text": "Script 3, entering room $88: \"ENGINE ROOM\". Buys object 29 (NEUTRON FUEL) for 200000 credits: $57EE := 29, $57EF := $88, figure 9 := 200000, then room_payment."
  },
  {
   "address": 3998,
   "type": "side",
   "text": "$57EE := $1D (object 29, NEUTRON FUEL)"
  },
  {
   "address": 4001,
   "type": "side",
   "text": "$57EF := $88 (room $88)"
  },
  {
   "address": 4004,
   "type": "side",
   "text": "figure 9 := 00200000 (BCD)"
  },
  {
   "address": 4010,
   "type": "side",
   "text": "print \"ENGINE ROOM\""
  },
  {
   "address": 4015,
   "type": "side",
   "text": "jump room_payment"
  },
  {
   "address": 4018,
   "type": "line",
   "text": "Script 4, entering room $9B: \"CONFERENCE ROOM\". Buys object 42 (ESSENTIAL 12939 SUPPLY) for 50000 credits: $57EE := 42, $57EF := $9B, figure 9 := 50000, then room_payment."
  },
  {
   "address": 4018,
   "type": "side",
   "text": "$57EE := $2A (object 42, ESSENTIAL 12939 SUPPLY)"
  },
  {
   "address": 4021,
   "type": "side",
   "text": "$57EF := $9B (room $9B)"
  },
  {
   "address": 4024,
   "type": "side",
   "text": "figure 9 := 00050000 (BCD)"
  },
  {
   "address": 4030,
   "type": "side",
   "text": "print \"CONFERENCE ROOM\""
  },
  {
   "address": 4035,
   "type": "side",
   "text": "jump room_payment"
  },
  {
   "address": 4038,
   "type": "line",
   "text": "Script 5, entering room $A2: \"EXCHEQUER\". Buys object 38 (GOLD) for 100000 credits: $57EE := 38, $57EF := $A2, figure 9 := 100000, then room_payment."
  },
  {
   "address": 4038,
   "type": "side",
   "text": "$57EE := $26 (object 38, GOLD)"
  },
  {
   "address": 4041,
   "type": "side",
   "text": "$57EF := $A2 (room $A2)"
  },
  {
   "address": 4044,
   "type": "side",
   "text": "figure 9 := 00100000 (BCD)"
  },
  {
   "address": 4050,
   "type": "side",
   "text": "print \"EXCHEQUER\""
  },
  {
   "address": 4054,
   "type": "side",
   "text": "jump room_payment"
  },
  {
   "address": 4057,
   "type": "line",
   "text": "Script 6, entering room $A3: \"KITCHEN\". Buys object 44 (CATERING PROVISIONS) for 60000 credits: $57EE := 44, $57EF := $A3, figure 9 := 60000, then room_payment."
  },
  {
   "address": 4057,
   "type": "side",
   "text": "$57EE := $2C (object 44, CATERING PROVISIONS)"
  },
  {
   "address": 4060,
   "type": "side",
   "text": "$57EF := $A3 (room $A3)"
  },
  {
   "address": 4063,
   "type": "side",
   "text": "figure 9 := 00060000 (BCD)"
  },
  {
   "address": 4069,
   "type": "side",
   "text": "print \"KITCHEN\""
  },
  {
   "address": 4073,
   "type": "side",
   "text": "jump room_payment"
  },
  {
   "address": 4076,
   "type": "line",
   "text": "Script 9, entering room $A5: \"INFIRMARY\". Buys object 41 (MEDICAL SUPPLIES) for 40000 credits: $57EE := 41, $57EF := $A5, figure 9 := 40000, then room_payment."
  },
  {
   "address": 4076,
   "type": "side",
   "text": "$57EE := $29 (object 41, MEDICAL SUPPLIES)"
  },
  {
   "address": 4079,
   "type": "side",
   "text": "$57EF := $A5 (room $A5)"
  },
  {
   "address": 4082,
   "type": "side",
   "text": "figure 9 := 00040000 (BCD)"
  },
  {
   "address": 4088,
   "type": "side",
   "text": "print \"INFIRMARY\""
  },
  {
   "address": 4092,
   "type": "side",
   "text": "jump room_payment"
  },
  {
   "address": 4095,
   "type": "line",
   "text": "Script 11, entering room $51: wait_1s, \"PRISON\", releases $BEC0 bit 6, returns. (\"PLEASE LEAVE\", which follows it in memory, belongs to room_payment.)"
  },
  {
   "address": 4095,
   "type": "side",
   "text": "call wait_1s"
  },
  {
   "address": 4096,
   "type": "line",
   "text": "The rest of script_prison, labelled at $1000 only because a data span stops at that page edge: the target bytes of its call to wait_1s, the print of \"PRISON\", the release of $BEC0 bit 6 and the return."
  },
  {
   "address": 4098,
   "type": "side",
   "text": "print \"PRISON\""
  },
  {
   "address": 4109,
   "type": "side",
   "text": "clear $BEC0 bit 6 (event script running)"
  },
  {
   "address": 4111,
   "type": "side",
   "text": "return"
  },
  {
   "address": 4112,
   "type": "line",
   "text": "Common body of the room scripts that buy an object ($57EE the object, $57EF the room, figure 9 the price): nothing if the object is already paid for ($29C0 bit 0); otherwise it speaks only if the player carries the object ($941A) or it lies in this room ($2940 = $57EF)."
  },
  {
   "address": 4112,
   "type": "side",
   "text": "if $29C0[$57EE] AND $01 goto $1047"
  },
  {
   "address": 4116,
   "type": "side",
   "text": "if carrying object [$57EE] goto room_asks_delivery"
  },
  {
   "address": 4119,
   "type": "side",
   "text": "if object [$57EE] lies in room [$57EF] ($2940) goto room_asks_delivery"
  },
  {
   "address": 4122,
   "type": "side",
   "text": "jump $1047"
  },
  {
   "address": 4125,
   "type": "line",
   "text": "\"PLEASE LEAVE\", the object's name (canned message number $57EE), \"HERE FOR [figure 9] REWARD\"; then waits, while the player stays in the room ($CD = $57EF), for the object to lie in it. Leaving ends it unpaid; an object already lying there is paid at once."
  },
  {
   "address": 4125,
   "type": "side",
   "text": "print \"PLEASE LEAVE\""
  },
  {
   "address": 4135,
   "type": "side",
   "text": "canned message [$57EE] (the object's name)"
  },
  {
   "address": 4137,
   "type": "side",
   "text": "print \"HERE FOR [figure 9] REWARD\""
  },
  {
   "address": 4144,
   "type": "side",
   "text": "if object [$57EE] lies in room [$57EF] ($2940) goto room_pays"
  },
  {
   "address": 4147,
   "type": "side",
   "text": "if the player is in room $57EF ($CD) goto $1030"
  },
  {
   "address": 4150,
   "type": "side",
   "text": "jump $1047"
  },
  {
   "address": 4153,
   "type": "line",
   "text": "Delivery accepted: sets $29C0 bits 0 (paid) and 4 (no longer takeable without the Kitchen Sink) of the object, \"[figure 9] CREDITS PAID\", figure 8 := figure 9 + figure 8, \"YOU HAVE [figure 8] CREDITS\", a blank line, releases $BEC0 bit 6. Script 10's 500,000 is paid from $103B too."
  },
  {
   "address": 4153,
   "type": "side",
   "text": "$29C0[$57EE] OR $11: sets bits 0 and 4"
  },
  {
   "address": 4155,
   "type": "side",
   "text": "print \"[figure 9] CREDITS PAID\""
  },
  {
   "address": 4161,
   "type": "side",
   "text": "figure 8 := figure 9 + figure 8"
  },
  {
   "address": 4165,
   "type": "side",
   "text": "canned message 21 \"YOU HAVE [figure 8] CREDITS\""
  },
  {
   "address": 4167,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 4169,
   "type": "side",
   "text": "clear $BEC0 bit 6 (event script running)"
  },
  {
   "address": 4171,
   "type": "side",
   "text": "return"
  },
  {
   "address": 4172,
   "type": "line",
   "text": "The Mechanoid rooms (scripts 20, 22-25): keeps $57EE/$57EF in $57E8/$57E9 and pays through room_payment only while object 12, the Mechanoid, lies in room $66, their briefing room; otherwise \"THE MECHANOIDS SAY\", \"PUT BACK OUR LEADER\", a blank line, and the end."
  },
  {
   "address": 4172,
   "type": "side",
   "text": "$57E8 := $57EE"
  },
  {
   "address": 4174,
   "type": "side",
   "text": "$57E9 := $57EF"
  },
  {
   "address": 4176,
   "type": "side",
   "text": "$57EE := $0C (object 12, the Mechanoid)"
  },
  {
   "address": 4179,
   "type": "side",
   "text": "$57EF := $66 (room $66)"
  },
  {
   "address": 4182,
   "type": "side",
   "text": "if object [$57EE] not lies in room [$57EF] ($2940) goto $1060"
  },
  {
   "address": 4185,
   "type": "side",
   "text": "$57EE := $57E8"
  },
  {
   "address": 4187,
   "type": "side",
   "text": "$57EF := $57E9"
  },
  {
   "address": 4189,
   "type": "side",
   "text": "jump room_payment"
  },
  {
   "address": 4192,
   "type": "side",
   "text": "print \"THE MECHANOIDS SAY\""
  },
  {
   "address": 4202,
   "type": "side",
   "text": "print \"PUT BACK OUR LEADER\""
  },
  {
   "address": 4218,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 4220,
   "type": "side",
   "text": "clear $BEC0 bit 6 (event script running)"
  },
  {
   "address": 4222,
   "type": "side",
   "text": "return"
  },
  {
   "address": 4223,
   "type": "line",
   "text": "Script 7, run each time object 7, the interstellar ship (also the ship Hertz sends), is boarded: $57EF := 0 (the surface), $57EE := 25 (the Novadrive), \"INTERSTELLAR SHIP\". Then waits while the player rides it ($A9 = 7) for the room $CD to be 0, the surface; leaving the ship ends the script."
  },
  {
   "address": 4223,
   "type": "side",
   "text": "$57EF := $00 (room $00)"
  },
  {
   "address": 4226,
   "type": "side",
   "text": "$57EE := $19 (object 25, NOVADRIVE)"
  },
  {
   "address": 4229,
   "type": "side",
   "text": "print \"INTERSTELLAR SHIP\""
  },
  {
   "address": 4246,
   "type": "side",
   "text": "if the player does not ride object 7 ($A9) goto $10D7"
  },
  {
   "address": 4250,
   "type": "side",
   "text": "if the player is not in room $57EF ($CD) goto $1096"
  },
  {
   "address": 4253,
   "type": "line",
   "text": "Script 7 on the surface: 1 s; a hired ship ($BEC0 bit 2) or the Novadrive carried goes on to ship_press_y; otherwise \"NOVADRIVE REQUIRED\", a blank line, the end."
  },
  {
   "address": 4253,
   "type": "side",
   "text": "call wait_1s"
  },
  {
   "address": 4256,
   "type": "side",
   "text": "if $BEC0 bit 2 (ship hired) goto ship_press_y"
  },
  {
   "address": 4260,
   "type": "side",
   "text": "if carrying object [$57EE] goto ship_press_y"
  },
  {
   "address": 4263,
   "type": "side",
   "text": "print \"NOVADRIVE REQUIRED\""
  },
  {
   "address": 4276,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 4278,
   "type": "side",
   "text": "clear $BEC0 bit 6 (event script running)"
  },
  {
   "address": 4280,
   "type": "side",
   "text": "return"
  },
  {
   "address": 4281,
   "type": "line",
   "text": "Script 7: clears the key, \"PRESS Y TO LAUNCH\", then waits for Y while the player stays aboard ($A9 = 7); getting out ends it with a blank line."
  },
  {
   "address": 4281,
   "type": "side",
   "text": "clear the key ($B4B2)"
  },
  {
   "address": 4282,
   "type": "side",
   "text": "print \"PRESS Y TO LAUNCH\""
  },
  {
   "address": 4303,
   "type": "side",
   "text": "if key Y ($19) pressed goto ship_launch_check"
  },
  {
   "address": 4307,
   "type": "side",
   "text": "if the player rides object 7 ($A9) goto $10CF"
  },
  {
   "address": 4311,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 4313,
   "type": "side",
   "text": "clear $BEC0 bit 6 (event script running)"
  },
  {
   "address": 4315,
   "type": "side",
   "text": "return"
  },
  {
   "address": 4316,
   "type": "line",
   "text": "Script 7 on a Y: checks the surface, then the hire or the Novadrive, again; $57ED := $32 (square 02-03) and, if the advert there is destroyed ($2B00[$32] bit 7), \"THE AUTHOR WON'T LET\", \"YOU LEAVE UNTIL YOU\", \"FIX HIS ADVERT\" and the end; otherwise escape_ending."
  },
  {
   "address": 4316,
   "type": "side",
   "text": "if the player is not in room $57EF ($CD) goto $1096"
  },
  {
   "address": 4319,
   "type": "side",
   "text": "if $BEC0 bit 2 (ship hired) goto $10E6"
  },
  {
   "address": 4323,
   "type": "side",
   "text": "if not carrying object [$57EE] goto $1096"
  },
  {
   "address": 4326,
   "type": "side",
   "text": "$57ED := $32 (square 02-03)"
  },
  {
   "address": 4329,
   "type": "side",
   "text": "if square [$57ED] is not destroyed ($2B00 bit 7) goto escape_ending"
  },
  {
   "address": 4332,
   "type": "side",
   "text": "print \"THE AUTHOR WON'T LET\""
  },
  {
   "address": 4347,
   "type": "side",
   "text": "print \"YOU LEAVE UNTIL YOU\""
  },
  {
   "address": 4364,
   "type": "side",
   "text": "print \"FIX HIS ADVERT\""
  },
  {
   "address": 4382,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 4384,
   "type": "side",
   "text": "clear $BEC0 bit 6 (event script running)"
  },
  {
   "address": 4386,
   "type": "side",
   "text": "return"
  },
  {
   "address": 4387,
   "type": "line",
   "text": "The escape: $BEFE := 1 (read by the starfield routine at $AA69), 2 s, $E1 := $96 (each message line now lasts 150 frames instead of 125), \"THE AUTHOR SENDS YOU\", \"CONGRATULATIONS ON YOUR\", \"ESCAPE FROM TARG\"; with $BEC0 bit 5, \"THE PALYAR COMMANDER'S\", \"BROTHER-IN-LAW\", \"IS PLEASED YOU!VE GONE\"; then \"SAVE OUT THE STATUS AND\", \"SEE YOU IN MERCENARY II\", 15 s, game_over_loop. $BEC0 bit 6 is never released, so no event script runs again."
  },
  {
   "address": 4387,
   "type": "side",
   "text": "poke $BEFE := $01"
  },
  {
   "address": 4391,
   "type": "side",
   "text": "call wait_2s"
  },
  {
   "address": 4394,
   "type": "side",
   "text": "poke $00E1 := $96"
  },
  {
   "address": 4398,
   "type": "side",
   "text": "print \"THE AUTHOR SENDS YOU\""
  },
  {
   "address": 4406,
   "type": "side",
   "text": "print \"CONGRATULATIONS ON YOUR\""
  },
  {
   "address": 4426,
   "type": "side",
   "text": "print \"ESCAPE FROM TARG\""
  },
  {
   "address": 4438,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 4440,
   "type": "side",
   "text": "if not $BEC0 bit 5 (brother-in-law angry) goto $1176"
  },
  {
   "address": 4444,
   "type": "side",
   "text": "print \"THE PALYAR COMMANDER'S\""
  },
  {
   "address": 4447,
   "type": "side",
   "text": "print \"BROTHER-IN-LAW\""
  },
  {
   "address": 4451,
   "type": "side",
   "text": "print \"IS PLEASED YOU!VE GONE\""
  },
  {
   "address": 4468,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 4470,
   "type": "side",
   "text": "print \"SAVE OUT THE STATUS AND\""
  },
  {
   "address": 4484,
   "type": "side",
   "text": "print \"SEE YOU IN MERCENARY II\""
  },
  {
   "address": 4505,
   "type": "side",
   "text": "call wait_15s"
  },
  {
   "address": 4508,
   "type": "line",
   "text": "For ever: 15 s, \"GAME OVER\", SID voices 1 and 2 silenced ($D404, $D40B := 0). CTRL+Q ($80E8) does not touch the script pointer, so the message keeps coming after a return to Targ."
  },
  {
   "address": 4508,
   "type": "side",
   "text": "call wait_15s"
  },
  {
   "address": 4511,
   "type": "side",
   "text": "print \"GAME OVER\""
  },
  {
   "address": 4524,
   "type": "side",
   "text": "poke $D404 := $00"
  },
  {
   "address": 4528,
   "type": "side",
   "text": "poke $D40B := $00"
  },
  {
   "address": 4532,
   "type": "side",
   "text": "jump game_over_loop"
  },
  {
   "address": 4535,
   "type": "line",
   "text": "Script subroutine: \"PALYAR SHIP ATTACKING\" and $BEF8 := 1, the pending attack that $8921 acts on (it is cleared at $897E and $8850)."
  },
  {
   "address": 4535,
   "type": "side",
   "text": "print \"PALYAR SHIP ATTACKING\""
  },
  {
   "address": 4542,
   "type": "side",
   "text": "poke $BEF8 := $01"
  },
  {
   "address": 4546,
   "type": "side",
   "text": "return"
  },
  {
   "address": 4547,
   "type": "line",
   "text": "Script subroutine: \"MECHANOID SHIP ATTACK\" and $BEF8 := 1, the same pending attack as say_palyar_attack."
  },
  {
   "address": 4547,
   "type": "side",
   "text": "print \"MECHANOID SHIP ATTACK\""
  },
  {
   "address": 4553,
   "type": "side",
   "text": "poke $BEF8 := $01"
  },
  {
   "address": 4557,
   "type": "side",
   "text": "return"
  },
  {
   "address": 4558,
   "type": "line",
   "text": "Script subroutine for scripts 10 and 26: \"WE ARE MOST PLEASED\", \"YOU HAVE DESTROYED ALL\", \"KEY OPPOSITION SITES\"; sets $BEC0 bit 1 so that neither side's message comes again."
  },
  {
   "address": 4558,
   "type": "side",
   "text": "print \"WE ARE MOST PLEASED\""
  },
  {
   "address": 4566,
   "type": "side",
   "text": "print \"YOU HAVE DESTROYED ALL\""
  },
  {
   "address": 4573,
   "type": "side",
   "text": "print \"KEY OPPOSITION SITES\""
  },
  {
   "address": 4597,
   "type": "side",
   "text": "set $BEC0 bit 1 (sites message given)"
  },
  {
   "address": 4599,
   "type": "side",
   "text": "return"
  },
  {
   "address": 4600,
   "type": "line",
   "text": "Script 26, started by the site tally ($87FA) when the destroyed Palyar squares outnumber the Mechanoid ones by 106 or more: 1 s; unless $BEC0 bit 1 is set, canned message 4 \"MESSAGE FROM MECHANOIDS\", say_sites_destroyed, \"MESSAGE ENDS\", a blank line. No reward."
  },
  {
   "address": 4600,
   "type": "side",
   "text": "call wait_1s"
  },
  {
   "address": 4603,
   "type": "side",
   "text": "if $BEC0 bit 1 (sites message given) goto $1208"
  },
  {
   "address": 4607,
   "type": "side",
   "text": "canned message 4 \"MESSAGE FROM MECHANOIDS\""
  },
  {
   "address": 4609,
   "type": "side",
   "text": "call say_sites_destroyed"
  },
  {
   "address": 4612,
   "type": "side",
   "text": "canned message 7 \"MESSAGE ENDS\""
  },
  {
   "address": 4614,
   "type": "side",
   "text": "canned message 50 (a blank line)"
  },
  {
   "address": 4616,
   "type": "side",
   "text": "clear $BEC0 bit 6 (event script running)"
  },
  {
   "address": 4618,
   "type": "side",
   "text": "return"
  },
  {
   "address": 4619,
   "type": "line",
   "text": "Script 10, started by the site tally ($87EE) when the destroyed Mechanoid squares outnumber the Palyar ones by 105 or more: 1 s; unless $BEC0 bit 1 is set, canned message 3 \"MESSAGE FROM PALYARS\", say_sites_destroyed, figure 9 := 500000; if the Pass (object 46) is not in room $50, where it starts, pays the 500,000 at room_pays; if it is, moves it to room 1, a hangar ($2940+46 := 1), with \"YOU WILL FIND A REWARD\", \"INSIDE THE RED HANGER\", \"MESSAGE ENDS\"."
  },
  {
   "address": 4619,
   "type": "side",
   "text": "call wait_1s"
  },
  {
   "address": 4622,
   "type": "side",
   "text": "if $BEC0 bit 1 (sites message given) goto $1246"
  },
  {
   "address": 4626,
   "type": "side",
   "text": "canned message 3 \"MESSAGE FROM PALYARS\""
  },
  {
   "address": 4628,
   "type": "side",
   "text": "call say_sites_destroyed"
  },
  {
   "address": 4631,
   "type": "side",
   "text": "figure 9 := 00500000 (BCD)"
  },
  {
   "address": 4637,
   "type": "side",
   "text": "$57EE := $2E (object 46, PASS)"
  },
  {
   "address": 4640,
   "type": "side",
   "text": "$57EF := $50 (room $50)"
  },
  {
   "address": 4643,
   "type": "side",
   "text": "if object [$57EE] not lies in room [$57EF] ($2940) goto $103B"
  },
  {
   "address": 4646,
   "type": "side",
   "text": "print \"YOU WILL FIND A REWARD\""
  },
  {
   "address": 4653,
   "type": "side",
   "text": "print \"INSIDE THE RED HANGER\""
  },
  {
   "address": 4672,
   "type": "side",
   "text": "poke $296E := $01"
  },
  {
   "address": 4676,
   "type": "side",
   "text": "canned message 7 \"MESSAGE ENDS\""
  },
  {
   "address": 4678,
   "type": "side",
   "text": "clear $BEC0 bit 6 (event script running)"
  },
  {
   "address": 4680,
   "type": "side",
   "text": "return"
  },
  {
   "address": 4681,
   "type": "line",
   "text": "The dictionary: 239 words, $00-$EE, in ASCII capitals with bit 7 on the last letter (codes 0-9 are digits, $0A-$0F print * + , - . /, m n o print ? ! '). Word n starts one byte after the address in $2120+n/$2210+n; several numbers share a word or point into another word's tail. Here words $00 and $01, \"MENT\": token 0 ends a message, so word 0 can never print, and no message uses $01."
  },
  {
   "address": 4685,
   "type": "line",
   "text": "Dictionary word $02: \"S\", letters $124E-$124E (the pointer names $124D, the byte before); tokens $01-$07 print with no blank before them."
  },
  {
   "address": 4686,
   "type": "line",
   "text": "Dictionary word $03: \"ING\", letters $124F-$1251 (the pointer names $124E, the byte before); tokens $01-$07 print with no blank before them."
  },
  {
   "address": 4689,
   "type": "line",
   "text": "Dictionary word $04: \"ED\", letters $1252-$1253 (the pointer names $1251, the byte before); tokens $01-$07 print with no blank before them."
  },
  {
   "address": 4691,
   "type": "line",
   "text": "Dictionary word $05: \"D\", letters $1254-$1254 (the pointer names $1253, the byte before); tokens $01-$07 print with no blank before them."
  },
  {
   "address": 4692,
   "type": "line",
   "text": "Dictionary word $06: \"!\", letters $1255-$1255 (the pointer names $1254, the byte before); tokens $01-$07 print with no blank before them."
  },
  {
   "address": 4693,
   "type": "line",
   "text": "Dictionary word $07: \"?\", letters $1256-$1256 (the pointer names $1255, the byte before); tokens $01-$07 print with no blank before them."
  },
  {
   "address": 4694,
   "type": "line",
   "text": "Dictionary word $08: \"A\", letters $1257-$1257 (the pointer names $1256, the byte before)."
  },
  {
   "address": 4695,
   "type": "line",
   "text": "Dictionary word $09: \"AM\", letters $1258-$1259 (the pointer names $1257, the byte before)."
  },
  {
   "address": 4697,
   "type": "line",
   "text": "Dictionary word $0A: \"- - -\", letters $125A-$125E (the pointer names $1259, the byte before)."
  },
  {
   "address": 4702,
   "type": "line",
   "text": "Dictionary word $0B: \"OUR\", letters $125F-$1261 (the pointer names $125E, the byte before)."
  },
  {
   "address": 4705,
   "type": "line",
   "text": "Dictionary word $0C: \"JUST\", letters $1262-$1265 (the pointer names $1261, the byte before)."
  },
  {
   "address": 4709,
   "type": "line",
   "text": "Dictionary word $0D: \"AGAIN\", letters $1266-$126A (the pointer names $1265, the byte before)."
  },
  {
   "address": 4714,
   "type": "line",
   "text": "Dictionary word $0E: \"HANGER\", letters $126B-$1270 (the pointer names $126A, the byte before)."
  },
  {
   "address": 4720,
   "type": "line",
   "text": "Dictionary word $0F: \"AIRPORT\", letters $1271-$1277 (the pointer names $1270, the byte before)."
  },
  {
   "address": 4727,
   "type": "line",
   "text": "Dictionary word $10: \"ALL\", letters $1278-$127A (the pointer names $1277, the byte before)."
  },
  {
   "address": 4730,
   "type": "line",
   "text": "Dictionary word $11: \"AIRCRAFT\", letters $127B-$1282 (the pointer names $127A, the byte before)."
  },
  {
   "address": 4738,
   "type": "line",
   "text": "Dictionary word $12: \"REWARD\", letters $1283-$1288 (the pointer names $1282, the byte before)."
  },
  {
   "address": 4744,
   "type": "line",
   "text": "Dictionary word $13: \"AND\", letters $1289-$128B (the pointer names $1288, the byte before)."
  },
  {
   "address": 4747,
   "type": "line",
   "text": "Dictionary word $14: \"ARE\", letters $128C-$128E (the pointer names $128B, the byte before)."
  },
  {
   "address": 4750,
   "type": "line",
   "text": "Dictionary word $15: \"ANTIGRAV\", letters $128F-$1296 (the pointer names $128E, the byte before)."
  },
  {
   "address": 4758,
   "type": "line",
   "text": "Dictionary word $16: \"AUTHOR\", letters $1297-$129C (the pointer names $1296, the byte before)."
  },
  {
   "address": 4764,
   "type": "line",
   "text": "Dictionary word $17: \"AT\", letters $129D-$129E (the pointer names $129C, the byte before)."
  },
  {
   "address": 4766,
   "type": "line",
   "text": "Dictionary word $18: \"ANTENNA\", letters $129F-$12A5 (the pointer names $129E, the byte before)."
  },
  {
   "address": 4773,
   "type": "line",
   "text": "Dictionary word $19: \"ITS\", letters $12A6-$12A8 (the pointer names $12A5, the byte before)."
  },
  {
   "address": 4776,
   "type": "line",
   "text": "Dictionary word $1A: \"GOLD\", letters $12A9-$12AC (the pointer names $12A8, the byte before)."
  },
  {
   "address": 4780,
   "type": "line",
   "text": "Dictionary word $1B: \"BACK\", letters $12AD-$12B0 (the pointer names $12AC, the byte before)."
  },
  {
   "address": 4784,
   "type": "line",
   "text": "Dictionary word $1C: \"BUY\", letters $12B1-$12B3 (the pointer names $12B0, the byte before)."
  },
  {
   "address": 4787,
   "type": "line",
   "text": "Dictionary word $1D: \"BE\", letters $12B4-$12B5 (the pointer names $12B3, the byte before)."
  },
  {
   "address": 4789,
   "type": "line",
   "text": "Dictionary word $1E: \"BRIEF\", letters $12B6-$12BA (the pointer names $12B5, the byte before)."
  },
  {
   "address": 4794,
   "type": "line",
   "text": "Dictionary word $1F: \"BROTHER-IN-LAW\", letters $12BB-$12C8 (the pointer names $12BA, the byte before)."
  },
  {
   "address": 4808,
   "type": "line",
   "text": "Dictionary word $20: \"CALL\", letters $12C9-$12CC (the pointer names $12C8, the byte before)."
  },
  {
   "address": 4812,
   "type": "line",
   "text": "Dictionary word $21: \"CATERING\", letters $12CD-$12D4 (the pointer names $12CC, the byte before)."
  },
  {
   "address": 4820,
   "type": "line",
   "text": "Dictionary word $22: \"CRAFT\", letters $12D5-$12D9 (the pointer names $12D4, the byte before)."
  },
  {
   "address": 4825,
   "type": "line",
   "text": "Dictionary word $23: \"CRASH\", letters $12DA-$12DE (the pointer names $12D9, the byte before)."
  },
  {
   "address": 4830,
   "type": "line",
   "text": "Dictionary word $24: \"CR\", letters $12DF-$12E0 (the pointer names $12DE, the byte before)."
  },
  {
   "address": 4832,
   "type": "line",
   "text": "Dictionary word $25: \"CREDITS\", letters $12E1-$12E7 (the pointer names $12E0, the byte before)."
  },
  {
   "address": 4839,
   "type": "line",
   "text": "Dictionary word $26: \"COMMUNICATION\", letters $12E8-$12F4 (the pointer names $12E7, the byte before)."
  },
  {
   "address": 4852,
   "type": "line",
   "text": "Dictionary word $27: \"COMPLEX\", letters $12F5-$12FB (the pointer names $12F4, the byte before)."
  },
  {
   "address": 4859,
   "type": "line",
   "text": "Dictionary word $28: \"CONTROL\", letters $12FC-$1302 (the pointer names $12FB, the byte before)."
  },
  {
   "address": 4864,
   "type": "line",
   "text": "Dictionary word $52: \"OL\", letters $1301-$1302 (the pointer names $1300, the byte before); it is the tail of \"CONTROL\", stored once; no message uses it."
  },
  {
   "address": 4866,
   "type": "line",
   "text": "Dictionary word $29: \"COMPLETE\", letters $1303-$130A (the pointer names $1302, the byte before)."
  },
  {
   "address": 4874,
   "type": "line",
   "text": "Dictionary word $2A: \"CRYSTAL\", letters $130B-$1311 (the pointer names $130A, the byte before)."
  },
  {
   "address": 4881,
   "type": "line",
   "text": "Dictionary word $2B: \"IS\", letters $1312-$1313 (the pointer names $1311, the byte before)."
  },
  {
   "address": 4883,
   "type": "line",
   "text": "Dictionary word $2C: \"DARK\", letters $1314-$1317 (the pointer names $1313, the byte before)."
  },
  {
   "address": 4887,
   "type": "line",
   "text": "Dictionary word $2D: \"HERE\", letters $1318-$131B (the pointer names $1317, the byte before)."
  },
  {
   "address": 4891,
   "type": "line",
   "text": "Dictionary word $2E: \"GO\", letters $131C-$131D (the pointer names $131B, the byte before)."
  },
  {
   "address": 4893,
   "type": "line",
   "text": "Dictionary word $2F: \"DELIVER\", letters $131E-$1324 (the pointer names $131D, the byte before)."
  },
  {
   "address": 4897,
   "type": "line",
   "text": "Dictionary words $55, $5B, $5E: \"VER\", letters $1322-$1324 (the pointer names $1321, the byte before); it is the tail of \"DELIVER\", stored once; no message uses it."
  },
  {
   "address": 4900,
   "type": "line",
   "text": "Dictionary word $30: \"DESTROY\", letters $1325-$132B (the pointer names $1324, the byte before)."
  },
  {
   "address": 4907,
   "type": "line",
   "text": "Dictionary word $31: \"-\", letters $132C-$132C (the pointer names $132B, the byte before); no message uses it."
  },
  {
   "address": 4908,
   "type": "line",
   "text": "Dictionary word $32: \"ATTACK\", letters $132D-$1332 (the pointer names $132C, the byte before)."
  },
  {
   "address": 4914,
   "type": "line",
   "text": "Dictionary word $33: \"DO\", letters $1333-$1334 (the pointer names $1332, the byte before)."
  },
  {
   "address": 4916,
   "type": "line",
   "text": "Dictionary word $34: \"DONE\", letters $1335-$1338 (the pointer names $1334, the byte before)."
  },
  {
   "address": 4920,
   "type": "line",
   "text": "Dictionary word $35: \"ESSENTIAL\", letters $1339-$1341 (the pointer names $1338, the byte before)."
  },
  {
   "address": 4929,
   "type": "line",
   "text": "Dictionary word $36: \"ENGINE\", letters $1342-$1347 (the pointer names $1341, the byte before)."
  },
  {
   "address": 4935,
   "type": "line",
   "text": "Dictionary word $37: \"ENERGY\", letters $1348-$134D (the pointer names $1347, the byte before)."
  },
  {
   "address": 4940,
   "type": "line",
   "text": "Dictionary words $41, $5C: \"Y\", letters $134D-$134D (the pointer names $134C, the byte before); it is the tail of \"ENERGY\", stored once; no message uses it."
  },
  {
   "address": 4941,
   "type": "line",
   "text": "Dictionary word $38: \"END\", letters $134E-$1350 (the pointer names $134D, the byte before)."
  },
  {
   "address": 4944,
   "type": "line",
   "text": "Dictionary word $39: \"FEE\", letters $1351-$1353 (the pointer names $1350, the byte before)."
  },
  {
   "address": 4947,
   "type": "line",
   "text": "Dictionary word $3A: \"HAVE\", letters $1354-$1357 (the pointer names $1353, the byte before)."
  },
  {
   "address": 4951,
   "type": "line",
   "text": "Dictionary word $3B: \"FUEL\", letters $1358-$135B (the pointer names $1357, the byte before)."
  },
  {
   "address": 4955,
   "type": "line",
   "text": "Dictionary word $3C: \"FOR\", letters $135C-$135E (the pointer names $135B, the byte before)."
  },
  {
   "address": 4958,
   "type": "line",
   "text": "Dictionary word $3D: \"FIND\", letters $135F-$1362 (the pointer names $135E, the byte before)."
  },
  {
   "address": 4962,
   "type": "line",
   "text": "Dictionary word $3E: \"FROM\", letters $1363-$1366 (the pointer names $1362, the byte before)."
  },
  {
   "address": 4966,
   "type": "line",
   "text": "Dictionary word $3F: \"FUND\", letters $1367-$136A (the pointer names $1366, the byte before)."
  },
  {
   "address": 4970,
   "type": "line",
   "text": "Dictionary words $44-$4F, $5F-$96: \"NO. O-9 ?\", letters $136B-$1373 (the pointer names $136A, the byte before); only word $96 appears in a message."
  },
  {
   "address": 4976,
   "type": "line",
   "text": "Dictionary word $5D: \"9 ?\", letters $1371-$1373 (the pointer names $1370, the byte before); it is the tail of \"NO. O-9 ?\", stored once; no message uses it."
  },
  {
   "address": 4979,
   "type": "line",
   "text": "Dictionary word $97: \"YOUR\", letters $1374-$1377 (the pointer names $1373, the byte before)."
  },
  {
   "address": 4981,
   "type": "line",
   "text": "Dictionary word $5A: \"UR\", letters $1376-$1377 (the pointer names $1375, the byte before); it is the tail of \"YOUR\", stored once; no message uses it."
  },
  {
   "address": 4983,
   "type": "line",
   "text": "Dictionary word $98: \"LAND\", letters $1378-$137B (the pointer names $1377, the byte before)."
  },
  {
   "address": 4984,
   "type": "line",
   "text": "Dictionary words $40, $50: \"AND\", letters $1379-$137B (the pointer names $1378, the byte before); it is the tail of \"LAND\", stored once; no message uses it."
  },
  {
   "address": 4987,
   "type": "line",
   "text": "Dictionary word $99: \"LONG\", letters $137C-$137F (the pointer names $137B, the byte before)."
  },
  {
   "address": 4991,
   "type": "line",
   "text": "Dictionary word $9A: \"LOCATION\", letters $1380-$1387 (the pointer names $137F, the byte before)."
  },
  {
   "address": 4992,
   "type": "line",
   "text": "Dictionary words $43, $54: \"OCATION\", letters $1381-$1387 (the pointer names $1380, the byte before); it is the tail of \"LOCATION\", stored once; no message uses it."
  },
  {
   "address": 4999,
   "type": "line",
   "text": "Dictionary word $9B: \"LOC\", letters $1388-$138A (the pointer names $1387, the byte before)."
  },
  {
   "address": 5002,
   "type": "line",
   "text": "Dictionary word $9C: \"MEDICAL\", letters $138B-$1391 (the pointer names $138A, the byte before)."
  },
  {
   "address": 5009,
   "type": "line",
   "text": "Dictionary word $9D: \"LOCKED\", letters $1392-$1397 (the pointer names $1391, the byte before)."
  },
  {
   "address": 5015,
   "type": "line",
   "text": "Dictionary word $9E: \"MORE\", letters $1398-$139B (the pointer names $1397, the byte before)."
  },
  {
   "address": 5019,
   "type": "line",
   "text": "Dictionary word $9F: \"MECHANOID\", letters $139C-$13A4 (the pointer names $139B, the byte before)."
  },
  {
   "address": 5021,
   "type": "line",
   "text": "Dictionary word $53: \"CHANOID\", letters $139E-$13A4 (the pointer names $139D, the byte before); it is the tail of \"MECHANOID\", stored once; no message uses it."
  },
  {
   "address": 5026,
   "type": "line",
   "text": "Dictionary word $51: \"ID\", letters $13A3-$13A4 (the pointer names $13A2, the byte before); it is the tail of \"CHANOID\", stored once; no message uses it."
  },
  {
   "address": 5028,
   "type": "line",
   "text": "Dictionary word $A0: \"MESSAGE\", letters $13A5-$13AB (the pointer names $13A4, the byte before)."
  },
  {
   "address": 5035,
   "type": "line",
   "text": "Dictionary word $A1: \"MIN\", letters $13AC-$13AE (the pointer names $13AB, the byte before)."
  },
  {
   "address": 5038,
   "type": "line",
   "text": "Dictionary word $A2: \"MAY\", letters $13AF-$13B1 (the pointer names $13AE, the byte before)."
  },
  {
   "address": 5041,
   "type": "line",
   "text": "Dictionary word $A3: \"MUST\", letters $13B2-$13B5 (the pointer names $13B1, the byte before)."
  },
  {
   "address": 5045,
   "type": "line",
   "text": "Dictionary word $A4: \"HOUSE\", letters $13B6-$13BA (the pointer names $13B5, the byte before)."
  },
  {
   "address": 5050,
   "type": "line",
   "text": "Dictionary words $42, $A5: \"NEED\", letters $13BB-$13BE (the pointer names $13BA, the byte before); only word $A5 appears in a message."
  },
  {
   "address": 5054,
   "type": "line",
   "text": "Dictionary word $A6: \"NEUTRON\", letters $13BF-$13C5 (the pointer names $13BE, the byte before)."
  },
  {
   "address": 5061,
   "type": "line",
   "text": "Dictionary word $A7: \"NOVADRIVE\", letters $13C6-$13CE (the pointer names $13C5, the byte before)."
  },
  {
   "address": 5066,
   "type": "line",
   "text": "Dictionary word $56: \"RIVE\", letters $13CB-$13CE (the pointer names $13CA, the byte before); it is the tail of \"NOVADRIVE\", stored once; no message uses it."
  },
  {
   "address": 5070,
   "type": "line",
   "text": "Dictionary word $A8: \"NOT\", letters $13CF-$13D1 (the pointer names $13CE, the byte before)."
  },
  {
   "address": 5072,
   "type": "line",
   "text": "Dictionary word $57: \"T\", letters $13D1-$13D1 (the pointer names $13D0, the byte before); it is the tail of \"NOT\", stored once; no message uses it."
  },
  {
   "address": 5073,
   "type": "line",
   "text": "Dictionary word $A9: \"NOW\", letters $13D2-$13D4 (the pointer names $13D1, the byte before)."
  },
  {
   "address": 5076,
   "type": "line",
   "text": "Dictionary word $AA: \"OF\", letters $13D5-$13D6 (the pointer names $13D4, the byte before)."
  },
  {
   "address": 5078,
   "type": "line",
   "text": "Dictionary word $AB: \"OK\", letters $13D7-$13D8 (the pointer names $13D6, the byte before)."
  },
  {
   "address": 5080,
   "type": "line",
   "text": "Dictionary word $AC: \"OFFER\", letters $13D9-$13DD (the pointer names $13D8, the byte before)."
  },
  {
   "address": 5085,
   "type": "line",
   "text": "Dictionary word $AD: \"ON\", letters $13DE-$13DF (the pointer names $13DD, the byte before)."
  },
  {
   "address": 5087,
   "type": "line",
   "text": "Dictionary word $AE: \"ONLY\", letters $13E0-$13E3 (the pointer names $13DF, the byte before)."
  },
  {
   "address": 5091,
   "type": "line",
   "text": "Dictionary word $AF: \"POWER\", letters $13E4-$13E8 (the pointer names $13E3, the byte before)."
  },
  {
   "address": 5096,
   "type": "line",
   "text": "Dictionary word $B0: \"ARMOURY\", letters $13E9-$13EF (the pointer names $13E8, the byte before)."
  },
  {
   "address": 5102,
   "type": "line",
   "text": "Dictionary word $59: \"Y\", letters $13EF-$13EF (the pointer names $13EE, the byte before); it is the tail of \"ARMOURY\", stored once; no message uses it."
  },
  {
   "address": 5103,
   "type": "line",
   "text": "Dictionary word $B1: \"LABORATORY\", letters $13F0-$13F9 (the pointer names $13EF, the byte before)."
  },
  {
   "address": 5113,
   "type": "line",
   "text": "Dictionary words $58, $B2: \"INTERVIEW\", letters $13FA-$1402 (the pointer names $13F9, the byte before); only word $B2 appears in a message."
  },
  {
   "address": 5122,
   "type": "line",
   "text": "Dictionary word $B3: \"PAY\", letters $1403-$1405 (the pointer names $1402, the byte before)."
  },
  {
   "address": 5125,
   "type": "line",
   "text": "Dictionary word $B4: \"PALYAR\", letters $1406-$140B (the pointer names $1405, the byte before)."
  },
  {
   "address": 5131,
   "type": "line",
   "text": "Dictionary word $B5: \"PAID\", letters $140C-$140F (the pointer names $140B, the byte before)."
  },
  {
   "address": 5135,
   "type": "line",
   "text": "Dictionary word $B6: \"PLAN\", letters $1410-$1413 (the pointer names $140F, the byte before)."
  },
  {
   "address": 5139,
   "type": "line",
   "text": "Dictionary word $B7: \"PLEASE\", letters $1414-$1419 (the pointer names $1413, the byte before)."
  },
  {
   "address": 5145,
   "type": "line",
   "text": "Dictionary word $B8: \"EXCHEQUER\", letters $141A-$1422 (the pointer names $1419, the byte before)."
  },
  {
   "address": 5154,
   "type": "line",
   "text": "Dictionary word $B9: \"PROVISIONS\", letters $1423-$142C (the pointer names $1422, the byte before)."
  },
  {
   "address": 5164,
   "type": "line",
   "text": "Dictionary word $BA: \"CONFERENCE\", letters $142D-$1436 (the pointer names $142C, the byte before)."
  },
  {
   "address": 5174,
   "type": "line",
   "text": "Dictionary word $BB: \"PAD\", letters $1437-$1439 (the pointer names $1436, the byte before)."
  },
  {
   "address": 5177,
   "type": "line",
   "text": "Dictionary word $BC: \"THE PALYAR COMMANDER'S\", letters $143A-$144F (the pointer names $1439, the byte before)."
  },
  {
   "address": 5199,
   "type": "line",
   "text": "Dictionary word $BD: \"MOST\", letters $1450-$1453 (the pointer names $144F, the byte before)."
  },
  {
   "address": 5203,
   "type": "line",
   "text": "Dictionary word $BE: \"INSTALLATION\", letters $1454-$145F (the pointer names $1453, the byte before)."
  },
  {
   "address": 5215,
   "type": "line",
   "text": "Dictionary word $BF: \"REQUIREMENT\", letters $1460-$146A (the pointer names $145F, the byte before)."
  },
  {
   "address": 5226,
   "type": "line",
   "text": "Dictionary word $C0: \"REPORT\", letters $146B-$1470 (the pointer names $146A, the byte before)."
  },
  {
   "address": 5232,
   "type": "line",
   "text": "Dictionary word $C1: \"ROOM\", letters $1471-$1474 (the pointer names $1470, the byte before)."
  },
  {
   "address": 5236,
   "type": "line",
   "text": "Dictionary word $C2: \"SEND\", letters $1475-$1478 (the pointer names $1474, the byte before)."
  },
  {
   "address": 5240,
   "type": "line",
   "text": "Dictionary word $C3: \"I\", letters $1479-$1479 (the pointer names $1478, the byte before)."
  },
  {
   "address": 5241,
   "type": "line",
   "text": "Dictionary word $C4: \"SALE\", letters $147A-$147D (the pointer names $1479, the byte before)."
  },
  {
   "address": 5245,
   "type": "line",
   "text": "Dictionary word $C5: \"SHIP\", letters $147E-$1481 (the pointer names $147D, the byte before)."
  },
  {
   "address": 5249,
   "type": "line",
   "text": "Dictionary word $C6: \"SHOULD\", letters $1482-$1487 (the pointer names $1481, the byte before)."
  },
  {
   "address": 5255,
   "type": "line",
   "text": "Dictionary word $C7: \"STATUS\", letters $1488-$148D (the pointer names $1487, the byte before)."
  },
  {
   "address": 5261,
   "type": "line",
   "text": "Dictionary word $C8: \"STORES\", letters $148E-$1493 (the pointer names $148D, the byte before)."
  },
  {
   "address": 5267,
   "type": "line",
   "text": "Dictionary word $C9: \"START\", letters $1494-$1498 (the pointer names $1493, the byte before)."
  },
  {
   "address": 5272,
   "type": "line",
   "text": "Dictionary word $CA: \"SUPPLIES\", letters $1499-$14A0 (the pointer names $1498, the byte before)."
  },
  {
   "address": 5280,
   "type": "line",
   "text": "Dictionary word $CC: \"INFIRMARY\", letters $14A1-$14A9 (the pointer names $14A0, the byte before)."
  },
  {
   "address": 5289,
   "type": "line",
   "text": "Dictionary word $CD: \"IN\", letters $14AA-$14AB (the pointer names $14A9, the byte before)."
  },
  {
   "address": 5291,
   "type": "line",
   "text": "Dictionary word $CE: \"IT\", letters $14AC-$14AD (the pointer names $14AB, the byte before)."
  },
  {
   "address": 5293,
   "type": "line",
   "text": "Dictionary word $CF: \"THEM\", letters $14AE-$14B1 (the pointer names $14AD, the byte before)."
  },
  {
   "address": 5297,
   "type": "line",
   "text": "Dictionary word $D0: \"THE\", letters $14B2-$14B4 (the pointer names $14B1, the byte before)."
  },
  {
   "address": 5300,
   "type": "line",
   "text": "Dictionary word $D1: \"INFORMATION\", letters $14B5-$14BF (the pointer names $14B4, the byte before)."
  },
  {
   "address": 5311,
   "type": "line",
   "text": "Dictionary word $D2: \"THERE\", letters $14C0-$14C4 (the pointer names $14BF, the byte before)."
  },
  {
   "address": 5316,
   "type": "line",
   "text": "Dictionary word $D3: \"THIS\", letters $14C5-$14C8 (the pointer names $14C4, the byte before)."
  },
  {
   "address": 5320,
   "type": "line",
   "text": "Dictionary word $D4: \"KITCHEN\", letters $14C9-$14CF (the pointer names $14C8, the byte before)."
  },
  {
   "address": 5327,
   "type": "line",
   "text": "Dictionary word $D5: \"TO\", letters $14D0-$14D1 (the pointer names $14CF, the byte before)."
  },
  {
   "address": 5329,
   "type": "line",
   "text": "Dictionary word $D6: \"TOO\", letters $14D2-$14D4 (the pointer names $14D1, the byte before)."
  },
  {
   "address": 5332,
   "type": "line",
   "text": "Dictionary word $D7: \"TARG\", letters $14D5-$14D8 (the pointer names $14D4, the byte before)."
  },
  {
   "address": 5336,
   "type": "line",
   "text": "Dictionary word $D8: \"TRANSACTION\", letters $14D9-$14E3 (the pointer names $14D8, the byte before)."
  },
  {
   "address": 5347,
   "type": "line",
   "text": "Dictionary word $D9: \"WANT\", letters $14E4-$14E7 (the pointer names $14E3, the byte before)."
  },
  {
   "address": 5351,
   "type": "line",
   "text": "Dictionary word $DA: \"GOOD\", letters $14E8-$14EB (the pointer names $14E7, the byte before)."
  },
  {
   "address": 5355,
   "type": "line",
   "text": "Dictionary word $DB: \"WORK\", letters $14EC-$14EF (the pointer names $14EB, the byte before)."
  },
  {
   "address": 5359,
   "type": "line",
   "text": "Dictionary word $DC: \"YOU\", letters $14F0-$14F2 (the pointer names $14EF, the byte before)."
  },
  {
   "address": 5362,
   "type": "line",
   "text": "Dictionary word $DD: \"JOB\", letters $14F3-$14F5 (the pointer names $14F2, the byte before)."
  },
  {
   "address": 5365,
   "type": "line",
   "text": "Dictionary word $DE: \"US\", letters $14F6-$14F7 (the pointer names $14F5, the byte before)."
  },
  {
   "address": 5367,
   "type": "line",
   "text": "Dictionary word $DF: \"VERY\", letters $14F8-$14FB (the pointer names $14F7, the byte before)."
  },
  {
   "address": 5371,
   "type": "line",
   "text": "Dictionary word $E0: \"WHEN\", letters $14FC-$14FF (the pointer names $14FB, the byte before)."
  },
  {
   "address": 5375,
   "type": "line",
   "text": "Dictionary word $E1: \"WALK\", letters $1500-$1503 (the pointer names $14FF, the byte before)."
  },
  {
   "address": 5379,
   "type": "line",
   "text": "Dictionary word $E2: \"WE\", letters $1504-$1505 (the pointer names $1503, the byte before)."
  },
  {
   "address": 5381,
   "type": "line",
   "text": "Dictionary word $E3: \"WELL\", letters $1506-$1509 (the pointer names $1505, the byte before)."
  },
  {
   "address": 5385,
   "type": "line",
   "text": "Dictionary word $E4: \"WHERE\", letters $150A-$150E (the pointer names $1509, the byte before)."
  },
  {
   "address": 5390,
   "type": "line",
   "text": "Dictionary word $E5: \"WILL\", letters $150F-$1512 (the pointer names $150E, the byte before)."
  },
  {
   "address": 5394,
   "type": "line",
   "text": "Dictionary word $E6: 9 blanks, letters $1513-$151B (the pointer names $1512, the byte before)."
  },
  {
   "address": 5395,
   "type": "line",
   "text": "Dictionary word $E7: 8 blanks, letters $1514-$151B (the pointer names $1513, the byte before); the last 8 of word $E6's nine blanks, stored once."
  },
  {
   "address": 5396,
   "type": "line",
   "text": "Dictionary word $E8: 7 blanks, letters $1515-$151B (the pointer names $1514, the byte before); the last 7 of word $E6's nine blanks, stored once."
  },
  {
   "address": 5397,
   "type": "line",
   "text": "Dictionary word $E9: 6 blanks, letters $1516-$151B (the pointer names $1515, the byte before); the last 6 of word $E6's nine blanks, stored once."
  },
  {
   "address": 5398,
   "type": "line",
   "text": "Dictionary word $EA: 5 blanks, letters $1517-$151B (the pointer names $1516, the byte before); the last 5 of word $E6's nine blanks, stored once."
  },
  {
   "address": 5399,
   "type": "line",
   "text": "Dictionary word $EB: 4 blanks, letters $1518-$151B (the pointer names $1517, the byte before); the last 4 of word $E6's nine blanks, stored once."
  },
  {
   "address": 5400,
   "type": "line",
   "text": "Dictionary word $EC: 3 blanks, letters $1519-$151B (the pointer names $1518, the byte before); the last 3 of word $E6's nine blanks, stored once."
  },
  {
   "address": 5401,
   "type": "line",
   "text": "Dictionary word $ED: 2 blanks, letters $151A-$151B (the pointer names $1519, the byte before); the last 2 of word $E6's nine blanks, stored once."
  },
  {
   "address": 5402,
   "type": "line",
   "text": "Dictionary word $EE: 1 blank, letters $151B-$151B (the pointer names $151A, the byte before); the last 1 of word $E6's nine blanks, stored once."
  },
  {
   "address": 5404,
   "type": "line",
   "text": "Three bytes after the dictionary that nothing points at: $A0 (a blank with bit 7), $4C, $00. The same $4C $00 pair follows the opening's script at $71B4 and the last canned message at $16D3."
  },
  {
   "address": 5407,
   "type": "line",
   "text": "The 64 canned messages, token lists like a print op's, started by $8DAA with X = n through the split table $20A0/$20E0; message n is also the name of object n where the object has one. Message 0: \"LOCKED\", tokens $1520-$1523; printed at $9430 when a door's type (8-15, $9493) calls for object 8 + type and that object is not carried ($949C)."
  },
  {
   "address": 5411,
   "type": "line",
   "text": "Canned message 1: \"ITS VERY DARK IN HERE\", tokens $1524-$152B ending in 0 (the pointer $20A0/$20E0 names $1523, the byte before); printed on entering a dark room without the Photon Emitter ($9208 sets $F7 = 1; $AEE8 prints it)."
  },
  {
   "address": 5419,
   "type": "line",
   "text": "Canned message 2: \"TOO HEAVY\", tokens $152C-$1535 ending in 0 (the pointer $20A0/$20E0 names $152B, the byte before); printed by the take routine at $9848 for an object with $29C0 bit 5 when the Antigrav is not carried."
  },
  {
   "address": 5429,
   "type": "line",
   "text": "Canned message 3: \"MESSAGE FROM PALYARS\", tokens $1536-$153B ending in 0 (the pointer $20A0/$20E0 names $1535, the byte before); used by job_offer_message and script 10."
  },
  {
   "address": 5435,
   "type": "line",
   "text": "Canned message 4: \"MESSAGE FROM MECHANOIDS\", tokens $153C-$1540 ending in 0 (the pointer $20A0/$20E0 names $153B, the byte before); used by script 26."
  },
  {
   "address": 5440,
   "type": "line",
   "text": "Canned message 5: \"- - - JOB OFFER - - -\", tokens $1541-$1546 ending in 0 (the pointer $20A0/$20E0 names $1540, the byte before); used by job_offer_message."
  },
  {
   "address": 5446,
   "type": "line",
   "text": "Canned message 6: \"CHEESE\", tokens $1547-$1550 ending in 0 (the pointer $20A0/$20E0 names $1546, the byte before); the name of object 6, announced when it is taken or boarded ($29C0 bit 3)."
  },
  {
   "address": 5456,
   "type": "line",
   "text": "Canned message 7: \"MESSAGE ENDS\", tokens $1551-$1555 ending in 0 (the pointer $20A0/$20E0 names $1550, the byte before); used by scripts 1, 2, 10 and 26."
  },
  {
   "address": 5461,
   "type": "line",
   "text": "Canned message 8: \"COMMUNICATION ROOM\", tokens $1556-$1559 ending in 0 (the pointer $20A0/$20E0 names $1555, the byte before); printed by script 2 on entering room $10."
  },
  {
   "address": 5465,
   "type": "line",
   "text": "Canned message 9: \"HANGER\", tokens $155A-$155D ending in 0 (the pointer $20A0/$20E0 names $1559, the byte before); the name printed on entering rooms 1-8 and $AF-$BF, whose records give 9 with byte 2 bit 7 clear ($9224 into $F7, printed at $AEE8)."
  },
  {
   "address": 5469,
   "type": "line",
   "text": "Canned message 10: \"KITCHEN\", tokens $155E-$1560 ending in 0 (the pointer $20A0/$20E0 names $155D, the byte before); nothing found prints it (script 6 names the kitchen itself)."
  },
  {
   "address": 5472,
   "type": "line",
   "text": "Canned message 11: \"ENGINE ROOM\", tokens $1561-$1564 ending in 0 (the pointer $20A0/$20E0 names $1560, the byte before); nothing found prints it (script 3 names the room itself)."
  },
  {
   "address": 5476,
   "type": "line",
   "text": "Canned message 12: \"MECHANOID\", tokens $1565-$1568 ending in 0 (the pointer $20A0/$20E0 names $1564, the byte before); the name of object 12: script 12 prints it, and the interview room asks for it."
  },
  {
   "address": 5480,
   "type": "line",
   "text": "Canned message 13: \"PALYAR BRIEFING ROOM\", tokens $1569-$156E ending in 0 (the pointer $20A0/$20E0 names $1568, the byte before); nothing found prints it (script 28 names the room itself)."
  },
  {
   "address": 5486,
   "type": "line",
   "text": "Canned message 14: \"CONFERENCE ROOM\", tokens $156F-$1572 ending in 0 (the pointer $20A0/$20E0 names $156E, the byte before); nothing found prints it (script 4 names the room itself)."
  },
  {
   "address": 5490,
   "type": "line",
   "text": "Canned message 15: \"THE PALYAR COMMANDER'S BROTHER-IN-LAWS ROOM\", tokens $1573-$1579 ending in 0 (the pointer $20A0/$20E0 names $1572, the byte before); the name printed on entering room $A8, whose record gives 15 with byte 2 bit 7 clear."
  },
  {
   "address": 5497,
   "type": "line",
   "text": "Canned message 16: \"PHOTON EMITTER\", tokens $157A-$158B ending in 0 (the pointer $20A0/$20E0 names $1579, the byte before); the name of object 16, which lights dark rooms ($91F2)."
  },
  {
   "address": 5515,
   "type": "line",
   "text": "Canned messages 17-21: \"YOU HAVE [figure 8] CREDITS\", tokens $158C-$1590 ending in 0 (the pointer $20A0/$20E0 names $158B, the byte before); entries 17-21 all point here; scripts print it as 21 after every payment."
  },
  {
   "address": 5520,
   "type": "line",
   "text": "Canned message 22: \"EXCHEQUER\", tokens $1591-$159C ending in 0 (the pointer $20A0/$20E0 names $1590, the byte before); nothing found prints it (script 5 names the room itself)."
  },
  {
   "address": 5532,
   "type": "line",
   "text": "Canned message 23: \"YOU HAVE JUST DESTROYED\", tokens $159D-$15A2 ending in 0 (the pointer $20A0/$20E0 names $159C, the byte before); used by say_just_destroyed."
  },
  {
   "address": 5538,
   "type": "line",
   "text": "Canned message 24: \"ANTI TIME BOMB\", tokens $15A3-$15B4 ending in 0 (the pointer $20A0/$20E0 names $15A2, the byte before); the name of object 24; while it is carried, the missile-hit code ($87AF, $8816) writes back the square's $2B00 entry without the destroyed bit."
  },
  {
   "address": 5556,
   "type": "line",
   "text": "Canned message 25: \"NOVADRIVE\", tokens $15B5-$15B8 ending in 0 (the pointer $20A0/$20E0 names $15B4, the byte before); the name of object 25, which script 7 requires."
  },
  {
   "address": 5560,
   "type": "line",
   "text": "Canned message 26: \"METAL DETECTOR\", tokens $15B9-$15CA ending in 0 (the pointer $20A0/$20E0 names $15B8, the byte before); the name of object 26."
  },
  {
   "address": 5578,
   "type": "line",
   "text": "Canned message 27: \"ANTIGRAV\", tokens $15CB-$15CE ending in 0 (the pointer $20A0/$20E0 names $15CA, the byte before); the name of object 27; carried, it lets heavy objects be taken ($9817)."
  },
  {
   "address": 5582,
   "type": "line",
   "text": "Canned message 28: \"POWERAMP\", tokens $15CF-$15DA ending in 0 (the pointer $20A0/$20E0 names $15CE, the byte before); the name of object 28."
  },
  {
   "address": 5594,
   "type": "line",
   "text": "Canned message 29: \"NEUTRON FUEL\", tokens $15DB-$15DF ending in 0 (the pointer $20A0/$20E0 names $15DA, the byte before); the name of object 29 (heavy: $29C0 bit 5), bought by scripts 3 and 20."
  },
  {
   "address": 5599,
   "type": "line",
   "text": "Canned message 30: \"ANTENNA\", tokens $15E0-$15E3 ending in 0 (the pointer $20A0/$20E0 names $15DF, the byte before); the name of object 30, which makes script 2's radio work."
  },
  {
   "address": 5603,
   "type": "line",
   "text": "Canned message 31: \"ENERGY CRYSTAL\", tokens $15E4-$15E8 ending in 0 (the pointer $20A0/$20E0 names $15E3, the byte before); the name of object 31, bought by scripts 14 and 22."
  },
  {
   "address": 5608,
   "type": "line",
   "text": "Canned message 32: \"COFFIN\", tokens $15E9-$15F2 ending in 0 (the pointer $20A0/$20E0 names $15E8, the byte before); the name of object 32."
  },
  {
   "address": 5618,
   "type": "line",
   "text": "Canned messages 33-34: \"LARGE BOX\", tokens $15F3-$15FF ending in 0 (the pointer $20A0/$20E0 names $15F2, the byte before); entries 33 and 34 point here; the name of object 34, bought by scripts 15 and 23."
  },
  {
   "address": 5631,
   "type": "line",
   "text": "Canned message 35: \"USEFUL ARMAMENT\", tokens $1600-$1612 ending in 0 (the pointer $20A0/$20E0 names $15FF, the byte before); the name of object 35, bought by scripts 16 and 24."
  },
  {
   "address": 5650,
   "type": "line",
   "text": "Canned message 36: \"INFIRMARY\", tokens $1613-$1615 ending in 0 (the pointer $20A0/$20E0 names $1612, the byte before); nothing found prints it (script 9 names the room itself)."
  },
  {
   "address": 5653,
   "type": "line",
   "text": "Canned messages 37-38: \"GOLD\", tokens $1616-$1619 ending in 0 (the pointer $20A0/$20E0 names $1615, the byte before); entries 37 and 38 point here; the name of object 38, bought by script 5."
  },
  {
   "address": 5657,
   "type": "line",
   "text": "Canned messages 39-40: \"SIGHTS\", tokens $161A-$1623 ending in 0 (the pointer $20A0/$20E0 names $1619, the byte before); entries 39 and 40 point here; the name of object 40."
  },
  {
   "address": 5667,
   "type": "line",
   "text": "Canned message 41: \"MEDICAL SUPPLIES\", tokens $1624-$1628 ending in 0 (the pointer $20A0/$20E0 names $1623, the byte before); the name of object 41, bought by script 9."
  },
  {
   "address": 5672,
   "type": "line",
   "text": "Canned message 42: \"ESSENTIAL 12939 SUPPLY\", tokens $1629-$1638 ending in 0 (the pointer $20A0/$20E0 names $1628, the byte before); the name of object 42, bought by script 4."
  },
  {
   "address": 5688,
   "type": "line",
   "text": "Canned message 43: \"WINCHESTER\", tokens $1639-$1646 ending in 0 (the pointer $20A0/$20E0 names $1638, the byte before); the name of object 43, bought by scripts 17 and 25."
  },
  {
   "address": 5702,
   "type": "line",
   "text": "Canned message 44: \"CATERING PROVISIONS\", tokens $1647-$164B ending in 0 (the pointer $20A0/$20E0 names $1646, the byte before); the name of object 44, bought by script 6."
  },
  {
   "address": 5707,
   "type": "line",
   "text": "Canned message 45: \"DATABANK\", tokens $164C-$1657 ending in 0 (the pointer $20A0/$20E0 names $164B, the byte before); the name of object 45, bought by script 18."
  },
  {
   "address": 5719,
   "type": "line",
   "text": "Canned message 46: \"PASS\", tokens $1658-$165F ending in 0 (the pointer $20A0/$20E0 names $1657, the byte before); the name of object 46, which the elevator at 03-15 asks for and script 10 can give."
  },
  {
   "address": 5727,
   "type": "line",
   "text": "Canned message 47: \"KITCHEN SINK\", tokens $1660-$1668 ending in 0 (the pointer $20A0/$20E0 names $165F, the byte before); the name of object 47; carried, it lets fixed and heavy objects be taken ($980B)."
  },
  {
   "address": 5736,
   "type": "line",
   "text": "Canned message 48: \"SHIP DESTROYED\", tokens $1669-$166E ending in 0 (the pointer $20A0/$20E0 names $1668, the byte before); printed at $8979 by the routine that acts on a pending attack ($8921), when the player is in a craft ($A9 not negative)."
  },
  {
   "address": 5742,
   "type": "line",
   "text": "Canned message 49: \"ENEMY SHIP DESTROYED\", tokens $166F-$167A ending in 0 (the pointer $20A0/$20E0 names $166E, the byte before); printed at $8789 when object 15 is hit (the test at $8784)."
  },
  {
   "address": 5754,
   "type": "line",
   "text": "Canned message 50: a blank line, tokens $167B-$167C ending in 0 (the pointer $20A0/$20E0 names $167A, the byte before); one word of nine blanks ($E6): the scripts' blank line between paragraphs; also $B3D1."
  },
  {
   "address": 5756,
   "type": "line",
   "text": "Canned messages 51-56: \"PRESS RETURN WHEN READY\", tokens $167D-$1695 ending in 0 (the pointer $20A0/$20E0 names $167C, the byte before); entries 51-56 point here; $B3B4 prints it as 56 in the save and load prompt."
  },
  {
   "address": 5781,
   "type": "line",
   "text": "Canned message 57: \"PASS HOLDERS ONLY\", tokens $1696-$16AA ending in 0 (the pointer $20A0/$20E0 names $1695, the byte before); printed at $B439 at the elevator of 03-15 (table $B4B6, entry 5) without the Pass."
  },
  {
   "address": 5802,
   "type": "line",
   "text": "Canned message 58: \"LOAD NO. O-9 ?\", tokens $16AB-$16B2 ending in 0 (the pointer $20A0/$20E0 names $16AA, the byte before); printed at $B380 for CTRL+L."
  },
  {
   "address": 5810,
   "type": "line",
   "text": "Canned message 59: \"SAVE NO. O-9 ?\", tokens $16B3-$16BA ending in 0 (the pointer $20A0/$20E0 names $16B2, the byte before); printed at $B373 for CTRL+S."
  },
  {
   "address": 5818,
   "type": "line",
   "text": "Canned message 60: \"WHERE AM I\", tokens $16BB-$16BF ending in 0 (the pointer $20A0/$20E0 names $16BA, the byte before); one of script 0's four random landing remarks (60-63)."
  },
  {
   "address": 5823,
   "type": "line",
   "text": "Canned message 61: \"YOU CRASHED\", tokens $16C0-$16C4 ending in 0 (the pointer $20A0/$20E0 names $16BF, the byte before); script 0's random landing remark 61."
  },
  {
   "address": 5828,
   "type": "line",
   "text": "Canned message 62: \"GOOD LANDING!\", tokens $16C5-$16CA ending in 0 (the pointer $20A0/$20E0 names $16C4, the byte before); script 0's random landing remark 62."
  },
  {
   "address": 5834,
   "type": "line",
   "text": "Canned message 63: \"OUCH!\", tokens $16CB-$16D2 ending in 0 (the pointer $20A0/$20E0 names $16CA, the byte before); script 0's random landing remark 63; the last canned message."
  },
  {
   "address": 5843,
   "type": "line",
   "text": "After the last canned message: $4C and 44 zero bytes to $16FF, which nothing reads (the same $4C $00 pair ends the dictionary at $151D and the opening's script at $71B4)."
  },
  {
   "address": 5888,
   "type": "line",
   "text": "Model of objects 58 and 59: a skull and crossbones drawn flat in the X-height plane, 6 wide, between heights 4 and 11: a sign on a wall (both objects stand at Y 0 of their rooms, 58 in room $6F and 59 in room $62; fixed, flags $10). The model at $3EF8 (objects 57, 60) is the same figure turned into the Y-height plane. Layout: $1700 = $11, 18 vertices; $1701-$1736 the vertices, x, height, y as signed bytes (16 world units each); $1737 = $8C, 13 edges; $1738-$1751 the edges, two bytes each, the two vertex numbers."
  },
  {
   "address": 5943,
   "type": "side",
   "text": "edge count: 13 edges follow, two bytes each"
  },
  {
   "address": 5970,
   "type": "line",
   "text": "Model of object 5: a low delta-shaped vehicle 64 long (y -32 to +32), 32 wide and 10 high, with a raised cockpit and a fin. Object 5 is one of the craft B can board (objects 0-7, $9857); heavy (flags $20), in room 2 at the hand-over. The game gives it no name. Layout: $1752 = $0C, 13 vertices; $1753-$1779 the vertices, x, height, y as signed bytes (16 world units each); $177A = $15, 22 edges; $177B-$1790 the edges, one byte each, the two vertex numbers in the high and low nibble."
  },
  {
   "address": 6010,
   "type": "side",
   "text": "edge count: 22 edges follow, one byte each (nibbles)"
  },
  {
   "address": 6033,
   "type": "line",
   "text": "Model of object 32: COFFIN (canned message 32, flags $08): a coffin lying along X, 12 long, 5 wide and 3 high; in room $34. Layout: $1791 = $0B, 12 vertices; $1792-$17B5 the vertices, x, height, y as signed bytes (16 world units each); $17B6 = $11, 18 edges; $17B7-$17C8 the edges, one byte each, the two vertex numbers in the high and low nibble."
  },
  {
   "address": 6070,
   "type": "side",
   "text": "edge count: 18 edges follow, one byte each (nibbles)"
  },
  {
   "address": 6089,
   "type": "line",
   "text": "Model of object 37: a frame 12 wide between heights 7 and 15, flat in the X-height plane, with a zigzag line that starts at its right edge and falls out below its lower left corner to height 4: a graph. Fixed (flags $10), no name; in room $A2, the Exchequer (script 5 sets $57EF = $A2). Layout: $17C9 = $0B, 12 vertices; $17CA-$17ED the vertices, x, height, y as signed bytes (16 world units each); $17EE = $0A, 11 edges; $17EF-$17F9 the edges, one byte each, the two vertex numbers in the high and low nibble."
  },
  {
   "address": 6126,
   "type": "side",
   "text": "edge count: 11 edges follow, one byte each (nibbles)"
  },
  {
   "address": 6138,
   "type": "line",
   "text": "Model of object 48: a spider's web: hexagonal rings and threads, 16 wide and 16 high, flat in the X-height plane. Fixed (flags $10), in room $58; the game never names it (canned message 48 is SHIP DESTROYED); Zzap 13 calls it the Cobweb. While it is carried no door is locked ($948E). Layout: $17FA = $12, 19 vertices; $17FB-$1833 the vertices, x, height, y as signed bytes (16 world units each); $1834 = $93, 20 edges; $1835-$185C the edges, two bytes each, the two vertex numbers."
  },
  {
   "address": 6196,
   "type": "side",
   "text": "edge count: 20 edges follow, two bytes each"
  },
  {
   "address": 6237,
   "type": "line",
   "text": "Model of object 33: a tilted square board with both diagonals drawn, on a pole with three legs, 8 high. No name (flags $00; canned message 33, LARGE BOX, is a filler copy of 34's); in room $9B, the Conference room (script 4 sets $57EF = $9B). Layout: $185D = $09, 10 vertices; $185E-$187B the vertices, x, height, y as signed bytes (16 world units each); $187C = $09, 10 edges; $187D-$1886 the edges, one byte each, the two vertex numbers in the high and low nibble."
  },
  {
   "address": 6268,
   "type": "side",
   "text": "edge count: 10 edges follow, one byte each (nibbles)"
  },
  {
   "address": 6279,
   "type": "line",
   "text": "Model of object 47: KITCHEN SINK (canned message 47, flags $08): a cabinet 16 wide and 7 high with a basin sunk into its top and a tap rising to 9; in room $A3, the Kitchen (script 6). While it is carried, T takes fixed and heavy objects too ($980B). Layout: $1887 = $16, 23 vertices; $1888-$18CC the vertices, x, height, y as signed bytes (16 world units each); $18CD = $9B, 28 edges; $18CE-$1905 the edges, two bytes each, the two vertex numbers."
  },
  {
   "address": 6349,
   "type": "side",
   "text": "edge count: 28 edges follow, two bytes each"
  },
  {
   "address": 6406,
   "type": "line",
   "text": "Model of object 41: MEDICAL SUPPLIES (canned message 41, flags $08): a box 8 by 8 and 10 high with a cross on its front; in room $0C. Script 9, the Infirmary (room $A5), asks for it in $57EE. Layout: $1906 = $13, 20 vertices; $1907-$1942 the vertices, x, height, y as signed bytes (16 world units each); $1943 = $97, 24 edges; $1944-$1973 the edges, two bytes each, the two vertex numbers."
  },
  {
   "address": 6467,
   "type": "side",
   "text": "edge count: 24 edges follow, two bytes each"
  },
  {
   "address": 6516,
   "type": "line",
   "text": "Model of object 42: ESSENTIAL 12939 SUPPLY (canned message 42, flags $08): a crate 10 wide, 6 deep and 6 high with the letters PEPSI drawn on one long side; in room $32. Script 4, the Conference room (room $9B), asks for it. Layout: $1974 = $1F, 32 vertices; $1975-$19D4 the vertices, x, height, y as signed bytes (16 world units each); $19D5 = $9D, 30 edges; $19D6-$1A11 the edges, two bytes each, the two vertex numbers."
  },
  {
   "address": 6613,
   "type": "side",
   "text": "edge count: 30 edges follow, two bytes each"
  },
  {
   "address": 6674,
   "type": "line",
   "text": "Model of object 36: a cabinet 5 wide and 4 deep, 6 high at the front, with its back rising to 11 and a sloping top section set back between heights 9 and 11. No name (flags $00; canned message 36 is INFIRMARY); in room $A3, the Kitchen, with the kitchen sink. Layout: $1A12 = $0F, 16 vertices; $1A13-$1A42 the vertices, x, height, y as signed bytes (16 world units each); $1A43 = $15, 22 edges; $1A44-$1A59 the edges, one byte each, the two vertex numbers in the high and low nibble."
  },
  {
   "address": 6723,
   "type": "side",
   "text": "edge count: 22 edges follow, one byte each (nibbles)"
  },
  {
   "address": 6746,
   "type": "line",
   "text": "Model of object 34: LARGE BOX (canned message 34, flags $08): a plain cuboid 32 by 32 and 16 high; in room $44. Scripts 15 and 23, the Stores (room $93) and the Mechanoid stores (room $30), ask for it. Layout: $1A5A = $07, 8 vertices; $1A5B-$1A72 the vertices, x, height, y as signed bytes (16 world units each); $1A73 = $0B, 12 edges; $1A74-$1A7F the edges, one byte each, the two vertex numbers in the high and low nibble."
  },
  {
   "address": 6771,
   "type": "side",
   "text": "edge count: 12 edges follow, one byte each (nibbles)"
  },
  {
   "address": 6784,
   "type": "line",
   "text": "Model of object 40: SIGHTS (canned message 40, flags $08): a figure flat in the X-height plane, an octagonal head with two eyes on two legs, 11 high; in room 9. While it is carried, $9376 turns on sprite 0, the gun sight. Layout: $1A80 = $0D, 14 vertices; $1A81-$1AAA the vertices, x, height, y as signed bytes (16 world units each); $1AAB = $0B, 12 edges; $1AAC-$1AB7 the edges, one byte each, the two vertex numbers in the high and low nibble."
  },
  {
   "address": 6827,
   "type": "side",
   "text": "edge count: 12 edges follow, one byte each (nibbles)"
  },
  {
   "address": 6840,
   "type": "line",
   "text": "Model of object 46: PASS (canned message 46, flags $08): a card with a P on it on a post, 12 high in all, flat in the Y-height plane; in room $50. Without it the elevator refuses room 5 ($B434, PASS HOLDERS ONLY); script 10 moves it to room 1 as the reward it announces (INSIDE THE RED HANGER). The byte after its edges, $1AE4, is 0 and nothing reads it. Layout: $1AB8 = $0A, 11 vertices; $1AB9-$1AD9 the vertices, x, height, y as signed bytes (16 world units each); $1ADA = $08, 9 edges; $1ADB-$1AE3 the edges, one byte each, the two vertex numbers in the high and low nibble."
  },
  {
   "address": 6874,
   "type": "side",
   "text": "edge count: 9 edges follow, one byte each (nibbles)"
  },
  {
   "address": 6884,
   "type": "side",
   "text": "unused: one byte of 0 between the pass's edges and the next model"
  },
  {
   "address": 6885,
   "type": "line",
   "text": "Model of object 44: CATERING PROVISIONS (canned message 44, flags $08): a box with sloping sides, 20 by 12 at the bottom, 16 by 8 at the top and 10 high, with lines drawn on its base; in room $0F. Script 6, the Kitchen (room $A3), asks for it. Layout: $1AE5 = $0F, 16 vertices; $1AE6-$1B15 the vertices, x, height, y as signed bytes (16 world units each); $1B16 = $10, 17 edges; $1B17-$1B27 the edges, one byte each, the two vertex numbers in the high and low nibble."
  },
  {
   "address": 6934,
   "type": "side",
   "text": "edge count: 17 edges follow, one byte each (nibbles)"
  },
  {
   "address": 6952,
   "type": "line",
   "text": "Model of object 45: DATABANK (canned message 45, flags $08): a triangular prism 12 by 12 and 12 high; in room $6C. Script 18, the Control room (room $AA), asks for it. Layout: $1B28 = $05, 6 vertices; $1B29-$1B3A the vertices, x, height, y as signed bytes (16 world units each); $1B3B = $08, 9 edges; $1B3C-$1B44 the edges, one byte each, the two vertex numbers in the high and low nibble."
  },
  {
   "address": 6971,
   "type": "side",
   "text": "edge count: 9 edges follow, one byte each (nibbles)"
  },
  {
   "address": 6981,
   "type": "line",
   "text": "Model of object 56: a square pyramid 172 by 172 and 127 high, with the mast (object 50) the tallest model; object 56 stands on the surface out in the wasteland at X $B5 (-75), Y $D9 (-39). Fixed (flags $10), no name. While it is carried, D drops objects even when $7F is 0, at the player's height ($98FE). Layout: $1B45 = $04, 5 vertices; $1B46-$1B54 the vertices, x, height, y as signed bytes (16 world units each); $1B55 = $07, 8 edges; $1B56-$1B5D the edges, one byte each, the two vertex numbers in the high and low nibble."
  },
  {
   "address": 6997,
   "type": "side",
   "text": "edge count: 8 edges follow, one byte each (nibbles)"
  },
  {
   "address": 7006,
   "type": "line",
   "text": "Model of object 50: a guyed mast: a square column 8 wide from height 20 to 90 on a pyramid foot, a point at 110, a line up the middle to 127 and four guy lines from the column's top to the ground 40 out on the diagonals. Object 50 stands on the surface in the wasteland at X $DE (-34), Y $0B; fixed (flags $10), no name. Layout: $1B5E = $0E, 15 vertices; $1B5F-$1B8B the vertices, x, height, y as signed bytes (16 world units each); $1B8C = $18, 25 edges; $1B8D-$1BA5 the edges, one byte each, the two vertex numbers in the high and low nibble."
  },
  {
   "address": 7052,
   "type": "side",
   "text": "edge count: 25 edges follow, one byte each (nibbles)"
  },
  {
   "address": 7078,
   "type": "line",
   "text": "Model of object 26: METAL DETECTOR (canned message 26, flags $08): a hexagonal disc on a post 6 high; in room $2F. While it is carried, the panel shows the owner of the structure underfoot ($B542, from $2B00). Layout: $1BA6 = $07, 8 vertices; $1BA7-$1BBE the vertices, x, height, y as signed bytes (16 world units each); $1BBF = $09, 10 edges; $1BC0-$1BC9 the edges, one byte each, the two vertex numbers in the high and low nibble."
  },
  {
   "address": 7103,
   "type": "side",
   "text": "edge count: 10 edges follow, one byte each (nibbles)"
  },
  {
   "address": 7114,
   "type": "line",
   "text": "Model of object 12: MECHANOID (canned message 12): a figure 14 high, a tapering body, a head and a triangular hat; in room $66, the Mechanoid briefing room (script 13). Flags $04 (bit 2, which script 0 also sets): taking it runs script 12, THE MECHANOID DEMANDS THAT YOU PUT HIM DOWN. Script 19, the Interview room (room $9A), asks for it. Layout: $1BCA = $15, 22 vertices; $1BCB-$1C0C the vertices, x, height, y as signed bytes (16 world units each); $1C0D = $9E, 31 edges; $1C0E-$1C4B the edges, two bytes each, the two vertex numbers."
  },
  {
   "address": 7181,
   "type": "side",
   "text": "edge count: 31 edges follow, two bytes each"
  },
  {
   "address": 7244,
   "type": "line",
   "text": "Model of object 27: ANTIGRAV (canned message 27, flags $08): an inverted pyramid floating above a small upright one, 18 high; in room $11. While it is carried, T takes heavy objects ($9817). Layout: $1C4C = $0B, 12 vertices; $1C4D-$1C70 the vertices, x, height, y as signed bytes (16 world units each); $1C71 = $11, 18 edges; $1C72-$1C83 the edges, one byte each, the two vertex numbers in the high and low nibble."
  },
  {
   "address": 7281,
   "type": "side",
   "text": "edge count: 18 edges follow, one byte each (nibbles)"
  },
  {
   "address": 7300,
   "type": "line",
   "text": "Model of object 29: NEUTRON FUEL (canned message 29, flags $28, heavy): eight lines crossing at one point, a star floating between heights 4 and 12; in room $45. Scripts 3 and 20, the Engine room (room $88) and the Mechanoid fuel stores (room $46), ask for it. Layout: $1C84 = $0F, 16 vertices; $1C85-$1CB4 the vertices, x, height, y as signed bytes (16 world units each); $1CB5 = $07, 8 edges; $1CB6-$1CBD the edges, one byte each, the two vertex numbers in the high and low nibble."
  },
  {
   "address": 7349,
   "type": "side",
   "text": "edge count: 8 edges follow, one byte each (nibbles)"
  },
  {
   "address": 7358,
   "type": "line",
   "text": "Model of object 52: a console 32 wide and 16 high filling a wall: a sloping panel with two screens, a desk and rows of buttons. Fixed (flags $10), no name; in room $10, the Communication room (script 2 sets $57EF = $10: with the Antenna there or carried, Hertz answers; without it, NOT WORKING). Layout: $1CBE = $23, 36 vertices; $1CBF-$1D2A the vertices, x, height, y as signed bytes (16 world units each); $1D2B = $A4, 37 edges; $1D2C-$1D75 the edges, two bytes each, the two vertex numbers."
  },
  {
   "address": 7467,
   "type": "side",
   "text": "edge count: 37 edges follow, two bytes each"
  },
  {
   "address": 7542,
   "type": "line",
   "text": "Model of object 43: WINCHESTER (canned message 43, flags $08): a bottle 4 by 4 and 9 high with a neck and a cap; in room $8E. Scripts 17 and 25, the Laboratory (room $90) and the Mechanoid laboratory (room $12), ask for it. Layout: $1D76 = $0F, 16 vertices; $1D77-$1DA6 the vertices, x, height, y as signed bytes (16 world units each); $1DA7 = $1B, 28 edges; $1DA8-$1DC3 the edges, one byte each, the two vertex numbers in the high and low nibble."
  },
  {
   "address": 7591,
   "type": "side",
   "text": "edge count: 28 edges follow, one byte each (nibbles)"
  },
  {
   "address": 7620,
   "type": "line",
   "text": "Model of object 28: POWERAMP (canned message 28, flags $08): four bow-tie shaped plates crossing at the centre, 12 by 18 and 12 high; in room $43. While it is carried in the Dominion Dart ($A9 = 1) it adds speed ($9F8A) and replaces the height limit with $5A ($A050). Layout: $1DC4 = $0F, 16 vertices; $1DC5-$1DF4 the vertices, x, height, y as signed bytes (16 world units each); $1DF5 = $0F, 16 edges; $1DF6-$1E05 the edges, one byte each, the two vertex numbers in the high and low nibble."
  },
  {
   "address": 7669,
   "type": "side",
   "text": "edge count: 16 edges follow, one byte each (nibbles)"
  },
  {
   "address": 7686,
   "type": "line",
   "text": "Model of object 25: NOVADRIVE (canned message 25, flags $08): an octagonal cylinder 12 across and 18 long lying along Y; in room $89. Script 7, the interstellar ship, asks for it (NOVADRIVE REQUIRED). Layout: $1E06 = $0F, 16 vertices; $1E07-$1E36 the vertices, x, height, y as signed bytes (16 world units each); $1E37 = $1B, 28 edges; $1E38-$1E53 the edges, one byte each, the two vertex numbers in the high and low nibble."
  },
  {
   "address": 7735,
   "type": "side",
   "text": "edge count: 28 edges follow, one byte each (nibbles)"
  },
  {
   "address": 7764,
   "type": "line",
   "text": "Model of object 30: ANTENNA (canned message 30, flags $08): a TV aerial, a mast 10 high with a boom and four elements; in room $62. Script 2 asks for it in the Communication room (room $10). Layout: $1E54 = $0F, 16 vertices; $1E55-$1E84 the vertices, x, height, y as signed bytes (16 world units each); $1E85 = $07, 8 edges; $1E86-$1E8D the edges, one byte each, the two vertex numbers in the high and low nibble."
  },
  {
   "address": 7813,
   "type": "side",
   "text": "edge count: 8 edges follow, one byte each (nibbles)"
  },
  {
   "address": 7822,
   "type": "line",
   "text": "Model of object 31: ENERGY CRYSTAL (canned message 31, flags $08): a hexagonal prism with a pointed top, 12 high; in room $48. Scripts 14 and 22, the Power room (room $AD) and the Mechanoid power room (room $32), ask for it. Layout: $1E8E = $0C, 13 vertices; $1E8F-$1EB5 the vertices, x, height, y as signed bytes (16 world units each); $1EB6 = $17, 24 edges; $1EB7-$1ECE the edges, one byte each, the two vertex numbers in the high and low nibble."
  },
  {
   "address": 7862,
   "type": "side",
   "text": "edge count: 24 edges follow, one byte each (nibbles)"
  },
  {
   "address": 7887,
   "type": "line",
   "text": "Model of object 49: a standard lamp: a base, a pole and a shade, 12 high. No name (flags $00; canned message 49 is ENEMY SHIP DESTROYED); in room $A8 with the sofa (39) and object 51. Layout: $1ECF = $0D, 14 vertices; $1ED0-$1EF9 the vertices, x, height, y as signed bytes (16 world units each); $1EFA = $10, 17 edges; $1EFB-$1F0B the edges, one byte each, the two vertex numbers in the high and low nibble."
  },
  {
   "address": 7930,
   "type": "side",
   "text": "edge count: 17 edges follow, one byte each (nibbles)"
  },
  {
   "address": 7948,
   "type": "line",
   "text": "Model of object 51: an upright block 10 wide, 2 deep and 6 high with an opening at floor level (6 wide, 4 high) framing a smaller box with a bar across, which looks like a fireplace. Fixed (flags $10), no name; in room $A8 with the sofa and the lamp. Layout: $1F0C = $11, 18 vertices; $1F0D-$1F42 the vertices, x, height, y as signed bytes (16 world units each); $1F43 = $92, 19 edges; $1F44-$1F69 the edges, two bytes each, the two vertex numbers."
  },
  {
   "address": 8003,
   "type": "side",
   "text": "edge count: 19 edges follow, two bytes each"
  },
  {
   "address": 8042,
   "type": "line",
   "text": "Model of object 38: GOLD (canned message 38, flags $08): an ingot 4 by 12 at the bottom, 2 by 10 at the top and 3 high; in room $33. Script 5, the Exchequer (room $A2), asks for it. Layout: $1F6A = $07, 8 vertices; $1F6B-$1F82 the vertices, x, height, y as signed bytes (16 world units each); $1F83 = $0B, 12 edges; $1F84-$1F8F the edges, one byte each, the two vertex numbers in the high and low nibble."
  },
  {
   "address": 8067,
   "type": "side",
   "text": "edge count: 12 edges follow, one byte each (nibbles)"
  },
  {
   "address": 8080,
   "type": "line",
   "text": "Model of object 39: a sofa 20 long: seat, back and two arms, 6 high. No name (flags $00; canned message 39, SIGHTS, is a filler copy of 40's); in room $A8 with the lamp (49) and object 51. Layout: $1F90 = $19, 26 vertices; $1F91-$1FDE the vertices, x, height, y as signed bytes (16 world units each); $1FDF = $A3, 36 edges; $1FE0-$2027 the edges, two bytes each, the two vertex numbers."
  },
  {
   "address": 8159,
   "type": "side",
   "text": "edge count: 36 edges follow, two bytes each"
  },
  {
   "address": 8232,
   "type": "line",
   "text": "Model of object 10: a winged craft standing on end: a triangular body from the ground up to a nozzle at height 22, two swept wings 16 out at the top and a fin. Object 10 is one of the moving objects 8-15 ($8690), fixed (flags $10), no name; nowhere ($FF) at the hand-over and on the ground at the player's own X and Y at 08-08 (08.88, 08.88) once the player stands there after the crash (play-ground-0808.vsf). Layout: $2028 = $12, 19 vertices; $2029-$2061 the vertices, x, height, y as signed bytes (16 world units each); $2062 = $9A, 27 edges; $2063-$2098 the edges, two bytes each, the two vertex numbers."
  },
  {
   "address": 8290,
   "type": "side",
   "text": "edge count: 27 edges follow, two bytes each"
  },
  {
   "address": 8345,
   "type": "line",
   "text": "Seven bytes after the last model in this block that nothing reads: $4C $00 $00 and the ASCII text \"KP5 \". What they were is not known; the canned messages are followed the same way, by $4C and zeros at $16D3."
  },
  {
   "address": 8352,
   "type": "line",
   "text": "Canned messages, low bytes: entry n (0-63), with $20E0+n, points one byte before canned message n, a token list ended by 0 in $151F-$16D2 (the printer steps its index before each read). $8DAA starts message X; script ops 20 and 27 use it, and $98B1 prints message n, the object's name, when object n with flag bit 3 is taken or boarded. So for the named objects, 6, 12, 16 and 24-47, the message number is the object number."
  },
  {
   "address": 8416,
   "type": "line",
   "text": "Canned messages, high bytes ($15 or $16). The 64: 0 LOCKED, 1 ITS VERY DARK IN HERE, 2 TOO HEAVY, 3 MESSAGE FROM PALYARS, 4 MESSAGE FROM MECHANOIDS, 5 - - - JOB OFFER - - -, 6 CHEESE, 7 MESSAGE ENDS, 8 COMMUNICATION ROOM, 9 HANGER, 10 KITCHEN, 11 ENGINE ROOM, 12 MECHANOID, 13 PALYAR BRIEFING ROOM, 14 CONFERENCE ROOM, 15 THE PALYAR COMMANDER'S BROTHER-IN-LAW'S ROOM, 16 PHOTON EMITTER, 17-21 YOU HAVE [figure 0] CREDITS (one message, five entries), 22 EXCHEQUER, 23 YOU HAVE JUST DESTROYED, 24-47 object names (ANTI TIME BOMB, NOVADRIVE, METAL DETECTOR, ANTIGRAV, POWERAMP, NEUTRON FUEL, ANTENNA, ENERGY CRYSTAL, COFFIN, LARGE BOX twice, USEFUL ARMAMENT, INFIRMARY, GOLD twice, SIGHTS twice, MEDICAL SUPPLIES, ESSENTIAL 12939 SUPPLY, WINCHESTER, CATERING PROVISIONS, DATABANK, PASS, KITCHEN SINK), 48 SHIP DESTROYED, 49 ENEMY SHIP DESTROYED, 50 blanks, 51-56 PRESS RETURN WHEN READY (one message), 57 PASS HOLDERS ONLY, 58 LOAD NO. 0-9 ?, 59 SAVE NO. 0-9 ?, 60 WHERE AM I, 61 YOU CRASHED, 62 GOOD LANDING!, 63 OUCH!"
  },
  {
   "address": 8480,
   "type": "line",
   "text": "Dictionary, low bytes: entry n (0-$EF), with $2210+n, points one byte before word n, ASCII with bit 7 on the last letter, in $1249-$151B; read at $8E3D for message tokens $01-$EE. Entries 0 and 1 both give MENT. No message uses words $40-$95: their entries hold $6A (with $13, word $96's address $136A, NO. 0-9 ?), except that $2160-$2163 and $2170-$217E, entries $40-$43 and $50-$5E, are code."
  },
  {
   "address": 8544,
   "type": "line",
   "text": "Where the game goes on after CTRL+S or CTRL+L: JMP ($BFFD) at $8215 arrives here because the game's own zero page, parked at $BF00 by the swap at $B8F6 while the KERNAL runs, holds $2160 in $FD-$FE; a load restores $BF00-$BFFF from the file, so the file's own $FD-$FE decides. SEI; JMP $80BA, which swaps zero page back, sets up the hardware and re-enters the main loop. The four bytes are also dictionary entries $40-$43."
  },
  {
   "address": 8548,
   "type": "line",
   "text": "Dictionary low bytes for words $44-$4F, all $6A: no message uses these words, and with their high bytes $13 they point at $136A, word $96."
  },
  {
   "address": 8560,
   "type": "line",
   "text": "The original's reset trap, disarmed in this build. The original disk has CBM80 at $8004 and $2170 in the cold-start vector at $8000, so a hardware reset jumps here: SEI; LDX #0; STA $2180,X; DEX; BNE with offset $F8, back to $2171, spinning for ever storing A at $2180; INC $2175 (the STA's high byte) and JMP $2170 after it are never reached. This cracked build has zeros at $8004-$8008, so a reset ignores the vector, and offset $F9, which lands on $2172, LDX's operand $00, a BRK. The bytes are also dictionary entries $50-$5E."
  },
  {
   "address": 8565,
   "type": "line",
   "text": "The reset trap's STA address high byte, $21, which its INC $2175 would step page by page; in the original the loop never gets that far."
  },
  {
   "address": 8567,
   "type": "side",
   "text": "offset $F9 here, $F8 in the original (back to $2171): $F9 lands on $2172, the $00 of LDX #$00, a BRK"
  },
  {
   "address": 8569,
   "type": "side",
   "text": "not reached in the original: its BNE always branches"
  },
  {
   "address": 8575,
   "type": "line",
   "text": "Dictionary low byte of word $5F, unused: $6A like its neighbours, pointing at $136A."
  },
  {
   "address": 8576,
   "type": "line",
   "text": "Dictionary low bytes, words $60-$9F: $60-$95 unused ($6A), then the words in use from $96, NO. 0-9 ?, on. The reset trap's STA $2180,X names this address."
  },
  {
   "address": 8640,
   "type": "line",
   "text": "Dictionary low bytes, words $A0-$EF: $E6-$EE are runs of nine blanks down to one, which centre the canned messages, and the token $EF prints a blank without reading its entry."
  },
  {
   "address": 8720,
   "type": "line",
   "text": "Dictionary, high bytes (with $2120): $12-$15, except entry $CB at $22DB, $BE, so word $CB points at $BEF8, a variable the scripts set to 1 when an enemy ship attacks ($11BE, $11C9) and $8850 clears; no message uses word $CB, so the entry is never followed."
  },
  {
   "address": 8960,
   "type": "line",
   "text": "Room data, low bytes: entry n, with $23C0+n, is the address of room n's description, read at $90FA when the player enters room n (the room number goes to $CD). Rooms $01-$AE use it, in address order from $3000 (room 1, 18 bytes) to $3B16 (room $AE), all in $3000-$3B24; entries 0 and $AF-$BF hold $3000 as well and are not used."
  },
  {
   "address": 9152,
   "type": "line",
   "text": "Room data, high bytes (with $2300): $30-$3B for rooms $01-$AE, and $30 for the unused entry 0 and the unused entries $AF-$BF, which are the table's last 17 bytes, $246F-$247F."
  },
  {
   "address": 9344,
   "type": "line",
   "text": "Objects' X, middle byte, indexed by object number (0-63). Each position is 24 bits in three of nine split tables: X low, middle, high at $2880, $2480, $2540; height at $28C0, $24C0, $2580; Y at $2900, $2500, $25C0. On the surface the high byte is the grid square; objects in rooms have high bytes 0. $9957 subtracts the player's position from these; a model's vertices are offsets from this point."
  },
  {
   "address": 9351,
   "type": "line",
   "text": "Object 7's X middle byte: $8687 sets it to $99 when the ship Hertz sends appears above 08-08 (object 7, the interstellar ship, placed at X $089900, Y $088B00)."
  },
  {
   "address": 9408,
   "type": "line",
   "text": "Objects' height, middle byte (with $28C0 low and $2580 high). Height grows upwards from 0 at the ground or floor; the moving objects 8-15 are held at $FFFFFF when they sink below it ($86D8)."
  },
  {
   "address": 9415,
   "type": "line",
   "text": "Object 7's height, middle byte: $8634 lowers the arriving interstellar ship each pass by 1/128 of its height (and 256 more), from $7F0000 until it lands."
  },
  {
   "address": 9472,
   "type": "line",
   "text": "Objects' Y, middle byte (with $2900 low and $25C0 high). Entry 0 is also stepped by 1 every main-loop pass on the surface at $85C5: object 0, a Dart at X square 0, flies along Y over the city."
  },
  {
   "address": 9479,
   "type": "line",
   "text": "Object 7's Y middle byte, set to $8B at $868C when the interstellar ship is sent to 08-08."
  },
  {
   "address": 9536,
   "type": "line",
   "text": "Objects' X, high byte: on the surface the grid column, 0-15 in the city, more outside it (the pyramid, object 56, is at $B5 = -75). CTRL+Q's scattering ($85FE) gives carried objects a random column 0-15."
  },
  {
   "address": 9543,
   "type": "line",
   "text": "Object 7's X high byte, set to 8 at $867F: the interstellar ship comes down in column 08."
  },
  {
   "address": 9600,
   "type": "line",
   "text": "Objects' height, high byte; object 63 at $40 is the highest, far above the city at X and Y 08.70."
  },
  {
   "address": 9607,
   "type": "line",
   "text": "Object 7's height high byte: $7F when the interstellar ship is sent ($8666), then brought down with the middle byte each pass until both are 0 ($865B)."
  },
  {
   "address": 9664,
   "type": "line",
   "text": "Objects' Y, high byte: on the surface the grid row. $85CA carries object 0's Y into it and masks it to 0-15, so object 0 flies along column 00 and wraps from row 15 back to row 0."
  },
  {
   "address": 9671,
   "type": "line",
   "text": "Object 7's Y high byte, set to 8 at $8682: the interstellar ship comes down in row 08."
  },
  {
   "address": 9728,
   "type": "line",
   "text": "Structures, low bytes: entry n, a city location (grid row Y times 16 plus column X, as in $B7), with $2700+n is the address of the structure standing there. $9575 reads it into tables in $0400-$07FF and $57A0-$57DF, and collapses it ($9685) when bit 7 of $2B00+n, copied to $F2, marks it destroyed. 98 different structures serve the 256 locations. $950D sets $B7 to 0 outside the city and skips the load when $B7 is 0, which is also location 00-00."
  },
  {
   "address": 9984,
   "type": "line",
   "text": "Structures, high bytes (with $2600): the structures' data lies in $C000-$CFFF and $E000-$FFFF (the most shared one, $F05A, stands in 16 locations)."
  },
  {
   "address": 10240,
   "type": "line",
   "text": "Objects' model, low bytes (with $2840), read at $972A into $1D-$1E. A model is: one byte, the number of vertices minus 1; three signed bytes per vertex, x, height and y, each 16 world units; one edge-count byte; with its bit 7 clear, count+1 edges of one byte each (the two vertex numbers in the high and low nibble, so at most 16 vertices), with bit 7 set, (count AND $7F)+1 edges of two bytes each; vertices count from 0. $97AB walks it. Objects 0-15 are first turned by the 64-step angles at $802A (in the x-y plane), $801A (y-height) and $800A (x-height), $A6AD."
  },
  {
   "address": 10304,
   "type": "line",
   "text": "Objects' model, high bytes (with $2800): $17-$20 for the 32 models in $1700-$2098, $3B-$3F for the 23 in $3B25-$3FFE, 55 models packed end to end. Shared: objects 0, 1, 9, 11 and 13 (the Dart, $3B25); 4 and 15; 8 and 14; 57 and 60; 58 and 59; 61 and 62."
  },
  {
   "address": 10368,
   "type": "line",
   "text": "Objects' X, low byte (with $2480 middle and $2540 high)."
  },
  {
   "address": 10375,
   "type": "line",
   "text": "Object 7's X low byte, zeroed at $8677 when the interstellar ship is sent to 08-08."
  },
  {
   "address": 10432,
   "type": "line",
   "text": "Objects' height, low byte (with $24C0 and $2580); D sets it to 0 for a dropped object ($9940)."
  },
  {
   "address": 10439,
   "type": "line",
   "text": "Object 7's height low byte, zeroed at $8674 as the interstellar ship is sent."
  },
  {
   "address": 10496,
   "type": "line",
   "text": "Objects' Y, low byte (with $2500 middle and $25C0 high)."
  },
  {
   "address": 10503,
   "type": "line",
   "text": "Object 7's Y low byte, zeroed at $867A as the interstellar ship is sent."
  },
  {
   "address": 10560,
   "type": "line",
   "text": "Where each object is: 0 on the surface, $01-$AE a room number (as $CD holds while the player is in that room), $FF nowhere: taken or boarded ($9840), or a moving object 8-15 out of play ($870E). D writes $CD ($991D). $9374 lists the objects whose entry equals $CD; script op 29 compares an entry with $57EF."
  },
  {
   "address": 10561,
   "type": "line",
   "text": "Object 1's location, the Dominion Dart's: $812C sets it to $FF as the CTRL+Q restart ($80E8 on) puts the player in the Dart ($A9 = 1)."
  },
  {
   "address": 10567,
   "type": "line",
   "text": "Object 7's location: $866E sets it to 0, the surface, when the interstellar ship is sent to 08-08 (it starts in room 5, which needs the pass)."
  },
  {
   "address": 10574,
   "type": "line",
   "text": "Object 14's location, set to $FF at $898F together with object 15's."
  },
  {
   "address": 10575,
   "type": "line",
   "text": "Object 15's location, set to $FF at $8992 with object 14's."
  },
  {
   "address": 10624,
   "type": "line",
   "text": "Objects at the player's location: $9374 writes the number of each object whose location ($2940) equals $CD into $2981 onwards, highest number first, and the count to $B2. This first byte is used by nothing but the save and load of the block $2900-$29FF."
  },
  {
   "address": 10625,
   "type": "line",
   "text": "The list's entries 1 to $B2 (at most 63 fit before $29C0): $9706 hands each to $9728, which takes or boards it on T or B or else draws it; $9425 searches the list for object A."
  },
  {
   "address": 10688,
   "type": "line",
   "text": "Object flags. Bit 7 carried (set by T at $9834, cleared by D at $9913 and by CTRL+Q at $8626); bit 6 toggled at $9360, no reader found; bit 5 heavy: TOO HEAVY unless the Antigrav or the Kitchen Sink is carried; bit 4 fixed: T ignores it unless the Kitchen Sink is carried; bit 3 print the object's name, canned message n, when taken or boarded; bit 2 run script n then ($98B1); bit 0 delivered and paid for (set with bit 4 at $1039, tested at $1010); bit 1 unused. Script ops 32 and 33 change and test them for the object in $57EE."
  },
  {
   "address": 10696,
   "type": "line",
   "text": "Object 8's flags (the missile the player fires, $886A); also the base of LDA $29C8,X at $949C, X a door type 8-15: such a door is LOCKED unless object type+8 is carried, 16 the Photon Emitter or one of the flat shaped plates 17-23, or the cobweb (48)."
  },
  {
   "address": 10712,
   "type": "line",
   "text": "Flags of object 24, the Anti Time Bomb: while it is carried (bit 7, $87AF) a missile hit at the player's location leaves the structure standing and rebuilds one already destroyed ($8816 puts back its $2B00 entry without bit 7)."
  },
  {
   "address": 10714,
   "type": "line",
   "text": "Flags of object 26, the Metal Detector: while it is carried (bit 7, $B542), on the surface in the city below height $10000, the panel is green over a Palyar structure, blue over a Mechanoid one and red over a neutral one (bits 6 and 5 of $2B00)."
  },
  {
   "address": 10715,
   "type": "line",
   "text": "Flags of object 27, the Antigrav: while it is carried (bit 7, $9817) T takes heavy objects."
  },
  {
   "address": 10716,
   "type": "line",
   "text": "Flags of object 28, the Poweramp: while it is carried in object 1, the Dominion Dart, $9F8A adds 4 to the speed's high byte and $A050 uses $5A for the height limit instead of $BEAD."
  },
  {
   "address": 10728,
   "type": "line",
   "text": "Flags of object 40, the Sights: $9376 switches sprite 0, the gun sight, on while bit 7 (carried) is set and off otherwise."
  },
  {
   "address": 10734,
   "type": "line",
   "text": "Flags of object 46, the Pass: unless it is carried (bit 7, $B434) the elevator will not go to room 5 and prints PASS HOLDERS ONLY (canned message 57)."
  },
  {
   "address": 10735,
   "type": "line",
   "text": "Flags of object 47, the Kitchen Sink: while it is carried (bit 7, $980B) T takes any object in reach, fixed and heavy ones too."
  },
  {
   "address": 10736,
   "type": "line",
   "text": "Flags of object 48, the cobweb: while it is carried (bit 7, $948E) no door is locked."
  },
  {
   "address": 10744,
   "type": "line",
   "text": "Flags of object 56, the pyramid: while it is carried (bit 7, $98FE) D drops even when $7F is 0, and the dropped object keeps the player's height."
  },
  {
   "address": 10752,
   "type": "line",
   "text": "View range in grid squares for each height band: $9554 indexes it with the player's height divided by $800 ($FF from height $80000 up; above $200000, $8FF8 uses 64 instead) and keeps the value in $B9, which sets the window of city squares $8EC2 draws and how far away an object below the player is still drawn as a dot ($974C). Index 0 gives 0, 1-2 give 1, 3-6 2, 7-$0B 3, $0C-$13 4, then a quarter of the index, but one more from $74 on (so 29, $1D, never occurs), up to $3F at $F8-$FF."
  },
  {
   "address": 11008,
   "type": "line",
   "text": "State of each location's structure (index Y times 16 plus X), saved with the game. Bit 7 destroyed (set at $8765 by a missile hit, cleared at $881B with the Anti Time Bomb); bit 6 Mechanoid-held (115 locations), clear Palyar-held (114); bit 5 neutral (27): no side's count moves. Kills count in $BEBC (Mechanoid) and $BEBB (Palyar); Mechanoid kills $69 or more ahead start script 10, the Palyars' reward, Palyar kills that far ahead script 26 ($87EE). Otherwise bits 0-4, n, not 0, start script 32+n and are cleared ($8800): $0B at 08-07 gives script 43, BOSHER STADIUM."
  },
  {
   "address": 11264,
   "type": "line",
   "text": "City map, roads along X (east-west, X growing eastwards by the leaflet), first end: 256 bytes, one per square, index Y*16+X. Each square holds the road line that runs through it along X as the numbers (Y*16+X) of the squares at its two ends: here the lower-X end, map_road_x_to the higher; 0 = none. A number p is the centre of square (p AND 15, p/16) on the ground ($A67B), and every square on a road holds the same pair: 15 roads. Read at $8F24 (the player's square, to $757D) and at $8F66, whose operand $8EF1/$8F58 set to each row in view: $8FC3 adds each road to the line lists $7540, $7580/$75C0 that $9054 draws when flying (radius by height from $2A00, none below 2048 units)."
  },
  {
   "address": 11520,
   "type": "line",
   "text": "City map, roads along X, second end: for each square (Y*16+X) the number of the square at the higher-X end of the X-direction road through it, paired with map_road_x_from ($2C00). Read at $8F2A (the player's square, to $757C, the slot $90A6 tests) and $8F6B (squares in view, passed to $8FC3 in A)."
  },
  {
   "address": 11776,
   "type": "line",
   "text": "City map, roads along Y (north-south), first end: for each square (Y*16+X) the number of the square at the lower-Y end of the Y-direction road through it, 0 = none; 17 roads, such as $01-$F1 down column 1. Read at $8F30 (the player's square, to $757F) and $8F71 (squares in view; a 0 skips the pair)."
  },
  {
   "address": 12032,
   "type": "line",
   "text": "City map, roads along Y, second end: the number of the square at the higher-Y end of the Y-direction road through each square, paired with map_road_y_from ($2E00). Read at $8F36 (to $757E, tested at $90B2) and $8F76 (squares in view)."
  },
  {
   "address": 12288,
   "type": "line",
   "text": "Underground room records, 174 of them (rooms $01-$AE; pointers split at $2300/$23C0, read at $90FA; entries 0 and $AF-$BF point here too, and room 0 means outside). Format, from $90F6-$9287 and $9437: byte 0 = X size in units of 256 (bit 7: a transporter booth, below); byte 1 bits 0-2 = height, bits 3-7 = n; byte 2 = Y size (bit 7 set: on entry start script n through $8A8C, clear: show canned message n through $F7); bytes 3, 4 = two colours (to $C4, $C5, then $A5, $A6: the low nibble of the view's screen matrix and its colour RAM). Then doors of 4 bytes: type, destination room, X, Y (the unit the door is in); type bit 7 = in a wall of constant X, else constant Y; bits 4-6 = the door of the destination room the player comes out of; bits 0-3 = outline, through $932B into $928A (2 plain, 3 triangle, 4/5 arrows, 6 cross, 7 diagonal, 9-15 locked: needs bit 7 of $29C0 of object 8+outline, the key). The list ends in 0, or in $80 for a dark room. A booth adds link pairs (room, door in bits 4-6) after the end: two at bytes 10-13, eight in room $72. Comments below write a door as n: room/door @x,y, with X for a wall of constant X. Room $01, complex of hangars 1 and 2 (09-06, 09-05): 16 by 16 units (X by Y), 4 high, colours 2 and 10. On entry Benson shows canned message 9, HANGER. The lift (key E, $B3F6) at square 09-06 ($B4B6/$B4BE entry 1) brings the player here, to 8,8 ($A2EB). Doors: 0: $58/0 @16,12 X; 1: $09/0 @11,16; 2: $59/0 @5,0."
  },
  {
   "address": 12306,
   "type": "line",
   "text": "Room $02, complex of hangars 1 and 2 (09-06, 09-05): 16 by 16 units (X by Y), 4 high, colours 9 and 8. On entry Benson shows canned message 9, HANGER. The lift (key E, $B3F6) at square 09-05 ($B4B6/$B4BE entry 2) brings the player here, to 8,8 ($A2EB). Doors: 0: $75/0 @11,0 cross; 1: $96/0 @16,4 X triangle; 2: $98/0 @16,1 X; 3: $97/0 @16,6 X; 4: $71/2 @4,16; 5: $4A/1 @0,6 X locked, key $11; 6: $4B/0 @4,0 locked, key $11. At the hand-over $2940 puts object $05 here."
  },
  {
   "address": 12340,
   "type": "line",
   "text": "Room $03, complex of hangar 3 (03-00): 16 by 16 units (X by Y), 4 high, colours 6 and 14. On entry Benson shows canned message 9, HANGER. The lift (key E, $B3F6) at square 03-00 ($B4B6/$B4BE entry 3) brings the player here, to 8,8 ($A2EB). Doors: 0: $30/0 @16,6 X; 1: $31/0 @16,9 X; 2: $46/0 @12,16; 3: $4C/0 @4,16; 4: $15/1 @12,0. At the hand-over $2940 puts object $04 here."
  },
  {
   "address": 12366,
   "type": "line",
   "text": "Room $04, complex of hangar 4 (11-13): 16 by 16 units (X by Y), 4 high, colours 9 and 7. On entry Benson shows canned message 9, HANGER. The lift (key E, $B3F6) at square 11-13 ($B4B6/$B4BE entry 4) brings the player here, to 8,8 ($A2EB). Doors: 0: $73/0 @4,0 cross; 1: $72/0 @12,0 cross; 2: $25/1 @16,10 X; 3: $1B/2 @16,14 X; 4: $47/2 @12,16; 5: $4F/2 @4,16; 6: $16/0 @8,0; 7: $36/1 @16,2 X."
  },
  {
   "address": 12404,
   "type": "line",
   "text": "Room $05, complex of hangar 5 (03-15): 16 by 16 units (X by Y), 4 high, colours 7 and 0. On entry Benson shows canned message 9, HANGER. Dark (list ends in $80): unless object $10, the PHOTON EMITTER, is carried or in the room, $C2, $C4 and $C5 (background and both colours) become 0 and $F7 becomes 1 (message 1, ITS VERY DARK IN HERE). The lift (key E, $B3F6) at square 03-15 ($B4B6/$B4BE entry 5) brings the player here, to 8,8 ($A2EB). It needs object $2E, the PASS ($B430), else message 57 PASS HOLDERS ONLY. Doors: 0: $50/0 @16,4 X; 1: $49/0 @16,12 X; 2: $6F/0 @3,16. At the hand-over $2940 puts object $07 here."
  },
  {
   "address": 12422,
   "type": "line",
   "text": "Room $06, complex of hangar 6 (81-35): 16 by 16 units (X by Y), 4 high, colours 7 and 2. On entry Benson shows canned message 9, HANGER. The lift (key E, $B3F6) at square 81-35 ($B4B6/$B4BE entry 6) brings the player here, to 8,8 ($A2EB). Doors: 0: $77/0 @7,0 cross; 1: $39/0 @12,16; 2: $33/0 @4,16; 3: $72/0 @4,0 cross."
  },
  {
   "address": 12444,
   "type": "line",
   "text": "Room $07, complex of hangar 7 (136-136): 16 by 16 units (X by Y), 4 high, colours 12 and 0. On entry Benson shows canned message 9, HANGER. The lift (key E, $B3F6) at square 136-136 ($B4B6/$B4BE entry 7) brings the player here, to 8,8 ($A2EB). Doors: 0: $8E/1 @10,16. At the hand-over $2940 puts object $03 here."
  },
  {
   "address": 12454,
   "type": "line",
   "text": "Room $08, Colony Craft top floor, with hangar 8: 16 by 16 units (X by Y), 4 high, colours 6 and 14. On entry Benson shows canned message 9, HANGER. The lift (key E, $B3F6) at square 08-08 ($B4B6/$B4BE entry 8) brings the player here, to 8,8 ($A2EB). Leaving by it sets $FA to $FF ($B45F). Its other three doors need key $17; the floors below hold the Palyar rooms, and room $AB leads out beside object $3F, the model hung above 08-08. Doors: 0: $91/1 @0,7 X locked, key $17; 1: $94/1 @16,3 X locked, key $17; 2: $95/1 @16,11 X locked, key $17."
  },
  {
   "address": 12472,
   "type": "line",
   "text": "Room $09, complex of hangars 1 and 2 (09-06, 09-05): 8 by 5 units (X by Y), 2 high, colours 10 and 0. Doors: 0: $01/1 @3,0; 1: $48/0 @0,2 X. At the hand-over $2940 puts object $28 here."
  },
  {
   "address": 12486,
   "type": "line",
   "text": "Room $0A, complex of hangars 1 and 2 (09-06, 09-05): 12 by 12 units (X by Y), 3 high, colours 4 and 0. Doors: 0: $1E/2 @0,7 X; 1: $27/0 @12,2 X; 2: $1A/0 @12,9 X locked, key $12; 3: $17/0 @1,12 locked, key $12."
  },
  {
   "address": 12508,
   "type": "line",
   "text": "Room $0B, complex of hangars 1 and 2 (09-06, 09-05): 4 by 6 units (X by Y), 2 high, colours 14 and 3. Doors: 0: $3B/1 @4,3 X; 1: $53/2 @0,3 X."
  },
  {
   "address": 12522,
   "type": "line",
   "text": "Room $0C, complex of hangars 1 and 2 (09-06, 09-05): 8 by 5 units (X by Y), 2 high, colours 14 and 6. Doors: 0: $7E/0 @3,0 cross; 1: $2B/1 @4,5; 2: $2C/0 @8,2 X. At the hand-over $2940 puts object $29 here."
  },
  {
   "address": 12540,
   "type": "line",
   "text": "Room $0D, complex of hangars 1 and 2 (09-06, 09-05): 5 by 8 units (X by Y), 3 high, colours 7 and 2. Dark (list ends in $80): unless object $10, the PHOTON EMITTER, is carried or in the room, $C2, $C4 and $C5 (background and both colours) become 0 and $F7 becomes 1 (message 1, ITS VERY DARK IN HERE). Doors: 0: $2E/2 @3,0; 1: $38/1 @3,8."
  },
  {
   "address": 12554,
   "type": "line",
   "text": "Room $0E, complex of hangars 1 and 2 (09-06, 09-05): 2 by 4 units (X by Y), 2 high, colours 7 and 2. Dark (list ends in $80): unless object $10, the PHOTON EMITTER, is carried or in the room, $C2, $C4 and $C5 (background and both colours) become 0 and $F7 becomes 1 (message 1, ITS VERY DARK IN HERE). Doors: 0: $40/1 @0,4 locked, key $13; 1: $21/6 @0,0."
  },
  {
   "address": 12568,
   "type": "line",
   "text": "Room $0F, complex of hangars 1 and 2 (09-06, 09-05): 6 by 7 units (X by Y), 2 high, colours 12 and 0. Doors: 0: $54/2 @3,0. At the hand-over $2940 puts object $2C here."
  },
  {
   "address": 12578,
   "type": "line",
   "text": "Room $10, complex of hangars 1 and 2 (09-06, 09-05): 4 by 8 units (X by Y), 3 high, colours 11 and 15. On entry starts script 2 (its first line is message 8, COMMUNICATION ROOM, then NOT WORKING or the Hertz offer). Doors: 0: $53/1 @0,6 X. At the hand-over $2940 puts object $34 here."
  },
  {
   "address": 12588,
   "type": "line",
   "text": "Room $11, complex of hangars 1 and 2 (09-06, 09-05): 7 by 8 units (X by Y), 3 high, colours 11 and 15. Dark (list ends in $80): unless object $10, the PHOTON EMITTER, is carried or in the room, $C2, $C4 and $C5 (background and both colours) become 0 and $F7 becomes 1 (message 1, ITS VERY DARK IN HERE). Doors: 0: $18/1 @3,8; 1: $63/5 @0,4 X; 2: $64/0 @3,0. At the hand-over $2940 puts object $1B here."
  },
  {
   "address": 12606,
   "type": "line",
   "text": "Room $12, complex of hangar 3 (03-00): 8 by 8 units (X by Y), 3 high, colours 15 and 0. On entry starts script 25 (MECHANOID LABORATORY). Doors: 0: $31/1 @4,0; 1: $20/0 @4,8."
  },
  {
   "address": 12620,
   "type": "line",
   "text": "Room $13, complex of hangars 1 and 2 (09-06, 09-05): 32 by 1 units (X by Y), 1 high, colours 15 and 6. Doors: 0: $4E/1 @0,0 X; 1: $1E/0 @32,0 X."
  },
  {
   "address": 12634,
   "type": "line",
   "text": "Room $14, complex of hangars 1 and 2 (09-06, 09-05): 23 by 1 units (X by Y), 1 high, colours 3 and 0. Doors: 0: $72/0 @16,0 cross; 1: $2C/1 @0,0 X; 2: $5B/1 @6,0; 3: $27/1 @23,0 X."
  },
  {
   "address": 12656,
   "type": "line",
   "text": "Room $15, complex of hangar 3 (03-00): 28 by 1 units (X by Y), 1 high, colours 14 and 3. Doors: 0: $76/0 @14,0 diagonal; 1: $03/4 @3,1; 2: $67/2 @28,0 X."
  },
  {
   "address": 12674,
   "type": "line",
   "text": "Room $16, complex of hangar 4 (11-13): 1 by 31 units (X by Y), 1 high, colours 7 and 0. Doors: 0: $04/6 @0,31; 1: $24/1 @0,0."
  },
  {
   "address": 12688,
   "type": "line",
   "text": "Room $17, complex of hangars 1 and 2 (09-06, 09-05): 4 by 8 units (X by Y), 2 high, colours 15 and 2. Doors: 0: $0A/3 @1,0 locked, key $12; 1: $5A/0 @4,6 X."
  },
  {
   "address": 12702,
   "type": "line",
   "text": "Room $18, complex of hangars 1 and 2 (09-06, 09-05): 7 by 4 units (X by Y), 2 high, colours 7 and 2. Doors: 0: $63/4 @0,2 X; 1: $11/0 @3,0; 2: $35/1 @3,4."
  },
  {
   "address": 12720,
   "type": "line",
   "text": "Room $19, complex of hangars 1 and 2 (09-06, 09-05): 1 by 21 units (X by Y), 1 high, colours 10 and 2. Doors: 0: $57/1 @1,20 X; 1: $48/1 @1,18 X; 2: $54/0 @0,0."
  },
  {
   "address": 12738,
   "type": "line",
   "text": "Room $1A, complex of hangars 1 and 2 (09-06, 09-05): 1 by 10 units (X by Y), 1 high, colours 2 and 7. Doors: 0: $0A/2 @0,3 X locked, key $12; 1: $5A/1 @0,10; 2: $44/0 @0,8 X."
  },
  {
   "address": 12756,
   "type": "line",
   "text": "Room $1B, complex of hangar 4 (11-13): 4 by 7 units (X by Y), 2 high, colours 13 and 5. Doors: 0: $25/0 @1,0; 1: $47/0 @0,6 X; 2: $04/3 @0,2 X."
  },
  {
   "address": 12774,
   "type": "line",
   "text": "Room $1C, complex of hangars 1 and 2 (09-06, 09-05): 6 by 4 units (X by Y), 2 high, colours 2 and 7. Doors: 0: $55/3 @6,2 X; 1: $56/2 @2,4."
  },
  {
   "address": 12788,
   "type": "line",
   "text": "Room $1D, complex of hangars 1 and 2 (09-06, 09-05): 8 by 4 units (X by Y), 2 high, colours 8 and 7. Dark (list ends in $80): unless object $10, the PHOTON EMITTER, is carried or in the room, $C2, $C4 and $C5 (background and both colours) become 0 and $F7 becomes 1 (message 1, ITS VERY DARK IN HERE). Doors: 0: $45/1 @4,4; 1: $38/0 @4,0."
  },
  {
   "address": 12802,
   "type": "line",
   "text": "Room $1E, complex of hangars 1 and 2 (09-06, 09-05): 4 by 31 units (X by Y), 3 high, colours 2 and 7. Doors: 0: $13/1 @0,30 X; 1: $3A/0 @4,1 X; 2: $0A/0 @4,10 X."
  },
  {
   "address": 12820,
   "type": "line",
   "text": "Room $1F, complex of hangars 1 and 2 (09-06, 09-05): 6 by 4 units (X by Y), 2 high, colours 7 and 2. Dark (list ends in $80): unless object $10, the PHOTON EMITTER, is carried or in the room, $C2, $C4 and $C5 (background and both colours) become 0 and $F7 becomes 1 (message 1, ITS VERY DARK IN HERE). Doors: 0: $99/3 @0,2 X; 1: $63/0 @6,2 X locked, key $13."
  },
  {
   "address": 12834,
   "type": "line",
   "text": "Room $20, complex of hangar 3 (03-00): 24 by 4 units (X by Y), 3 high, colours 3 and 0. Doors: 0: $12/1 @20,0; 1: $46/1 @12,0; 2: $4C/1 @4,0; 3: $66/2 @0,2 X; 4: $32/0 @24,2 X."
  },
  {
   "address": 12860,
   "type": "line",
   "text": "Room $21, complex of hangars 1 and 2 (09-06, 09-05): 18 by 4 units (X by Y), 3 high, colours 9 and 8. Doors: 0: $77/0 @16,0 cross; 1: $76/0 @13,0 diagonal; 2: $75/0 @10,0 cross; 3: $74/0 @7,0 cross; 4: $73/0 @4,0 cross; 5: $72/0 @1,0 cross; 6: $0E/1 @7,4 triangle; 7: $65/0 @0,2 X locked, key $11."
  },
  {
   "address": 12898,
   "type": "line",
   "text": "Room $22, complex of hangar 3 (03-00): 16 by 4 units (X by Y), 3 high, colours 6 and 14. On entry starts script 24 (MECHANOID ARMOURY). Doors: 0: $78/0 @13,0 diagonal; 1: $42/1 @4,4; 2: $67/1 @10,0."
  },
  {
   "address": 12916,
   "type": "line",
   "text": "Room $23, complex of hangars 1 and 2 (09-06, 09-05): 2 by 6 units (X by Y), 2 high, colours 12 and 0. Doors: 0: $5D/3 @2,2 X; 1: $60/0 @1,6; 2: $61/2 @1,0."
  },
  {
   "address": 12934,
   "type": "line",
   "text": "Room $24, complex of hangar 4 (11-13): 10 by 1 units (X by Y), 1 high, colours 9 and 7. Doors: 0: $78/0 @5,0 diagonal; 1: $16/1 @9,1; 2: $28/2 @0,1."
  },
  {
   "address": 12952,
   "type": "line",
   "text": "Room $25, complex of hangar 4 (11-13): 4 by 7 units (X by Y), 2 high, colours 3 and 0. Doors: 0: $1B/0 @1,7; 1: $04/2 @0,3 X; 2: $36/0 @1,0."
  },
  {
   "address": 12970,
   "type": "line",
   "text": "Room $26, complex of hangars 1 and 2 (09-06, 09-05): 2 by 6 units (X by Y), 2 high, colours 12 and 0. Doors: 0: $5F/2 @0,2 X; 1: $60/2 @0,6; 2: $61/1 @0,0."
  },
  {
   "address": 12988,
   "type": "line",
   "text": "Room $27, complex of hangars 1 and 2 (09-06, 09-05): 1 by 8 units (X by Y), 1 high, colours 2 and 7. Doors: 0: $0A/1 @0,6 X; 1: $14/3 @0,1 X."
  },
  {
   "address": 13002,
   "type": "line",
   "text": "Room $28, complex of hangar 4 (11-13): 1 by 51 units (X by Y), 1 high, colours 8 and 7. Doors: 0: $7D/0 @0,25 X cross; 1: $4F/1 @1,48 X; 2: $24/2 @0,0."
  },
  {
   "address": 13020,
   "type": "line",
   "text": "Room $29, complex of hangars 1 and 2 (09-06, 09-05): 4 by 4 units (X by Y), 2 high, colours 2 and 7. On entry starts script 28 (PALYAR BRIEFING ROOM). Doors: 0: $55/1 @0,2 X. At the hand-over $2940 puts objects $35, $36 here."
  },
  {
   "address": 13030,
   "type": "line",
   "text": "Room $2A, complex of hangars 1 and 2 (09-06, 09-05): 4 by 4 units (X by Y), 2 high, colours 15 and 6. On entry starts script 8 (BANK). Doors: 0: $55/2 @0,2 X."
  },
  {
   "address": 13040,
   "type": "line",
   "text": "Room $2B, complex of hangars 1 and 2 (09-06, 09-05): 6 by 3 units (X by Y), 1 high, colours 10 and 2. Doors: 0: $2C/2 @6,2 X; 1: $0C/1 @2,0."
  },
  {
   "address": 13054,
   "type": "line",
   "text": "Room $2C, complex of hangars 1 and 2 (09-06, 09-05): 1 by 12 units (X by Y), 1 high, colours 15 and 6. Doors: 0: $0C/2 @0,4 X; 1: $14/1 @1,4 X; 2: $2B/0 @0,9 X; 3: $59/1 @0,11 X."
  },
  {
   "address": 13076,
   "type": "line",
   "text": "Room $2D, complex of hangars 1 and 2 (09-06, 09-05): 4 by 6 units (X by Y), 2 high, colours 2 and 7. Doors: 0: $4D/1 @4,3 X; 1: $3B/0 @0,3 X."
  },
  {
   "address": 13090,
   "type": "line",
   "text": "Room $2E, complex of hangars 1 and 2 (09-06, 09-05): 14 by 4 units (X by Y), 2 high, colours 9 and 8. Doors: 0: $72/0 @6,0 cross; 1: $3E/0 @11,4 triangle; 2: $0D/0 @3,4 triangle."
  },
  {
   "address": 13108,
   "type": "line",
   "text": "Room $2F, complex of hangars 1 and 2 (09-06, 09-05): 7 by 4 units (X by Y), 2 high, colours 8 and 15. Dark (list ends in $80): unless object $10, the PHOTON EMITTER, is carried or in the room, $C2, $C4 and $C5 (background and both colours) become 0 and $F7 becomes 1 (message 1, ITS VERY DARK IN HERE). Doors: 0: $63/2 @0,2 X locked, key $14. At the hand-over $2940 puts object $1A here."
  },
  {
   "address": 13118,
   "type": "line",
   "text": "Room $30, complex of hangar 3 (03-00): 8 by 8 units (X by Y), 3 high, colours 8 and 7. On entry starts script 23 (MECHANOID STORES). Doors: 0: $03/0 @0,6 X; 1: $31/2 @4,8."
  },
  {
   "address": 13132,
   "type": "line",
   "text": "Room $31, complex of hangar 3 (03-00): 8 by 4 units (X by Y), 2 high, colours 9 and 8. Doors: 0: $03/1 @0,2 X; 1: $12/0 @4,4; 2: $30/1 @4,0."
  },
  {
   "address": 13150,
   "type": "line",
   "text": "Room $32, complex of hangar 3 (03-00): 8 by 4 units (X by Y), 2 high, colours 6 and 3. On entry starts script 22 (MECHANOID POWER ROOM). Doors: 0: $20/4 @0,2 X; 1: $42/0 @4,0. At the hand-over $2940 puts object $2A here."
  },
  {
   "address": 13164,
   "type": "line",
   "text": "Room $33, complex of hangar 6 (81-35): 8 by 4 units (X by Y), 2 high, colours 7 and 0. Doors: 0: $06/2 @4,0; 1: $7C/0 @3,4 cross. At the hand-over $2940 puts object $26 here."
  },
  {
   "address": 13178,
   "type": "line",
   "text": "Room $34, complex of hangars 1 and 2 (09-06, 09-05): 8 by 4 units (X by Y), 2 high, colours 7 and 2. Dark (list ends in $80): unless object $10, the PHOTON EMITTER, is carried or in the room, $C2, $C4 and $C5 (background and both colours) become 0 and $F7 becomes 1 (message 1, ITS VERY DARK IN HERE). Doors: 0: $99/4 @8,2 X. At the hand-over $2940 puts object $20 here."
  },
  {
   "address": 13188,
   "type": "line",
   "text": "Room $35, complex of hangars 1 and 2 (09-06, 09-05): 6 by 4 units (X by Y), 2 high, colours 8 and 0. Dark (list ends in $80): unless object $10, the PHOTON EMITTER, is carried or in the room, $C2, $C4 and $C5 (background and both colours) become 0 and $F7 becomes 1 (message 1, ITS VERY DARK IN HERE). Doors: 0: $63/3 @0,2 X; 1: $18/2 @2,0."
  },
  {
   "address": 13202,
   "type": "line",
   "text": "Room $36, complex of hangar 4 (11-13): 4 by 6 units (X by Y), 2 high, colours 5 and 0. Doors: 0: $25/2 @1,6; 1: $04/7 @0,2 X. At the hand-over $2940 puts object $06 here."
  },
  {
   "address": 13216,
   "type": "line",
   "text": "Room $37, complex of hangars 1 and 2 (09-06, 09-05): 8 by 7 units (X by Y), 3 high, colours 12 and 0. Doors: 0: $4B/1 @3,7; 1: $5C/0 @3,0."
  },
  {
   "address": 13230,
   "type": "line",
   "text": "Room $38, complex of hangars 1 and 2 (09-06, 09-05): 8 by 4 units (X by Y), 2 high, colours 12 and 0. Dark (list ends in $80): unless object $10, the PHOTON EMITTER, is carried or in the room, $C2, $C4 and $C5 (background and both colours) become 0 and $F7 becomes 1 (message 1, ITS VERY DARK IN HERE). Doors: 0: $1D/1 @4,4; 1: $0D/1 @6,0."
  },
  {
   "address": 13244,
   "type": "line",
   "text": "Room $39, complex of hangar 6 (81-35): 8 by 4 units (X by Y), 2 high, colours 15 and 0. Doors: 0: $06/1 @4,0. At the hand-over $2940 puts object $17 here."
  },
  {
   "address": 13254,
   "type": "line",
   "text": "Room $3A, complex of hangars 1 and 2 (09-06, 09-05): 6 by 3 units (X by Y), 1 high, colours 3 and 6. Doors: 0: $1E/1 @0,1 X. At the hand-over $2940 puts object $12 here."
  },
  {
   "address": 13264,
   "type": "line",
   "text": "Room $3B, complex of hangars 1 and 2 (09-06, 09-05): 4 by 6 units (X by Y), 2 high, colours 3 and 6. Doors: 0: $2D/1 @4,3 X; 1: $0B/0 @0,3 X."
  },
  {
   "address": 13278,
   "type": "line",
   "text": "Room $3C, complex of hangars 1 and 2 (09-06, 09-05): 8 by 4 units (X by Y), 2 high, colours 3 and 6. Doors: 0: $7B/0 @0,2 X cross; 1: $4A/2 @8,2 X locked, key $11."
  },
  {
   "address": 13292,
   "type": "line",
   "text": "Room $3D, complex of hangars 1 and 2 (09-06, 09-05): 10 by 4 units (X by Y), 2 high, colours 8 and 7. Doors: 0: $7A/0 @4,0 diagonal; 1: $72/0 @7,0 cross; 2: $5E/0 @5,4 locked, key $11."
  },
  {
   "address": 13310,
   "type": "line",
   "text": "Room $3E, complex of hangars 1 and 2 (09-06, 09-05): 4 by 4 units (X by Y), 2 high, colours 3 and 6. Dark (list ends in $80): unless object $10, the PHOTON EMITTER, is carried or in the room, $C2, $C4 and $C5 (background and both colours) become 0 and $F7 becomes 1 (message 1, ITS VERY DARK IN HERE). Doors: 0: $2E/1 @1,0; 1: $3F/0 @1,4. At the hand-over $2940 puts object $11 here."
  },
  {
   "address": 13324,
   "type": "line",
   "text": "Room $3F, complex of hangars 1 and 2 (09-06, 09-05): 4 by 4 units (X by Y), 2 high, colours 5 and 13. Dark (list ends in $80): unless object $10, the PHOTON EMITTER, is carried or in the room, $C2, $C4 and $C5 (background and both colours) become 0 and $F7 becomes 1 (message 1, ITS VERY DARK IN HERE). Doors: 0: $3E/1 @1,0; 1: $99/1 @4,2 X."
  },
  {
   "address": 13338,
   "type": "line",
   "text": "Room $40, complex of hangars 1 and 2 (09-06, 09-05): 7 by 6 units (X by Y), 3 high, colours 3 and 6. Dark (list ends in $80): unless object $10, the PHOTON EMITTER, is carried or in the room, $C2, $C4 and $C5 (background and both colours) become 0 and $F7 becomes 1 (message 1, ITS VERY DARK IN HERE). Doors: 0: $64/1 @3,6; 1: $0E/0 @3,0 locked, key $13."
  },
  {
   "address": 13352,
   "type": "line",
   "text": "Room $41, complex of hangar 5 (03-15): 8 by 4 units (X by Y), 2 high, colours 3 and 6. Doors: 0: $68/1 @1,4 locked, key $13; 1: $6C/2 @4,0 locked, key $11."
  },
  {
   "address": 13366,
   "type": "line",
   "text": "Room $42, complex of hangar 3 (03-00): 8 by 4 units (X by Y), 2 high, colours 3 and 6. Doors: 0: $32/1 @4,4; 1: $22/1 @4,0. At the hand-over $2940 puts object $14 here."
  },
  {
   "address": 13380,
   "type": "line",
   "text": "Room $43, complex of hangars 1 and 2 (09-06, 09-05): 7 by 7 units (X by Y), 2 high, colours 10 and 0. Doors: 0: $59/2 @3,7 locked, key $12; 1: $4D/0 @0,3 X. At the hand-over $2940 puts object $1C here."
  },
  {
   "address": 13394,
   "type": "line",
   "text": "Room $44, complex of hangars 1 and 2 (09-06, 09-05): 5 by 4 units (X by Y), 2 high, colours 4 and 0. Doors: 0: $1A/2 @5,2 X. At the hand-over $2940 puts object $22 here."
  },
  {
   "address": 13404,
   "type": "line",
   "text": "Room $45, complex of hangars 1 and 2 (09-06, 09-05): 8 by 4 units (X by Y), 2 high, colours 7 and 0. Dark (list ends in $80): unless object $10, the PHOTON EMITTER, is carried or in the room, $C2, $C4 and $C5 (background and both colours) become 0 and $F7 becomes 1 (message 1, ITS VERY DARK IN HERE). Doors: 0: $96/6 @0,2 X; 1: $1D/0 @4,0. At the hand-over $2940 puts object $1D here. Door 0 names arrival door 6 of room $96, which has four: $9148 reads the position from bytes 31-32 of $96 (inside room $97) and $939E clamps it into the room."
  },
  {
   "address": 13418,
   "type": "line",
   "text": "Room $46, complex of hangar 3 (03-00): 8 by 4 units (X by Y), 2 high, colours 14 and 6. On entry starts script 20 (MECHANOID FUEL STORES). Doors: 0: $03/2 @4,0; 1: $20/1 @4,4."
  },
  {
   "address": 13432,
   "type": "line",
   "text": "Room $47, complex of hangar 4 (11-13): 8 by 4 units (X by Y), 2 high, colours 3 and 0. Doors: 0: $1B/1 @8,2 X; 1: $4F/0 @0,2 X; 2: $04/4 @4,0. At the hand-over $2940 puts object $23 here."
  },
  {
   "address": 13450,
   "type": "line",
   "text": "Room $48, complex of hangars 1 and 2 (09-06, 09-05): 8 by 5 units (X by Y), 2 high, colours 15 and 2. Doors: 0: $09/1 @8,2 X; 1: $19/1 @0,3 X; 2: $57/2 @3,5. At the hand-over $2940 puts object $1F here."
  },
  {
   "address": 13468,
   "type": "line",
   "text": "Room $49, complex of hangar 5 (03-15): 4 by 8 units (X by Y), 2 high, colours 8 and 7. Dark (list ends in $80): unless object $10, the PHOTON EMITTER, is carried or in the room, $C2, $C4 and $C5 (background and both colours) become 0 and $F7 becomes 1 (message 1, ITS VERY DARK IN HERE). Doors: 0: $05/1 @0,4 X."
  },
  {
   "address": 13478,
   "type": "line",
   "text": "Room $4A, complex of hangars 1 and 2 (09-06, 09-05): 8 by 4 units (X by Y), 2 high, colours 15 and 0. Doors: 0: $7E/0 @3,0 cross; 1: $02/5 @8,2 X locked, key $11; 2: $3C/1 @0,2 X locked, key $11. At the hand-over $2940 puts object $10 here."
  },
  {
   "address": 13496,
   "type": "line",
   "text": "Room $4B, complex of hangars 1 and 2 (09-06, 09-05): 8 by 4 units (X by Y), 3 high, colours 7 and 0. Doors: 0: $02/6 @3,4 locked, key $11; 1: $37/0 @3,0."
  },
  {
   "address": 13510,
   "type": "line",
   "text": "Room $4C, complex of hangar 3 (03-00): 8 by 4 units (X by Y), 2 high, colours 7 and 0. Doors: 0: $03/3 @4,0; 1: $20/2 @4,4; 2: $66/1 @0,2 X."
  },
  {
   "address": 13528,
   "type": "line",
   "text": "Room $4D, complex of hangars 1 and 2 (09-06, 09-05): 4 by 6 units (X by Y), 2 high, colours 15 and 6. Doors: 0: $43/1 @4,3 X; 1: $2D/0 @0,3 X."
  },
  {
   "address": 13542,
   "type": "line",
   "text": "Room $4E, complex of hangars 1 and 2 (09-06, 09-05): 8 by 6 units (X by Y), 2 high, colours 2 and 7. Doors: 0: $56/1 @4,0; 1: $13/0 @8,5 X."
  },
  {
   "address": 13556,
   "type": "line",
   "text": "Room $4F, complex of hangar 4 (11-13): 8 by 4 units (X by Y), 2 high, colours 7 and 0. On entry starts script 8 (BANK). Doors: 0: $47/1 @8,2 X; 1: $28/1 @0,2 X; 2: $04/5 @4,0."
  },
  {
   "address": 13574,
   "type": "line",
   "text": "Room $50, complex of hangar 5 (03-15): 4 by 8 units (X by Y), 2 high, colours 8 and 7. Dark (list ends in $80): unless object $10, the PHOTON EMITTER, is carried or in the room, $C2, $C4 and $C5 (background and both colours) become 0 and $F7 becomes 1 (message 1, ITS VERY DARK IN HERE). Doors: 0: $05/0 @0,4 X. At the hand-over $2940 puts object $2E here."
  },
  {
   "address": 13584,
   "type": "line",
   "text": "Room $51, complex of hangars 1 and 2 (09-06, 09-05): 4 by 4 units (X by Y), 2 high, colours 7 and 2. On entry starts script 11 (PRISON / PLEASE LEAVE). Doors: 0: $62/1 @132,4 locked, key $11. Door 0 has X = $84 (132) in a room 4 wide: the door test at $9456 can never match it."
  },
  {
   "address": 13594,
   "type": "line",
   "text": "Room $52, complex of hangars 1 and 2 (09-06, 09-05): 5 by 4 units (X by Y), 3 high, colours 7 and 2. Dark (list ends in $80): unless object $10, the PHOTON EMITTER, is carried or in the room, $C2, $C4 and $C5 (background and both colours) become 0 and $F7 becomes 1 (message 1, ITS VERY DARK IN HERE). Doors: 0: $63/1 @0,0 locked, key $14. At the hand-over $2940 puts object $16 here."
  },
  {
   "address": 13600,
   "type": "line",
   "text": "Not a label of the game: the tracer decoded the data at $FFBF (RAM under the KERNAL) as BIT $3520 and named this byte. It is byte 6 of room $52 (door 0's destination, $63) and the rest of that record to $3523."
  },
  {
   "address": 13604,
   "type": "line",
   "text": "Room $53, complex of hangars 1 and 2 (09-06, 09-05): 1 by 14 units (X by Y), 1 high, colours 4 and 15. Doors: 0: $7D/0 @0,2 X cross; 1: $10/0 @1,6 X; 2: $0B/1 @1,11 X."
  },
  {
   "address": 13622,
   "type": "line",
   "text": "Room $54, complex of hangars 1 and 2 (09-06, 09-05): 16 by 1 units (X by Y), 1 high, colours 15 and 6. Doors: 0: $19/2 @14,1; 1: $55/0 @6,1; 2: $0F/0 @2,1."
  },
  {
   "address": 13640,
   "type": "line",
   "text": "Room $55, complex of hangars 1 and 2 (09-06, 09-05): 2 by 16 units (X by Y), 2 high, colours 3 and 0. Doors: 0: $54/1 @0,0; 1: $29/0 @2,10 X; 2: $2A/0 @2,14 X; 3: $1C/0 @0,14 X."
  },
  {
   "address": 13662,
   "type": "line",
   "text": "Room $56, complex of hangars 1 and 2 (09-06, 09-05): 8 by 2 units (X by Y), 2 high, colours 4 and 0. Doors: 0: $7F/0 @0,1 X diagonal; 1: $4E/0 @4,2; 2: $1C/1 @2,0."
  },
  {
   "address": 13680,
   "type": "line",
   "text": "Room $57, complex of hangars 1 and 2 (09-06, 09-05): 16 by 1 units (X by Y), 1 high, colours 3 and 6. Doors: 0: $58/1 @16,0 X; 1: $19/0 @0,0 X; 2: $48/2 @3,0."
  },
  {
   "address": 13698,
   "type": "line",
   "text": "Room $58, complex of hangars 1 and 2 (09-06, 09-05): 1 by 20 units (X by Y), 1 high, colours 10 and 0. Doors: 0: $01/0 @0,10 X; 1: $57/0 @0,19 X. At the hand-over $2940 puts object $30 here."
  },
  {
   "address": 13712,
   "type": "line",
   "text": "Room $59, complex of hangars 1 and 2 (09-06, 09-05): 14 by 1 units (X by Y), 1 high, colours 3 and 6. Doors: 0: $01/2 @3,1; 1: $2C/3 @14,0 X; 2: $43/0 @2,0 locked, key $12."
  },
  {
   "address": 13730,
   "type": "line",
   "text": "Room $5A, complex of hangars 1 and 2 (09-06, 09-05): 9 by 4 units (X by Y), 2 high, colours 4 and 15. Doors: 0: $17/1 @0,2 X; 1: $1A/1 @7,0."
  },
  {
   "address": 13744,
   "type": "line",
   "text": "Room $5B, complex of hangars 1 and 2 (09-06, 09-05): 1 by 120 units (X by Y), 1 high, colours 4 and 15. Doors: 0: $80/0 @0,60 X diagonal; 1: $14/2 @0,120; 2: $70/2 @0,0."
  },
  {
   "address": 13762,
   "type": "line",
   "text": "Room $5C, complex of hangars 1 and 2 (09-06, 09-05): 12 by 2 units (X by Y), 2 high, colours 7 and 2. Doors: 0: $37/1 @3,2; 1: $5F/1 @0,0 X; 2: $5D/1 @11,0."
  },
  {
   "address": 13780,
   "type": "line",
   "text": "Room $5D, complex of hangars 1 and 2 (09-06, 09-05): 2 by 10 units (X by Y), 2 high, colours 8 and 0. Doors: 0: $79/0 @2,4 X diagonal; 1: $5C/2 @1,10; 2: $5E/1 @1,0; 3: $23/0 @0,5 X."
  },
  {
   "address": 13802,
   "type": "line",
   "text": "Room $5E, complex of hangars 1 and 2 (09-06, 09-05): 10 by 2 units (X by Y), 2 high, colours 7 and 2. Doors: 0: $3D/2 @5,0 locked, key $11; 1: $5D/2 @9,2; 2: $5F/4 @0,0 X."
  },
  {
   "address": 13820,
   "type": "line",
   "text": "Room $5F, complex of hangars 1 and 2 (09-06, 09-05): 2 by 14 units (X by Y), 2 high, colours 8 and 0. Doors: 0: $7B/0 @0,10 X cross; 1: $5C/1 @2,13 X; 2: $26/0 @2,8 X; 3: $61/0 @2,2 X; 4: $5E/2 @2,0 X."
  },
  {
   "address": 13846,
   "type": "line",
   "text": "Room $60, complex of hangars 1 and 2 (09-06, 09-05): 8 by 2 units (X by Y), 2 high, colours 7 and 2. Doors: 0: $23/1 @7,0; 1: $62/0 @4,0; 2: $26/1 @0,0."
  },
  {
   "address": 13864,
   "type": "line",
   "text": "Room $61, complex of hangars 1 and 2 (09-06, 09-05): 8 by 2 units (X by Y), 2 high, colours 7 and 2. Doors: 0: $5F/3 @0,0 X; 1: $26/2 @0,2; 2: $23/2 @7,2."
  },
  {
   "address": 13882,
   "type": "line",
   "text": "Room $62, complex of hangars 1 and 2 (09-06, 09-05): 4 by 2 units (X by Y), 2 high, colours 8 and 0. Doors: 0: $60/1 @1,2; 1: $51/0 @1,0. At the hand-over $2940 puts objects $1E, $3B here."
  },
  {
   "address": 13896,
   "type": "line",
   "text": "Room $63, complex of hangars 1 and 2 (09-06, 09-05): 2 by 20 units (X by Y), 2 high, colours 9 and 8. Dark (list ends in $80): unless object $10, the PHOTON EMITTER, is carried or in the room, $C2, $C4 and $C5 (background and both colours) become 0 and $F7 becomes 1 (message 1, ITS VERY DARK IN HERE). Doors: 0: $1F/1 @0,14 X locked, key $13; 1: $52/0 @0,20 locked, key $14; 2: $2F/0 @2,18 X locked, key $14; 3: $35/0 @2,14 X; 4: $18/0 @2,10 X; 5: $11/1 @2,4 X."
  },
  {
   "address": 13926,
   "type": "line",
   "text": "Room $64, complex of hangars 1 and 2 (09-06, 09-05): 2 by 8 units (X by Y), 2 high, colours 9 and 15. Dark (list ends in $80): unless object $10, the PHOTON EMITTER, is carried or in the room, $C2, $C4 and $C5 (background and both colours) become 0 and $F7 becomes 1 (message 1, ITS VERY DARK IN HERE). Doors: 0: $11/2 @0,8; 1: $40/0 @0,0."
  },
  {
   "address": 13940,
   "type": "line",
   "text": "Room $65, complex of hangars 1 and 2 (09-06, 09-05): 8 by 1 units (X by Y), 1 high, colours 7 and 2. Doors: 0: $21/7 @8,0 X locked, key $11; 1: $99/2 @0,0 X."
  },
  {
   "address": 13954,
   "type": "line",
   "text": "Room $66, complex of hangar 3 (03-00): 4 by 8 units (X by Y), 2 high, colours 14 and 6. On entry starts script 13 (MECHANOID BRIEFING ROOM). Doors: 0: $7A/0 @1,0 diagonal; 1: $4C/2 @4,2 X; 2: $20/3 @4,6 X. At the hand-over $2940 puts object $0C here."
  },
  {
   "address": 13972,
   "type": "line",
   "text": "Room $67, complex of hangar 3 (03-00): 2 by 13 units (X by Y), 1 high, colours 3 and 0. Doors: 0: $79/0 @2,0 X diagonal; 1: $22/2 @0,13; 2: $15/2 @0,0 X."
  },
  {
   "address": 13990,
   "type": "line",
   "text": "Room $68, complex of hangar 5 (03-15): 16 by 4 units (X by Y), 2 high, colours 7 and 2. Doors: 0: $72/0 @7,0 cross; 1: $41/0 @13,0 locked, key $13; 2: $69/1 @1,0 locked, key $16."
  },
  {
   "address": 14008,
   "type": "line",
   "text": "Room $69, complex of hangar 5 (03-15): 8 by 4 units (X by Y), 2 high, colours 9 and 15. Doors: 0: $80/0 @0,2 X diagonal; 1: $68/2 @6,4 locked, key $16; 2: $6A/1 @4,0 locked, key $12."
  },
  {
   "address": 14026,
   "type": "line",
   "text": "Room $6A, complex of hangar 5 (03-15): 8 by 4 units (X by Y), 2 high, colours 7 and 2. Doors: 0: $82/0 @0,1 X cross; 1: $69/2 @3,4 locked, key $12; 2: $6B/0 @8,1 X locked, key $15."
  },
  {
   "address": 14044,
   "type": "line",
   "text": "Room $6B, complex of hangar 5 (03-15): 8 by 4 units (X by Y), 2 high, colours 8 and 15. Doors: 0: $6A/2 @0,1 X locked, key $15; 1: $6E/1 @4,0 locked, key $14; 2: $6C/1 @8,1 X locked, key $15."
  },
  {
   "address": 14062,
   "type": "line",
   "text": "Room $6C, complex of hangar 5 (03-15): 8 by 4 units (X by Y), 2 high, colours 7 and 2. Doors: 0: $81/0 @8,1 X diagonal; 1: $6B/2 @0,1 X locked, key $15; 2: $41/1 @4,4 locked, key $11; 3: $6D/1 @4,0 locked, key $16. At the hand-over $2940 puts object $2D here."
  },
  {
   "address": 14084,
   "type": "line",
   "text": "Room $6D, complex of hangar 5 (03-15): 8 by 4 units (X by Y), 2 high, colours 9 and 8. Doors: 0: $85/0 @8,1 X diagonal; 1: $6C/3 @4,4 locked, key $16. At the hand-over $2940 puts object $15 here."
  },
  {
   "address": 14098,
   "type": "line",
   "text": "Room $6E, complex of hangar 5 (03-15): 8 by 4 units (X by Y), 2 high, colours 9 and 8. Doors: 0: $83/0 @0,1 X diagonal; 1: $6B/1 @4,4 locked, key $14; 2: $6F/1 @4,0 locked, key $17."
  },
  {
   "address": 14116,
   "type": "line",
   "text": "Room $6F, complex of hangar 5 (03-15): 8 by 4 units (X by Y), 2 high, colours 8 and 7. Doors: 0: $05/2 @4,0; 1: $6E/2 @4,4 locked, key $17; 2: $84/0 @0,2 X diagonal. At the hand-over $2940 puts object $3A here."
  },
  {
   "address": 14134,
   "type": "line",
   "text": "Room $70, complex of hangars 1 and 2 (09-06, 09-05): 20 by 1 units (X by Y), 1 high, colours 9 and 8. Doors: 0: $74/0 @9,0 cross; 1: $72/0 @13,0 cross; 2: $5B/2 @19,1; 3: $71/1 @0,0."
  },
  {
   "address": 14156,
   "type": "line",
   "text": "Room $71, complex of hangars 1 and 2 (09-06, 09-05): 1 by 120 units (X by Y), 1 high, colours 11 and 15. Doors: 0: $81/0 @1,60 X diagonal; 1: $70/3 @0,120; 2: $02/4 @0,0."
  },
  {
   "address": 14174,
   "type": "line",
   "text": "Room $72: 3 by 3 units (X by Y), 1 high, colours 0 and 13. Transporter booth (byte 0 bit 7): bytes 10-25 are eight links; $910E picks one at random for door 0 on each entry: $14/0, $3D/1, $2E/0, $21/5, $70/1, $04/1, $06/3, $68/0. Reached from $04 door 1, $06 door 3, $14 door 0, $21 door 5, $2E door 0, $3D door 1, $68 door 0, $70 door 1. Bytes 5-6 are rewritten at run time. Doors: 0: $14/2 @1,3 cross."
  },
  {
   "address": 14200,
   "type": "line",
   "text": "Room $73: 3 by 3 units (X by Y), 1 high, colours 0 and 12. Transporter booth (byte 0 bit 7): bytes 10-13 link $21/4 and $04/0; on entry $9119 sets door 0 to the one the player did not come from. Reached from $04 door 0, $21 door 4. Bytes 5-6 are rewritten at run time. Doors: 0: $21/4 @1,3 cross."
  },
  {
   "address": 14214,
   "type": "line",
   "text": "Room $74: 3 by 3 units (X by Y), 1 high, colours 0 and 12. Transporter booth (byte 0 bit 7): bytes 10-13 link $21/3 and $70/0; on entry $9119 sets door 0 to the one the player did not come from. Reached from $21 door 3, $70 door 0. Bytes 5-6 are rewritten at run time. Doors: 0: $21/3 @1,3 cross."
  },
  {
   "address": 14228,
   "type": "line",
   "text": "Room $75: 3 by 3 units (X by Y), 1 high, colours 0 and 12. Transporter booth (byte 0 bit 7): bytes 10-13 link $02/0 and $21/2; on entry $9119 sets door 0 to the one the player did not come from. Reached from $02 door 0, $21 door 2. Bytes 5-6 are rewritten at run time. Doors: 0: $21/2 @1,3 cross."
  },
  {
   "address": 14242,
   "type": "line",
   "text": "Room $76: 3 by 3 units (X by Y), 1 high, colours 0 and 10. Transporter booth (byte 0 bit 7): both links in bytes 10-13 are $15/0, so door 0 always leads there, one way. Reached from $15 door 0, $21 door 1. Bytes 5-6 are rewritten at run time. Doors: 0: $15/0 @1,3 diagonal."
  },
  {
   "address": 14256,
   "type": "line",
   "text": "Room $77: 3 by 3 units (X by Y), 1 high, colours 0 and 12. Transporter booth (byte 0 bit 7): bytes 10-13 link $21/0 and $06/0; on entry $9119 sets door 0 to the one the player did not come from. Reached from $06 door 0, $21 door 0. Bytes 5-6 are rewritten at run time. Doors: 0: $21/0 @1,3 cross."
  },
  {
   "address": 14270,
   "type": "line",
   "text": "Room $78: 3 by 3 units (X by Y), 1 high, colours 0 and 10. Transporter booth (byte 0 bit 7): both links in bytes 10-13 are $22/0, so door 0 always leads there, one way. Reached from $22 door 0, $24 door 0. Bytes 5-6 are rewritten at run time. Doors: 0: $22/0 @1,3 diagonal."
  },
  {
   "address": 14284,
   "type": "line",
   "text": "Room $79: 3 by 3 units (X by Y), 1 high, colours 0 and 10. Transporter booth (byte 0 bit 7): both links in bytes 10-13 are $67/0, so door 0 always leads there, one way. Reached from $5D door 0, $67 door 0. Bytes 5-6 are rewritten at run time. Doors: 0: $67/0 @0,1 X diagonal."
  },
  {
   "address": 14298,
   "type": "line",
   "text": "Room $7A: 3 by 3 units (X by Y), 1 high, colours 0 and 10. Transporter booth (byte 0 bit 7): both links in bytes 10-13 are $66/0, so door 0 always leads there, one way. Reached from $3D door 0, $66 door 0. Bytes 5-6 are rewritten at run time. Doors: 0: $66/0 @1,3 diagonal."
  },
  {
   "address": 14312,
   "type": "line",
   "text": "Room $7B: 3 by 3 units (X by Y), 1 high, colours 0 and 12. Transporter booth (byte 0 bit 7): bytes 10-13 link $3C/0 and $5F/0; on entry $9119 sets door 0 to the one the player did not come from. Reached from $3C door 0, $5F door 0. Bytes 5-6 are rewritten at run time. Doors: 0: $5F/0 @3,1 X cross."
  },
  {
   "address": 14326,
   "type": "line",
   "text": "Room $7C: 3 by 3 units (X by Y), 1 high, colours 0 and 12. Transporter booth (byte 0 bit 7): bytes 10-13 link $99/0 and $33/1; on entry $9119 sets door 0 to the one the player did not come from. Reached from $33 door 1, $99 door 0. Bytes 5-6 are rewritten at run time. Doors: 0: $99/0 @1,0 cross."
  },
  {
   "address": 14340,
   "type": "line",
   "text": "Room $7D: 3 by 3 units (X by Y), 1 high, colours 0 and 12. Transporter booth (byte 0 bit 7): bytes 10-13 link $53/0 and $28/0; on entry $9119 sets door 0 to the one the player did not come from. Reached from $28 door 0, $53 door 0. Bytes 5-6 are rewritten at run time. Doors: 0: $53/0 @3,1 X cross."
  },
  {
   "address": 14354,
   "type": "line",
   "text": "Room $7E: 3 by 3 units (X by Y), 1 high, colours 0 and 12. Transporter booth (byte 0 bit 7): bytes 10-13 link $0C/0 and $4A/0; on entry $9119 sets door 0 to the one the player did not come from. Reached from $0C door 0, $4A door 0. Bytes 5-6 are rewritten at run time. Doors: 0: $0C/0 @1,3 cross."
  },
  {
   "address": 14368,
   "type": "line",
   "text": "Room $7F: 3 by 3 units (X by Y), 1 high, colours 0 and 7. Transporter booth (byte 0 bit 7): both links in bytes 10-13 are $56/0, so door 0 always leads there, one way. Reached from $56 door 0, $90 door 0. Bytes 5-6 are rewritten at run time. Entering this booth also calls $9353 ($9141). Doors: 0: $56/0 @3,1 X diagonal."
  },
  {
   "address": 14382,
   "type": "line",
   "text": "Room $80: 3 by 3 units (X by Y), 1 high, colours 0 and 10. Transporter booth (byte 0 bit 7): both links in bytes 10-13 are $5B/0, so door 0 always leads there, one way. Reached from $5B door 0, $69 door 0. Bytes 5-6 are rewritten at run time. Doors: 0: $5B/0 @3,1 X diagonal."
  },
  {
   "address": 14396,
   "type": "line",
   "text": "Room $81: 3 by 3 units (X by Y), 1 high, colours 0 and 10. Transporter booth (byte 0 bit 7): both links in bytes 10-13 are $71/0, so door 0 always leads there, one way. Reached from $6C door 0, $71 door 0. Bytes 5-6 are rewritten at run time. Doors: 0: $71/0 @0,1 X diagonal."
  },
  {
   "address": 14410,
   "type": "line",
   "text": "Room $82: 3 by 3 units (X by Y), 1 high, colours 0 and 12. Transporter booth (byte 0 bit 7): bytes 10-13 link $6A/0 and $8D/0; on entry $9119 sets door 0 to the one the player did not come from. Reached from $6A door 0, $8D door 0. Bytes 5-6 are rewritten at run time. Doors: 0: $6A/0 @3,1 X cross."
  },
  {
   "address": 14424,
   "type": "line",
   "text": "Room $83: 3 by 3 units (X by Y), 1 high, colours 0 and 10. Transporter booth (byte 0 bit 7): both links in bytes 10-13 are $8D/1, so door 0 always leads there, one way. Reached from $6E door 0, $8D door 1. Bytes 5-6 are rewritten at run time. Doors: 0: $8D/1 @3,1 X diagonal."
  },
  {
   "address": 14438,
   "type": "line",
   "text": "Room $84: 3 by 3 units (X by Y), 1 high, colours 0 and 10. Transporter booth (byte 0 bit 7): both links in bytes 10-13 are $8D/2, so door 0 always leads there, one way. Reached from $6F door 2, $8D door 2. Bytes 5-6 are rewritten at run time. Doors: 0: $8D/2 @3,1 X diagonal."
  },
  {
   "address": 14452,
   "type": "line",
   "text": "Room $85: 3 by 3 units (X by Y), 1 high, colours 0 and 10. Transporter booth (byte 0 bit 7): both links in bytes 10-13 are $AD/0, so door 0 always leads there, one way. Reached from $6D door 0, $AD door 0. Bytes 5-6 are rewritten at run time. Doors: 0: $AD/0 @0,1 X diagonal."
  },
  {
   "address": 14466,
   "type": "line",
   "text": "Room $86: 3 by 3 units (X by Y), 1 high, colours 0 and 14. Transporter booth (byte 0 bit 7): bytes 10-13 link $91/0 and $9C/0; on entry $9119 sets door 0 to the one the player did not come from. Reached from $91 door 0, $9C door 0. Bytes 5-6 are rewritten at run time. Doors: 0: $91/0 @1,0 cross."
  },
  {
   "address": 14480,
   "type": "line",
   "text": "Room $87: 3 by 3 units (X by Y), 1 high, colours 0 and 14. Transporter booth (byte 0 bit 7): bytes 10-13 link $9C/1 and $A9/0; on entry $9119 sets door 0 to the one the player did not come from. Reached from $9C door 1, $A9 door 0. Bytes 5-6 are rewritten at run time. Doors: 0: $9C/1 @1,3 cross."
  },
  {
   "address": 14494,
   "type": "line",
   "text": "Room $88, Colony Craft bottom floor, with the exit to room 0: 12 by 8 units (X by Y), 3 high, colours 10 and 2. On entry starts script 3 (ENGINE ROOM). Doors: 0: $AA/0 @6,0; 1: $AC/1 @0,1 X; 2: $AE/0 @0,7 X."
  },
  {
   "address": 14512,
   "type": "line",
   "text": "Room $89, complex of hangar 7 (136-136): 8 by 8 units (X by Y), 3 high, colours 15 and 0. Doors: 0: $8A/0 @4,8. At the hand-over $2940 puts object $19 here."
  },
  {
   "address": 14522,
   "type": "line",
   "text": "Room $8A, complex of hangar 7 (136-136): 8 by 8 units (X by Y), 3 high, colours 3 and 0. Doors: 0: $89/0 @4,0; 1: $8B/1 @4,8."
  },
  {
   "address": 14536,
   "type": "line",
   "text": "Room $8B, complex of hangar 7 (136-136): 8 by 9 units (X by Y), 3 high, colours 12 and 0. Doors: 0: $8C/1 @4,9; 1: $8A/1 @4,0."
  },
  {
   "address": 14550,
   "type": "line",
   "text": "Room $8C, complex of hangar 7 (136-136): 14 by 3 units (X by Y), 2 high, colours 3 and 0. Doors: 0: $8D/3 @12,0 locked, key $16; 1: $8B/0 @4,0."
  },
  {
   "address": 14564,
   "type": "line",
   "text": "Room $8D, complex of hangar 7 (136-136): 3 by 9 units (X by Y), 2 high, colours 11 and 15. Doors: 0: $82/0 @0,4 X cross; 1: $83/0 @0,7 X diagonal; 2: $84/0 @0,1 X diagonal; 3: $8C/0 @1,9 locked, key $16; 4: $8E/0 @3,3 X locked, key $15."
  },
  {
   "address": 14590,
   "type": "line",
   "text": "Room $8E, complex of hangar 7 (136-136): 10 by 12 units (X by Y), 4 high, colours 15 and 0. Doors: 0: $8D/4 @0,3 X locked, key $15; 1: $07/0 @5,0. At the hand-over $2940 puts object $2B here."
  },
  {
   "address": 14604,
   "type": "line",
   "text": "Room $8F, Colony Craft top floor, with hangar 8: 12 by 4 units (X by Y), 3 high, colours 3 and 0. Doors: 0: $90/1 @0,2 X; 1: $95/0 @9,0."
  },
  {
   "address": 14618,
   "type": "line",
   "text": "Room $90, Colony Craft top floor, with hangar 8: 5 by 4 units (X by Y), 3 high, colours 14 and 6. On entry starts script 17 (LABORATORY). Doors: 0: $7F/0 @0,1 X diagonal; 1: $8F/0 @5,2 X. At the hand-over $2940 puts object $39 here."
  },
  {
   "address": 14632,
   "type": "line",
   "text": "Room $91, Colony Craft top floor, with hangar 8: 4 by 16 units (X by Y), 3 high, colours 3 and 0. Doors: 0: $86/0 @1,16 down arrow; 1: $08/0 @4,7 X locked, key $17; 2: $92/0 @1,0."
  },
  {
   "address": 14650,
   "type": "line",
   "text": "Room $92, Colony Craft top floor, with hangar 8: 12 by 4 units (X by Y), 3 high, colours 14 and 6. On entry starts script 16 (ARMOURY). Doors: 0: $91/2 @1,4; 1: $93/0 @12,2 X."
  },
  {
   "address": 14664,
   "type": "line",
   "text": "Room $93, Colony Craft top floor, with hangar 8: 12 by 4 units (X by Y), 3 high, colours 3 and 0. On entry starts script 15 (STORES). Doors: 0: $92/1 @0,2 X; 1: $94/2 @9,4."
  },
  {
   "address": 14678,
   "type": "line",
   "text": "Room $94, Colony Craft top floor, with hangar 8: 4 by 8 units (X by Y), 3 high, colours 15 and 0. Doors: 0: $95/2 @1,8; 1: $08/1 @0,3 X locked, key $17; 2: $93/1 @1,0."
  },
  {
   "address": 14696,
   "type": "line",
   "text": "Room $95, Colony Craft top floor, with hangar 8: 4 by 8 units (X by Y), 3 high, colours 14 and 6. Doors: 0: $8F/1 @1,8; 1: $08/2 @0,3 X locked, key $17; 2: $94/0 @1,0."
  },
  {
   "address": 14714,
   "type": "line",
   "text": "Room $96, complex of hangars 1 and 2 (09-06, 09-05): 8 by 2 units (X by Y), 2 high, colours 8 and 7. Dark (list ends in $80): unless object $10, the PHOTON EMITTER, is carried or in the room, $C2, $C4 and $C5 (background and both colours) become 0 and $F7 becomes 1 (message 1, ITS VERY DARK IN HERE). Doors: 0: $02/1 @0,1 X; 1: $98/1 @1,0; 2: $97/1 @1,2; 3: $45/0 @8,0 X."
  },
  {
   "address": 14736,
   "type": "line",
   "text": "Room $97, complex of hangars 1 and 2 (09-06, 09-05): 8 by 3 units (X by Y), 2 high, colours 7 and 0. Doors: 0: $02/3 @0,1 X; 1: $96/2 @1,0 triangle."
  },
  {
   "address": 14750,
   "type": "line",
   "text": "Room $98, complex of hangars 1 and 2 (09-06, 09-05): 8 by 3 units (X by Y), 2 high, colours 7 and 0. Doors: 0: $02/2 @0,1 X; 1: $96/1 @1,3 triangle."
  },
  {
   "address": 14764,
   "type": "line",
   "text": "Room $99, complex of hangars 1 and 2 (09-06, 09-05): 2 by 36 units (X by Y), 2 high, colours 8 and 15. Doors: 0: $7C/0 @0,36 cross; 1: $3F/1 @0,2 X triangle; 2: $65/1 @2,2 X; 3: $1F/0 @2,34 X triangle; 4: $34/0 @0,34 X triangle."
  },
  {
   "address": 14790,
   "type": "line",
   "text": "Room $9A, Colony Craft middle floor: 4 by 14 units (X by Y), 3 high, colours 14 and 6. On entry starts script 19 (INTERVIEW ROOM). Doors: 0: $9D/0 @0,13 X."
  },
  {
   "address": 14800,
   "type": "line",
   "text": "Room $9B, Colony Craft middle floor: 16 by 12 units (X by Y), 3 high, colours 14 and 3. On entry starts script 4 (CONFERENCE ROOM). Doors: 0: $9D/5 @12,12; 1: $9D/4 @4,12; 2: $9C/2 @0,7 X. At the hand-over $2940 puts object $21 here."
  },
  {
   "address": 14818,
   "type": "line",
   "text": "Room $9C, Colony Craft middle floor: 4 by 16 units (X by Y), 3 high, colours 3 and 0. Doors: 0: $86/0 @1,16 up arrow; 1: $87/0 @1,0 down arrow; 2: $9B/2 @4,3 X; 3: $9D/3 @4,9 X; 4: $A1/3 @4,15 X."
  },
  {
   "address": 14844,
   "type": "line",
   "text": "Room $9D, Colony Craft middle floor: 16 by 2 units (X by Y), 2 high, colours 12 and 0. Doors: 0: $9A/0 @16,1 X; 1: $9F/0 @12,2; 2: $9E/0 @4,2; 3: $9C/3 @0,1 X; 4: $9B/1 @4,0; 5: $9B/0 @12,0."
  },
  {
   "address": 14874,
   "type": "line",
   "text": "Room $9E, Colony Craft middle floor: 8 by 4 units (X by Y), 3 high, colours 3 and 0. Doors: 0: $9D/2 @4,0; 1: $A1/4 @4,4."
  },
  {
   "address": 14888,
   "type": "line",
   "text": "Room $9F, Colony Craft middle floor: 8 by 4 units (X by Y), 3 high, colours 3 and 0. On entry starts script 29 (BANK). Doors: 0: $9D/1 @4,0; 1: $A1/5 @4,4."
  },
  {
   "address": 14902,
   "type": "line",
   "text": "Room $A0, Colony Craft middle floor: 4 by 10 units (X by Y), 3 high, colours 14 and 6. Doors: 0: $A1/0 @0,5 X."
  },
  {
   "address": 14912,
   "type": "line",
   "text": "Room $A1, Colony Craft middle floor: 16 by 2 units (X by Y), 2 high, colours 12 and 0. Doors: 0: $A0/0 @16,1 X; 1: $A2/0 @12,2; 2: $A3/0 @4,2; 3: $9C/4 @0,1 X; 4: $9E/1 @4,0; 5: $9F/1 @12,0."
  },
  {
   "address": 14942,
   "type": "line",
   "text": "Room $A2, Colony Craft middle floor: 8 by 4 units (X by Y), 3 high, colours 3 and 0. On entry starts script 5 (EXCHEQUER). Doors: 0: $A1/1 @4,0. At the hand-over $2940 puts object $25 here."
  },
  {
   "address": 14952,
   "type": "line",
   "text": "Room $A3, Colony Craft middle floor: 8 by 4 units (X by Y), 3 high, colours 3 and 0. On entry starts script 6 (KITCHEN). Doors: 0: $A1/2 @4,0. At the hand-over $2940 puts objects $24, $2F here."
  },
  {
   "address": 14962,
   "type": "line",
   "text": "Room $A4, Colony Craft bottom floor, with the exit to room 0: 4 by 4 units (X by Y), 2 high, colours 6 and 14. Doors: 0: $A9/1 @1,4. At the hand-over $2940 puts object $13 here."
  },
  {
   "address": 14972,
   "type": "line",
   "text": "Room $A5, Colony Craft bottom floor, with the exit to room 0: 4 by 4 units (X by Y), 2 high, colours 6 and 14. On entry starts script 9 (INFIRMARY). Doors: 0: $A9/2 @1,4. At the hand-over $2940 puts object $37 here."
  },
  {
   "address": 14982,
   "type": "line",
   "text": "Room $A6, Colony Craft bottom floor, with the exit to room 0: 4 by 4 units (X by Y), 2 high, colours 6 and 14. Doors: 0: $A9/3 @1,4. At the hand-over $2940 puts object $18 here."
  },
  {
   "address": 14992,
   "type": "line",
   "text": "Room $A7, Colony Craft bottom floor, with the exit to room 0: 4 by 4 units (X by Y), 2 high, colours 6 and 14. Doors: 0: $A9/4 @1,4."
  },
  {
   "address": 15002,
   "type": "line",
   "text": "Room $A8, Colony Craft bottom floor, with the exit to room 0: 4 by 4 units (X by Y), 2 high, colours 6 and 14. On entry Benson shows canned message 15, THE PALYAR COMMANDER'S BROTHER-IN-LAWS ROOM. Doors: 0: $A9/5 @1,4. At the hand-over $2940 puts objects $27, $31, $33 here."
  },
  {
   "address": 15012,
   "type": "line",
   "text": "Room $A9, Colony Craft bottom floor, with the exit to room 0: 24 by 4 units (X by Y), 3 high, colours 3 and 0. Doors: 0: $87/0 @1,0 up arrow; 1: $A4/0 @21,0; 2: $A5/0 @17,0; 3: $A6/0 @13,0; 4: $A7/0 @9,0; 5: $A8/0 @5,0; 6: $AB/2 @1,4."
  },
  {
   "address": 15046,
   "type": "line",
   "text": "Room $AA, Colony Craft bottom floor, with the exit to room 0: 20 by 12 units (X by Y), 3 high, colours 6 and 3. On entry starts script 18 (CONTROL ROOM). Doors: 0: $88/0 @14,12; 1: $AC/2 @4,12; 2: $AB/0 @0,5 X."
  },
  {
   "address": 15064,
   "type": "line",
   "text": "Room $AB, Colony Craft bottom floor, with the exit to room 0: 4 by 16 units (X by Y), 3 high, colours 15 and 0. Doors: 0: $AA/2 @4,5 X; 1: $AC/0 @4,14 X; 2: $A9/6 @1,0; 3: $00/0 @0,6 X. At the hand-over $2940 puts object $3C here. Door 3 leads to room 0: $90BE then puts the player outside at the position in $90ED, height $40:F8:80 beside the model of object $3F."
  },
  {
   "address": 15086,
   "type": "line",
   "text": "Room $AC, Colony Craft bottom floor, with the exit to room 0: 8 by 4 units (X by Y), 3 high, colours 6 and 0. Doors: 0: $AB/1 @0,2 X; 1: $88/1 @8,2 X; 2: $AA/1 @4,0; 3: $AD/2 @2,4."
  },
  {
   "address": 15108,
   "type": "line",
   "text": "Room $AD, Colony Craft bottom floor, with the exit to room 0: 9 by 4 units (X by Y), 3 high, colours 3 and 0. On entry starts script 14 (POWER ROOM). Doors: 0: $85/0 @9,1 X diagonal; 1: $AE/1 @9,3 X; 2: $AC/3 @6,0."
  },
  {
   "address": 15126,
   "type": "line",
   "text": "Room $AE, Colony Craft bottom floor, with the exit to room 0: 3 by 1 units (X by Y), 1 high, colours 6 and 14. Doors: 0: $88/2 @3,0 X; 1: $AD/1 @0,0 X. The last record; the spare 0 at $3B24 follows it."
  },
  {
   "address": 15141,
   "type": "line",
   "text": "Object models, 23 of them to $3FFE (pointers split at $2800/$2840). Format, read at $97AB-$97F9 and $A61F: byte 0 = the last vertex number n; n+1 vertices of three signed bytes, X, height, Y, offsets from the object's position in steps of 16 units (the code adds (byte XOR $80) x 16 to the position less $0800, $978A and $A635); then an edge count e: below $80, e+1 edges of one byte, from-vertex in the high nibble and to-vertex in the low one; from $80, (e AND $7F)+1 edges of two bytes, from and to. Objects $00-$0F have their vertices rotated first ($A6AD). Sizes in these comments are in model units of 16. This one: a delta 32 wide and 63 long with a fin 12 high, 6 vertices, 10 edges; objects $00, $01, $09, $0B, $0D. Object $01 stands at 08-08, where script 0 offers a DOMINION DART for sale; object $00 is 32769 units up over square 00-08."
  },
  {
   "address": 15171,
   "type": "line",
   "text": "Object $02's model: a car-like body 16 wide and 32 long, two side outlines of 8 vertices (a cab 12 high over the back, a bonnet 4 high in front) joined by 8 cross edges; 16 vertices, 24 edges. Object $02 stands at 12-13, the square $2B00 names JORDAN AIRPORT."
  },
  {
   "address": 15245,
   "type": "line",
   "text": "Object $03's model: a winged craft, fuselage 48 long, wings 60 across at height 4, a fin to 20, three short legs; 16 vertices, 13 edges. Object $03 is in room 7, the hangar whose lift is at 136-136."
  },
  {
   "address": 15308,
   "type": "line",
   "text": "Model of objects $04 and $0F: a diamond, two hexagonal pyramids base to base, 40 across at height 7, points at 0 and 16; 8 vertices, 18 edges. Object $04 is in room 3, the hangar at 03-00."
  },
  {
   "address": 15352,
   "type": "line",
   "text": "Object $06's model (canned message 6 reads CHEESE): a wedge, a triangular prism 24 wide, 32 long and 10 high; 6 vertices, 9 edges. Object $06 is in room $36."
  },
  {
   "address": 15381,
   "type": "line",
   "text": "Object $07's model: a rocket, three legs from a triangle 32 across on the ground to a body tapering to a point 52 high; 16 vertices, 21 edges. Object $07 is in room 5, the dark hangar whose lift at 03-15 needs the PASS."
  },
  {
   "address": 15452,
   "type": "line",
   "text": "Model of objects $08 and $0E: a cube 16 on a side, centred on the position (heights -8 to 8); 8 vertices, 12 edges. Object $08 sits at 03-15, 92 units below the ground."
  },
  {
   "address": 15490,
   "type": "line",
   "text": "Object $10's model, the PHOTON EMITTER (canned message 16; it lights dark rooms, $91F2): a three-sided pyramid 8 across from height 7 to 14 on a thin stand; 10 vertices, 15 edges."
  },
  {
   "address": 15537,
   "type": "line",
   "text": "Object $11's model, the key of door outline 9: a flat triangle 10 wide and 12 high, 2 thick; 6 vertices, 9 edges. Carried (bit 7 of $29D1) it opens outline-9 doors ($949C)."
  },
  {
   "address": 15566,
   "type": "line",
   "text": "Object $12's model, the key of outline 10: a flat trapezoid 8 across at the foot, 4 at the top, 12 high, 2 thick; 8 vertices, 12 edges."
  },
  {
   "address": 15604,
   "type": "line",
   "text": "Object $13's model, the key of outline 11: a flat pentagon 12 wide and 12 high, 2 thick; 10 vertices, 15 edges."
  },
  {
   "address": 15649,
   "type": "line",
   "text": "Not a label of the game: the tracer decoded the data at $FF81 (RAM under the KERNAL) as AND $3D21,X. These are the last two edge bytes, $38 and $49, of model_key_pentagon."
  },
  {
   "address": 15651,
   "type": "line",
   "text": "Object $14's model, the key of outline 12: a flat house shape 6 wide, sides 10 high, apex at 12, 2 thick; 10 vertices, 15 edges."
  },
  {
   "address": 15698,
   "type": "line",
   "text": "Object $15's model, the key of outline 13: a flat trapezoid 4 across at the foot and 8 at the top, 12 high, 2 thick; 8 vertices, 12 edges."
  },
  {
   "address": 15736,
   "type": "line",
   "text": "Object $16's model, the key of outline 14: a flat hexagon 8 wide and 12 high, 2 thick; 12 vertices, 18 edges."
  },
  {
   "address": 15792,
   "type": "line",
   "text": "Object $17's model, the key of outline 15 (room 8's three doors among others): a flat shape 6 wide, straight sides to 8, bevelled to a top 2 wide at 12, 2 thick; 12 vertices, 18 edges."
  },
  {
   "address": 15848,
   "type": "line",
   "text": "Object $18's model, the ANTI TIME BOMB (canned message 24): the Photon Emitter's layout with a flat top, a three-sided pyramid 8 across from height 7 to 9 on a thin stand; 10 vertices, 15 edges."
  },
  {
   "address": 15895,
   "type": "line",
   "text": "Object $23's model, the USEFUL ARMAMENT (canned message 35): a flat gun outline, barrel 14 long at heights 7-9 and a grip down to the ground, 2 thick; 16 vertices, 24 edges."
  },
  {
   "address": 15969,
   "type": "line",
   "text": "Object $35's model: a table, a top 20 by 32 at height 6 on four legs; 12 vertices, 8 edges. Object $35 is in room $29, the Palyar briefing room."
  },
  {
   "address": 16015,
   "type": "line",
   "text": "Object $36's model: a chair, a seat 4 by 4 at height 4 and a back to 7; 12 vertices, 10 edges. Object $36 is in room $29 with the table."
  },
  {
   "address": 16063,
   "type": "line",
   "text": "Object $37's model: a bed, a frame 20 by 10 with rails at heights 2 and 4 and a head board to 8; 14 vertices, 13 edges. Object $37 is in room $A5, the infirmary."
  },
  {
   "address": 16120,
   "type": "line",
   "text": "Model of objects $39 and $3C: a flat sign, an octagon head with two eye strokes and a mouth over a cross, a skull and crossbones; 18 vertices, 13 edges in byte pairs (count $8C). Object $39 sits on door 0 of room $90 (to booth $7F), object $3C on door 3 of room $AB (to room 0)."
  },
  {
   "address": 16159,
   "type": "line",
   "text": "Not a label of the game: the tracer decoded the data at $FFCC (RAM under the KERNAL) as a JSR to here. These bytes, to $3F49, are the last byte of vertex 12, vertices 13-17, the edge count $8C and the 13 edge pairs of model_skull_sign."
  },
  {
   "address": 16202,
   "type": "line",
   "text": "Model of objects $3D and $3E: a square cage 64 across (1024 world units), four posts and rails at heights 6, 12 and 18 that leave one side open; 16 vertices, 17 edges. Objects $3D and $3E stand at 81-35 and 136-136, the lift squares of hangars 6 and 7, at mid position $72:00 where the E test ($B40C) looks."
  },
  {
   "address": 16269,
   "type": "line",
   "text": "Object $3F's model: a box 255 square and 64 high (4080 by 1024 world units, 1/16 of a square across), a small rectangle at the foot of one side, a path of lines on the top face; 22 vertices, 23 edges in byte pairs (count $96). Object $3F hangs 64.99 squares up ($40:FC:C0) above 08-08: the Colony Craft of features.md. The model ends at $3FFE."
  },
  {
   "address": 16383,
   "type": "line",
   "text": "Spare byte (0) after model_colony_craft, the last byte of the range. The name comes from STA $3FFF,X at $B1A1, whose X runs from $F8 down to 1: it clears $4000-$40F7 of the bitmap and never writes here."
  },
  {
   "address": 20480,
   "type": "line",
   "text": "Hand-over: the first game code after the two unpacking stages (the run-length stage jumps here with $01 = $37); the original Novagen disk has the same bytes, so it is Novagen's, not the packer's. It copies $4000-$4FFF to $E000-$EFFF and $6000-$6FFF to $F000-$FFFF (into the RAM under the KERNAL), sixteen pages each, by stepping its own operand high bytes $5004, $5007, $500A and $500D until the last wraps to $00; the listing shows them at their final values ($5000, $F000, $7000, $0000). Then SETMSG ($FF90) with A = $C0, and the KERNAL's PAL flag $02A6 (1 PAL, 0 NTSC): PAL jumps to the start-up $7200. On NTSC it branches back to $5000 without resetting the operands, so the second pass copies $7000-$70FF over zero page and the processor port, runs 256 pages and overwrites this code with $C000's bytes at the $50th: a crash, not a clean endless loop (read from the code, not run). Bitmap A covers all of this once play draws."
  },
  {
   "address": 20484,
   "type": "line",
   "text": "Operand high byte of LDA $4000,X: the first block's source page, $40 to $4F, stepped by INC $5004 at $5011 (reads $50 after the copy)."
  },
  {
   "address": 20487,
   "type": "line",
   "text": "Operand high byte of STA $E000,X: the first block's destination page, $E0 to $EF (reads $F0 after the copy)."
  },
  {
   "address": 20490,
   "type": "line",
   "text": "Operand high byte of LDA $6000,X: the second block's source page, $60 to $6F (reads $70 after the copy)."
  },
  {
   "address": 20493,
   "type": "line",
   "text": "Operand high byte of STA $F000,X: the second block's destination page, $F0 to $FF; its wrap to $00 ends the copy (BNE at $501D). Then SETMSG, the PAL test at $5024 and JMP $7200."
  },
  {
   "address": 20524,
   "type": "line",
   "text": "A second JMP $7200 straight after the real one at $5029. Nothing reaches it: no branch or jump, and the address appears nowhere in memory as a pointer. A leftover of whoever assembled the hand-over."
  },
  {
   "address": 20527,
   "type": "line",
   "text": "The end of the view's first bitmap. Bitmap A is $4000-$553F: 17 character rows of 320 bytes, 160 by 136 multicolour pixels, rows 12 (from column 32) to 16 lying here. At the hand-over: one stray byte $44 at $502F, then $AA filler (this crack; the original disk has other loader leftovers at $5100-$52FF). The clear at $B1A1 (bases $5077 to $5447) and the drawing overwrite it; $AA is pattern %10 in every pixel, the ground colour, which is what the play snapshot shows here."
  },
  {
   "address": 20599,
   "type": "line",
   "text": "Base of STA $5077,X in the bitmap-A clear at $B1A1 (X = 248 down to 1): the 18th of its 22 248-byte stretches, the one here, $5078-$516F; $AA filler at the hand-over."
  },
  {
   "address": 20847,
   "type": "line",
   "text": "Base of STA $516F,X in the bitmap-A clear at $B1A1 (X = 248 down to 1): the 19th of its 22 248-byte stretches, the one here, $5170-$5267; $AA filler at the hand-over."
  },
  {
   "address": 21095,
   "type": "line",
   "text": "Base of STA $5267,X in the bitmap-A clear at $B1A1 (X = 248 down to 1): the 20th of its 22 248-byte stretches, the one here, $5268-$535F; $AA filler at the hand-over."
  },
  {
   "address": 21343,
   "type": "line",
   "text": "Base of STA $535F,X in the bitmap-A clear at $B1A1 (X = 248 down to 1): the 21st of its 22 248-byte stretches, the one here, $5360-$5457; $AA filler at the hand-over."
  },
  {
   "address": 21575,
   "type": "line",
   "text": "Base of STA $5447,X in the bitmap-A clear at $B1A1 (X = 248 down to 1): the 22nd and last (it overlaps the 21st by 16 bytes) of its 22 248-byte stretches, the one here, $5448-$553F; $AA filler at the hand-over."
  },
  {
   "address": 21704,
   "type": "line",
   "text": "Base of LDA $54C8,X at $B134 and $B18A: with X = $78 + row (rows 0-135) it reads the row high-byte table $5540, 120 bytes on. The bytes here are bitmap A's last character row (row 16, from column 25), filler at the hand-over."
  },
  {
   "address": 21824,
   "type": "line",
   "text": "Row address table, high bytes: for pixel row y of the 160 by 136 view (y = 0-135), the high byte of 320 * (y div 8) + (y mod 8), the offset of the row's first byte from the bitmap's start ($00-$14). Built by $72A2 at start-up (the hand-over holds $AA filler; $55C8-$55CF stay unused). The drawing code adds the bitmap: ADC $25 or ORA $25 ($40 or $60, the buffer being drawn), ADC or ORA #$40 in the opening, with the carry of ASL for columns 128-159. Read by the octant line routines ($AC68 and the seven like it), the star plotter ($7335, $735A), the planet ($754F, $7566), $AAB7, $AADC, $ADDD, and through the base $54C8 by $B134/$B18A."
  },
  {
   "address": 21848,
   "type": "line",
   "text": "Rows 24-87 of the high-byte table. The address is also a base: LDA $5558,X at $B12F and $B185, with X = $78 + row, reads the low-byte table at $55D0."
  },
  {
   "address": 21968,
   "type": "line",
   "text": "Row address table, low bytes, for rows 0-135 ($55D0-$5657): (y mod 8) + the low byte of 320 * (y div 8), so eight rows one apart, then a jump of $140 to the next character row. Built with $5540 by $72A2; $5658-$565F unused. Read wherever $5540 is, and through the base $5558 by $B12F/$B185."
  },
  {
   "address": 22112,
   "type": "line",
   "text": "Pixel masks for colour %01, one per multicolour column x (0-159): $40, $10, $04, $01 for x mod 4 = 0-3 ($BC48 AND $55, built at $72DE; loader leftovers at the hand-over). ORA $5660,X sets the pixel to the screen matrix's high-nibble colour: the stars (grey on black) at $7366 and $AAE8, and the lines while $AE02 sets the eight octant routines to ORA $5660,X. $ADFC switches them to AND $7760,X, the background colour, instead."
  },
  {
   "address": 22248,
   "type": "line",
   "text": "Entries 136-159 of the %01 masks. The address is also the base of the printer's LDA $56E8,Y ($8E39): with Y = token $F0-$F7 it would fetch a word number from $57D8-$57DF. No message in the scripts or the canned table uses those tokens, and $57D8-$57DF are entries 8-15 of the $57D0 table."
  },
  {
   "address": 22272,
   "type": "line",
   "text": "Column offsets, one per multicolour column x (0-159): (2x) AND $F8, i.e. 8 * (x div 4), the offset of x's byte from its row's start (built at $72CB). Columns 128-159 wrap to $00-$78: every reader first does ASL on x, so the carry adds the missing 256 to the high byte. Read as LDY $5700,X by the line routines, the stars and $AABE/$ADE4."
  },
  {
   "address": 22432,
   "type": "line",
   "text": "Up to 16 points of the current scene (count in $9F), X as floats: mantissa bytes here, exponents at $57B0. $9575-$963C loads them from the scene's data block (pointer $2600/$2700) scaled by 2^-10 ($9610 subtracts $28 from the exponent); every pass $A4B2 rotates them by the heading ($9B-$9E) into $0400/$0440 and $0500/$0540. What the points stand for is not settled; standing at 08-08 three are set."
  },
  {
   "address": 22448,
   "type": "line",
   "text": "Exponent bytes of the points' X (see $57A0): bit 0 the sign, bits 2-7 a signed power of two. Written at $9612, read at $A4BF and $A500."
  },
  {
   "address": 22464,
   "type": "line",
   "text": "Mantissa bytes of the points' Y (see $57A0), written at $9634, read at $A4D3 and $A514. At the hand-over $57C0-$57FF hold loaded bytes that read like a model's edge list (vertex pairs); play overwrites what it uses."
  },
  {
   "address": 22480,
   "type": "line",
   "text": "Exponent bytes of the points' Y, written at $9630, read at $A4D6 (sign flipped with EOR #$01) and $A517. Entries 8-15 ($57D8-$57DF) are also where the printer would find word numbers for tokens $F0-$F7, which no message uses."
  },
  {
   "address": 22496,
   "type": "line",
   "text": "The sixteen script variables, $57E0-$57EF. Op 15 sets one (index = operand AND $0F, $8BFE; setting 13 also writes its digits to $BEF9), op 30 copies one to another ($8CE1/$8CED), op 20 can take its message number from one ($8D2A). The scripts use 8, 9, 13, 14 and 15; 8 and 9 hold copies of 14 and 15. Only 13-15 are read by machine code, and nothing but ops 15 and 30 writes them."
  },
  {
   "address": 22509,
   "type": "line",
   "text": "Script variable 13, a location number (Y * 16 + X): op 31 compares it with $B7, the current location, and op 26 tests bit 7 of $2B00 indexed by it. Script 7 sets it to 50 ($10E6), square 02-03 where the manual's map has the author's advert, and says THE AUTHOR WON'T LET YOU LEAVE when that bit is set."
  },
  {
   "address": 22510,
   "type": "line",
   "text": "Script variable 14, an object number: ops 12 ($941A), 29 ($2940), 32 and 33 ($29C0) act on object [$57EE], and op 20 at $1027 prints canned message [$57EE], the object's name. Set by op 15 (objects 1-46 in the scripts) or restored from variable 8 by op 30; no machine code writes it."
  },
  {
   "address": 22511,
   "type": "line",
   "text": "Script variable 15, a value: op 29 compares it with $2940 of object [$57EE], op 19 with $CD; set by op 15 or restored from variable 9. $57F0-$57FF after it: loaded bytes nothing reads."
  },
  {
   "address": 22528,
   "type": "line",
   "text": "Logarithms for the game's floating-point maths: round(256 * log2(1 + x/256)) for x = 0-255 (all 256 checked). A number is a mantissa byte m and an exponent byte e, worth (1 + m/256) * 2^(e div 4) with bits 2-7 of e signed and bit 0 of e the sign. Multiply $82FA adds two of these logs, divide $8334 subtracts, square $828B doubles, square root $82A2 halves, and $5900 turns the sum back; the 3D code inlines the same ($9ACD-$9BF7, $A769-$AA38)."
  },
  {
   "address": 22784,
   "type": "line",
   "text": "Antilogarithms: round(256 * (2^(x/256) - 1)) for x = 0-255 (all checked), the inverse of $5800: the mantissa of a product, quotient, square or root once the log's high part has gone into the exponent."
  },
  {
   "address": 23040,
   "type": "line",
   "text": "Sine table, mantissas: sin((x + 0.5) * 90/256 degrees) for x = 0-255 as the game's floats, exponent at $5B00 (checked: within 0.2 per cent). $841F returns the sine of a 10-bit angle (bit 0 of its high byte mirrors the index, bit 1 sets the sign) and $841E, one quadrant on, the cosine; $A544 takes both of the angle $28/$29."
  },
  {
   "address": 23296,
   "type": "line",
   "text": "Sine table, exponent bytes for $5A00: $DC (2^-9) at x = 0 rising to $FC below 1, and $00 (1.0, m = 0) from x = 249. ORed with the sign bit at $842B."
  },
  {
   "address": 23551,
   "type": "line",
   "text": "The last sine exponent (x = 255). The address is also the base of STA $5BFF,X in the view-colour fill $BB6E (X = 170 down to 1 writes $5C00-$5CA9)."
  },
  {
   "address": 23552,
   "type": "line",
   "text": "The screen matrix, VIC bank 1: $D018 = $70 or $78 in the view band, $7E in the panel band (characters $7800). Rows 0-16 ($5C00-$5EA7) are the view's colours in multicolour bitmap mode: high nibble for pixel pattern %01, low nibble for %10 (colour RAM gives %11, $D021 the background %00). $BB4F rewrites all 680 with one value when the colours change: $C5 in the opening (grey stars, green planet), $60 OR $A5 from $BB48 in play (blue sky, green ground); loaded as $65. $BB58 compares $5C00 to skip a repaint. Rows 17-24 ($5EA8-$5FE7) are the panel in text mode."
  },
  {
   "address": 23721,
   "type": "line",
   "text": "View colours continued (rows 0-16 all hold one value). The address is the base of STA $5CA9,X in the fill at $BB71-$BB77, which writes $5CAA-$5D53 from it."
  },
  {
   "address": 23891,
   "type": "line",
   "text": "View colours continued (rows 0-16 all hold one value). The address is the base of STA $5D53,X in the fill at $BB71-$BB77, which writes $5D54-$5DFD from it."
  },
  {
   "address": 24061,
   "type": "line",
   "text": "View colours continued (rows 0-16 all hold one value). The address is the base of STA $5DFD,X in the fill at $BB71-$BB77, which writes $5DFE-$5EA7 from it."
  },
  {
   "address": 24206,
   "type": "line",
   "text": "A view-colour byte of row 16. The address is the base of the printer's STA $5E8E,X ($8DE3, X = $EA-$FF), which moves the message window $5F79-$5F8E one cell left."
  },
  {
   "address": 24207,
   "type": "line",
   "text": "The rest of row 16's view colours. The address is the base of the printer's LDA $5E8F,X ($8DE0), the read side of the same one-cell scroll."
  },
  {
   "address": 24232,
   "type": "line",
   "text": "Panel row 17, the first text row ($BA1E switches to text mode at raster line $BA, the end of row 16): 40 solid glyphs $A0, a black bar along the top of the panel."
  },
  {
   "address": 24272,
   "type": "line",
   "text": "Panel row 18: the tops of four boxes with titles in the title font (glyph = ASCII - $20): EL at columns 1-4, LOC 7-13, ALT 16-22, SPEED 25-31; the checker $40 between and in columns 32-39. The address is also the base of STA $5ED0,Y at $B66B/$B676, which writes the readout digits a row below."
  },
  {
   "address": 24274,
   "type": "line",
   "text": "The E of EL. The address is also the base of STA $5ED2,Y at $B5A0: with Y = $39 the ALT readout's third digit, $5F0B."
  },
  {
   "address": 24275,
   "type": "line",
   "text": "The L of EL. Also the base of STA $5ED3,Y at $B598: the ALT readout's fourth digit, $5F0C."
  },
  {
   "address": 24276,
   "type": "line",
   "text": "The rest of row 18 from the EL box's top-right corner: the LOC, ALT and SPEED box tops. Also the base of STA $5ED4,Y at $B594: ALT's last digit, $5F0D."
  },
  {
   "address": 24312,
   "type": "line",
   "text": "Panel row 19: the EL dial's top glyphs $FC and $FA inside its box; the readouts in figure glyphs (0-9 = $00-$09): LOC at columns 8-12 ('03-00' as loaded, $8D the dash), ALT at 17-21, SPEED at 26-30 with its sign cell $5F12; the COMP box's top with its title at columns 33-38."
  },
  {
   "address": 24338,
   "type": "line",
   "text": "The SPEED readout's sign cell: $8B (+) or $8D (-) from bit 0 of $27, the speed's sign, stored at $B5B5; then the four speed digits and the row's end."
  },
  {
   "address": 24352,
   "type": "line",
   "text": "Panel row 20: EL glyphs $FD and $FB; the bottoms of the LOC, ALT and SPEED boxes; the compass's tick cells $5F42-$5F45 at columns 34-37."
  },
  {
   "address": 24386,
   "type": "line",
   "text": "Compass tick cell 1 of 4. All four always hold the same glyph, $F0-$F7 (the tick pattern shifted 0-7 pixels), stored by $B85D-$B866 and $B8B5-$B8BE as the heading moves; $F4 as loaded."
  },
  {
   "address": 24387,
   "type": "line",
   "text": "Compass tick cell 2, written with the other three at $B860 and $B8B8."
  },
  {
   "address": 24388,
   "type": "line",
   "text": "Compass tick cell 3 ($B863, $B8BB)."
  },
  {
   "address": 24389,
   "type": "line",
   "text": "Compass tick cell 4 ($B866, $B8BE), then the COMP box's right side and the checker."
  },
  {
   "address": 24392,
   "type": "line",
   "text": "Panel row 21: EL glyphs $FE and $FA; the top of Benson's message box (columns 7-31); the compass's digit strip, glyphs $DC-$DF at columns 34-37, whose bit patterns $B809 scrolls."
  },
  {
   "address": 24432,
   "type": "line",
   "text": "Panel row 22: EL glyphs $FF and $FB, the message box's sides around the window $5F78-$5F8E, the COMP box's bottom."
  },
  {
   "address": 24440,
   "type": "line",
   "text": "Benson's message window, 23 cells: while a message scrolls in, the printer $8DC3 moves $5F79-$5F8E one cell left each frame and puts the next glyph in $5F8E; $820B blanks it with $A0. Loaded holding MERCENARY centred in the message font (letters ASCII + $80)."
  },
  {
   "address": 24462,
   "type": "line",
   "text": "The window's last cell, where each new character enters (STA $5F8E at $8DEB); then the box's right side and the COMP box's bottom."
  },
  {
   "address": 24472,
   "type": "line",
   "text": "Panel row 23: the bottoms of the EL box (columns 1-4) and the message box (7-31); the checker elsewhere."
  },
  {
   "address": 24512,
   "type": "line",
   "text": "Panel row 24: 40 solid glyphs $A0, the black bar under the panel."
  },
  {
   "address": 24552,
   "type": "line",
   "text": "The 16 bytes after the screen's 1000 cells, $5FE8-$5FF7: unused ($65 as loaded)."
  },
  {
   "address": 24568,
   "type": "line",
   "text": "The sprite pointers of the screen at $5C00. Sprite 0's is $D9: its image at $4000 + $D9 * 64 = $7640, the sight. The others ($65, and $AA for sprite 7) are never used: $9374 enables sprite 0 alone."
  },
  {
   "address": 24575,
   "type": "line",
   "text": "Sprite 7's pointer, unused. The address is also the base of STA $5FFF,X in the bitmap-B clear at $B1E7 (X = 248 down to 1 writes $6000-$60F7)."
  },
  {
   "address": 28672,
   "type": "line",
   "text": "Starfield control for the opening, poked by its script (op 25): 0 cruise, 1 accelerate (poked at $706F), $80 decelerate (at $7173). Read at $7415 after each frame's stars."
  },
  {
   "address": 28673,
   "type": "line",
   "text": "The opening's event script, one operation a frame from $8AB2, called by the starfield ($7319) and planet ($74F2) loops. It pokes the printer's timing ($E0 = 100, its frame counter; $E1 = 125, the frame at which a message ends), then prints: a title; a countdown; NOVADRIVE ENGAGED; PRESTINIUM ON COURSE; DESTINATION / GAMMA FIVE; DAMAGE CONTROL REPORT; SOME CONFLICT DAMAGE; CHECKING; EMERGENCY; GUIDANCE SYSTEM FAULT; COLLISION COURSE; DISENGAGING NOVADRIVE; UNABLE TO CORRECT; MAXIMUM REVERSE THRUST, driving the stars through $7000 and setting the credits on the way. Messages are literal text ($FF) with bit 7 on the last character; $0D is a dash."
  },
  {
   "address": 28681,
   "type": "line",
   "text": "The first message, 23 characters of literal text: ABC UNLIMITED in this crack; the contributor's original Novagen disk reads NOVADRIVE COUNTDOWN at the same place (same length), so the cracker replaced it."
  },
  {
   "address": 28707,
   "type": "line",
   "text": "The countdown, with the printer's end frame $E1 = 50: '- 3 -', '- 2 -', '- 1 -', then $E1 = 25 and '- O -' (a letter O)."
  },
  {
   "address": 28783,
   "type": "line",
   "text": "$7000 = 1: the stars speed up and voice 2's noise starts. Then a call to $0A8F (zero the clock, wait until it reads 2 seconds) and $E1 back to 125."
  },
  {
   "address": 28791,
   "type": "line",
   "text": "From the operand of the poke of $E1: NOVADRIVE ENGAGED, then PRESTINIUM ON COURSE. The address is also the base of STA $7077,X in the bitmap-B clear ($B21A): bitmap B, $6000-$753F, covers the whole script in play."
  },
  {
   "address": 28841,
   "type": "line",
   "text": "DESTINATION / GAMMA FIVE (the $0D breaks it with a dash)."
  },
  {
   "address": 28866,
   "type": "line",
   "text": "Canned message 50 (a blank line), DAMAGE CONTROL REPORT, SOME CONFLICT DAMAGE, CHECKING, another blank, and the 2-second wait."
  },
  {
   "address": 28940,
   "type": "line",
   "text": "Op 13 sets figure 8, the credits at $7700, to 9000 (operand bytes least significant first: 00 90 00 00): the player's starting money."
  },
  {
   "address": 28946,
   "type": "line",
   "text": "EMERGENCY between dashes, GUIDANCE SYSTEM FAULT, COLLISION COURSE, then DISENGAGING NOVADRIVE."
  },
  {
   "address": 29039,
   "type": "line",
   "text": "The end of DISENGAGING NOVADRIVE. The address is also the base of STA $716F,X in the bitmap-B clear ($B21D)."
  },
  {
   "address": 29043,
   "type": "line",
   "text": "$7000 = $80: the stars slow down. Two 2-second waits, UNABLE TO CORRECT, then op 25 pokes $D40B = $81 (voice 2, noise with the gate on: the rumble) and MAXIMUM REVERSE THRUST."
  },
  {
   "address": 29105,
   "type": "line",
   "text": "A jump to itself: the script parks here while the stars slow and the planet grows; $7203 points the interpreter at script 0 when play starts."
  },
  {
   "address": 29108,
   "type": "line",
   "text": "Unused: $4C and 75 zeros up to the start-up code; nothing refers here."
  },
  {
   "address": 29184,
   "type": "line",
   "text": "The game's entry, from the hand-over's JMP $7200 ($5029): JMP $7290, the start-up. The whole of $7200-$75D5 is dead once play starts: bitmap B covers $7200-$753F and the ground-line lists take $7540-$75FF."
  },
  {
   "address": 29187,
   "type": "line",
   "text": "Starts play when the opening ends (from $746F): $E5 = 0, $85 = $80; the script pointer $1F/$20 = script 0 (the first word of $0800: the landing script at $086C); ground-line edges 1 and 2 = vertex slots $3C-$3D and $3E-$3F, the current location's own two segments ($8F22 fills those slots); the player at X $08:$88, Y $08:$88 (square 08-08) and height $7F:$00:$88; main-loop branch $A8 = 0, $CD = 0; craft number $A9 = 10 (on foot: $B5DE skips the engine sound for 10), whose 16-byte profile $9D99 copies to $BEA0; $AC = $10, $AA = $40, $AB = $18, $B4 = $3F; the play colours $A3-$A7 from $B27D (white, blue, green, dark grey)."
  },
  {
   "address": 29287,
   "type": "line",
   "text": "Keeps both grid squares in 0-15, sets the angles: pitch $2B:$2A = $0300 (three quarters of a turn; the opening's descent shows the city from above) and heading $2D:$2C = $0200; then $9950 ($ED and $27 = $88), $B4B2 (no key), $950D (the scene for this location), $9374 (the sight on or off), and JMP $855C, the main loop. Also the base of STA $7267,X in the bitmap-B clear ($B220)."
  },
  {
   "address": 29328,
   "type": "line",
   "text": "Start-up, once, from $7200. $8135 sets up the machine: banking, VIC bank 1, CIA interrupts off, the raster pair, sprite 0, black border; it also swaps zero page with $BF02-$BFFF and loads the SID. Then the opening's colours $A3-$A6 = $00 $0C $05 $05 from $72F6 (black background), and $BB4F paints the view: screen matrix rows 0-16 = $C5 (grey %01 for the stars, green %10 for the planet), colour RAM green. Then the drawing tables ($72A2, $72C5), the opening script ($72E6) and the starfield ($72FA)."
  },
  {
   "address": 29346,
   "type": "line",
   "text": "Builds the row address tables for rows 0-135: $55D0 (low) and $5540 (high) = 320 * (y div 8) + (y mod 8). Eight rows one apart (BIT $BBD1, which holds 7, tests the low three bits), then $38 more ($140 in all) for the next character row, the carry going into the high byte, until X = $88."
  },
  {
   "address": 29381,
   "type": "line",
   "text": "For each multicolour column x = 0-159: $5700 = (2x) AND $F8, the byte offset (wrapping from 128); $7760 = NOT $BC48[x AND 3], the mask that clears the pixel; $5660 = $BC48[x AND 3] AND $55, its %01 pattern. $BC48 holds $C0 $30 $0C $03."
  },
  {
   "address": 29414,
   "type": "line",
   "text": "Points the script interpreter at the opening's script ($1F/$20 = $7001), sets up voice 2 as noise with the gate off (sound $28 through $B93A: frequency high $50, attack/decay $DF, sustain/release $AC) and goes to the star set-up."
  },
  {
   "address": 29430,
   "type": "line",
   "text": "The opening's colours, copied to $A3-$A6 at $7293: $00 black background, $0C grey, $05 green, $05 green (the colour-RAM colour)."
  },
  {
   "address": 29434,
   "type": "line",
   "text": "Starfield set-up: for all 64 star slots, depth exponent $0380 = 1 (a negative depth, so every star is respawned on the first pass), screen position $0680/$06C0 = (1, 1), which the first frame erases, $0780 = 0. Then bitmap A is cleared to 0 (black: $B1A1 with A = 0, X = 248) and the stars are placed ($7370)."
  },
  {
   "address": 29465,
   "type": "line",
   "text": "One frame of the starfield, looping from $7464: one script operation ($8AB2); a wait for raster line $E0, below the view; every star erased at its old position ($0400 x, $0480 y) by zeroing its whole byte, then plotted at its new one ($0680, $06C0) by ORing the %01 mask: grey on black. Stars 0-20 ($74BF), all in bitmap A (ADC #$40), with no double buffering."
  },
  {
   "address": 29535,
   "type": "line",
   "text": "The plot, continued: the pointer's high byte, then the column offset ($5700) and the OR of the %01 mask ($5660). Also the base of STA $735F,X in the bitmap-B clear ($B223)."
  },
  {
   "address": 29552,
   "type": "line",
   "text": "Moves and projects each star, from $74BF down to 0: its floats X ($0100/$0140), Y ($0180/$02C0) and depth Z ($0340/$0380) into $52-$57; the new screen position becomes the old; Z plus the speed $74C3/$74C4 (negative, $838B); a star whose Z turns negative is respawned ($7472), otherwise x = X/Z + 80 and y = Y/Z + 68 ($8334, $8477), respawned too when outside 160 by 136. Stores the new position and Z."
  },
  {
   "address": 29707,
   "type": "line",
   "text": "After the stars, the speed by $7000. 0: unchanged. Positive: voice 2's gate on ($D40B = $81); unless the speed's exponent is $25 (about 512 a frame), multiply it by $74C5/$74C6 (x4.05 the first frame, then x1.012). Negative: gate off ($80); once the exponent is back to $15 (32) the starfield ends ($7467), otherwise the respawn spread narrows and the speed is multiplied by about 0.977 ($7447)."
  },
  {
   "address": 29767,
   "type": "line",
   "text": "Deceleration, continued: respawn offset $10 (with the mask $1F just set, new stars within -16..+15), then the speed times $74C7/$74C8 through $82FA. The two INCs of $74C9 do nothing: $82FA overwrites A. Also the base of STA $7447,X in the bitmap-B clear ($B226)."
  },
  {
   "address": 29799,
   "type": "line",
   "text": "End of the starfield: sound $2C on voice 2 (noise, frequency high $30), the planet approach ($74CA), then play ($7203)."
  },
  {
   "address": 29810,
   "type": "line",
   "text": "Respawns star Y at the far end: X and Y each from three random bytes ($ADEF), the high one masked and offset by $74C0/$74C1 (-32..+31, later -16..+15) and made a float by $8510; Z's mantissa random and its exponent $74C2 ($38: 2^14). Then projects it ($7375)."
  },
  {
   "address": 29887,
   "type": "line",
   "text": "Index of the last star: $14, so 21 stars (slots 0-20 of the star arrays)."
  },
  {
   "address": 29888,
   "type": "line",
   "text": "Mask for a new star's X and Y high byte: $3F while cruising and accelerating, $1F once decelerating ($7444)."
  },
  {
   "address": 29889,
   "type": "line",
   "text": "Subtracted after the mask: $20 (new stars within -32..+31), $10 once decelerating ($7449)."
  },
  {
   "address": 29890,
   "type": "line",
   "text": "Exponent byte of a new star's depth: $38, 2^14 (its mantissa is random)."
  },
  {
   "address": 29891,
   "type": "line",
   "text": "The stars' speed, a float added to each depth every frame: mantissa here ($00), exponent at $74C4."
  },
  {
   "address": 29892,
   "type": "line",
   "text": "The speed's exponent byte: $15, -32 a frame (bit 0 set: negative). Acceleration stops at $25; deceleration ends the starfield at $15 again."
  },
  {
   "address": 29893,
   "type": "line",
   "text": "Accelerating multiplier, mantissa $03 with exponent $74C6: x4.05 on the first frame."
  },
  {
   "address": 29894,
   "type": "line",
   "text": "Exponent of the accelerating multiplier, $08, zeroed by $742D after the first frame: x1.012 from then on."
  },
  {
   "address": 29895,
   "type": "line",
   "text": "Decelerating multiplier, mantissa $F4 with exponent $74C8 ($FC): x0.977 a frame."
  },
  {
   "address": 29896,
   "type": "line",
   "text": "Exponent of the decelerating multiplier, $FC (2^-1)."
  },
  {
   "address": 29897,
   "type": "line",
   "text": "Stepped by DEC ($7430) and INC ($7452, $7455) and loaded into A before JSR $82FA, which ignores A: it has no effect."
  },
  {
   "address": 29898,
   "type": "line",
   "text": "The planet approach: distance D from 1023 down to 0, stepping by $7504[D div 256] (8, 4, 2, 1 as it nears). Each frame: radius = the float $28:$00 (1024) / D ($8510, $8334), a wait for raster line $E0, the disc drawn ($7508) and one script operation. Returns when D goes negative."
  },
  {
   "address": 29956,
   "type": "line",
   "text": "Distance step per frame, by the distance's high byte 0-3: 1, 2, 4, 8."
  },
  {
   "address": 29960,
   "type": "line",
   "text": "Draws the planet as a filled green disc in bitmap A, centred on pixel (80, 67.5). r squared ($828B) from the radius in X/Y; for each pair of rows moving apart, dy steps by a half (keeping the disc round on double-width pixels) and the half-width w = sqrt(r*r - dy*dy) ($838B, $82A2, $8477), capped at 80. The edge byte gets a partial mask ($75D6/$75DA, %11), then whole $AA bytes (%10) inward (columns $75DE/$75F2), mirrored on both rows and both halves, stopping at the first byte already full: the disc only grows."
  },
  {
   "address": 30076,
   "type": "line",
   "text": "Run time: $7540-$757F is the ground-line vertex list, 64 point codes (location numbers Y * 16 + X) filled downward from index $B5 by $8FAE. This byte is slot $3C: the current location's $2D00 byte ($8F2D, read at $90A6)."
  },
  {
   "address": 30077,
   "type": "line",
   "text": "Run time: vertex slot $3D, the current location's $2C00 byte ($8F27)."
  },
  {
   "address": 30078,
   "type": "line",
   "text": "Run time: vertex slot $3E, the current location's $2F00 byte ($8F39, read at $90B2)."
  },
  {
   "address": 30079,
   "type": "line",
   "text": "Run time: vertex slot $3F, the current location's $2E00 byte ($8F33)."
  },
  {
   "address": 30080,
   "type": "line",
   "text": "Run time: $7580-$75BF holds the first vertex of each ground line, $75C0-$75FF the second: edges 1 to $B6, added by $8FC3 unless already listed, drawn from $908E. At the hand-over: the planet's right edge mask fetch."
  },
  {
   "address": 30081,
   "type": "line",
   "text": "Run time: edge 1's first vertex, set to $3C at $7217."
  },
  {
   "address": 30082,
   "type": "line",
   "text": "Run time: edge 2's first vertex, $3E ($721F). At the hand-over, from here: the edge bytes ORed into both rows on both sides, then the whole-byte fill inward ($75A3-$75BA) and the step to the next row pair."
  },
  {
   "address": 30144,
   "type": "line",
   "text": "Run time: the second vertex of each ground line, $75C0-$75FF, written at $8FF2 and $9022, read at $8FE0 and $9091."
  },
  {
   "address": 30145,
   "type": "line",
   "text": "Run time: edge 1's second vertex, $3D ($721B)."
  },
  {
   "address": 30146,
   "type": "line",
   "text": "Run time: edge 2's second vertex, $3F ($7223). At the hand-over, from here: the next row pair down, dy plus a half ($838B), and the loop back to $751E."
  },
  {
   "address": 30166,
   "type": "line",
   "text": "Partial-byte masks for the disc's left edge, by the half-width's two low bits: $00, $03, $0F, $3F (0-3 pixels at the byte's right, pattern %11)."
  },
  {
   "address": 30170,
   "type": "line",
   "text": "Partial-byte masks for the disc's right edge: $00, $C0, $F0, $FC (0-3 pixels at the byte's left)."
  },
  {
   "address": 30174,
   "type": "line",
   "text": "Byte offsets of the 20 character columns left of the centre, counted outward: $98 (column 19) down to $00 (column 0)."
  },
  {
   "address": 30194,
   "type": "line",
   "text": "Byte offsets of the 20 columns right of the centre, from row pointers $A0 bytes on: $00 (column 20) to $98 (column 39)."
  },
  {
   "address": 30208,
   "type": "line",
   "text": "Run time: $7600-$763F is a per-vertex work byte, 64 entries, saved from $60 at $A948 and reloaded at $9A22 and $9A65 with $0600, $03C0 and $0640. At the hand-over: the last six right-hand planet offsets ($70-$98)."
  },
  {
   "address": 30214,
   "type": "line",
   "text": "Leftovers from development: $4C 00 00 00, then 12-byte entries of a name (bit 7 on its last character) and a zero-page address: KBCODE( $E9, MYONO ( $EB, POWER ( $EC, ALLFLG( $EE, and OORFLG cut short by the sprite at $7640. The addresses are real: $E9 is the key code ($B2F2), $EB the number of objects carried (at most 10, $9827; stepped at $982B and $990B), $EC set by the speed keys ($B491, $B4AB), $EE set at $80D3 and $900C. Nothing reads the names; in play $A948 overwrites them."
  },
  {
   "address": 30272,
   "type": "line",
   "text": "Sprite 0's image (pointer $D9 at $5FF8): one row, $FF $00 $FF, eight pixels, a gap, eight pixels; the rest zero. $8135 expands it both ways and puts it at (160, 116), the middle of the view: a sight. $9374 shows it only while bit 7 of $29E8 (object 40's flags) is set; object 40's name (canned message 40) is SIGHTS."
  },
  {
   "address": 30336,
   "type": "line",
   "text": "The scale that the EL dial and the compass both scroll: one byte per pixel row, in 5-row slices, each slice a small digit as clear bits (white holes) in columns 3-7, with a tick in columns 0-1 of its middle row. The digits run 1, 0, 1, 2 ... 9, 8 ... 1, 0, 1 ($7680-$76E8); a '0' slice follows at $76E9. The EL dial feeds it a row at a time into its left column (LDA $7682,Y at $B802, LDA $768B,Y at $B742) and the '0' slice into its right, so its scale reads 10, 00, 10, 20 and on. The compass takes whole slices into glyph $DB or $E0 (LDA $7684,Y at $B878, LDA $768F,Y at $B8D0, ORA #$C0 hiding the tick), a '0' after each."
  },
  {
   "address": 30338,
   "type": "line",
   "text": "Tape row 2. The address is the base of the EL dial's top feed, LDA $7682,Y at $B802 (Y = $BC counting down from $5B)."
  },
  {
   "address": 30340,
   "type": "line",
   "text": "Tape row 4. The base of the compass's left-hand feed, LDA $7684,Y at $B878: the slice ending at Y = $C0 / 2, read upward from its last row."
  },
  {
   "address": 30347,
   "type": "line",
   "text": "The tape from row 11. The base of the EL dial's bottom feed, LDA $768B,Y at $B742 (Y = $BC counting up)."
  },
  {
   "address": 30351,
   "type": "line",
   "text": "The tape from row 15, the '2' slice. The base of the compass's right-hand feed, LDA $768F,Y at $B8D0 (five rows from Y = $C0 / 2)."
  },
  {
   "address": 30415,
   "type": "line",
   "text": "The dial tape from row 79 to row 95: the last row of the descending 4 slice, then the 3, 2 and 1 slices and the first row of the 0 slice. The EL dial and the compass reach these rows through their feed bases at $7682-$768F, with Y up to $5B."
  },
  {
   "address": 30432,
   "type": "line",
   "text": "Inside the last '0' slice. The address is also the base of the sixteen 4-byte BCD figures that script ops 13, 14 and 21 address as $76E0 + 4n (n = operand AND $0F, most significant byte first); the scripts use only n = 8 and 9 ($7700, $7704), and figures 0-7 would overlap this tape."
  },
  {
   "address": 30433,
   "type": "line",
   "text": "Tape row. The base of STA $76E1,X at $8CCC, the second byte op 21 stores."
  },
  {
   "address": 30434,
   "type": "line",
   "text": "Tape row. The base of STA $76E2,X at $8CD0, op 21's third store into a figure."
  },
  {
   "address": 30435,
   "type": "line",
   "text": "Tape row. The base of ADC/STA $76E3,X in ops 13 and 14 ($8C89/$8C8C) and of op 21's reads ($8CB0/$8CB3): a figure's least significant byte, stepping down with X."
  },
  {
   "address": 30440,
   "type": "line",
   "text": "The last row of the final '1' slice. The address is the base of LDA $76E8,X (X = 5 down to 1) in both dials ($B713, $B7D3): the '0' slice $76E9-$76ED. $76EE-$76FF: zeros, unused."
  },
  {
   "address": 30464,
   "type": "line",
   "text": "Figure 8, the player's credits: four BCD bytes, most significant first. Set to 9000 by the opening ($710C); ops 14 and 21 add to it (a price is taken off by adding its ten's complement, 99995000 for 5000 at $0A29); token $F8 prints it (canned message 17, YOU HAVE ... CREDITS); op 24 at $0E6F tests its top byte."
  },
  {
   "address": 30468,
   "type": "line",
   "text": "Figure 9, the sum on offer: set by op 13 before a deal (35,000 to 500,000 in the scripts), added to the credits by op 21 at $1041, printed by token $F9. $7708-$771F, figures 10-15, are never used ($AA filler)."
  },
  {
   "address": 30496,
   "type": "line",
   "text": "Text for printed figures: token $F8 + k formats figure 8 + k into $7720 + 8k (up to eight digits, leading zeros dropped, bit 7 on the last; digit values 0-9 are the figure glyphs), and the printer reads it as literal text ($8E74-$8EBC). Only the first two slots are used (tokens $F8, $F9)."
  },
  {
   "address": 30560,
   "type": "line",
   "text": "Masks that clear one multicolour pixel, one per column x (0-159): $3F, $CF, $F3, $FC for x mod 4 = 0-3 (NOT $BC48, built at $72D7). When $ADFC switches the octant routines to AND $7760,X, and at $ADE9, lines are drawn in the background colour %00: white by day, over the blue sky and green ground."
  },
  {
   "address": 30720,
   "type": "line",
   "text": "The panel's character set, $7800-$7FFF ($D018 = $7E in the panel band), drawn for a white background: a set bit takes the cell's colour-RAM colour. Several alphabets share it: figures, a title font (ASCII - $20), a message font (letters ASCII + $80) with letters as holes in solid cells, box frame pieces, and the dial glyphs that $B67B-$B8F2 rewrite in play. Here, glyphs $00-$09: the figures 0-9, full-height holes in solid cells, for LOC, ALT and SPEED and the digits in messages."
  },
  {
   "address": 30800,
   "type": "line",
   "text": "Glyphs $0A-$0F: the title font's * + , - . / (dark on white)."
  },
  {
   "address": 30848,
   "type": "line",
   "text": "Glyphs $10-$1F: the title font's digits 0-9 and : ; < = > ? (the ? with a dotted bottom row); none is in the panel layout."
  },
  {
   "address": 30976,
   "type": "line",
   "text": "Glyphs $20-$3A: a blank and the title letters A-Z, each with the top of a box frame in rows 0-2 (a dotted line and a solid one) and a 5-row letter below, so a title sits in the box's top edge: EL, LOC, ALT, SPEED, COMP."
  },
  {
   "address": 31192,
   "type": "line",
   "text": "Glyphs $3B-$3F: five identical frames crossed by a diagonal stroke; none is in the panel layout."
  },
  {
   "address": 31232,
   "type": "line",
   "text": "Glyph $40: the 2 by 2 checker that fills the panel between and around the boxes. Glyphs $41-$5A: plain letters A-Z, dark on white, in no layout found."
  },
  {
   "address": 31448,
   "type": "line",
   "text": "Glyphs $5B-$5F: small bar and frame shapes; no user found."
  },
  {
   "address": 31488,
   "type": "line",
   "text": "Glyphs $60-$6F: sixteen empty glyphs."
  },
  {
   "address": 31616,
   "type": "line",
   "text": "Glyphs $70-$77: a two-pixel vertical bar at eight horizontal positions; no user found."
  },
  {
   "address": 31680,
   "type": "line",
   "text": "Glyph $78: a frame with a diagonal (as $3B); $79: an empty frame; $7A-$7F: the EL dial's six glyphs as they are at $FA-$FF when loaded, a copy nothing reads."
  },
  {
   "address": 31744,
   "type": "line",
   "text": "Glyphs $80-$89: the reverse figures, digits dark on white, which LOC shows for negative (wasteland) coordinates ($B656 ORs $80 into the digit). Glyphs $8A-$8F: * + , - . / as holes in solid cells: $8B and $8D are SPEED's sign ($B5B5), $8D also LOC's dash and a message's $0D."
  },
  {
   "address": 31872,
   "type": "line",
   "text": "Glyphs $90-$9F: small digits 0-9 and : ; < = > ? as holes in solid cells (text bytes $10-$1F with bit 7 set); no user found."
  },
  {
   "address": 32000,
   "type": "line",
   "text": "Glyph $A0: a solid cell, the message font's space and the panel's top and bottom bars. Glyphs $A1-$BA: the title letters inverted (frame and all); no user found."
  },
  {
   "address": 32216,
   "type": "line",
   "text": "Glyphs $BB-$BF: five identical slanted shapes; no user found."
  },
  {
   "address": 32256,
   "type": "line",
   "text": "Glyph $C0: the checker inverted. Glyphs $C1-$DA: the message font's letters A-Z (ASCII + $80), holes in solid cells, as the printer maps them ($8E0D-$8E10)."
  },
  {
   "address": 32262,
   "type": "line",
   "text": "Rows 6-7 of the inverted checker, then the message letters A-Z. The address is also the base of STA $7E06,X at $B8D5 (X = $FB-$FF), which writes a tape slice into rows 1-5 of glyph $E0, 251 bytes on."
  },
  {
   "address": 32472,
   "type": "line",
   "text": "Glyphs $DB-$E0, the compass strip, rewritten in play: $B840-$B852 and $B8E0-$B8F2 shift rows 1-5 of all six one pixel as a 48-pixel strip, and a new slice of the tape enters $DB (left) or $E0 (right). $DC-$DF are on screen (row 21, columns 34-37); here, $DB's row 0."
  },
  {
   "address": 32473,
   "type": "line",
   "text": "Glyph $DB from row 1, the compass strip's hidden left end: the base of STA $7ED9,X at $B87D, which writes a tape slice into its rows 1-5."
  },
  {
   "address": 32480,
   "type": "line",
   "text": "Glyph $DC, the first visible compass cell (shifted by ROR/ROL $7EE0,X)."
  },
  {
   "address": 32488,
   "type": "line",
   "text": "Glyph $DD, the second visible compass cell."
  },
  {
   "address": 32496,
   "type": "line",
   "text": "Glyph $DE, the third visible compass cell."
  },
  {
   "address": 32504,
   "type": "line",
   "text": "Glyph $DF, the fourth visible compass cell."
  },
  {
   "address": 32512,
   "type": "line",
   "text": "Glyph $E0, the strip's hidden right end, filled from the tape at $B8D5 and shifted with the rest. Then glyphs $E1-$E4: frames with a diagonal (as $3B); $E5 and $E6 a box's top corners, $E7 and $E8 its bottom corners, $E9 top edge, $EA bottom edge, $EB right side, $EC left side (the corners slant inward); $ED ? $EE ! $EF ' in the message font."
  },
  {
   "address": 32640,
   "type": "line",
   "text": "Glyphs $F0-$F7: the compass's tick row, a two-pixel white gap every 8 pixels at eight scroll positions; $B85D/$B8B5 put one of them into all four cells $5F42-$5F45."
  },
  {
   "address": 32704,
   "type": "line",
   "text": "Glyph $F8: a slant (as $BB); $F9: a block with a margin. From $7FD0 the EL dial, rewritten as the pitch changes by $B67B-$B808: $FC-$FF its left column (32 rows, $7FE0-$7FFF, where the tape enters), $FA/$FB its right column (16 rows, $7FD0-$7FDF, shown twice)."
  },
  {
   "address": 32719,
   "type": "line",
   "text": "The last row of $F9. The base of LDA $7FCF,Y at $B7F4, which moves the EL dial's right column down a row."
  },
  {
   "address": 32720,
   "type": "line",
   "text": "Glyph $FA, top half of the EL dial's right column (16 rows with $FB), where the '0' slice goes ($B716, $B7D6)."
  },
  {
   "address": 32721,
   "type": "line",
   "text": "The right column from row 1: the base of LDA $7FD1,Y at $B734, which moves it up a row."
  },
  {
   "address": 32735,
   "type": "line",
   "text": "The right column's last row ($FB row 7), copied from row 0 at $B729 and back at $B7E9."
  },
  {
   "address": 32736,
   "type": "line",
   "text": "Glyph $FC, the EL dial's left column top row: the tape's new row enters here when it scrolls down ($B805); $B6BC and $B784 write a solid or an empty row here."
  },
  {
   "address": 32737,
   "type": "line",
   "text": "The left column from row 1: base of LDA/STA $7FE1,Y in the one-row moves at $B6E4 and $B72E."
  },
  {
   "address": 32738,
   "type": "line",
   "text": "Left column, row 2: a base of the row moves at $B6EA-$B6ED."
  },
  {
   "address": 32739,
   "type": "line",
   "text": "Left column, row 3: a base of the row moves at $B6F0-$B6F3."
  },
  {
   "address": 32740,
   "type": "line",
   "text": "Left column, row 4: a base of the row moves at $B6F6-$B6F9."
  },
  {
   "address": 32741,
   "type": "line",
   "text": "Left column, row 5: a base of the row moves at $B6FC-$B704."
  },
  {
   "address": 32747,
   "type": "line",
   "text": "Left column, row 11: a base of the downward moves at $B7BC-$B7C4."
  },
  {
   "address": 32748,
   "type": "line",
   "text": "Left column, row 12: a base of the downward moves at $B7B6-$B7BF."
  },
  {
   "address": 32749,
   "type": "line",
   "text": "Left column, row 13: a base of the downward moves at $B7B0-$B7B9."
  },
  {
   "address": 32750,
   "type": "line",
   "text": "Left column, row 14: a base of the downward moves at $B7AA-$B7B3."
  },
  {
   "address": 32751,
   "type": "line",
   "text": "Left column, row 15 ($FD row 7): emptied at $B6C4, made solid at $B77C, and a base of the moves at $B7A4."
  },
  {
   "address": 32752,
   "type": "line",
   "text": "Glyph $FE, the left column's lower half from row 16: solid or empty rows written at $B6BF/$B787, and the moves at $B6D2, $B7A7."
  },
  {
   "address": 32753,
   "type": "line",
   "text": "Left column from row 17: the base of LDA $7FF1,Y at $B70D and of the empty row stored at $B79A."
  },
  {
   "address": 32767,
   "type": "line",
   "text": "The left column's last row ($FF row 7): the tape's new row enters here when it scrolls up ($B745); $B6C7 empties it and $B77F makes it solid."
  },
  {
   "address": 32768,
   "type": "line",
   "text": "Cartridge-style header (cart = cartridge): $8000 holds $2170, the cold-start vector, and $8002 holds $80C1, the warm-start vector. With the signature CBM80 at $8004 the KERNAL follows them: a hardware RESET jumps through $8000 to $2170, the reset trap, and RESTORE pressed while the KERNAL ROM is in (during a save or load) makes the KERNAL's NMI handler jump through $8002 to resume_warm_start. Novagen's original has the signature; this cracked copy has zeros there (cart_signature_blank), so both vectors are inert. Nothing in the game reads them. Saved and loaded as part of $8000-$803F (save_state_table)."
  },
  {
   "address": 32772,
   "type": "line",
   "text": "Where the header's signature CBM80 ($C3 $C2 $CD $38 $30) sits in Novagen's original; the crack has five zeros here, so the KERNAL ignores the vectors at $8000 and a RESET goes to BASIC as usual. No instruction in the image stores into $8004-$8008 (every absolute store was searched; the indexed stores from $7FEF-$7FF1 are masked to indexes 0-15)."
  },
  {
   "address": 32777,
   "type": "line",
   "text": "NMI handler: a bare RTI. hardware_setup points the RAM vector $FFFA at it, so RESTORE does nothing while the game runs with $01 = $35. During a save or load ($01 = $36) the KERNAL ROM's own NMI handler runs instead."
  },
  {
   "address": 32778,
   "type": "line",
   "text": "Per-object angle for objects 0-15, in 64ths of a turn (obj = object; xh = the X-height plane): $A6AD turns each model vertex of object $AF in the plane of X ($CF) and height ($D1) by it, through $A728, after the other two turns. Only read (at $A6E1): nothing traced writes it, and it is 0 for all 16 objects in both snapshots. Saved and loaded."
  },
  {
   "address": 32794,
   "type": "line",
   "text": "Per-object angle for objects 0-15, in 64ths of a turn (hy = the height-Y plane): $A6AD turns each model vertex in the plane of height ($D1) and Y ($D3) by it, after the heading and before obj_angle_xh. Only read (at $A6CF); 0 for all 16 objects in both snapshots. Saved and loaded."
  },
  {
   "address": 32810,
   "type": "line",
   "text": "Per-object heading for objects 0-15, in 64ths of a turn (obj = object): $A6AD turns each model vertex in the ground plane (Y $D3, X $CF) by it first. Boarding object X (key B, on foot, objects 0-7 only) copies it into the player's heading ($988E: $2C:$2D = heading x 16, a 10-bit angle); leaving vehicles 0-8 stores the player's heading back ($98F8: the 10-bit angle / 16). Object 0, the brother-in-law's new ship, holds $20, half a turn."
  },
  {
   "address": 32826,
   "type": "line",
   "text": "Binary to BCD table (BCD = binary-coded decimal), 128 entries: entry n is n in BCD for 0-99, and $AA for 100-127, which prints as two asterisks (glyph $0A of the panel's figures) - the ** that LOC shows beyond +-99. Read by the panel readouts at $B662/$B66F (index = the value's magnitude; a negative value is negated first, so -128 would index $80BA, a code byte $A9, and print *9) and by script op 15 at $8C24/$8C2E when it sets $57ED, a location, whose two nibbles it formats into the text at $BEF9-$BEFD."
  },
  {
   "address": 32954,
   "type": "line",
   "text": "Resume after a save or load. Reached from $2160 (SEI; JMP $80BA), where JMP ($BFFD) at $8215 lands. $01 = $36, then $B8F6 swaps the zero page back: the game's own $02-$FF, parked in $BF02-$BFFF during the transfer (after a load, as the file had it), returns, and the KERNAL's goes back to $BF02-$BFFF. Falls into resume_warm_start."
  },
  {
   "address": 32961,
   "type": "line",
   "text": "Second half of the resume, and the target of the warm-start vector at $8002 (followed by the KERNAL only when CBM80 is at $8004, as in the original): $01 = $36, a fresh stack, hardware_setup_keep_zp, then $D800 = $A6 + 1 so that $BB48, which checks only that first colour cell against $A6, repaints the view's colours on the next pass; $EE = $FF so that the city-map reader at $8EE0 re-patches its operands; then the scene is rebuilt, $9162 (the current room) when the place $CD is non-zero, else $950D (the current city square), and the main loop is entered."
  },
  {
   "address": 32974,
   "type": "side",
   "text": "first colour cell != $A6 forces $BB48 to repaint"
  },
  {
   "address": 32997,
   "type": "line",
   "text": "JSR hardware_setup (with the zero-page swap), then falls into quit_situation. No caller found: its address appears nowhere in memory as bytes, and no traced jump or branch reaches it."
  },
  {
   "address": 33000,
   "type": "line",
   "text": "CTRL+Q, quit the situation ($B3F3 jumps here with a fresh stack). scatter_carried_objects spreads what the player has over the city; then the player is put on the surface ($A8 = 0, place $CD = 0) at the same position within a square, the grid square folded into the city (X and Y high bytes AND $0F), height $00:00:80, heading $2C:$2D = $200 and $2A:$2B = $200; $85 = $80 forces the city square to reload; turning step $AC = $10; $9950 sets the speed setting $ED (and $27) to $88; $B270 resets the view colours $A3-$A6 and $C2-$C5 and the sprite colour. The player always gets vehicle 1: $A9 = 1, movement record 1 through $9D99, object 1 taken out of the world ($2941 = $FF). Object 1 stands at 08-08, where the opening messages place the Dominion Dart, with the new ship's model $3B25. Then $9374 (objects here) and the main loop."
  },
  {
   "address": 33077,
   "type": "line",
   "text": "Hardware setup, called by the start-up at $7290 (and restart_with_setup): SEI, $01 = $36, $B8F6 (swap zero page $02-$FF with $BF02-$BFFF, clear $0780-$07BF, load all 25 SID registers from $B921: volume 15), then falls into hardware_setup_keep_zp."
  },
  {
   "address": 33085,
   "type": "line",
   "text": "Hardware setup without the zero-page swap (zp = zero page; resume_warm_start calls it here): $BB48 (the view's colours), VIC bank 1 ($DD00 = $96), both CIAs' interrupts off and acknowledged, NMI vector $FFFA = $8009, IRQ vector $FFFE = $B9BB, raster compare line 0, sprites in front, raster interrupt on, sprite 0 expanded both ways at (160, 116) in light grey ($D027 = $0F), border black, $B506 (the panel's colour RAM), then $01 = $35 (RAM at $A000 and $E000, I/O at $D000), CLI, CLD."
  },
  {
   "address": 33182,
   "type": "line",
   "text": "CTRL+S or CTRL+L, after the digit and RETURN ($B3CE jumps here): hands the machine to the KERNAL. SEI, $01 = $36, raster interrupt off, $B8F6 (the KERNAL's zero page comes back from $BF02-$BFFF, the game's is parked there; SID reset), buffer pointer $FB/$FC = $4000, IOINIT, CINT, $01 = $36 again (BASIC ROM out, so $A000-$BFFF reads RAM), text screen on, SETLFS 1,8,1 (device 8, the disk; nothing rewrites the 8), SETNAM with the 7 characters at save_file_name. save_not_load picks the save ($8218) or the load ($81D8). The file holds 1904 bytes, gathered at $4000-$476F (in the first bitmap) from the 14 regions of save_state_table. Every way out goes through save_load_exit."
  },
  {
   "address": 33220,
   "type": "side",
   "text": "device 8: the disk"
  },
  {
   "address": 33249,
   "type": "line",
   "text": "Load, after the KERNAL LOAD at $81DA (secondary address 1: to the file's own load address; an error, carry set, goes straight to save_load_exit): copy the buffer from $4000 ($FB/$FC) into each region of save_state_table in turn ($FD/$FE, length save_state_table_len + 1), until the table's 0."
  },
  {
   "address": 33291,
   "type": "line",
   "text": "Common exit of the save and the load, whether or not they worked: the 23 cells of the message line $5F78-$5F8E get $A0 (a blank), then JMP ($BFFD). $BFFD/$BFFE are the game's own zero-page $FD/$FE, parked there by the swap (after a load, as the file had them). The game keeps $2160 there, so this goes to $2160, SEI; JMP resume_game. A save file with other bytes at that place would send the restart elsewhere."
  },
  {
   "address": 33301,
   "type": "side",
   "text": "JMP ($BFFD): the game's own $FD/$FE, parked by the zero-page swap; holds $2160"
  },
  {
   "address": 33304,
   "type": "line",
   "text": "Save: copy each region of save_state_table in turn into the buffer from $4000, then KERNAL SAVE from $4000 (pointer in $FD/$FE) up to the end in $FB/$FC ($4770); the result is not checked. On to save_load_exit."
  },
  {
   "address": 33368,
   "type": "line",
   "text": "The file name for SETNAM: '@0:MER' (the @0: prefix replaces an existing file when saving), followed by the slot digit at save_slot_digit, seven characters in all."
  },
  {
   "address": 33374,
   "type": "line",
   "text": "The save slot as an ASCII digit '0'-'9' ($30-$39), the file name's last character: written at $B3AB from the digit key pressed after CTRL+S or CTRL+L."
  },
  {
   "address": 33375,
   "type": "line",
   "text": "Save or load: $8D (the CTRL+S key number, stored at $B370) saves, 0 (stored at $B37D for CTRL+L) loads; read at $81D3."
  },
  {
   "address": 33376,
   "type": "line",
   "text": "What a save file holds, in order: 14 entries of three bytes (page, low byte, length - 1; read at $81E1 and $8218) and a 0 at $828A. $2B00-$2BFF (location status), $2480-$24FF, $2500-$25FF, $2880-$28FF, $2900-$29FF (object positions, places, lists and flags), $57E0-$57EF (script variables), $7700-$775F (from money figure 8 on), $7ED8-$7F07 and $7FD0-$7FFF (panel character glyphs $DB-$E0 and $FA-$FF), $5EF8-$5F97 (panel rows 19-22), $8000-$803F (cart_header, so the CBM80 signature or its absence travels with a save file, and the object angles), $BDA0-$BDFF (moving objects' lifetimes and velocities), $BEA0-$BEFF (movement record, carried list, counters, flags), $BF00-$BFFF (the game's zero page, parked there). 1904 bytes. This entry's first byte is the page of $2B00."
  },
  {
   "address": 33377,
   "type": "line",
   "text": "Second column of save_state_table (read as $8261,X, X stepping by 3): the low byte of each region's start."
  },
  {
   "address": 33378,
   "type": "line",
   "text": "Third column of save_state_table (read as $8262,X): each region's length minus one; the column of pages ends with the 0 at $828A."
  },
  {
   "address": 33419,
   "type": "line",
   "text": "Float square (fp = floating point, the format described at fp_mul): (X, Y) squared into X and $08 (mantissa), Y and $09 (exponent, sign 0). Doubles the logarithm $5800[m] and the exponent; no overflow check, so an exponent outside -16..15 wraps (2^16 squared gives 2^-32). Within 0.4%. Called by the start-up at $7508 and $7522."
  },
  {
   "address": 33442,
   "type": "line",
   "text": "Float square root of the magnitude of (X, Y) (the sign bit is ignored), into X and $08, Y and $09: the exponent's low bit joins the logarithm $5800[m], which is halved; the exponent is halved, rounding down. Within 0.4%. Called by the start-up at $7530."
  },
  {
   "address": 33467,
   "type": "line",
   "text": "Unsigned 8 x 8 multiply (umul = unsigned multiply): A x Y, a 16-bit product with the high byte in A and the low byte in Y and $06. Shift and add; $08 and $09 (the float registers) are used as scratch. Called by smul8_q7 and $A24F."
  },
  {
   "address": 33491,
   "type": "line",
   "text": "Signed multiply for the object rotations (q7: the product is scaled down by 128): A and Y signed bytes; returns A = the sign times (|A| x (2|Y| mod 256)) >> 8, which is A x Y / 128 truncated toward zero, except that Y = -128 gives 0. Y returns the sign byte A xor Y. With sin64's +-127 values this is a coordinate times a sine. Uses $06, $07. Called four times by $A728."
  },
  {
   "address": 33530,
   "type": "line",
   "text": "Float multiply: (X, Y) x ($08, $09), into X and $08, Y and $09. The game's float is two bytes: a mantissa m and an exponent byte whose bits 2-7 are a signed power of two e (-32..31) and bit 0 the sign; the value is +-(1 + m/256) x 2^e, and there is no zero (the smallest values stand for it). The product adds the logarithms from $5800 (256 x log2(1 + m/256)); a carry adds 1 to e; the antilog table $5900 gives the mantissa. Exponents and signs add in one ADC (bit 1 takes the signs' carry and is cleared). Overflow saturates at fp_saturate. Within 0.43%."
  },
  {
   "address": 33562,
   "type": "line",
   "text": "Exponent overflow exit of fp_mul and fp_div (taken on the V flag): a result too large becomes +-2^30 (exponent byte $78/$79, mantissa 0), one too small 2^-31 with its sign ($84/$85). fp_add's x + (-x) leaves through $832C and $8328 too."
  },
  {
   "address": 33588,
   "type": "line",
   "text": "Float divide: ($08, $09) / (X, Y), into X and $08, Y and $09, in fp_mul's format: subtracts the logarithms ($5800) and the exponents; a borrow takes 1 from the exponent; the sign is the exclusive or (bit 1 is set first as a guard for the signs' borrow). Saturates like fp_mul. Within 0.43%. $A544 uses it for the tangent and cotangent of the view angles."
  },
  {
   "address": 33675,
   "type": "line",
   "text": "Float add: (X, Y) + ($08, $09), into X and $08, Y and $09 (callers subtract by flipping an operand's sign bit first, as at $9C91 and $AA05). The smaller operand's mantissa, its leading 1 restored, is shifted right by the exponent difference d through a jump into a run of LSRs (branch operands fp_add_shift_a/b rewritten per call); d of 9 or more returns the larger operand unchanged. Like signs add (a carry raises the exponent unchecked, so 2^31 + 2^31 wraps to 2^-32); unlike signs subtract and renormalise at $83D5. Equal magnitudes of opposite sign give 2^(e-9), the format's stand-in for zero. Truncates: error within 0.55% of the larger operand."
  },
  {
   "address": 33707,
   "type": "line",
   "text": "Operand of the BNE at $83AA, rewritten at $83A3 with 15 - d when (X, Y) is the larger operand by d = 1-8: the branch lands d - 1 LSRs before $83BA, so the smaller mantissa is shifted right d times in all (the NOPs at $83AC-$83B2 are never reached)."
  },
  {
   "address": 33749,
   "type": "line",
   "text": "fp_add's renormalising exit after a subtraction: shifts the difference left until its leading 1 falls out, takes the shift count off the exponent, and underflows to 2^-31 ($84) through $83EC."
  },
  {
   "address": 33796,
   "type": "line",
   "text": "Operand of the BNE at $8403, rewritten at $83FD with (-d) AND 7 when ($08, $09) is the larger operand by d = 1-8: lands d - 1 LSRs before $840C, a shift of d in all."
  },
  {
   "address": 33822,
   "type": "line",
   "text": "Cosine of a 10-bit angle, as a float: the angle is Y (its low two bits, the quadrant) x 256 + X, in 1024ths of a turn; returns X = mantissa, Y = exponent and sign, the value cos((angle + 0.5) x 360/1024 degrees) within 0.001. Looks up the quarter wave at $5A00 (mantissa) and $5B00 (exponent), reflected and signed by quadrant. Called by $A544 for the view angles."
  },
  {
   "address": 33823,
   "type": "line",
   "text": "Sine of the same 10-bit angle (Y:X): entered one byte into fp_cos10, skipping its INY, it computes cos(angle - 90 degrees), the sine."
  },
  {
   "address": 33844,
   "type": "line",
   "text": "Sine and cosine of A in 64ths of a turn, as signed bytes scaled by 127: $BEBE = sin, $BEBF = cos. Called by the object rotation $A728."
  },
  {
   "address": 33858,
   "type": "line",
   "text": "127 x cos(A x 360/64 degrees) as a signed byte: adds a quarter turn (16) and falls into sin64."
  },
  {
   "address": 33861,
   "type": "line",
   "text": "127 x sin(A x 360/64 degrees) as a signed byte (A taken mod 64), from the half wave sine64_table, negated for the second half; Y returns A AND 63."
  },
  {
   "address": 33879,
   "type": "line",
   "text": "Half a sine wave, 32 bytes: round(127 x sin(n x 360/64 degrees)) for n = 0-31 (0, 12, 25, ... 127 at n = 16 ... 12). Read by sin64 at $844B."
  },
  {
   "address": 33911,
   "type": "line",
   "text": "Float (X, Y) to a signed byte in A, rounded to nearest (halves away from zero), carry clear; carry set when the magnitude is 127.5 or more (A then not valid). The shift count goes into the BNE operand fp_to_int8_shift."
  },
  {
   "address": 33927,
   "type": "line",
   "text": "Operand of the BNE at $8486, rewritten at $8480 with the exponent e (0-6): skips e of the seven LSRs, so the mantissa with its leading 1 is shifted right 8 - e times in all."
  },
  {
   "address": 33959,
   "type": "line",
   "text": "Float (X, Y) to a signed 16-bit integer, X = high byte, Y = low byte: the magnitude truncated, and for a negative value its ones' complement, -trunc(|x|) - 1 (the floor, except that an exact integer comes out one lower). Magnitudes below 1 give 0, or -1 if negative. Carry set when e is 15 or more (32768 or more). The shift count goes into the BCC operand fp_to_int16_shift. fire_missile uses it for the missile's velocity."
  },
  {
   "address": 33986,
   "type": "line",
   "text": "Operand of the BCC at $84C1, rewritten at $84B5 with 3e: skips e of the fifteen three-byte LSR/ROR pairs, a right shift of 16 - e in all."
  },
  {
   "address": 34064,
   "type": "line",
   "text": "Signed 24-bit integer (A = high, X = middle, $07 = low) to a float, returned as A = $08 = mantissa and X = $09 = exponent and sign (A and X, not X and Y). Negates a negative number, finds the leading 1 and keeps the 8 bits after it (truncating, within 0.4%). Zero gives 2^-8 (mantissa 0, exponent byte $E0). Turns 24-bit position differences (object or vertex minus the player) into floats for the view ($A5CE, $A635)."
  },
  {
   "address": 34140,
   "type": "line",
   "text": "Main loop, one pass per view redraw (10 passes in 100 frames standing on the ground). Every pass: $8AB2 runs one event-script operation; hired_ship_update. Then $A8 picks the branch: 0 is the surface (main_loop_surface), non-zero is inside a complex. Inside: $A544 (sines, cosines, tangents of the view angles), $AF6E (wait for raster line $E0, swap the double buffer); then $939E keeps the player inside the room's walls, and on touching one (with the door delay $B1 at 0) $9437 looks for a door there and $90BE goes through it, into room $08, or to the surface when that is 0 (the pass then goes on at $85B0), setting $B1 = 2; $96D8 (the room's vertices), $AE02, $96E7 (its edges), $ADFC, $9706 (the objects here, keys T and B), $B2FE (joystick), $A165 (movement), and round."
  },
  {
   "address": 34209,
   "type": "line",
   "text": "Main loop, surface branch ($A8 = 0): $A544 (view angles), $94E0 (reload the city square when the player's square changes), $A320 (in a vehicle, or when $CA is set), $A4B2, $AF6E (buffer swap); from $85B0, also the way in from a door out of a complex: $9054, and the building of the player's square ($B7 not 0) through $96D8/$96E7 when the player is low (height high byte $77 = 0) or $CA is set; object 0, the brother-in-law's new ship, moves one step along Y ($2500 + 1 a pass, high byte $25C0 wrapping 15 to 0); $ADFC, $9706 (objects), $B2FE, $A165 (movement), fire_missile with A = $30, building_hit_update, move_objects, attack_ship_update, and round."
  },
  {
   "address": 34245,
   "type": "side",
   "text": "object 0 (the new ship) moves along Y"
  },
  {
   "address": 34290,
   "type": "line",
   "text": "Scatter what the player has (quit_situation): the vehicle the player is in ($A9, when positive) and every carried object (the list $BEB1 onward, $EB of them, top first) is put on the surface ($2940 = 0) in a random square of the city: X and Y high bytes random 0-15, middle bytes random ($ADEF), low bytes kept, height 0; its carried bit ($29C0 bit 7) is cleared. Leaves $EB = 0."
  },
  {
   "address": 34356,
   "type": "line",
   "text": "The hired ship (object 7), every pass. $BEFF = 0: nothing. Negative (script 2 pokes $FF after 'SHIP DESPATCHED / IT WILL LAND AT LOC 8-8 IN 2 MINS'): object 7 is put on the surface ($2947 = 0) at X $08:$99:$00, Y $08:$8B:$00, height $7F:$00:$00, and $BEFF = $7F. Positive: the height (high:middle bytes) loses height/128 + 1 a pass until it is exactly 0, then $BEFF = 0. The descent takes 780 passes (about 2.6 minutes at the 5 passes a second measured on the ground)."
  },
  {
   "address": 34448,
   "type": "line",
   "text": "Moving objects 8-15 (8 the player's missile, 14 the attack ship's missile, 15 the attack ship), every surface pass. A lifetime at $BDA3,X ($BDAB-$BDB2) counts down; 0 and $7F leave the object alone; reaching 0 calls remove_object and ends the pass's loop. Otherwise the 24-bit X, height and Y get the velocities $BDAB/$BDB3/$BDBB,X, $BDC3/$BDCB/$BDD3,X and $BDDB/$BDE3/$BDEB,X added; a height gone negative is set to -1 ($FF:$FF:$FF). Object 8, the last, goes on to missile_collisions."
  },
  {
   "address": 34574,
   "type": "line",
   "text": "Take object X out of the world: place $2940,X = $FF, lifetime $BDA3,X = 0, then $9374 rebuilds the list of objects present."
  },
  {
   "address": 34587,
   "type": "line",
   "text": "The player's missile (object 8) after its move. Low (height below $00:$08:$00, or below the ground) near the centre of a city square (X and Y middle bytes $70-$8F, inside the city): it hits the building there: $F5 = the square's index, $FB = its status byte before, bit 7 (destroyed) set in $2B00,Y, explosion countdown $F4 = 16, sound 4, the missile removed, and building_hit_update's first step. Below the ground elsewhere: removed. Otherwise it is tested against object 15, the attack ship (a hit prints canned message $31, ENEMY SHIP DESTROYED), and object 0, the brother-in-law's new ship (a hit starts script 27, which names it)."
  },
  {
   "address": 34661,
   "type": "side",
   "text": "bit 7: the building at this square is destroyed"
  },
  {
   "address": 34715,
   "type": "line",
   "text": "After a building hit ($F4 counting down): nothing unless the player is in the hit square ($B7 = $F5). With the ANTI TIME BOMB carried (object 24, $29D8 bit 7) the square's status goes back to its value before the hit without the destroyed bit: a building already destroyed has its square reloaded ($9575), standing again, and its debris finished at once. Otherwise it waits for the debris ($96AC) and the countdown; then, if the building was intact before and its status lacks bit 5, the side's count goes up: bit 6 set (the Mechanoid squares) in $BEBC, clear (the Palyar squares) in $BEBB; bit 5 marks nobody's squares (the Metal Detector at $B53D shows these bits as red, blue and green). $BEBC - $BEBB reaching 105 starts script 10 (the Palyars: a reward in the red hangar), $BEBB leading by 106 script 26 (the Mechanoids); otherwise the square's own script 32 + (bits 0-4) starts, once (the bits are cleared)."
  },
  {
   "address": 34867,
   "type": "line",
   "text": "Is object Y, on the surface ($2940,Y = 0), within 4/256 of a square of object X on every axis (object_difference, then $999A with 4)? Carry clear if so: sound $10, the attack is called off ($BEF8 = 0), object Y's lifetime is zeroed (unless Y = 0) and it leaves the world ($2940,Y = $FF), and object X is removed. X and Y are kept."
  },
  {
   "address": 34922,
   "type": "line",
   "text": "Fire, every surface pass (A = $30 from the main loop). Only when fire is pressed ($81 = 0), the player is in a vehicle ($A9 positive), no explosion runs ($F4 = 0) and missile object 8 is idle (lifetime $BDAB = 0): sound 8, object 8 into the current place $CD at the player's position with lifetime 16, and a velocity along the view direction, the floats $4C/$4D (X: cos a2 x sin a3), $36/$37 (height: sin a2), $50/$51 (Y: cos a2 x cos a3), a2 = $2A:$2B and a3 = $2C:$2D (heading), with A added to each exponent byte ($30 is 12 powers of two: 4096 units, 1/16 of a square a pass), through fp_to_int16 and sign-extended into $BDB3/$BDBB/$BDC3, $BDCB/$BDD3/$BDDB and $BDE3/$BDEB/$BDF3. $9374 rebuilds the object list."
  },
  {
   "address": 35105,
   "type": "line",
   "text": "The attack ship (object 15) and its missile (object 14), every surface pass while $BEF8 is set (the scripts of destroyed buildings set it: 34 and 35 at random, the landmarks' and the new ship's always) and $CA is 0. Farther than $30/256 of a square on some axis: the ship homes, velocity (player - ship)/32, lifetime $AD. Nearer: if object 14 is idle it is launched from the ship with velocity (player - ship)/16 and lifetime 32; if it is in flight and within 4/256 of the player on every axis the player is hit: $B22D (view colours $11, sound $18), canned message $30 SHIP DESTROYED when in a vehicle, the attack ends ($BEF8 = 0), sound $0C, movement mode 9 ($A9 = 9, $9D99), ship and missile removed."
  },
  {
   "address": 35247,
   "type": "line",
   "text": "Divide the three 24-bit differences $D5-$D7 (X), $D8-$DA (height), $DB-$DD (Y) by 2^Y (arithmetic shifts right, Y times), then complement all nine bytes: -(d >> Y) - 1, turning object - player into a step toward the player."
  },
  {
   "address": 35291,
   "type": "line",
   "text": "Copy object Y's 24-bit position (the nine split tables $2880/$2480/$2540, $28C0/$24C0/$2580, $2900/$2500/$25C0) to object X."
  },
  {
   "address": 35346,
   "type": "line",
   "text": "Store the nine bytes $D5-$DD as object X's velocity: $BDAB/$BDB3/$BDBB,X (X), $BDC3/$BDCB/$BDD3,X (height), $BDDB/$BDE3/$BDEB,X (Y)."
  },
  {
   "address": 35392,
   "type": "line",
   "text": "24-bit position of object X minus that of object Y, per axis, into $D5-$D7 (X), $D8-$DA (height), $DB-$DD (Y); the counterpart of $9957, which subtracts the player's position."
  },
  {
   "address": 35468,
   "type": "line",
   "text": "Start event script A from machine code (the missile and building code, $921E, $98C0): ignored while $BEC0 bit 6 is set (one such script at a time); otherwise sets it, pushes the running script's pointer $1F/$20 on the script stack ($8BC9, $BEC2) and points $1F/$20 at script A from the table $0800. The scripts clear bit 6 when they finish."
  },
  {
   "address": 35506,
   "type": "line",
   "text": "Script step: the event-script interpreter, one operation per call, from the main loop $855C and the opening sequence's loops ($7319, $74F2, $AA95). Returns at once while a message is printing ($E6 non-zero), so every script waits for Benson to finish. Otherwise it reads the operation byte at the script pointer ($1F),0 into $E7 (bit 7 inverts a test, bit 6 makes a taken test a call), writes $8D5E + 2 x (op AND $3F) into the pointer of the JMP ($8D5E) at $8ACC and so jumps to that operation's handler. Handlers read their operands through ($1F),Y and finish at $8B92 (move $1F/$20 past the operation) or $8BB2 (move it to a target)."
  },
  {
   "address": 35532,
   "type": "side",
   "text": "pointer patched: $8D5E + 2 x op"
  },
  {
   "address": 35533,
   "type": "line",
   "text": "Script dispatch, low byte: the pointer operand of JMP ($8D5E) at $8ACC, rewritten on every step by $8AC2 with $5E + 2 x op, so that the jump reads the handler's address out of the table $8D5E."
  },
  {
   "address": 35534,
   "type": "line",
   "text": "Script dispatch, high byte of the same pointer: $8D plus the carry out of the low byte, written by $8AC9; it is always $8D, since even op $3F gives $5E + $7E, below $100 (ops 35-63 would read past the table into the code at $8DA4)."
  },
  {
   "address": 35536,
   "type": "line",
   "text": "Script op 24, if peek: operands a memory address (low, high) and a value, then the two-byte target. Writes the address into the CMP at $8ADF ($8AE0/$8AE1) and compares the value with the byte found there: the branch is taken when that byte is greater than the value, or, with bit 7 of the op, when it is not. Its one use, at $0E6F, tests $7700 > 0, credits of 1,000,000 or more, before the 999,999-credit ship hire."
  },
  {
   "address": 35551,
   "type": "side",
   "text": "address patched by $8AD3/$8AD9; $0100 is a placeholder"
  },
  {
   "address": 35552,
   "type": "line",
   "text": "Op 24's address, low byte: the operand of CMP $0100 at $8ADF, written from the script by $8AD3."
  },
  {
   "address": 35553,
   "type": "line",
   "text": "Op 24's address, high byte, written by $8AD9; the $0100 in the snapshot is only a placeholder."
  },
  {
   "address": 35557,
   "type": "line",
   "text": "Script op 10, if random: one operand, then the target. Steps the random generator $ADEF and branches when the operand is below the new random byte $E8, or, with bit 7, when $E8 is at most the operand. The scripts use it inverted with operand $50, taken for 81 values of 256 ($0A74, $0CD4, $0CDB)."
  },
  {
   "address": 35568,
   "type": "line",
   "text": "Script op 7, if clock: a number of seconds (low, high), then the target. Reads the seconds clock $E3 (low) and $E4 (high), again if $E3 changed between the reads (the panel interrupt counts it), and branches while the clock is below the number; bit 7 branches once it has reached it. With op 2 it makes the scripts' waits: $0A8F clears the clock and loops on op 7 for two seconds."
  },
  {
   "address": 35587,
   "type": "line",
   "text": "Script op 23: one operand, then the target. Branches when the signed byte $BEBD is below the operand minus 128 (it compares $BEBD EOR $80 with the operand, unsigned); bit 7 inverts. No script in this image uses it, and op 22 is the only other code that touches $BEBD."
  },
  {
   "address": 35598,
   "type": "line",
   "text": "Script op 34, if craft: one operand, then the target. Branches when $A9, the number of the object the player is riding ($80 on foot, $98E2), equals the operand. Script 0 waits at $09BB for 1, the Dart; script 7 tests 7, the interstellar ship ($1096, $10D3)."
  },
  {
   "address": 35607,
   "type": "line",
   "text": "Script op 29, no operands, then the target: branches when object $57EE lies in room $57EF ($2940 + object holds the room an object is in, 0 outdoors, $FF while carried). $0E0C: the Antenna (30) in the Communication Room ($10)."
  },
  {
   "address": 35620,
   "type": "line",
   "text": "Script op 19, no operands, then the target: branches when the player is in room $57EF, compared with the current room $CD (0 outdoors). The briefings run it inverted ($0CF1, $0DC7) to stop when the player walks out."
  },
  {
   "address": 35629,
   "type": "line",
   "text": "Script op 18, if flags: a mask, then the target. Branches when any bit of the mask is set in the script flags $BEC0 (bit 7 of the op inverts)."
  },
  {
   "address": 35639,
   "type": "line",
   "text": "Script op 12, if carried: no operands, then the target. Branches when object $57EE is in the player's carried list $BEB1 ($941A). The Communication Room ($0E0F) and the interstellar ship ($10A4) look for the Antenna and the Novadrive this way."
  },
  {
   "address": 35649,
   "type": "line",
   "text": "Script op 9: a machine-code address (low, high), then the target. Calls it through $8C5D and branches when it comes back with the carry clear. No script in this image uses it (see $8C5D)."
  },
  {
   "address": 35655,
   "type": "line",
   "text": "Script op 6: a grid X and a grid Y, then the target. Branches when the player's square, $74 and $7A, is that one (underground both are 0). No script in this image uses it."
  },
  {
   "address": 35671,
   "type": "line",
   "text": "Script op 31, no operands, then the target: branches when variable $57ED equals $B7, the location number of the player's square (Y x 16 + X, 0 outside the city, set at $952B). No script in this image uses it."
  },
  {
   "address": 35680,
   "type": "line",
   "text": "Script op 11, if key: a key number, then the target. When the last key $E9, SHIFT and CTRL bits dropped, equals the operand, it forgets the key ($B4B2), calls $B94D (sound 0 on voice 1) and branches; otherwise it goes on. The scripts poll it in a loop against the clock: Y ($19) at $0AB6 (buy, hire) and $10CF (launch)."
  },
  {
   "address": 35698,
   "type": "line",
   "text": "Script op 26, no operands, then the target: branches when bit 7 of $2B00 + $57ED is set, the building at location $57ED destroyed. The escape at $10E6 sets $57ED to $32 (02-03, the author's advert) and will not leave while it is."
  },
  {
   "address": 35708,
   "type": "line",
   "text": "Script op 33: a mask, then the target. Branches when any bit of the mask is set in object $57EE's flags $29C0 (bit 0 sold, 2 starts the object's script and 3 prints its name when it is taken or boarded ($98B1), 4 cannot be taken, 5 too heavy without the Antigrav, 7 carried). The shops test bit 0 at $1010."
  },
  {
   "address": 35719,
   "type": "line",
   "text": "Script test tail, shared by every test: enter at $8B87 when the condition is false, at $8B8A when true, or at $8B8B with the carry clear for true. The carry goes into bit 7 and bit 7 of the op ($E7) inverts it. Not taken: the pointer moves past the two-byte target to the next operation ($8B90). Taken: $8B9E jumps to the target, or calls it when bit 6 of the op is set ($8BA3). $8B92 is also where the other operations end: $1F/$20 += Y + 1, Y being the index of their last operand."
  },
  {
   "address": 35747,
   "type": "line",
   "text": "Script op 4, call: a two-byte target. Pushes the address of this operation + 3 on the script stack (low, then high, $8BC9) and jumps. A taken test with bit 6 set enters here too and pushes the same + 3, which is right only for op 4; no script in this image sets bit 6."
  },
  {
   "address": 35762,
   "type": "line",
   "text": "Script op 3, jump: loads the script pointer $1F/$20 with the two-byte target. Every taken test ends here."
  },
  {
   "address": 35774,
   "type": "line",
   "text": "Script op 5, return: pops the script pointer from the script stack ($8BD2: the high byte, then the low)."
  },
  {
   "address": 35785,
   "type": "line",
   "text": "Script stack push: stores A at $BEC2 + $E5 and raises the index $E5. The stack holds the return addresses of script calls ($8BA3) and of scripts started as calls by $8A8C; $7203 empties it at start-up."
  },
  {
   "address": 35794,
   "type": "line",
   "text": "Script stack pop: lowers $E5 and returns the byte at $BEC2 + $E5 in A."
  },
  {
   "address": 35803,
   "type": "line",
   "text": "Script op 32: one mask for object $57EE's flags $29C0. Below $80 it sets the mask's bits; $80 and above it ANDs the flags with the mask, clearing the bits that are 0 in it. Bit 7 (carried) cannot change either way. The shops set $11 at $1039: sold (bit 0) and no longer takeable (bit 4)."
  },
  {
   "address": 35829,
   "type": "line",
   "text": "Script op 15, set variable: a variable number (low nibble) and a value for $57E0 + n. The scripts use $57EE for an object number, $57EF for a room number and $57ED for a location number (Y x 16 + X). Setting $57ED also writes that location as the word 'XX-YY' at $BEF9-$BEFD (dictionary word $CB, digits by $8C23), which no message in this image prints."
  },
  {
   "address": 35875,
   "type": "line",
   "text": "Location digits: writes the two decimal digits of X (0-15), from the BCD table $803A, at $BEF9 + Y and $BEFA + Y and returns with Y + 1. The second character is the whole BCD byte, so 10-15 give $10-$15, which the printer shows as glyphs $90-$95, digits of another style than the figures $00-$09."
  },
  {
   "address": 35894,
   "type": "line",
   "text": "Script op 1, print: the message tokens that follow, up to a 0. Points the printer's token read (the operand $8E27/$8E28 of the LDY at $8E26) at this operation, whose first token is one byte on, skips the tokens and starts the printer: $E6 = $FF, token index $DE and character index $DF = 0. The next step then waits until the message has been shown."
  },
  {
   "address": 35918,
   "type": "line",
   "text": "Script op 2, clock reset: zeroes the seconds clock $E3-$E4, the start of every timed wait (op 7)."
  },
  {
   "address": 35927,
   "type": "line",
   "text": "Script op 8: calls the machine code at the two-byte address that follows ($8C5D), then goes on. No script in this image uses it."
  },
  {
   "address": 35933,
   "type": "line",
   "text": "Calls the machine code whose address (low, high) follows in the script, by writing it into the JSR at $8C69. That JSR comes back to $8C6C, op 13's handler, so a routine ending in a plain RTS would go on to run op 13 on the script's next bytes; only one that drops its own return address would return cleanly. Ops 8 and 9, its only callers, are unused in this image."
  },
  {
   "address": 35945,
   "type": "line",
   "text": "The JSR that ops 8 and 9 aim, by rewriting its operand $8C6A/$8C6B; in the snapshot it points at itself."
  },
  {
   "address": 35945,
   "type": "side",
   "text": "target patched by $8C60/$8C66"
  },
  {
   "address": 35946,
   "type": "line",
   "text": "Low byte of the machine-code address that ops 8 and 9 call, written by $8C60."
  },
  {
   "address": 35947,
   "type": "line",
   "text": "High byte of the machine-code address that ops 8 and 9 call, written by $8C66."
  },
  {
   "address": 35948,
   "type": "line",
   "text": "Script op 13, set counter: a counter number n (low nibble) and four BCD bytes, least significant first, stored at $76E3 + 4n down to $76E0 + 4n: a counter is big-endian in memory. It shares op 14's loop, first turning the ADC $76E3,X at $8C89 into BIT $76E3 so that the loop stores instead of adding. The intro sets counter 8, the credits, to 9000 ($710C); the shops set counter 9, the reward on offer."
  },
  {
   "address": 35955,
   "type": "line",
   "text": "Script op 14, add to counter: counter n and four BCD bytes, least significant first, added in decimal mode; the carry out of the top byte is lost. Puts the ADC back at $8C89. There is no subtraction: $0A29 adds 99995000 to take 5000 credits for the Dart, $0E90 adds 99000001 to take 999999 for the Hertz ship."
  },
  {
   "address": 35977,
   "type": "line",
   "text": "Opcode of the counter loop's ADC $76E3,X: op 13 writes $2C (BIT $76E3, so the loop stores the script's bytes) and op 14 writes back $7D (ADC)."
  },
  {
   "address": 35977,
   "type": "side",
   "text": "opcode patched: ADC (op 14) or BIT (op 13)"
  },
  {
   "address": 35992,
   "type": "line",
   "text": "Script op 21, sum counters: three counter numbers a, b, c (low nibbles): counter c = counter a + counter b in BCD, the carry out lost. Used once, at $1041: credits (8) = reward (9) + credits (8)."
  },
  {
   "address": 36059,
   "type": "line",
   "text": "Script op 30, copy variable: one byte, the destination in the high nibble and the source in the low: $57E0 + high = $57E0 + low. $104C-$105B save and restore $57EE/$57EF in $57E8/$57E9 this way."
  },
  {
   "address": 36083,
   "type": "line",
   "text": "Script op 16, set flags: ORs its operand into the script flags $BEC0, which ops 17 and 18 clear and test. The scripts use bit 0 for a yes answer ($0AC2), 1 for opposition sites destroyed ($11F5), 2 for the ship despatched ($0EBE), 3 for the author's advert destroyed ($0B6B) and 5 for the brother-in-law offended ($0A67)."
  },
  {
   "address": 36095,
   "type": "line",
   "text": "Script op 17, clear flags: clears the bits of its operand in $BEC0. Scripts started as calls end with it on bit 6 ($40), the busy bit that $8A8C sets and checks before it starts another."
  },
  {
   "address": 36109,
   "type": "line",
   "text": "Script op 25, poke: an address (low, high) and a value, stored there by the STA at $8D1C, whose operand ($8D1D/$8D1E) it rewrites. The scripts poke the printer's timers $E0/$E1, SID voices 1 and 2 ($D404, $D40B), $7000, $296E and $BEF8, $BEFE, $BEFF."
  },
  {
   "address": 36124,
   "type": "side",
   "text": "address patched by $8D10/$8D16; $0100 is a placeholder"
  },
  {
   "address": 36125,
   "type": "line",
   "text": "Op 25's address, low byte: the operand of STA $0100 at $8D1C, written by $8D10."
  },
  {
   "address": 36126,
   "type": "line",
   "text": "Op 25's address, high byte, written by $8D16; the snapshot's $0100 is only a placeholder."
  },
  {
   "address": 36130,
   "type": "line",
   "text": "Script op 20, message: a canned message number (0-63); with bit 7 set the number is read from variable $57E0 + (low nibble). Starts it through $8DAA. A number above 63 is not checked and would read past the 64-entry pointer tables."
  },
  {
   "address": 36148,
   "type": "line",
   "text": "Script op 27, random message: a mask and a base; starts canned message (random AND mask) + base ($ADEF, then $8DAA). Used once, at $08B7: one of messages 60-63 after the crash (WHERE AM I, YOU CRASHED, GOOD LANDING!, OUCH!). A sum of 0 would fall into op 28 instead and print nothing."
  },
  {
   "address": 36160,
   "type": "line",
   "text": "Script op 28, clear key: forgets the last key ($B4B2 stores $04 in $E9), so that a following key test needs a fresh press; used before the yes/no questions ($0AAB, $0E4C, $10B9)."
  },
  {
   "address": 36166,
   "type": "line",
   "text": "Script op 22: adds its signed operand to $BEBD, saturating at -128 ($80) and +127 ($7F) instead of wrapping. No script in this image uses it, nor op 23, the only other code that touches $BEBD."
  },
  {
   "address": 36189,
   "type": "line",
   "text": "A spare $00 byte between op 22's handler and the handler table: the dispatch indexes from $8D5E, and no instruction reads it."
  },
  {
   "address": 36190,
   "type": "line",
   "text": "Script handlers: 35 addresses indexed by operation number (op AND $3F), read by the JMP ($8D5E) at $8ACC. Entry 0, here, is $0000: no script uses op 0, which would jump to $0000. Ops 1-34 follow at $8D60."
  },
  {
   "address": 36190,
   "type": "side",
   "text": "entry 0 = $0000: no op 0"
  },
  {
   "address": 36192,
   "type": "line",
   "text": "Script handler addresses for ops 1-34: 1 print $8C36, 2 clock reset $8C4E, 3 jump $8BB2, 4 call $8BA3, 5 return $8BBE, 6 if square $8B47, 7 if clock $8AF0, 8 call code $8C57, 9 if code $8B41, 10 if random $8AE5, 11 if key $8B60, 12 if carried $8B37, 13 set counter $8C6C, 14 add to counter $8C73, 15 set variable $8BF5, 16 set flags $8CF3, 17 clear flags $8CFF, 18 if flags $8B2D, 19 if player in room $8B24, 20 message $8D22, 21 sum counters $8C98, 22 add to $BEBD $8D46, 23 if $BEBD below $8B03, 24 if peek $8AD0, 25 poke $8D0D, 26 if destroyed $8B72, 27 random message $8D34, 28 clear key $8D40, 29 if object in room $8B17, 30 copy variable $8CDB, 31 if at location $8B57, 32 object flags $8BDB, 33 if object flags $8B7C, 34 if craft $8B0E. Ops 6, 8, 9, 22, 23 and 31 appear in no script of this image."
  },
  {
   "address": 36192,
   "type": "side",
   "text": "op 1: print"
  },
  {
   "address": 36194,
   "type": "side",
   "text": "op 2: clock reset"
  },
  {
   "address": 36196,
   "type": "side",
   "text": "op 3: jump"
  },
  {
   "address": 36198,
   "type": "side",
   "text": "op 4: call"
  },
  {
   "address": 36200,
   "type": "side",
   "text": "op 5: return"
  },
  {
   "address": 36202,
   "type": "side",
   "text": "op 6: if square (unused)"
  },
  {
   "address": 36204,
   "type": "side",
   "text": "op 7: if clock"
  },
  {
   "address": 36206,
   "type": "side",
   "text": "op 8: call code (unused)"
  },
  {
   "address": 36208,
   "type": "side",
   "text": "op 9: if code (unused)"
  },
  {
   "address": 36210,
   "type": "side",
   "text": "op 10: if random"
  },
  {
   "address": 36212,
   "type": "side",
   "text": "op 11: if key"
  },
  {
   "address": 36214,
   "type": "side",
   "text": "op 12: if carried"
  },
  {
   "address": 36216,
   "type": "side",
   "text": "op 13: set counter"
  },
  {
   "address": 36218,
   "type": "side",
   "text": "op 14: add to counter"
  },
  {
   "address": 36220,
   "type": "side",
   "text": "op 15: set variable"
  },
  {
   "address": 36222,
   "type": "side",
   "text": "op 16: set flags"
  },
  {
   "address": 36224,
   "type": "side",
   "text": "op 17: clear flags"
  },
  {
   "address": 36226,
   "type": "side",
   "text": "op 18: if flags"
  },
  {
   "address": 36228,
   "type": "side",
   "text": "op 19: if player in room"
  },
  {
   "address": 36230,
   "type": "side",
   "text": "op 20: message"
  },
  {
   "address": 36232,
   "type": "side",
   "text": "op 21: sum counters"
  },
  {
   "address": 36234,
   "type": "side",
   "text": "op 22: add to $BEBD (unused)"
  },
  {
   "address": 36236,
   "type": "side",
   "text": "op 23: if $BEBD below (unused)"
  },
  {
   "address": 36238,
   "type": "side",
   "text": "op 24: if peek"
  },
  {
   "address": 36240,
   "type": "side",
   "text": "op 25: poke"
  },
  {
   "address": 36242,
   "type": "side",
   "text": "op 26: if destroyed"
  },
  {
   "address": 36244,
   "type": "side",
   "text": "op 27: random message"
  },
  {
   "address": 36246,
   "type": "side",
   "text": "op 28: clear key"
  },
  {
   "address": 36248,
   "type": "side",
   "text": "op 29: if object in room"
  },
  {
   "address": 36250,
   "type": "side",
   "text": "op 30: copy variable"
  },
  {
   "address": 36252,
   "type": "side",
   "text": "op 31: if at location (unused)"
  },
  {
   "address": 36254,
   "type": "side",
   "text": "op 32: object flags"
  },
  {
   "address": 36256,
   "type": "side",
   "text": "op 33: if object flags"
  },
  {
   "address": 36258,
   "type": "side",
   "text": "op 34: if craft"
  },
  {
   "address": 36260,
   "type": "line",
   "text": "Message start, short first line: starts canned message X like $8DAA, but first counts one frame in $E0, so that the message's first line is 24 characters instead of 25. Its only caller, $98BA, prints an object's name when an object with bit 3 of $29C0 is taken or boarded: for those objects message n is object n's name, 24 characters wide. Does nothing while a message is printing."
  },
  {
   "address": 36266,
   "type": "line",
   "text": "Message start: starts canned message X (0-63). While a message is printing ($E6 non-zero) the request is dropped. Otherwise it points the token read ($8E27/$8E28) at the message through the split table $20A0 (low) / $20E0 (high), whose entries point one byte before the first token, zeroes the token and character indexes $DE and $DF and sets $E6 = $FF. Callers: ops 20 and 27, LOCKED ($9432), TOO HEAVY ($984A), an object's name ($8DA4), a room's name or the dark-room warning ($AEE8), and $878B, $8979, $B3DA, $B43B."
  },
  {
   "address": 36291,
   "type": "line",
   "text": "Message tick: Benson's message window, once a frame from the panel interrupt ($BA51) while $E6 is non-zero. $E0 counts frames: on counts 1-25 it scrolls the window $5F78-$5F8E (screen row 22, columns 8-30) one cell to the left, puts the character $FC in the right-hand cell, sounds SID voice 3 at frequency (character AND $3F) + $30 (high byte; 0 for a blank) and fetches the next character; from 26 it silences voice 3 and waits until $E0 reaches $E1, the pause length (the scripts poke it; $7D in play, 99 frames), then restarts the count and lowers $E6. Text therefore scrolls in lines of 25 characters, one a frame, with a pause after each line. While $E6 is negative the characters come from the message ($8E05); after the end token $E6 is 1, the line is padded with blanks and the printer stops at the next pause ($E6 = 0)."
  },
  {
   "address": 36361,
   "type": "line",
   "text": "Character read: LDA (text) + DF, the next character of the current word, literal or figure. Its operand $8E0A/$8E0B is rewritten to point one byte before the text ($8E40/$8E46 for a dictionary word, $8E58/$8E61 for a literal, $8E7E/$8E85 for a figure), so DF = 1 reads the first character; in the snapshot it points at itself. The character c becomes the glyph (c AND $7F), plus $80 when that is 10 or more, in $FC: letters, stored as ASCII, land on the window font (ASCII + $80), values 0-9 on the figures $00-$09 and $0A-$0F on * + , - . / ($8A-$8F). Bit 7 of c ends the word (DF back to 0)."
  },
  {
   "address": 36361,
   "type": "side",
   "text": "pointer patched: text - 1"
  },
  {
   "address": 36362,
   "type": "line",
   "text": "Low byte of the character read's pointer at $8E09, written by $8E40 (dictionary word), $8E58 (literal) and $8E7E (figure)."
  },
  {
   "address": 36363,
   "type": "line",
   "text": "High byte of the character read's pointer, written by $8E46, $8E61 and $8E85; the code that follows turns the character into a glyph and moves DF on."
  },
  {
   "address": 36382,
   "type": "line",
   "text": "Next token (when DF is 0): puts a blank in $FC, advances the token index $DE and reads token $DE through the LDY at $8E26. 0 ends the message ($8E50 sets $E6 = 1); $01-$EE is a dictionary word, whose pointer from $2120 (low) / $2210 (high) goes into $8E0A/$8E0B (words 1-7, endings, follow straight on; later words show this blank first); $EF is the blank alone; $F0-$F7 take the word number from $57D8-$57DF ($56E8 + token; no message in this image uses them); $F8-$FE are figures ($8E74); $FF starts literal text ($8E55)."
  },
  {
   "address": 36390,
   "type": "line",
   "text": "Token read: LDY (message) + DE. Its operand $8E27/$8E28 points one byte before the message's first token: at the op 1 byte itself ($8C38/$8C3D) or through a canned message's pointer ($8DB1/$8DB7); in the snapshot it points at itself."
  },
  {
   "address": 36390,
   "type": "side",
   "text": "pointer patched: message - 1"
  },
  {
   "address": 36391,
   "type": "line",
   "text": "Low byte of the token read's pointer at $8E26, written by $8C38 (op 1) and $8DB7 (canned message); $8E55 copies it for a literal."
  },
  {
   "address": 36392,
   "type": "line",
   "text": "High byte of the token read's pointer, written by $8C3D (op 1) and $8DB1 (canned message)."
  },
  {
   "address": 36437,
   "type": "line",
   "text": "Literal text (token $FF): points the character read ($8E0A/$8E0B) and the scan at $8E6C ($8E6D/$8E6E) at the message itself, sets DF to the literal's first character (the byte after the $FF) and moves DE to its last character, the one with bit 7 set, so that the next token follows it. The blank already in $FC is shown first. DE and DF are single bytes, so a message cannot run past 255 bytes."
  },
  {
   "address": 36460,
   "type": "line",
   "text": "Literal scan: LDA (message) + X, stepping X on until a character with bit 7 set, the literal's end. Its operand $8E6D/$8E6E is written by $8E5B/$8E64; in the snapshot it points at itself."
  },
  {
   "address": 36460,
   "type": "side",
   "text": "pointer patched: message - 1"
  },
  {
   "address": 36461,
   "type": "line",
   "text": "Low byte of the literal scan's pointer, a copy of $8E27 written by $8E5B."
  },
  {
   "address": 36462,
   "type": "line",
   "text": "High byte of the literal scan's pointer, a copy of $8E28 written by $8E64."
  },
  {
   "address": 36468,
   "type": "line",
   "text": "Figure (tokens $F8-$FE): formats counter 8 + k (k = token AND 7), the four BCD bytes at $7700 + 4k, as decimal digits at $7720 + 8k with no leading zeros (a single 0 when it is zero) and bit 7 on the last digit, and points the character read at $771F + 8k with DF = 1. Counter 8 is the credits and 9 the reward on offer (tokens $F8, $F9); counter 15 cannot be printed, $FF being the literal token."
  },
  {
   "address": 36546,
   "type": "line",
   "text": "Build road list: picks the roads to draw outdoors for a view radius A in grid squares (from the altitude table $2A00, called by $955D when the radius or the player's square changes). The window is the box of 2A + 1 squares a side round the player's square ($74, $7A), clipped to the city by $8F7F on each axis. It first loads the four map bytes of the player's own location $B7 into vertex slots $3C-$3F ($757C-$757F: the ends of the roads along its row and its column, which edges 1 and 2 join; all 0 outside the city), then, square by square over the window, patches the map readers at $8F66-$8F79 with each row's first location and adds the road along the square's row ($2C00 to $2D00) and along its column ($2E00 to $2F00) through $8FC3. The vertex list ($7540, slots $B5 up to $3F) and the edge list ($7580/$75C0, edges 3 up to $B6) start empty. $EE = 0 marks the whole city built, so that asking again returns at once. With radius 0 only the player's own square's roads are listed."
  },
  {
   "address": 36710,
   "type": "side",
   "text": "low byte patched: row start"
  },
  {
   "address": 36711,
   "type": "line",
   "text": "Map reader, low byte of LDX $2C00,Y at $8F66: the first location of the window row being scanned (written by $8EF1, 16 added a row by $8F58). $2C00 + location: where the road along that square's row begins, as a location number (its lowest X), 0 when the square has none."
  },
  {
   "address": 36715,
   "type": "side",
   "text": "low byte patched: row start"
  },
  {
   "address": 36716,
   "type": "line",
   "text": "Map reader, low byte of LDA $2D00,Y at $8F6B, kept equal to $8F67. $2D00 + location: where the road along that square's row ends (its highest X)."
  },
  {
   "address": 36721,
   "type": "side",
   "text": "low byte patched: row start"
  },
  {
   "address": 36722,
   "type": "line",
   "text": "Map reader, low byte of LDX $2E00,Y at $8F71, kept equal to $8F67. $2E00 + location: where the road along that square's column begins (its lowest Y), 0 when the square has none."
  },
  {
   "address": 36726,
   "type": "side",
   "text": "low byte patched: row start"
  },
  {
   "address": 36727,
   "type": "line",
   "text": "Map reader, low byte of LDA $2F00,Y at $8F76, kept equal to $8F67. $2F00 + location: where the road along that square's column ends (its highest Y). Every square a road crosses lists the whole road, ends included."
  },
  {
   "address": 36735,
   "type": "line",
   "text": "Road window, one axis: A = the player's square on that axis ($74 or $7A), $08 = the radius r, $09 = 2r + 1. Returns the window's first square in A and its width in X, clipped to the city's squares 0-15, with the carry clear; the carry set means the window misses the city on this axis. The first square is taken as signed, so a player out in the wasteland on either side is clipped correctly."
  },
  {
   "address": 36782,
   "type": "line",
   "text": "Road vertex slot: looks for location A in the vertex list $7540 + X, X from $B5 to $3F, and returns its slot in A; if absent, it lowers $B5 and stores A in the new slot. Nothing checks the list against its 64 slots, but the map's 32 roads have only 52 distinct ends and 60 slots ($00-$3B) are free below the four fixed ones."
  },
  {
   "address": 36803,
   "type": "line",
   "text": "Road add: adds the road from location X to location A (the two ends of a row or column road) to the edge list, unless either end is the player's own location $B7 (such a road runs through the player's square, whose roads are edges 1 and 2 already) or the same pair of slots is listed. Slots come from $8FAE; a new edge goes in at $B6 + 1 with $7580 the slot of A and $75C0 the slot of X, the order of edges 1 and 2, so the duplicate test also catches the player's own roads."
  },
  {
   "address": 36856,
   "type": "line",
   "text": "Road list preset: loads a prepared road list from $902A + Y: the first vertex slot (into $B5), the vertex locations up to slot $3F, the last edge number (into $B6), then edges 3 onwards as slot pairs. Also sets $B9 and $EE to $40 so that the next radius-based build ($8EC2) starts afresh. Only Y = 0 is used, from $953C: at height $200000 and above ($77 >= $20) the road list is the overview at $902A."
  },
  {
   "address": 36906,
   "type": "line",
   "text": "Road overview, the road list drawn high up ($8FF8 at height $200000 and above): first slot $2E; 18 locations for slots $2E-$3F: $01 $0F $FF $F1 (the ring 01-00, 15-00, 15-15, 01-15 round the city), $33 $3C $7C $73 (the ring 03-03, 12-03, 12-07, 03-07), $04 $34, $0A $FA, $51 $5F, and for slots $3C-$3F $75 $F5, $D1 $DC; last edge $0D; edges 3-13 as slot pairs ($2E-$2F ... $3A-$3B). With edges 1 and 2 that is 13 main roads, a simplified city map (the map itself has 32 roads)."
  },
  {
   "address": 36948,
   "type": "line",
   "text": "Draw roads, once a pass outdoors (main loop $85B0): sets the line routines' pattern ($AE02) and, unless $EF is non-zero, puts every listed road end on the ground: the height -($77:$76) goes through $9E93 into $54/$55 for all of them, each vertex slot from $B5 to $3F holding a location is placed at the centre of that square relative to the player ($A67B) and projected ($A75C), and edges 3 to $B6 are drawn ($99DD). Edges 1 and 2, the roads through the player's own square, are drawn only when off the ground ($77 non-zero) and $CA is 0; otherwise the main loop draws the square's local model instead ($85B3-$85C2)."
  },
  {
   "address": 37054,
   "type": "line",
   "text": "Go through door: takes the player into room $08, arriving at the door whose X byte is at offset $09 of that room's descriptor (from the main loop at $857E once $9437 has found a door, and from $A2E0 at the foot of an elevator: room $CD, its first door). Room 0 is the outside: $A8 (underground) and $CD (current room) become 0, the object list and sight are redone ($9374), $A9 = 9 (the craft the player is in; $9D99 loads its parameters), $B232 resets the colours $C2-$C5 ($C4, the background, to green) and the sight's light grey, the position becomes the nine bytes at $90ED, $AF6E runs with $C8 = 0 (then $C8 = $7F) and $950D recomputes the location. Any other room goes to $90F6."
  },
  {
   "address": 37101,
   "type": "line",
   "text": "Room exit position: where a door into room 0 puts the player, nine bytes copied to $72-$7A by $90D5: X $0867C0, height $40F880, Y $087000 (over square 08-08). Only room $AB has such a door. Object 63 is at X $087000, height $40FCC0, Y $087000, just beside and above this point; by its height probably the Colony Craft, which the leaflet puts high above the city."
  },
  {
   "address": 37110,
   "type": "line",
   "text": "Enter room X (not 0): points $1B/$1C at its descriptor through the split table $2300 (low) / $23C0 (high) and sets $8D = $E0. A transporter room (bit 7 of byte 0: rooms $72-$87) first rewrites its own door, byte 5 (arrival bits 4-6) and byte 6 (destination), from the pair at bytes 10-11, or at 12-13 when the player came from the room named in byte 10; room $72 takes one of the eight pairs at bytes 10-25 at random. It then sets $F0 = 10 (the transporter sound plays and doors stay shut meanwhile, $AED6, $9437), and room $7F also mirrors the world ($9353). The player is placed at the arrival door, X from its byte 2 and Y from its byte 3 into $73 and $79, low bytes $80 along the wall and 0 across it by the door's bit 7; $CD = X and the room is built ($9162)."
  },
  {
   "address": 37218,
   "type": "line",
   "text": "Build room: makes the current room's model from its descriptor ($1B/$1C) in the local model tables: vertex X $0400 (low) / $0440 (high), height $0480 / $04C0, Y $0500 / $0540, edges $0580 (from) / $05C0 (to). First redoes the object list and sight ($9374), sets $74 = $7A = 0, clears $F7 and the tables. The room is a box of eight vertices and 12 edges ($933B/$9347): X size byte 0 AND $7F, Y size byte 2 AND $7F, height byte 1 AND 7 (high bytes); byte 3 goes to $C4, the view's background colour, and byte 4 to $C5, and the sight sprite turns white ($91DF). Each door entry, 4 bytes from byte 5 (flags, destination, X, Y; a 0 ends the list), adds its outline ($922F). A list ended by $80 is a dark room: unless the Photon Emitter (object 16) is carried or in the room, $C2 = $C4 = $C5 = 0 and $F7 = 1 (message 1, ITS VERY DARK IN HERE). Then byte 1's top five bits name the room: with bit 7 of byte 2 a script started at once ($8A8C), otherwise a message left in $F7 for $AEE4; $98 = $FF, $939E keeps the player inside and voice 1 is silenced."
  },
  {
   "address": 37423,
   "type": "line",
   "text": "Room add door: X = 4 for a door with bit 7 clear (in a wall of constant Y) or 5 with bit 7 set (constant X), written into the STA at $9256 by $9235. The door type (bits 0-3) picks an outline from $928A through the offsets at $932B; each outline point (offset along the wall, height, both low bytes) becomes a vertex in the door's square (entry bytes 2 and 3 into $0440 and $0540), and the new vertices are joined in order by edges ($926E). $70 and $71 hold the last vertex and edge numbers so far."
  },
  {
   "address": 37462,
   "type": "side",
   "text": "page patched by $9235: $04 or $05"
  },
  {
   "address": 37464,
   "type": "line",
   "text": "Page of the store STA $0400,Y at $9256: written by $9235 with 4 (a point's along-wall offset goes to X low, $0400) or 5 (to Y low, $0500). The rest of the loop stores each point's height in $0480 and the door's square in $0440/$0540, and $926E joins the new vertices into a line of edges in $0580/$05C0."
  },
  {
   "address": 37514,
   "type": "line",
   "text": "Door outlines, 13 of them to $932A, each a list of points (offset along the wall, height) ended by $FF, joined in order by $922F; offsets are within the door's grid square (so $50-$B0 is its middle), heights in the low byte of the room's height. This one, for door types 0, 1, 2 and 8 (only 2 is used, by 293 doors): a plain frame open at the bottom, $50,$00 $50,$C0 $B0,$C0 $B0,$00."
  },
  {
   "address": 37523,
   "type": "line",
   "text": "Door type 3 outline (9 doors): the plain frame, then up the right post to a triangle across its upper half, $B0,$60 $80,$A0 $50,$60 $B0,$60."
  },
  {
   "address": 37540,
   "type": "line",
   "text": "Door type 4 outline (2 doors): the plain frame and an upward arrow up its middle, shaft $80,$00 to $80,$A0, head back to $70,$80 and $90,$80."
  },
  {
   "address": 37559,
   "type": "line",
   "text": "Door type 5 outline (2 doors): the plain frame and a downward arrow, head at $80,$00 through $70,$20 and $90,$20, shaft up to $80,$A0."
  },
  {
   "address": 37578,
   "type": "line",
   "text": "Door type 6 outline (38 doors, the transporter rooms among them): a frame with both diagonals, a cross."
  },
  {
   "address": 37591,
   "type": "line",
   "text": "Door type 7 outline (30 doors, transporter rooms too): the plain frame and one diagonal, $B0,$00 to $50,$C0."
  },
  {
   "address": 37602,
   "type": "line",
   "text": "Door type 9 outline (13 doors): a triangle, $30,$00 $80,$C0 $D0,$00. Types 8-15 are locked ($9493) unless object 8 + type is carried, or object 48 ($948E): this one needs object 17, and types 10-15 need objects 18-23, the keys."
  },
  {
   "address": 37609,
   "type": "line",
   "text": "Door type 10 outline (8 doors, key object 18): a trapezium narrowing upwards, $40,$00 $60,$C0 $A0,$C0 $C0,$00."
  },
  {
   "address": 37618,
   "type": "line",
   "text": "Door type 11 outline (6 doors, key object 19): a pentagon, $48,$00 $25,$6B $80,$AC $DB,$6B $B8,$00."
  },
  {
   "address": 37629,
   "type": "line",
   "text": "Door type 12 outline (6 doors, key object 20): straight sides and a pointed top, $50,$00 $50,$A0 $80,$C0 $B0,$A0 $B0,$00."
  },
  {
   "address": 37640,
   "type": "line",
   "text": "Door type 13 outline (6 doors, key object 21): a trapezium widening upwards, $60,$00 $40,$C0 $C0,$C0 $A0,$00."
  },
  {
   "address": 37649,
   "type": "line",
   "text": "Door type 14 outline (6 doors, key object 22): a hexagon, $60,$00 $40,$60 $60,$C0 $A0,$C0 $C0,$60 $A0,$00."
  },
  {
   "address": 37662,
   "type": "line",
   "text": "Door type 15 outline (8 doors, key object 23): straight sides and a bevelled top, $50,$00 $50,$80 $70,$C0 $90,$C0 $B0,$80 $B0,$00."
  },
  {
   "address": 37675,
   "type": "line",
   "text": "Door outline offsets: for door types 0-15, the offset of the type's outline from $928A, read at $923B: $00 $00 $00 $09 $1A $2D $40 $4D $00 $58 $5F $68 $73 $7E $87 $94."
  },
  {
   "address": 37690,
   "type": "line",
   "text": "Room box, the first vertex of each of its 12 edges, read as $933A + Y for Y = 1-12 ($933B-$9346, copied to edges 0-11 at $0580-$058B by $918F): 0 1 2 3 0 1 2 3 4 5 6 7. The byte at $933A itself is the last door-outline offset (type 15)."
  },
  {
   "address": 37702,
   "type": "line",
   "text": "Room box, the second vertex of each edge, $9346 + Y for Y = 1-12 ($9347-$9352, to $05C0-$05CB): 1 2 3 0 4 5 6 7 5 6 7 4. Vertices 0-3 (at the room's height) and 4-7 (at 0) make two rectangles joined by four uprights. The byte at $9346 itself is the previous list's last entry."
  },
  {
   "address": 37715,
   "type": "line",
   "text": "Mirror world, for transporter room $7F on entry ($9145): flips $F1, which swaps the joystick's left and right ($A165) and is EORed in at $A360, $A376, $A3D7, $AA13, $AFE1, $AFFD, $B057 and $B08B (the reversing transporter), and flips bit 6 of $29C0 for objects 1 to $EB (the number carried): it loads each carried object's number into Y but indexes with X, so it flips the wrong objects' bit, which nothing reads. Sets $F0 = $1F, a longer transporter effect, and returns X = $7F for the caller."
  },
  {
   "address": 37748,
   "type": "line",
   "text": "List room objects: shows the gun sight, sprite 0, only while object 40 (the Sights) is carried (bit 7 of $29E8 into $D015), and lists at $2981 onwards every object whose room in $2940 is the current room $CD (0 outdoors), from object $B4 ($3F) down; $B2 = how many. Also sets $C2 = 1. Twelve callers, among them taking an object ($9843), the room exit ($90C6) and the room build ($9162)."
  },
  {
   "address": 37790,
   "type": "line",
   "text": "Keep in room: holds the player inside the room, $20 from each wall: X ($73:$72) between 0.$20 and (X size $0440 - 1).$DF, Y ($79:$78) likewise with the Y size $0540; a stop at the 0 side also zeroes $74 or $7A. Returns in A and $F8 the walls touched as a negative count (0: none); the first pass against a wall starts voice 1 sound $14 ($B958). The main loop then looks for a door there ($8570, $9437)."
  },
  {
   "address": 37914,
   "type": "line",
   "text": "Is object A carried? Searches the carried stack $BEB1-$BEBA (depth $EB) from the most recent down. Out: Z set and X = its slot (0-9) when found; X = $FF with N set when not. Used by script op 12 ($8B3A) and by the dark-room test at $91F4 (object $10, the PHOTON EMITTER)."
  },
  {
   "address": 37925,
   "type": "line",
   "text": "Is object A in the player's location? Searches the location list $2981 to $2980+$B2 (objects whose $2940 equals $CD, built at $9380). Out: Z set and X = its index when found; X = $FF with N set when not. Used at $91F9: a dark room is lit when the PHOTON EMITTER lies in it."
  },
  {
   "address": 37936,
   "type": "line",
   "text": "door_check's refusal (reached only from $949F): prints canned message 0, LOCKED, and returns carry clear, so the door stays shut."
  },
  {
   "address": 37943,
   "type": "line",
   "text": "Underground: may the player pass the wall just touched? Called from the complex loop ($8579) when $939E reports a wall and $B1 is 0; nothing while $F0 is non-zero. Walks the room's door list from ($1B)+5, four bytes a door: flags (bit 7: door in a wall crossed along X; bits 6-4: arrival door in the next room; bits 3-0: type), destination room (0 = the surface), X cell, Y cell; flags 0 or $80 end it. A door matches when the player's mid bytes equal its cell (rounded across the wall, truncated along it), the low byte along the wall is mid-cell ($40-$BF for Y, $28-$A7 for X) and across it near the edge, and the heading ($2C/$2D) rounded to a quarter turn lies along the crossing axis. Types 8-15 need object $10+(type-8) carried unless object $30 is, else door_locked. Open: C set, $08 = destination, $09 = 4 x arrival door + 7 (its offset in that room's data), $C8 = $7F or $FF (from heading and side), SID voice 1 control cleared. Otherwise C clear."
  },
  {
   "address": 38104,
   "type": "line",
   "text": "Eight single-bit masks, $01 to $80 (bit n at $94D8+n). Nothing indexes the table; its one reader is BIT $94DD at $87CD."
  },
  {
   "address": 38109,
   "type": "line",
   "text": "The bit-5 mask ($20) of bit_masks, used as an operand: BIT $94DD at $87CD tests bit 5 of location $F5's $2B00 byte."
  },
  {
   "address": 38112,
   "type": "line",
   "text": "City loop, once a pass ($85A4), skipped while an elevator moves ($CA): ($8C,$8D) = a float of the height for the view-centre offset $A320 applies ($76/16 while $77 = 0, else 16). If the grid square $74/$7A is still the one remembered in $85/$87 only set_view_range runs; otherwise enter_square."
  },
  {
   "address": 38157,
   "type": "line",
   "text": "Sets up the grid square the player stands in. $B9 = $FF (so the view range is rebuilt), $B7 = the map index Y x 16 + X (0 outside the 16 x 16 city, which also leaves 00-00 without a building); a non-zero index loads that location's building (load_building). Falls into set_view_range. Called at start-up ($7287), restart ($80DF), on leaving a complex ($90EA), from $A2B0, and from city_view_update when the square changes."
  },
  {
   "address": 38194,
   "type": "line",
   "text": "Picks the view range from the height. From height $20:00:00 up: the fixed line set at $902A ($8FF8 with Y = 0). Below: $B9 = $2A00[min(height >> 11, 255)], 0 to 63 grid squares (also the far-object range in draw_object), and $8EC2 rebuilds the city-grid lines when it changes. Then $70/$71 = the building's last vertex and edge numbers, and $85/$86/$87 = square X, height high byte, square Y remembered."
  },
  {
   "address": 38261,
   "type": "line",
   "text": "Loads the building of location A (map index) into the vertex and edge tables. Pointer from $2600 (low) / $2700 (high) + A; $F2 = $2B00+A (bit 7: destroyed). Model: last vertex number ($88/$89), last edge number ($8A/$8B), the edge number from which edges take the second line form ($98, $FF none), a rotating-part byte (0 none; else low nibble + 1 rotating vertices $9F, high nibble x 8 the spin step $A2, then centre X and Y mid bytes $A0/$A1). Edges into $0580 (from) and $05C0 (to): one byte of two 4-bit vertex numbers each until a 0 byte, then two bytes each (numbers up to $3F, which reach the city-grid points $9054 keeps in the top slots). Vertices: the rotating ones first, 3 bytes (X radius, height mid, Y radius; radii x 64 as floats into $57A0/$57B0 and $57C0/$57D0), then fixed ones of 2 or 3 bytes (building_coord); every vertex takes the player's square as its high bytes ($0740, $07C0). A destroyed building is flattened at once (collapse_building)."
  },
  {
   "address": 38541,
   "type": "line",
   "text": "Reads the next model byte for load_building: its top two bits are shifted into $06, building a 4-bit height code over a vertex's X and Y bytes; its low six bits c give the mid byte: 0 = $00 and $3F = $FF (the square's edges), else c + $60 ($61-$9E, around the centre $80). Height code 0-14 is the height mid byte; 15 reads one more byte: below $80 the height mid itself, else bits 6-4 mid and bits 3-0 x 16 low."
  },
  {
   "address": 38566,
   "type": "line",
   "text": "Flattens a destroyed building at once: repeats collapse_step until nothing moves. Called by load_building when the location's $2B00 bit 7 is set."
  },
  {
   "address": 38572,
   "type": "line",
   "text": "One step of a building falling down: each vertex 0 to $89 whose height mid byte ($04C0) is above 0 drops by one and moves one unit toward the square's centre $80 in X ($0440) and Y ($0540). Out: A = minus the number moved (Z set once flat). Called by the destruction sequence $879B: each pass at $87B4 while the countdown $F4 runs at the hit location $F5, and $F4 times at $882B after the ANTI TIME BOMB path ($8816) reloads the building; and by collapse_building."
  },
  {
   "address": 38616,
   "type": "line",
   "text": "Transforms and projects the current building's vertices $70 down to 0: $A5CE turns each one (X $0400/$0440/$0740, height $0480/$04C0/$0780, Y $0500/$0540/$07C0) into player-relative floats, $A75C applies the view matrix and perspective and fills that vertex slot."
  },
  {
   "address": 38631,
   "type": "line",
   "text": "Draws the current building's edges $71 down to 0 with draw_edge, vertex pairs from $0580/$05C0. Starts with the OR line form set by $AE02 and switches to the AND form ($ADFC) at edge number $98, the model's second line colour."
  },
  {
   "address": 38662,
   "type": "line",
   "text": "Objects, once a pass (city $85D8, complex $8595): the new key $E9 goes to $B8, and T ($16) or B ($1C) is consumed ($B4B2) so it acts once. Then draw_object for each object in the location list, from $2980+$B2 down to $2981."
  },
  {
   "address": 38696,
   "type": "line",
   "text": "Takes, boards or draws object X (kept in $AF). Model pointer $2800/$2840 into $1D/$1E; offset from the player (object_offset); T or B (take_or_board; if it acted, nothing is drawn). Within one grid square on every axis the model is drawn: offsets less $800 each, vertices read and transformed ($A61F) and projected ($A75C) into slots 0 to n ($97B5), edges drawn ($97CD pairs, $97E1 nibbles). Farther, a single dot ($ADCB) if the object is at or above the player's height, or below it within $B9 squares; else nothing. Model: last vertex number; 3 signed bytes a vertex (X, height, Y, units of 16; objects 0-15 turned by $800A/$801A/$802A); an edge byte n: below $80, n+1 edges of one byte (two 4-bit vertex numbers), else (n AND $7F)+1 edges of two bytes."
  },
  {
   "address": 38741,
   "type": "side",
   "text": "far object: one projected point, drawn as a dot"
  },
  {
   "address": 38794,
   "type": "side",
   "text": "near object: offsets less $800 on each axis, paired with the EOR #$80 of the vertex bytes at $A6F1"
  },
  {
   "address": 38837,
   "type": "side",
   "text": "vertex loop: read, transform ($A61F), project into slot $19 ($A75C)"
  },
  {
   "address": 38861,
   "type": "side",
   "text": "edges stored as byte pairs"
  },
  {
   "address": 38881,
   "type": "side",
   "text": "edges stored as two 4-bit vertex numbers per byte"
  },
  {
   "address": 38906,
   "type": "line",
   "text": "T and B for object $AF (key in $B8). T: within 256 units on every axis; refused (C set) if its $29C0 bit 4 is set (fixed; the KITCHEN SINK, object $2F, overrides), or bit 5 (heavy: canned message 2, TOO HEAVY; the ANTIGRAV, object $1B, overrides), or 10 objects are already carried. Taken: pushed on the carried stack ($EB+1, into $BEB0+$EB), $29C0 bit 7 set, $2940 = $FF, object_event, list rebuilt ($9374), C clear. B: on foot only ($A9 bit 7), objects 0-7, within 512 units: the player takes its X and Y, the heading from $802A, $A9 = its number, its motion record (load_motion_record), the view matrix ($A320), speed zeroed, the craft taken out of the world ($2940 = $FF); C clear."
  },
  {
   "address": 39089,
   "type": "line",
   "text": "What taking or boarding object X triggers, from its $29C0 flags in A: bit 3 prints its name (canned message X, when the window is free, $8DA4), bit 2 starts script X as a call ($8A8C); either, both or neither. Then sound 0 ($B94D) with X = $AF."
  },
  {
   "address": 39112,
   "type": "line",
   "text": "L, and the end of a hard landing ($A0DA): leave the craft $A9. Nothing on foot ($A9 bit 7) or airborne ($7F = 0). Roll $28/$29 cleared, pitch $2A/$2B = $200 (level), speed stopped (stop_craft), $A9 = $80. Craft 0-7: heading >> 4 kept in $802A+n, then placed at the player (place_object). Mode 9, falling: nothing placed. Mode 10, the intro's descent: object 10 is placed, the intro's crashed ship left at the crash site."
  },
  {
   "address": 39166,
   "type": "line",
   "text": "D: drops the object taken last. Only when landed ($7F non-zero) unless object $38, the pyramid, is carried (then dropped objects stay at the player's height); nothing when none is carried ($EB = 0). Pops it from $BEB0+$EB, clears its $29C0 bit 7, sound 0, then place_object."
  },
  {
   "address": 39195,
   "type": "line",
   "text": "Puts object Y in the current location ($2940 = $CD) at the player's X and Y (all three bytes) and height (mid and high from $76/$77, low 0), then rebuilds the location list ($9374). Shared by drop_object and leave_craft."
  },
  {
   "address": 39248,
   "type": "line",
   "text": "Sets the exponent bytes of the throttle ($ED) and speed ($27) floats to $88, which is effectively zero. Called at start-up, restart, boarding, leaving, and by the E key ($B47B)."
  },
  {
   "address": 39255,
   "type": "line",
   "text": "Object X's position minus the player's, three 24-bit differences (low, mid, high): X ($2880/$2480/$2540 less $72-$74) into $D5-$D7, height ($28C0/$24C0/$2580 less $75-$77) into $D8-$DA, Y ($2900/$2500/$25C0 less $78-$7A) into $DB-$DD."
  },
  {
   "address": 39322,
   "type": "line",
   "text": "Is the offset in $D5-$DD inside a cube? X (low) and Y (high) give a limit in units of 256; each axis's absolute value, shifted right 8 bits, is compared with it (abs_compare). Out: C clear when all three are below it, C set at the first that is not. Limits used: 1 for T, 2 for B, $100 (one grid square) and $B9 x $100 in draw_object."
  },
  {
   "address": 39358,
   "type": "line",
   "text": "Makes the signed 24-bit value A (low), X (mid), Y (high) positive and compares its mid and high bytes with $08/$09. Out: C set when it is at least that limit."
  },
  {
   "address": 39389,
   "type": "line",
   "text": "Draws the edge between vertex slots X and Y, clipped to the 160 x 136 view. Per slot the projector ($A75C) left: clip flags $0700 (bit 7 behind the eye, bit 0 X off screen, bit 1 Y off screen), screen X and Y $0680/$06C0, projected X and Y as floats $0600/$03C0 and $7600/$0640, view-space X, Y, depth floats $0100/$0140, $0180/$02C0, $0340/$0380. Both ends behind: nothing. The start is an end on screen if there is one, else the end in front, else (both off screen) the farther. Both in front: the direction is the difference of the projected positions; end behind: edge_end_behind. Slope $68/$69 = dY/dX, $66 = minor/major x 256, $67 = signs and steepness; then edge_octant, edge_clip_start, edge_plot."
  },
  {
   "address": 39572,
   "type": "side",
   "text": "both ends in front: dX, dY from the projected positions"
  },
  {
   "address": 39724,
   "type": "line",
   "text": "draw_edge when the end vertex is behind the eye: the screen direction is taken from view space as (x2 - x1 x d2/d1, y2 - y1 x d2/d1), the way the projected line heads as the edge nears the eye's plane; signs to $67 and slope to $68/$69 as for a visible end."
  },
  {
   "address": 39952,
   "type": "line",
   "text": "Picks the line routine: $67 (bit 0 dY negative, bit 1 dX negative, bit 2 steep) indexes $BBD0 for the octant 0-7, whose routine address ($BC38/$BC40) goes to $04/$05. If the end is not on screen, the end point becomes the screen corner the line heads for ($BBD8/$BBE0: X 0 or 159, Y 0 or 135), so the routine runs to the edge. A start on screen goes straight to edge_plot."
  },
  {
   "address": 39959,
   "type": "side",
   "text": "octant routine address into $04/$05"
  },
  {
   "address": 39990,
   "type": "line",
   "text": "The start is off screen but in front: its region (clip flags and the signs of its projected X and Y through $BBE8) with the direction ($67 >> 1) indexes $BBF8 for the screen edges the line can enter by (bit 0 right X=159, 1 bottom Y=135, 2 left X=0, 3 top Y=0), 0 = reject; an end in front is tested the same way against $BC18. Each allowed edge is tried in turn: the crossing is found from the start's projected position and the slope against the edge values $90-$97 (left, right, top, bottom; $21 the scale exponent) and kept if it falls inside the other axis's range; it becomes the start. No crossing: nothing is drawn."
  },
  {
   "address": 40333,
   "type": "line",
   "text": "Hands the line to the octant routine: X = start column $6A, Y = start row $6B, $08 = $80 (the fraction accumulator at one half), JMP ($0004). The routine draws toward $6C/$6D, stepping the minor axis by $66/256."
  },
  {
   "address": 40341,
   "type": "side",
   "text": "JMP ($0004): into the octant routine"
  },
  {
   "address": 40345,
   "type": "line",
   "text": "Copies motion record A (16 bytes at $9DAD + 16 x A) into $BEA0-$BEAF. A is the motion mode $A9: 0-7 the craft (objects 0-7), 9 falling, 10 the intro's descent. $BEA0/$BEA1 is the motion routine that JMP ($BEA0) at $A178 runs each pass while $A8 = 0 and $A9 is below $80."
  },
  {
   "address": 40355,
   "type": "side",
   "text": "writes all of $BEA0-$BEAF, the motion routine pointer $BEA0/$BEA1 included"
  },
  {
   "address": 40365,
   "type": "line",
   "text": "Motion records, 16 bytes each, indexed by $A9 (load_motion_record). Flight layout: +0 motion routine, +2 float turn damping, +4 float turn step, +6 pitch step, +7 bank (roll = turn rate x 2^(n/4); $80 up none), +8 float climb factor, +10 float speed damping, +12 read by no code found ($10 in records 0-7), +13 ceiling (height high byte; above it the climb halves per unit), +14 float thrust. Record 0, craft 0: motion_flight, turn damping 0.94, turn step 1, pitch step 8, climb 0.5, speed damping 0.5, ceiling $5A, thrust 0.91."
  },
  {
   "address": 40381,
   "type": "line",
   "text": "Record 1, craft 1 (the DOMINION DART, for sale at 08-08): motion_flight like record 0 but ceiling $0A and thrust 0.39; carrying the POWERAMP (object $1C) in it raises the ceiling to $5A and doubles the throttle ($9F8A, $A050)."
  },
  {
   "address": 40397,
   "type": "line",
   "text": "Record 2, craft 2: motion_ground, a ground vehicle; turn damping near 0 (no turn memory), turn step 16, pitch step 0, climb 0.25, speed damping 0.5, ceiling $01, thrust 0.20."
  },
  {
   "address": 40413,
   "type": "line",
   "text": "Record 3, craft 3: motion_flight; turn damping 0.89, turn step 2, pitch step 12, climb 1.0, speed damping 0.75, ceiling $5A, thrust 0.20."
  },
  {
   "address": 40429,
   "type": "line",
   "text": "Record 4, craft 4: motion_flight without banking (+7 = $88); turn step 2, pitch step 8, climb 1.0, speed damping 0.25, ceiling $01, thrust 0.39."
  },
  {
   "address": 40445,
   "type": "line",
   "text": "Record 5, craft 5: motion_ground, a ground vehicle; turn damping 0.94, turn step 1, speed damping 0.5, ceiling $01, thrust 0.91."
  },
  {
   "address": 40461,
   "type": "line",
   "text": "Record 6, craft 6: motion_flight like record 0 (ceiling $5A) with thrust 0.78."
  },
  {
   "address": 40477,
   "type": "line",
   "text": "Record 7, craft 7 (the interstellar ship; script 7 tests $A9 = 7): motion_starship, which reads none of the flight values here."
  },
  {
   "address": 40493,
   "type": "line",
   "text": "Record 8, never loaded whole: at a landing with the pitch at $200-$3FF, $A0CC levels the pitch and copies its bytes 2-11 over the craft's (turn damping near 0, turn step 16, pitch step 1, climb 1.0, speed damping 0.25), keeping the routine: the handling on the ground. Take-off reloads the craft's own record ($A0FF)."
  },
  {
   "address": 40495,
   "type": "line",
   "text": "Record 8 bytes 2-11, the ground handling: $A0CC-$A0D5 (LDA $9E2F,X) copies these ten bytes to $BEA2-$BEAB when a craft lands, leaving its motion routine in place."
  },
  {
   "address": 40509,
   "type": "line",
   "text": "Record 9, falling (set at $898A, $90CD, $A1E3): motion_fall; +2 = $2F taken from the height mid byte each pass, +3/+4/+5 = $10/$15/$0D added to roll, pitch and heading, so the view tumbles."
  },
  {
   "address": 40525,
   "type": "line",
   "text": "Record 10, the intro's descent (set at start-up, $7246): motion_descent_1; +2 = $20, the fall per pass of its last stage (motion_fall), +3 = $08 added to the roll each pass."
  },
  {
   "address": 40541,
   "type": "line",
   "text": "Motion routine of record 7: JMP $AA62, which holds the pitch at $1xx until $BEFE is set (script 7 pokes it at $1123 when the launch goes ahead, after PRESS Y TO LAUNCH and the advert check), then flies the starfield."
  },
  {
   "address": 40544,
   "type": "line",
   "text": "Second stage of the intro's descent (pointer set at $9E8D): with the height high byte $77 at 0 it goes on as motion_fall (record 10's $20 a pass); else the height $77:$76 drops by the descent step for $77 >> 1, then motion_spin."
  },
  {
   "address": 40550,
   "type": "line",
   "text": "First stage of the intro's descent, from height $7F:00 (start-up): the height $77:$76 drops by the descent step for $77 >> 3 each pass while height_to_float shows heights x 8. When $77 reaches 0 it patches height_to_float to a plain JMP $8510, sets $77 = 6 (about where the x 8 view had got to) and points the motion routine at motion_descent_2. Each pass ends in motion_spin."
  },
  {
   "address": 40580,
   "type": "side",
   "text": "self-modifying: JSR $8510 at $9E93 becomes JMP $8510"
  },
  {
   "address": 40589,
   "type": "side",
   "text": "motion pointer becomes $9E60 (high byte $9E left by record 10)"
  },
  {
   "address": 40595,
   "type": "line",
   "text": "Height offset to float for the far views (city-grid points $9068, object dots $976C): $8510, then 12 added to the exponent byte (x 8) during the intro's first descent stage; $9E84 rewrites the JSR as JMP $8510 when that stage ends, and nothing restores it."
  },
  {
   "address": 40606,
   "type": "line",
   "text": "Intro descent steps, split word table (low bytes here, high at descent_step_hi): taken from the height $77:$76 each pass by motion_descent_1 (index $77 >> 3) and motion_descent_2 (index $77 >> 1): $0040, $0080, then $80 more a step to $0700, and $0800 at 15."
  },
  {
   "address": 40622,
   "type": "line",
   "text": "High bytes of the intro descent steps (descent_step_lo holds the low bytes and the values)."
  },
  {
   "address": 40638,
   "type": "line",
   "text": "Falling (record 9) and the intro's last stage: the height mid byte loses $BEA2 each pass; below 0 goes to crash_landing, else motion_spin."
  },
  {
   "address": 40654,
   "type": "line",
   "text": "Touch-down as a crash: $FA = 0, carry set, to $A0AF (height 0, on the ground; with carry set it calls leave_craft and sets $F9 = 2). From motion_fall and from motion_ground when a ground craft comes down."
  },
  {
   "address": 40662,
   "type": "line",
   "text": "Adds $BEA3, $BEA4, $BEA5 to roll $28/$29, pitch $2A/$2B and heading $2C/$2D (16-bit adds, not masked), then $A12B, which turns the building's rotating parts. Tail of motion_fall and both descent stages."
  },
  {
   "address": 40701,
   "type": "line",
   "text": "Ground craft (records 2, 5): pitch step forced to 0, eye height low byte $75 = $3F, then motion_flight. Off the ground ($7F = 0) the height high byte drops by one a pass; below 0 goes to crash_landing, which throws the player out."
  },
  {
   "address": 40727,
   "type": "line",
   "text": "Flight model of the aircraft (records 0, 1, 3, 4, 6; record 8's values on the ground), each pass through JMP ($BEA0); an elevator ride ($CA) goes to $A24A instead. Turn rate $22/$23 (float) x turn damping $BEA2/3, plus or minus the turn step $BEA4/5 while the stick ($80) is pushed left or right; the pitch $2A/$2B (10 bits) moves by $BEA6 with the stick up or down. Speed $26/$27 = (speed + throttle $EC/$ED x thrust $BEAE/F) x speed damping $BEAA/B; the throttle counts double in craft 1 with the POWERAMP carried. Y ($78-$7A) and X ($72-$74) then move by speed x cos pitch x cos or sin heading ($38/$39, $3E/$3F, $3C/$3D from $A544). Continues past $A000 to $A13C: take-off speed, climb (lift $BEA8/9, ceiling $BEAD), landing and crash, bank."
  },
  {
   "address": 40838,
   "type": "side",
   "text": "throttle x thrust + speed, x speed damping"
  },
  {
   "address": 40889,
   "type": "side",
   "text": "Y += speed x cos pitch x cos heading"
  },
  {
   "address": 40936,
   "type": "side",
   "text": "X += speed x cos pitch x sin heading"
  },
  {
   "address": 40961,
   "type": "line",
   "text": "Vehicle model, part 2 (it starts at $9F17, entered by JMP ($BEA0) at $A178): X ($74:$73:$72) += the whole part (floor, $84A7 at $9FFE) of v*cos(pitch)*sin(heading), sign-extended; v is the speed float $26/$27. Level pitch is 512, where cos = -1, so a positive v moves north at heading 0 and west at 256. Ground hold: when the grounded flag $7F is set, unless the craft is on the Colony Craft deck ($FA) and off its pad ($A13D carry set), a speed under 128 units a pass (exponent byte of $27 under $1C, either sign) sets the pitch level ($2B:$2A = $200) and skips the height step (JMP $A102); 128 or more lets the craft pitch and climb, which is take-off."
  },
  {
   "address": 40983,
   "type": "side",
   "text": "grounded?"
  },
  {
   "address": 40991,
   "type": "side",
   "text": "on the deck: off the pad starts a fall"
  },
  {
   "address": 40996,
   "type": "side",
   "text": "|v| >= 128: free to pitch and climb"
  },
  {
   "address": 41004,
   "type": "side",
   "text": "under take-off speed: level, no height step"
  },
  {
   "address": 41015,
   "type": "line",
   "text": "Vehicle model, part 3, height step: height ($77:$76:$75) += floor(v*sin(pitch)*k), sign-extended, k being the float with mantissa $BEA8 and exponent byte $BEA9. Climbing above the ceiling ($77 over $BEAD; $5A instead in vehicle 1 while object 28, the POWERAMP, is carried: $29DC bit 7), k becomes (1+$BEA8/256)*2^($BEAD-$77): it halves for each 65536 above, and from 32 above it is nil (2^-30 or less). Descending is never damped. Then: negative or under 64 goes to the touchdown test $A09A, a non-zero high byte to the Colony Craft check $A0E2 (which wants $40), anything else is airborne ($A0F7)."
  },
  {
   "address": 41035,
   "type": "side",
   "text": "descending: never damped"
  },
  {
   "address": 41037,
   "type": "side",
   "text": "the ceiling, a height high byte"
  },
  {
   "address": 41051,
   "type": "side",
   "text": "POWERAMP carried in vehicle 1: ceiling $5A"
  },
  {
   "address": 41065,
   "type": "side",
   "text": "far above the ceiling: no climb"
  },
  {
   "address": 41114,
   "type": "line",
   "text": "Vehicle model, part 4: the craft reached the ground (height under 64, or negative). Crash (carry set into $A0AF) if this pass's height step was 256 or more (the exponent byte in $09, left by the multiply at $A06E, 8 or more), or if the pitch taken as $2B:$2A >> 2 is 160 or more: pitch 640-1023, nose down more than 45 degrees or past the vertical. Pitch 0-639, including nose up and upside down, lands safely. Horizontal speed is not tested."
  },
  {
   "address": 41118,
   "type": "side",
   "text": "height step >= 256 a pass: crash"
  },
  {
   "address": 41133,
   "type": "side",
   "text": "pitch >= 640: crash"
  },
  {
   "address": 41135,
   "type": "line",
   "text": "Vehicle model, part 5, the landing itself; carry set means a crash. Also entered by JMP from $9ED3 with carry set, at the end of a fall ($9EBE: the tumble from the Colony Craft, a ground vehicle off its deck via $9F13, and the opening descent). Height = 63 ($00:$00:$3F), roll $29:$28 = 0, grounded flag $7F = $3F. A pitch of 512-1023 is levelled to 512 and the ground handling loaded: the 10 bytes at $9E2F (vehicle record 8, bytes 2-11) into $BEA2-$BEAB: turning 16 a pass with no inertia, pitch 1 a pass, speed kept x0.25 a pass. Safe: on to $A102. Crash: JSR $98C8 (leave the vehicle, as the L key does), $F9 = 2 (on the second pass after, $AFCA calls the crash effect $B242), RTS."
  },
  {
   "address": 41156,
   "type": "side",
   "text": "pitch under 512 (nose up): left as it is"
  },
  {
   "address": 41178,
   "type": "side",
   "text": "crash: out of the vehicle"
  },
  {
   "address": 41186,
   "type": "line",
   "text": "Vehicle model, part 6: height high byte positive and non-zero. At exactly $40 and over the Colony Craft pad ($A13D: square 08-08, X and Y middle bytes $68-$77, height middle byte $FC or more) the craft lands on the deck: $76 = $FF, deck flag $FA = $FF, then the landing at $A0B6 with no crash test (height $40:$FF:$3F, carry clear). Otherwise airborne ($A0F7). The deck is solid only for heights $40FC00-$40FFFF, so a craft climbing into that band over the pad is also put on it."
  },
  {
   "address": 41188,
   "type": "side",
   "text": "only at height $40xxxx"
  },
  {
   "address": 41207,
   "type": "line",
   "text": "Vehicle model, part 7, airborne: grounded flag $7F = 0, deck flag $FA = 0, and the vehicle's own 16-byte record reloaded into $BEA0-$BEAF (JSR $9D99 with A = vehicle number $A9), which undoes the ground handling a landing loads. Runs on every airborne pass."
  },
  {
   "address": 41218,
   "type": "line",
   "text": "Vehicle model, part 8, turn and bank: heading $2D:$2C += the whole part of the turn rate $22/$23, a float the stick steers at $9F1E-$9F58 (the sign, added as carry, turns $84A7's ones' complement into two's complement; $2D is not masked here, its readers use the low 2 bits). Airborne only ($7F = 0): roll $29:$28 = whole part of turn rate * 2^($BEA7/4), x4 for the flying craft ($BEA7 = 8); a negative $BEA7 (vehicle 4) gives no bank. Falls into $A12B."
  },
  {
   "address": 41226,
   "type": "side",
   "text": "sign to carry: two's complement"
  },
  {
   "address": 41243,
   "type": "side",
   "text": "bank scale; negative: no bank"
  },
  {
   "address": 41259,
   "type": "line",
   "text": "Last step of every movement model (JMP from $9EFA and $A1EA, fall-through from $A129): unless bit 7 of $F2 is set (the current location's flags, $2B00 + location, loaded at $9583), the spin angle $9A:$99 += $A2, the spin rate from the location's model header ($95AC). $A544 turns $99 into the sine and cosine that $A4B2 uses."
  },
  {
   "address": 41277,
   "type": "line",
   "text": "Carry clear when the player is over the Colony Craft's pad: grid square 08-08 ($74 = $7A = 8), X and Y middle bytes $73 and $79 both $68-$77 (a square 4096 units a side), height middle byte $76 at least $FC; carry set otherwise. The height high byte is not checked. Callers: the deck landing ($A0E6), a grounded craft ($A01F) and walking ($A1DA), the last two only with the deck flag $FA set."
  },
  {
   "address": 41317,
   "type": "line",
   "text": "Per-pass movement, called by both main-loop branches ($859B, $85DE) just after $B2FE reads the stick. With the mirror flag $F1 set (toggled at $9353, a transporter) stick left and right are exchanged through $A17B, so turning matches the mirrored view. On foot ($A9 bit 7) or underground ($A8 non-zero): the walking model $A18B. Otherwise the vehicle's own model by JMP ($BEA0), the address $9D99 copies from the vehicle record: $9F17 flying craft, $9EFD ground vehicles, $9E5D space (to $AA62), $9EBE the fall from the Colony Craft, $9E66 then $9E60 the opening descent."
  },
  {
   "address": 41323,
   "type": "side",
   "text": "exchange left and right"
  },
  {
   "address": 41336,
   "type": "side",
   "text": "$9F17 craft, $9EFD ground, $9E5D space, $9EBE fall, $9E66/$9E60 intro"
  },
  {
   "address": 41339,
   "type": "line",
   "text": "Stick remap for the mirrored view, 16 bytes indexed by the joystick nibble in $80 (bit 0 up, 1 down, 2 left, 3 right; 0 = pushed): each entry is its index with bits 2 and 3 exchanged. Read only at $A16B, when $F1 is set."
  },
  {
   "address": 41355,
   "type": "line",
   "text": "Walking model: on foot anywhere, and in a vehicle while underground (turning only). During an elevator ride ($CA non-zero) the ride $A24A runs instead. On foot, stick up steps forward and down steps back ($A1ED with A = 1 or 0); left adds and right subtracts $AC to the heading $2D:$2C (16, set at start-up: 1/64 turn a pass). On the Colony Craft deck ($FA set), leaving the pad ($A13D carry set) starts the fall: vehicle 9 ($A9 = 9, record loaded by $9D99: the tumbling descent $9EBE), $A8 = 0. Then $A12B."
  },
  {
   "address": 41368,
   "type": "side",
   "text": "stick up: forward"
  },
  {
   "address": 41379,
   "type": "side",
   "text": "stick down: back"
  },
  {
   "address": 41390,
   "type": "side",
   "text": "stick left: heading + $AC"
  },
  {
   "address": 41411,
   "type": "side",
   "text": "stick right: heading - $AC"
  },
  {
   "address": 41439,
   "type": "side",
   "text": "walked off the Colony Craft: fall"
  },
  {
   "address": 41453,
   "type": "line",
   "text": "One walking step: A = 1 forward, 0 back, flips the sign bit of the step length ($AA mantissa, $AB exponent: the float 80 set at $724D), so forward is -80. Y ($7A:$79:$78) += floor(step*cos heading), X ($74:$73:$72) += floor(step*sin heading), sign-extended: forward at heading 0 is north (Y falls), 256 west, 512 south, 768 east. Afterwards counts down $B1 (set to 2 at $8587 after an underground room change)."
  },
  {
   "address": 41546,
   "type": "line",
   "text": "Elevator ride, run instead of any movement while $CA is non-zero (bit 7 set going down; the E key sets it at $B470). The panel interrupt ($BA7B, $BADD) runs the ride's clock: stage $CC (13 at the top) and fraction $CB ($00-$84). Height $76:$75 = 128*$CC + 64 + ($CB*221 >> 8), redone if $CB changed meanwhile, less 1792 when that is 1536 or more (the top stages sit around ground level), then -6 going down or +38 going up; $77 = 0 or $FF. Down on the surface, stage 8 enters room $CD (the lift's number, 1-8, set by the E key): $90BE with $08 = $CD and $09 = 7, colours $A5/$A6 from $C4/$C5, middle bytes $73 = $79 = 8, $A8 = 1, $FA = 0. Down underground, under height 128 the ride stops ($BB2F) at 128. Up underground, stage 12 comes out at the lift of square ($B4B6+$CD, $B4BE+$CD), middle bytes $71, low bytes 0, $A8 = 0, $CD = 0 ($950D, $9374, $B232). On the surface with $FA set (room 8's lift, at 08-08) the height is raised by $40FF00, to the Colony Craft deck."
  },
  {
   "address": 41597,
   "type": "side",
   "text": "going down?"
  },
  {
   "address": 41618,
   "type": "side",
   "text": "underground, stage 12: out on the surface"
  },
  {
   "address": 41684,
   "type": "side",
   "text": "surface, stage 8: into the complex"
  },
  {
   "address": 41722,
   "type": "side",
   "text": "underground going down: stop at height 128"
  },
  {
   "address": 41746,
   "type": "side",
   "text": "Colony Craft lift: +$40FF00"
  },
  {
   "address": 41760,
   "type": "line",
   "text": "View matrix for the full transform $A75C; skipped when on foot with no elevator moving. With roll r ($28), pitch p ($2A), heading h ($2C) from $A544, applied to (X, height, Y) relative to the eye: x' row $40/$42/$44 = (cos r cos h + sin r sin p sin h, -sin r cos p, -cos r sin h + sin r sin p cos h), signs flipped by the mirror flag $F1; y' row $46/$48/$4A = (sin r cos h - cos r sin p sin h, cos r cos p, -(sin r sin h + cos r sin p cos h)); depth row $4C/$4E/$50 = (cos p sin h, sin p, cos p cos h). Projection centre $8E = 80 + round($8C*$42), $8F = 68 + round($8C*$48); $8C ($94E0) is height/4096 up to 16, so the centre climbs up to 16 pixels with altitude. Clip window relative to it, floats: $90 = -$8E, $92 = 159-$8E, $94 = -$8F, $96 = 135-$8F (the view is 160 by 136)."
  },
  {
   "address": 41869,
   "type": "side",
   "text": "screen x of the centre"
  },
  {
   "address": 42041,
   "type": "side",
   "text": "screen y of the centre"
  },
  {
   "address": 42162,
   "type": "line",
   "text": "Turns the spinning vertices of the current location's building: each of the first $9F vertices (count from the model header, $959C) has its offset from the centre ($57A0/$57B0 X and $57C0/$57D0 Y, floats set at $960B-$9634, 64 units per model unit) rotated by the spin angle $99 (sin $9B, cos $9D): X = x cos - y sin, Y = x sin + y cos. The whole parts become the vertex's X low and middle ($0400, $0440 + $A0) and Y low and middle ($0500, $0540 + $A1). Called each surface pass ($85AA) and at start-up ($7280); does nothing when $9F is 0."
  },
  {
   "address": 42308,
   "type": "line",
   "text": "Trigonometry for the pass, from the 10-bit angles (1024 a turn) through $841F (sine) and $841E (cosine), all floats: roll $29:$28 gives sin $2E, cos $30, tan $32, cot $34; pitch $2B:$2A gives sin $36, cos $38, tan $3A; heading $2D:$2C gives sin $3C, cos $3E; spin $9A:$99 gives sin $9B, cos $9D. The table is offset half a unit, so sin 0 is 0.003. Called by both main-loop branches ($8566, $85A1); the tangents serve the horizon ($AFF7-$B04C)."
  },
  {
   "address": 42446,
   "type": "line",
   "text": "Vertex $19 of the current location or room, relative to the eye, as floats for $A75C: X = ($0740:$0440:$0400) - ($74:$73:$72) into $52/$53, height = ($0780:$04C0:$0480) - ($77:$76:$75) into $54/$55, Y = ($07C0:$0540:$0500) - ($7A:$79:$78) into $56/$57; 24-bit differences converted by $8510. Called for every vertex by $96D8."
  },
  {
   "address": 42527,
   "type": "line",
   "text": "Next vertex of an object's model relative to the eye: reads three signed bytes (x, height, y) at ($1D) + $AD + 1, leaving $AD on the last; $A6AD orients them and makes 12-bit offsets (x16, +2048), which are added to the object's relative position $D5-$DD (lowered by 2048 per axis at $978A) giving floats $52/$53, $54/$55, $56/$57 for $A75C. Called by $97B5 for each vertex."
  },
  {
   "address": 42619,
   "type": "line",
   "text": "Centre of city square A (row*16 + column) relative to the eye, for the points $9054 projects: X = (column:$80:$00) - ($74:$73:$00) into $52/$53, Y = (row:$80:$00) - ($7A:$79:$00) into $56/$57, the eye's low bytes ignored. The height $54/$55 stays as the caller set it (at $905C: minus the eye height, times 8 by $9E93)."
  },
  {
   "address": 42669,
   "type": "line",
   "text": "Orients and scales one model vertex (signed bytes: x $CF, height $D1, y $D3). For objects 0-15 ($AF) it rotates by the object's three angles (64 a turn) with $A728: $802A+obj in the x-y plane (about the vertical), then $801A+obj in the height-y plane, then $800A+obj in the x-height plane; an angle of 0 is skipped. Then each byte with bit 7 flipped (0-255 for -128..127), times 16, is an unsigned 12-bit offset: $D0:$CF, $D2:$D1, $D4:$D3."
  },
  {
   "address": 42792,
   "type": "line",
   "text": "Rotates the signed byte pair (X, Y) by angle A (64 a turn): $8434 puts 127*sin A in $BEBE and 127*cos A in $BEBF, $82D3 multiplies signed bytes (a*b/128); returns X = X cos - Y sin and Y = Y cos + X sin, at 127/128 of true size. Uses $0A-$0C."
  },
  {
   "address": 42844,
   "type": "line",
   "text": "Transforms and projects one vertex into slot $19; input: its position relative to the eye, floats $52 (X), $54 (height), $56 (Y). On foot or underground: the heading-only $A979. Otherwise, with $A320's matrix and inline log-table multiplies (as $82FA): depth z = row $4C/$4E/$50 into $5C/$5D, $6E = $80 if z is negative (behind); x' = row $40/$42/$44 into $58/$59; in front, x'/z into $5E/$5F and screen x $6A = $8E + round(x'/z * 2^($21/4)) ($21 = $18: times 64), $6E = 1 if that is outside 0-159 or overflows. y' = row $46/$48/$4A (from $A881), then the shared tail $A8E9."
  },
  {
   "address": 42968,
   "type": "side",
   "text": "$80 = behind the eye"
  },
  {
   "address": 43129,
   "type": "side",
   "text": "off the 160 columns"
  },
  {
   "address": 43241,
   "type": "line",
   "text": "Tail shared by both projections, y' in X/Y and $08/$09: doubled into $5A/$5B (multicolour pixels are twice as wide as they are tall); in front, 2y'/z into $60/$61 and screen y $6B = $8F + round(2y'/z * 2^($21/4)), bit 1 of $6E set if outside 0-135. Stores slot $19: flags $0700 = $6E (bit 7 behind, bit 0 x off, bit 1 y off); in front only, x'/z $0600/$03C0, 2y'/z $7600/$0640, screen x $0680, screen y $06C0; always x' $0100/$0140, 2y' $0180/$02C0, depth $0340/$0380, for the line clipper $99DD."
  },
  {
   "address": 43305,
   "type": "side",
   "text": "off the 136 lines"
  },
  {
   "address": 43385,
   "type": "line",
   "text": "Heading-only projection for walking and underground (no pitch or roll), same slot $19 and outputs as $A75C: depth z = -(X sin h + Y cos h) into $5C/$5D, $6E = $80 if behind; x' = X cos h - Y sin h, sign flipped by $F1, into $58/$59; in front, x'/z into $5E/$5F and screen x $6A = $8E + round(x'/z * 2^($21/4)), $6E = 1 off 0-159; y' = -height, then JMP $A8E9. The brief's PC samples of play at $A9A0-$A9EF fall in its multiplies."
  },
  {
   "address": 43618,
   "type": "line",
   "text": "The escape into space: craft 7's per-pass handler (the interstellar ship; its descriptor at $9E1D points to JMP $AA62 at $9E5D, taken by JMP ($BEA0) at $A178). During an elevator ride ($CA non-zero) it runs $A24A, as the handler $9F17 shared by six other craft does. Before launch ($BEFE = 0) it only holds $2B, the pitch angle's quarter-turn byte, at 1. After script 7 pokes $BEFE = 1 (Y at PRESS Y TO LAUNCH, $1123) it never returns: shows the bitmap at $4000 ($C7 = $70) with no double buffering, applies colour step 0 ($AC26), marks the 21 stars for respawn (depth exponent byte 1, i.e. negative), clears the view to black ($B1A1 with A = 0) and runs the star loop for ever. A copy of the opening's starfield in the start-up code ($72FA-$74C9), without its deceleration and with the colour steps, the script and the keys added."
  },
  {
   "address": 43669,
   "type": "line",
   "text": "Escape starfield frame: one script operation ($8AB2: the ending's messages), joystick and keys ($B2FE, so CTRL+S saves and CTRL+Q restarts here), the colour countdown ($AC1C); waits for raster line 224, below the view; erases every star by zeroing the whole byte at its last position ($0400 x, $0480 y) in the bitmap at $4000, then plots each at its new position ($0680 x, $06C0 y) with ORA $5660,X (pair %01: the screen matrix's high nibble). Row and column addresses as in the line routines, with $40 in place of $25."
  },
  {
   "address": 43762,
   "type": "line",
   "text": "Moves each star, index in $19 from $AC4A down: last position := new; depth z ($0340 mantissa, $0380 exponent/sign) += speed ($AC4E/$AC4F, negative, $838B adds). If z is negative, or x / z or y / z (x at $0100/$0140, y at $0180/$02C0; $8334 divides, $8477 makes an integer) plus 80 is outside 0-159 or plus 68 outside 0-135, the star is respawned ($ABBD); else the screen position and z are stored. After the last star, once $BEFE is negative, the speed is multiplied by $AC50/$AC51 ($82FA) each pass until its exponent byte is $25."
  },
  {
   "address": 43965,
   "type": "line",
   "text": "New star, index $19: x and y are random 24-bit integers from $ADEF (high byte AND $AC4B minus $AC4C, so -$200000 to $1FFFFF) made floats by $8510; z gets a random mantissa and the exponent byte $AC4D (16384 to 32767). It is then projected at once ($AAF7), and respawned again until it lands in the view."
  },
  {
   "address": 44042,
   "type": "line",
   "text": "Escape starfield: star-loop passes left until the next colour step. $AC1C counts it down and reloads 3; it holds $60 at load, so the second step comes 96 passes after launch."
  },
  {
   "address": 44043,
   "type": "line",
   "text": "Escape starfield: offset of the next colour pair in $AC0C, 0 to $0E in steps of 2 ($AC40); applying the pair at $0E sets $BEFE to $FF, which starts the acceleration."
  },
  {
   "address": 44044,
   "type": "line",
   "text": "Escape starfield colour steps, 8 pairs. First byte to $A3 and $A4 ($60 or $00: the view background stays black); second byte (read at $AC0D) is the view's screen-matrix byte for $BB4F: star pairs %01 take the high nibble, $6 blue, then $B dark grey, then $C grey, brightening before the acceleration starts; %10 pairs black."
  },
  {
   "address": 44045,
   "type": "line",
   "text": "Second byte of each $AC0C pair, read as LDY $AC0D,X: the value $BB4F writes over the view's screen matrix ($60, $B0, $B0, $B0, $B0, $C0, $C0, $C0)."
  },
  {
   "address": 44060,
   "type": "line",
   "text": "Escape starfield, once per star-loop pass: counts $AC0A down; at zero reloads it with 3 and applies the next colour pair (falls into $AC26)."
  },
  {
   "address": 44070,
   "type": "line",
   "text": "Applies colour pair $AC0B of $AC0C: $A3 and $A4 := first byte (background), then $BB4F with Y := second byte fills the view's screen matrix with it and colour RAM with $A6. Advances $AC0B by 2, except after the last pair ($0E), where it sets $BEFE = $FF, which lets $AB97 accelerate the stars."
  },
  {
   "address": 44106,
   "type": "line",
   "text": "Escape starfield: index of the last star, $14 (21 stars, 0-20; also the count for the erase and plot loops)."
  },
  {
   "address": 44107,
   "type": "line",
   "text": "Escape starfield: AND mask, $3F, for the high byte of a new star's random x and y ($ABCB, $ABE8)."
  },
  {
   "address": 44108,
   "type": "line",
   "text": "Escape starfield: $20, subtracted from that masked high byte so that x and y centre on 0 ($ABCF, $ABEC)."
  },
  {
   "address": 44109,
   "type": "line",
   "text": "Escape starfield: exponent byte of a new star's depth, $38 (2 to the 14th, positive): z is 16384-32767 with the random mantissa ($ABFF)."
  },
  {
   "address": 44110,
   "type": "line",
   "text": "Escape starfield: the speed, a float added to every star's depth each pass: mantissa here, exponent and sign at $AC4F. $00/$15 at load is -32; rewritten at $ABAE as it accelerates."
  },
  {
   "address": 44111,
   "type": "line",
   "text": "Exponent/sign byte of the star speed (bit 0 sign, bits 2-7 exponent); the acceleration stops once it reads $25 ($AB9C): -32, then -129.5, then 1.2 % more a pass until exactly -512.0, 126 passes later."
  },
  {
   "address": 44112,
   "type": "line",
   "text": "Escape starfield: mantissa, $03, of the float the speed is multiplied by on each pass after the colour steps ($ABA0)."
  },
  {
   "address": 44113,
   "type": "line",
   "text": "Exponent byte of that multiplier: $08 (times 4) for the first multiplication, so x4.05, then zeroed at $ABA8, so every later pass multiplies by 1 + 3/256."
  },
  {
   "address": 44114,
   "type": "line",
   "text": "Escape starfield: decremented and loaded on each accelerating pass ($ABB4, $ABB7), but nothing tests it; the intro copy's $74C9 is the same dead counter."
  },
  {
   "address": 44115,
   "type": "line",
   "text": "Octant 0 step: x + 1; the error $08 takes the slope $66 by ADC with the carry clear (CPX $6C found x below the end); on overflow y + 1, and y = 136 (off the bottom) ends the line."
  },
  {
   "address": 44129,
   "type": "line",
   "text": "Line drawing, octant 0 (right and down, |dx| >= |dy|). One of eight routines 47 bytes apart, entered by JMP ($0004) at $9D95 through $BC38/$BC40 with X = start x (0-159, multicolour pixels), Y = start y (0-135), $6C = end x ($6D = end y for the steep octants), $66 = slope (|minor| / |major| x 256; $FF for 45 degrees), $08 = $80 (error, half a step), $25 = page of the bitmap being drawn ($40 or $60). A pixel: ($02) = row start = $55D0,Y + 256 x ($5540,Y + $25), i.e. base + (y/8) x 320 + (y AND 7), plus 256 when x >= 128 (the carry of ASL x), and Y = $5700,X = (x/4) x 8 low byte picks the cell; that byte is ORed with $5660,X (pair %01) or ANDed with $7760,X (pair to %00), as $AE06 sets. Y is kept in $06. Plots first, stops after x = $6C, else steps at $AC53."
  },
  {
   "address": 44150,
   "type": "line",
   "text": "Octant 0's pixel instruction, ORA $5660,X (opcode $1D: pair := old OR %01) or AND $7760,X ($3D: pair := %00); the opcode is written at $AE1E."
  },
  {
   "address": 44152,
   "type": "line",
   "text": "Octant 0's mask-table page, the high byte of the pixel instruction's operand: $56 with ORA, $77 with AND (written at $AE06; the low byte stays $60)."
  },
  {
   "address": 44162,
   "type": "line",
   "text": "Octant 1 step: y + 1; the error $08 takes the slope $66 by ADC with the carry clear (CPY $6D found y below the end); on overflow x + 1, and x = 160 (off the right) ends the line."
  },
  {
   "address": 44176,
   "type": "line",
   "text": "Line drawing, octant 1 (down and right, |dy| > |dx|): the same pixel code as $AC61; plots, and stops once the plotted y equals $6D, else steps at $AC82."
  },
  {
   "address": 44197,
   "type": "line",
   "text": "Octant 1's pixel instruction, ORA $5660,X (opcode $1D: pair := old OR %01) or AND $7760,X ($3D: pair := %00); the opcode is written at $AE21."
  },
  {
   "address": 44199,
   "type": "line",
   "text": "Octant 1's mask-table page, the high byte of the pixel instruction's operand: $56 with ORA, $77 with AND (written at $AE09; the low byte stays $60)."
  },
  {
   "address": 44209,
   "type": "line",
   "text": "Octant 2 step: y + 1; the error $08 takes the slope $66 by ADC with the carry clear (y below the end); on overflow x - 1, and x = -1 (off the left) ends the line."
  },
  {
   "address": 44223,
   "type": "line",
   "text": "Line drawing, octant 2 (down and left, |dy| > |dx|): the same pixel code as $AC61; plots, and stops once the plotted y equals $6D, else steps at $ACB1."
  },
  {
   "address": 44244,
   "type": "line",
   "text": "Octant 2's pixel instruction, ORA $5660,X (opcode $1D: pair := old OR %01) or AND $7760,X ($3D: pair := %00); the opcode is written at $AE24."
  },
  {
   "address": 44246,
   "type": "line",
   "text": "Octant 2's mask-table page, the high byte of the pixel instruction's operand: $56 with ORA, $77 with AND (written at $AE0C; the low byte stays $60)."
  },
  {
   "address": 44256,
   "type": "line",
   "text": "Octant 3 step: x - 1; the error $08 takes the slope $66 by SBC with the carry set (CPX $6C found x above the end), so exactly $66; on borrow y + 1, and y = 136 (off the bottom) ends the line."
  },
  {
   "address": 44270,
   "type": "line",
   "text": "Line drawing, octant 3 (left and down, |dx| >= |dy|): the same pixel code as $AC61; plots, and stops once the plotted x equals $6C, else steps at $ACE0."
  },
  {
   "address": 44291,
   "type": "line",
   "text": "Octant 3's pixel instruction, ORA $5660,X (opcode $1D: pair := old OR %01) or AND $7760,X ($3D: pair := %00); the opcode is written at $AE27."
  },
  {
   "address": 44293,
   "type": "line",
   "text": "Octant 3's mask-table page, the high byte of the pixel instruction's operand: $56 with ORA, $77 with AND (written at $AE0F; the low byte stays $60)."
  },
  {
   "address": 44303,
   "type": "line",
   "text": "Octant 4 step: x - 1; the error $08 takes the slope $66 by SBC with the carry set (x above the end), exactly $66; on borrow y - 1, and y = -1 (off the top) ends the line."
  },
  {
   "address": 44317,
   "type": "line",
   "text": "Line drawing, octant 4 (left and up, |dx| >= |dy|): the same pixel code as $AC61; plots, and stops once the plotted x equals $6C, else steps at $AD0F."
  },
  {
   "address": 44338,
   "type": "line",
   "text": "Octant 4's pixel instruction, ORA $5660,X (opcode $1D: pair := old OR %01) or AND $7760,X ($3D: pair := %00); the opcode is written at $AE2A."
  },
  {
   "address": 44340,
   "type": "line",
   "text": "Octant 4's mask-table page, the high byte of the pixel instruction's operand: $56 with ORA, $77 with AND (written at $AE12; the low byte stays $60)."
  },
  {
   "address": 44350,
   "type": "line",
   "text": "Octant 5 step: y - 1; the error $08 takes the slope $66 by ADC with the carry SET by CPY $6D (y above the end), so the error grows by $66 + 1 a step: a 1/256 bias no other octant has; on overflow x - 1, and x = -1 (off the left) ends the line."
  },
  {
   "address": 44364,
   "type": "line",
   "text": "Line drawing, octant 5 (up and left, |dy| > |dx|): the same pixel code as $AC61; plots, and stops once the plotted y equals $6D, else steps at $AD3E."
  },
  {
   "address": 44385,
   "type": "line",
   "text": "Octant 5's pixel instruction, ORA $5660,X (opcode $1D: pair := old OR %01) or AND $7760,X ($3D: pair := %00); the opcode is written at $AE2D."
  },
  {
   "address": 44387,
   "type": "line",
   "text": "Octant 5's mask-table page, the high byte of the pixel instruction's operand: $56 with ORA, $77 with AND (written at $AE15; the low byte stays $60)."
  },
  {
   "address": 44397,
   "type": "line",
   "text": "Octant 6 step: y - 1; the error $08 takes the slope $66 by SBC with the carry set (y above the end), exactly $66; on borrow x + 1, and x = 160 (off the right) ends the line."
  },
  {
   "address": 44411,
   "type": "line",
   "text": "Line drawing, octant 6 (up and right, |dy| > |dx|): the same pixel code as $AC61; plots, and stops once the plotted y equals $6D, else steps at $AD6D."
  },
  {
   "address": 44432,
   "type": "line",
   "text": "Octant 6's pixel instruction, ORA $5660,X (opcode $1D: pair := old OR %01) or AND $7760,X ($3D: pair := %00); the opcode is written at $AE30."
  },
  {
   "address": 44434,
   "type": "line",
   "text": "Octant 6's mask-table page, the high byte of the pixel instruction's operand: $56 with ORA, $77 with AND (written at $AE18; the low byte stays $60)."
  },
  {
   "address": 44444,
   "type": "line",
   "text": "Octant 7 step: x + 1; the error $08 takes the slope $66 by ADC with the carry clear (x below the end); on overflow y - 1, and y = -1 (off the top) ends the line."
  },
  {
   "address": 44458,
   "type": "line",
   "text": "Line drawing, octant 7 (right and up, |dx| >= |dy|): the same pixel code as $AC61; plots, and stops once the plotted x equals $6C, else steps at $AD9C."
  },
  {
   "address": 44479,
   "type": "line",
   "text": "Octant 7's pixel instruction, ORA $5660,X (opcode $1D: pair := old OR %01) or AND $7760,X ($3D: pair := %00); the opcode is written at $AE33."
  },
  {
   "address": 44481,
   "type": "line",
   "text": "Octant 7's mask-table page, the high byte of the pixel instruction's operand: $56 with ORA, $77 with AND (written at $AE1B; the low byte stays $60)."
  },
  {
   "address": 44491,
   "type": "line",
   "text": "Plots one pixel at projected point X ($0680 x, $06C0 y) in the bitmap being drawn ($25), with AND $7760,X (pair to %00, the background colour, the colour of the white lines), unless the point's flag $0700,X is non-zero (not in view). Reached by JMP from $9787 with X = 0, after $A75C has projected a single point."
  },
  {
   "address": 44527,
   "type": "line",
   "text": "Random byte in A. The 16-bit shift register $F3:$E8 moves right one bit, its new top bit being bit 0 XOR bit 3 of $E8 (period 57,337 from the value at load). A returns the old $E8 mixed: bits 7-0 = e2, e1^e7, e0^e6, C^e5, e7^e4, e6^e3, e5^e2, e4^e1, bit 4 depending on the caller's carry. Callers: script op 10 ($8AE5) and 27 ($8D34), both starfields, $85F9-$860F, $910E, $B953."
  },
  {
   "address": 44540,
   "type": "line",
   "text": "Sets the eight line routines to AND $7760,X: a drawn pixel's pair becomes %00, the background colour $A3 (white on the surface, the wire-frame lines). Called at $8592, $85D5, $96F4."
  },
  {
   "address": 44546,
   "type": "line",
   "text": "Sets the eight line routines to ORA $5660,X: a drawn pixel's pair gets bit %01, so sky pairs (%01) do not change, ground pairs (%10) become %11, the colour-RAM colour $A6, and %00 becomes %01. Called at $858C, $9054, $96EB."
  },
  {
   "address": 44550,
   "type": "line",
   "text": "Writes A (the mask table's page, $56 or $77) and X (the opcode, $1D ORA abs,X or $3D AND abs,X) into the pixel instruction of all eight line routines ($AC76 to $ADC1, 47 bytes apart)."
  },
  {
   "address": 44599,
   "type": "line",
   "text": "Display mode 'curtain from the top', split at raster line Y + 50 (Y = 0-$84). Patches the line-0 handler $B9BB to text mode ($B9C2 := $1B; $D016 stays multicolour) with $D018 from $F6 ($B9BD; $F6 holds $7E: the screen matrix $5C00 read as characters $6x, which are blank in the $7800 set), so everything above the split is a solid band of $A3; and the split handler $B9F8 to the bitmap ($B9FF := $3B) with $D018 from $C7 ($B9FA) and background $C6. Then places the split ($AE4B). Y >= $85 restores the normal view. Called by the wipes ($AEB3, $AF07, $AF14) and the elevator animation in the panel interrupt ($BAA9)."
  },
  {
   "address": 44619,
   "type": "line",
   "text": "Places the split (also entered at $AEF0 and from the panel interrupt at $BAC5, when the handlers' operands are already set): Y >= $85 restores the normal view ($AE67); else the line-0 handler's raster line $B9DB := Y + $32 and its next vector $B9D1/$B9D6 := $B9E6 (18 NOPs, then the split handler at $B9F8), or $B9F8 itself when (Y + $32) AND 7 = 3 ($AE8B)."
  },
  {
   "address": 44647,
   "type": "line",
   "text": "Normal display: the line-0 handler chains to the panel handler $BA1E at line $BA (186), and the mode operands go back (falls into $AE76): line 0 shows the bitmap, the split handler, now out of the chain, text."
  },
  {
   "address": 44662,
   "type": "line",
   "text": "Puts the handlers' mode operands back without touching the raster chain (also called at $BB29 by the elevator animation): line 0 bitmap ($B9BD := $C7, $B9C2 := $3B), split handler text ($B9FA := $F6, $B9FF := $1B). While the chain still passes through $B9F8, the view is the bitmap above the split and a blank band of $C6 below it: a curtain from the bottom."
  },
  {
   "address": 44683,
   "type": "line",
   "text": "The split falls on a line with (line AND 7) = 3, the vertical scroll that $D011 = $3B/$1B sets, where the VIC fetches a character row: the line-0 handler chains straight to $B9F8, without the 18-NOP delay at $B9E6 (the reason is inferred from the timing, not measured)."
  },
  {
   "address": 44694,
   "type": "line",
   "text": "Curtain wipe that hides the old view, run by $AF6E before the flip when $C8 has bit 7 set ($94C4): hum ($AF3E), a 30-frame wait on $E2, then the band colour $A3 := the new place's ground colour $C4 while the view keeps the old $A3 as its background $C6, the higher hum ($AF3A), and the split descends 6 lines a frame from line 50 to 182 ($AE37). Then the new place's colours ($A3 := $C2, $A5 := $C4, $A6 := $C5) and $AED3."
  },
  {
   "address": 44755,
   "type": "line",
   "text": "End of both wipes: SID reset from $B921 ($B910); two sounds ($B958 with $1C, $B93A with $20) when a ground flash is pending ($F0); canned message $F7 printed when one is set ($8DAA); $C8 := 0 and the normal view ($AE4B with Y = $FF)."
  },
  {
   "address": 44787,
   "type": "line",
   "text": "Curtain wipe that reveals the new view, run by $AF6E after the flip when $C8 is non-zero ($7F from $90E8 or $94C4): band colour $A3 := the old ground colour $A5, view background $C6 := $C2, new $A5/$A6 from $C4/$C5 and the colour matrix refreshed ($BB48); the curtain starts at line 182 and rises 4 lines a frame to line 50, with the hum ($AF3E); then $A3 := $C2, the higher hum ($AF3A), a 22-frame wait, and $AED3."
  },
  {
   "address": 44858,
   "type": "line",
   "text": "Higher hum of the wipes: SID $D401-$D40D from $AF61-$AF6D, the same set-up as $AF3E with voice 2 at $05E4 (about 89 Hz), then voice 2 gated."
  },
  {
   "address": 44862,
   "type": "line",
   "text": "Hum of the wipes: SID $D401-$D40D from $AF53-$AF5F (voice 2 at $0550, about 80 Hz, pulse width $800, sustain 10; voice 1 frequency high byte $09 and silent), then $D40B := $15: voice 2 triangle, ring-modulated by voice 1, gate on."
  },
  {
   "address": 44882,
   "type": "line",
   "text": "SID values for the wipes' hums, one byte per register $D401-$D40D: $AF53-$AF5F for $AF3E, $AF61-$AF6D for $AF3A (voice 2 frequency $0550, then $05E4). $AF52 and $AF60, the $D400 slots ($A8), are never copied."
  },
  {
   "address": 44910,
   "type": "line",
   "text": "Start of each pass's picture (main loop $8569 inside, $85AD on the surface; $90E3): $1A := $78, the row count for the sky fill; $02 := 0; waits for raster line 224, below the view; the closing wipe when $C8 bit 7 is set ($AE96); the buffer flip ($AF84); the opening wipe when $C8 is non-zero ($AEF3); the ground flash ($AFA8); view colours ($BB48) and panel ($B53D); then clears the new drawing buffer: inside ($A8 non-zero) to $AA ($B197), on the surface to sky and ground ($AFD5), after the black-flash countdown $F9 ($AFCA)."
  },
  {
   "address": 44932,
   "type": "line",
   "text": "Double buffer: $24 counts passes. Even: draw into $4000 ($25 = $03 = $40) and show $6000 ($C7 = $78, which the line-0 handler copies to $D018); odd: draw into $6000 ($25 = $60) and show $4000 ($C7 = $70)."
  },
  {
   "address": 44968,
   "type": "line",
   "text": "Ground flash: while $F0 counts down one a pass the ground colour $A5 is $BB7E + $F0; from 10 ($913F) dark grey, grey, light grey, three whites and back, from 31 ($936F) first 18 orange, purple, red, black; at 0 it returns to $C4."
  },
  {
   "address": 45002,
   "type": "line",
   "text": "Surface only: $F9, when non-zero, counts down one a pass and at 0 flashes the view black ($B242). Nothing traced writes $F9 by name; the zero-page swap at $B8F6 can."
  },
  {
   "address": 45013,
   "type": "line",
   "text": "Surface: fills the new buffer's view with sky and ground row by row, for a horizon at any roll. $82/$83 := $55/$AA (pairs %01 sky, %10 ground) and $84 := 0, or swapped with $84 := $FF when bit 1 of (pitch high byte $2B + 1) XOR (roll high byte $29), XOR bit 0 of $F1, is 1. The horizon's shift per row, |cot roll| x 128 ($34/$35; x 64 by the exponent, then x 2), goes to $7C:$7B (8.8 fixed point, multicolour pixels) and its sign, flipped by $F1, to $7D; $FFFE if too large. The crossing with the top row, x' = 80 + (33.5 x cot roll - h / sin roll) with h = tan pitch ($3A/$3B) x 2^($21/4), sign flipped by $F1: if 0-159, the split rows start at row 0 ($B0E1). The split's screen x is 159 - x'."
  },
  {
   "address": 45162,
   "type": "line",
   "text": "The horizon does not cross the top row: its crossing with the side edge, y = 68 + 2 x (h / cos roll + or - 79 x tan roll), sign from $7D. If 0-135, the 135 - y rows above it are filled whole ($83 when $7D is set, else $82; $B178) and the split rows start at the left edge (x' = 159) or the right (x' = 1). Otherwise $B0AA."
  },
  {
   "address": 45226,
   "type": "line",
   "text": "The horizon is outside the view: all 136 rows get one pattern ($B178 with X = $88): $83 when bit 0 of ((roll high byte $29 + 3) / 2) XOR $2B XOR $7D is 1, else $82."
  },
  {
   "address": 45281,
   "type": "line",
   "text": "Split rows: x' in $09, fraction in $08 (from 0). Each row: the cells left of the horizon's cell get $82 through the unrolled row fill in page $BE (entered at $BE00 + 4 x cell, $B10B), the cells right of it $83 through page $BD (entered at $BD00 + 160 - 4 x cell, $B0F9), each entry 2 later and $03 adjusted when it falls past the INC or DEC $03 inside those fills; the boundary byte, cell 39 - x'/4, is $BC4C + (x' AND 3) ($56, $5A, $6A, $AA: 3, 2, 1, 0 left pixels) XOR $84. Then $1A counts the row ($78-$FF, 136 rows), ($02) := the next row from $5558/$54C8,X ($55D0/$5540 by row) and x' moves by $7C:$7B (down when $7D is set); once outside 0-159, $B168."
  },
  {
   "address": 45311,
   "type": "line",
   "text": "Low byte of the JSR $BD00 at $B0FE, written at $B0F9: where the unrolled fill in page $BD starts, i.e. the first cell right of the horizon (4 bytes a cell, 6 at the INC $03 at $BD82)."
  },
  {
   "address": 45329,
   "type": "line",
   "text": "Low byte of the JSR $BE00 at $B110, written at $B10B: where the unrolled right-to-left fill in page $BE starts, i.e. the first cell left of the horizon (6 bytes at the DEC $03 at $BE1E)."
  },
  {
   "address": 45416,
   "type": "line",
   "text": "The horizon has left the view sideways: the remaining rows (0 - $1A of them) are filled whole, with $82 when $7D is set (the split had moved right) or $83."
  },
  {
   "address": 45432,
   "type": "line",
   "text": "Fills X whole view rows with A (kept in $06) through $BD00 (all 40 cells), advancing $1A and the row pointer ($02) from $5558/$54C8; nothing for X = 0."
  },
  {
   "address": 45463,
   "type": "line",
   "text": "Inside ($A8 non-zero): fills the drawing buffer's view with $AA, pair %10 everywhere, the room's colour $A5 (the matrix's low nibble); $B1A1 for $4000, $B1E7 for $6000, chosen by $25."
  },
  {
   "address": 45473,
   "type": "line",
   "text": "Fills $4000-$553F, the view part of the bitmap at $4000 (17 character rows of 320 bytes), with A; X must be $F8. 22 unrolled STA abs,X 248 bytes apart, the last starting 16 bytes early ($5448) so that the fill ends at $553F. Also used with A = 0 by the intro ($7313) and the escape starfield ($AA8F)."
  },
  {
   "address": 45543,
   "type": "line",
   "text": "Fills $6000-$753F, the view part of the bitmap at $6000, with A, in the same way as $B1A1."
  },
  {
   "address": 45613,
   "type": "line",
   "text": "Flashes the view white (Y = $11 into $A3, $A6 and the screen matrix, $B244); called at $8970 just before SHIP DESTROYED."
  },
  {
   "address": 45618,
   "type": "line",
   "text": "The surface's colours become the next wipe's target: $B27D to $C2-$C5 (lines, unused, ground, colour RAM); sprite 0 light grey ($D027 = $0F). Called at $90D0, $A2BA and by $B270."
  },
  {
   "address": 45634,
   "type": "line",
   "text": "Flashes the view black (Y = 0 into $A3, $A6 and the screen matrix, $B244), when the countdown $F9 reaches 0 ($AFD2)."
  },
  {
   "address": 45636,
   "type": "line",
   "text": "Flash body: $A3 := $A6 := Y and $BB4F fills the view's screen matrix and colour RAM with Y, so all four pixel colours are alike; sound $18 ($B958); waits for raster line 276 ($D011 bit 7, $D012 >= $14), then a delay loop of 6 x 256 x 256 turns (about two seconds); then the surface colours back ($B270, $BB48)."
  },
  {
   "address": 45680,
   "type": "line",
   "text": "Surface colours from $B27D into $A3-$A6 (in use now) and, through $B232, $C2-$C5 (the next wipe's target). From the restart at $8127 (CTRL+Q) and after a flash."
  },
  {
   "address": 45693,
   "type": "line",
   "text": "The surface's four colours: $01 white (%00, background: the lines), $06 blue (to $A4 and $C3, which nothing reads by name: the sky is %01 = $6 from the ORA #$60 at $BB4C), $05 green (%10, the ground: $A5/$C4), $0B dark grey (%11, colour RAM: $A6/$C5). The start-up copy at $725B takes five bytes, the fifth ($A9) into $A7."
  },
  {
   "address": 45697,
   "type": "line",
   "text": "Keyboard scan (CIA 1: port A $DC00 drives the rows, port B $DC01 reads the columns, both set up here): the key number is row x 8 + column, the KERNAL's numbering; with several keys the last found wins (rows 0 to 7, columns 7 to 0). CTRL ($3A) sets bit 7 and either SHIFT ($0F, $34) bit 6 of $07 instead of counting as keys. No key, only modifiers, or DEL (number 0): $EA := $FF, carry set. Else $EA := the key, and $E9 := the key when its number differs from the previous scan's (a new press; $B4B2 resets $E9 to 4, meaning none); carry clear."
  },
  {
   "address": 45822,
   "type": "line",
   "text": "Joystick and keys, once per main-loop pass and per escape-starfield frame: $DC02 := 0 and $DC00 read as joystick port 2: bits 0-3 (up, down, left, right; 0 = pressed) to $80, bit 4 (fire, 0 = pressed) to $81. Any stick or fire input sets bit 7 of $BEC0 (script 0 clears it at $08BC and tests it at $0997-$0A14 before IS ANYBODY THERE and the other idle messages) and skips the keyboard; otherwise $B281 scans it, and a key sets the same bit and goes to the dispatch $B331."
  },
  {
   "address": 45873,
   "type": "line",
   "text": "Key actions (Y = new key $E9, X = held key $EA): CTRL+RETURN ($81) pauses, rescanning until another key is latched, which is then acted on; D ($12) drop ($98FE); L ($2A) leave ($B949, $98C8); - ($2B) and + ($28) act while held, multiplying the speed float $EC/$ED by $F8/$FC (0.98) or $08/$00 (1.03) each pass ($B499); CTRL+S ($8D) and CTRL+L ($AA) the save and load dialog ($B382); CTRL+Q ($BE) restart ($B3E5); E ($0E) the elevator ($B3FD); any other to $B47E (digits and SPACE through $BC50). Handled keys are cleared by $B4B2."
  },
  {
   "address": 45954,
   "type": "line",
   "text": "Save (CTRL+S: $825F := $8D) or load (CTRL+L: $825F := 0): sound ($B94D); prints SAVE NO. 0-9 ? ($3B) or LOAD NO. 0-9 ? ($3A) and waits for a key. A digit, $BC50 value / 2 - 4 with 10 meaning 0, goes to $825E as ASCII (after @0:MER at $8258); then PRESS RETURN WHEN READY ($38) and a wait for a key with $01 = $05 (banking unchanged, cassette bits cleared). RETURN ($01) goes to $819E, which saves or loads; any other key, or a non-digit before, prints the blank message $32 and resumes."
  },
  {
   "address": 46038,
   "type": "line",
   "text": "Waits for the message window to be idle ($E6 = 0), starts canned message X ($8DAA) and waits until the printer's frame count $E0 reaches 30, by which time the text has scrolled in."
  },
  {
   "address": 46052,
   "type": "line",
   "text": "A NOP (the target of the BNE at $B379), then CTRL+Q ($BE): sound ($B94D), clear the key ($B4B2), reset the stack to $FF, CLD and restart the situation at $80E8."
  },
  {
   "address": 46070,
   "type": "line",
   "text": "E ($0E) goes to $B3FD; every other key, still in Y, to the speed keys at $B47E (digits, SHIFT + digits, SPACE; anything not in $BC50 is ignored there)."
  },
  {
   "address": 46077,
   "type": "line",
   "text": "E: clears the key ($B4B2) and runs on into the elevator code at $B400 (nothing while a ride runs, $CA)."
  },
  {
   "address": 46080,
   "type": "line",
   "text": "E key, the test and the start of a ride (key_e_elevator at $B3FD runs on into it). Nothing while a ride runs ($CA non-zero). On the surface ($A8 = 0) the player must be landed ($7F non-zero, at any height) with both middle position bytes $73 and $79 in $70-$73 (the lift's centre is $71:00) on one of the eight squares of elevator_squares (X $74, Y $7A); at elevator 5 (03-15) the Pass must be carried (object $2E, bit 7 of $29EE), else canned message $39, PASS HOLDERS ONLY. Then beep, room $CD := the elevator's number 1-8, band colours $C6 := black (shaft_colour_13) and $C2 := dark grey (shaft_colour_12), and the ride down: stage $CC = 13, $CB = $83, $CA = $80. Underground ($B455) E works anywhere in a room numbered 8 or less (the elevator rooms are 1-8), in no other: $FA := $FF in room 8 (the Colony Craft's, so the ride ends on its deck) else 0, beep, $C2 := dark grey (shaft_colours), and the ride up: stage 0, $CB = $42, $CA = 1. Both start the hum (sound $30 on voice 2) and zero the speed (stop_craft)."
  },
  {
   "address": 46206,
   "type": "line",
   "text": "Every key but E comes here (key_e_or_speed): the key number's low six bits index key_speed_values; 0 means not a speed key and nothing happens. Otherwise the set speed's exponent byte $ED := the value x 2 plus SHIFT (bit 6 of the key, the float's sign bit: reverse thrust) and its mantissa $EC := 0, a float of 2^5 for '1' up to 2^14 for '0' (each digit doubles it), or 2^-31, effectively zero, for SPACE and <- (the brake; SPACE is key 60, <- 57). CTRL is ignored, so CTRL + digit sets the speed too. Beeps on the surface in a vehicle (beep_surface_vehicle), then key_used."
  },
  {
   "address": 46233,
   "type": "line",
   "text": "+ and - (from $B35E and $B369, acting every pass while the key is held): multiplies the set speed $EC/$ED by the float in X/Y ($08/$00, about 1.03, for +; $F8/$FC, about 0.98, for -) through fp_mul, and keeps the product unless its exponent byte is $3C-$3F (2^15, just above the '0' setting); then the beep on the surface in a vehicle, and key_used."
  },
  {
   "address": 46258,
   "type": "line",
   "text": "Marks the newest key as dealt with: $E9 := 4, F1's number, which stands for 'no new key' (the save prompt waits while $E9 is 4, $B390), so the dispatch, the object keys T and B and script op 11 act on a press once. Called by every key action, script ops 11 and 28, object_loop ($9712) and the start-up ($7280)."
  },
  {
   "address": 46262,
   "type": "line",
   "text": "Elevator squares, X (column) half: read as elevator_x + n for elevator n = 1-8 (the E key at $B41E, the arrival at the surface at $A2A6), so its entries are $B4B7-$B4BE (elevator_squares); the byte here is key_used's RTS and index 0 is never read."
  },
  {
   "address": 46263,
   "type": "line",
   "text": "The eight elevators' grid squares, X at $B4B7-$B4BE and Y at $B4BF-$B4C6 (read through elevator_x and elevator_y): 1 09-06, 2 09-05, 3 03-00, 4 11-13 ($0B-$0D), 5 03-15 (the Pass), 6 81-35 ($51-$23), 7 $88-$88 (-120,-120, shown as **-**), 8 08-08 (the Colony Craft's lift, used from its deck above 08-08). The number is also the complex's lift room ($CD) and the order of the E key's search, 8 down to 1."
  },
  {
   "address": 46270,
   "type": "line",
   "text": "Elevator squares, Y (row) half: read as elevator_y + n for n = 1-8 ($B425, $A2AB), so its entries are $B4BF-$B4C6; the byte here is elevator 8's X entry."
  },
  {
   "address": 46279,
   "type": "line",
   "text": "Colours Benson's message window: A into colour RAM $DB78-$DB8E (row 22, columns 8-30; the letters are holes in solid cells, so this is the window's colour) and into msg_colour_now. From panel_init_colours (red) and panel_update (red, or the Metal Detector's green or blue)."
  },
  {
   "address": 46291,
   "type": "line",
   "text": "The message window's current colour, a variable after panel_msg_colour's RTS: panel_update compares its choice with it ($B565) and rewrites colour RAM only on a change."
  },
  {
   "address": 46292,
   "type": "line",
   "text": "Colours the EL dial: A into colour RAM of rows 19-22, columns 2-3 ($DAFA/$DAFB, $DB22/$DB23, $DB4A/$DB4B, $DB72/$DB73). From panel_init_colours (blue) and el_dial_quarter_colour."
  },
  {
   "address": 46317,
   "type": "line",
   "text": "Colours the COMP dial: A into colour RAM of rows 20-21, columns 34-37 ($DB42-$DB45 the tick row, $DB6A-$DB6D the letter strip). From panel_init_colours (red) and comp_quarter_colour."
  },
  {
   "address": 46342,
   "type": "line",
   "text": "Panel colours at every hardware setup ($8194): colour RAM of rows 17-24 ($DAA8-$DBE7) black, then the message window red (col_msg_window), the EL dial blue (col_el_dial), the COMP dial red (col_comp_dial), and row 19's figures: columns 8-12 LOC brown, 17-21 ALT purple, 26-30 SPEED green (col_loc_figures, col_alt_figures, col_speed_figures)."
  },
  {
   "address": 46397,
   "type": "line",
   "text": "Panel readouts and engine note, once a main-loop pass ($AFC0); nothing during an elevator ride. (1) Message window colour: with the Metal Detector (object $1A, bit 7 of $29DA) carried on the surface ($CD = 0) in a city square other than 00-00 ($B7 non-zero) below height $10000 ($77 = 0), blue if bit 6 of the square's status $F2 is set, green if clear, red if bit 5 is set; red otherwise. (2) ALT, row 19 columns 17-21: $77 as two digits, then three digits of the fraction $76:$75 (alt_next_digit), so ALT = height x 1000 / 65536. (3) SPEED, row 19: column 26 '+' or '-' from bit 0 of $27, then fp_to_int16 of $26/$27: its high byte as two digits and its low byte x 25/64 as two more. (4) Engine noise on voice 2, on the surface except in motion mode $0A: sustain level (SR high nibble) = the speed's power of two less 3, at least 1 (0 below speed 1; reverse at 2^3 gives 0), release 8 ($C in reverse); frequency high = that level and the mantissa's top four bits (snd_engine_freq_hi, snd_engine_sr); the sound restarts when the level rises. (5) LOC from $74 and $7A (loc_coordinate)."
  },
  {
   "address": 46639,
   "type": "line",
   "text": "Next decimal digit of a binary fraction, for ALT: X (high) and Y times 5/8, i.e. times 10/16 (the value plus a quarter of it, halved). Returns A = the result's high byte (a 16-bit input puts the digit in its high nibble, a 12-bit one gives the digit itself), X = A AND $0F and Y = the low byte, together the remaining fraction for the next call."
  },
  {
   "address": 46668,
   "type": "line",
   "text": "One LOC coordinate: the signed grid byte in X ($74 or $7A) as two digits at $5ED0 + Y (row 19). $EF := non-zero when it is 100 or more from 0 (X + 99 at least 199, unsigned). A negative value is shown as its magnitude with bit 7 set, the reverse figures. Past 99 the table bin_to_bcd holds $AA, printed '**' (glyph $0A is '*'); -128 reads $80BA, a code byte $A9, and shows a reversed '*9'."
  },
  {
   "address": 46690,
   "type": "line",
   "text": "Two decimal digits of X (0-99, through bin_to_bcd) into $5ED0 + Y and $5ED1 + Y (row 19 for Y = $30-$47), each ORed with $07 (bit 7 gives the reverse figures); Y advances by 2."
  },
  {
   "address": 46715,
   "type": "line",
   "text": "EL (elevation) dial, every frame from irq_panel except during a ride: the target is the pitch low byte $2A times 9/16 (0-$8F) in the quarter $2B; while the shown position $BB:$BA differs it moves one step the shorter way round: forwards here ($BA up, $8F wrapping to 0 into the next quarter, recoloured by el_dial_quarter_colour, $BC := 0 entering an even quarter), backwards at el_dial_back. A step scrolls the dial's glyphs (chars $FA-$FF, $7FD0-$7FFF: rows 19-22, columns 2-3) one pixel row, feeding in the marker $76E9-$76ED and, each time the 16-row strip wraps, the next scale byte from $768B + $BC."
  },
  {
   "address": 46921,
   "type": "line",
   "text": "Colours the EL dial for its quarter $BB (0-3) from el_dial_colours through panel_el_colour; returns C = bit 0 of the quarter."
  },
  {
   "address": 46935,
   "type": "line",
   "text": "EL dial colour by quarter of pitch, 0-3: 6 6 5 5, blue for quarters 0-1 and green for 2-3. On the ground the pitch is $200 ($A030), so the dial is green there, as the screenshots show."
  },
  {
   "address": 46939,
   "type": "line",
   "text": "EL dial, one step backwards (from el_dial_step when the target is behind): $BA down, 0 wrapping to $8F in the previous quarter (recoloured; $BC := $5B entering an odd quarter), and the glyphs scrolled the other way, the scale fed from $7682 + $BC."
  },
  {
   "address": 47113,
   "type": "line",
   "text": "COMP dial (compass), every frame from irq_panel except during a ride: the target is the heading low byte $2C times 9/16 in the quarter $2D; while the shown position $BF:$BE differs it moves one step the shorter way: backwards here ($BE down, 0 wrapping to $8F into the previous quarter, recoloured by comp_quarter_colour, $C0 := $B4 entering an odd quarter), forwards at comp_dial_forward. Backwards shifts rows 1-5 of the letter strip (chars $DB-$E0, $7ED8-$7F07: row 21, columns 34-37 show $DC-$DF) one pixel right, sets the tick row (row 20, columns 34-37) to char $F0 + (position - 2) AND 7, and every eighth step fills the left-hand char's column from the label text: $7684 + $C0/2 when $C0 is even, the marker $76E9-$76ED when odd."
  },
  {
   "address": 47239,
   "type": "line",
   "text": "Colours the COMP dial for its quarter $BF (0-3) from comp_colours through panel_comp_colour; returns C = bit 0 of the quarter."
  },
  {
   "address": 47253,
   "type": "line",
   "text": "COMP dial colour by quarter of heading, 0-3: 2 6 0 5 (red, blue, black, green). The start's heading $200 gives black, as in the screenshots."
  },
  {
   "address": 47257,
   "type": "line",
   "text": "COMP dial, one step forwards (from comp_dial_step): $BE up, $8F wrapping to 0 into the next quarter (recoloured; $C0 := 0 entering an even quarter); tick row char $F0 + (position AND 7); every eighth step writes the next label column into the right-hand char $E0 ($7F01-$7F05, from $768F + $C0/2, or the marker when $C0 is odd), then shifts rows 1-5 of the strip one pixel left."
  },
  {
   "address": 47350,
   "type": "line",
   "text": "Exchanges zero page $02-$FF with $BF02-$BFFF (zp_copy), so the game's page and the KERNAL's take turns there; clears $0780-$07BF (the vertices' height high bytes, which lie in the KERNAL's text screen at $0400); falls into sid_init. Called by hardware_setup ($813A: the game's own page, loaded with the file at $BF02, comes in), by save_or_load_game ($81A8) before the KERNAL runs, and by resume_game ($80BE) after it."
  },
  {
   "address": 47376,
   "type": "line",
   "text": "Loads all 25 SID registers $D400-$D418 from sid_init_values (the only writes of the volume $D418 = 15 and of the filter, off), then voice 3's control := $41, pulse with the gate on, so that message_tick sounds it by writing only its frequency ($D40F). From zp_swap and the end of the wipes ($AED3)."
  },
  {
   "address": 47393,
   "type": "line",
   "text": "The 25 values sid_init copies to $D400-$D418: voice 1 $80 $00, pulse width $800, control 0, AD/SR 0; voice 2 the same; voice 3 frequency 0, pulse width $800, control $04, AD 0, SR $F0 (sustain 15); filter cutoff 0 0, resonance/routing 0; mode/volume $0F."
  },
  {
   "address": 47418,
   "type": "line",
   "text": "Starts sound A (an offset 0-$30 into the sound table snd_freq_hi) on SID voice 2 ($D407-$D40D, Y = 7) through the shared tail of sound_voice1; X and Y kept. Used for the elevator hum $30 ($B478), the engine $24 ($B61A), the transporter chime's second note $20 ($AEE1, at the end of a wipe while the flash $F0 runs), and the voice-2 releases $28 (start-up, $72F0) and $2C ($7469)."
  },
  {
   "address": 47429,
   "type": "line",
   "text": "The key beep only on the surface ($A8 = 0) and in a vehicle ($A9 bit 7 clear), else nothing: for the speed keys ($B493, $B4AF)."
  },
  {
   "address": 47433,
   "type": "line",
   "text": "The key beep only in a vehicle ($A9 bit 7 clear): for L ($B350), which leaves the vehicle."
  },
  {
   "address": 47437,
   "type": "line",
   "text": "The key beep: sound 0 on voice 1 (pulse, frequency high $59, AD $09, SR $09), then one extra step of random, so every beeped key press moves the random sequence on; A kept. For E, D, T and B ($98C5), CTRL+Q, CTRL+S and CTRL+L, the save number, and a script key test that matches (op 11, $8B6C)."
  },
  {
   "address": 47448,
   "type": "line",
   "text": "Starts sound A on SID voice 1 ($D400-$D406): gate off, then frequency high, attack/decay, sustain/release and control from the four bytes at snd_freq_hi + A (sound_voice2 enters the same code at $B961 with Y = 7); the frequency low byte stays at sid_init's value; X and Y kept in sound_save_x/y. Sounds: 0 key beep, 4 building destroyed ($876E), 8 missile launched ($8882 yours, $8947 the attack ship's), $0C the attack ship's missile hits you ($8983), $10 your missile hits a ship ($884B), $14 walking into a wall ($9413), $18 the flash of a crash or a hit ($B24D), $1C the transporter chime ($AEDC, with $20 on voice 2)."
  },
  {
   "address": 47493,
   "type": "line",
   "text": "X kept by sound_voice1 and sound_voice2 while they run (a variable after their RTS)."
  },
  {
   "address": 47494,
   "type": "line",
   "text": "Y kept by sound_voice1 and sound_voice2 while they run."
  },
  {
   "address": 47495,
   "type": "line",
   "text": "Sound table, 13 entries of four bytes (frequency high, attack/decay, sustain/release, control), entry n at $B987 + n, n = 0, 4, ... $30: 0 key beep (pulse $59, 09 09); 4 building destroyed (noise $09, 0E 0A); 8 missile launch (noise $12, 09 09); $0C hit by the attack ship's missile (noise $06, 0B 0B); $10 ship hit (noise $16, 0B 0B); $14 wall (noise $04, 09 09); $18 crash or hit flash (noise $0E, 0B 0B); $1C and $20 the transporter chime, voices 1 and 2 (pulse $0E and $0F, CA 0A); $24 engine (noise $40, 00 F0; frequency and SR rewritten by panel_update); $28 and $2C noise with the gate off, which only lets voice 2 fade (release $C or $F); $30 elevator hum (pulse, 00 40; its frequency high set each frame from elevator_hum_pitch)."
  },
  {
   "address": 47496,
   "type": "line",
   "text": "Sound table column 2, attack/decay, read as $B988 + n (the table's byte 1 of each entry)."
  },
  {
   "address": 47497,
   "type": "line",
   "text": "Sound table column 3, sustain/release, read as $B989 + n."
  },
  {
   "address": 47498,
   "type": "line",
   "text": "Sound table column 4, the control byte ($41 pulse or $81 noise with the gate on; $80 noise with the gate off), read as $B98A + n; the bytes from here to $B9AA are the rest of entries 0-8."
  },
  {
   "address": 47531,
   "type": "line",
   "text": "Frequency high byte of sound $24, the engine: panel_update rewrites it every pass ($B604) along with voice 2's register $D408."
  },
  {
   "address": 47533,
   "type": "line",
   "text": "Sustain/release byte of sound $24, the engine: panel_update compares its new level with it ($B60B), stores it ($B610, and $D40D) and restarts the sound when it rises. Entries $28-$30 follow to $B9BA."
  },
  {
   "address": 47547,
   "type": "line",
   "text": "Raster interrupt at line 0, the view (vector set by hardware_setup and by irq_panel): $D018 from $C7 (the bitmap on show), $D011 := $3B (multicolour bitmap), background from $A3, $D016 := $18; then the IRQ vector := irq_panel and the raster compare := line $BA. The operands irq_view_d018_src, irq_view_d011, irq_view_next_lo/hi and irq_view_next_line are rewritten by view_curtain_top, view_split_line, view_mode_operands_normal and split_both_text, so that a wipe or the elevator ride can split the view at a moving line through irq_split."
  },
  {
   "address": 47549,
   "type": "line",
   "text": "Operand of irq_view's LDA for $D018: $C7 (the bitmap) normally, $F6 (the band's text screen) while the top band is text ($AE39, $BB39); $AE78 puts $C7 back."
  },
  {
   "address": 47554,
   "type": "line",
   "text": "irq_view's $D011 value: $3B (bitmap mode) normally, $1B (text mode) while the top band is text ($AE43, $BB41); $AE82 restores $3B."
  },
  {
   "address": 47569,
   "type": "line",
   "text": "Low byte of the handler irq_view chains to: $1E (irq_panel) normally ($AE69); $E6 (irq_split_delayed, $AE5E) or $F8 (irq_split, $AE8D, when the split line is a bad line, line AND 7 = 3) while the screen is split."
  },
  {
   "address": 47574,
   "type": "line",
   "text": "High byte of that handler: $BA for irq_panel ($AE6E), $B9 for the split handlers ($AE63, $AE92)."
  },
  {
   "address": 47579,
   "type": "line",
   "text": "Raster line of the next interrupt: $BA (186, the panel) normally ($AE73), or the split line Y + $32 (lines $32-$B6) from view_split_line ($AE53)."
  },
  {
   "address": 47590,
   "type": "line",
   "text": "Entry to the split handler when the split line is not a bad line: 18 NOPs (36 cycles) before irq_split, evidently to put its register writes at the same point of the line as on a bad line, where the video chip has taken the time instead. Reached only through the vector irq_view installs ($B9D1 := $E6)."
  },
  {
   "address": 47608,
   "type": "line",
   "text": "Raster interrupt at the split line (only while a wipe or the elevator ride has moved it): $D018 from $F6, $D011 := $1B (text), background from $C6, then the IRQ vector := irq_panel at line $BA. Its operands (irq_split_d018_src, irq_split_d011) are exchanged with irq_view's so that either band can be the bitmap."
  },
  {
   "address": 47610,
   "type": "line",
   "text": "Operand of irq_split's LDA for $D018: $F6 normally ($AE7D, $BB3C), $C7 when the lower band is the bitmap ($AE3E)."
  },
  {
   "address": 47615,
   "type": "line",
   "text": "irq_split's $D011 value: $1B (text) normally ($AE87, $BB44), $3B (bitmap) when the lower band is the view ($AE48)."
  },
  {
   "address": 47646,
   "type": "line",
   "text": "Raster interrupt at line $BA (186), the panel: saves A, X, Y; IRQ vector := irq_view at line 0; text mode with the screen $5C00 and the charset $7800 ($D018 := $7E, $D011 := $1B), background white, $D016 := 8; message_tick while $E6 is set; then, with no ride ($CA = 0), the dials (comp_dial_step, el_dial_step), else one frame of the ride (elevator_ride_down for $CA bit 7, elevator_ride_up for 1); counts frames in $E2 to 50 and then seconds in $E3/$E4."
  },
  {
   "address": 47739,
   "type": "line",
   "text": "One frame of the ride down, from irq_panel: voice 2's frequency high := elevator_hum_pitch and the step := elevator_steps, both at 2 x stage + ($CB >= $42); $CB falls by the step and on passing 0 restarts at $84 with the stage $CC one lower. Stages 13-8: two text bands (split_both_text), the lower one taking the next shaft colour (col_msg_window + stage, $BBCA-$BBCE) at each stage, split at line $CB + $32, so the bands rise up the screen; stage 7: the room's view comes in below the split (view_curtain_top); stages 6-0: the whole view. elevator_ride ($A24A) lowers the height meanwhile, enters the complex at stage 8 and ends the ride at the floor (elevator_ride_end)."
  },
  {
   "address": 47837,
   "type": "line",
   "text": "One frame of the ride up ($CA = 1): the same tables; $CB rises by the step and on reaching $84 restarts at 0 with the stage one higher. Stages 0-6: the room's view; at each later stage the upper band takes col_el_dial + stage ($BBCA-$BBCF) and the lower one the old upper colour: stage 7 lowers a band over the view from the top (view_curtain_top), stages 8-12 are two text bands, stage 13 puts the view's operands back (view_mode_operands_normal) so that the surface appears from the top; stage 14: elevator_ride_end. elevator_ride raises the height and puts the player on the elevator's square at stage 12."
  },
  {
   "address": 47919,
   "type": "line",
   "text": "Ends an elevator ride: $CA := 0 and voice 2's control := 0 (the hum off). From elevator_ride_up at stage 14 and from elevator_ride ($A302) when the ride down reaches the complex floor."
  },
  {
   "address": 47927,
   "type": "line",
   "text": "Makes both bands of a split screen plain text bands with $D018 := $F6 (the view's matrix read as blank characters, so each band is just its background, $A3 above and $C6 below: the elevator shaft); sets the operands of irq_view and irq_split."
  },
  {
   "address": 47944,
   "type": "line",
   "text": "View colours for the multicolour bitmap: matrix byte Y := $60 + ($A5 AND $0F), so pixel pairs %01 are blue (the sky) and %10 colour $A5 (the ground), then view_colours_y with colour RAM $A6 for %11; %00 is the background $A3 that irq_view sets each frame."
  },
  {
   "address": 47951,
   "type": "line",
   "text": "Fills the view's 17 rows, screen matrix $5C00-$5EA7 with Y and colour RAM $D800-$DAA7 with $A6, unless the first cell of each already holds them (resume_warm_start spoils $D800 on purpose to force the refill)."
  },
  {
   "address": 47998,
   "type": "line",
   "text": "Transporter flash colours: ground_flash sets $A5 := flash_colours + $F0 as $F0 counts down from its start (never index 0): $0A gives $BB87-$BB7F, 0B 0C 0F 01 01 01 0F 0C 0B (grey to white and back); $1F (mirror_world) first reads 20 bytes on, into elevator_steps: 08 x 18 (orange), 04, 02, then 00 and the ramp."
  },
  {
   "address": 48009,
   "type": "line",
   "text": "Elevator ride: how many lines the split moves per frame, at 2 x stage + half (28 entries, stage 0 at the bottom): 02 04, then 08 through stage 11, then 05 03 02 01, so the ride starts and ends slowly. Also the start of the mirror room's flash (flash_colours)."
  },
  {
   "address": 48037,
   "type": "line",
   "text": "Elevator ride: voice 2's frequency high byte (the hum), at 2 x stage + half: 02 x 4, 03 x 4, 04 x 5, 05 x 12, 04 03 02: low at the bottom, highest in the middle stages. $BBC1 (00) is beyond the last index."
  },
  {
   "address": 48066,
   "type": "line",
   "text": "Colour of the message window at start (2, red: panel_init_colours). Also the base of the ride down's shaft colours, col_msg_window + stage for stages 8-12 ($BBCA-$BBCE)."
  },
  {
   "address": 48067,
   "type": "line",
   "text": "Colour of the EL dial at start (6, blue). Also the base of the ride up's shaft colours, col_el_dial + stage for stages 7-13 ($BBCA-$BBD0; stage 13's is replaced at once)."
  },
  {
   "address": 48068,
   "type": "line",
   "text": "Colour of the LOC figures, row 19 columns 8-12 (9, brown)."
  },
  {
   "address": 48069,
   "type": "line",
   "text": "Colour of the ALT figures, row 19 columns 17-21 (4, purple)."
  },
  {
   "address": 48070,
   "type": "line",
   "text": "Colour of the SPEED figures, row 19 columns 26-30 (5, green)."
  },
  {
   "address": 48071,
   "type": "line",
   "text": "Colour of the COMP dial at start (2, red). The two bytes after it, 02 08 at $BBC8-$BBC9, are read by no code found."
  },
  {
   "address": 48074,
   "type": "line",
   "text": "Elevator shaft band colours by ride stage 8-13, 0B 00 09 00 0B 00 (dark grey, black, brown, black, dark grey, black) at $BBCA-$BBCF; $BBCA is also the ride up's first colour $C2 ($B465)."
  },
  {
   "address": 48078,
   "type": "line",
   "text": "Shaft colour of stage 12 (dark grey); also $C2 at the start of the ride down ($B448)."
  },
  {
   "address": 48079,
   "type": "line",
   "text": "Shaft colour of stage 13 (black); also the lower band $C6 at the start of the ride down ($B443)."
  },
  {
   "address": 48080,
   "type": "line",
   "text": "Line drawing: routine number by the line's direction code $67 (bit 0 dY negative, bit 1 dX negative, bit 2 steep): 00 07 03 04 01 06 02 05 ($9C12). The routine number indexes octant_lo/octant_hi, octant_clip_x/y and the clip tests."
  },
  {
   "address": 48081,
   "type": "line",
   "text": "octant_map + 1, which holds 7: the start-up's row-table builder borrows it as a mask (BIT $BBD1 at $72B3) to end each character row after eight pixel lines."
  },
  {
   "address": 48088,
   "type": "line",
   "text": "X of the screen corner a line heads for, by routine number: 9F 9F 00 00 00 00 9F 9F (column 159 or 0); $9C25 puts it in $6C, the end X, when the end point is off screen."
  },
  {
   "address": 48096,
   "type": "line",
   "text": "Y of that corner: 87 87 87 87 00 00 00 00 (row 135, the view's last line, or 0), into $6D ($9C2A)."
  },
  {
   "address": 48104,
   "type": "line",
   "text": "Line clipping: 16 offsets (40 38 08 00 40 38 28 30 40 18 08 10 40 18 28 20) by an end point's region, 8 x the sign of its projected X (bit 0 of $5F or $63) + 4 x the sign of Y ($61 or $65) + its clip code ($6E or $6F, 0-3); ORed with the routine number and halved, it indexes clip_start_test or clip_end_test."
  },
  {
   "address": 48120,
   "type": "line",
   "text": "Line clipping, start point off screen: the screen edges the line can enter by (bit 0 right X = 159, 1 bottom Y = 135, 2 left X = 0, 3 top Y = 0), 32 entries; 0 means the line misses the view and is not drawn ($9C50)."
  },
  {
   "address": 48152,
   "type": "line",
   "text": "Line clipping, end point ($9C76): 0 means nothing to draw. With the end on screen ($6F = 0) the index is $20-$23, past these 32 bytes into octant_lo ($BC38-$BC3B, 61 90 BF EE, all non-zero), so such a line always passes."
  },
  {
   "address": 48184,
   "type": "line",
   "text": "Line routines, low bytes of the split table with octant_hi: draw_line_octant_0-7 ($AC61 ... $ADAA, 47 bytes apart), by routine number; $9C17 puts the address in $04/$05 and $9D95 jumps through it. The first four also serve clip_end_test."
  },
  {
   "address": 48192,
   "type": "line",
   "text": "Line routines, high bytes: $AC x 4, $AD x 4."
  },
  {
   "address": 48200,
   "type": "line",
   "text": "The four pixel-pair masks of a multicolour byte, left to right: C0 30 0C 03 (the start-up's table builder, $72D2)."
  },
  {
   "address": 48204,
   "type": "line",
   "text": "The byte where the horizon crosses a pixel row, by the crossing's pixel in the cell ($09 AND 3): 56 5A 6A AA, that is 3, 2, 1 or 0 pixels of %01 then %10, EORed with $84 (horizon_rows, $B122)."
  },
  {
   "address": 48208,
   "type": "line",
   "text": "Speed value by key number 0-63 (row x 8 + column), 0 for all but twelve keys: '1' $0A, '2' $0C ... '9' $1A, '0' $1C (twice the digit plus 8, 0 counting as ten), SPACE and <- $42. key_speed_digit doubles it into the set speed's exponent byte; the save and load prompt ($B397) halves it and takes 4, giving the slot 0-9 (SPACE's 29 is refused)."
  },
  {
   "address": 48272,
   "type": "line",
   "text": "Not read by any code found: $4C and 41 zeros, $BC90-$BCB9."
  },
  {
   "address": 48314,
   "type": "line",
   "text": "Leftover text in the Atari 8-bit's internal screen code (ASCII minus $20, the code the panel labels use), 40 characters a line: 'A. DISK DIRECTORY I. FORMAT DISK' then 'B. RUN CARTRIDGE J. DUPLICAT', cut off at $BCFF: the menu of Atari DOS 2, a fragment of an Atari's screen memory left in the image. Nothing reads it."
  },
  {
   "address": 48384,
   "type": "line",
   "text": "Unrolled fill of one bitmap row, left to right: cell j is at ($02) + 8j and $03 steps up one page at cell 32. Entered at $BD00 + 4k (k = 0-32) or $BD00 + 4k + 2 (k = 33-39, the caller doing the INC $03), it stores A into cells k to 39: 40 - k cells; $BDA2 (k = 40) is the RTS. fill_rows ($B17E) always enters at $BD00, all 40 cells; horizon_rows writes the JSR's low byte ($B0F9) with k = 40 - c to fill the c cells right of the horizon's cell with $83."
  },
  {
   "address": 48384,
   "type": "side",
   "text": "k=0: 40 cells, 0-39"
  },
  {
   "address": 48388,
   "type": "side",
   "text": "k=1: 39 cells, 1-39"
  },
  {
   "address": 48392,
   "type": "side",
   "text": "k=2: 38 cells, 2-39"
  },
  {
   "address": 48396,
   "type": "side",
   "text": "k=3: 37 cells, 3-39"
  },
  {
   "address": 48400,
   "type": "side",
   "text": "k=4: 36 cells, 4-39"
  },
  {
   "address": 48404,
   "type": "side",
   "text": "k=5: 35 cells, 5-39"
  },
  {
   "address": 48408,
   "type": "side",
   "text": "k=6: 34 cells, 6-39"
  },
  {
   "address": 48412,
   "type": "side",
   "text": "k=7: 33 cells, 7-39"
  },
  {
   "address": 48416,
   "type": "side",
   "text": "k=8: 32 cells, 8-39"
  },
  {
   "address": 48420,
   "type": "side",
   "text": "k=9: 31 cells, 9-39"
  },
  {
   "address": 48424,
   "type": "side",
   "text": "k=10: 30 cells, 10-39"
  },
  {
   "address": 48428,
   "type": "side",
   "text": "k=11: 29 cells, 11-39"
  },
  {
   "address": 48432,
   "type": "side",
   "text": "k=12: 28 cells, 12-39"
  },
  {
   "address": 48436,
   "type": "side",
   "text": "k=13: 27 cells, 13-39"
  },
  {
   "address": 48440,
   "type": "side",
   "text": "k=14: 26 cells, 14-39"
  },
  {
   "address": 48444,
   "type": "side",
   "text": "k=15: 25 cells, 15-39"
  },
  {
   "address": 48448,
   "type": "side",
   "text": "k=16: 24 cells, 16-39"
  },
  {
   "address": 48452,
   "type": "side",
   "text": "k=17: 23 cells, 17-39"
  },
  {
   "address": 48456,
   "type": "side",
   "text": "k=18: 22 cells, 18-39"
  },
  {
   "address": 48460,
   "type": "side",
   "text": "k=19: 21 cells, 19-39"
  },
  {
   "address": 48464,
   "type": "side",
   "text": "k=20: 20 cells, 20-39"
  },
  {
   "address": 48468,
   "type": "side",
   "text": "k=21: 19 cells, 21-39"
  },
  {
   "address": 48472,
   "type": "side",
   "text": "k=22: 18 cells, 22-39"
  },
  {
   "address": 48476,
   "type": "side",
   "text": "k=23: 17 cells, 23-39"
  },
  {
   "address": 48480,
   "type": "side",
   "text": "k=24: 16 cells, 24-39"
  },
  {
   "address": 48484,
   "type": "side",
   "text": "k=25: 15 cells, 25-39"
  },
  {
   "address": 48488,
   "type": "side",
   "text": "k=26: 14 cells, 26-39"
  },
  {
   "address": 48492,
   "type": "side",
   "text": "k=27: 13 cells, 27-39"
  },
  {
   "address": 48496,
   "type": "side",
   "text": "k=28: 12 cells, 28-39"
  },
  {
   "address": 48500,
   "type": "side",
   "text": "k=29: 11 cells, 29-39"
  },
  {
   "address": 48504,
   "type": "side",
   "text": "k=30: 10 cells, 30-39"
  },
  {
   "address": 48508,
   "type": "side",
   "text": "k=31: 9 cells, 31-39"
  },
  {
   "address": 48512,
   "type": "side",
   "text": "k=32: 8 cells, 32-39 (INC $03 here)"
  },
  {
   "address": 48518,
   "type": "side",
   "text": "k=33: 7 cells, 33-39"
  },
  {
   "address": 48522,
   "type": "side",
   "text": "k=34: 6 cells, 34-39"
  },
  {
   "address": 48526,
   "type": "side",
   "text": "k=35: 5 cells, 35-39"
  },
  {
   "address": 48530,
   "type": "side",
   "text": "k=36: 4 cells, 36-39"
  },
  {
   "address": 48534,
   "type": "side",
   "text": "k=37: 3 cells, 37-39"
  },
  {
   "address": 48538,
   "type": "side",
   "text": "k=38: 2 cells, 38-39"
  },
  {
   "address": 48542,
   "type": "side",
   "text": "k=39: 1 cell, 39"
  },
  {
   "address": 48546,
   "type": "side",
   "text": "k=40: fills nothing (RTS)"
  },
  {
   "address": 48547,
   "type": "line",
   "text": "Moving objects 8-15 (8 the player's missile, 14 the attack ship's missile, 15 the attack ship), table 1 of 10, the lifetime. The ten tables are read as label + object, so each table's bytes start 8 past its label: this one is $BDAB-$BDB2, and $BDA3-$BDAA are never read. 0 idle, $7F held; otherwise move_objects counts it down a pass and removes the object at 0. Set to 16 when you fire, 32 for the attack ship's missile, $AD for the attack ship, which fires only below $80."
  },
  {
   "address": 48555,
   "type": "line",
   "text": "Moving objects 8-15, X velocity low byte, added to $2880 + object a pass: bytes $BDB3-$BDBA (the eight here are shot_timer's)."
  },
  {
   "address": 48563,
   "type": "line",
   "text": "X velocity middle byte, added to $2480 + object: bytes $BDBB-$BDC2."
  },
  {
   "address": 48571,
   "type": "line",
   "text": "X velocity high byte (0 or $FF, the sign), added to $2540 + object: bytes $BDC3-$BDCA."
  },
  {
   "address": 48579,
   "type": "line",
   "text": "Height velocity low byte, added to $28C0 + object: bytes $BDCB-$BDD2."
  },
  {
   "address": 48587,
   "type": "line",
   "text": "Height velocity middle byte, added to $24C0 + object: bytes $BDD3-$BDDA."
  },
  {
   "address": 48595,
   "type": "line",
   "text": "Height velocity high byte, added to $2580 + object (a height gone negative is set to -1, $FF:$FF:$FF): bytes $BDDB-$BDE2."
  },
  {
   "address": 48603,
   "type": "line",
   "text": "Y velocity low byte, added to $2900 + object: bytes $BDE3-$BDEA."
  },
  {
   "address": 48611,
   "type": "line",
   "text": "Y velocity middle byte, added to $2500 + object: bytes $BDEB-$BDF2."
  },
  {
   "address": 48619,
   "type": "line",
   "text": "Y velocity high byte, added to $25C0 + object: bytes $BDF3-$BDFA; $BDFB-$BDFF are not read. A save file holds $BDA0-$BDFF (save_state_table)."
  },
  {
   "address": 48640,
   "type": "line",
   "text": "Unrolled fill of one bitmap row, right to left: entered at $BE00 + 4m (m = 0-7, with $03 one page up as fill_row_right leaves it) or $BE00 + 4m + 2 (m = 8-38, the caller doing the DEC $03), it stores A into cells 38 - m down to 0 of the row at ($02): 39 - m cells, stepping $03 down at cell 31; $BE9E (m = 39) is the RTS. horizon_rows writes the JSR's low byte ($B10B) with m = c, the cells left of the horizon's cell getting $82. $BE9F, a zero, is not read."
  },
  {
   "address": 48640,
   "type": "side",
   "text": "m=0: 39 cells, 38-0"
  },
  {
   "address": 48644,
   "type": "side",
   "text": "m=1: 38 cells, 37-0"
  },
  {
   "address": 48648,
   "type": "side",
   "text": "m=2: 37 cells, 36-0"
  },
  {
   "address": 48652,
   "type": "side",
   "text": "m=3: 36 cells, 35-0"
  },
  {
   "address": 48656,
   "type": "side",
   "text": "m=4: 35 cells, 34-0"
  },
  {
   "address": 48660,
   "type": "side",
   "text": "m=5: 34 cells, 33-0"
  },
  {
   "address": 48664,
   "type": "side",
   "text": "m=6: 33 cells, 32-0"
  },
  {
   "address": 48668,
   "type": "side",
   "text": "m=7: 32 cells, 31-0 (DEC $03 here)"
  },
  {
   "address": 48674,
   "type": "side",
   "text": "m=8: 31 cells, 30-0"
  },
  {
   "address": 48678,
   "type": "side",
   "text": "m=9: 30 cells, 29-0"
  },
  {
   "address": 48682,
   "type": "side",
   "text": "m=10: 29 cells, 28-0"
  },
  {
   "address": 48686,
   "type": "side",
   "text": "m=11: 28 cells, 27-0"
  },
  {
   "address": 48690,
   "type": "side",
   "text": "m=12: 27 cells, 26-0"
  },
  {
   "address": 48694,
   "type": "side",
   "text": "m=13: 26 cells, 25-0"
  },
  {
   "address": 48698,
   "type": "side",
   "text": "m=14: 25 cells, 24-0"
  },
  {
   "address": 48702,
   "type": "side",
   "text": "m=15: 24 cells, 23-0"
  },
  {
   "address": 48706,
   "type": "side",
   "text": "m=16: 23 cells, 22-0"
  },
  {
   "address": 48710,
   "type": "side",
   "text": "m=17: 22 cells, 21-0"
  },
  {
   "address": 48714,
   "type": "side",
   "text": "m=18: 21 cells, 20-0"
  },
  {
   "address": 48718,
   "type": "side",
   "text": "m=19: 20 cells, 19-0"
  },
  {
   "address": 48722,
   "type": "side",
   "text": "m=20: 19 cells, 18-0"
  },
  {
   "address": 48726,
   "type": "side",
   "text": "m=21: 18 cells, 17-0"
  },
  {
   "address": 48730,
   "type": "side",
   "text": "m=22: 17 cells, 16-0"
  },
  {
   "address": 48734,
   "type": "side",
   "text": "m=23: 16 cells, 15-0"
  },
  {
   "address": 48738,
   "type": "side",
   "text": "m=24: 15 cells, 14-0"
  },
  {
   "address": 48742,
   "type": "side",
   "text": "m=25: 14 cells, 13-0"
  },
  {
   "address": 48746,
   "type": "side",
   "text": "m=26: 13 cells, 12-0"
  },
  {
   "address": 48750,
   "type": "side",
   "text": "m=27: 12 cells, 11-0"
  },
  {
   "address": 48754,
   "type": "side",
   "text": "m=28: 11 cells, 10-0"
  },
  {
   "address": 48758,
   "type": "side",
   "text": "m=29: 10 cells, 9-0"
  },
  {
   "address": 48762,
   "type": "side",
   "text": "m=30: 9 cells, 8-0"
  },
  {
   "address": 48766,
   "type": "side",
   "text": "m=31: 8 cells, 7-0"
  },
  {
   "address": 48770,
   "type": "side",
   "text": "m=32: 7 cells, 6-0"
  },
  {
   "address": 48774,
   "type": "side",
   "text": "m=33: 6 cells, 5-0"
  },
  {
   "address": 48778,
   "type": "side",
   "text": "m=34: 5 cells, 4-0"
  },
  {
   "address": 48782,
   "type": "side",
   "text": "m=35: 4 cells, 3-0"
  },
  {
   "address": 48786,
   "type": "side",
   "text": "m=36: 3 cells, 2-0"
  },
  {
   "address": 48790,
   "type": "side",
   "text": "m=37: 2 cells, 1-0"
  },
  {
   "address": 48794,
   "type": "side",
   "text": "m=38: 1 cell, 0"
  },
  {
   "address": 48798,
   "type": "side",
   "text": "m=39: fills nothing (RTS)"
  },
  {
   "address": 48800,
   "type": "line",
   "text": "The current motion record, 16 bytes copied by load_motion_record from motion_rec_0-10 ($9DAD + 16 x $A9); a save file holds $BEA0-$BEFF. Bytes 0-1, here, are the handler move_player jumps through (JMP ($BEA0), $A178): motion_flight $9F17, motion_ground $9EFD, motion_starship $9E5D, motion_fall $9EBE or motion_descent_1 $9E66, which rewrites the low byte to $60 at $9E8D (motion_descent_2, $9E60, as in play-ground-0808.vsf). Bytes 2-15 are that handler's constants; landing recopies bytes 2-11 from motion_rec_8_grounded ($A0CC)."
  },
  {
   "address": 48802,
   "type": "line",
   "text": "Motion record byte 2, with byte 3 a float: motion_flight multiplies the turn rate $22/$23 by it each pass ($9F26), the turn kept when the stick is let go. motion_fall subtracts this byte from the height's middle byte a pass ($9EC1)."
  },
  {
   "address": 48803,
   "type": "line",
   "text": "Motion record byte 3, exponent byte of mot_turn_keep ($9F29); motion_spin adds it to the roll $28 ($9ED9)."
  },
  {
   "address": 48804,
   "type": "line",
   "text": "Motion record byte 4, with byte 5 a float: added to the turn rate while the stick is held left, and subtracted (its sign bit set by INY) while right ($9F39, $9F4C); motion_spin adds this byte to the pitch $2A ($9EE5)."
  },
  {
   "address": 48805,
   "type": "line",
   "text": "Motion record byte 5, exponent byte of mot_turn_push ($9F3C, $9F4F); motion_spin adds it to the heading $2C ($9EF1)."
  },
  {
   "address": 48806,
   "type": "line",
   "text": "Motion record byte 6: added to the pitch $2A:$2B while the stick is held up, subtracted while down ($9F63, $9F79); motion_ground sets it to 0 ($9EFF), so ground vehicles cannot pitch."
  },
  {
   "address": 48807,
   "type": "line",
   "text": "Motion record byte 7: exponent byte for the bank, roll $28/$29 := fp_to_int16 of the turn rate's mantissa with this added to its exponent ($A11B); a negative byte is used alone, giving no bank. Not while landed."
  },
  {
   "address": 48808,
   "type": "line",
   "text": "Motion record byte 8, with byte 9 a float: the climb, speed x sin(pitch), is multiplied by it before it moves the height ($A06B)."
  },
  {
   "address": 48809,
   "type": "line",
   "text": "Motion record byte 9, exponent byte of mot_climb ($A047); climbing above mot_ceiling, 4 x (mot_ceiling - $77) is used instead, halving the climb for each unit of $77 above it, and $88 (no climb) from 64 above."
  },
  {
   "address": 48810,
   "type": "line",
   "text": "Motion record byte 10, with byte 11 a float: the speed $26/$27 becomes (speed + set speed x mot_thrust) x mot_drag each pass ($9FAF), so it closes on a steady value."
  },
  {
   "address": 48811,
   "type": "line",
   "text": "Motion record byte 11, exponent byte of mot_drag ($9FAC). Byte 12 ($BEAC) is read by no code found."
  },
  {
   "address": 48813,
   "type": "line",
   "text": "Motion record byte 13: the height high byte ($77) above which the climb is cut ($A04D); $5A instead in vehicle 1 with the POWERAMP (object $1C) carried."
  },
  {
   "address": 48814,
   "type": "line",
   "text": "Motion record byte 14, with byte 15 a float: the set speed $EC/$ED is multiplied by it ($9F9C) before it is added to the speed."
  },
  {
   "address": 48815,
   "type": "line",
   "text": "Motion record byte 15, exponent byte of mot_thrust ($9F9F). Also read as $BEAF + X by scatter_carried_objects ($862B, X from $EB + 1 down to 2), i.e. the carried list at $BEB1 on."
  },
  {
   "address": 48816,
   "type": "line",
   "text": "The carried objects, a stack read as carried_list + n for n = 1 to $EB: object numbers at $BEB1-$BEBA, ten at most. T pushes ($982D, refusing an eleventh at $9827), D pops the top one, the last taken ($990D); mirror_world reads it ($935D). Index 0, this byte, is never used."
  },
  {
   "address": 48817,
   "type": "line",
   "text": "carried_list's first slot, the object taken earliest; find_carried_object searches $BEB1 + 0 to $EB - 1 ($941F)."
  },
  {
   "address": 48827,
   "type": "line",
   "text": "Count of Palyar sites destroyed: squares whose status ($2B00) has bits 6 and 5 clear (114 in the image). In building_hit_update, once the destroyed bit of the square hit has changed: +1 when it is now set ($87EB), -1 when the ANTI TIME BOMB has put a destroyed building back ($87E5). Then compared with sites_lost_mechanoid: a Mechanoid lead of 105 starts script 10 (the Palyars' reward: it puts the PASS, object $2E, in room 1, elevator 1's lift room at 09-06, the RED HANGER of its message), a Palyar lead of 106 script 26 (the Mechanoids')."
  },
  {
   "address": 48828,
   "type": "line",
   "text": "Count of Mechanoid sites destroyed: squares whose status has bit 6 set and bit 5 clear (115 in the image): +1 at $87DD, -1 at $87D7 for a building the ANTI TIME BOMB restores; see sites_lost_palyar. Squares with bit 5 (27) count for neither. Both are saved with $BEA0-$BEFF."
  },
  {
   "address": 48829,
   "type": "line",
   "text": "The signed byte of script ops 22 (add the operand, saturating at +-127, $8D46) and 23 (test it, $8B03); nothing else reads or writes it. No script in the image uses op 22 or 23, so it stays 0."
  },
  {
   "address": 48830,
   "type": "line",
   "text": "Sine of the angle rotate_pair turns by (sincos64, $8437; a signed fraction, 64 steps a turn), read at $A72F and $A745."
  },
  {
   "address": 48831,
   "type": "line",
   "text": "Cosine of that angle (sincos64, $843E), read at $A739 and $A74F."
  },
  {
   "address": 48832,
   "type": "line",
   "text": "Script flags (ops 16 set, 17 clear, 18 test): bit 0 the last question was answered Y (the subroutine at $0AAB, used by buying and hiring); bit 1 the opposition-sites reward has been given (scripts 26 and 10); bit 2 the Hertz ship is hired (script 7 then needs no Novadrive); bit 3 set by script 37 when the author's advert is destroyed, tested by nothing; bit 5 the Brother-in-law annoyed (his Dart or house or new ship; the ending's 'IS PLEASED YOU'VE GONE'); bit 6 an event script is running (start_script sets it, each such script clears it); bit 7 the stick or a key was used (read_controls sets it, script 0's idle messages test it). $BEC1 after it is read by nothing found."
  },
  {
   "address": 48834,
   "type": "line",
   "text": "Script return stack: return positions (low, high) pushed at $BEC2 + $E5 by $8BC9 (op 4, and start_script for the script it interrupts) and pulled by $8BD2 (op 5). No limit is checked; the space runs to $BEF7. $BEC3 holds $4C at the hand-over, left from before."
  },
  {
   "address": 48888,
   "type": "line",
   "text": "Attack flag: script subroutines poke 1 after 'PALYAR SHIP ATTACKING' ($11BE) and 'MECHANOID SHIP ATTACK' ($11C9); attack_ship_update runs only while it is set; cleared when your missile hits the ship ($8850) or its missile hits you ($897E). Also the byte before location_word, where dictionary word $CB's pointer points."
  },
  {
   "address": 48889,
   "type": "line",
   "text": "Dictionary word $CB (pointer $BEF8): a location 'XX-YY' written by script op 15 when it sets $57ED ($8C05-$8C1E): the low nibble (X) as two digits at $BEF9-$BEFA, the dash $0D at $BEFB (never written), the high nibble (Y) at $BEFC-$BEFD with bit 7 on the last. Script 7 sets $57ED = $32 (02-03, the author's advert); no script or canned message prints word $CB."
  },
  {
   "address": 48894,
   "type": "line",
   "text": "Escape state: 0 on Targ; script 7 pokes 1 on launch ($1123, before 'THE AUTHOR SENDS YOU CONGRATULATIONS'), and the space handler at $AA62 then flies the ending's starfield for ever ($AA69); it sets $FF when its colour steps are done ($AC46), which $AB97 tests."
  },
  {
   "address": 48895,
   "type": "line",
   "text": "The hired ship (object 7): 0 none; script 2 pokes $FF at 'SHIP DESPATCHED' ($0EBA); $8634 then puts object 7 over 08-08 at height $7F:00:00 and sets $7F here, and lowers it by height/128 + 1 a pass until it stands on the ground, when this goes back to 0."
  },
  {
   "address": 48897,
   "type": "line",
   "text": "Swap area for the zero page (zp_swap exchanges $02-$FF with $BF02-$BFFF, read as $BF01 + X, X = 1-$FE, so $BF00-$BF01 are unused): whichever page is not in use lives here, the game's own as loaded with the file until hardware_setup, the KERNAL's in play, the game's again during a save or load. A save file holds $BF00-$BFFF, which is how a load brings back the game's zero page."
  },
  {
   "address": 49149,
   "type": "line",
   "text": "The game's restart_vec ($FD/$FE) while its zero page is parked here: JMP ($BFFD) at $8215, the way out of save_or_load_game after a save, a load or a failed load, jumps through it. It holds $2160 (SEI; JMP resume_game), which no code changes; after a load it is the file's copy."
  },
  {
   "address": 49152,
   "type": "line",
   "text": "CITY MODELS, $C000-$CF66 and $E000-$FFCF: one wire-frame model per grid location, reached only through the split table $2600 (low) / $2700 (high), indexed by location Y*16+X, and read only by $9575, which fills the vertex tables $0400-$057F (and $0740/$07C0 with the square's grid position) and the edge lists $0580/$05C0; $96D8 projects the vertices and $96E7 draws the edges. Format: +0 last vertex number; +1 last edge number; +2 pen split P, edges 0-P drawn by clearing pixel pairs to the background colour (the structure, seen against sky and ground), edges above P by setting %01 pixels, which show only on the ground fill (road marks), $FF all road marks; +3 rotor byte R, 0 none, else (R AND $0F)+1 turning vertices whose angle advances (R AND $F0)/2 a pass, with +4 and +5 the rotor centre x and z. Then the edges, one byte each (high nibble to low nibble, vertices 0-15) until a $00 byte, then two bytes each; vertices 60-63 are the far ends of the location's roads: 60 east ($2D00), 61 west ($2C00), 62 south ($2F00), 63 north ($2E00). Then the vertices: turning ones first, three bytes (dx, height, dz; signed quarter units round the rotor centre), then two bytes each: bits 0-5 of the first are x and of the second z (0 the west or north edge of the square, 63 the east or south edge, 1-62 the centre $80 -31..+30), height = bits 7-6 of the first times 4 plus bits 7-6 of the second; height 15 takes a third byte, 0-127 whole units, or with bit 7 set bits 6-4 units and bits 3-0 sixteenths. A unit is 1/256 of a grid square, the middle byte of a position. This one: City model for 04-01, 11-03: a small four-sided pyramid (5 high) with four sloping triangular vanes around it, like a pinwheel. 29 vertices, 44 edges (edges 0-27 structure, 28-43 road marks); road stubs to the east, west, south and north road ends."
  },
  {
   "address": 49152,
   "type": "side",
   "text": "header: last vertex 28, last edge 43, pen 27, rotor $00"
  },
  {
   "address": 49156,
   "type": "side",
   "text": "edges 0-23: from/to nibbles"
  },
  {
   "address": 49180,
   "type": "side",
   "text": "$00: edges 24-43 follow as byte pairs"
  },
  {
   "address": 49221,
   "type": "side",
   "text": "vertices 0-28: x|height, z|height"
  },
  {
   "address": 49279,
   "type": "line",
   "text": "City model for 05-03: a short octagonal frustum on an octagonal pad north of the east-west road, joined to it by a path. 31 vertices, 41 edges (edges 0-23 structure, 24-40 road marks); road stubs to the east and west road ends."
  },
  {
   "address": 49279,
   "type": "side",
   "text": "header: last vertex 30, last edge 40, pen 23, rotor $00"
  },
  {
   "address": 49283,
   "type": "side",
   "text": "edges 0-23: from/to nibbles"
  },
  {
   "address": 49307,
   "type": "side",
   "text": "$00: edges 24-40 follow as byte pairs"
  },
  {
   "address": 49342,
   "type": "side",
   "text": "vertices 0-30: x|height, z|height"
  },
  {
   "address": 49404,
   "type": "line",
   "text": "City model for 09-03: an upside-down three-sided pyramid (11 high, broad end up) on a small triangular foot west of the centre. 21 vertices, 29 edges (edges 0-14 structure, 15-28 road marks); road stubs to the east and west road ends."
  },
  {
   "address": 49404,
   "type": "side",
   "text": "header: last vertex 20, last edge 28, pen 14, rotor $00"
  },
  {
   "address": 49408,
   "type": "side",
   "text": "edges 0-19: from/to nibbles"
  },
  {
   "address": 49428,
   "type": "side",
   "text": "$00: edges 20-28 follow as byte pairs"
  },
  {
   "address": 49447,
   "type": "side",
   "text": "vertices 0-20: x|height, z|height"
  },
  {
   "address": 49489,
   "type": "line",
   "text": "City model for 05-04: two square pyramids side by side (6 high) on a pad north of the east-west road. 33 vertices, 43 edges (edges 0-19 structure, 20-42 road marks); road stubs to the east and west road ends."
  },
  {
   "address": 49489,
   "type": "side",
   "text": "header: last vertex 32, last edge 42, pen 19, rotor $00"
  },
  {
   "address": 49493,
   "type": "side",
   "text": "edges 0-21: from/to nibbles"
  },
  {
   "address": 49515,
   "type": "side",
   "text": "$00: edges 22-42 follow as byte pairs"
  },
  {
   "address": 49558,
   "type": "side",
   "text": "vertices 0-32: x|height, z|height"
  },
  {
   "address": 49624,
   "type": "line",
   "text": "City model for 09-04: a rounded arch (7 high) springing from north and south of the east-west road and narrowing towards its top, drawn in bands. 26 vertices, 36 edges (edges 0-27 structure, 28-35 road marks); road stubs to the east and west road ends."
  },
  {
   "address": 49624,
   "type": "side",
   "text": "header: last vertex 25, last edge 35, pen 27, rotor $00"
  },
  {
   "address": 49628,
   "type": "side",
   "text": "edges 0-19: from/to nibbles"
  },
  {
   "address": 49648,
   "type": "side",
   "text": "$00: edges 20-35 follow as byte pairs"
  },
  {
   "address": 49681,
   "type": "side",
   "text": "vertices 0-25: x|height, z|height"
  },
  {
   "address": 49733,
   "type": "line",
   "text": "City model for 14-04: a ribbed dome (8 high) north of the east-west road. 40 vertices, 48 edges (edges 0-33 structure, 34-47 road marks); road stubs to the east and west road ends."
  },
  {
   "address": 49733,
   "type": "side",
   "text": "header: last vertex 39, last edge 47, pen 33, rotor $00"
  },
  {
   "address": 49737,
   "type": "side",
   "text": "edges 0-15: from/to nibbles"
  },
  {
   "address": 49753,
   "type": "side",
   "text": "$00: edges 16-47 follow as byte pairs"
  },
  {
   "address": 49818,
   "type": "side",
   "text": "vertices 0-39: x|height, z|height"
  },
  {
   "address": 49898,
   "type": "line",
   "text": "City model for 10-00, 06-07: a slim spire (14 high) between a truncated pyramid and a box, on an octagonal pad north of a T-junction. 33 vertices, 45 edges (edges 0-27 structure, 28-44 road marks); road stubs to the east, west and south road ends."
  },
  {
   "address": 49898,
   "type": "side",
   "text": "header: last vertex 32, last edge 44, pen 27, rotor $00"
  },
  {
   "address": 49902,
   "type": "side",
   "text": "edges 0-20: from/to nibbles"
  },
  {
   "address": 49923,
   "type": "side",
   "text": "$00: edges 21-44 follow as byte pairs"
  },
  {
   "address": 49972,
   "type": "side",
   "text": "vertices 0-32: x|height, z|height"
  },
  {
   "address": 50038,
   "type": "line",
   "text": "City model for 13-07, 05-11: a spike (15 high) on an arrowhead-shaped base west of the north-south road. 22 vertices, 32 edges (edges 0-17 structure, 18-31 road marks); road stubs to the south and north road ends."
  },
  {
   "address": 50038,
   "type": "side",
   "text": "header: last vertex 21, last edge 31, pen 17, rotor $00"
  },
  {
   "address": 50042,
   "type": "side",
   "text": "edges 0-22: from/to nibbles"
  },
  {
   "address": 50065,
   "type": "side",
   "text": "$00: edges 23-31 follow as byte pairs"
  },
  {
   "address": 50084,
   "type": "side",
   "text": "vertices 0-21: x|height, z|height"
  },
  {
   "address": 50129,
   "type": "line",
   "text": "City model for 08-07: a horseshoe grandstand of trusses (3 high) south of the east-west road at a T-junction. 33 vertices, 57 edges (edges 0-44 structure, 45-56 road marks); road stubs to the east, west and north road ends."
  },
  {
   "address": 50129,
   "type": "side",
   "text": "header: last vertex 32, last edge 56, pen 44, rotor $00"
  },
  {
   "address": 50133,
   "type": "side",
   "text": "edges 0-21: from/to nibbles"
  },
  {
   "address": 50155,
   "type": "side",
   "text": "$00: edges 22-56 follow as byte pairs"
  },
  {
   "address": 50226,
   "type": "side",
   "text": "vertices 0-32: x|height, z|height"
  },
  {
   "address": 50292,
   "type": "line",
   "text": "City model for 04-02, 03-06: a needle (14 high) rising from a four-pointed star on a diamond pad west of a T-junction. 26 vertices, 48 edges (edges 0-31 structure, 32-47 road marks); road stubs to the east, south and north road ends."
  },
  {
   "address": 50292,
   "type": "side",
   "text": "header: last vertex 25, last edge 47, pen 31, rotor $00"
  },
  {
   "address": 50296,
   "type": "side",
   "text": "edges 0-33: from/to nibbles"
  },
  {
   "address": 50330,
   "type": "side",
   "text": "$00: edges 34-47 follow as byte pairs"
  },
  {
   "address": 50359,
   "type": "side",
   "text": "vertices 0-25: x|height, z|height"
  },
  {
   "address": 50411,
   "type": "line",
   "text": "Three bytes 4C 00 00 (they decode as JMP $0000) between city_star_needle ($C474) and city_flared_column ($C4EE). Nothing points at them and nothing reads them. The same three bytes follow other data blocks ($151D after the dictionary, $16D3, $2099, $71B4), so they look like an end mark left by the author's tools."
  },
  {
   "address": 50414,
   "type": "line",
   "text": "City model for 06-13, 01-15, 05-15: a slender column, pinched near the ground and flaring to a square cup at 20, on a square footing at a T-junction. 36 vertices, 59 edges (edges 0-43 structure, 44-58 road marks); road stubs to the east, west and north road ends."
  },
  {
   "address": 50414,
   "type": "side",
   "text": "header: last vertex 35, last edge 58, pen 43, rotor $00"
  },
  {
   "address": 50418,
   "type": "side",
   "text": "edges 0-27: from/to nibbles"
  },
  {
   "address": 50446,
   "type": "side",
   "text": "$00: edges 28-58 follow as byte pairs"
  },
  {
   "address": 50509,
   "type": "side",
   "text": "vertices 0-35: x|height, z|height"
  },
  {
   "address": 50593,
   "type": "line",
   "text": "City model for 10-15: a hall 12 high with one rounded (apsed) end, south of a T-junction. 32 vertices, 45 edges (edges 0-29 structure, 30-44 road marks); road stubs to the east, west and north road ends."
  },
  {
   "address": 50593,
   "type": "side",
   "text": "header: last vertex 31, last edge 44, pen 29, rotor $00"
  },
  {
   "address": 50597,
   "type": "side",
   "text": "edges 0-20: from/to nibbles"
  },
  {
   "address": 50618,
   "type": "side",
   "text": "$00: edges 21-44 follow as byte pairs"
  },
  {
   "address": 50667,
   "type": "side",
   "text": "vertices 0-31: x|height, z|height"
  },
  {
   "address": 50731,
   "type": "line",
   "text": "City model for 04-04, 08-06, 06-09: eight small four-sided spires (6 high) in three clusters beside a T-junction. 39 vertices, 61 edges (edges 0-48 structure, 49-60 road marks); road stubs to the east, south and north road ends."
  },
  {
   "address": 50731,
   "type": "side",
   "text": "header: last vertex 38, last edge 60, pen 48, rotor $00"
  },
  {
   "address": 50735,
   "type": "side",
   "text": "edges 0-19: from/to nibbles"
  },
  {
   "address": 50755,
   "type": "side",
   "text": "$00: edges 20-60 follow as byte pairs"
  },
  {
   "address": 50838,
   "type": "side",
   "text": "vertices 0-38: x|height, z|height"
  },
  {
   "address": 50916,
   "type": "line",
   "text": "City model for 02-15: two square pyramids, one 7 and one 14 high, on pads south-west of a T-junction. 26 vertices, 35 edges (edges 0-15 structure, 16-34 road marks); road stubs to the east, west and north road ends."
  },
  {
   "address": 50916,
   "type": "side",
   "text": "header: last vertex 25, last edge 34, pen 15, rotor $00"
  },
  {
   "address": 50920,
   "type": "side",
   "text": "edges 0-20: from/to nibbles"
  },
  {
   "address": 50941,
   "type": "side",
   "text": "$00: edges 21-34 follow as byte pairs"
  },
  {
   "address": 50970,
   "type": "side",
   "text": "vertices 0-25: x|height, z|height"
  },
  {
   "address": 51022,
   "type": "line",
   "text": "City model for 15-07: a faceted polyhedron like a cut gem (4 high) west of the north-south road. 22 vertices, 40 edges (edges 0-31 structure, 32-39 road marks); road stubs to the south and north road ends."
  },
  {
   "address": 51022,
   "type": "side",
   "text": "header: last vertex 21, last edge 39, pen 31, rotor $00"
  },
  {
   "address": 51026,
   "type": "side",
   "text": "edges 0-31: from/to nibbles"
  },
  {
   "address": 51058,
   "type": "side",
   "text": "$00: edges 32-39 follow as byte pairs"
  },
  {
   "address": 51075,
   "type": "side",
   "text": "vertices 0-21: x|height, z|height"
  },
  {
   "address": 51119,
   "type": "line",
   "text": "Three bytes 4C 00 00 between city_faceted_gem ($C74E) and city_atari_sign ($C7B2), the same unread end mark as at $C4EB."
  },
  {
   "address": 51122,
   "type": "line",
   "text": "City model for 14-05, 14-08, 12-11, 06-15, 11-15: a sign on two posts (14 high) bearing the Atari logo, facing east and west; Benson says GOOD SHOW! when one is destroyed (script 50, through $2B00). 34 vertices, 32 edges (edges 0-23 structure, 24-31 road marks); road stubs to the east and west road ends."
  },
  {
   "address": 51122,
   "type": "side",
   "text": "header: last vertex 33, last edge 31, pen 23, rotor $00"
  },
  {
   "address": 51126,
   "type": "side",
   "text": "edges 0-12: from/to nibbles"
  },
  {
   "address": 51139,
   "type": "side",
   "text": "$00: edges 13-31 follow as byte pairs"
  },
  {
   "address": 51178,
   "type": "side",
   "text": "vertices 0-33: x|height, z|height"
  },
  {
   "address": 51246,
   "type": "line",
   "text": "City model for 13-04, 03-13, 09-13, 04-15, 09-15: a sign on two posts (15 high) bearing the Commodore logo, facing east and west; Benson says TRAITOR! when one is destroyed (script 49, through $2B00). 29 vertices, 29 edges (edges 0-20 structure, 21-28 road marks); road stubs to the east and west road ends."
  },
  {
   "address": 51246,
   "type": "side",
   "text": "header: last vertex 28, last edge 28, pen 20, rotor $00"
  },
  {
   "address": 51250,
   "type": "side",
   "text": "edges 0-14: from/to nibbles"
  },
  {
   "address": 51265,
   "type": "side",
   "text": "$00: edges 15-28 follow as byte pairs"
  },
  {
   "address": 51294,
   "type": "side",
   "text": "vertices 0-28: x|height, z|height"
  },
  {
   "address": 51354,
   "type": "line",
   "text": "City model for 04-13, 07-15, 08-15: four rectangular blocks of different heights (up to 16), two each side of the east-west road. 38 vertices, 56 edges (edges 0-47 structure, 48-55 road marks); road stubs to the east and west road ends."
  },
  {
   "address": 51354,
   "type": "side",
   "text": "header: last vertex 37, last edge 55, pen 47, rotor $00"
  },
  {
   "address": 51358,
   "type": "side",
   "text": "edges 0-23: from/to nibbles"
  },
  {
   "address": 51382,
   "type": "side",
   "text": "$00: edges 24-55 follow as byte pairs"
  },
  {
   "address": 51447,
   "type": "side",
   "text": "vertices 0-37: x|height, z|height"
  },
  {
   "address": 51527,
   "type": "line",
   "text": "City model for 06-08, 05-14, 10-14: a tapering octagonal tower (10 high) on a square pad west of the north-south road. 28 vertices, 38 edges (edges 0-23 structure, 24-37 road marks); road stubs to the south and north road ends."
  },
  {
   "address": 51527,
   "type": "side",
   "text": "header: last vertex 27, last edge 37, pen 23, rotor $00"
  },
  {
   "address": 51531,
   "type": "side",
   "text": "edges 0-23: from/to nibbles"
  },
  {
   "address": 51555,
   "type": "side",
   "text": "$00: edges 24-37 follow as byte pairs"
  },
  {
   "address": 51584,
   "type": "side",
   "text": "vertices 0-27: x|height, z|height"
  },
  {
   "address": 51640,
   "type": "line",
   "text": "City model for 09-01, 06-02, 15-04, 15-05: a low eight-sided pyramid (3 high) inside an eight-armed star drawn on the ground. 39 vertices, 49 edges (edges 0-16 structure, 17-48 road marks); road stubs to the west, south and north road ends."
  },
  {
   "address": 51640,
   "type": "side",
   "text": "header: last vertex 38, last edge 48, pen 16, rotor $00"
  },
  {
   "address": 51644,
   "type": "side",
   "text": "edges 0-21: from/to nibbles"
  },
  {
   "address": 51666,
   "type": "side",
   "text": "$00: edges 22-48 follow as byte pairs"
  },
  {
   "address": 51721,
   "type": "side",
   "text": "vertices 0-38: x|height, z|height"
  },
  {
   "address": 51799,
   "type": "line",
   "text": "City model for 07-13: a long flat-roofed arcade over the east-west road, sloping ends and three arches in each side (4 high). 44 vertices, 62 edges (edges 0-53 structure, 54-61 road marks); road stubs to the east and west road ends."
  },
  {
   "address": 51799,
   "type": "side",
   "text": "header: last vertex 43, last edge 61, pen 53, rotor $00"
  },
  {
   "address": 51803,
   "type": "side",
   "text": "edges 0-15: from/to nibbles"
  },
  {
   "address": 51819,
   "type": "side",
   "text": "$00: edges 16-61 follow as byte pairs"
  },
  {
   "address": 51912,
   "type": "side",
   "text": "vertices 0-43: x|height, z|height"
  },
  {
   "address": 52000,
   "type": "line",
   "text": "City model for 08-13: eight petals leaning out from an octagonal ring (6 high), like a crown, north of the road. 44 vertices, 54 edges (edges 0-39 structure, 40-53 road marks); road stubs to the east and west road ends."
  },
  {
   "address": 52000,
   "type": "side",
   "text": "header: last vertex 43, last edge 53, pen 39, rotor $00"
  },
  {
   "address": 52004,
   "type": "side",
   "text": "edges 0-17: from/to nibbles"
  },
  {
   "address": 52022,
   "type": "side",
   "text": "$00: edges 18-53 follow as byte pairs"
  },
  {
   "address": 52095,
   "type": "side",
   "text": "vertices 0-43: x|height, z|height"
  },
  {
   "address": 52183,
   "type": "line",
   "text": "City model for 11-02, 11-06, 10-13: an apex 8 high joined by eight struts to four square footings in the corners of the crossroads. 29 vertices, 48 edges (edges 0-31 structure, 32-47 road marks); road stubs to the east, west, south and north road ends."
  },
  {
   "address": 52183,
   "type": "side",
   "text": "header: last vertex 28, last edge 47, pen 31, rotor $00"
  },
  {
   "address": 52187,
   "type": "side",
   "text": "edges 0-27: from/to nibbles"
  },
  {
   "address": 52215,
   "type": "side",
   "text": "$00: edges 28-47 follow as byte pairs"
  },
  {
   "address": 52256,
   "type": "side",
   "text": "vertices 0-28: x|height, z|height"
  },
  {
   "address": 52314,
   "type": "line",
   "text": "City model for 10-08, 06-10: a small narrow pyramid (4 high) inside a hash of crossing road marks. 46 vertices, 51 edges (edges 0-8 structure, 9-50 road marks); road stubs to the south and north road ends."
  },
  {
   "address": 52314,
   "type": "side",
   "text": "header: last vertex 45, last edge 50, pen 8, rotor $00"
  },
  {
   "address": 52318,
   "type": "side",
   "text": "$00: edges 0-50 follow as byte pairs"
  },
  {
   "address": 52421,
   "type": "side",
   "text": "vertices 0-45: x|height, z|height"
  },
  {
   "address": 52513,
   "type": "line",
   "text": "City model for 00-15: a big arrow-like figure drawn on the ground (road marks) with a tall box (8 high) on it. 36 vertices, 41 edges (edges 0-11 structure, 12-40 road marks); a road stub to the east road end."
  },
  {
   "address": 52513,
   "type": "side",
   "text": "header: last vertex 35, last edge 40, pen 11, rotor $00"
  },
  {
   "address": 52517,
   "type": "side",
   "text": "$00: edges 0-40 follow as byte pairs"
  },
  {
   "address": 52600,
   "type": "side",
   "text": "vertices 0-35: x|height, z|height"
  },
  {
   "address": 52672,
   "type": "line",
   "text": "City model for 11-12, 03-14, 04-14: a flat 8 by 8 grid of lines, 16 units square, all in the road-mark pen: no structure, no roads. 32 vertices, 18 edges (all 18 in the road-mark pen, pen byte $FF); no road stubs."
  },
  {
   "address": 52672,
   "type": "side",
   "text": "header: last vertex 31, last edge 17, pen $FF, rotor $00"
  },
  {
   "address": 52676,
   "type": "side",
   "text": "edges 0-7: from/to nibbles"
  },
  {
   "address": 52684,
   "type": "side",
   "text": "$00: edges 8-17 follow as byte pairs"
  },
  {
   "address": 52705,
   "type": "side",
   "text": "vertices 0-31: x|height, z|height"
  },
  {
   "address": 52769,
   "type": "line",
   "text": "Three bytes 4C 00 00 between city_ground_grid ($CDC0) and city_encounter_billboard ($CE24); unread, like the mark at $C4EB."
  },
  {
   "address": 52772,
   "type": "line",
   "text": "City model for 02-03: the ENCOUNTER! billboard on two posts (15 high), the letters drawn as lines; Benson calls it THE AUTHOR'S ADVERT when it is destroyed (script 37). 60 vertices, 47 edges (edges 0-38 structure, 39-46 road marks); road stubs to the south and north road ends."
  },
  {
   "address": 52772,
   "type": "side",
   "text": "header: last vertex 59, last edge 46, pen 38, rotor $00"
  },
  {
   "address": 52776,
   "type": "side",
   "text": "edges 0-10: from/to nibbles"
  },
  {
   "address": 52787,
   "type": "side",
   "text": "$00: edges 11-46 follow as byte pairs"
  },
  {
   "address": 52860,
   "type": "side",
   "text": "vertices 0-59: x|height, z|height"
  },
  {
   "address": 52982,
   "type": "line",
   "text": "City model for 08-08: a three-sided pyramid balanced on its tip, turning, beside a long L-shaped outline on the ground; the square where the game starts. 12 vertices, 14 edges (edges 0-5 structure, 6-13 road marks); no road stubs. Rotor byte $32: the first 3 vertices turn about the point (-12, +15) from the centre; $A12B advances the angle $99/$9A by 24 a pass while the building stands."
  },
  {
   "address": 52982,
   "type": "side",
   "text": "header: last vertex 11, last edge 13, pen 5, rotor $32"
  },
  {
   "address": 52986,
   "type": "side",
   "text": "rotor centre x, z"
  },
  {
   "address": 52988,
   "type": "side",
   "text": "edges 0-13: from/to nibbles"
  },
  {
   "address": 53002,
   "type": "side",
   "text": "vertices 0-2 turn: dx, height, dz"
  },
  {
   "address": 53011,
   "type": "side",
   "text": "vertices 3-11: x|height, z|height"
  },
  {
   "address": 53029,
   "type": "line",
   "text": "City model for 12-03: a cube balanced on one corner (15 high) that turns about its vertical diagonal: SABINS CUBE, as Benson names it when it is destroyed (script 38). 14 vertices, 20 edges (edges 0-11 structure, 12-19 road marks); road stubs to the west and south road ends. Rotor byte $35: the first 6 vertices turn about the point (-5, +5) from the centre; $A12B advances the angle $99/$9A by 24 a pass while the building stands."
  },
  {
   "address": 53029,
   "type": "side",
   "text": "header: last vertex 13, last edge 19, pen 11, rotor $35"
  },
  {
   "address": 53033,
   "type": "side",
   "text": "rotor centre x, z"
  },
  {
   "address": 53035,
   "type": "side",
   "text": "edges 0-15: from/to nibbles"
  },
  {
   "address": 53051,
   "type": "side",
   "text": "$00: edges 16-19 follow as byte pairs"
  },
  {
   "address": 53060,
   "type": "side",
   "text": "vertices 0-5 turn: dx, height, dz"
  },
  {
   "address": 53078,
   "type": "side",
   "text": "vertices 6-13: x|height, z|height"
  },
  {
   "address": 53095,
   "type": "line",
   "text": "Three bytes 4C 00 00 after city_sabins_cube ($CF25), the last model of the $C000 bank; unread, like the mark at $C4EB. A stale copy of object-model data follows."
  },
  {
   "address": 53098,
   "type": "line",
   "text": "149 bytes identical to $3F6A-$3FFE: the tail of the object model at $3F4A (used by objects $3D and $3E) and the whole object model at $3F8D (object $3F), in the format $9728 reads through $2800/$2840. The object table points only at the $3Fxx originals and no pointer of any kind reaches this copy, so it is never read. It is Novagen's, not the packer's: the original Novagen disk, booted to $5000, holds the same bytes at $C000-$CFFE. Why it is here is not known; a leftover from building the memory image is the likeliest reading. The last byte, $CFFF = $38, is the only one in $C000-$CFFF that differs from that disk, so it is probably the packer's (its run-length stage writes downward from $CFFF)."
  },
  {
   "address": 57344,
   "type": "line",
   "text": "ROAD PIECES, $E000-$E1D2: fifteen city models drawn wholly in the road-mark pen (pen byte $FF), one for each way roads can meet in a square: two straights, a crossroads, four T-junctions, four bends and four dead ends; seven are used by the map, eight ($E000, $E098, $E0EA, $E113, $E14D, $E187, $E1AD, $E1C0) by no location. Same format as city_vaned_pyramid. This one: Road piece: a straight east-west road. No entry of $2600/$2700 points here, so this build never draws it. 6 vertices, 8 edges (all 8 in the road-mark pen, pen byte $FF); road stubs to the east and west road ends."
  },
  {
   "address": 57344,
   "type": "side",
   "text": "header: last vertex 5, last edge 7, pen $FF, rotor $00"
  },
  {
   "address": 57348,
   "type": "side",
   "text": "edges 0-3: from/to nibbles"
  },
  {
   "address": 57352,
   "type": "side",
   "text": "$00: edges 4-7 follow as byte pairs"
  },
  {
   "address": 57361,
   "type": "side",
   "text": "vertices 0-5: x|height, z|height"
  },
  {
   "address": 57373,
   "type": "line",
   "text": "Road piece for 10-10, 02-11, 06-11, 02-12, 10-12: a straight north-south road. 6 vertices, 8 edges (all 8 in the road-mark pen, pen byte $FF); road stubs to the south and north road ends."
  },
  {
   "address": 57373,
   "type": "side",
   "text": "header: last vertex 5, last edge 7, pen $FF, rotor $00"
  },
  {
   "address": 57377,
   "type": "side",
   "text": "edges 0-3: from/to nibbles"
  },
  {
   "address": 57381,
   "type": "side",
   "text": "$00: edges 4-7 follow as byte pairs"
  },
  {
   "address": 57390,
   "type": "side",
   "text": "vertices 0-5: x|height, z|height"
  },
  {
   "address": 57402,
   "type": "line",
   "text": "Road piece for 10-03, 11-07, 10-11, 02-13, 05-13: a crossroads. 12 vertices, 16 edges (all 16 in the road-mark pen, pen byte $FF); road stubs to the east, west, south and north road ends."
  },
  {
   "address": 57402,
   "type": "side",
   "text": "header: last vertex 11, last edge 15, pen $FF, rotor $00"
  },
  {
   "address": 57406,
   "type": "side",
   "text": "edges 0-7: from/to nibbles"
  },
  {
   "address": 57414,
   "type": "side",
   "text": "$00: edges 8-15 follow as byte pairs"
  },
  {
   "address": 57431,
   "type": "side",
   "text": "vertices 0-11: x|height, z|height"
  },
  {
   "address": 57455,
   "type": "line",
   "text": "Road piece for 09-00: an east-west road with a branch to the south. 9 vertices, 12 edges (all 12 in the road-mark pen, pen byte $FF); road stubs to the east, west and south road ends."
  },
  {
   "address": 57455,
   "type": "side",
   "text": "header: last vertex 8, last edge 11, pen $FF, rotor $00"
  },
  {
   "address": 57459,
   "type": "side",
   "text": "edges 0-5: from/to nibbles"
  },
  {
   "address": 57465,
   "type": "side",
   "text": "$00: edges 6-11 follow as byte pairs"
  },
  {
   "address": 57478,
   "type": "side",
   "text": "vertices 0-8: x|height, z|height"
  },
  {
   "address": 57496,
   "type": "line",
   "text": "Road piece: an east-west road with a branch to the north. No entry of $2600/$2700 points here, so this build never draws it. 9 vertices, 12 edges (all 12 in the road-mark pen, pen byte $FF); road stubs to the east, west and north road ends."
  },
  {
   "address": 57496,
   "type": "side",
   "text": "header: last vertex 8, last edge 11, pen $FF, rotor $00"
  },
  {
   "address": 57500,
   "type": "side",
   "text": "edges 0-5: from/to nibbles"
  },
  {
   "address": 57506,
   "type": "side",
   "text": "$00: edges 6-11 follow as byte pairs"
  },
  {
   "address": 57519,
   "type": "side",
   "text": "vertices 0-8: x|height, z|height"
  },
  {
   "address": 57537,
   "type": "line",
   "text": "Road piece for 07-06, 15-08, 09-09: a north-south road with a branch to the west. 9 vertices, 12 edges (all 12 in the road-mark pen, pen byte $FF); road stubs to the west, south and north road ends."
  },
  {
   "address": 57537,
   "type": "side",
   "text": "header: last vertex 8, last edge 11, pen $FF, rotor $00"
  },
  {
   "address": 57541,
   "type": "side",
   "text": "edges 0-5: from/to nibbles"
  },
  {
   "address": 57547,
   "type": "side",
   "text": "$00: edges 6-11 follow as byte pairs"
  },
  {
   "address": 57560,
   "type": "side",
   "text": "vertices 0-8: x|height, z|height"
  },
  {
   "address": 57578,
   "type": "line",
   "text": "Road piece: a north-south road with a branch to the east. No entry of $2600/$2700 points here, so this build never draws it. 9 vertices, 12 edges (all 12 in the road-mark pen, pen byte $FF); road stubs to the east, south and north road ends."
  },
  {
   "address": 57578,
   "type": "side",
   "text": "header: last vertex 8, last edge 11, pen $FF, rotor $00"
  },
  {
   "address": 57582,
   "type": "side",
   "text": "edges 0-5: from/to nibbles"
  },
  {
   "address": 57588,
   "type": "side",
   "text": "$00: edges 6-11 follow as byte pairs"
  },
  {
   "address": 57601,
   "type": "side",
   "text": "vertices 0-8: x|height, z|height"
  },
  {
   "address": 57619,
   "type": "line",
   "text": "Road piece: a bend joining the east and south roads. No entry of $2600/$2700 points here, so this build never draws it. 6 vertices, 8 edges (all 8 in the road-mark pen, pen byte $FF); road stubs to the east and south road ends."
  },
  {
   "address": 57619,
   "type": "side",
   "text": "header: last vertex 5, last edge 7, pen $FF, rotor $00"
  },
  {
   "address": 57623,
   "type": "side",
   "text": "edges 0-3: from/to nibbles"
  },
  {
   "address": 57627,
   "type": "side",
   "text": "$00: edges 4-7 follow as byte pairs"
  },
  {
   "address": 57636,
   "type": "side",
   "text": "vertices 0-5: x|height, z|height"
  },
  {
   "address": 57648,
   "type": "line",
   "text": "Road piece for 15-00, 13-06: a bend joining the west and south roads. 6 vertices, 8 edges (all 8 in the road-mark pen, pen byte $FF); road stubs to the west and south road ends."
  },
  {
   "address": 57648,
   "type": "side",
   "text": "header: last vertex 5, last edge 7, pen $FF, rotor $00"
  },
  {
   "address": 57652,
   "type": "side",
   "text": "edges 0-3: from/to nibbles"
  },
  {
   "address": 57656,
   "type": "side",
   "text": "$00: edges 4-7 follow as byte pairs"
  },
  {
   "address": 57665,
   "type": "side",
   "text": "vertices 0-5: x|height, z|height"
  },
  {
   "address": 57677,
   "type": "line",
   "text": "Road piece: a bend joining the west and north roads. No entry of $2600/$2700 points here, so this build never draws it. 6 vertices, 8 edges (all 8 in the road-mark pen, pen byte $FF); road stubs to the west and north road ends."
  },
  {
   "address": 57677,
   "type": "side",
   "text": "header: last vertex 5, last edge 7, pen $FF, rotor $00"
  },
  {
   "address": 57681,
   "type": "side",
   "text": "edges 0-3: from/to nibbles"
  },
  {
   "address": 57685,
   "type": "side",
   "text": "$00: edges 4-7 follow as byte pairs"
  },
  {
   "address": 57694,
   "type": "side",
   "text": "vertices 0-5: x|height, z|height"
  },
  {
   "address": 57706,
   "type": "line",
   "text": "Road piece for 09-02, 03-07, 11-08, 09-11: a bend joining the east and north roads. 6 vertices, 8 edges (all 8 in the road-mark pen, pen byte $FF); road stubs to the east and north road ends."
  },
  {
   "address": 57706,
   "type": "side",
   "text": "header: last vertex 5, last edge 7, pen $FF, rotor $00"
  },
  {
   "address": 57710,
   "type": "side",
   "text": "edges 0-3: from/to nibbles"
  },
  {
   "address": 57714,
   "type": "side",
   "text": "$00: edges 4-7 follow as byte pairs"
  },
  {
   "address": 57723,
   "type": "side",
   "text": "vertices 0-5: x|height, z|height"
  },
  {
   "address": 57735,
   "type": "line",
   "text": "Road piece: a road from the west ending at the centre. No entry of $2600/$2700 points here, so this build never draws it. 4 vertices, 4 edges (all 4 in the road-mark pen, pen byte $FF); a road stub to the west road end."
  },
  {
   "address": 57735,
   "type": "side",
   "text": "header: last vertex 3, last edge 3, pen $FF, rotor $00"
  },
  {
   "address": 57739,
   "type": "side",
   "text": "edges 0-1: from/to nibbles"
  },
  {
   "address": 57741,
   "type": "side",
   "text": "$00: edges 2-3 follow as byte pairs"
  },
  {
   "address": 57746,
   "type": "side",
   "text": "vertices 0-3: x|height, z|height"
  },
  {
   "address": 57754,
   "type": "line",
   "text": "Road piece for 00-01, 00-05, 00-13: a road from the east ending at the centre. 4 vertices, 4 edges (all 4 in the road-mark pen, pen byte $FF); a road stub to the east road end."
  },
  {
   "address": 57754,
   "type": "side",
   "text": "header: last vertex 3, last edge 3, pen $FF, rotor $00"
  },
  {
   "address": 57758,
   "type": "side",
   "text": "edges 0-1: from/to nibbles"
  },
  {
   "address": 57760,
   "type": "side",
   "text": "$00: edges 2-3 follow as byte pairs"
  },
  {
   "address": 57765,
   "type": "side",
   "text": "vertices 0-3: x|height, z|height"
  },
  {
   "address": 57773,
   "type": "line",
   "text": "Road piece: a road from the north ending at the centre. No entry of $2600/$2700 points here, so this build never draws it. 4 vertices, 4 edges (all 4 in the road-mark pen, pen byte $FF); a road stub to the north road end."
  },
  {
   "address": 57773,
   "type": "side",
   "text": "header: last vertex 3, last edge 3, pen $FF, rotor $00"
  },
  {
   "address": 57777,
   "type": "side",
   "text": "edges 0-1: from/to nibbles"
  },
  {
   "address": 57779,
   "type": "side",
   "text": "$00: edges 2-3 follow as byte pairs"
  },
  {
   "address": 57784,
   "type": "side",
   "text": "vertices 0-3: x|height, z|height"
  },
  {
   "address": 57792,
   "type": "line",
   "text": "Road piece: a road from the south ending at the centre. No entry of $2600/$2700 points here, so this build never draws it. 4 vertices, 4 edges (all 4 in the road-mark pen, pen byte $FF); a road stub to the south road end."
  },
  {
   "address": 57792,
   "type": "side",
   "text": "header: last vertex 3, last edge 3, pen $FF, rotor $00"
  },
  {
   "address": 57796,
   "type": "side",
   "text": "edges 0-1: from/to nibbles"
  },
  {
   "address": 57798,
   "type": "side",
   "text": "$00: edges 2-3 follow as byte pairs"
  },
  {
   "address": 57803,
   "type": "side",
   "text": "vertices 0-3: x|height, z|height"
  },
  {
   "address": 57811,
   "type": "line",
   "text": "City model for 12-13: a runway outline (a long north-south strip with a spur to the west road) and a small low building (3 high): JORDAN AIRPORT, as Benson names it when it is destroyed (script 44). 28 vertices, 33 edges (edges 0-11 structure, 12-32 road marks); a road stub to the west road end."
  },
  {
   "address": 57811,
   "type": "side",
   "text": "header: last vertex 27, last edge 32, pen 11, rotor $00"
  },
  {
   "address": 57815,
   "type": "side",
   "text": "edges 0-18: from/to nibbles"
  },
  {
   "address": 57834,
   "type": "side",
   "text": "$00: edges 19-32 follow as byte pairs"
  },
  {
   "address": 57863,
   "type": "side",
   "text": "vertices 0-27: x|height, z|height"
  },
  {
   "address": 57919,
   "type": "line",
   "text": "City model for 12-12: the word AIRPORT written on the ground inside an arrow outline, drawn in the structure pen (height 0). 36 vertices, 27 edges (all 27 in the structure pen); no road stubs."
  },
  {
   "address": 57919,
   "type": "side",
   "text": "header: last vertex 35, last edge 26, pen 26, rotor $00"
  },
  {
   "address": 57923,
   "type": "side",
   "text": "edges 0-9: from/to nibbles"
  },
  {
   "address": 57933,
   "type": "side",
   "text": "$00: edges 10-26 follow as byte pairs"
  },
  {
   "address": 57968,
   "type": "side",
   "text": "vertices 0-35: x|height, z|height"
  },
  {
   "address": 58040,
   "type": "line",
   "text": "City model for 07-02, 13-03, 00-07, 08-10, 12-10, 03-11, 07-11, 00-12, 09-12: a small cube, 3 units a side, its faces ruled into 3 by 3 squares, just south-east of the centre. 32 vertices, 32 edges (all 32 in the structure pen); no road stubs."
  },
  {
   "address": 58040,
   "type": "side",
   "text": "header: last vertex 31, last edge 31, pen 31, rotor $00"
  },
  {
   "address": 58044,
   "type": "side",
   "text": "edges 0-3: from/to nibbles"
  },
  {
   "address": 58048,
   "type": "side",
   "text": "$00: edges 4-31 follow as byte pairs"
  },
  {
   "address": 58105,
   "type": "side",
   "text": "vertices 0-31: x|height, z|height"
  },
  {
   "address": 58169,
   "type": "line",
   "text": "City model for 14-01, 14-02, 14-03, 00-04, 00-06, 11-09, 04-12: a plain square tower, 4 units wide and 16 high. 8 vertices, 12 edges (all 12 in the structure pen); no road stubs."
  },
  {
   "address": 58169,
   "type": "side",
   "text": "header: last vertex 7, last edge 11, pen 11, rotor $00"
  },
  {
   "address": 58173,
   "type": "side",
   "text": "edges 0-11: from/to nibbles"
  },
  {
   "address": 58185,
   "type": "side",
   "text": "vertices 0-7: x|height, z|height"
  },
  {
   "address": 58205,
   "type": "line",
   "text": "City model for 00-03, 14-06, 14-07, 00-08, 00-10, 11-10, 03-12, 07-12, 00-14: a radar dish (up to 8 high) on a short mast; the 16 vertices of the dish turn about the centre. 23 vertices, 33 edges (edges 0-28 structure, 29-32 road marks); no road stubs. Rotor byte $7F: the first 16 vertices turn about the point (+0, +0) from the centre; $A12B advances the angle $99/$9A by 56 a pass while the building stands."
  },
  {
   "address": 58205,
   "type": "side",
   "text": "header: last vertex 22, last edge 32, pen 28, rotor $7F"
  },
  {
   "address": 58209,
   "type": "side",
   "text": "rotor centre x, z"
  },
  {
   "address": 58211,
   "type": "side",
   "text": "edges 0-22: from/to nibbles"
  },
  {
   "address": 58234,
   "type": "side",
   "text": "$00: edges 23-32 follow as byte pairs"
  },
  {
   "address": 58255,
   "type": "side",
   "text": "vertices 0-15 turn: dx, height, dz"
  },
  {
   "address": 58303,
   "type": "side",
   "text": "vertices 16-22: x|height, z|height"
  },
  {
   "address": 58317,
   "type": "line",
   "text": "City model for 01-00, 03-03: a square tower (12 high) topped by a spike with four turning points (a spinning diamond at 14), on the corner of a bend. 20 vertices, 28 edges (edges 0-19 structure, 20-27 road marks); road stubs to the east and south road ends. Rotor byte $73: the first 4 vertices turn about the point (+4, +4) from the centre; $A12B advances the angle $99/$9A by 56 a pass while the building stands."
  },
  {
   "address": 58317,
   "type": "side",
   "text": "header: last vertex 19, last edge 27, pen 19, rotor $73"
  },
  {
   "address": 58321,
   "type": "side",
   "text": "rotor centre x, z"
  },
  {
   "address": 58323,
   "type": "side",
   "text": "edges 0-20: from/to nibbles"
  },
  {
   "address": 58344,
   "type": "side",
   "text": "$00: edges 21-27 follow as byte pairs"
  },
  {
   "address": 58359,
   "type": "side",
   "text": "vertices 0-3 turn: dx, height, dz"
  },
  {
   "address": 58371,
   "type": "side",
   "text": "vertices 4-19: x|height, z|height"
  },
  {
   "address": 58404,
   "type": "line",
   "text": "City model for 00-00, 12-01, 08-02, 12-09, 03-10, 04-10, 07-10, 00-11 (00-00 never shows it: location index 0 also means no building, so $952D skips the load and $85B5 the drawing): a tapering four-sided lattice pylon (16 high) with cross-bracing. 17 vertices, 40 edges (all 40 in the structure pen); no road stubs."
  },
  {
   "address": 58404,
   "type": "side",
   "text": "header: last vertex 16, last edge 39, pen 39, rotor $00"
  },
  {
   "address": 58408,
   "type": "side",
   "text": "edges 0-36: from/to nibbles"
  },
  {
   "address": 58445,
   "type": "side",
   "text": "$00: edges 37-39 follow as byte pairs"
  },
  {
   "address": 58452,
   "type": "side",
   "text": "vertices 0-16: x|height, z|height"
  },
  {
   "address": 58487,
   "type": "line",
   "text": "City model for 01-01, 04-03, 01-05, 02-05, 03-05, 04-05, 06-05, 07-05, 08-05, 10-05, 11-05, 12-05, 01-13: a humpbacked bridge carrying the north-south road over the east-west road: a deck 4 high between ramps, a pylon 8 high at each end and stays down to the deck. 30 vertices, 34 edges (edges 0-17 structure, 18-33 road marks); road stubs to the east, west, south and north road ends."
  },
  {
   "address": 58487,
   "type": "side",
   "text": "header: last vertex 29, last edge 33, pen 17, rotor $00"
  },
  {
   "address": 58491,
   "type": "side",
   "text": "edges 0-13: from/to nibbles"
  },
  {
   "address": 58505,
   "type": "side",
   "text": "$00: edges 14-33 follow as byte pairs"
  },
  {
   "address": 58546,
   "type": "side",
   "text": "vertices 0-29: x|height, z|height"
  },
  {
   "address": 58606,
   "type": "line",
   "text": "City model for 02-00, 11-00, 08-03, 06-04, 09-07: a small box (3 high) in the south-east corner of a T-junction. 17 vertices, 24 edges (edges 0-11 structure, 12-23 road marks); road stubs to the east, west and south road ends."
  },
  {
   "address": 58606,
   "type": "side",
   "text": "header: last vertex 16, last edge 23, pen 11, rotor $00"
  },
  {
   "address": 58610,
   "type": "side",
   "text": "edges 0-16: from/to nibbles"
  },
  {
   "address": 58627,
   "type": "side",
   "text": "$00: edges 17-23 follow as byte pairs"
  },
  {
   "address": 58642,
   "type": "side",
   "text": "vertices 0-16: x|height, z|height"
  },
  {
   "address": 58676,
   "type": "line",
   "text": "City model for 04-00, 06-01, 07-03, 05-07: a square tower with a pyramid roof (16 high) in the south-east corner of a T-junction. 18 vertices, 28 edges (edges 0-15 structure, 16-27 road marks); road stubs to the east, west and south road ends."
  },
  {
   "address": 58676,
   "type": "side",
   "text": "header: last vertex 17, last edge 27, pen 15, rotor $00"
  },
  {
   "address": 58680,
   "type": "side",
   "text": "edges 0-19: from/to nibbles"
  },
  {
   "address": 58700,
   "type": "side",
   "text": "$00: edges 20-27 follow as byte pairs"
  },
  {
   "address": 58717,
   "type": "side",
   "text": "vertices 0-17: x|height, z|height"
  },
  {
   "address": 58754,
   "type": "line",
   "text": "City model for 05-06: a square beam leaning across the east-west road from the ground to 4. 18 vertices, 28 edges (edges 0-19 structure, 20-27 road marks); road stubs to the east and west road ends."
  },
  {
   "address": 58754,
   "type": "side",
   "text": "header: last vertex 17, last edge 27, pen 19, rotor $00"
  },
  {
   "address": 58758,
   "type": "side",
   "text": "edges 0-21: from/to nibbles"
  },
  {
   "address": 58780,
   "type": "side",
   "text": "$00: edges 22-27 follow as byte pairs"
  },
  {
   "address": 58793,
   "type": "side",
   "text": "vertices 0-17: x|height, z|height"
  },
  {
   "address": 58829,
   "type": "line",
   "text": "City model for 09-08: a flat-topped arch (4 high) straddling the north-south road. 22 vertices, 32 edges (edges 0-23 structure, 24-31 road marks); road stubs to the south and north road ends."
  },
  {
   "address": 58829,
   "type": "side",
   "text": "header: last vertex 21, last edge 31, pen 23, rotor $00"
  },
  {
   "address": 58833,
   "type": "side",
   "text": "edges 0-23: from/to nibbles"
  },
  {
   "address": 58857,
   "type": "side",
   "text": "$00: edges 24-31 follow as byte pairs"
  },
  {
   "address": 58874,
   "type": "side",
   "text": "vertices 0-21: x|height, z|height"
  },
  {
   "address": 58918,
   "type": "line",
   "text": "City model for 12-07, 13-11, 15-15: a tall thin square obelisk (14 high) in the north-west corner of a bend. 11 vertices, 16 edges (edges 0-7 structure, 8-15 road marks); road stubs to the west and north road ends."
  },
  {
   "address": 58918,
   "type": "side",
   "text": "header: last vertex 10, last edge 15, pen 7, rotor $00"
  },
  {
   "address": 58922,
   "type": "side",
   "text": "edges 0-11: from/to nibbles"
  },
  {
   "address": 58934,
   "type": "side",
   "text": "$00: edges 12-15 follow as byte pairs"
  },
  {
   "address": 58943,
   "type": "side",
   "text": "vertices 0-10: x|height, z|height"
  },
  {
   "address": 58965,
   "type": "line",
   "text": "City model for 05-01, 08-01, 12-02, 13-05, 07-09, 13-15: an L-shaped cottage with pitched roofs and a door (4 high) south of the east-west road. 25 vertices, 35 edges (edges 0-26 structure, 27-34 road marks); road stubs to the east and west road ends."
  },
  {
   "address": 58965,
   "type": "side",
   "text": "header: last vertex 24, last edge 34, pen 26, rotor $00"
  },
  {
   "address": 58969,
   "type": "side",
   "text": "edges 0-23: from/to nibbles"
  },
  {
   "address": 58993,
   "type": "side",
   "text": "$00: edges 24-34 follow as byte pairs"
  },
  {
   "address": 59016,
   "type": "side",
   "text": "vertices 0-24: x|height, z|height"
  },
  {
   "address": 59066,
   "type": "line",
   "text": "City model for 08-04, 10-04, 12-04, 10-06, 12-06, 13-08: four tall blocks (up to 14), one in each corner of the crossroads. 44 vertices, 64 edges (edges 0-47 structure, 48-63 road marks); road stubs to the east, west, south and north road ends."
  },
  {
   "address": 59066,
   "type": "side",
   "text": "header: last vertex 43, last edge 63, pen 47, rotor $00"
  },
  {
   "address": 59070,
   "type": "side",
   "text": "edges 0-23: from/to nibbles"
  },
  {
   "address": 59094,
   "type": "side",
   "text": "$00: edges 24-63 follow as byte pairs"
  },
  {
   "address": 59175,
   "type": "side",
   "text": "vertices 0-43: x|height, z|height"
  },
  {
   "address": 59263,
   "type": "line",
   "text": "City model for 04-09: a barrel vault of segmented panels (5 high), an arch shaped like half an octagonal tube. 28 vertices, 44 edges (all 44 in the structure pen); no road stubs."
  },
  {
   "address": 59263,
   "type": "side",
   "text": "header: last vertex 27, last edge 43, pen 43, rotor $00"
  },
  {
   "address": 59267,
   "type": "side",
   "text": "edges 0-20: from/to nibbles"
  },
  {
   "address": 59288,
   "type": "side",
   "text": "$00: edges 21-43 follow as byte pairs"
  },
  {
   "address": 59335,
   "type": "side",
   "text": "vertices 0-27: x|height, z|height"
  },
  {
   "address": 59391,
   "type": "line",
   "text": "City model for 03-09, 04-11, 08-12: an octagonal cone 3 high rising from the ground inside a flared octagonal rim 1 high; its header counts 18 vertices where the data holds 17, so the loader takes the next model's first two bytes as an unused 18th. 17 vertices (the header counts 18), 32 edges (all 32 in the structure pen); no road stubs."
  },
  {
   "address": 59391,
   "type": "side",
   "text": "header: last vertex 17, last edge 31, pen 31, rotor $00"
  },
  {
   "address": 59395,
   "type": "side",
   "text": "edges 0-28: from/to nibbles"
  },
  {
   "address": 59424,
   "type": "side",
   "text": "$00: edges 29-31 follow as byte pairs"
  },
  {
   "address": 59431,
   "type": "side",
   "text": "vertices 0-17: x|height, z|height"
  },
  {
   "address": 59465,
   "type": "line",
   "text": "City model for 03-02, 00-09, 08-11: a tall square tower (23 high) on a flared plinth. 16 vertices, 28 edges (all 28 in the structure pen); no road stubs."
  },
  {
   "address": 59465,
   "type": "side",
   "text": "header: last vertex 15, last edge 27, pen 27, rotor $00"
  },
  {
   "address": 59469,
   "type": "side",
   "text": "edges 0-27: from/to nibbles"
  },
  {
   "address": 59497,
   "type": "side",
   "text": "vertices 0-15: x|height, z|height"
  },
  {
   "address": 59533,
   "type": "line",
   "text": "City model for 03-08: a giant head (16 high) with a face, frowning eyes and a nose on its front; Benson says NOVABILL - WELL DONE! when it is destroyed (script 36). 26 vertices, 32 edges (all 32 in the structure pen); no road stubs."
  },
  {
   "address": 59533,
   "type": "side",
   "text": "header: last vertex 25, last edge 31, pen 31, rotor $00"
  },
  {
   "address": 59537,
   "type": "side",
   "text": "edges 0-19: from/to nibbles"
  },
  {
   "address": 59557,
   "type": "side",
   "text": "$00: edges 20-31 follow as byte pairs"
  },
  {
   "address": 59582,
   "type": "side",
   "text": "vertices 0-25: x|height, z|height"
  },
  {
   "address": 59638,
   "type": "line",
   "text": "City model for 04-08: a needle (12 high) on a three-pointed star. 10 vertices, 24 edges (all 24 in the structure pen); no road stubs."
  },
  {
   "address": 59638,
   "type": "side",
   "text": "header: last vertex 9, last edge 23, pen 23, rotor $00"
  },
  {
   "address": 59642,
   "type": "side",
   "text": "edges 0-23: from/to nibbles"
  },
  {
   "address": 59666,
   "type": "side",
   "text": "vertices 0-9: x|height, z|height"
  },
  {
   "address": 59686,
   "type": "line",
   "text": "City model for 05-05: two tall blocks (7 high) either side of the east-west road, joined by a link across it. 30 vertices, 44 edges (edges 0-35 structure, 36-43 road marks); road stubs to the east and west road ends."
  },
  {
   "address": 59686,
   "type": "side",
   "text": "header: last vertex 29, last edge 43, pen 35, rotor $00"
  },
  {
   "address": 59690,
   "type": "side",
   "text": "edges 0-23: from/to nibbles"
  },
  {
   "address": 59714,
   "type": "side",
   "text": "$00: edges 24-43 follow as byte pairs"
  },
  {
   "address": 59755,
   "type": "side",
   "text": "vertices 0-29: x|height, z|height"
  },
  {
   "address": 59815,
   "type": "line",
   "text": "City model for 03-00, 09-05, 09-06, 11-13, 03-15: a lift entrance: a small three-sided cage (1 1/8 high, open to the south) on a pad north-west of the centre, joined to the east-west road by a path. 29 vertices, 32 edges (edges 0-16 structure, 17-31 road marks); road stubs to the east and west road ends."
  },
  {
   "address": 59815,
   "type": "side",
   "text": "header: last vertex 28, last edge 31, pen 16, rotor $00"
  },
  {
   "address": 59819,
   "type": "side",
   "text": "edges 0-16: from/to nibbles"
  },
  {
   "address": 59836,
   "type": "side",
   "text": "$00: edges 17-31 follow as byte pairs"
  },
  {
   "address": 59867,
   "type": "side",
   "text": "vertices 0-28: x|height, z|height"
  },
  {
   "address": 59937,
   "type": "line",
   "text": "City model for 06-06, 07-07: a long low wall (2 high) in a hook-shaped plan in the south-west corner of a T-junction. 32 vertices, 43 edges (edges 0-23 structure, 24-42 road marks); road stubs to the east, west and north road ends."
  },
  {
   "address": 59937,
   "type": "side",
   "text": "header: last vertex 31, last edge 42, pen 23, rotor $00"
  },
  {
   "address": 59941,
   "type": "side",
   "text": "edges 0-23: from/to nibbles"
  },
  {
   "address": 59965,
   "type": "side",
   "text": "$00: edges 24-42 follow as byte pairs"
  },
  {
   "address": 60004,
   "type": "side",
   "text": "vertices 0-31: x|height, z|height"
  },
  {
   "address": 60068,
   "type": "line",
   "text": "City model for 15-03: a block 6 high in a stepped Z-shaped plan west of the north-south road. 35 vertices, 49 edges (edges 0-35 structure, 36-48 road marks); road stubs to the south and north road ends."
  },
  {
   "address": 60068,
   "type": "side",
   "text": "header: last vertex 34, last edge 48, pen 35, rotor $00"
  },
  {
   "address": 60072,
   "type": "side",
   "text": "edges 0-18: from/to nibbles"
  },
  {
   "address": 60091,
   "type": "side",
   "text": "$00: edges 19-48 follow as byte pairs"
  },
  {
   "address": 60152,
   "type": "side",
   "text": "vertices 0-34: x|height, z|height"
  },
  {
   "address": 60222,
   "type": "line",
   "text": "City model for 04-06: two tall thin slabs (13 high) standing in a cross on a cross-shaped footing south-west of a T-junction. 44 vertices, 45 edges (edges 0-13 structure, 14-44 road marks); road stubs to the east, west and north road ends."
  },
  {
   "address": 60222,
   "type": "side",
   "text": "header: last vertex 43, last edge 44, pen 13, rotor $00"
  },
  {
   "address": 60226,
   "type": "side",
   "text": "edges 0-11: from/to nibbles"
  },
  {
   "address": 60238,
   "type": "side",
   "text": "$00: edges 12-44 follow as byte pairs"
  },
  {
   "address": 60305,
   "type": "side",
   "text": "vertices 0-43: x|height, z|height"
  },
  {
   "address": 60393,
   "type": "line",
   "text": "City model for 01-04, 01-11: a small square pyramid (4 high) with a crest of small spikes, on a pad west of the north-south road. 23 vertices, 36 edges (edges 0-23 structure, 24-35 road marks); road stubs to the south and north road ends."
  },
  {
   "address": 60393,
   "type": "side",
   "text": "header: last vertex 22, last edge 35, pen 23, rotor $00"
  },
  {
   "address": 60397,
   "type": "side",
   "text": "edges 0-25: from/to nibbles"
  },
  {
   "address": 60423,
   "type": "side",
   "text": "$00: edges 26-35 follow as byte pairs"
  },
  {
   "address": 60444,
   "type": "side",
   "text": "vertices 0-22: x|height, z|height"
  },
  {
   "address": 60490,
   "type": "line",
   "text": "City model for 02-04: a ring of pointed stones (3 high) round a cross, on an octagonal pad: VECTOR HENGE, as Benson names it when it is destroyed (script 45). 41 vertices, 51 edges (edges 0-23 structure, 24-50 road marks); road stubs to the south and north road ends."
  },
  {
   "address": 60490,
   "type": "side",
   "text": "header: last vertex 40, last edge 50, pen 23, rotor $00"
  },
  {
   "address": 60494,
   "type": "side",
   "text": "edges 0-23: from/to nibbles"
  },
  {
   "address": 60518,
   "type": "side",
   "text": "$00: edges 24-50 follow as byte pairs"
  },
  {
   "address": 60573,
   "type": "side",
   "text": "vertices 0-40: x|height, z|height"
  },
  {
   "address": 60655,
   "type": "line",
   "text": "City model for 03-04: cubes stacked in steps (6 high) west of the north-south road. 43 vertices, 48 edges (edges 0-32 structure, 33-47 road marks); road stubs to the south and north road ends."
  },
  {
   "address": 60655,
   "type": "side",
   "text": "header: last vertex 42, last edge 47, pen 32, rotor $00"
  },
  {
   "address": 60659,
   "type": "side",
   "text": "edges 0-9: from/to nibbles"
  },
  {
   "address": 60669,
   "type": "side",
   "text": "$00: edges 10-47 follow as byte pairs"
  },
  {
   "address": 60746,
   "type": "side",
   "text": "vertices 0-42: x|height, z|height"
  },
  {
   "address": 60832,
   "type": "line",
   "text": "City model for 01-06, 01-08, 01-09, 02-09, 05-09, 13-09, 13-10, 15-11, 01-12, 06-12, 15-12, 15-13, 01-14, 02-14: a lattice mast with an aerial (15 high) on a truncated triangular base, west of the north-south road. 29 vertices, 54 edges (edges 0-42 structure, 43-53 road marks); road stubs to the south and north road ends."
  },
  {
   "address": 60832,
   "type": "side",
   "text": "header: last vertex 28, last edge 53, pen 42, rotor $00"
  },
  {
   "address": 60836,
   "type": "side",
   "text": "edges 0-28: from/to nibbles"
  },
  {
   "address": 60865,
   "type": "side",
   "text": "$00: edges 29-53 follow as byte pairs"
  },
  {
   "address": 60916,
   "type": "side",
   "text": "vertices 0-28: x|height, z|height"
  },
  {
   "address": 60975,
   "type": "line",
   "text": "City model for 02-06, 15-09: two cones meeting point to point (6 high), lying east-west across the north-south road. 32 vertices, 42 edges (edges 0-23 structure, 24-41 road marks); road stubs to the south and north road ends."
  },
  {
   "address": 60975,
   "type": "side",
   "text": "header: last vertex 31, last edge 41, pen 23, rotor $00"
  },
  {
   "address": 60979,
   "type": "side",
   "text": "edges 0-23: from/to nibbles"
  },
  {
   "address": 61003,
   "type": "side",
   "text": "$00: edges 24-41 follow as byte pairs"
  },
  {
   "address": 61040,
   "type": "side",
   "text": "vertices 0-31: x|height, z|height"
  },
  {
   "address": 61104,
   "type": "line",
   "text": "City model for 13-02: a maze of road marks with a small truncated pyramid (4 high) in it. 38 vertices, 43 edges (edges 0-11 structure, 12-42 road marks); a road stub to the west road end."
  },
  {
   "address": 61104,
   "type": "side",
   "text": "header: last vertex 37, last edge 42, pen 11, rotor $00"
  },
  {
   "address": 61108,
   "type": "side",
   "text": "$00: edges 0-42 follow as byte pairs"
  },
  {
   "address": 61195,
   "type": "side",
   "text": "vertices 0-37: x|height, z|height"
  },
  {
   "address": 61271,
   "type": "line",
   "text": "City model for 06-00: a zigzag of four sloping panels (a W profile, 5 high) over a rectangular outline south of the road: THE WALTON MONUMENT, as Benson names it when it is destroyed (script 39). 41 vertices, 53 edges (edges 0-29 structure, 30-52 road marks); road stubs to the east and west road ends."
  },
  {
   "address": 61271,
   "type": "side",
   "text": "header: last vertex 40, last edge 52, pen 29, rotor $00"
  },
  {
   "address": 61275,
   "type": "side",
   "text": "edges 0-20: from/to nibbles"
  },
  {
   "address": 61296,
   "type": "side",
   "text": "$00: edges 21-52 follow as byte pairs"
  },
  {
   "address": 61361,
   "type": "side",
   "text": "vertices 0-40: x|height, z|height"
  },
  {
   "address": 61440,
   "type": "line",
   "text": "End of city_walton_monument ($EF57): the last byte of vertex 39 and vertex 40. A symbol sits here because the start-up copy at $5005 stores to $F000,X (the $6000-$6FFF block copied up to $F000)."
  },
  {
   "address": 61443,
   "type": "line",
   "text": "City model for 07-00: a needle (13 high) with long fins to east and west on a pad south of the road: TYLER POINT, as Benson names it when it is destroyed (script 42). 21 vertices, 32 edges (edges 0-19 structure, 20-31 road marks); road stubs to the east and west road ends."
  },
  {
   "address": 61443,
   "type": "side",
   "text": "header: last vertex 20, last edge 31, pen 19, rotor $00"
  },
  {
   "address": 61447,
   "type": "side",
   "text": "edges 0-23: from/to nibbles"
  },
  {
   "address": 61471,
   "type": "side",
   "text": "$00: edges 24-31 follow as byte pairs"
  },
  {
   "address": 61488,
   "type": "side",
   "text": "vertices 0-20: x|height, z|height"
  },
  {
   "address": 61530,
   "type": "line",
   "text": "City model for 13-01, 00-02, 14-10, 14-11, 13-12, 14-12, 13-13, 14-13, 06-14, 07-14, 08-14, 09-14, 11-14, 12-14, 13-14, 14-14: eight thin three-sided spikes of different heights (up to 12) scattered over the square. 40 vertices, 56 edges (all 56 in the structure pen); no road stubs."
  },
  {
   "address": 61530,
   "type": "side",
   "text": "header: last vertex 39, last edge 55, pen 55, rotor $00"
  },
  {
   "address": 61534,
   "type": "side",
   "text": "edges 0-20: from/to nibbles"
  },
  {
   "address": 61555,
   "type": "side",
   "text": "$00: edges 21-55 follow as byte pairs"
  },
  {
   "address": 61626,
   "type": "side",
   "text": "vertices 0-39: x|height, z|height"
  },
  {
   "address": 61706,
   "type": "line",
   "text": "City model for 01-02: a low block (6 high) with an I-shaped plan west of the north-south road. 30 vertices, 44 edges (edges 0-35 structure, 36-43 road marks); road stubs to the south and north road ends."
  },
  {
   "address": 61706,
   "type": "side",
   "text": "header: last vertex 29, last edge 43, pen 35, rotor $00"
  },
  {
   "address": 61710,
   "type": "side",
   "text": "edges 0-18: from/to nibbles"
  },
  {
   "address": 61729,
   "type": "side",
   "text": "$00: edges 19-43 follow as byte pairs"
  },
  {
   "address": 61780,
   "type": "side",
   "text": "vertices 0-29: x|height, z|height"
  },
  {
   "address": 61840,
   "type": "line",
   "text": "City model for 05-00, 05-02, 12-15, 14-15: two long houses with pitched roofs (4 high), one each side of the east-west road. 26 vertices, 38 edges (edges 0-29 structure, 30-37 road marks); road stubs to the east and west road ends."
  },
  {
   "address": 61840,
   "type": "side",
   "text": "header: last vertex 25, last edge 37, pen 29, rotor $00"
  },
  {
   "address": 61844,
   "type": "side",
   "text": "edges 0-19: from/to nibbles"
  },
  {
   "address": 61864,
   "type": "side",
   "text": "$00: edges 20-37 follow as byte pairs"
  },
  {
   "address": 61901,
   "type": "side",
   "text": "vertices 0-25: x|height, z|height"
  },
  {
   "address": 61953,
   "type": "line",
   "text": "City model for 02-02: a low three-sided pyramid (4 high) on a triangular pad west of the north-south road. 22 vertices, 30 edges (edges 0-14 structure, 15-29 road marks); road stubs to the south and north road ends."
  },
  {
   "address": 61953,
   "type": "side",
   "text": "header: last vertex 21, last edge 29, pen 14, rotor $00"
  },
  {
   "address": 61957,
   "type": "side",
   "text": "edges 0-16: from/to nibbles"
  },
  {
   "address": 61974,
   "type": "side",
   "text": "$00: edges 17-29 follow as byte pairs"
  },
  {
   "address": 62001,
   "type": "side",
   "text": "vertices 0-21: x|height, z|height"
  },
  {
   "address": 62045,
   "type": "line",
   "text": "City model for 15-01: an octagonal drum under a tall cone (15 high), on a diamond pad west of the north-south road. 27 vertices, 44 edges (edges 0-31 structure, 32-43 road marks); road stubs to the south and north road ends."
  },
  {
   "address": 62045,
   "type": "side",
   "text": "header: last vertex 26, last edge 43, pen 31, rotor $00"
  },
  {
   "address": 62049,
   "type": "side",
   "text": "edges 0-28: from/to nibbles"
  },
  {
   "address": 62078,
   "type": "side",
   "text": "$00: edges 29-43 follow as byte pairs"
  },
  {
   "address": 62109,
   "type": "side",
   "text": "vertices 0-26: x|height, z|height"
  },
  {
   "address": 62164,
   "type": "line",
   "text": "City model for 10-01: a gabled lintel on two square pillars (7 high) spanning the north-south road: THE MOORBY ARCH, as Benson names it when it is destroyed (script 41). 28 vertices, 41 edges (edges 0-32 structure, 33-40 road marks); road stubs to the south and north road ends."
  },
  {
   "address": 62164,
   "type": "side",
   "text": "header: last vertex 27, last edge 40, pen 32, rotor $00"
  },
  {
   "address": 62168,
   "type": "side",
   "text": "edges 0-21: from/to nibbles"
  },
  {
   "address": 62190,
   "type": "side",
   "text": "$00: edges 22-40 follow as byte pairs"
  },
  {
   "address": 62229,
   "type": "side",
   "text": "vertices 0-27: x|height, z|height"
  },
  {
   "address": 62285,
   "type": "line",
   "text": "City model for 11-01: four tall blocks widening upwards (9 high) in a cross plan west of the north-south road. 30 vertices, 44 edges (edges 0-35 structure, 36-43 road marks); road stubs to the south and north road ends."
  },
  {
   "address": 62285,
   "type": "side",
   "text": "header: last vertex 29, last edge 43, pen 35, rotor $00"
  },
  {
   "address": 62289,
   "type": "side",
   "text": "edges 0-18: from/to nibbles"
  },
  {
   "address": 62308,
   "type": "side",
   "text": "$00: edges 19-43 follow as byte pairs"
  },
  {
   "address": 62359,
   "type": "side",
   "text": "vertices 0-29: x|height, z|height"
  },
  {
   "address": 62419,
   "type": "line",
   "text": "City model for 06-03: a church: a nave with a pitched roof and a door, a spire (12 high) at its west end: ST. STALLARDS, as Benson names it when it is destroyed (script 40). 28 vertices, 41 edges (edges 0-28 structure, 29-40 road marks); road stubs to the east, west and north road ends."
  },
  {
   "address": 62419,
   "type": "side",
   "text": "header: last vertex 27, last edge 40, pen 28, rotor $00"
  },
  {
   "address": 62423,
   "type": "side",
   "text": "edges 0-25: from/to nibbles"
  },
  {
   "address": 62449,
   "type": "side",
   "text": "$00: edges 26-40 follow as byte pairs"
  },
  {
   "address": 62480,
   "type": "side",
   "text": "vertices 0-27: x|height, z|height"
  },
  {
   "address": 62536,
   "type": "line",
   "text": "City model for 15-02: a U-shaped inn of three pitched-roof wings (4 high) around the north-south road: THE COACH AND HORSES, as Benson names it when it is destroyed (script 48). 34 vertices, 53 edges (edges 0-44 structure, 45-52 road marks); road stubs to the south and north road ends."
  },
  {
   "address": 62536,
   "type": "side",
   "text": "header: last vertex 33, last edge 52, pen 44, rotor $00"
  },
  {
   "address": 62540,
   "type": "side",
   "text": "edges 0-19: from/to nibbles"
  },
  {
   "address": 62560,
   "type": "side",
   "text": "$00: edges 20-52 follow as byte pairs"
  },
  {
   "address": 62627,
   "type": "side",
   "text": "vertices 0-33: x|height, z|height"
  },
  {
   "address": 62695,
   "type": "line",
   "text": "City model for 01-03: a faceted gateway (5 high) straddling the north-south road, bow-tie shaped in plan. 26 vertices, 39 edges (edges 0-30 structure, 31-38 road marks); road stubs to the south and north road ends."
  },
  {
   "address": 62695,
   "type": "side",
   "text": "header: last vertex 25, last edge 38, pen 30, rotor $00"
  },
  {
   "address": 62699,
   "type": "side",
   "text": "edges 0-18: from/to nibbles"
  },
  {
   "address": 62718,
   "type": "side",
   "text": "$00: edges 19-38 follow as byte pairs"
  },
  {
   "address": 62759,
   "type": "side",
   "text": "vertices 0-25: x|height, z|height"
  },
  {
   "address": 62811,
   "type": "line",
   "text": "City model for 02-01, 07-04, 11-04: a canopy of four low pyramid roofs (3 high) on corner posts over the crossroads. 33 vertices, 42 edges (edges 0-25 structure, 26-41 road marks); road stubs to the east, west, south and north road ends."
  },
  {
   "address": 62811,
   "type": "side",
   "text": "header: last vertex 32, last edge 41, pen 25, rotor $00"
  },
  {
   "address": 62815,
   "type": "side",
   "text": "edges 0-21: from/to nibbles"
  },
  {
   "address": 62837,
   "type": "side",
   "text": "$00: edges 22-41 follow as byte pairs"
  },
  {
   "address": 62878,
   "type": "side",
   "text": "vertices 0-32: x|height, z|height"
  },
  {
   "address": 62944,
   "type": "line",
   "text": "City model for 11-11: four tapering wings (5 high) meeting in a cross plan south of the east-west road. 30 vertices, 48 edges (edges 0-39 structure, 40-47 road marks); road stubs to the east and west road ends."
  },
  {
   "address": 62944,
   "type": "side",
   "text": "header: last vertex 29, last edge 47, pen 39, rotor $00"
  },
  {
   "address": 62948,
   "type": "side",
   "text": "edges 0-22: from/to nibbles"
  },
  {
   "address": 62971,
   "type": "side",
   "text": "$00: edges 23-47 follow as byte pairs"
  },
  {
   "address": 63022,
   "type": "side",
   "text": "vertices 0-29: x|height, z|height"
  },
  {
   "address": 63082,
   "type": "line",
   "text": "City model for 04-07: a pyramid (11 high) over a cross-shaped chequered base south of the east-west road. 36 vertices, 39 edges (edges 0-30 structure, 31-38 road marks); road stubs to the east and west road ends."
  },
  {
   "address": 63082,
   "type": "side",
   "text": "header: last vertex 35, last edge 38, pen 30, rotor $00"
  },
  {
   "address": 63086,
   "type": "side",
   "text": "edges 0-4: from/to nibbles"
  },
  {
   "address": 63091,
   "type": "side",
   "text": "$00: edges 5-38 follow as byte pairs"
  },
  {
   "address": 63160,
   "type": "side",
   "text": "vertices 0-35: x|height, z|height"
  },
  {
   "address": 63232,
   "type": "line",
   "text": "City model for 07-08: five tall blocks (8 high), four at the corners of a square and one in the middle. 32 vertices, 40 edges (all 40 in the structure pen); no road stubs."
  },
  {
   "address": 63232,
   "type": "side",
   "text": "header: last vertex 31, last edge 39, pen 39, rotor $00"
  },
  {
   "address": 63236,
   "type": "side",
   "text": "edges 0-18: from/to nibbles"
  },
  {
   "address": 63255,
   "type": "side",
   "text": "$00: edges 19-39 follow as byte pairs"
  },
  {
   "address": 63298,
   "type": "side",
   "text": "vertices 0-31: x|height, z|height"
  },
  {
   "address": 63362,
   "type": "line",
   "text": "City model for 05-08, 10-09, 05-10: a five-pointed star standing upright (16 high) across the north-south road. 26 vertices, 38 edges (edges 0-29 structure, 30-37 road marks); road stubs to the south and north road ends."
  },
  {
   "address": 63362,
   "type": "side",
   "text": "header: last vertex 25, last edge 37, pen 29, rotor $00"
  },
  {
   "address": 63366,
   "type": "side",
   "text": "edges 0-20: from/to nibbles"
  },
  {
   "address": 63387,
   "type": "side",
   "text": "$00: edges 21-37 follow as byte pairs"
  },
  {
   "address": 63422,
   "type": "side",
   "text": "vertices 0-25: x|height, z|height"
  },
  {
   "address": 63476,
   "type": "line",
   "text": "City model for 02-08: five square pyramids, a tall one (8 high) in the middle of four small ones, west of the north-south road. 27 vertices, 40 edges (edges 0-31 structure, 32-39 road marks); road stubs to the south and north road ends."
  },
  {
   "address": 63476,
   "type": "side",
   "text": "header: last vertex 26, last edge 39, pen 31, rotor $00"
  },
  {
   "address": 63480,
   "type": "side",
   "text": "edges 0-19: from/to nibbles"
  },
  {
   "address": 63500,
   "type": "side",
   "text": "$00: edges 20-39 follow as byte pairs"
  },
  {
   "address": 63541,
   "type": "side",
   "text": "vertices 0-26: x|height, z|height"
  },
  {
   "address": 63595,
   "type": "line",
   "text": "City model for 12-08: five slender three-sided spikes (up to 9 high), four in a square round a smaller one, south of the east-west road. 36 vertices, 43 edges (edges 0-34 structure, 35-42 road marks); road stubs to the east and west road ends."
  },
  {
   "address": 63595,
   "type": "side",
   "text": "header: last vertex 35, last edge 42, pen 34, rotor $00"
  },
  {
   "address": 63599,
   "type": "side",
   "text": "edges 0-14: from/to nibbles"
  },
  {
   "address": 63614,
   "type": "side",
   "text": "$00: edges 15-42 follow as byte pairs"
  },
  {
   "address": 63671,
   "type": "side",
   "text": "vertices 0-35: x|height, z|height"
  },
  {
   "address": 63743,
   "type": "line",
   "text": "City model for 10-02, 10-07: a big square hall (5 high) over the crossroads with a gable over each road. 37 vertices, 54 edges (edges 0-37 structure, 38-53 road marks); road stubs to the east, west, south and north road ends."
  },
  {
   "address": 63743,
   "type": "side",
   "text": "header: last vertex 36, last edge 53, pen 37, rotor $00"
  },
  {
   "address": 63747,
   "type": "side",
   "text": "edges 0-19: from/to nibbles"
  },
  {
   "address": 63767,
   "type": "side",
   "text": "$00: edges 20-53 follow as byte pairs"
  },
  {
   "address": 63836,
   "type": "side",
   "text": "vertices 0-36: x|height, z|height"
  },
  {
   "address": 63910,
   "type": "line",
   "text": "City model for 08-09: a low stepped pyramid of square tiers turned 45 degrees, with a small spike (6 high), south of the east-west road. 26 vertices, 44 edges (edges 0-35 structure, 36-43 road marks); road stubs to the east and west road ends."
  },
  {
   "address": 63910,
   "type": "side",
   "text": "header: last vertex 25, last edge 43, pen 35, rotor $00"
  },
  {
   "address": 63914,
   "type": "side",
   "text": "edges 0-27: from/to nibbles"
  },
  {
   "address": 63942,
   "type": "side",
   "text": "$00: edges 28-43 follow as byte pairs"
  },
  {
   "address": 63975,
   "type": "side",
   "text": "vertices 0-25: x|height, z|height"
  },
  {
   "address": 64027,
   "type": "line",
   "text": "City model for 14-09: an octagonal ring bank with sloping sides (3 high), like the rim of an arena. 24 vertices, 40 edges (all 40 in the structure pen); no road stubs."
  },
  {
   "address": 64027,
   "type": "side",
   "text": "header: last vertex 23, last edge 39, pen 39, rotor $00"
  },
  {
   "address": 64031,
   "type": "side",
   "text": "edges 0-23: from/to nibbles"
  },
  {
   "address": 64055,
   "type": "side",
   "text": "$00: edges 24-39 follow as byte pairs"
  },
  {
   "address": 64088,
   "type": "side",
   "text": "vertices 0-23: x|height, z|height"
  },
  {
   "address": 64136,
   "type": "line",
   "text": "Three bytes 4C 00 00 between city_octagon_ring ($FA1B) and city_twin_hex_towers ($FA8B); unread, like the mark at $C4EB."
  },
  {
   "address": 64139,
   "type": "line",
   "text": "City model for 08-00: two tapering hexagonal towers (5 high) on square pads south of the east-west road. 45 vertices, 59 edges (edges 0-35 structure, 36-58 road marks); road stubs to the east and west road ends."
  },
  {
   "address": 64139,
   "type": "side",
   "text": "header: last vertex 44, last edge 58, pen 35, rotor $00"
  },
  {
   "address": 64143,
   "type": "side",
   "text": "edges 0-20: from/to nibbles"
  },
  {
   "address": 64164,
   "type": "side",
   "text": "$00: edges 21-58 follow as byte pairs"
  },
  {
   "address": 64241,
   "type": "side",
   "text": "vertices 0-44: x|height, z|height"
  },
  {
   "address": 64331,
   "type": "line",
   "text": "City model for 15-06, 02-10: a flat-topped arch on two splayed legs (4 high) straddling the north-south road, with two square pads beneath. 40 vertices, 52 edges (edges 0-29 structure, 30-51 road marks); road stubs to the south and north road ends."
  },
  {
   "address": 64331,
   "type": "side",
   "text": "header: last vertex 39, last edge 51, pen 29, rotor $00"
  },
  {
   "address": 64335,
   "type": "side",
   "text": "edges 0-23: from/to nibbles"
  },
  {
   "address": 64359,
   "type": "side",
   "text": "$00: edges 24-51 follow as byte pairs"
  },
  {
   "address": 64416,
   "type": "side",
   "text": "vertices 0-39: x|height, z|height"
  },
  {
   "address": 64496,
   "type": "line",
   "text": "City model for 01-07, 01-10, 15-14: a flared base, a narrow neck and a flared top (13 high), like a water tower, west of the north-south road. 33 vertices, 51 edges (edges 0-35 structure, 36-50 road marks); road stubs to the south and north road ends."
  },
  {
   "address": 64496,
   "type": "side",
   "text": "header: last vertex 32, last edge 50, pen 35, rotor $00"
  },
  {
   "address": 64500,
   "type": "side",
   "text": "edges 0-27: from/to nibbles"
  },
  {
   "address": 64528,
   "type": "side",
   "text": "$00: edges 28-50 follow as byte pairs"
  },
  {
   "address": 64575,
   "type": "side",
   "text": "vertices 0-32: x|height, z|height"
  },
  {
   "address": 64641,
   "type": "line",
   "text": "City model for 12-00: a stepped square pyramid of nested tiers with a spike (9 high) south of the east-west road. 30 vertices, 47 edges (edges 0-31 structure, 32-46 road marks); road stubs to the east and west road ends."
  },
  {
   "address": 64641,
   "type": "side",
   "text": "header: last vertex 29, last edge 46, pen 31, rotor $00"
  },
  {
   "address": 64645,
   "type": "side",
   "text": "edges 0-28: from/to nibbles"
  },
  {
   "address": 64674,
   "type": "side",
   "text": "$00: edges 29-46 follow as byte pairs"
  },
  {
   "address": 64711,
   "type": "side",
   "text": "vertices 0-29: x|height, z|height"
  },
  {
   "address": 64771,
   "type": "line",
   "text": "City model for 02-07, 09-10, 15-10, 05-12: an H-shaped frame: two posts 12 high joined by a low box, astride the north-south road. 36 vertices, 46 edges (edges 0-31 structure, 32-45 road marks); road stubs to the south and north road ends."
  },
  {
   "address": 64771,
   "type": "side",
   "text": "header: last vertex 35, last edge 45, pen 31, rotor $00"
  },
  {
   "address": 64775,
   "type": "side",
   "text": "edges 0-17: from/to nibbles"
  },
  {
   "address": 64793,
   "type": "side",
   "text": "$00: edges 18-45 follow as byte pairs"
  },
  {
   "address": 64850,
   "type": "side",
   "text": "vertices 0-35: x|height, z|height"
  },
  {
   "address": 64922,
   "type": "line",
   "text": "City model for 13-00: eight three-sided spikes (up to 9 high), each leaning to a point, scattered either side of the east-west road. 34 vertices, 50 edges (edges 0-41 structure, 42-49 road marks); road stubs to the east and west road ends."
  },
  {
   "address": 64922,
   "type": "side",
   "text": "header: last vertex 33, last edge 49, pen 41, rotor $00"
  },
  {
   "address": 64926,
   "type": "side",
   "text": "edges 0-23: from/to nibbles"
  },
  {
   "address": 64950,
   "type": "side",
   "text": "$00: edges 24-49 follow as byte pairs"
  },
  {
   "address": 65003,
   "type": "side",
   "text": "vertices 0-33: x|height, z|height"
  },
  {
   "address": 65071,
   "type": "line",
   "text": "City model for 14-00: an inverted truncated pyramid (a funnel, 9 high) on a narrow foot, south of the east-west road. 25 vertices, 39 edges (edges 0-27 structure, 28-38 road marks); road stubs to the east and west road ends."
  },
  {
   "address": 65071,
   "type": "side",
   "text": "header: last vertex 24, last edge 38, pen 27, rotor $00"
  },
  {
   "address": 65075,
   "type": "side",
   "text": "edges 0-27: from/to nibbles"
  },
  {
   "address": 65103,
   "type": "side",
   "text": "$00: edges 28-38 follow as byte pairs"
  },
  {
   "address": 65126,
   "type": "side",
   "text": "vertices 0-24: x|height, z|height"
  },
  {
   "address": 65176,
   "type": "line",
   "text": "City model for 03-01: two blocks with chamfered tops (5 high) facing each other across the east-west road. 34 vertices, 50 edges (edges 0-41 structure, 42-49 road marks); road stubs to the east and west road ends."
  },
  {
   "address": 65176,
   "type": "side",
   "text": "header: last vertex 33, last edge 49, pen 41, rotor $00"
  },
  {
   "address": 65180,
   "type": "side",
   "text": "edges 0-16: from/to nibbles"
  },
  {
   "address": 65197,
   "type": "side",
   "text": "$00: edges 17-49 follow as byte pairs"
  },
  {
   "address": 65260,
   "type": "line",
   "text": "The edge pairs of city_chamfered_pair ($FE98) continue here. An automatic symbol may sit at $FEEC because bytes of the room pointer table at $233C were traced as DEC $FEEC,X (the tracer reaches them through the model bytes 20 3C 23 at $FF84, under the KERNAL entry that $81B3 calls); nothing really touches this address."
  },
  {
   "address": 65264,
   "type": "side",
   "text": "vertices 0-33: x|height, z|height"
  },
  {
   "address": 65332,
   "type": "line",
   "text": "City model for 07-01: a squat pyramid on a diamond pad with two upswept horns (7 high), south of the east-west road. 36 vertices, 50 edges (edges 0-35 structure, 36-49 road marks); road stubs to the east and west road ends."
  },
  {
   "address": 65332,
   "type": "side",
   "text": "header: last vertex 35, last edge 49, pen 35, rotor $00"
  },
  {
   "address": 65336,
   "type": "side",
   "text": "edges 0-20: from/to nibbles"
  },
  {
   "address": 65357,
   "type": "side",
   "text": "$00: edges 21-49 follow as byte pairs"
  },
  {
   "address": 65409,
   "type": "line",
   "text": "RAM under the KERNAL's CINT entry: in play these are edge pairs of city_horned_base ($FF34). The save/load path's JSR $FF81 runs the ROM routine here with $01 = $36, never this RAM."
  },
  {
   "address": 65412,
   "type": "line",
   "text": "RAM under the KERNAL's IOINIT entry: the last edge pairs of city_horned_base, then its vertices from $FF88. JSR $FF84 at $81B3 runs the ROM; the bytes 20 3C 23 here are model data, not a JSR $233C."
  },
  {
   "address": 65416,
   "type": "side",
   "text": "vertices 0-35: x|height, z|height"
  },
  {
   "address": 65424,
   "type": "line",
   "text": "RAM under the KERNAL's SETMSG entry (called from $5021 with the ROM in): vertices 4 onwards of city_horned_base, two bytes each."
  },
  {
   "address": 65466,
   "type": "line",
   "text": "RAM under the KERNAL's SETLFS entry (JSR $FFBA at $81C7 runs the ROM): vertex 25 of city_horned_base."
  },
  {
   "address": 65469,
   "type": "line",
   "text": "RAM under the KERNAL's SETNAM entry (JSR $FFBD at $81D0 runs the ROM): the second byte of vertex 26 and the rest of city_horned_base's vertices, to $FFCF."
  },
  {
   "address": 65488,
   "type": "line",
   "text": "4C 00 00 after the last city model (city_horned_base, $FF34), then 39 zero bytes up to the vectors; nothing reads them. The save/load path's JSR $FFD5 (LOAD) and JSR $FFD8 (SAVE) run the KERNAL ROM over this RAM with $01 = $36, not these bytes."
  },
  {
   "address": 65493,
   "type": "line",
   "text": "RAM under the KERNAL's LOAD entry: zero fill of models_end_mark_ffd0. JSR $FFD5 at $81DA runs the ROM's LOAD with $01 = $36."
  },
  {
   "address": 65496,
   "type": "line",
   "text": "RAM under the KERNAL's SAVE entry: zero fill up to the vectors at $FFFA. JSR $FFD8 at $8252 runs the ROM's SAVE with $01 = $36."
  },
  {
   "address": 65530,
   "type": "line",
   "text": "The 6510's NMI vector in the RAM under the KERNAL (read in play, $01 = $35): $8155 writes $8009, a bare RTI, so RESTORE does nothing. 0 in the hand-over image, before $8135 has run."
  },
  {
   "address": 65532,
   "type": "line",
   "text": "The reset vector's RAM copy: nothing writes it (0 in every snapshot), and a reset switches the ROMs back in and jumps through the KERNAL's own vector, so this word is never used."
  },
  {
   "address": 65534,
   "type": "line",
   "text": "The IRQ vector in RAM: $815F sets the view half $B9BB; then the halves of the raster pair write each other here every frame ($B9D2 in $B9BB and $BA0A in the variant $B9F8 write $BA1E, $BA27 in $BA1E writes $B9BB). 0 in the hand-over image."
  }
 ]
}