{
 "schema": 1,
 "platform": "c64",
 "game": "storm",
 "build": "Mastertronic's disk release, storm[mastertronic_1986](!).g64 from the C64 Preservation Project's G64 collection on archive.org (SHA-256 7c5e0e605f76af2f\u2026); four files, no protection, no version named (orientation.md)",
 "source": "regenerator2000 live",
 "regions": {
  "exclude": [
   [
    256,
    511,
    "stack"
   ],
   [
    53248,
    57343,
    "I/O and colour RAM"
   ],
   [
    1024,
    2047,
    "screen RAM"
   ],
   [
    0,
    1023,
    "runtime: zero page, stack and pages 2-3 (the KERNAL's work area and vectors, which game_init and setup_vectors point at the game)"
   ],
   [
    1024,
    2047,
    "runtime: the screen, cleared by the loader and drawn by the game (its spaces match in both snapshots)"
   ],
   [
    35200,
    36863,
    "never loaded: the gap between storm-b's end ($897F) and storm-c ($9000), holding the emulator's power-on pattern"
   ],
   [
    49152,
    49406,
    "the loader storm-a, which has done its work by the hand-over at $75AC (orientation.md)"
   ],
   [
    57344,
    65535,
    "the KERNAL ROM, banked in throughout ($01 = $37): restart calls two of its routines, and setup_vectors writes the NMI vector into the RAM beneath at $FFFA"
   ]
  ],
  "extra": [
   [
    2048,
    4095,
    "character set"
   ]
  ]
 },
 "blocks": [
  {
   "start": 0,
   "end": 2047,
   "type": "Undefined"
  },
  {
   "start": 2048,
   "end": 4095,
   "type": "Byte"
  },
  {
   "start": 4096,
   "end": 4295,
   "type": "Address"
  },
  {
   "start": 4296,
   "end": 6092,
   "type": "Byte"
  },
  {
   "start": 6093,
   "end": 6292,
   "type": "Address"
  },
  {
   "start": 6293,
   "end": 7821,
   "type": "Byte"
  },
  {
   "start": 7822,
   "end": 8021,
   "type": "Address"
  },
  {
   "start": 8022,
   "end": 9294,
   "type": "Byte"
  },
  {
   "start": 9295,
   "end": 9494,
   "type": "Address"
  },
  {
   "start": 9495,
   "end": 10573,
   "type": "Byte"
  },
  {
   "start": 10574,
   "end": 10773,
   "type": "Address"
  },
  {
   "start": 10774,
   "end": 18203,
   "type": "PETSCII Text"
  },
  {
   "start": 18204,
   "end": 18395,
   "type": "Byte"
  },
  {
   "start": 18396,
   "end": 18451,
   "type": "Address"
  },
  {
   "start": 18452,
   "end": 22065,
   "type": "Byte"
  },
  {
   "start": 22066,
   "end": 22222,
   "type": "Code"
  },
  {
   "start": 22223,
   "end": 22252,
   "type": "Address"
  },
  {
   "start": 22253,
   "end": 22552,
   "type": "Byte"
  },
  {
   "start": 22553,
   "end": 22781,
   "type": "Code"
  },
  {
   "start": 22782,
   "end": 22810,
   "type": "Byte"
  },
  {
   "start": 22811,
   "end": 22835,
   "type": "Code"
  },
  {
   "start": 22836,
   "end": 22839,
   "type": "Byte"
  },
  {
   "start": 22840,
   "end": 28406,
   "type": "Code"
  },
  {
   "start": 28407,
   "end": 29825,
   "type": "PETSCII Text"
  },
  {
   "start": 29826,
   "end": 29877,
   "type": "Byte"
  },
  {
   "start": 29878,
   "end": 32178,
   "type": "Code"
  },
  {
   "start": 32179,
   "end": 32191,
   "type": "Byte"
  },
  {
   "start": 32192,
   "end": 32767,
   "type": "Code"
  },
  {
   "start": 32768,
   "end": 32776,
   "type": "Byte"
  },
  {
   "start": 32777,
   "end": 33029,
   "type": "Code"
  },
  {
   "start": 33030,
   "end": 33108,
   "type": "Byte"
  },
  {
   "start": 33109,
   "end": 34159,
   "type": "PETSCII Text"
  },
  {
   "start": 34160,
   "end": 34195,
   "type": "Word"
  },
  {
   "start": 34196,
   "end": 35199,
   "type": "Byte"
  },
  {
   "start": 35200,
   "end": 36863,
   "type": "Undefined"
  },
  {
   "start": 36864,
   "end": 37033,
   "type": "Code"
  },
  {
   "start": 37034,
   "end": 37145,
   "type": "Byte"
  },
  {
   "start": 37146,
   "end": 37430,
   "type": "Code"
  },
  {
   "start": 37431,
   "end": 37431,
   "type": "Byte"
  },
  {
   "start": 37432,
   "end": 37471,
   "type": "Address"
  },
  {
   "start": 37472,
   "end": 38494,
   "type": "Code"
  },
  {
   "start": 38495,
   "end": 38495,
   "type": "Byte"
  },
  {
   "start": 38496,
   "end": 38685,
   "type": "Word"
  },
  {
   "start": 38686,
   "end": 38713,
   "type": "Address"
  },
  {
   "start": 38714,
   "end": 38767,
   "type": "Byte"
  },
  {
   "start": 38768,
   "end": 38947,
   "type": "Address"
  },
  {
   "start": 38948,
   "end": 39367,
   "type": "Byte"
  },
  {
   "start": 39368,
   "end": 65535,
   "type": "Undefined"
  }
 ],
 "symbols": [
  {
   "address": 0,
   "name": "start",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 1,
   "name": "zpa_01",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 2,
   "name": "zpa_02",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 3,
   "name": "zpa_03",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 4,
   "name": "zpa_04",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 5,
   "name": "zpa_05",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 251,
   "name": "zpa_FB",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 252,
   "name": "zpa_FC",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 253,
   "name": "zpp_FD",
   "type": "ZeroPagePointer",
   "kind": "auto"
  },
  {
   "address": 254,
   "name": "zpa_FE",
   "type": "ZeroPageAbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 788,
   "name": "a_0314",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 789,
   "name": "a_0315",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 792,
   "name": "a_0318",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 793,
   "name": "a_0319",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1024,
   "name": "f_0400",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1029,
   "name": "f_0405",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1051,
   "name": "f_041B",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1072,
   "name": "f_0430",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1075,
   "name": "f_0433",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1106,
   "name": "f_0452",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1110,
   "name": "f_0456",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1111,
   "name": "f_0457",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1113,
   "name": "f_0459",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1128,
   "name": "f_0468",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1154,
   "name": "f_0482",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1156,
   "name": "f_0484",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1224,
   "name": "f_04C8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1225,
   "name": "f_04C9",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1263,
   "name": "a_04EF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 1264,
   "name": "f_04F0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1280,
   "name": "f_0500",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1505,
   "name": "f_05E1",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1520,
   "name": "f_05F0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1536,
   "name": "f_0600",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1599,
   "name": "f_063F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1792,
   "name": "f_0700",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 1912,
   "name": "f_0778",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 2048,
   "name": "charset",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2192,
   "name": "chars_floor",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 2448,
   "name": "chars_b",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2456,
   "name": "f_0998",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 2464,
   "name": "f_09A0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 2472,
   "name": "f_09A8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 2480,
   "name": "f_09B0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 2488,
   "name": "f_09B8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 2496,
   "name": "f_09C0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 2504,
   "name": "f_09C8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 2512,
   "name": "chars_a",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 2520,
   "name": "f_09D8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 2576,
   "name": "chars_objects",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3088,
   "name": "chars_generators",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 3328,
   "name": "chars_monsters",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3584,
   "name": "font_c0",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 3968,
   "name": "chars_spare",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 4096,
   "name": "wall_ptrs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4097,
   "name": "wall_ptrs_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 4296,
   "name": "walls_00",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4309,
   "name": "walls_01",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4322,
   "name": "walls_02",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4335,
   "name": "walls_03",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4357,
   "name": "walls_04",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4373,
   "name": "walls_05",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4383,
   "name": "walls_06",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4387,
   "name": "walls_07",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4394,
   "name": "walls_08",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4410,
   "name": "walls_09",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4435,
   "name": "walls_10",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4454,
   "name": "walls_11",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4464,
   "name": "walls_12",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4489,
   "name": "walls_13",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4508,
   "name": "walls_14",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4524,
   "name": "walls_15",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4540,
   "name": "walls_16",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4544,
   "name": "walls_17",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4563,
   "name": "walls_18",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4585,
   "name": "walls_19",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4595,
   "name": "walls_20",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4614,
   "name": "walls_21",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4633,
   "name": "walls_22",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4646,
   "name": "walls_23",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4671,
   "name": "walls_24",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4690,
   "name": "walls_25",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4712,
   "name": "walls_26",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4716,
   "name": "walls_27",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4726,
   "name": "walls_28",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4754,
   "name": "walls_29",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4767,
   "name": "walls_30",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4789,
   "name": "walls_31",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4796,
   "name": "walls_32",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4812,
   "name": "walls_33",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4825,
   "name": "walls_34",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4832,
   "name": "walls_35",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4848,
   "name": "walls_36",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4858,
   "name": "walls_37",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4888,
   "name": "walls_38",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4910,
   "name": "walls_39",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4932,
   "name": "walls_40",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4948,
   "name": "walls_41",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4964,
   "name": "walls_42",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4980,
   "name": "walls_43",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 4996,
   "name": "walls_44",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5006,
   "name": "walls_45",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5025,
   "name": "walls_46",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5044,
   "name": "walls_47",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5057,
   "name": "walls_48",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5082,
   "name": "walls_49",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5107,
   "name": "walls_50",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5129,
   "name": "walls_51",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5145,
   "name": "walls_52",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5173,
   "name": "walls_53",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5203,
   "name": "walls_54",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5225,
   "name": "walls_55",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5229,
   "name": "walls_56",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5259,
   "name": "walls_57",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5269,
   "name": "walls_58",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5299,
   "name": "walls_59",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5318,
   "name": "walls_60",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5328,
   "name": "walls_61",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5341,
   "name": "walls_62",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5363,
   "name": "walls_63",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5393,
   "name": "walls_64",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5423,
   "name": "walls_65",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5436,
   "name": "walls_66",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5458,
   "name": "walls_67",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5471,
   "name": "walls_68",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5501,
   "name": "walls_69",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5529,
   "name": "walls_70",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5559,
   "name": "walls_71",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5572,
   "name": "walls_72",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5591,
   "name": "walls_73",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5613,
   "name": "walls_74",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5626,
   "name": "walls_75",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5642,
   "name": "walls_76",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5655,
   "name": "walls_77",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5671,
   "name": "walls_78",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5687,
   "name": "walls_79",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5709,
   "name": "walls_80",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5728,
   "name": "walls_81",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5753,
   "name": "walls_82",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5778,
   "name": "walls_83",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5794,
   "name": "walls_84",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5807,
   "name": "walls_85",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5837,
   "name": "walls_86",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5862,
   "name": "walls_87",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5887,
   "name": "walls_88",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5900,
   "name": "walls_89",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5907,
   "name": "walls_90",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5923,
   "name": "walls_91",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5951,
   "name": "walls_92",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5976,
   "name": "walls_93",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5983,
   "name": "walls_94",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 5993,
   "name": "walls_95",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6000,
   "name": "walls_96",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6004,
   "name": "walls_97",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6023,
   "name": "walls_98",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6036,
   "name": "walls_99",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6043,
   "name": "exit_bits",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 6093,
   "name": "obj_ptrs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 6094,
   "name": "obj_ptrs_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 6293,
   "name": "objs_00",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6303,
   "name": "objs_01",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6313,
   "name": "objs_02",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6332,
   "name": "objs_03",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6354,
   "name": "objs_04",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6358,
   "name": "objs_05",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6377,
   "name": "objs_06",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6396,
   "name": "objs_07",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6420,
   "name": "objs_08",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6442,
   "name": "objs_09",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6466,
   "name": "objs_10",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6490,
   "name": "objs_11",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6514,
   "name": "objs_12",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6527,
   "name": "objs_13",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6540,
   "name": "objs_14",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6564,
   "name": "objs_15",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6588,
   "name": "objs_16",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6610,
   "name": "objs_17",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6620,
   "name": "objs_18",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6633,
   "name": "objs_19",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6640,
   "name": "objs_20",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6659,
   "name": "objs_21",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6669,
   "name": "objs_22",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6685,
   "name": "objs_23",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6695,
   "name": "objs_24",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6711,
   "name": "objs_25",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6724,
   "name": "objs_26",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6740,
   "name": "objs_27",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6762,
   "name": "objs_28",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6766,
   "name": "objs_29",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6779,
   "name": "objs_30",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6801,
   "name": "objs_31",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6808,
   "name": "objs_32",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6824,
   "name": "objs_33",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6848,
   "name": "objs_34",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6861,
   "name": "objs_35",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6871,
   "name": "objs_36",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6895,
   "name": "objs_37",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6905,
   "name": "objs_38",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6929,
   "name": "objs_39",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6936,
   "name": "objs_40",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6952,
   "name": "objs_41",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6968,
   "name": "objs_42",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 6992,
   "name": "objs_43",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7014,
   "name": "objs_44",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7038,
   "name": "objs_45",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7048,
   "name": "objs_46",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7064,
   "name": "objs_47",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7088,
   "name": "objs_48",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7107,
   "name": "objs_49",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7131,
   "name": "objs_50",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7155,
   "name": "objs_51",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7165,
   "name": "objs_52",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7178,
   "name": "objs_53",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7182,
   "name": "objs_54",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7195,
   "name": "objs_55",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7214,
   "name": "objs_56",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7233,
   "name": "objs_57",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7246,
   "name": "objs_58",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7262,
   "name": "objs_59",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7269,
   "name": "objs_60",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7293,
   "name": "objs_61",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7303,
   "name": "objs_62",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7313,
   "name": "objs_63",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7335,
   "name": "objs_64",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7339,
   "name": "objs_65",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7355,
   "name": "objs_66",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7362,
   "name": "objs_67",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7375,
   "name": "objs_68",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7385,
   "name": "objs_69",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7395,
   "name": "objs_70",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7408,
   "name": "objs_71",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7415,
   "name": "objs_72",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7431,
   "name": "objs_73",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7444,
   "name": "objs_74",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7451,
   "name": "objs_75",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7467,
   "name": "objs_76",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7480,
   "name": "objs_77",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7499,
   "name": "objs_78",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7506,
   "name": "objs_79",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7513,
   "name": "objs_80",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7520,
   "name": "objs_81",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7524,
   "name": "objs_82",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7546,
   "name": "objs_83",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7565,
   "name": "objs_84",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7589,
   "name": "objs_85",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7602,
   "name": "objs_86",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7615,
   "name": "objs_87",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7622,
   "name": "objs_88",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7635,
   "name": "objs_89",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7654,
   "name": "objs_90",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7667,
   "name": "objs_91",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7680,
   "name": "objs_92",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7690,
   "name": "objs_93",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7709,
   "name": "objs_94",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7728,
   "name": "objs_95",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7752,
   "name": "objs_96",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7771,
   "name": "objs_97",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7790,
   "name": "objs_98",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7803,
   "name": "objs_99",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 7822,
   "name": "gen_ptrs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 7823,
   "name": "gen_ptrs_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 8022,
   "name": "gens_00",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8026,
   "name": "gens_01",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8033,
   "name": "gens_02",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8040,
   "name": "gens_03",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8055,
   "name": "gens_04",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8062,
   "name": "gens_05",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8072,
   "name": "gens_06",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8085,
   "name": "gens_07",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8092,
   "name": "gens_08",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8107,
   "name": "gens_09",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8120,
   "name": "gens_10",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8135,
   "name": "gens_11",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8145,
   "name": "gens_12",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8155,
   "name": "gens_13",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8168,
   "name": "gens_14",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8181,
   "name": "gens_15",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8191,
   "name": "gens_16",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8204,
   "name": "gens_17",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8219,
   "name": "gens_18",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8234,
   "name": "gens_19",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8238,
   "name": "gens_20",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8251,
   "name": "gens_21",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8261,
   "name": "gens_22",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8274,
   "name": "gens_23",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8289,
   "name": "gens_24",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8302,
   "name": "gens_25",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8315,
   "name": "gens_26",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8330,
   "name": "gens_27",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8340,
   "name": "gens_28",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8355,
   "name": "gens_29",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8368,
   "name": "gens_30",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8381,
   "name": "gens_31",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8396,
   "name": "gens_32",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8406,
   "name": "gens_33",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8419,
   "name": "gens_34",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8434,
   "name": "gens_35",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8449,
   "name": "gens_36",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8462,
   "name": "gens_37",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8477,
   "name": "gens_38",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8490,
   "name": "gens_39",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8505,
   "name": "gens_40",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8518,
   "name": "gens_41",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8533,
   "name": "gens_42",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8546,
   "name": "gens_43",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8559,
   "name": "gens_44",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8566,
   "name": "gens_45",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8579,
   "name": "gens_46",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8592,
   "name": "gens_47",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8605,
   "name": "gens_48",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8620,
   "name": "gens_49",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8633,
   "name": "gens_50",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8646,
   "name": "gens_51",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8659,
   "name": "gens_52",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8672,
   "name": "gens_53",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8685,
   "name": "gens_54",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8698,
   "name": "gens_55",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8713,
   "name": "gens_56",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8728,
   "name": "gens_57",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8741,
   "name": "gens_58",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8756,
   "name": "gens_59",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8771,
   "name": "gens_60",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8784,
   "name": "gens_61",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8799,
   "name": "gens_62",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8812,
   "name": "gens_63",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8825,
   "name": "gens_64",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8840,
   "name": "gens_65",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8853,
   "name": "gens_66",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8866,
   "name": "gens_67",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8881,
   "name": "gens_68",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8896,
   "name": "gens_69",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8911,
   "name": "gens_70",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8926,
   "name": "gens_71",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8939,
   "name": "gens_72",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8949,
   "name": "gens_73",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8959,
   "name": "gens_74",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8972,
   "name": "gens_75",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 8987,
   "name": "gens_76",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9000,
   "name": "gens_77",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9013,
   "name": "gens_78",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9026,
   "name": "gens_79",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9036,
   "name": "gens_80",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9051,
   "name": "gens_81",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9066,
   "name": "gens_82",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9081,
   "name": "gens_83",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9094,
   "name": "gens_84",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9109,
   "name": "gens_85",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9124,
   "name": "gens_86",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9139,
   "name": "gens_87",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9152,
   "name": "gens_88",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9167,
   "name": "gens_89",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9182,
   "name": "gens_90",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9192,
   "name": "gens_91",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9202,
   "name": "gens_92",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9217,
   "name": "gens_93",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9227,
   "name": "gens_94",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9240,
   "name": "gens_95",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9250,
   "name": "gens_96",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9263,
   "name": "gens_97",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9276,
   "name": "gens_98",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9291,
   "name": "gens_99",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9295,
   "name": "floor_ptrs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 9296,
   "name": "floor_ptrs_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 9495,
   "name": "floor_00",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9508,
   "name": "floor_01",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9518,
   "name": "floor_02",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9528,
   "name": "floor_03",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9543,
   "name": "floor_04",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9558,
   "name": "floor_05",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9568,
   "name": "floor_06",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9583,
   "name": "floor_07",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9596,
   "name": "floor_08",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9611,
   "name": "floor_09",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9618,
   "name": "floor_10",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9631,
   "name": "floor_11",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9638,
   "name": "floor_12",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9645,
   "name": "floor_13",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9658,
   "name": "floor_14",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9668,
   "name": "floor_15",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9678,
   "name": "floor_16",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9693,
   "name": "floor_17",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9703,
   "name": "floor_18",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9707,
   "name": "floor_19",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9714,
   "name": "floor_20",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9729,
   "name": "floor_21",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9744,
   "name": "floor_22",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9757,
   "name": "floor_23",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9772,
   "name": "floor_24",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9779,
   "name": "floor_25",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9786,
   "name": "floor_26",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9796,
   "name": "floor_27",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9811,
   "name": "floor_28",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9824,
   "name": "floor_29",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9834,
   "name": "floor_30",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9844,
   "name": "floor_31",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9848,
   "name": "floor_32",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9855,
   "name": "floor_33",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9862,
   "name": "floor_34",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9872,
   "name": "floor_35",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9882,
   "name": "floor_36",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9895,
   "name": "floor_37",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9899,
   "name": "floor_38",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9903,
   "name": "floor_39",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9918,
   "name": "floor_40",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9925,
   "name": "floor_41",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9935,
   "name": "floor_42",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9939,
   "name": "floor_43",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9952,
   "name": "floor_44",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9967,
   "name": "floor_45",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9982,
   "name": "floor_46",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 9997,
   "name": "floor_47",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10007,
   "name": "floor_48",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10022,
   "name": "floor_49",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10037,
   "name": "floor_50",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10047,
   "name": "floor_51",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10062,
   "name": "floor_52",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10075,
   "name": "floor_53",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10085,
   "name": "floor_54",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10098,
   "name": "floor_55",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10105,
   "name": "floor_56",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10115,
   "name": "floor_57",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10125,
   "name": "floor_58",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10132,
   "name": "floor_59",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10136,
   "name": "floor_60",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10143,
   "name": "floor_61",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10158,
   "name": "floor_62",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10171,
   "name": "floor_63",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10181,
   "name": "floor_64",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10188,
   "name": "floor_65",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10195,
   "name": "floor_66",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10208,
   "name": "floor_67",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10223,
   "name": "floor_68",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10233,
   "name": "floor_69",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10243,
   "name": "floor_70",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10250,
   "name": "floor_71",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10260,
   "name": "floor_72",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10275,
   "name": "floor_73",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10279,
   "name": "floor_74",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10294,
   "name": "floor_75",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10301,
   "name": "floor_76",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10311,
   "name": "floor_77",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10326,
   "name": "floor_78",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10339,
   "name": "floor_79",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10346,
   "name": "floor_80",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10359,
   "name": "floor_81",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10372,
   "name": "floor_82",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10379,
   "name": "floor_83",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10392,
   "name": "floor_84",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10407,
   "name": "floor_85",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10422,
   "name": "floor_86",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10429,
   "name": "floor_87",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10436,
   "name": "floor_88",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10449,
   "name": "floor_89",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10459,
   "name": "floor_90",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10469,
   "name": "floor_91",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10476,
   "name": "floor_92",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10486,
   "name": "floor_93",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10501,
   "name": "floor_94",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10516,
   "name": "floor_95",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10529,
   "name": "floor_96",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10539,
   "name": "floor_97",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10552,
   "name": "floor_98",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10567,
   "name": "floor_99",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10574,
   "name": "room_msgs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 10575,
   "name": "room_msgs_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 10774,
   "name": "desc_00",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10837,
   "name": "desc_01",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10915,
   "name": "desc_02",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 10968,
   "name": "desc_03",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11041,
   "name": "desc_04",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11113,
   "name": "desc_05",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11187,
   "name": "desc_06",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11267,
   "name": "desc_07",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11347,
   "name": "desc_08",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11426,
   "name": "desc_09",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11504,
   "name": "desc_10",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11580,
   "name": "desc_11",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11650,
   "name": "desc_12",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11730,
   "name": "desc_13",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11807,
   "name": "desc_14",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11887,
   "name": "desc_15",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 11966,
   "name": "desc_16",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 12046,
   "name": "desc_17",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 12120,
   "name": "desc_18",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 12200,
   "name": "desc_19",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 12273,
   "name": "desc_20",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 12348,
   "name": "desc_21",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 12425,
   "name": "desc_22",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 12505,
   "name": "desc_23",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 12578,
   "name": "desc_24",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 12655,
   "name": "desc_25",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 12724,
   "name": "desc_26",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 12804,
   "name": "desc_27",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 12883,
   "name": "desc_28",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 12939,
   "name": "desc_29",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 13013,
   "name": "desc_30",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 13093,
   "name": "desc_31",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 13173,
   "name": "desc_32",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 13252,
   "name": "desc_33",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 13319,
   "name": "desc_34",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 13393,
   "name": "desc_35",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 13466,
   "name": "desc_36",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 13534,
   "name": "desc_37",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 13598,
   "name": "desc_38",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 13668,
   "name": "desc_39",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 13724,
   "name": "desc_40",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 13803,
   "name": "desc_41",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 13876,
   "name": "desc_42",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 13950,
   "name": "desc_43",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14019,
   "name": "desc_44",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14098,
   "name": "desc_45",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14174,
   "name": "desc_46",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14254,
   "name": "desc_47",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14330,
   "name": "desc_48",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14410,
   "name": "desc_49",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14489,
   "name": "desc_50",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14566,
   "name": "desc_51",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14633,
   "name": "desc_52",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14690,
   "name": "desc_53",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14760,
   "name": "desc_54",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14840,
   "name": "desc_55",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14918,
   "name": "desc_56",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 14997,
   "name": "desc_57",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15073,
   "name": "desc_58",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15151,
   "name": "desc_59",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15215,
   "name": "desc_60",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15291,
   "name": "desc_61",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15366,
   "name": "desc_62",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15442,
   "name": "desc_63",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15522,
   "name": "desc_64",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15600,
   "name": "desc_65",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15671,
   "name": "desc_66",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15750,
   "name": "desc_67",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15829,
   "name": "desc_68",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15905,
   "name": "desc_69",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 15965,
   "name": "desc_70",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16033,
   "name": "desc_71",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16113,
   "name": "desc_72",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16188,
   "name": "desc_73",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16250,
   "name": "desc_74",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16322,
   "name": "desc_75",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16384,
   "name": "desc_75_tail",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 16399,
   "name": "desc_76",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16476,
   "name": "desc_77",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16554,
   "name": "desc_78",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16624,
   "name": "desc_79",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16689,
   "name": "desc_80",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16748,
   "name": "desc_81",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16827,
   "name": "desc_82",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16890,
   "name": "desc_83",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 16970,
   "name": "desc_84",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 17046,
   "name": "desc_85",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 17126,
   "name": "desc_86",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 17196,
   "name": "desc_87",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 17273,
   "name": "desc_88",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 17353,
   "name": "desc_89",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 17431,
   "name": "desc_90",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 17501,
   "name": "desc_91",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 17572,
   "name": "desc_92",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 17652,
   "name": "desc_93",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 17727,
   "name": "desc_94",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 17807,
   "name": "desc_95",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 17885,
   "name": "desc_96",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 17965,
   "name": "desc_97",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18045,
   "name": "desc_98",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18125,
   "name": "desc_99",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18204,
   "name": "room_map",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18396,
   "name": "obj_shapes",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18397,
   "name": "obj_shapes_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 18452,
   "name": "shape_00",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18484,
   "name": "shape_01",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18516,
   "name": "shape_02",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18564,
   "name": "shape_03",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18612,
   "name": "shape_04",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18660,
   "name": "shape_05",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18708,
   "name": "shape_06",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18756,
   "name": "shape_07",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18804,
   "name": "shape_08",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18852,
   "name": "shape_09",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18916,
   "name": "shape_0a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 18980,
   "name": "shape_0b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 19044,
   "name": "shape_0c",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 19108,
   "name": "shape_0d",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 19172,
   "name": "shape_0e",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 19236,
   "name": "shape_0f",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 19300,
   "name": "shape_10",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 19364,
   "name": "shape_11",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 19428,
   "name": "shape_12",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 19492,
   "name": "shape_13",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 19556,
   "name": "shape_14",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 19620,
   "name": "shape_15",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 19684,
   "name": "shape_16",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 19748,
   "name": "shape_17",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 19812,
   "name": "shape_18",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 19876,
   "name": "shape_19",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 19940,
   "name": "shape_1a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 20004,
   "name": "shape_1b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 20068,
   "name": "shape_spare_1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20098,
   "name": "shape_storm",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20354,
   "name": "shape_kind1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20546,
   "name": "f_5042",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 20610,
   "name": "shape_kind2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20706,
   "name": "shape_gen1",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20754,
   "name": "shape_gen2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20802,
   "name": "shape_spare_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 20930,
   "name": "shape_kind3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 21186,
   "name": "shape_kind4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 21282,
   "name": "shape_agravain",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 21538,
   "name": "shape_spare_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 21554,
   "name": "shape_kind6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 21810,
   "name": "shape_kind5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 22066,
   "name": "sfx_reset",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22073,
   "name": "b_5639",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22085,
   "name": "sfx_start",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22115,
   "name": "b_5663",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22116,
   "name": "a_5664",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 22117,
   "name": "a_5665",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 22223,
   "name": "sfx_ptrs",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22224,
   "name": "f_56D0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 22253,
   "name": "sfx_records",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22273,
   "name": "sfx_01",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22293,
   "name": "sfx_02",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22313,
   "name": "sfx_03",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22333,
   "name": "sfx_04",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22353,
   "name": "sfx_05",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22373,
   "name": "sfx_06",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22393,
   "name": "sfx_07",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22413,
   "name": "sfx_08",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22433,
   "name": "sfx_09",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22453,
   "name": "sfx_10",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22473,
   "name": "sfx_11",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22493,
   "name": "sfx_12",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22513,
   "name": "sfx_13",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22533,
   "name": "sfx_14",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22553,
   "name": "sfx_stop",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 22575,
   "name": "r_582F",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 22576,
   "name": "sfx_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22605,
   "name": "b_584D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22634,
   "name": "b_586A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22658,
   "name": "b_5882",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22696,
   "name": "b_58A8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22721,
   "name": "b_58C1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22756,
   "name": "b_58E4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22781,
   "name": "r_58FD",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 22782,
   "name": "sfx_save_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22783,
   "name": "sfx_on",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22784,
   "name": "sfx_unused_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22785,
   "name": "sfx_unused_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22786,
   "name": "sfx_duration",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 22787,
   "name": "sfx_step_len",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22788,
   "name": "sfx_freq1_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22789,
   "name": "sfx_freq1_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22790,
   "name": "sfx_freq3_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22791,
   "name": "sfx_freq3_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22792,
   "name": "sfx_ad1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22793,
   "name": "sfx_ad3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22794,
   "name": "sfx_wave1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22795,
   "name": "sfx_wave3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22796,
   "name": "sfx_pulse1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22797,
   "name": "sfx_pulse3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22798,
   "name": "sfx_sweep1_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22799,
   "name": "sfx_sweep1_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22800,
   "name": "sfx_sweep3_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22801,
   "name": "sfx_sweep3_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22802,
   "name": "sfx_dir1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22803,
   "name": "sfx_dir3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22804,
   "name": "sfx_repeats",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22805,
   "name": "sfx_random",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22806,
   "name": "sfx_step",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22807,
   "name": "sfx_cur1_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22808,
   "name": "sfx_cur1_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22809,
   "name": "sfx_cur3_lo",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22810,
   "name": "sfx_cur3_hi",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22811,
   "name": "random",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22836,
   "name": "rand_0",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22837,
   "name": "rand_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22838,
   "name": "rand_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22839,
   "name": "rand_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 22840,
   "name": "clear_screen",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 22854,
   "name": "b_5946",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22871,
   "name": "clear_panel",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 22892,
   "name": "clear_message",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22900,
   "name": "b_5974",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22916,
   "name": "draw_floor",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 22948,
   "name": "b_59A4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 22953,
   "name": "b_59A9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23015,
   "name": "floor_run",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23043,
   "name": "b_5A03",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23052,
   "name": "b_5A0C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23061,
   "name": "b_5A15",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23067,
   "name": "j_5A1B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 23073,
   "name": "draw_walls",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23114,
   "name": "b_5A4A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23119,
   "name": "b_5A4F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23191,
   "name": "b_5A97",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23200,
   "name": "wall_run",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23228,
   "name": "b_5ABC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23234,
   "name": "b_5AC2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23240,
   "name": "b_5AC8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23243,
   "name": "j_5ACB",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 23249,
   "name": "draw_border",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23359,
   "name": "b_5B3F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23369,
   "name": "open_exits",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23409,
   "name": "b_5B71",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23439,
   "name": "b_5B8F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23469,
   "name": "b_5BAD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23499,
   "name": "r_5BCB",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 23500,
   "name": "door_record",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23508,
   "name": "b_5BD4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23543,
   "name": "r_5BF7",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 23544,
   "name": "draw_generators",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23585,
   "name": "j_5C21",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 23590,
   "name": "b_5C26",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23709,
   "name": "b_5C9D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23719,
   "name": "j_5CA7",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 23760,
   "name": "r_5CD0",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 23761,
   "name": "draw_objects",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23810,
   "name": "b_5D02",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23815,
   "name": "b_5D07",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23892,
   "name": "b_5D54",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23902,
   "name": "j_5D5E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 23911,
   "name": "draw_object",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 23934,
   "name": "b_5D7E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23954,
   "name": "b_5D92",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23966,
   "name": "b_5D9E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23978,
   "name": "b_5DAA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 23998,
   "name": "b_5DBE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24010,
   "name": "b_5DCA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24022,
   "name": "b_5DD6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24034,
   "name": "b_5DE2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24046,
   "name": "b_5DEE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24051,
   "name": "j_5DF3",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 24068,
   "name": "draw_actor",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 24071,
   "name": "draw_saved",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 24081,
   "name": "spawn",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 24103,
   "name": "b_5E27",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24122,
   "name": "b_5E3A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24132,
   "name": "b_5E44",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24179,
   "name": "b_5E73",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24184,
   "name": "b_5E78",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24195,
   "name": "b_5E83",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24234,
   "name": "b_5EAA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24262,
   "name": "b_5EC6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24289,
   "name": "b_5EE1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24311,
   "name": "b_5EF7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24338,
   "name": "b_5F12",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24360,
   "name": "b_5F28",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24375,
   "name": "j_5F37",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 24402,
   "name": "j_5F52",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 24413,
   "name": "b_5F5D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24417,
   "name": "gen_cell",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 24433,
   "name": "mon_cell",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 24449,
   "name": "distance",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 24470,
   "name": "b_5F96",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24473,
   "name": "j_5F99",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 24494,
   "name": "b_5FAE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24497,
   "name": "j_5FB1",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 24502,
   "name": "move_monster",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 24554,
   "name": "b_5FEA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24579,
   "name": "b_6003",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24589,
   "name": "b_600D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24619,
   "name": "step_monster",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 24659,
   "name": "b_6053",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24665,
   "name": "b_6059",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24698,
   "name": "b_607A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24704,
   "name": "b_6080",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24745,
   "name": "b_60A9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24751,
   "name": "b_60AF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24784,
   "name": "b_60D0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24790,
   "name": "b_60D6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24830,
   "name": "b_60FE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24840,
   "name": "b_6108",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24850,
   "name": "b_6112",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24860,
   "name": "b_611C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24870,
   "name": "b_6126",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24873,
   "name": "j_6129",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 24891,
   "name": "b_613B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 24897,
   "name": "redraw_monster",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 24967,
   "name": "draw_kind1",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25003,
   "name": "draw_kind2",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25043,
   "name": "b_61D3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25062,
   "name": "draw_kind3",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25098,
   "name": "draw_kind4",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25138,
   "name": "b_6232",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25157,
   "name": "draw_kind5",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25185,
   "name": "b_6261",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25209,
   "name": "draw_kind6",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25252,
   "name": "touch_damage",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25258,
   "name": "b_62AA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25273,
   "name": "b_62B9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25284,
   "name": "mon_damage",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25302,
   "name": "blocked_flag",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25312,
   "name": "r_62E0",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 25313,
   "name": "spawn_down",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25350,
   "name": "spawn_left",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25381,
   "name": "b_6325",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25387,
   "name": "spawn_right",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25427,
   "name": "spawn_up",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25458,
   "name": "obj_width",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25488,
   "name": "r_6390",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 25489,
   "name": "row_test",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25500,
   "name": "b_639C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25522,
   "name": "b_63B2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25533,
   "name": "b_63BD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25539,
   "name": "j_63C3",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 25545,
   "name": "column_test",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25556,
   "name": "b_63D4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25578,
   "name": "b_63EA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25589,
   "name": "b_63F5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25603,
   "name": "b_6403",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25608,
   "name": "j_6408",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 25614,
   "name": "restore_bg",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25617,
   "name": "b_6411",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25626,
   "name": "b_641A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25627,
   "name": "a_641B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25628,
   "name": "a_641C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25646,
   "name": "b_642E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25652,
   "name": "b_6434",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25653,
   "name": "a_6435",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25654,
   "name": "a_6436",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25669,
   "name": "cell_address",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25681,
   "name": "col_address",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25706,
   "name": "put_block",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25721,
   "name": "b_6479",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25740,
   "name": "b_648C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25761,
   "name": "wait_frame",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 25766,
   "name": "b_64A6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25772,
   "name": "delay",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25782,
   "name": "b_64B6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25795,
   "name": "chars_address",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25833,
   "name": "compose_one",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25850,
   "name": "compose",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 25866,
   "name": "b_650A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25874,
   "name": "b_6512",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25875,
   "name": "a_6513",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25876,
   "name": "a_6514",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25914,
   "name": "b_653A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25961,
   "name": "b_6569",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25967,
   "name": "b_656F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 25988,
   "name": "j_6584",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 25989,
   "name": "a_6585",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25990,
   "name": "a_6586",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25992,
   "name": "a_6588",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25993,
   "name": "a_6589",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25995,
   "name": "a_658B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25996,
   "name": "a_658C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25998,
   "name": "a_658E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 25999,
   "name": "a_658F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26032,
   "name": "r_65B0",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 26033,
   "name": "put_actor",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26050,
   "name": "start_places",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26081,
   "name": "draw_players",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26105,
   "name": "b_65F9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26113,
   "name": "b_6601",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26137,
   "name": "r_6619",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 26138,
   "name": "redraw_player",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26169,
   "name": "put_player",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26170,
   "name": "a_663A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26193,
   "name": "b_6651",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26206,
   "name": "b_665E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26230,
   "name": "b_6676",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26242,
   "name": "j_6682",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 26250,
   "name": "a_668A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26255,
   "name": "a_668F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 26275,
   "name": "load_a",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26277,
   "name": "b_66A5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26288,
   "name": "b_66B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26395,
   "name": "save_a",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26397,
   "name": "b_671D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26408,
   "name": "b_6728",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26452,
   "name": "b_6754",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26463,
   "name": "b_675F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26506,
   "name": "load_b",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26508,
   "name": "b_678C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26519,
   "name": "b_6797",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26626,
   "name": "save_b",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26628,
   "name": "b_6804",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26639,
   "name": "b_680F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26683,
   "name": "b_683B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26694,
   "name": "b_6846",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26737,
   "name": "players_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26745,
   "name": "b_6879",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26764,
   "name": "b_688C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26772,
   "name": "b_6894",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26782,
   "name": "r_689E",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 26783,
   "name": "b_689F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26793,
   "name": "control",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26803,
   "name": "r_68B3",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 26804,
   "name": "b_68B4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26854,
   "name": "b_68E6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26876,
   "name": "b_68FC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26892,
   "name": "b_690C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26895,
   "name": "j_690F",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 26899,
   "name": "joystick",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 26942,
   "name": "r_693E",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 26943,
   "name": "b_693F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26975,
   "name": "b_695F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26985,
   "name": "b_6969",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 26993,
   "name": "b_6971",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27006,
   "name": "b_697E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27012,
   "name": "b_6984",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27017,
   "name": "b_6989",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27032,
   "name": "b_6998",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27046,
   "name": "b_69A6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27057,
   "name": "b_69B1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27063,
   "name": "b_69B7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27069,
   "name": "b_69BD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27072,
   "name": "j_69C0",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 27078,
   "name": "b_69C6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27080,
   "name": "b_69C8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27101,
   "name": "b_69DD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27127,
   "name": "walk",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 27148,
   "name": "b_6A0C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27151,
   "name": "b_6A0F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27164,
   "name": "b_6A1C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27187,
   "name": "b_6A33",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27190,
   "name": "b_6A36",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27203,
   "name": "b_6A43",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27226,
   "name": "b_6A5A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27229,
   "name": "b_6A5D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27242,
   "name": "b_6A6A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27258,
   "name": "b_6A7A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27261,
   "name": "b_6A7D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27274,
   "name": "touch_object",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27322,
   "name": "b_6ABA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27356,
   "name": "b_6ADC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27401,
   "name": "b_6B09",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27426,
   "name": "b_6B22",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27438,
   "name": "b_6B2E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27450,
   "name": "b_6B3A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27486,
   "name": "j_6B5E",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 27529,
   "name": "obj_effect",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 27536,
   "name": "b_6B90",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27568,
   "name": "b_6BB0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27608,
   "name": "b_6BD8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27616,
   "name": "b_6BE0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27627,
   "name": "b_6BEB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27663,
   "name": "b_6C0F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27699,
   "name": "b_6C33",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27727,
   "name": "b_6C4F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27755,
   "name": "b_6C6B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27783,
   "name": "b_6C87",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27811,
   "name": "b_6CA3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27839,
   "name": "b_6CBF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27867,
   "name": "b_6CDB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27872,
   "name": "b_6CE0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27896,
   "name": "trap_fire",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 27936,
   "name": "b_6D20",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27947,
   "name": "b_6D2B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 27961,
   "name": "j_6D39",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 28000,
   "name": "b_6D60",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28017,
   "name": "b_6D71",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28032,
   "name": "b_6D80",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28033,
   "name": "b_6D81",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28063,
   "name": "trap_object",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28126,
   "name": "trap_wall",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28181,
   "name": "instructions",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 28320,
   "name": "j_6EA0",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 28346,
   "name": "b_6EBA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28392,
   "name": "b_6EE8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 28407,
   "name": "ins_text",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28572,
   "name": "ins_story_2",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28720,
   "name": "ins_story_3",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28872,
   "name": "ins_story_4",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 28982,
   "name": "ins_story_5",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29080,
   "name": "ins_agravain",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29287,
   "name": "ins_storm",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29468,
   "name": "ins_generators",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29572,
   "name": "ins_magic",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29621,
   "name": "ins_food",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29660,
   "name": "ins_bottles",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29703,
   "name": "ins_brooches",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 29777,
   "name": "ins_continue",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29800,
   "name": "ins_heading",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29826,
   "name": "ins_widths",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29839,
   "name": "ins_shape_lo",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29852,
   "name": "ins_shape_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29865,
   "name": "ins_colours",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 29878,
   "name": "ins_clear",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29886,
   "name": "b_74BE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29898,
   "name": "ins_wipe",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29901,
   "name": "b_74CD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29917,
   "name": "show_pages",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 29941,
   "name": "j_74F5",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 29942,
   "name": "a_74F6",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 29943,
   "name": "a_74F7",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 29965,
   "name": "b_750D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29984,
   "name": "b_7520",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 29997,
   "name": "b_752D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30016,
   "name": "b_7540",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30028,
   "name": "r_754C",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 30029,
   "name": "b_754D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30063,
   "name": "b_756F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30069,
   "name": "a_7575",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30070,
   "name": "a_7576",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30074,
   "name": "a_757A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30075,
   "name": "a_757B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 30076,
   "name": "j_757C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30081,
   "name": "copy_rom_font",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30090,
   "name": "b_758A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30101,
   "name": "b_7595",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30124,
   "name": "entry",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 30127,
   "name": "title",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 30130,
   "name": "b_75B2",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30135,
   "name": "b_75B7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30184,
   "name": "b_75E8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30197,
   "name": "b_75F5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30210,
   "name": "b_7602",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30221,
   "name": "b_760D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30244,
   "name": "b_7624",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30254,
   "name": "b_762E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30274,
   "name": "b_7642",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30287,
   "name": "b_764F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30300,
   "name": "b_765C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30311,
   "name": "b_7667",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30335,
   "name": "b_767F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30347,
   "name": "j_768B",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30354,
   "name": "b_7692",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30367,
   "name": "b_769F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30380,
   "name": "b_76AC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30391,
   "name": "b_76B7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30416,
   "name": "b_76D0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30423,
   "name": "j_76D7",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30457,
   "name": "game_init",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 30506,
   "name": "b_772A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30660,
   "name": "b_77C4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30662,
   "name": "j_77C6",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 30668,
   "name": "enter_room",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 30703,
   "name": "b_77EF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30709,
   "name": "b_77F5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30772,
   "name": "b_7834",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30806,
   "name": "b_7856",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30820,
   "name": "b_7864",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30847,
   "name": "b_787F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30862,
   "name": "b_788E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30867,
   "name": "b_7893",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30916,
   "name": "b_78C4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30935,
   "name": "main_loop",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 30960,
   "name": "b_78F0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 30995,
   "name": "b_7913",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31019,
   "name": "b_792B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31087,
   "name": "b_796F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31099,
   "name": "b_797B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31104,
   "name": "b_7980",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31107,
   "name": "game_over",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 31116,
   "name": "b_798C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31184,
   "name": "b_79D0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31199,
   "name": "b_79DF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31215,
   "name": "b_79EF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31218,
   "name": "room_exits",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31245,
   "name": "b_7A0D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31256,
   "name": "b_7A18",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31275,
   "name": "b_7A2B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31280,
   "name": "r_7A30",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 31281,
   "name": "b_7A31",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31304,
   "name": "b_7A48",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31317,
   "name": "b_7A55",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31320,
   "name": "edge_check",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31339,
   "name": "b_7A6B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31369,
   "name": "b_7A89",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31377,
   "name": "b_7A91",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31407,
   "name": "b_7AAF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31415,
   "name": "b_7AB7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31445,
   "name": "b_7AD5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31453,
   "name": "b_7ADD",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31483,
   "name": "b_7AFB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31488,
   "name": "j_7B00",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 31588,
   "name": "shot_unplot",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31596,
   "name": "b_7B6C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31620,
   "name": "b_7B84",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31626,
   "name": "shots_update",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31640,
   "name": "b_7B98",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31648,
   "name": "b_7BA0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31654,
   "name": "b_7BA6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31664,
   "name": "shot_move",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31670,
   "name": "b_7BB6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31684,
   "name": "b_7BC4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31694,
   "name": "b_7BCE",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31704,
   "name": "b_7BD8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31707,
   "name": "shot_step",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 31712,
   "name": "b_7BE0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31715,
   "name": "b_7BE3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31757,
   "name": "b_7C0D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31765,
   "name": "b_7C15",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31774,
   "name": "b_7C1E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31835,
   "name": "b_7C5B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31837,
   "name": "b_7C5D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31865,
   "name": "shot_end",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 31871,
   "name": "shot_hit",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 31878,
   "name": "b_7C86",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31886,
   "name": "b_7C8E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31894,
   "name": "b_7C96",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31902,
   "name": "b_7C9E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31913,
   "name": "b_7CA9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 31939,
   "name": "erase_generator",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32012,
   "name": "j_7D0C",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 32033,
   "name": "b_7D21",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32066,
   "name": "erase_monster",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32107,
   "name": "b_7D6B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32112,
   "name": "b_7D70",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32114,
   "name": "j_7D72",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 32128,
   "name": "irq",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32149,
   "name": "b_7D95",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32171,
   "name": "a_7DAB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32172,
   "name": "a_7DAC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32179,
   "name": "irq_list",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 32192,
   "name": "message_band",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32231,
   "name": "play_band",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32233,
   "name": "b_7DE9",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32278,
   "name": "frame_mark",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32284,
   "name": "panel_band",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32312,
   "name": "b_7E38",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32320,
   "name": "b_7E40",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32322,
   "name": "b_7E42",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32348,
   "name": "b_7E5C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32352,
   "name": "j_7E60",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 32353,
   "name": "msg_ptr",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 32354,
   "name": "a_7E62",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32357,
   "name": "b_7E65",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32384,
   "name": "b_7E80",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32393,
   "name": "b_7E89",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32400,
   "name": "b_7E90",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32407,
   "name": "j_7E97",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 32418,
   "name": "reset_walls",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32447,
   "name": "b_7EBF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32451,
   "name": "b_7EC3",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32452,
   "name": "a_7EC4",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32453,
   "name": "a_7EC5",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32459,
   "name": "a_7ECB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32460,
   "name": "a_7ECC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32464,
   "name": "a_7ED0",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32465,
   "name": "a_7ED1",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32471,
   "name": "b_7ED7",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32511,
   "name": "reset_objects",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32540,
   "name": "b_7F1C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32544,
   "name": "b_7F20",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32545,
   "name": "a_7F21",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32546,
   "name": "a_7F22",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32551,
   "name": "a_7F27",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32552,
   "name": "a_7F28",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32556,
   "name": "a_7F2C",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32557,
   "name": "a_7F2D",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 32564,
   "name": "b_7F34",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32604,
   "name": "print_score",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32611,
   "name": "b_7F63",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32637,
   "name": "print_bcd",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32657,
   "name": "print_energies",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32694,
   "name": "lose_energy",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 32700,
   "name": "b_7FBC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32715,
   "name": "b_7FCB",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32721,
   "name": "b_7FD1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32762,
   "name": "b_7FFA",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32768,
   "name": "cbm80",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32777,
   "name": "b_8009",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32790,
   "name": "r_8016",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 32791,
   "name": "b_8017",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32802,
   "name": "b_8022",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32805,
   "name": "j_8025",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 32831,
   "name": "b_803F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32846,
   "name": "player_dies",
   "type": "Branch",
   "kind": "user"
  },
  {
   "address": 32904,
   "name": "b_8088",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32914,
   "name": "b_8092",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 32929,
   "name": "restart",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 32942,
   "name": "setup_vectors",
   "type": "Jump",
   "kind": "user"
  },
  {
   "address": 32990,
   "name": "nmi",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33014,
   "name": "nmi_ram",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33030,
   "name": "title_mode",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33031,
   "name": "pass_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33032,
   "name": "obj_ofs",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33033,
   "name": "map_index",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33034,
   "name": "rec_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33035,
   "name": "run_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33036,
   "name": "dir",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33037,
   "name": "char_code",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33038,
   "name": "cur_char",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33039,
   "name": "scratch",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33040,
   "name": "loss",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33041,
   "name": "blk_w",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33042,
   "name": "mon_w",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33043,
   "name": "blk_h",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33044,
   "name": "mon_h",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33045,
   "name": "cell_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33046,
   "name": "cell_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33047,
   "name": "wall_kind",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33048,
   "name": "room",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33049,
   "name": "exits",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33050,
   "name": "keys",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33051,
   "name": "skey_7",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33052,
   "name": "skey_8",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33053,
   "name": "brooches",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33054,
   "name": "armour_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33055,
   "name": "armour_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33056,
   "name": "p_armour",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33057,
   "name": "amulets",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33058,
   "name": "masks",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33059,
   "name": "scrolls",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33060,
   "name": "actor_char",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33061,
   "name": "player_hit",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33063,
   "name": "save_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33064,
   "name": "scratch2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33065,
   "name": "save_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33066,
   "name": "cur",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33067,
   "name": "gen_look",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33068,
   "name": "gen_unused",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33069,
   "name": "obj_class_copy",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33070,
   "name": "obj_flag_copy",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33071,
   "name": "colour_ofs",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33073,
   "name": "char_step",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33074,
   "name": "irq_index",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33075,
   "name": "frame_flag",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33076,
   "name": "msg_scroll",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33077,
   "name": "msg_index",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33078,
   "name": "msg_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33079,
   "name": "players",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33080,
   "name": "cur_player",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33081,
   "name": "joy",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33082,
   "name": "walls_drawn",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33083,
   "name": "gen_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33084,
   "name": "obj_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33085,
   "name": "close_exits",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33086,
   "name": "room_step",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33087,
   "name": "target_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33088,
   "name": "target_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33089,
   "name": "door_cells_len",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33090,
   "name": "mon_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33091,
   "name": "mon_next",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33092,
   "name": "phase",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33093,
   "name": "spawn_timer",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33094,
   "name": "spawn_period",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33095,
   "name": "gen_next",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33096,
   "name": "hunger_timer",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33097,
   "name": "drain_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33098,
   "name": "drain_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33099,
   "name": "drain",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33100,
   "name": "turn_delay",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33101,
   "name": "room_msg",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33102,
   "name": "a_814E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33103,
   "name": "obj_list",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33104,
   "name": "a_8150",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33105,
   "name": "wall_list",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33106,
   "name": "a_8152",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33107,
   "name": "gen_list",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 33108,
   "name": "a_8154",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 33109,
   "name": "msg_food",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33142,
   "name": "msg_armour",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33169,
   "name": "msg_fluid",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33232,
   "name": "msg_chest",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33268,
   "name": "msg_agravain_low",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33295,
   "name": "msg_storm_low",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33318,
   "name": "msg_generator",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33364,
   "name": "msg_cabbala",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33394,
   "name": "msg_keys",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33418,
   "name": "msg_first_out",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33467,
   "name": "msg_amulet",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33506,
   "name": "msg_scrolls",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33534,
   "name": "msg_mask",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33561,
   "name": "msg_brooch",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33627,
   "name": "msg_special_key",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33668,
   "name": "msg_need_key",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33704,
   "name": "msg_need_brooches",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33754,
   "name": "msg_credits",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33874,
   "name": "msg_corrine",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 33940,
   "name": "txt_title",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33957,
   "name": "txt_part1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33978,
   "name": "txt_press_fire",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 33997,
   "name": "txt_instructions_q",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34022,
   "name": "txt_forward_yes",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34051,
   "name": "txt_back_no",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34067,
   "name": "txt_players_q",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34091,
   "name": "txt_left_one",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34117,
   "name": "txt_right_two",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34130,
   "name": "txt_score_energy",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34144,
   "name": "txt_player",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34160,
   "name": "row_addr",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34161,
   "name": "row_addr_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34196,
   "name": "colour_rows",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34316,
   "name": "score_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34317,
   "name": "a_860D",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34318,
   "name": "score_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34319,
   "name": "a_860F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34320,
   "name": "p_score",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34321,
   "name": "a_8611",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34322,
   "name": "energy_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34323,
   "name": "a_8613",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34324,
   "name": "energy_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34325,
   "name": "a_8615",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34326,
   "name": "p_energy",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34327,
   "name": "a_8617",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34328,
   "name": "a_dead",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34329,
   "name": "b_dead",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34330,
   "name": "p_dead",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34331,
   "name": "warn_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34332,
   "name": "warn_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34333,
   "name": "p_warn",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34334,
   "name": "b_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34335,
   "name": "b_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34336,
   "name": "b_dir",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34337,
   "name": "b_save",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34345,
   "name": "a_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34346,
   "name": "a_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34347,
   "name": "a_dir",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34348,
   "name": "a_save",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34356,
   "name": "p_x",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34357,
   "name": "p_y",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34358,
   "name": "p_dir",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34359,
   "name": "p_save",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34367,
   "name": "shot_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34368,
   "name": "a_8640",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34369,
   "name": "a_8641",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34370,
   "name": "a_8642",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34371,
   "name": "shot_b",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34372,
   "name": "a_8644",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34373,
   "name": "a_8645",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34374,
   "name": "a_8646",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 34375,
   "name": "shot_dir",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34376,
   "name": "shot_col",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34377,
   "name": "shot_row",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34378,
   "name": "shot_under",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34379,
   "name": "shot_char",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 34380,
   "name": "gen_hits",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34385,
   "name": "gen_kind",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34390,
   "name": "gen_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34395,
   "name": "gen_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34400,
   "name": "gen_phase",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34405,
   "name": "obj_save",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34469,
   "name": "gen_save",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 34499,
   "name": "door_cells",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34626,
   "name": "mon_hp",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34636,
   "name": "mon_x",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34646,
   "name": "mon_y",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34656,
   "name": "mon_phase",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34666,
   "name": "mon_kind",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34676,
   "name": "mon_dir",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34686,
   "name": "mon_save",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 34766,
   "name": "floor_masks",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 35030,
   "name": "unused_88d6",
   "type": "UserDefined",
   "kind": "user"
  },
  {
   "address": 36864,
   "name": "music_init",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 36873,
   "name": "b_9009",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37034,
   "name": "voice1",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37035,
   "name": "a_90AB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37036,
   "name": "a_90AC",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37037,
   "name": "a_90AD",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37038,
   "name": "a_90AE",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37039,
   "name": "a_90AF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37050,
   "name": "a_90BA",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37053,
   "name": "a_90BD",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37054,
   "name": "a_90BE",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37055,
   "name": "a_90BF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37056,
   "name": "a_90C0",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37057,
   "name": "a_90C1",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37058,
   "name": "a_90C2",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37059,
   "name": "a_90C3",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37063,
   "name": "a_90C7",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37067,
   "name": "a_90CB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37069,
   "name": "a_90CD",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37070,
   "name": "voice2",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37071,
   "name": "a_90CF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37072,
   "name": "a_90D0",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37073,
   "name": "a_90D1",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37074,
   "name": "a_90D2",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37075,
   "name": "a_90D3",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37086,
   "name": "a_90DE",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37089,
   "name": "a_90E1",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37090,
   "name": "a_90E2",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37091,
   "name": "a_90E3",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37092,
   "name": "a_90E4",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37093,
   "name": "a_90E5",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37094,
   "name": "a_90E6",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37095,
   "name": "a_90E7",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37099,
   "name": "a_90EB",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37103,
   "name": "a_90EF",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37105,
   "name": "a_90F1",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37106,
   "name": "voice3",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37107,
   "name": "a_90F3",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37108,
   "name": "a_90F4",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37109,
   "name": "a_90F5",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37110,
   "name": "a_90F6",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37111,
   "name": "a_90F7",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37122,
   "name": "a_9102",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37125,
   "name": "a_9105",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37126,
   "name": "a_9106",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37127,
   "name": "a_9107",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37128,
   "name": "a_9108",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37129,
   "name": "a_9109",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37130,
   "name": "a_910A",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37131,
   "name": "a_910B",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37135,
   "name": "a_910F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37139,
   "name": "a_9113",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37141,
   "name": "a_9115",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37142,
   "name": "music_on",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37143,
   "name": "vib_limit",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37144,
   "name": "vib_ofs",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37145,
   "name": "a_9119",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37146,
   "name": "r_911A",
   "type": "Return",
   "kind": "auto"
  },
  {
   "address": 37147,
   "name": "music_play",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37191,
   "name": "a_9147",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 37195,
   "name": "b_914B",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37296,
   "name": "b_91B0",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37350,
   "name": "b_91E6",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37404,
   "name": "b_921C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37415,
   "name": "music_stop",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37420,
   "name": "sid_clear",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37424,
   "name": "b_9230",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37431,
   "name": "tempo_count",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37432,
   "name": "cmd_table",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37433,
   "name": "cmd_table_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 37472,
   "name": "cmd_pulse_sweep",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37496,
   "name": "b_9278",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37518,
   "name": "cmd_noise",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37522,
   "name": "cmd_pulse",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37526,
   "name": "cmd_saw",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37530,
   "name": "cmd_triangle",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37534,
   "name": "cmd_ring",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37538,
   "name": "cmd_sync",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37540,
   "name": "b_92A4",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37547,
   "name": "cmd_pulse_width",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37567,
   "name": "b_92BF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37576,
   "name": "cmd_stop",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37581,
   "name": "cmd_next_pattern",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37653,
   "name": "b_9315",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37668,
   "name": "cmd_slide_up",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37676,
   "name": "cmd_slide_down",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37682,
   "name": "b_9332",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37728,
   "name": "b_9360",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37731,
   "name": "cmd_vibrato",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37745,
   "name": "b_9371",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37763,
   "name": "b_9383",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37766,
   "name": "cmd_note_up",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37774,
   "name": "cmd_note_down",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37784,
   "name": "cmd_vibrato_off",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37792,
   "name": "cmd_vibrato_on",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37800,
   "name": "cmd_volume",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37813,
   "name": "b_93B5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37816,
   "name": "cmd_drum",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37828,
   "name": "cmd_hold",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 37831,
   "name": "voice_tick",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 37857,
   "name": "j_93E1",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 37868,
   "name": "b_93EC",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37882,
   "name": "j_93FA",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 37902,
   "name": "b_940E",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37912,
   "name": "b_9418",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37925,
   "name": "b_9425",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37933,
   "name": "b_942D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37984,
   "name": "b_9460",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 37992,
   "name": "b_9468",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38001,
   "name": "b_9471",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38028,
   "name": "b_948C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38031,
   "name": "b_948F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38046,
   "name": "a_949E",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 38047,
   "name": "a_949F",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 38048,
   "name": "voice_frame",
   "type": "Subroutine",
   "kind": "user"
  },
  {
   "address": 38095,
   "name": "b_94CF",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38104,
   "name": "b_94D8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38118,
   "name": "a_94E6",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 38120,
   "name": "b_94E8",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38144,
   "name": "b_9500",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38173,
   "name": "b_951D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38204,
   "name": "b_953C",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38229,
   "name": "b_9555",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38233,
   "name": "j_9559",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 38247,
   "name": "b_9567",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38255,
   "name": "b_956F",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38266,
   "name": "b_957A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38281,
   "name": "j_9589",
   "type": "Jump",
   "kind": "auto"
  },
  {
   "address": 38353,
   "name": "b_95D1",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38389,
   "name": "b_95F5",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38429,
   "name": "b_961D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38461,
   "name": "b_963D",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38490,
   "name": "b_965A",
   "type": "Branch",
   "kind": "auto"
  },
  {
   "address": 38495,
   "name": "volume",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38496,
   "name": "freq_table",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38497,
   "name": "freq_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38686,
   "name": "arp_table",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38687,
   "name": "arp_table_hi",
   "type": "Field",
   "kind": "user"
  },
  {
   "address": 38714,
   "name": "arp_c0",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38718,
   "name": "arp_c1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38722,
   "name": "arp_c2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38727,
   "name": "arp_c3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38732,
   "name": "arp_c4",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38736,
   "name": "arp_c5",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38740,
   "name": "arp_c6",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38744,
   "name": "arp_c7",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38748,
   "name": "arp_c8",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38751,
   "name": "arp_c9",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38754,
   "name": "arp_ca",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38757,
   "name": "arp_cb",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38760,
   "name": "arp_cc",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38763,
   "name": "arp_cd",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38768,
   "name": "tune_orders",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38769,
   "name": "a_9771",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 38770,
   "name": "a_9772",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 38771,
   "name": "a_9773",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 38772,
   "name": "a_9774",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 38773,
   "name": "a_9775",
   "type": "AbsoluteAddress",
   "kind": "auto"
  },
  {
   "address": 38774,
   "name": "orders_v1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38848,
   "name": "orders_v2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38922,
   "name": "orders_v3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 38948,
   "name": "bass_intro",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39011,
   "name": "bass_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39054,
   "name": "bass_f",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39086,
   "name": "bass_c",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39129,
   "name": "bass_g",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39161,
   "name": "chime_intro",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39199,
   "name": "chord_a",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39207,
   "name": "chord_f",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39215,
   "name": "chord_c",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39223,
   "name": "chord_g",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39231,
   "name": "pad_intro",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39249,
   "name": "tune_1",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39288,
   "name": "tune_2",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 39323,
   "name": "tune_3",
   "type": "AbsoluteAddress",
   "kind": "user"
  },
  {
   "address": 53304,
   "name": "f_D038",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53352,
   "name": "f_D068",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53368,
   "name": "f_D078",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53392,
   "name": "f_D090",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53424,
   "name": "f_D0B0",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 53504,
   "name": "f_D100",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55296,
   "name": "f_D800",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55496,
   "name": "f_D8C8",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55777,
   "name": "f_D9E1",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 55871,
   "name": "f_DA3F",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 56184,
   "name": "f_DB78",
   "type": "Field",
   "kind": "auto"
  },
  {
   "address": 63164,
   "name": "s_F6BC",
   "type": "Subroutine",
   "kind": "auto"
  },
  {
   "address": 64931,
   "name": "KERNAL_IOINITj",
   "type": "Predefined",
   "kind": "system"
  },
  {
   "address": 65490,
   "name": "KERNAL_CHROUT",
   "type": "Predefined",
   "kind": "system"
  }
 ],
 "comments": [
  {
   "address": 2048,
   "type": "line",
   "text": "The play area's character set, 256 characters at $0800-$0FFF (video.charset). Characters 0-$11, here: 0 blank; 1-6 the three wall styles the rooms use, two characters each (1-2, 3-4, 5-6; 3-4 also closes doorways behind a leaving player); 7 the bullet's pattern, which shot_step draws into characters $FE and $FF; 8-$10 patterns no room, object or routine draws; $11 a stray two pixels, never placed."
  },
  {
   "address": 2192,
   "type": "line",
   "text": "Characters $12-$31: the four floor decorations, 4 by 2 characters each ($12, $1A, $22, $2A), placed by draw_floor; each has its mask in floor_masks."
  },
  {
   "address": 2448,
   "type": "line",
   "text": "Characters $32-$39, player B (Storm): put_player builds him here, over the background, each time he moves. game_over writes its G here from the character ROM."
  },
  {
   "address": 2456,
   "type": "line",
   "text": "Character $33: GAME OVER's A, from the ROM's $D008."
  },
  {
   "address": 2464,
   "type": "line",
   "text": "Character $34: GAME OVER's M, from the ROM's $D068."
  },
  {
   "address": 2472,
   "type": "line",
   "text": "Character $35: GAME OVER's E, from the ROM's $D028."
  },
  {
   "address": 2480,
   "type": "line",
   "text": "Character $36: a space in GAME OVER, from the ROM's $D100."
  },
  {
   "address": 2488,
   "type": "line",
   "text": "Character $37: the second space in GAME OVER."
  },
  {
   "address": 2496,
   "type": "line",
   "text": "Character $38: GAME OVER's O, from the ROM's $D078."
  },
  {
   "address": 2504,
   "type": "line",
   "text": "Character $39: GAME OVER's V, from the ROM's $D0B0."
  },
  {
   "address": 2512,
   "type": "line",
   "text": "Characters $3A-$41, player A (Agravain), built by put_player. game_over also writes its second E ($3A, from $D028) and R ($3B, from $D090) here."
  },
  {
   "address": 2520,
   "type": "line",
   "text": "Character $3B: GAME OVER's R, from the ROM's $D090; otherwise player A's second character."
  },
  {
   "address": 2576,
   "type": "line",
   "text": "Characters $42-$81: the room's objects, eight characters each, composed by draw_objects over the background."
  },
  {
   "address": 3088,
   "type": "line",
   "text": "Characters $82-$9F: the room's generators, six each (3 by 2), composed by draw_generators."
  },
  {
   "address": 3328,
   "type": "line",
   "text": "Characters $A0-$EF: the ten monsters, eight each, composed at every step. Before play, copy_rom_font puts the ROM's capitals, digits and punctuation in $A0-$D9 for the instruction pages ($0D00-$0EC9)."
  },
  {
   "address": 3584,
   "type": "line",
   "text": "Character $C0 onwards, inside chars_monsters: copy_rom_font's second loop starts here, copying the ROM's characters from $D100 (the space) up. In play the monsters' characters overwrite them."
  },
  {
   "address": 3968,
   "type": "line",
   "text": "Characters $F0-$FD, empty: nothing draws them. Then $FE and $FF ($0FF0-$0FFF), the two shots, built by shot_step from the bullet and the background under it."
  },
  {
   "address": 4096,
   "type": "line",
   "text": "One pointer for each of the 100 rooms to its list of walls (from $10C8). draw_walls reads it by room number; reset_walls takes only the first and walks the lists in order."
  },
  {
   "address": 4097,
   "type": "line",
   "text": "wall_ptrs' high bytes, read one byte on."
  },
  {
   "address": 4296,
   "type": "line",
   "text": "Room 0's inner walls, four records, then the zero that ends the list: 12 down from (3, 3); 10 right from (4, 3); 12 down from (14, 3); 10 right from (4, 14) (pieces, direction, start cell x, y). All in character 5, and so is the border. All are kind 4: the room's cabbala trap removes them. All four are marked removed (bit 7): the file was saved after the trap had gone off; game_init puts them back."
  },
  {
   "address": 4309,
   "type": "line",
   "text": "Room 1's inner walls, four records, then the zero that ends the list: 5 right from (1, 12); 4 down from (6, 9); 4 down from (11, 9); 5 right from (12, 12) (pieces, direction, start cell x, y). All in character 1, and so is the border."
  },
  {
   "address": 4322,
   "type": "line",
   "text": "Room 2's inner walls, four records, then the zero that ends the list: 4 down from (7, 1); 4 right from (8, 4); 7 down from (11, 5); 5 right from (12, 11) (pieces, direction, start cell x, y). All in character 1, and so is the border. The fourth is kind 4: the room's cabbala trap removes it."
  },
  {
   "address": 4335,
   "type": "line",
   "text": "Room 3's inner walls, seven records, then the zero that ends the list: 4 down from (6, 1); 5 right from (7, 4); 8 down from (11, 5); 3 right from (8, 12); 5 right from (1, 5); 7 down from (5, 6); 4 right from (1, 12) (pieces, direction, start cell x, y). All in character 3, and so is the border. The seventh is kind 4: the room's cabbala trap removes it."
  },
  {
   "address": 4357,
   "type": "line",
   "text": "Room 4's inner walls, five records, then the zero that ends the list: 8 down from (10, 3); 6 right from (11, 3); 5 right from (1, 12); 5 down from (6, 8); 3 right from (6, 13) (pieces, direction, start cell x, y). All in character 5, and so is the border."
  },
  {
   "address": 4373,
   "type": "line",
   "text": "Room 5's inner walls, three records, then the zero that ends the list: 5 right from (1, 3); 8 down from (5, 4); 6 right from (5, 12) (pieces, direction, start cell x, y). All in character 1, and so is the border."
  },
  {
   "address": 4383,
   "type": "line",
   "text": "Room 6's inner walls, one record, then the zero that ends the list: 6 right from (11, 3) (pieces, direction, start cell x, y). All in character 3, and so is the border."
  },
  {
   "address": 4387,
   "type": "line",
   "text": "Room 7's inner walls, two records, then the zero that ends the list: 6 right from (1, 3); 6 down from (13, 11) (pieces, direction, start cell x, y). All in character 5, and so is the border."
  },
  {
   "address": 4394,
   "type": "line",
   "text": "Room 8's inner walls, five records, then the zero that ends the list: 6 right from (1, 11); 3 right from (8, 5); 3 down from (10, 6); 3 down from (6, 1); 3 right from (1, 5) (pieces, direction, start cell x, y). All in character 1, and so is the border."
  },
  {
   "address": 4410,
   "type": "line",
   "text": "Room 9's inner walls, eight records, then the zero that ends the list: 5 right from (1, 5); 4 right from (5, 6); 3 down from (8, 3); 3 right from (9, 3); 3 down from (12, 3); 3 right from (12, 6); 2 right from (15, 9); 4 right from (1, 9) (pieces, direction, start cell x, y). All in character 3, and so is the border."
  },
  {
   "address": 4435,
   "type": "line",
   "text": "Room 10's inner walls, six records, then the zero that ends the list: 7 down from (6, 1); 7 down from (6, 10); 7 down from (11, 10); 7 down from (14, 10); 7 down from (14, 1); 7 down from (11, 1) (pieces, direction, start cell x, y). All in character 5, and so is the border."
  },
  {
   "address": 4454,
   "type": "line",
   "text": "Room 11's inner walls, three records, then the zero that ends the list: 14 down from (8, 3); 4 right from (13, 12); 4 right from (13, 15) (pieces, direction, start cell x, y). All in character 1, and so is the border."
  },
  {
   "address": 4464,
   "type": "line",
   "text": "Room 12's inner walls, eight records, then the zero that ends the list: 4 right from (1, 6); 8 down from (5, 6); 10 right from (5, 14); 7 right from (5, 3); 8 down from (9, 4); 8 down from (12, 3); 5 right from (12, 11); 4 right from (13, 6) (pieces, direction, start cell x, y). All in character 3, and so is the border. The eighth is kind 4: the room's cabbala trap removes it."
  },
  {
   "address": 4489,
   "type": "line",
   "text": "Room 13's inner walls, six records, then the zero that ends the list: 11 right from (1, 6); 3 right from (14, 6); 6 down from (6, 11); 6 down from (11, 11); 4 right from (1, 11); 4 right from (13, 11) (pieces, direction, start cell x, y). All in character 5, and so is the border. The fifth and sixth are kind 4: the room's cabbala trap removes them."
  },
  {
   "address": 4508,
   "type": "line",
   "text": "Room 14's inner walls, five records, then the zero that ends the list: 10 down from (6, 1); 8 right from (6, 11); 5 down from (13, 6); 2 right from (11, 6); 5 down from (11, 1) (pieces, direction, start cell x, y). All in character 1, and so is the border."
  },
  {
   "address": 4524,
   "type": "line",
   "text": "Room 15's inner walls, five records, then the zero that ends the list: 5 right from (5, 4); 4 right from (1, 4); 4 right from (13, 14); 9 down from (9, 5); 4 right from (9, 14) (pieces, direction, start cell x, y). All in character 3, and so is the border. The second and third are kind 4: the room's cabbala trap removes them."
  },
  {
   "address": 4540,
   "type": "line",
   "text": "Room 16's inner walls, one record, then the zero that ends the list: 2 down from (3, 1) (pieces, direction, start cell x, y). All in character 3, and so is the border."
  },
  {
   "address": 4544,
   "type": "line",
   "text": "Room 17's inner walls, six records, then the zero that ends the list: 12 down from (5, 3); 2 right from (6, 3); 2 right from (6, 14); 7 down from (11, 10); 7 down from (11, 1); 7 down from (14, 5) (pieces, direction, start cell x, y). All in character 5, and so is the border."
  },
  {
   "address": 4563,
   "type": "line",
   "text": "Room 18's inner walls, seven records, then the zero that ends the list: 3 right from (1, 11); 7 down from (3, 4); 12 right from (3, 3); 11 down from (14, 4); 6 down from (8, 4); 8 right from (3, 14); 8 down from (11, 9) (pieces, direction, start cell x, y). All in character 1, and so is the border."
  },
  {
   "address": 4585,
   "type": "line",
   "text": "Room 19's inner walls, three records, then the zero that ends the list: 8 down from (7, 5); 7 right from (8, 5); 7 right from (8, 12) (pieces, direction, start cell x, y). All in character 3, and so is the border."
  },
  {
   "address": 4595,
   "type": "line",
   "text": "Room 20's inner walls, six records, then the zero that ends the list: 5 right from (1, 6); 3 down from (5, 7); 3 down from (8, 1); 5 right from (8, 4); 10 down from (12, 5); 4 right from (13, 11) (pieces, direction, start cell x, y). All in character 5, and so is the border. The sixth is kind 4: the room's cabbala trap removes it."
  },
  {
   "address": 4614,
   "type": "line",
   "text": "Room 21's inner walls, six records, then the zero that ends the list: 8 down from (6, 1); 8 down from (11, 1); 3 down from (3, 11); 3 down from (14, 11); 10 right from (4, 11); 10 right from (4, 14) (pieces, direction, start cell x, y). All in character 3, and so is the border. The third, fourth, fifth and sixth are kind 4: the room's cabbala trap removes them."
  },
  {
   "address": 4633,
   "type": "line",
   "text": "Room 22's inner walls, four records, then the zero that ends the list: 14 right from (1, 6); 4 right from (13, 3); 4 right from (9, 13); 8 down from (8, 7) (pieces, direction, start cell x, y). All in character 3, and so is the border."
  },
  {
   "address": 4646,
   "type": "line",
   "text": "Room 23's inner walls, eight records, then the zero that ends the list: 5 right from (1, 6); 4 down from (6, 3); 4 down from (11, 3); 5 right from (12, 6); 4 down from (11, 11); 4 down from (6, 11); 5 right from (12, 11); 5 right from (1, 11) (pieces, direction, start cell x, y). All in character 5, and so is the border."
  },
  {
   "address": 4671,
   "type": "line",
   "text": "Room 24's inner walls, six records, then the zero that ends the list: 13 right from (1, 6); 3 down from (6, 3); 4 right from (1, 11); 4 right from (13, 11); 6 down from (11, 11); 6 down from (6, 11) (pieces, direction, start cell x, y). All in character 3, and so is the border."
  },
  {
   "address": 4690,
   "type": "line",
   "text": "Room 25's inner walls, seven records, then the zero that ends the list: 12 down from (3, 3); 12 down from (6, 3); 6 right from (7, 8); 4 down from (10, 9); 4 right from (11, 12); 3 down from (13, 3); 3 right from (14, 4) (pieces, direction, start cell x, y). All in character 5, and so is the border."
  },
  {
   "address": 4712,
   "type": "line",
   "text": "Room 26's inner walls, one record, then the zero that ends the list: 13 down from (6, 3) (pieces, direction, start cell x, y). All in character 1, and so is the border."
  },
  {
   "address": 4716,
   "type": "line",
   "text": "Room 27's inner walls, three records, then the zero that ends the list: 8 down from (5, 5); 8 down from (12, 5); 6 right from (6, 5) (pieces, direction, start cell x, y). All in character 3, and so is the border."
  },
  {
   "address": 4726,
   "type": "line",
   "text": "Room 28's inner walls, nine records, then the zero that ends the list: 3 right from (1, 11); 6 down from (3, 5); 8 right from (4, 6); 3 down from (6, 14); 3 down from (11, 14); 8 right from (6, 11); 11 down from (14, 4); 9 right from (6, 3); 2 down from (6, 1) (pieces, direction, start cell x, y). All in character 5, and so is the border."
  },
  {
   "address": 4754,
   "type": "line",
   "text": "Room 29's inner walls, four records, then the zero that ends the list: 6 right from (1, 11); 4 down from (6, 13); 4 right from (11, 8); 6 down from (12, 9) (pieces, direction, start cell x, y). All in character 1, and so is the border. The first is kind 4: the room has no trap, so nothing removes it."
  },
  {
   "address": 4767,
   "type": "line",
   "text": "Room 30's inner walls, seven records, then the zero that ends the list: 8 down from (12, 3); 2 right from (13, 6); 8 right from (7, 11); 3 down from (11, 12); 4 down from (3, 7); 4 right from (1, 11); 2 right from (5, 11) (pieces, direction, start cell x, y). All in character 3, and so is the border. The seventh is kind 4: the room's cabbala trap removes it."
  },
  {
   "address": 4789,
   "type": "line",
   "text": "Room 31's inner walls, two records, then the zero that ends the list: 6 right from (1, 6); 5 down from (6, 1) (pieces, direction, start cell x, y). All in character 5, and so is the border."
  },
  {
   "address": 4796,
   "type": "line",
   "text": "Room 32's inner walls, five records, then the zero that ends the list: 6 right from (6, 6); 6 right from (6, 11); 4 down from (6, 7); 4 down from (11, 7); 5 down from (12, 12) (pieces, direction, start cell x, y). All in character 1, and so is the border."
  },
  {
   "address": 4812,
   "type": "line",
   "text": "Room 33's inner walls, four records, then the zero that ends the list: 14 right from (3, 6); 3 down from (11, 1); 8 down from (12, 9); 8 down from (7, 9) (pieces, direction, start cell x, y). All in character 3, and so is the border."
  },
  {
   "address": 4825,
   "type": "line",
   "text": "Room 34's inner walls, two records, then the zero that ends the list: 5 down from (13, 3); 5 down from (13, 10) (pieces, direction, start cell x, y). All in character 5, and so is the border."
  },
  {
   "address": 4832,
   "type": "line",
   "text": "Room 35's inner walls, five records, then the zero that ends the list: 6 down from (6, 1); 9 down from (6, 8); 10 down from (10, 4); 4 right from (11, 8); 6 down from (14, 9) (pieces, direction, start cell x, y). All in character 1, and so is the border."
  },
  {
   "address": 4848,
   "type": "line",
   "text": "Room 36's inner walls, three records, then the zero that ends the list: 5 right from (1, 10); 14 down from (6, 3); 6 down from (11, 3) (pieces, direction, start cell x, y). All in character 3, and so is the border."
  },
  {
   "address": 4858,
   "type": "line",
   "text": "Room 37's inner walls, ten records (the most a room has; no zero): 6 right from (1, 3); 3 down from (6, 4); 4 right from (6, 7); 4 down from (10, 7); 4 right from (11, 10); 4 down from (3, 6); 3 right from (3, 10); 3 down from (6, 10); 7 right from (6, 13); 4 down from (13, 13) (pieces, direction, start cell x, y). Characters 5, 5, 5, 5, 5, 3, 3, 3, 3, 3 in that order; the border takes character 3, the last record's."
  },
  {
   "address": 4888,
   "type": "line",
   "text": "Room 38's inner walls, seven records, then the zero that ends the list: 3 right from (1, 6); 6 down from (3, 7); 8 right from (4, 12); 4 down from (11, 13); 5 down from (14, 10); 3 right from (12, 9); 8 right from (4, 3) (pieces, direction, start cell x, y). All in character 3, and so is the border."
  },
  {
   "address": 4910,
   "type": "line",
   "text": "Room 39's inner walls, seven records, then the zero that ends the list: 14 down from (3, 1); 9 down from (6, 8); 5 down from (7, 3); 8 right from (7, 8); 6 down from (12, 9); 2 right from (7, 13); 6 right from (11, 4) (pieces, direction, start cell x, y). All in character 3, and so is the border. The sixth and seventh are kind 4: the room has no trap, so nothing removes them."
  },
  {
   "address": 4932,
   "type": "line",
   "text": "Room 40's inner walls, five records, then the zero that ends the list: 5 right from (1, 6); 4 down from (6, 6); 7 right from (7, 9); 6 right from (11, 6); 2 down from (5, 15) (pieces, direction, start cell x, y). All in character 1, and so is the border."
  },
  {
   "address": 4948,
   "type": "line",
   "text": "Room 41's inner walls, five records, then the zero that ends the list: 5 down from (5, 1); 3 down from (5, 14); 6 down from (5, 7); 6 right from (6, 8); 5 down from (13, 1) (pieces, direction, start cell x, y). All in character 3, and so is the border."
  },
  {
   "address": 4964,
   "type": "line",
   "text": "Room 42's inner walls, five records, then the zero that ends the list: 4 down from (8, 1); 4 right from (9, 4); 4 right from (10, 7); 4 right from (10, 11); 3 down from (10, 8) (pieces, direction, start cell x, y). All in character 5, and so is the border."
  },
  {
   "address": 4980,
   "type": "line",
   "text": "Room 43's inner walls, five records, then the zero that ends the list: 3 down from (6, 1); 8 right from (7, 3); 8 right from (9, 6); 8 down from (11, 7); 8 right from (3, 14) (pieces, direction, start cell x, y). All in character 1, and so is the border."
  },
  {
   "address": 4996,
   "type": "line",
   "text": "Room 44's inner walls, three records, then the zero that ends the list: 12 down from (7, 3); 12 down from (10, 3); 2 right from (8, 14) (pieces, direction, start cell x, y). All in character 3, and so is the border."
  },
  {
   "address": 5006,
   "type": "line",
   "text": "Room 45's inner walls, six records, then the zero that ends the list: 4 down from (3, 4); 4 down from (3, 10); 4 down from (14, 10); 4 down from (14, 4); 12 right from (3, 14); 12 right from (3, 3) (pieces, direction, start cell x, y). All in character 5, and so is the border."
  },
  {
   "address": 5025,
   "type": "line",
   "text": "Room 46's inner walls, six records, then the zero that ends the list: 3 right from (1, 11); 6 down from (3, 5); 6 down from (14, 5); 3 right from (14, 11); 4 right from (4, 5); 4 right from (10, 5) (pieces, direction, start cell x, y). All in character 1, and so is the border. The fifth and sixth are kind 4: the room's cabbala trap removes them."
  },
  {
   "address": 5044,
   "type": "line",
   "text": "Room 47's inner walls, four records, then the zero that ends the list: 4 right from (12, 13); 14 right from (1, 3); 3 down from (6, 14); 3 down from (8, 4) (pieces, direction, start cell x, y). All in character 3, and so is the border. The first is kind 4: the room's cabbala trap removes it."
  },
  {
   "address": 5057,
   "type": "line",
   "text": "Room 48's inner walls, eight records, then the zero that ends the list: 5 right from (1, 9); 5 right from (12, 9); 6 down from (5, 3); 6 down from (12, 3); 6 down from (10, 5); 2 right from (8, 10); 3 down from (7, 5); 3 down from (7, 8) (pieces, direction, start cell x, y). All in character 5, and so is the border. The eighth is kind 4: the room's cabbala trap removes it."
  },
  {
   "address": 5082,
   "type": "line",
   "text": "Room 49's inner walls, eight records, then the zero that ends the list: 4 right from (1, 4); 10 down from (4, 5); 9 down from (10, 1); 3 down from (12, 14); 9 down from (7, 1); 6 right from (11, 6); 3 down from (13, 7); 2 right from (11, 9) (pieces, direction, start cell x, y). All in character 1, and so is the border. The fifth, sixth, seventh and eighth are kind 4: the room's cabbala trap removes them."
  },
  {
   "address": 5107,
   "type": "line",
   "text": "Room 50's inner walls, seven records, then the zero that ends the list: 5 right from (1, 4); 5 right from (12, 4); 5 down from (6, 12); 6 right from (1, 11); 6 down from (11, 11); 4 down from (6, 1); 4 down from (11, 1) (pieces, direction, start cell x, y). All in character 3, and so is the border. The first, second and third are kind 4: the room's cabbala trap removes them."
  },
  {
   "address": 5129,
   "type": "line",
   "text": "Room 51's inner walls, five records, then the zero that ends the list: 3 down from (6, 1); 4 right from (7, 3); 2 down from (10, 4); 4 down from (8, 8); 8 right from (9, 8) (pieces, direction, start cell x, y). All in character 5, and so is the border."
  },
  {
   "address": 5145,
   "type": "line",
   "text": "Room 52's inner walls, nine records, then the zero that ends the list: 6 right from (1, 7); 3 down from (7, 7); 5 right from (7, 10); 2 down from (11, 8); 2 right from (9, 8); 2 down from (9, 6); 5 right from (9, 5); 8 down from (14, 5); 3 right from (14, 13) (pieces, direction, start cell x, y). All in character 1, and so is the border."
  },
  {
   "address": 5173,
   "type": "line",
   "text": "Room 53's inner walls, ten records (the most a room has; no zero): 3 right from (1, 5); 2 down from (3, 3); 4 right from (4, 3); 7 down from (7, 4); 2 right from (5, 10); 3 down from (5, 11); 5 right from (6, 13); 3 down from (10, 10); 3 right from (11, 10); 6 down from (13, 11) (pieces, direction, start cell x, y). All in character 3, and so is the border."
  },
  {
   "address": 5203,
   "type": "line",
   "text": "Room 54's inner walls, seven records, then the zero that ends the list: 3 down from (6, 1); 3 right from (3, 3); 11 down from (3, 4); 4 down from (9, 11); 5 right from (10, 14); 11 right from (4, 10); 11 right from (4, 7) (pieces, direction, start cell x, y). All in character 5, and so is the border. The sixth and seventh are kind 4: the room's cabbala trap removes them."
  },
  {
   "address": 5225,
   "type": "line",
   "text": "Room 55's inner walls, one record, then the zero that ends the list: 7 right from (10, 14) (pieces, direction, start cell x, y). All in character 1, and so is the border."
  },
  {
   "address": 5229,
   "type": "line",
   "text": "Room 56's inner walls, ten records (the most a room has; no zero): 4 right from (7, 3); 2 down from (7, 4); 4 right from (7, 6); 2 down from (10, 7); 4 right from (7, 9); 2 down from (7, 10); 4 right from (7, 12); 2 down from (7, 7); 2 right from (15, 13); 2 down from (14, 3) (pieces, direction, start cell x, y). All in character 3, and so is the border. The eighth is kind 4: the room's cabbala trap removes it."
  },
  {
   "address": 5259,
   "type": "line",
   "text": "Room 57's inner walls, three records, then the zero that ends the list: 6 down from (5, 1); 6 right from (5, 7); 6 down from (10, 8) (pieces, direction, start cell x, y). All in character 5, and so is the border."
  },
  {
   "address": 5269,
   "type": "line",
   "text": "Room 58's inner walls, ten records (the most a room has; no zero): 7 right from (1, 6); 3 down from (7, 3); 4 right from (3, 3); 4 right from (3, 14); 4 right from (11, 14); 4 right from (11, 3); 3 down from (10, 3); 3 down from (10, 12); 3 down from (7, 12); 7 right from (1, 11) (pieces, direction, start cell x, y). All in character 1, and so is the border."
  },
  {
   "address": 5299,
   "type": "line",
   "text": "Room 59's inner walls, six records, then the zero that ends the list: 5 right from (1, 3); 5 right from (1, 14); 5 right from (12, 14); 5 right from (12, 3); 6 down from (6, 6); 6 down from (11, 6) (pieces, direction, start cell x, y). All in character 3, and so is the border."
  },
  {
   "address": 5318,
   "type": "line",
   "text": "Room 60's inner walls, three records, then the zero that ends the list: 12 down from (4, 3); 6 right from (11, 14); 6 right from (11, 3) (pieces, direction, start cell x, y). All in character 5, and so is the border."
  },
  {
   "address": 5328,
   "type": "line",
   "text": "Room 61's inner walls, four records, then the zero that ends the list: 2 down from (3, 15); 2 down from (14, 1); 3 right from (1, 12); 3 right from (14, 5) (pieces, direction, start cell x, y). All in character 1, and so is the border."
  },
  {
   "address": 5341,
   "type": "line",
   "text": "Room 62's inner walls, seven records, then the zero that ends the list: 6 right from (1, 4); 2 down from (6, 5); 7 right from (7, 6); 6 down from (14, 6); 8 right from (6, 11); 2 down from (6, 12); 5 right from (1, 13) (pieces, direction, start cell x, y). All in character 3, and so is the border."
  },
  {
   "address": 5363,
   "type": "line",
   "text": "Room 63's inner walls, ten records (the most a room has; no zero): 3 right from (4, 6); 3 down from (7, 6); 3 right from (7, 9); 3 down from (9, 6); 7 right from (10, 6); 7 down from (4, 7); 3 right from (4, 14); 2 down from (6, 12); 3 right from (7, 12); 2 down from (9, 13) (pieces, direction, start cell x, y). All in character 5, and so is the border."
  },
  {
   "address": 5393,
   "type": "line",
   "text": "Room 64's inner walls, ten records (the most a room has; no zero): 2 right from (1, 4); 2 down from (2, 5); 3 right from (3, 6); 2 down from (5, 4); 7 right from (6, 4); 2 down from (12, 5); 3 right from (13, 6); 1 right from (15, 5); 2 right from (15, 4); 6 right from (6, 11) (pieces, direction, start cell x, y). All in character 1, and so is the border."
  },
  {
   "address": 5423,
   "type": "line",
   "text": "Room 65's inner walls, four records, then the zero that ends the list: 6 right from (1, 4); 6 right from (6, 3); 4 right from (11, 4); 3 right from (14, 3) (pieces, direction, start cell x, y). All in character 3, and so is the border. All are kind 4: the room's cabbala trap removes them."
  },
  {
   "address": 5436,
   "type": "line",
   "text": "Room 66's inner walls, seven records, then the zero that ends the list: 8 right from (1, 4); 8 right from (8, 3); 2 right from (15, 4); 8 right from (9, 8); 4 down from (9, 9); 3 right from (10, 12); 2 down from (12, 13) (pieces, direction, start cell x, y). All in character 5, and so is the border."
  },
  {
   "address": 5458,
   "type": "line",
   "text": "Room 67's inner walls, four records, then the zero that ends the list: 6 down from (5, 11); 6 down from (12, 11); 6 right from (6, 3); 6 right from (6, 11) (pieces, direction, start cell x, y). All in character 1, and so is the border. The fourth is kind 4: the room's cabbala trap removes it."
  },
  {
   "address": 5471,
   "type": "line",
   "text": "Room 68's inner walls, ten records (the most a room has; no zero): 2 down from (13, 3); 4 right from (13, 5); 9 right from (4, 3); 2 down from (4, 4); 4 right from (4, 6); 2 down from (7, 7); 3 right from (5, 9); 2 down from (5, 10); 3 right from (5, 12); 2 down from (7, 13) (pieces, direction, start cell x, y). All in character 3, and so is the border."
  },
  {
   "address": 5501,
   "type": "line",
   "text": "Room 69's inner walls, nine records, then the zero that ends the list: 5 right from (1, 6); 5 down from (5, 1); 3 right from (3, 11); 2 down from (5, 12); 8 right from (6, 13); 4 down from (13, 10); 5 right from (8, 10); 4 down from (8, 6); 8 right from (9, 6) (pieces, direction, start cell x, y). All in character 5, and so is the border. The second is kind 4: the room's cabbala trap removes it."
  },
  {
   "address": 5529,
   "type": "line",
   "text": "Room 70's inner walls, ten records (the most a room has; no zero): 3 right from (1, 11); 8 down from (3, 3); 3 right from (4, 3); 6 down from (7, 3); 7 right from (7, 9); 4 down from (14, 6); 4 right from (10, 6); 3 down from (10, 3); 3 down from (11, 1); 4 down from (6, 13) (pieces, direction, start cell x, y). All in character 1, and so is the border. The third is kind 4: the room's cabbala trap removes it."
  },
  {
   "address": 5559,
   "type": "line",
   "text": "Room 71's inner walls, four records, then the zero that ends the list: 7 right from (3, 3); 8 down from (6, 4); 10 down from (9, 4); 7 right from (3, 14) (pieces, direction, start cell x, y). All in character 3, and so is the border."
  },
  {
   "address": 5572,
   "type": "line",
   "text": "Room 72's inner walls, six records, then the zero that ends the list: 4 right from (3, 8); 3 down from (3, 9); 2 right from (4, 11); 8 down from (6, 9); 5 down from (11, 12); 4 right from (7, 12) (pieces, direction, start cell x, y). All in character 5, and so is the border. The sixth is kind 4: the room's cabbala trap removes it."
  },
  {
   "address": 5591,
   "type": "line",
   "text": "Room 73's inner walls, seven records, then the zero that ends the list: 6 right from (1, 11); 3 right from (14, 4); 3 down from (14, 5); 2 right from (13, 8); 4 right from (7, 11); 3 right from (10, 12); 4 down from (12, 8) (pieces, direction, start cell x, y). All in character 1, and so is the border. The fifth, sixth and seventh are kind 4: the room's cabbala trap removes them."
  },
  {
   "address": 5613,
   "type": "line",
   "text": "Room 74's inner walls, four records, then the zero that ends the list: 5 right from (1, 5); 6 down from (5, 6); 7 down from (11, 5); 5 right from (6, 9) (pieces, direction, start cell x, y). All in character 3, and so is the border."
  },
  {
   "address": 5626,
   "type": "line",
   "text": "Room 75's inner walls, five records, then the zero that ends the list: 3 down from (4, 4); 10 right from (4, 3); 7 down from (14, 3); 10 right from (5, 10); 6 down from (4, 9) (pieces, direction, start cell x, y). All in character 5, and so is the border."
  },
  {
   "address": 5642,
   "type": "line",
   "text": "Room 76's inner walls, four records, then the zero that ends the list: 8 down from (6, 1); 3 down from (7, 11); 3 right from (8, 11); 6 right from (11, 11) (pieces, direction, start cell x, y). All in character 1, and so is the border. The first, second and third are kind 4: the room's cabbala trap removes them."
  },
  {
   "address": 5655,
   "type": "line",
   "text": "Room 77's inner walls, five records, then the zero that ends the list: 5 right from (3, 4); 3 down from (11, 1); 3 right from (14, 3); 5 right from (12, 13); 11 down from (8, 4) (pieces, direction, start cell x, y). All in character 3, and so is the border. The fifth is kind 4: the room's cabbala trap removes it."
  },
  {
   "address": 5671,
   "type": "line",
   "text": "Room 78's inner walls, five records, then the zero that ends the list: 2 down from (6, 1); 2 down from (11, 1); 4 down from (7, 7); 4 down from (10, 7); 2 right from (8, 7) (pieces, direction, start cell x, y). All in character 5, and so is the border."
  },
  {
   "address": 5687,
   "type": "line",
   "text": "Room 79's inner walls, seven records, then the zero that ends the list: 10 down from (6, 1); 5 down from (11, 6); 4 right from (11, 11); 2 down from (14, 12); 5 down from (11, 1); 3 down from (3, 11); 3 right from (4, 11) (pieces, direction, start cell x, y). All in character 1, and so is the border. The fifth, sixth and seventh are kind 4: the room's cabbala trap removes them."
  },
  {
   "address": 5709,
   "type": "line",
   "text": "Room 80's inner walls, six records, then the zero that ends the list: 4 right from (1, 3); 2 down from (4, 1); 14 right from (1, 6); 14 right from (1, 11); 2 right from (15, 6); 2 right from (15, 11) (pieces, direction, start cell x, y). All in character 3, and so is the border. The third, fourth, fifth and sixth are kind 4: the room's cabbala trap removes them."
  },
  {
   "address": 5728,
   "type": "line",
   "text": "Room 81's inner walls, eight records, then the zero that ends the list: 8 right from (5, 5); 6 down from (12, 6); 8 right from (5, 12); 6 down from (5, 6); 4 down from (4, 7); 4 right from (7, 13); 4 down from (13, 7); 4 right from (7, 4) (pieces, direction, start cell x, y). Characters 5, 5, 5, 5, 3, 3, 3, 3 in that order; the border takes character 3, the last record's. The first, second, third and fourth are kind 4: the room's cabbala trap removes them."
  },
  {
   "address": 5753,
   "type": "line",
   "text": "Room 82's inner walls, eight records, then the zero that ends the list: 4 right from (1, 5); 4 right from (1, 10); 4 down from (4, 13); 13 down from (7, 1); 4 right from (8, 5); 4 right from (8, 10); 3 down from (11, 11); 10 down from (14, 1) (pieces, direction, start cell x, y). All in character 1, and so is the border."
  },
  {
   "address": 5778,
   "type": "line",
   "text": "Room 83's inner walls, five records, then the zero that ends the list: 5 right from (1, 5); 14 down from (11, 1); 2 down from (11, 15); 14 down from (6, 1); 2 down from (6, 15) (pieces, direction, start cell x, y). All in character 3, and so is the border. The first, second and third are kind 4: the room's cabbala trap removes them."
  },
  {
   "address": 5794,
   "type": "line",
   "text": "Room 84's inner walls, four records, then the zero that ends the list: 4 down from (12, 13); 6 right from (6, 2); 2 down from (5, 1); 2 down from (14, 1) (pieces, direction, start cell x, y). All in character 5, and so is the border."
  },
  {
   "address": 5807,
   "type": "line",
   "text": "Room 85's inner walls, ten records (the most a room has; no zero): 3 right from (1, 6); 8 down from (3, 7); 8 right from (4, 14); 6 right from (9, 9); 3 right from (7, 8); 3 right from (7, 5); 3 right from (12, 3); 3 right from (12, 6); 2 down from (12, 4); 1 right from (6, 1) (pieces, direction, start cell x, y). All in character 1, and so is the border."
  },
  {
   "address": 5837,
   "type": "line",
   "text": "Room 86's inner walls, eight records, then the zero that ends the list: 2 down from (3, 1); 7 right from (3, 3); 7 down from (9, 4); 6 right from (1, 11); 3 right from (1, 6); 3 right from (9, 11); 3 right from (14, 11); 2 right from (7, 11) (pieces, direction, start cell x, y). All in character 3, and so is the border. The eighth is kind 4: the room's cabbala trap removes it."
  },
  {
   "address": 5862,
   "type": "line",
   "text": "Room 87's inner walls, eight records, then the zero that ends the list: 2 right from (1, 6); 12 down from (3, 3); 14 down from (6, 3); 3 right from (14, 11); 8 down from (14, 3); 10 down from (11, 5); 3 right from (9, 4); 3 down from (9, 1) (pieces, direction, start cell x, y). All in character 3, and so is the border. The first, second and third are kind 4: the room's cabbala trap removes them."
  },
  {
   "address": 5887,
   "type": "line",
   "text": "Room 88's inner walls, four records, then the zero that ends the list: 9 down from (6, 8); 6 down from (11, 8); 6 right from (6, 7); 6 right from (11, 14) (pieces, direction, start cell x, y). All in character 1, and so is the border. The fourth is kind 4: the room's cabbala trap removes it."
  },
  {
   "address": 5900,
   "type": "line",
   "text": "Room 89's inner walls, two records, then the zero that ends the list: 6 right from (1, 8); 7 down from (6, 1) (pieces, direction, start cell x, y). All in character 3, and so is the border. All are kind 4: the room's cabbala trap removes them."
  },
  {
   "address": 5907,
   "type": "line",
   "text": "Room 90's inner walls, five records, then the zero that ends the list: 7 down from (2, 1); 3 right from (2, 8); 3 down from (4, 9); 3 down from (14, 12); 12 right from (5, 11) (pieces, direction, start cell x, y). All in character 5, and so is the border. The first, second, third and fourth are kind 4: the room's cabbala trap removes them."
  },
  {
   "address": 5923,
   "type": "line",
   "text": "Room 91's inner walls, nine records, then the zero that ends the list: 4 down from (5, 1); 10 right from (5, 5); 7 right from (1, 11); 3 down from (7, 8); 2 down from (10, 10); 1 right from (11, 10); 5 down from (14, 10); 4 right from (10, 14); 2 down from (3, 15) (pieces, direction, start cell x, y). All in character 1, and so is the border."
  },
  {
   "address": 5951,
   "type": "line",
   "text": "Room 92's inner walls, eight records, then the zero that ends the list: 9 down from (14, 4); 4 down from (14, 13); 4 right from (10, 12); 7 right from (4, 13); 3 right from (1, 11); 9 down from (4, 4); 13 right from (4, 3); 2 down from (6, 1) (pieces, direction, start cell x, y). All in character 3, and so is the border. The first is kind 4: the room's cabbala trap removes it."
  },
  {
   "address": 5976,
   "type": "line",
   "text": "Room 93's inner walls, two records, then the zero that ends the list: 3 down from (11, 14); 6 right from (11, 12) (pieces, direction, start cell x, y). All in character 3, and so is the border."
  },
  {
   "address": 5983,
   "type": "line",
   "text": "Room 94's inner walls, three records, then the zero that ends the list: 12 right from (5, 3); 12 right from (5, 7); 12 right from (5, 12) (pieces, direction, start cell x, y). All in character 5, and so is the border."
  },
  {
   "address": 5993,
   "type": "line",
   "text": "Room 95's inner walls, two records, then the zero that ends the list: 2 right from (5, 4); 3 down from (7, 4) (pieces, direction, start cell x, y). All in character 1, and so is the border."
  },
  {
   "address": 6000,
   "type": "line",
   "text": "Room 96's inner walls, one record, then the zero that ends the list: 6 right from (11, 4) (pieces, direction, start cell x, y). All in character 3, and so is the border."
  },
  {
   "address": 6004,
   "type": "line",
   "text": "Room 97's inner walls, six records, then the zero that ends the list: 3 right from (3, 3); 3 right from (12, 3); 3 right from (12, 12); 3 right from (3, 12); 6 down from (4, 6); 8 down from (10, 4) (pieces, direction, start cell x, y). All in character 5, and so is the border."
  },
  {
   "address": 6023,
   "type": "line",
   "text": "Room 98's inner walls, four records, then the zero that ends the list: 6 down from (12, 11); 5 right from (7, 11); 5 right from (7, 6); 6 down from (12, 1) (pieces, direction, start cell x, y). All in character 3, and so is the border."
  },
  {
   "address": 6036,
   "type": "line",
   "text": "Room 99's inner walls, two records, then the zero that ends the list: 3 right from (14, 5); 3 right from (14, 12) (pieces, direction, start cell x, y). All in character 3, and so is the border."
  },
  {
   "address": 6043,
   "type": "line",
   "text": "The rooms' exits, a nibble each, two rooms to a byte (the even room in the high nibble): bit 3 top, bit 2 bottom, bit 1 left, bit 0 right. Read by draw_border."
  },
  {
   "address": 6093,
   "type": "line",
   "text": "One pointer for each room to its list of objects (from $1895). draw_objects reads it by room number; reset_objects takes the first."
  },
  {
   "address": 6094,
   "type": "line",
   "text": "obj_ptrs' high bytes."
  },
  {
   "address": 6293,
   "type": "line",
   "text": "Room 0's objects: a key at (1, 8) (marked taken: the file was saved after play); a cabbala symbol (type $05) at (4, 8): a trap (marked taken: the file was saved after play); a scroll at (15, 8), then the zero that ends the list."
  },
  {
   "address": 6303,
   "type": "line",
   "text": "Room 1's objects: type $0A at (3, 3), solid; type $0B at (5, 3), solid; type $0A at (13, 3), solid, then the zero that ends the list."
  },
  {
   "address": 6313,
   "type": "line",
   "text": "Room 2's objects: type $0A at (3, 3), solid; type $0C at (5, 15), solid; a cabbala symbol (type $06) at (7, 15): a trap; type $10 at (7, 13), solid; type $0C at (7, 8), solid; armour at (15, 1), then the zero that ends the list."
  },
  {
   "address": 6332,
   "type": "line",
   "text": "Room 3's objects: the laboratory door at (1, 8), which needs three brooches; armour at (5, 14); food at (6, 11); a cabbala symbol (type $05) at (9, 5): a trap; type $12 at (15, 11), solid; type $18 at (15, 9), solid; a scroll at (13, 5), then the zero that ends the list."
  },
  {
   "address": 6354,
   "type": "line",
   "text": "Room 4's objects: type $0A at (3, 1), solid, then the zero that ends the list."
  },
  {
   "address": 6358,
   "type": "line",
   "text": "Room 5's objects: type $12 at (1, 5), solid; type $11 at (3, 5), solid; food at (9, 10); type $10 at (15, 5), solid; type $11 at (15, 3), solid; type $12 at (13, 5), solid, then the zero that ends the list."
  },
  {
   "address": 6377,
   "type": "line",
   "text": "Room 6's objects: type $0A at (3, 11), solid; type $0B at (5, 13), solid; type $0A at (13, 13), solid; armour at (15, 1); type $0A at (9, 3), solid; type $0A at (5, 3), solid, then the zero that ends the list."
  },
  {
   "address": 6396,
   "type": "line",
   "text": "Room 7's objects: a cabbala symbol (type $06) at (15, 1): a trap; type $0E at (4, 4), solid, removed when the trap goes off; type $0B at (11, 8), solid; type $0A at (13, 10), solid; type $0B at (15, 11), solid; a scroll at (13, 13); type $0A at (6, 4), solid; food at (14, 14)."
  },
  {
   "address": 6420,
   "type": "line",
   "text": "Room 8's objects: a cabbala symbol (type $05) at (15, 1): a trap; type $0B at (15, 11), solid; type $0B at (13, 10), solid; type $0A at (11, 8), solid; type $0B at (6, 4), solid; type $0E at (4, 4), solid, removed when the trap goes off; a scroll at (13, 13), then the zero that ends the list."
  },
  {
   "address": 6442,
   "type": "line",
   "text": "Room 9's objects: a bottle of restorative fluid at (1, 1); type $0A at (3, 1), solid; a scroll at (1, 3); armour at (13, 4); type $0A at (5, 9), solid; type $0A at (9, 9), solid; type $0B at (13, 9), solid; type $0A at (7, 13), solid."
  },
  {
   "address": 6466,
   "type": "line",
   "text": "Room 10's objects: type $0E at (1, 5), solid; type $0E at (1, 11), solid; type $0E at (4, 11), solid; type $0E at (4, 5), solid; food at (9, 1); food at (9, 15); type $0E at (15, 1), solid; type $0E at (15, 15), solid."
  },
  {
   "address": 6490,
   "type": "line",
   "text": "Room 11's objects: a bottle of restorative fluid at (1, 10); a snake brooch at (1, 8); special key 8 at (1, 6); a key at (4, 13); food at (4, 3); a mask at (6, 6); a jewel-filled chest at (6, 8); a scroll at (6, 10)."
  },
  {
   "address": 6514,
   "type": "line",
   "text": "Room 12's objects: type $0A at (1, 1), solid; food at (6, 12); a cabbala symbol (type $06) at (10, 4): a trap; type $12 at (15, 1), solid, then the zero that ends the list."
  },
  {
   "address": 6527,
   "type": "line",
   "text": "Room 13's objects: a cabbala symbol (type $05) at (1, 1): a trap; type $18 at (6, 4), solid; food at (6, 8); type $10 at (12, 6), which vanishes when touched, to no effect, then the zero that ends the list."
  },
  {
   "address": 6540,
   "type": "line",
   "text": "Room 14's objects: type $0A at (1, 1), solid; type $10 at (3, 1), solid; type $12 at (3, 5), solid; type $12 at (7, 13), solid; type $0A at (9, 5), solid; type $0B at (9, 7), solid; a bottle of restorative fluid at (11, 7); food at (12, 2)."
  },
  {
   "address": 6564,
   "type": "line",
   "text": "Room 15's objects: a cabbala symbol (type $05) at (15, 12): a trap; an amulet at (11, 12); a door at (15, 8) that takes a key; type $14 at (11, 5), solid; armour at (9, 15); a key at (7, 13); type $18 at (5, 5), solid; type $18 at (7, 5), solid."
  },
  {
   "address": 6588,
   "type": "line",
   "text": "Room 16's objects: type $0A at (3, 13), solid; type $10 at (5, 13), solid; type $11 at (7, 11), solid; type $12 at (9, 9), solid; type $0B at (9, 7), solid; type $0C at (5, 5), solid; type $14 at (13, 3), solid, then the zero that ends the list."
  },
  {
   "address": 6610,
   "type": "line",
   "text": "Room 17's objects: type $12 at (6, 8), solid; a cabbala symbol (type $05) at (12, 1): a trap; type $06 at (12, 15), solid, then the zero that ends the list."
  },
  {
   "address": 6620,
   "type": "line",
   "text": "Room 18's objects: food at (5, 15); type $14 at (6, 9), solid; a scroll at (6, 4); armour at (9, 12), then the zero that ends the list."
  },
  {
   "address": 6633,
   "type": "line",
   "text": "Room 19's objects: armour at (8, 6); armour at (8, 10), then the zero that ends the list."
  },
  {
   "address": 6640,
   "type": "line",
   "text": "Room 20's objects: a cabbala symbol (type $06) at (1, 1): a trap; type $18 at (3, 11), solid; type $12 at (5, 13), solid; type $11 at (6, 8), solid; type $0B at (8, 8), which vanishes when touched, to no effect; type $0A at (10, 8), solid, then the zero that ends the list."
  },
  {
   "address": 6659,
   "type": "line",
   "text": "Room 21's objects: a mask at (8, 3); food at (1, 14); a cabbala symbol (type $06) at (15, 14): a trap, then the zero that ends the list."
  },
  {
   "address": 6669,
   "type": "line",
   "text": "Room 22's objects: type $0E at (1, 13), solid; type $0E at (1, 11), solid; type $05 at (3, 3), solid; a scroll at (15, 1); type $0A at (14, 9), solid, then the zero that ends the list."
  },
  {
   "address": 6685,
   "type": "line",
   "text": "Room 23's objects: food at (15, 12); a scroll at (7, 3); type $10 at (9, 3), solid, then the zero that ends the list."
  },
  {
   "address": 6695,
   "type": "line",
   "text": "Room 24's objects: type $18 at (6, 9), solid; a cabbala symbol (type $05) at (13, 1): a trap; a bottle of restorative fluid (type $01) at (8, 7), solid: it cannot be taken, removed when the trap goes off; type $12 at (10, 9), solid; type $0A at (15, 5), solid, then the zero that ends the list."
  },
  {
   "address": 6711,
   "type": "line",
   "text": "Room 25's objects: type $18 at (7, 3), solid; type $10 at (9, 4), solid; armour at (8, 9); type $0B at (14, 10), solid, then the zero that ends the list."
  },
  {
   "address": 6724,
   "type": "line",
   "text": "Room 26's objects: type $0B at (7, 9), solid; type $18 at (10, 7), solid; type $11 at (11, 11), solid; type $12 at (12, 14), solid; type $0C at (13, 7), solid, then the zero that ends the list."
  },
  {
   "address": 6740,
   "type": "line",
   "text": "Room 27's objects: type $12 at (1, 1), solid; type $0A at (13, 8), solid; type $10 at (15, 1), solid; type $0B at (3, 8), solid; type $0A at (6, 3), solid; type $0B at (8, 3), solid; type $0A at (10, 3), solid, then the zero that ends the list."
  },
  {
   "address": 6762,
   "type": "line",
   "text": "Room 28's objects: food at (1, 1), then the zero that ends the list."
  },
  {
   "address": 6766,
   "type": "line",
   "text": "Room 29's objects: type $0A at (6, 1), which vanishes when touched, to no effect; type $12 at (6, 4), solid; type $10 at (6, 6), solid; type $18 at (6, 9), solid, then the zero that ends the list."
  },
  {
   "address": 6779,
   "type": "line",
   "text": "Room 30's objects: a cabbala symbol (type $05) at (1, 15): a trap; food at (5, 9); type $0A at (14, 2), which vanishes when touched, to no effect; type $10 at (9, 2), solid; food at (5, 1); food at (3, 1); food at (1, 1), then the zero that ends the list."
  },
  {
   "address": 6801,
   "type": "line",
   "text": "Room 31's objects: type $10 at (3, 13), solid; food at (15, 15), then the zero that ends the list."
  },
  {
   "address": 6808,
   "type": "line",
   "text": "Room 32's objects: type $05 at (8, 12), solid; type $06 at (4, 4), solid; a cabbala symbol (type $06) at (11, 4): a trap; a bottle of restorative fluid (type $01) at (8, 8), solid: it cannot be taken; a snake brooch (type $17) at (1, 3), solid: it cannot be taken, removed when the trap goes off, then the zero that ends the list."
  },
  {
   "address": 6824,
   "type": "line",
   "text": "Room 33's objects: type $10 at (15, 15), which vanishes when touched, to no effect; a cabbala symbol (type $05) at (5, 15): a trap; type $0E at (1, 15), which vanishes when touched, to no effect; type $0E at (1, 7), solid; type $10 at (2, 4), solid; food at (4, 2), removed when the trap goes off; type $0A at (9, 7), which vanishes when touched, to no effect; type $0A at (10, 4), solid."
  },
  {
   "address": 6848,
   "type": "line",
   "text": "Room 34's objects: type $18 at (7, 11), solid; type $12 at (7, 8), solid; type $0A at (7, 5), solid; a door at (1, 8) that takes a key, then the zero that ends the list."
  },
  {
   "address": 6861,
   "type": "line",
   "text": "Room 35's objects: a scroll at (1, 1); armour at (1, 15); type $0A at (14, 2), solid, then the zero that ends the list."
  },
  {
   "address": 6871,
   "type": "line",
   "text": "Room 36's objects: food at (4, 8); type $18 at (7, 13), solid; type $18 at (7, 3), solid; type $18 at (9, 3), solid; type $18 at (11, 11), solid; type $18 at (12, 4), solid; type $18 at (15, 8), solid; type $18 at (15, 12), solid."
  },
  {
   "address": 6895,
   "type": "line",
   "text": "Room 37's objects: type $0E at (1, 13), solid; type $0E at (9, 3), solid; type $0A at (13, 5), solid, then the zero that ends the list."
  },
  {
   "address": 6905,
   "type": "line",
   "text": "Room 38's objects: type $0A at (1, 15), solid; type $11 at (3, 15), solid; food at (5, 9); type $0A at (6, 5), solid; type $11 at (11, 7), solid; type $0B at (11, 1), solid; type $0B at (13, 5), solid; type $0A at (15, 5), solid."
  },
  {
   "address": 6929,
   "type": "line",
   "text": "Room 39's objects: armour at (9, 13); an amulet at (10, 1), then the zero that ends the list."
  },
  {
   "address": 6936,
   "type": "line",
   "text": "Room 40's objects: type $10 at (3, 11), solid; type $11 at (9, 15), solid; type $10 at (15, 13), solid; type $11 at (7, 3), solid; type $0E at (9, 3), which vanishes when touched, to no effect, then the zero that ends the list."
  },
  {
   "address": 6952,
   "type": "line",
   "text": "Room 41's objects: a cabbala symbol (type $06) at (11, 11): a trap; type $10 at (15, 15), solid; type $0C at (14, 8), solid; food at (14, 1); armour at (6, 6), then the zero that ends the list."
  },
  {
   "address": 6968,
   "type": "line",
   "text": "Room 42's objects: a scroll at (1, 9); a key at (1, 7); type $0A at (5, 1), solid; type $0B at (6, 13), solid; type $0A at (9, 15), solid; type $0B at (11, 15), solid; type $0A at (13, 15), solid; type $0B at (15, 15), solid."
  },
  {
   "address": 6992,
   "type": "line",
   "text": "Room 43's objects: a cabbala symbol (type $06) at (1, 13): a trap; a door at (8, 1) that takes a key; food (type $16) at (11, 4), solid: it cannot be taken, removed when the trap goes off; food (type $19) at (13, 4), solid: it cannot be taken, removed when the trap goes off; food (type $16) at (15, 4), solid: it cannot be taken, removed when the trap goes off; type $0A at (12, 11), solid; type $0B at (14, 15), solid, then the zero that ends the list."
  },
  {
   "address": 7014,
   "type": "line",
   "text": "Room 44's objects: type $0E at (3, 12), solid; type $0E at (5, 5), solid; type $0E at (11, 5), solid; type $0E at (13, 11), solid; type $0E at (15, 11), solid; a scroll at (8, 3); a jewel-filled chest at (8, 6); a snake brooch at (8, 12)."
  },
  {
   "address": 7038,
   "type": "line",
   "text": "Room 45's objects: a scroll at (3, 8); food at (13, 8); type $0A at (8, 8), solid, then the zero that ends the list."
  },
  {
   "address": 7048,
   "type": "line",
   "text": "Room 46's objects: type $10 at (1, 12), solid; type $0C at (3, 14), solid; a door at (8, 15) that opens with special key 8; type $12 at (13, 13), solid; a cabbala symbol (type $05) at (8, 5): a trap, then the zero that ends the list."
  },
  {
   "address": 7064,
   "type": "line",
   "text": "Room 47's objects: a cabbala symbol (type $05) at (1, 1): a trap; type $10 at (2, 11), solid; type $0A at (4, 6), solid; type $0B at (5, 9), solid; type $12 at (9, 8), solid; type $18 at (9, 13), solid; type $06 at (12, 10), solid; type $0E at (13, 6), solid."
  },
  {
   "address": 7088,
   "type": "line",
   "text": "Room 48's objects: a cabbala symbol (type $05) at (1, 7): a trap; type $18 at (5, 13), solid; type $0A at (9, 11), solid; type $06 at (15, 7), solid; type $10 at (6, 3), solid; type $10 at (10, 3), solid, then the zero that ends the list."
  },
  {
   "address": 7107,
   "type": "line",
   "text": "Room 49's objects: a door at (1, 8) that takes a key; type $10 at (5, 12), solid; type $0A at (8, 10), solid; a cabbala symbol (type $05) at (8, 12): a trap; type $0B at (10, 12), solid; a bottle of restorative fluid at (11, 7); food at (11, 1); food at (15, 1)."
  },
  {
   "address": 7131,
   "type": "line",
   "text": "Room 50's objects: a mask at (1, 15); food at (4, 1); a door at (8, 15) that takes a key; a cabbala symbol (type $05) at (8, 8): a trap; food at (12, 1); type $10 at (12, 11), which vanishes when touched, to no effect; type $0A at (15, 11), which vanishes when touched, to no effect; a scroll at (12, 15)."
  },
  {
   "address": 7155,
   "type": "line",
   "text": "Room 51's objects: type $0A at (1, 7), solid; type $0B at (3, 7), solid; type $14 at (3, 9), solid, then the zero that ends the list."
  },
  {
   "address": 7165,
   "type": "line",
   "text": "Room 52's objects: food at (1, 8); a bottle of restorative fluid at (3, 8); a key at (5, 8); type $14 at (5, 4), solid, then the zero that ends the list."
  },
  {
   "address": 7178,
   "type": "line",
   "text": "Room 53's objects: a scroll at (5, 5), then the zero that ends the list."
  },
  {
   "address": 7182,
   "type": "line",
   "text": "Room 54's objects: food at (4, 1); a cabbala symbol (type $05) at (7, 5): a trap; type $10 at (9, 3), solid; type $18 at (13, 3), solid, then the zero that ends the list."
  },
  {
   "address": 7195,
   "type": "line",
   "text": "Room 55's objects: a scroll at (1, 15); food at (1, 9); a mask at (1, 3); type $14 at (7, 9), solid; type $10 at (9, 9), solid; type $12 at (9, 7), solid, then the zero that ends the list."
  },
  {
   "address": 7214,
   "type": "line",
   "text": "Room 56's objects: food at (13, 7); a cabbala symbol (type $05) at (4, 11): a trap; type $10 at (3, 9), solid, removed when the trap goes off; type $0A at (3, 7), solid, removed when the trap goes off; type $0A at (5, 7), solid, removed when the trap goes off; type $0B at (4, 5), solid, removed when the trap goes off, then the zero that ends the list."
  },
  {
   "address": 7233,
   "type": "line",
   "text": "Room 57's objects: a mask at (1, 1); type $14 at (3, 3), solid; a jewel-filled chest at (11, 9); type $0C at (6, 5), solid, then the zero that ends the list."
  },
  {
   "address": 7246,
   "type": "line",
   "text": "Room 58's objects: a mask at (5, 4); a scroll at (5, 12); an amulet at (8, 15); a key at (11, 12); food at (11, 4), then the zero that ends the list."
  },
  {
   "address": 7262,
   "type": "line",
   "text": "Room 59's objects: type $14 at (3, 7), solid; type $10 at (13, 7), solid, then the zero that ends the list."
  },
  {
   "address": 7269,
   "type": "line",
   "text": "Room 60's objects: type $0E at (11, 15), solid; type $0E at (11, 1), solid; type $0E at (2, 8), which vanishes when touched, to no effect; type $0E at (5, 10), solid; type $0E at (7, 9), solid; type $0E at (7, 7), solid; type $0E at (5, 6), solid; a jewel-filled chest at (5, 8)."
  },
  {
   "address": 7293,
   "type": "line",
   "text": "Room 61's objects: type $18 at (3, 5), solid; type $0A at (8, 4), solid; type $18 at (13, 14), solid, then the zero that ends the list."
  },
  {
   "address": 7303,
   "type": "line",
   "text": "Room 62's objects: type $14 at (7, 12), solid; food at (9, 13); type $0A at (9, 7), solid, then the zero that ends the list."
  },
  {
   "address": 7313,
   "type": "line",
   "text": "Room 63's objects: a snake brooch at (5, 7); type $0A at (10, 12), solid; type $0B at (12, 12), solid; type $0B at (14, 12), solid; type $0A at (15, 15), solid; food at (10, 7); type $11 at (13, 1), solid, then the zero that ends the list."
  },
  {
   "address": 7335,
   "type": "line",
   "text": "Room 64's objects: a key at (8, 12), then the zero that ends the list."
  },
  {
   "address": 7339,
   "type": "line",
   "text": "Room 65's objects: a mask at (7, 5); a cabbala symbol (type $05) at (3, 13): a trap; type $06 at (9, 11), solid; type $0A at (5, 15), solid; type $0A at (13, 15), solid, then the zero that ends the list."
  },
  {
   "address": 7355,
   "type": "line",
   "text": "Room 66's objects: armour at (1, 15); type $0A at (5, 6), solid, then the zero that ends the list."
  },
  {
   "address": 7362,
   "type": "line",
   "text": "Room 67's objects: a cabbala symbol (type $05) at (1, 15): a trap; type $06 at (8, 7), solid; type $06 at (15, 15), solid; a key at (10, 15), then the zero that ends the list."
  },
  {
   "address": 7375,
   "type": "line",
   "text": "Room 68's objects: an amulet at (5, 4); a mask at (3, 15); type $14 at (5, 15), solid, then the zero that ends the list."
  },
  {
   "address": 7385,
   "type": "line",
   "text": "Room 69's objects: a bottle of restorative fluid at (9, 7); a cabbala symbol (type $05) at (9, 3): a trap; type $0A at (13, 1), solid, then the zero that ends the list."
  },
  {
   "address": 7395,
   "type": "line",
   "text": "Room 70's objects: a door at (1, 8) that takes a key; an amulet at (4, 15); a jewel-filled chest at (4, 4); a cabbala symbol (type $05) at (12, 7): a trap, then the zero that ends the list."
  },
  {
   "address": 7408,
   "type": "line",
   "text": "Room 71's objects: armour at (11, 7); a scroll at (13, 13), then the zero that ends the list."
  },
  {
   "address": 7415,
   "type": "line",
   "text": "Room 72's objects: food at (4, 9); type $10 at (7, 5), solid; type $12 at (9, 7), solid; type $0A at (15, 5), solid; a cabbala symbol (type $05) at (15, 3): a trap, then the zero that ends the list."
  },
  {
   "address": 7431,
   "type": "line",
   "text": "Room 73's objects: a key at (3, 13); type $12 at (5, 5), solid; type $0A at (1, 3), solid; a cabbala symbol (type $05) at (11, 5): a trap, then the zero that ends the list."
  },
  {
   "address": 7444,
   "type": "line",
   "text": "Room 74's objects: armour at (5, 3); type $14 at (11, 12), solid, then the zero that ends the list."
  },
  {
   "address": 7451,
   "type": "line",
   "text": "Room 75's objects: type $12 at (10, 8), solid; type $18 at (10, 6), solid; type $18 at (12, 8), solid; armour at (12, 6); a mask at (11, 1), then the zero that ends the list."
  },
  {
   "address": 7467,
   "type": "line",
   "text": "Room 76's objects: armour at (1, 5); a cabbala symbol (type $05) at (8, 3): a trap; type $0A at (13, 3), solid; a mask at (15, 1), then the zero that ends the list."
  },
  {
   "address": 7480,
   "type": "line",
   "text": "Room 77's objects: a jewel-filled chest at (1, 13); type $0C at (3, 11), solid; a door at (8, 15) that opens with special key 7; type $0A at (9, 9), which vanishes when touched, to no effect; a cabbala symbol (type $05) at (11, 11): a trap; type $0A at (11, 7), solid, then the zero that ends the list."
  },
  {
   "address": 7499,
   "type": "line",
   "text": "Room 78's objects: a jewel-filled chest at (15, 15); type $0C at (8, 5), solid, then the zero that ends the list."
  },
  {
   "address": 7506,
   "type": "line",
   "text": "Room 79's objects: a cabbala symbol (type $05) at (8, 12): a trap; a jewel-filled chest at (10, 15), then the zero that ends the list."
  },
  {
   "address": 7513,
   "type": "line",
   "text": "Room 80's objects: food at (1, 1); a cabbala symbol (type $05) at (8, 7): a trap, then the zero that ends the list."
  },
  {
   "address": 7520,
   "type": "line",
   "text": "Room 81's objects: a cabbala symbol (type $05) at (3, 1): a trap, then the zero that ends the list."
  },
  {
   "address": 7524,
   "type": "line",
   "text": "Room 82's objects: food at (1, 15); type $12 at (1, 13), solid, removed when the trap goes off; type $0E at (5, 10), which vanishes when touched, to no effect; type $10 at (5, 4), solid; type $0E at (12, 4), solid; type $10 at (12, 10), which vanishes when touched, to no effect; a cabbala symbol (type $06) at (15, 1): a trap, then the zero that ends the list."
  },
  {
   "address": 7546,
   "type": "line",
   "text": "Room 83's objects: food (type $16) at (1, 1), solid: it cannot be taken; food (type $16) at (3, 1), solid: it cannot be taken; food (type $16) at (2, 3), solid: it cannot be taken; a bottle of restorative fluid (type $01) at (3, 13), solid: it cannot be taken; a cabbala symbol (type $05) at (7, 8): a trap; type $06 at (15, 1), solid, then the zero that ends the list."
  },
  {
   "address": 7565,
   "type": "line",
   "text": "Room 84's objects: food at (1, 9); a bottle of restorative fluid at (1, 7); type $10 at (7, 12), solid; type $11 at (7, 8), solid; type $10 at (7, 5), solid; type $11 at (9, 10), solid; type $10 at (9, 6), solid; type $11 at (11, 8), solid."
  },
  {
   "address": 7589,
   "type": "line",
   "text": "Room 85's objects: type $0C at (3, 4), solid; type $0C at (9, 10), solid; type $0C at (13, 10), solid; type $18 at (15, 14), solid, then the zero that ends the list."
  },
  {
   "address": 7602,
   "type": "line",
   "text": "Room 86's objects: a cabbala symbol (type $06) at (1, 15): a trap; a door at (1, 13) that takes a key; type $0A at (3, 15), solid; a door at (12, 11) that takes a key, then the zero that ends the list."
  },
  {
   "address": 7615,
   "type": "line",
   "text": "Room 87's objects: armour at (9, 11); a cabbala symbol (type $06) at (9, 9): a trap, then the zero that ends the list."
  },
  {
   "address": 7622,
   "type": "line",
   "text": "Room 88's objects: a cabbala symbol (type $05) at (3, 15): a trap; a key at (7, 8); type $12 at (5, 5), solid; type $18 at (5, 1), solid, then the zero that ends the list."
  },
  {
   "address": 7635,
   "type": "line",
   "text": "Room 89's objects: a cabbala symbol (type $05) at (9, 5): a trap; food at (1, 9); type $10 at (7, 11), solid; type $12 at (9, 11), solid; type $0E at (9, 13), solid; type $18 at (11, 9), solid, then the zero that ends the list."
  },
  {
   "address": 7654,
   "type": "line",
   "text": "Room 90's objects: type $0A at (1, 12), solid; type $0B at (11, 15), solid; a mask at (13, 15); a cabbala symbol (type $05) at (13, 7): a trap, then the zero that ends the list."
  },
  {
   "address": 7667,
   "type": "line",
   "text": "Room 91's objects: food at (1, 15); type $14 at (5, 15), solid; armour at (3, 1); a door at (8, 1) that takes a key, then the zero that ends the list."
  },
  {
   "address": 7680,
   "type": "line",
   "text": "Room 92's objects: a cabbala symbol (type $06) at (1, 12): a trap; type $0A at (11, 7), solid; special key 7 at (9, 7), then the zero that ends the list."
  },
  {
   "address": 7690,
   "type": "line",
   "text": "Room 93's objects: type $0A at (3, 5), solid; type $18 at (3, 7), solid; type $18 at (3, 9), solid; type $10 at (3, 11), solid; type $18 at (11, 7), solid; armour at (13, 1), then the zero that ends the list."
  },
  {
   "address": 7709,
   "type": "line",
   "text": "Room 94's objects: a door at (15, 8) that takes a key; type $18 at (3, 8), solid; type $0B at (1, 13), solid; type $0B at (1, 15), solid; type $0A at (3, 15), solid; type $18 at (5, 15), solid, then the zero that ends the list."
  },
  {
   "address": 7728,
   "type": "line",
   "text": "Room 95's objects: food at (1, 7); type $18 at (3, 11), solid; type $18 at (5, 13), solid; type $0A at (3, 3), solid; type $0B at (7, 7), solid; type $18 at (9, 11), solid; type $0A at (11, 7), solid; type $18 at (13, 3), solid."
  },
  {
   "address": 7752,
   "type": "line",
   "text": "Room 96's objects: type $0A at (3, 11), solid; type $18 at (5, 5), solid; type $10 at (7, 1), solid; type $0B at (9, 7), solid; type $18 at (11, 11), solid; type $18 at (14, 12), solid, then the zero that ends the list."
  },
  {
   "address": 7771,
   "type": "line",
   "text": "Room 97's objects: food (type $19) at (1, 11), solid: it cannot be taken, removed when the trap goes off; an amulet at (1, 3); food at (6, 5) that is a cabbala trap; food at (8, 13) that is a cabbala trap; food at (13, 10) that is a cabbala trap; food at (15, 1) that is a cabbala trap, then the zero that ends the list."
  },
  {
   "address": 7790,
   "type": "line",
   "text": "Room 98's objects: type $18 at (5, 15), solid; type $18 at (5, 1), solid; a scroll at (10, 15); food at (10, 1), then the zero that ends the list."
  },
  {
   "address": 7803,
   "type": "line",
   "text": "Room 99's objects: type $0C at (7, 5), solid; type $0C at (6, 10), solid; type $0C at (11, 9), solid; type $15 at (8, 8), solid; type $14 at (3, 9), solid; type $12 at (5, 15), solid, then the zero that ends the list."
  },
  {
   "address": 7822,
   "type": "line",
   "text": "One pointer for each room to its list of generators (from $1F56), read by draw_generators."
  },
  {
   "address": 7823,
   "type": "line",
   "text": "gen_ptrs' high bytes."
  },
  {
   "address": 8022,
   "type": "line",
   "text": "Room 0's monster generator: at (15, 1), look 1, making kind 1, then the zero that ends the list."
  },
  {
   "address": 8026,
   "type": "line",
   "text": "Room 1's monster generators: at (1, 1), look 2, making kind 6; at (15, 1), look 2, making kind 6, then the zero that ends the list."
  },
  {
   "address": 8033,
   "type": "line",
   "text": "Room 2's monster generators: at (9, 1), look 1, making kind 2; at (9, 15), look 2, making kind 1, then the zero that ends the list."
  },
  {
   "address": 8040,
   "type": "line",
   "text": "Room 3's monster generators: at (15, 1), look 1, making kind 1; at (15, 15), look 2, making kind 1; at (1, 15), look 2, making kind 4; at (9, 7), look 1, making kind 4; at (6, 5), look 1, making kind 4."
  },
  {
   "address": 8055,
   "type": "line",
   "text": "Room 4's monster generators: at (15, 1), look 2, making kind 2; at (1, 15), look 1, making kind 1, then the zero that ends the list."
  },
  {
   "address": 8062,
   "type": "line",
   "text": "Room 5's monster generators: at (15, 15), look 2, making kind 1; at (15, 13), look 2, making kind 1; at (1, 1), look 2, making kind 6, then the zero that ends the list."
  },
  {
   "address": 8072,
   "type": "line",
   "text": "Room 6's monster generators: at (13, 1), look 1, making kind 6; at (15, 13), look 2, making kind 1; at (3, 13), look 2, making kind 6; at (5, 1), look 1, making kind 6, then the zero that ends the list."
  },
  {
   "address": 8085,
   "type": "line",
   "text": "Room 7's monster generators: at (1, 1), look 1, making kind 2; at (14, 12), look 2, making kind 6, then the zero that ends the list."
  },
  {
   "address": 8092,
   "type": "line",
   "text": "Room 8's monster generators: at (2, 1), look 2, making kind 4; at (5, 7), look 1, making kind 6; at (5, 9), look 1, making kind 6; at (1, 15), look 2, making kind 4; at (11, 5), look 1, making kind 1."
  },
  {
   "address": 8107,
   "type": "line",
   "text": "Room 9's monster generators: at (3, 3), look 2, making kind 5; at (1, 7), look 2, making kind 6; at (9, 4), look 1, making kind 1; at (13, 2), look 1, making kind 3, then the zero that ends the list."
  },
  {
   "address": 8120,
   "type": "line",
   "text": "Room 10's monster generators: at (7, 1), look 1, making kind 3; at (12, 1), look 1, making kind 3; at (12, 15), look 1, making kind 3; at (7, 15), look 1, making kind 3; at (3, 8), look 2, making kind 4."
  },
  {
   "address": 8135,
   "type": "line",
   "text": "Room 11's monster generators: at (9, 3), look 1, making kind 4; at (9, 8), look 2, making kind 4; at (9, 13), look 1, making kind 4, then the zero that ends the list."
  },
  {
   "address": 8145,
   "type": "line",
   "text": "Room 12's monster generators: at (15, 15), look 1, making kind 2; at (10, 6), look 2, making kind 1; at (15, 3), look 2, making kind 5, then the zero that ends the list."
  },
  {
   "address": 8155,
   "type": "line",
   "text": "Room 13's monster generators: at (3, 15), look 2, making kind 4; at (14, 15), look 2, making kind 4; at (15, 3), look 1, making kind 1; at (1, 7), look 2, making kind 1, then the zero that ends the list."
  },
  {
   "address": 8168,
   "type": "line",
   "text": "Room 14's monster generators: at (12, 4), look 2, making kind 3; at (11, 13), look 1, making kind 1; at (9, 12), look 1, making kind 6; at (3, 3), look 2, making kind 1, then the zero that ends the list."
  },
  {
   "address": 8181,
   "type": "line",
   "text": "Room 15's monster generators: at (13, 12), look 1, making kind 5; at (1, 15), look 2, making kind 1; at (5, 7), look 1, making kind 4, then the zero that ends the list."
  },
  {
   "address": 8191,
   "type": "line",
   "text": "Room 16's monster generators: at (15, 15), look 1, making kind 1; at (1, 15), look 2, making kind 6; at (5, 7), look 1, making kind 4; at (13, 13), look 2, making kind 5, then the zero that ends the list."
  },
  {
   "address": 8204,
   "type": "line",
   "text": "Room 17's monster generators: at (14, 1), look 2, making kind 1; at (14, 15), look 2, making kind 1; at (6, 6), look 1, making kind 2; at (6, 10), look 1, making kind 2; at (8, 8), look 2, making kind 6."
  },
  {
   "address": 8219,
   "type": "line",
   "text": "Room 18's monster generators: at (8, 1), look 1, making kind 5; at (1, 15), look 2, making kind 5; at (3, 15), look 2, making kind 1; at (15, 15), look 1, making kind 2; at (4, 4), look 1, making kind 4."
  },
  {
   "address": 8234,
   "type": "line",
   "text": "Room 19's monster generator: at (8, 8), look 2, making kind 4, then the zero that ends the list."
  },
  {
   "address": 8238,
   "type": "line",
   "text": "Room 20's monster generators: at (13, 1), look 1, making kind 1; at (15, 1), look 1, making kind 1; at (6, 1), look 2, making kind 2; at (3, 13), look 1, making kind 6, then the zero that ends the list."
  },
  {
   "address": 8251,
   "type": "line",
   "text": "Room 21's monster generators: at (15, 1), look 2, making kind 6; at (1, 1), look 1, making kind 6; at (8, 12), look 1, making kind 4, then the zero that ends the list."
  },
  {
   "address": 8261,
   "type": "line",
   "text": "Room 22's monster generators: at (13, 1), look 2, making kind 6; at (15, 4), look 1, making kind 5; at (9, 11), look 1, making kind 1; at (1, 3), look 2, making kind 2, then the zero that ends the list."
  },
  {
   "address": 8274,
   "type": "line",
   "text": "Room 23's monster generators: at (1, 1), look 2, making kind 6; at (15, 1), look 2, making kind 1; at (15, 7), look 2, making kind 1; at (1, 8), look 1, making kind 2; at (1, 12), look 2, making kind 2."
  },
  {
   "address": 8289,
   "type": "line",
   "text": "Room 24's monster generators: at (15, 15), look 2, making kind 4; at (1, 15), look 2, making kind 4; at (8, 11), look 1, making kind 5; at (4, 4), look 2, making kind 1, then the zero that ends the list."
  },
  {
   "address": 8302,
   "type": "line",
   "text": "Room 25's monster generators: at (1, 1), look 1, making kind 1; at (15, 1), look 1, making kind 5; at (15, 5), look 2, making kind 6; at (4, 1), look 1, making kind 1, then the zero that ends the list."
  },
  {
   "address": 8315,
   "type": "line",
   "text": "Room 26's monster generators: at (8, 1), look 1, making kind 3; at (1, 3), look 2, making kind 6; at (1, 15), look 2, making kind 1; at (15, 14), look 2, making kind 1; at (13, 3), look 1, making kind 1."
  },
  {
   "address": 8330,
   "type": "line",
   "text": "Room 27's monster generators: at (2, 15), look 1, making kind 1; at (14, 15), look 2, making kind 1; at (8, 6), look 1, making kind 6, then the zero that ends the list."
  },
  {
   "address": 8340,
   "type": "line",
   "text": "Room 28's monster generators: at (3, 15), look 2, making kind 1; at (9, 15), look 1, making kind 1; at (6, 7), look 2, making kind 1; at (9, 7), look 2, making kind 1; at (11, 4), look 1, making kind 1."
  },
  {
   "address": 8355,
   "type": "line",
   "text": "Room 29's monster generators: at (13, 3), look 1, making kind 6; at (1, 2), look 2, making kind 1; at (4, 5), look 1, making kind 1; at (1, 15), look 2, making kind 3, then the zero that ends the list."
  },
  {
   "address": 8368,
   "type": "line",
   "text": "Room 30's monster generators: at (3, 3), look 2, making kind 6; at (15, 15), look 1, making kind 1; at (5, 15), look 2, making kind 3; at (9, 7), look 2, making kind 2, then the zero that ends the list."
  },
  {
   "address": 8381,
   "type": "line",
   "text": "Room 31's monster generators: at (5, 11), look 1, making kind 2; at (7, 9), look 2, making kind 3; at (9, 7), look 1, making kind 6; at (11, 5), look 2, making kind 5; at (13, 3), look 1, making kind 1."
  },
  {
   "address": 8396,
   "type": "line",
   "text": "Room 32's monster generators: at (14, 13), look 1, making kind 5; at (2, 13), look 1, making kind 5; at (8, 1), look 2, making kind 3, then the zero that ends the list."
  },
  {
   "address": 8406,
   "type": "line",
   "text": "Room 33's monster generators: at (15, 1), look 1, making kind 6; at (8, 15), look 2, making kind 3; at (13, 15), look 2, making kind 3; at (3, 13), look 1, making kind 3, then the zero that ends the list."
  },
  {
   "address": 8419,
   "type": "line",
   "text": "Room 34's monster generators: at (15, 15), look 2, making kind 1; at (15, 1), look 2, making kind 1; at (3, 3), look 2, making kind 3; at (3, 8), look 1, making kind 3; at (3, 13), look 1, making kind 3."
  },
  {
   "address": 8434,
   "type": "line",
   "text": "Room 35's monster generators: at (15, 15), look 1, making kind 1; at (3, 14), look 1, making kind 1; at (3, 2), look 2, making kind 1; at (11, 9), look 1, making kind 6; at (11, 6), look 2, making kind 3."
  },
  {
   "address": 8449,
   "type": "line",
   "text": "Room 36's monster generators: at (1, 15), look 2, making kind 4; at (4, 6), look 1, making kind 4; at (7, 5), look 1, making kind 1; at (9, 5), look 1, making kind 1, then the zero that ends the list."
  },
  {
   "address": 8462,
   "type": "line",
   "text": "Room 37's monster generators: at (11, 1), look 2, making kind 6; at (15, 3), look 1, making kind 6; at (14, 15), look 2, making kind 6; at (11, 11), look 2, making kind 1; at (4, 6), look 2, making kind 1."
  },
  {
   "address": 8477,
   "type": "line",
   "text": "Room 38's monster generators: at (12, 13), look 2, making kind 3; at (4, 1), look 1, making kind 6; at (4, 4), look 2, making kind 1; at (15, 1), look 2, making kind 6, then the zero that ends the list."
  },
  {
   "address": 8490,
   "type": "line",
   "text": "Room 39's monster generators: at (15, 1), look 1, making kind 4; at (5, 3), look 2, making kind 2; at (4, 13), look 1, making kind 3; at (7, 9), look 2, making kind 3; at (8, 4), look 2, making kind 6."
  },
  {
   "address": 8505,
   "type": "line",
   "text": "Room 40's monster generators: at (3, 1), look 2, making kind 5; at (13, 1), look 2, making kind 5; at (7, 7), look 1, making kind 3; at (7, 15), look 1, making kind 6, then the zero that ends the list."
  },
  {
   "address": 8518,
   "type": "line",
   "text": "Room 41's monster generators: at (15, 13), look 2, making kind 3; at (14, 4), look 1, making kind 4; at (1, 5), look 2, making kind 2; at (1, 12), look 1, making kind 2; at (8, 6), look 2, making kind 6."
  },
  {
   "address": 8533,
   "type": "line",
   "text": "Room 42's monster generators: at (1, 5), look 1, making kind 2; at (1, 11), look 2, making kind 6; at (5, 7), look 1, making kind 1; at (5, 9), look 1, making kind 6, then the zero that ends the list."
  },
  {
   "address": 8546,
   "type": "line",
   "text": "Room 43's monster generators: at (11, 1), look 1, making kind 4; at (3, 1), look 1, making kind 5; at (9, 7), look 2, making kind 3; at (7, 4), look 2, making kind 2, then the zero that ends the list."
  },
  {
   "address": 8559,
   "type": "line",
   "text": "Room 44's monster generators: at (5, 1), look 2, making kind 4; at (11, 1), look 1, making kind 4, then the zero that ends the list."
  },
  {
   "address": 8566,
   "type": "line",
   "text": "Room 45's monster generators: at (6, 6), look 2, making kind 1; at (10, 6), look 1, making kind 1; at (10, 10), look 2, making kind 1; at (6, 10), look 1, making kind 1, then the zero that ends the list."
  },
  {
   "address": 8579,
   "type": "line",
   "text": "Room 46's monster generators: at (8, 1), look 1, making kind 5; at (12, 10), look 2, making kind 6; at (8, 10), look 1, making kind 3; at (4, 10), look 2, making kind 6, then the zero that ends the list."
  },
  {
   "address": 8592,
   "type": "line",
   "text": "Room 47's monster generators: at (3, 1), look 1, making kind 1; at (1, 15), look 2, making kind 2; at (14, 15), look 1, making kind 3; at (10, 10), look 2, making kind 6, then the zero that ends the list."
  },
  {
   "address": 8605,
   "type": "line",
   "text": "Room 48's monster generators: at (13, 13), look 1, making kind 4; at (1, 10), look 2, making kind 1; at (2, 5), look 2, making kind 3; at (14, 5), look 2, making kind 3; at (8, 8), look 1, making kind 3."
  },
  {
   "address": 8620,
   "type": "line",
   "text": "Room 49's monster generators: at (1, 1), look 2, making kind 5; at (14, 15), look 2, making kind 1; at (8, 1), look 2, making kind 3; at (13, 1), look 2, making kind 6, then the zero that ends the list."
  },
  {
   "address": 8633,
   "type": "line",
   "text": "Room 50's monster generators: at (15, 1), look 2, making kind 5; at (1, 1), look 1, making kind 5; at (1, 12), look 2, making kind 4; at (15, 15), look 1, making kind 3, then the zero that ends the list."
  },
  {
   "address": 8646,
   "type": "line",
   "text": "Room 51's monster generators: at (8, 4), look 1, making kind 4; at (9, 9), look 1, making kind 2; at (13, 9), look 1, making kind 3; at (1, 9), look 2, making kind 5, then the zero that ends the list."
  },
  {
   "address": 8659,
   "type": "line",
   "text": "Room 52's monster generators: at (3, 10), look 1, making kind 4; at (15, 11), look 2, making kind 5; at (10, 6), look 2, making kind 4; at (3, 5), look 2, making kind 3, then the zero that ends the list."
  },
  {
   "address": 8672,
   "type": "line",
   "text": "Room 53's monster generators: at (1, 3), look 2, making kind 2; at (6, 11), look 1, making kind 6; at (11, 11), look 2, making kind 4; at (15, 15), look 1, making kind 3, then the zero that ends the list."
  },
  {
   "address": 8685,
   "type": "line",
   "text": "Room 54's monster generators: at (1, 1), look 1, making kind 3; at (1, 15), look 2, making kind 4; at (4, 8), look 2, making kind 2; at (10, 11), look 2, making kind 3, then the zero that ends the list."
  },
  {
   "address": 8698,
   "type": "line",
   "text": "Room 55's monster generators: at (3, 3), look 1, making kind 4; at (3, 7), look 1, making kind 5; at (3, 11), look 2, making kind 2; at (3, 15), look 2, making kind 3; at (15, 15), look 1, making kind 6."
  },
  {
   "address": 8713,
   "type": "line",
   "text": "Room 56's monster generators: at (15, 11), look 1, making kind 6; at (15, 3), look 2, making kind 6; at (8, 4), look 1, making kind 3; at (8, 7), look 2, making kind 4; at (8, 10), look 1, making kind 2."
  },
  {
   "address": 8728,
   "type": "line",
   "text": "Room 57's monster generators: at (1, 3), look 2, making kind 3; at (1, 15), look 1, making kind 4; at (15, 11), look 2, making kind 6; at (15, 1), look 2, making kind 3, then the zero that ends the list."
  },
  {
   "address": 8741,
   "type": "line",
   "text": "Room 58's monster generators: at (3, 4), look 1, making kind 3; at (3, 12), look 2, making kind 3; at (13, 12), look 1, making kind 4; at (13, 4), look 2, making kind 4; at (8, 13), look 2, making kind 5."
  },
  {
   "address": 8756,
   "type": "line",
   "text": "Room 59's monster generators: at (1, 1), look 2, making kind 4; at (1, 15), look 1, making kind 4; at (15, 15), look 2, making kind 5; at (15, 1), look 1, making kind 5; at (8, 8), look 2, making kind 3."
  },
  {
   "address": 8771,
   "type": "line",
   "text": "Room 60's monster generators: at (15, 1), look 1, making kind 3; at (15, 15), look 1, making kind 3; at (2, 12), look 2, making kind 2; at (2, 4), look 2, making kind 2, then the zero that ends the list."
  },
  {
   "address": 8784,
   "type": "line",
   "text": "Room 61's monster generators: at (15, 1), look 2, making kind 5; at (1, 15), look 1, making kind 3; at (8, 6), look 2, making kind 2; at (8, 8), look 1, making kind 4; at (8, 10), look 1, making kind 6."
  },
  {
   "address": 8799,
   "type": "line",
   "text": "Room 62's monster generators: at (1, 1), look 2, making kind 1; at (1, 15), look 1, making kind 4; at (13, 15), look 2, making kind 5; at (11, 7), look 1, making kind 3, then the zero that ends the list."
  },
  {
   "address": 8812,
   "type": "line",
   "text": "Room 63's monster generators: at (15, 1), look 2, making kind 6; at (13, 15), look 2, making kind 3; at (7, 13), look 1, making kind 4; at (5, 9), look 2, making kind 4, then the zero that ends the list."
  },
  {
   "address": 8825,
   "type": "line",
   "text": "Room 64's monster generators: at (15, 13), look 1, making kind 6; at (6, 5), look 2, making kind 4; at (10, 5), look 2, making kind 4; at (3, 4), look 1, making kind 2; at (13, 4), look 1, making kind 2."
  },
  {
   "address": 8840,
   "type": "line",
   "text": "Room 65's monster generators: at (1, 2), look 2, making kind 2; at (13, 7), look 1, making kind 1; at (13, 13), look 1, making kind 4; at (7, 13), look 1, making kind 2, then the zero that ends the list."
  },
  {
   "address": 8853,
   "type": "line",
   "text": "Room 66's monster generators: at (15, 1), look 2, making kind 2; at (9, 4), look 2, making kind 4; at (13, 4), look 1, making kind 4; at (10, 9), look 1, making kind 2, then the zero that ends the list."
  },
  {
   "address": 8866,
   "type": "line",
   "text": "Room 67's monster generators: at (6, 15), look 2, making kind 4; at (6, 7), look 1, making kind 4; at (8, 5), look 1, making kind 4; at (10, 7), look 1, making kind 4; at (8, 9), look 1, making kind 4."
  },
  {
   "address": 8881,
   "type": "line",
   "text": "Room 68's monster generators: at (5, 13), look 1, making kind 6; at (6, 10), look 2, making kind 3; at (5, 7), look 2, making kind 5; at (7, 4), look 1, making kind 4; at (14, 3), look 1, making kind 5."
  },
  {
   "address": 8896,
   "type": "line",
   "text": "Room 69's monster generators: at (1, 1), look 1, making kind 4; at (15, 3), look 2, making kind 4; at (14, 10), look 1, making kind 4; at (11, 11), look 2, making kind 2; at (3, 12), look 1, making kind 2."
  },
  {
   "address": 8911,
   "type": "line",
   "text": "Room 70's monster generators: at (1, 6), look 2, making kind 4; at (4, 6), look 1, making kind 2; at (4, 13), look 1, making kind 5; at (10, 7), look 1, making kind 4; at (11, 4), look 2, making kind 6."
  },
  {
   "address": 8926,
   "type": "line",
   "text": "Room 71's monster generators: at (10, 13), look 2, making kind 4; at (11, 5), look 1, making kind 2; at (15, 5), look 1, making kind 6; at (7, 4), look 1, making kind 5, then the zero that ends the list."
  },
  {
   "address": 8939,
   "type": "line",
   "text": "Room 72's monster generators: at (12, 15), look 1, making kind 1; at (9, 5), look 2, making kind 3; at (1, 1), look 2, making kind 1, then the zero that ends the list."
  },
  {
   "address": 8949,
   "type": "line",
   "text": "Room 73's monster generators: at (15, 13), look 1, making kind 3; at (1, 15), look 2, making kind 4; at (1, 1), look 1, making kind 4, then the zero that ends the list."
  },
  {
   "address": 8959,
   "type": "line",
   "text": "Room 74's monster generators: at (1, 3), look 2, making kind 3; at (7, 10), look 1, making kind 6; at (7, 7), look 2, making kind 5; at (12, 6), look 2, making kind 2, then the zero that ends the list."
  },
  {
   "address": 8972,
   "type": "line",
   "text": "Room 75's monster generators: at (2, 13), look 1, making kind 3; at (15, 15), look 2, making kind 2; at (9, 1), look 1, making kind 2; at (13, 1), look 1, making kind 2; at (12, 4), look 1, making kind 4."
  },
  {
   "address": 8987,
   "type": "line",
   "text": "Room 76's monster generators: at (1, 1), look 1, making kind 4; at (13, 1), look 2, making kind 2; at (15, 3), look 1, making kind 3; at (15, 12), look 1, making kind 4, then the zero that ends the list."
  },
  {
   "address": 9000,
   "type": "line",
   "text": "Room 77's monster generators: at (15, 1), look 1, making kind 2; at (5, 15), look 2, making kind 4; at (15, 14), look 1, making kind 4; at (5, 5), look 2, making kind 2, then the zero that ends the list."
  },
  {
   "address": 9013,
   "type": "line",
   "text": "Room 78's monster generators: at (10, 11), look 2, making kind 4; at (6, 11), look 2, making kind 4; at (4, 1), look 1, making kind 2; at (12, 1), look 1, making kind 2, then the zero that ends the list."
  },
  {
   "address": 9026,
   "type": "line",
   "text": "Room 79's monster generators: at (1, 1), look 2, making kind 6; at (15, 1), look 2, making kind 6; at (8, 5), look 1, making kind 1, then the zero that ends the list."
  },
  {
   "address": 9036,
   "type": "line",
   "text": "Room 80's monster generators: at (3, 15), look 2, making kind 2; at (8, 15), look 1, making kind 4; at (13, 15), look 1, making kind 2; at (7, 1), look 2, making kind 4; at (13, 1), look 1, making kind 4."
  },
  {
   "address": 9051,
   "type": "line",
   "text": "Room 81's monster generators: at (1, 15), look 1, making kind 3; at (1, 1), look 1, making kind 2; at (15, 1), look 2, making kind 3; at (15, 15), look 2, making kind 3; at (8, 8), look 1, making kind 4."
  },
  {
   "address": 9066,
   "type": "line",
   "text": "Room 82's monster generators: at (1, 1), look 2, making kind 3; at (1, 6), look 1, making kind 3; at (8, 6), look 1, making kind 3; at (8, 1), look 1, making kind 3; at (8, 11), look 1, making kind 3."
  },
  {
   "address": 9081,
   "type": "line",
   "text": "Room 83's monster generators: at (1, 13), look 1, making kind 3; at (1, 7), look 1, making kind 4; at (15, 11), look 2, making kind 3; at (15, 5), look 2, making kind 3, then the zero that ends the list."
  },
  {
   "address": 9094,
   "type": "line",
   "text": "Room 84's monster generators: at (1, 11), look 2, making kind 6; at (1, 5), look 2, making kind 6; at (5, 12), look 1, making kind 1; at (5, 8), look 1, making kind 4; at (5, 5), look 1, making kind 1."
  },
  {
   "address": 9109,
   "type": "line",
   "text": "Room 85's monster generators: at (1, 4), look 1, making kind 3; at (4, 12), look 2, making kind 3; at (7, 6), look 2, making kind 3; at (11, 10), look 1, making kind 3; at (13, 4), look 1, making kind 3."
  },
  {
   "address": 9124,
   "type": "line",
   "text": "Room 86's monster generators: at (1, 1), look 2, making kind 5; at (4, 7), look 1, making kind 4; at (4, 9), look 2, making kind 4; at (10, 9), look 1, making kind 1; at (15, 15), look 1, making kind 6."
  },
  {
   "address": 9139,
   "type": "line",
   "text": "Room 87's monster generators: at (1, 15), look 2, making kind 6; at (1, 4), look 2, making kind 5; at (9, 13), look 1, making kind 3; at (15, 13), look 2, making kind 3, then the zero that ends the list."
  },
  {
   "address": 9152,
   "type": "line",
   "text": "Room 88's monster generators: at (1, 13), look 2, making kind 3; at (3, 13), look 1, making kind 3; at (3, 5), look 1, making kind 3; at (3, 1), look 1, making kind 5; at (15, 15), look 1, making kind 4."
  },
  {
   "address": 9167,
   "type": "line",
   "text": "Room 89's monster generators: at (1, 11), look 2, making kind 5; at (1, 1), look 1, making kind 4; at (3, 9), look 2, making kind 5; at (15, 15), look 1, making kind 6; at (9, 7), look 1, making kind 3."
  },
  {
   "address": 9182,
   "type": "line",
   "text": "Room 90's monster generators: at (3, 15), look 1, making kind 4; at (15, 1), look 1, making kind 1; at (15, 13), look 1, making kind 3, then the zero that ends the list."
  },
  {
   "address": 9192,
   "type": "line",
   "text": "Room 91's monster generators: at (1, 13), look 2, making kind 2; at (14, 15), look 1, making kind 4; at (12, 12), look 2, making kind 6, then the zero that ends the list."
  },
  {
   "address": 9202,
   "type": "line",
   "text": "Room 92's monster generators: at (5, 11), look 1, making kind 4; at (5, 4), look 2, making kind 4; at (4, 1), look 1, making kind 4; at (7, 7), look 2, making kind 4; at (11, 13), look 1, making kind 4."
  },
  {
   "address": 9217,
   "type": "line",
   "text": "Room 93's monster generators: at (3, 3), look 2, making kind 2; at (5, 9), look 1, making kind 5; at (15, 15), look 1, making kind 4, then the zero that ends the list."
  },
  {
   "address": 9227,
   "type": "line",
   "text": "Room 94's monster generators: at (15, 14), look 2, making kind 5; at (15, 10), look 2, making kind 5; at (15, 5), look 2, making kind 5; at (15, 1), look 2, making kind 5, then the zero that ends the list."
  },
  {
   "address": 9240,
   "type": "line",
   "text": "Room 95's monster generators: at (3, 13), look 2, making kind 2; at (5, 5), look 2, making kind 5; at (15, 11), look 1, making kind 5, then the zero that ends the list."
  },
  {
   "address": 9250,
   "type": "line",
   "text": "Room 96's monster generators: at (1, 13), look 2, making kind 2; at (1, 3), look 2, making kind 2; at (11, 15), look 2, making kind 5; at (15, 2), look 1, making kind 5, then the zero that ends the list."
  },
  {
   "address": 9263,
   "type": "line",
   "text": "Room 97's monster generators: at (5, 15), look 1, making kind 5; at (11, 15), look 2, making kind 2; at (11, 1), look 1, making kind 2; at (5, 1), look 2, making kind 2, then the zero that ends the list."
  },
  {
   "address": 9276,
   "type": "line",
   "text": "Room 98's monster generators: at (15, 15), look 1, making kind 1; at (1, 13), look 1, making kind 5; at (1, 8), look 2, making kind 5; at (1, 3), look 2, making kind 5; at (1, 15), look 1, making kind 1."
  },
  {
   "address": 9291,
   "type": "line",
   "text": "Room 99's monster generator: at (1, 1), look 1, making kind 1, then the zero that ends the list."
  },
  {
   "address": 9295,
   "type": "line",
   "text": "One pointer for each room to its list of floor decorations (from $2517), read by draw_floor."
  },
  {
   "address": 9296,
   "type": "line",
   "text": "floor_ptrs' high bytes."
  },
  {
   "address": 9495,
   "type": "line",
   "text": "Room 0's floor decorations: 3 of piece 0 right from (1, 11); 1 of piece 1 right from (7, 11); 2 of piece 0 right from (9, 11); 2 of piece 0 down from (11, 13), then the zero that ends the list."
  },
  {
   "address": 9508,
   "type": "line",
   "text": "Room 1's floor decorations: 2 of piece 2 right from (9, 7); 3 of piece 2 down from (11, 1); 1 of piece 3 right from (9, 5), then the zero that ends the list."
  },
  {
   "address": 9518,
   "type": "line",
   "text": "Room 2's floor decorations: 3 of piece 0 down from (5, 1); 4 of piece 0 right from (7, 5); 2 of piece 0 down from (13, 1), then the zero that ends the list."
  },
  {
   "address": 9528,
   "type": "line",
   "text": "Room 3's floor decorations: 1 of piece 3 right from (9, 5); 4 of piece 2 down from (9, 7); 1 of piece 2 right from (11, 13); 3 of piece 2 down from (13, 9); 2 of piece 2 right from (13, 7)."
  },
  {
   "address": 9543,
   "type": "line",
   "text": "Room 4's floor decorations: 1 of piece 3 right from (9, 5); 4 of piece 2 down from (9, 7); 2 of piece 2 right from (11, 13); 2 of piece 2 down from (13, 9); 2 of piece 2 right from (13, 7)."
  },
  {
   "address": 9558,
   "type": "line",
   "text": "Room 5's floor decorations: 3 of piece 0 right from (1, 5); 3 of piece 0 down from (7, 5); 5 of piece 0 right from (7, 11), then the zero that ends the list."
  },
  {
   "address": 9568,
   "type": "line",
   "text": "Room 6's floor decorations: 4 of piece 2 down from (11, 1); 3 of piece 2 right from (7, 9); 2 of piece 2 down from (7, 5); 1 of piece 2 right from (9, 5); 1 of piece 3 right from (9, 7)."
  },
  {
   "address": 9583,
   "type": "line",
   "text": "Room 7's floor decorations: 6 of piece 0 right from (1, 5); 5 of piece 0 down from (11, 7); 2 of piece 0 right from (13, 11); 2 of piece 0 right from (13, 14), then the zero that ends the list."
  },
  {
   "address": 9596,
   "type": "line",
   "text": "Room 8's floor decorations: 5 of piece 2 right from (1, 14); 3 of piece 2 right from (1, 11); 4 of piece 2 down from (7, 5); 6 of piece 2 down from (11, 5); 1 of piece 3 right from (9, 5)."
  },
  {
   "address": 9611,
   "type": "line",
   "text": "Room 9's floor decorations: 2 of piece 0 down from (11, 1); 3 of piece 0 right from (11, 5), then the zero that ends the list."
  },
  {
   "address": 9618,
   "type": "line",
   "text": "Room 10's floor decorations: 5 of piece 2 right from (1, 11); 1 of piece 3 right from (11, 11); 2 of piece 2 right from (13, 11); 2 of piece 2 down from (11, 13), then the zero that ends the list."
  },
  {
   "address": 9631,
   "type": "line",
   "text": "Room 11's floor decorations: 2 of piece 0 right from (1, 13); 1 of piece 0 right from (3, 15), then the zero that ends the list."
  },
  {
   "address": 9638,
   "type": "line",
   "text": "Room 12's floor decorations: 3 of piece 2 right from (11, 13); 1 of piece 2 right from (11, 15), then the zero that ends the list."
  },
  {
   "address": 9645,
   "type": "line",
   "text": "Room 13's floor decorations: 1 of piece 0 right from (3, 1); 1 of piece 1 right from (3, 3); 2 of piece 0 down from (3, 5); 2 of piece 0 down from (5, 5), then the zero that ends the list."
  },
  {
   "address": 9658,
   "type": "line",
   "text": "Room 14's floor decorations: 5 of piece 2 right from (1, 13); 2 of piece 2 down from (9, 9); 3 of piece 2 right from (11, 9), then the zero that ends the list."
  },
  {
   "address": 9668,
   "type": "line",
   "text": "Room 15's floor decorations: 5 of piece 0 down from (15, 5); 2 of piece 0 down from (13, 13); 1 of piece 1 right from (15, 15), then the zero that ends the list."
  },
  {
   "address": 9678,
   "type": "line",
   "text": "Room 16's floor decorations: 3 of piece 2 right from (1, 11); 2 of piece 2 down from (5, 13); 3 of piece 2 right from (11, 1); 1 of piece 3 right from (15, 3); 1 of piece 2 right from (15, 5)."
  },
  {
   "address": 9693,
   "type": "line",
   "text": "Room 17's floor decorations: 6 of piece 0 right from (1, 3); 1 of piece 1 right from (5, 1); 1 of piece 0 right from (11, 1), then the zero that ends the list."
  },
  {
   "address": 9703,
   "type": "line",
   "text": "Room 18's floor decorations: 2 of piece 3 right from (1, 1), then the zero that ends the list."
  },
  {
   "address": 9707,
   "type": "line",
   "text": "Room 19's floor decorations: 2 of piece 0 right from (13, 1); 1 of piece 0 right from (15, 3), then the zero that ends the list."
  },
  {
   "address": 9714,
   "type": "line",
   "text": "Room 20's floor decorations: 8 of piece 2 down from (5, 1); 1 of piece 3 right from (7, 15); 1 of piece 2 right from (9, 15); 1 of piece 3 right from (7, 1); 1 of piece 3 right from (9, 1)."
  },
  {
   "address": 9729,
   "type": "line",
   "text": "Room 21's floor decorations: 8 of piece 0 right from (1, 1); 7 of piece 0 down from (15, 3); 7 of piece 0 down from (13, 3); 2 of piece 0 right from (1, 3); 1 of piece 1 right from (5, 3)."
  },
  {
   "address": 9744,
   "type": "line",
   "text": "Room 22's floor decorations: 4 of piece 2 down from (11, 1); 4 of piece 2 right from (5, 9); 2 of piece 2 right from (3, 11); 2 of piece 2 down from (3, 13), then the zero that ends the list."
  },
  {
   "address": 9757,
   "type": "line",
   "text": "Room 23's floor decorations: 3 of piece 0 right from (1, 1); 5 of piece 0 down from (5, 3); 5 of piece 0 right from (7, 3); 5 of piece 0 right from (7, 8); 3 of piece 0 right from (11, 10)."
  },
  {
   "address": 9772,
   "type": "line",
   "text": "Room 24's floor decorations: 6 of piece 2 right from (1, 13); 1 of piece 2 right from (11, 15), then the zero that ends the list."
  },
  {
   "address": 9779,
   "type": "line",
   "text": "Room 25's floor decorations: 5 of piece 0 right from (1, 1); 3 of piece 1 right from (11, 1), then the zero that ends the list."
  },
  {
   "address": 9786,
   "type": "line",
   "text": "Room 26's floor decorations: 2 of piece 2 right from (1, 13); 1 of piece 2 right from (3, 15); 2 of piece 2 right from (13, 7), then the zero that ends the list."
  },
  {
   "address": 9796,
   "type": "line",
   "text": "Room 27's floor decorations: 4 of piece 0 right from (1, 7); 2 of piece 0 down from (7, 3); 2 of piece 0 right from (9, 3); 3 of piece 0 right from (11, 5); 2 of piece 0 down from (15, 1)."
  },
  {
   "address": 9811,
   "type": "line",
   "text": "Room 28's floor decorations: 3 of piece 2 right from (11, 7); 3 of piece 2 down from (9, 7); 1 of piece 2 right from (7, 11); 1 of piece 3 right from (7, 9), then the zero that ends the list."
  },
  {
   "address": 9824,
   "type": "line",
   "text": "Room 29's floor decorations: 2 of piece 0 down from (1, 3); 2 of piece 0 down from (5, 1); 1 of piece 0 right from (3, 3), then the zero that ends the list."
  },
  {
   "address": 9834,
   "type": "line",
   "text": "Room 30's floor decorations: 3 of piece 2 down from (9, 1); 3 of piece 2 right from (11, 5); 2 of piece 2 down from (15, 7), then the zero that ends the list."
  },
  {
   "address": 9844,
   "type": "line",
   "text": "Room 31's floor decorations: 2 of piece 0 right from (1, 15), then the zero that ends the list."
  },
  {
   "address": 9848,
   "type": "line",
   "text": "Room 32's floor decorations: 1 of piece 2 right from (11, 15); 3 of piece 2 right from (11, 13), then the zero that ends the list."
  },
  {
   "address": 9855,
   "type": "line",
   "text": "Room 33's floor decorations: 6 of piece 2 down from (13, 1); 1 of piece 2 right from (15, 11), then the zero that ends the list."
  },
  {
   "address": 9862,
   "type": "line",
   "text": "Room 34's floor decorations: 1 of piece 1 right from (1, 11); 2 of piece 0 right from (3, 11); 2 of piece 0 right from (3, 9), then the zero that ends the list."
  },
  {
   "address": 9872,
   "type": "line",
   "text": "Room 35's floor decorations: 3 of piece 2 right from (1, 1); 3 of piece 2 right from (1, 5); 1 of piece 3 right from (5, 3), then the zero that ends the list."
  },
  {
   "address": 9882,
   "type": "line",
   "text": "Room 36's floor decorations: 2 of piece 0 right from (1, 11); 2 of piece 0 down from (3, 13); 2 of piece 0 down from (11, 1); 2 of piece 0 down from (13, 3), then the zero that ends the list."
  },
  {
   "address": 9895,
   "type": "line",
   "text": "Room 37's floor decorations: 2 of piece 2 right from (1, 1), then the zero that ends the list."
  },
  {
   "address": 9899,
   "type": "line",
   "text": "Room 38's floor decorations: 3 of piece 0 right from (4, 8), then the zero that ends the list."
  },
  {
   "address": 9903,
   "type": "line",
   "text": "Room 39's floor decorations: 3 of piece 2 down from (5, 1); 2 of piece 2 right from (1, 3); 2 of piece 2 right from (1, 13); 2 of piece 2 down from (5, 11); 2 of piece 3 down from (5, 7)."
  },
  {
   "address": 9918,
   "type": "line",
   "text": "Room 40's floor decorations: 4 of piece 0 right from (1, 1); 3 of piece 0 right from (1, 15), then the zero that ends the list."
  },
  {
   "address": 9925,
   "type": "line",
   "text": "Room 41's floor decorations: 2 of piece 2 down from (5, 13); 4 of piece 2 right from (5, 11); 2 of piece 2 down from (11, 13), then the zero that ends the list."
  },
  {
   "address": 9935,
   "type": "line",
   "text": "Room 42's floor decorations: 1 of piece 1 right from (6, 9), then the zero that ends the list."
  },
  {
   "address": 9939,
   "type": "line",
   "text": "Room 43's floor decorations: 6 of piece 3 down from (3, 3); 6 of piece 2 right from (5, 3); 6 of piece 2 right from (5, 13); 4 of piece 3 down from (7, 5), then the zero that ends the list."
  },
  {
   "address": 9952,
   "type": "line",
   "text": "Room 44's floor decorations: 8 of piece 0 down from (1, 1); 4 of piece 0 down from (3, 5); 2 of piece 0 down from (5, 7); 3 of piece 0 right from (11, 1); 3 of piece 0 right from (11, 15)."
  },
  {
   "address": 9967,
   "type": "line",
   "text": "Room 45's floor decorations: 8 of piece 2 down from (1, 1); 1 of piece 2 right from (8, 1); 5 of piece 2 down from (11, 7); 2 of piece 2 down from (15, 13); 1 of piece 3 right from (13, 13)."
  },
  {
   "address": 9982,
   "type": "line",
   "text": "Room 46's floor decorations: 5 of piece 0 down from (4, 4); 5 of piece 0 down from (12, 4); 3 of piece 0 right from (6, 12); 3 of piece 0 right from (6, 4); 3 of piece 1 down from (8, 6)."
  },
  {
   "address": 9997,
   "type": "line",
   "text": "Room 47's floor decorations: 5 of piece 2 right from (4, 6); 3 of piece 2 down from (15, 1); 2 of piece 3 down from (15, 7), then the zero that ends the list."
  },
  {
   "address": 10007,
   "type": "line",
   "text": "Room 48's floor decorations: 3 of piece 0 down from (15, 1); 3 of piece 0 down from (1, 1); 3 of piece 0 right from (3, 4); 1 of piece 0 right from (6, 6); 3 of piece 0 down from (7, 8)."
  },
  {
   "address": 10022,
   "type": "line",
   "text": "Room 49's floor decorations: 8 of piece 2 right from (1, 11); 8 of piece 2 right from (1, 13); 8 of piece 2 right from (1, 15); 4 of piece 2 down from (6, 3); 4 of piece 2 down from (8, 3)."
  },
  {
   "address": 10037,
   "type": "line",
   "text": "Room 50's floor decorations: 6 of piece 0 down from (5, 1); 2 of piece 1 down from (2, 11); 3 of piece 1 down from (12, 11), then the zero that ends the list."
  },
  {
   "address": 10047,
   "type": "line",
   "text": "Room 51's floor decorations: 3 of piece 2 down from (3, 1); 8 of piece 3 right from (1, 7); 8 of piece 3 right from (1, 9); 2 of piece 2 down from (7, 11); 2 of piece 2 down from (9, 11)."
  },
  {
   "address": 10062,
   "type": "line",
   "text": "Room 52's floor decorations: 3 of piece 0 down from (3, 11); 1 of piece 0 right from (1, 11); 1 of piece 0 right from (1, 15); 1 of piece 1 right from (1, 13), then the zero that ends the list."
  },
  {
   "address": 10075,
   "type": "line",
   "text": "Room 53's floor decorations: 2 of piece 2 down from (7, 11); 2 of piece 2 down from (5, 11); 1 of piece 3 right from (7, 15), then the zero that ends the list."
  },
  {
   "address": 10085,
   "type": "line",
   "text": "Room 54's floor decorations: 2 of piece 0 right from (11, 3); 2 of piece 0 right from (13, 5); 1 of piece 0 right from (11, 7); 1 of piece 1 right from (11, 5), then the zero that ends the list."
  },
  {
   "address": 10098,
   "type": "line",
   "text": "Room 55's floor decorations: 4 of piece 2 down from (7, 8); 2 of piece 2 right from (9, 8), then the zero that ends the list."
  },
  {
   "address": 10105,
   "type": "line",
   "text": "Room 56's floor decorations: 4 of piece 0 right from (7, 3); 4 of piece 0 right from (7, 5); 1 of piece 0 right from (13, 1), then the zero that ends the list."
  },
  {
   "address": 10115,
   "type": "line",
   "text": "Room 57's floor decorations: 3 of piece 2 down from (11, 1); 3 of piece 2 down from (13, 1); 3 of piece 2 down from (15, 1), then the zero that ends the list."
  },
  {
   "address": 10125,
   "type": "line",
   "text": "Room 58's floor decorations: 4 of piece 0 right from (1, 9); 3 of piece 0 down from (7, 11), then the zero that ends the list."
  },
  {
   "address": 10132,
   "type": "line",
   "text": "Room 59's floor decorations: 8 of piece 2 right from (1, 1), then the zero that ends the list."
  },
  {
   "address": 10136,
   "type": "line",
   "text": "Room 60's floor decorations: 2 of piece 0 down from (7, 1); 2 of piece 0 down from (9, 1), then the zero that ends the list."
  },
  {
   "address": 10143,
   "type": "line",
   "text": "Room 61's floor decorations: 5 of piece 2 right from (7, 1); 7 of piece 2 down from (9, 3); 7 of piece 2 down from (11, 3); 7 of piece 2 down from (13, 3); 2 of piece 2 down from (15, 3)."
  },
  {
   "address": 10158,
   "type": "line",
   "text": "Room 62's floor decorations: 3 of piece 0 right from (1, 8); 3 of piece 0 right from (11, 8); 3 of piece 0 down from (7, 6); 3 of piece 0 down from (9, 6), then the zero that ends the list."
  },
  {
   "address": 10171,
   "type": "line",
   "text": "Room 63's floor decorations: 2 of piece 0 down from (5, 1); 2 of piece 1 right from (7, 3); 2 of piece 1 down from (11, 1), then the zero that ends the list."
  },
  {
   "address": 10181,
   "type": "line",
   "text": "Room 64's floor decorations: 2 of piece 0 down from (5, 1); 2 of piece 0 right from (7, 3), then the zero that ends the list."
  },
  {
   "address": 10188,
   "type": "line",
   "text": "Room 65's floor decorations: 3 of piece 2 right from (6, 7); 3 of piece 2 right from (6, 9), then the zero that ends the list."
  },
  {
   "address": 10195,
   "type": "line",
   "text": "Room 66's floor decorations: 8 of piece 0 right from (1, 13); 3 of piece 0 right from (6, 11); 3 of piece 2 down from (1, 11); 2 of piece 2 right from (3, 15), then the zero that ends the list."
  },
  {
   "address": 10208,
   "type": "line",
   "text": "Room 67's floor decorations: 2 of piece 0 down from (1, 11); 1 of piece 1 right from (1, 15); 1 of piece 0 right from (3, 15); 3 of piece 0 down from (15, 11); 1 of piece 0 right from (13, 15)."
  },
  {
   "address": 10223,
   "type": "line",
   "text": "Room 68's floor decorations: 3 of piece 2 right from (8, 7); 3 of piece 2 down from (10, 9); 3 of piece 2 down from (12, 9), then the zero that ends the list."
  },
  {
   "address": 10233,
   "type": "line",
   "text": "Room 69's floor decorations: 2 of piece 0 right from (7, 3); 2 of piece 0 right from (7, 5); 1 of piece 0 right from (9, 7), then the zero that ends the list."
  },
  {
   "address": 10243,
   "type": "line",
   "text": "Room 70's floor decorations: 4 of piece 2 right from (1, 3); 1 of piece 2 right from (5, 1), then the zero that ends the list."
  },
  {
   "address": 10250,
   "type": "line",
   "text": "Room 71's floor decorations: 3 of piece 0 right from (11, 1); 2 of piece 0 down from (11, 3); 2 of piece 0 down from (15, 3), then the zero that ends the list."
  },
  {
   "address": 10260,
   "type": "line",
   "text": "Room 72's floor decorations: 3 of piece 2 right from (11, 13); 4 of piece 2 down from (11, 5); 2 of piece 2 right from (13, 5); 2 of piece 3 down from (13, 1); 1 of piece 3 right from (15, 3)."
  },
  {
   "address": 10275,
   "type": "line",
   "text": "Room 73's floor decorations: 5 of piece 0 right from (1, 13), then the zero that ends the list."
  },
  {
   "address": 10279,
   "type": "line",
   "text": "Room 74's floor decorations: 3 of piece 2 down from (9, 3); 2 of piece 2 down from (7, 5); 1 of piece 2 right from (11, 3); 1 of piece 3 right from (13, 3); 1 of piece 2 right from (15, 3)."
  },
  {
   "address": 10294,
   "type": "line",
   "text": "Room 75's floor decorations: 3 of piece 0 down from (12, 4); 1 of piece 0 right from (10, 8), then the zero that ends the list."
  },
  {
   "address": 10301,
   "type": "line",
   "text": "Room 76's floor decorations: 6 of piece 2 down from (1, 1); 1 of piece 2 right from (3, 1); 3 of piece 2 right from (3, 11), then the zero that ends the list."
  },
  {
   "address": 10311,
   "type": "line",
   "text": "Room 77's floor decorations: 5 of piece 0 down from (1, 1); 1 of piece 1 right from (3, 7); 2 of piece 0 down from (5, 7); 1 of piece 0 right from (3, 9); 1 of piece 1 right from (3, 7)."
  },
  {
   "address": 10326,
   "type": "line",
   "text": "Room 78's floor decorations: 4 of piece 2 down from (3, 7); 4 of piece 2 right from (5, 13); 4 of piece 2 down from (13, 7); 1 of piece 2 right from (8, 15), then the zero that ends the list."
  },
  {
   "address": 10339,
   "type": "line",
   "text": "Room 79's floor decorations: 8 of piece 0 right from (1, 12); 1 of piece 0 right from (10, 14), then the zero that ends the list."
  },
  {
   "address": 10346,
   "type": "line",
   "text": "Room 80's floor decorations: 7 of piece 2 right from (1, 4); 7 of piece 2 right from (1, 12); 3 of piece 2 down from (15, 1); 3 of piece 2 down from (15, 11), then the zero that ends the list."
  },
  {
   "address": 10359,
   "type": "line",
   "text": "Room 81's floor decorations: 2 of piece 0 right from (1, 5); 2 of piece 0 right from (1, 11); 1 of piece 0 right from (15, 4); 1 of piece 0 right from (15, 12), then the zero that ends the list."
  },
  {
   "address": 10372,
   "type": "line",
   "text": "Room 82's floor decorations: 1 of piece 2 right from (15, 11); 1 of piece 2 right from (15, 5), then the zero that ends the list."
  },
  {
   "address": 10379,
   "type": "line",
   "text": "Room 83's floor decorations: 3 of piece 0 down from (12, 1); 2 of piece 1 down from (12, 7); 3 of piece 0 down from (12, 11); 2 of piece 1 down from (14, 7), then the zero that ends the list."
  },
  {
   "address": 10392,
   "type": "line",
   "text": "Room 84's floor decorations: 2 of piece 3 right from (9, 4); 1 of piece 3 right from (11, 6); 2 of piece 3 right from (11, 10); 4 of piece 2 right from (9, 12); 2 of piece 2 right from (13, 4)."
  },
  {
   "address": 10407,
   "type": "line",
   "text": "Room 85's floor decorations: 3 of piece 0 down from (1, 1); 3 of piece 0 down from (4, 8); 1 of piece 1 right from (6, 9); 5 of piece 0 right from (6, 12); 3 of piece 0 right from (11, 1)."
  },
  {
   "address": 10422,
   "type": "line",
   "text": "Room 86's floor decorations: 3 of piece 2 right from (11, 5); 2 of piece 2 right from (11, 7), then the zero that ends the list."
  },
  {
   "address": 10429,
   "type": "line",
   "text": "Room 87's floor decorations: 3 of piece 0 right from (1, 2); 1 of piece 0 right from (1, 4), then the zero that ends the list."
  },
  {
   "address": 10436,
   "type": "line",
   "text": "Room 88's floor decorations: 1 of piece 0 right from (1, 9); 1 of piece 1 right from (1, 11); 2 of piece 0 down from (1, 13); 1 of piece 0 right from (3, 15), then the zero that ends the list."
  },
  {
   "address": 10449,
   "type": "line",
   "text": "Room 89's floor decorations: 5 of piece 2 right from (1, 5); 1 of piece 3 right from (11, 5); 2 of piece 2 right from (13, 5), then the zero that ends the list."
  },
  {
   "address": 10459,
   "type": "line",
   "text": "Room 90's floor decorations: 3 of piece 0 down from (11, 11); 3 of piece 0 down from (15, 11); 3 of piece 0 down from (13, 7), then the zero that ends the list."
  },
  {
   "address": 10469,
   "type": "line",
   "text": "Room 91's floor decorations: 4 of piece 2 right from (9, 7); 1 of piece 2 right from (12, 9), then the zero that ends the list."
  },
  {
   "address": 10476,
   "type": "line",
   "text": "Room 92's floor decorations: 2 of piece 2 right from (1, 5); 3 of piece 2 down from (3, 7); 1 of piece 2 right from (1, 12), then the zero that ends the list."
  },
  {
   "address": 10486,
   "type": "line",
   "text": "Room 93's floor decorations: 6 of piece 0 down from (5, 5); 2 of piece 0 right from (7, 5); 2 of piece 0 right from (7, 7); 2 of piece 1 right from (7, 9); 2 of piece 0 right from (7, 11)."
  },
  {
   "address": 10501,
   "type": "line",
   "text": "Room 94's floor decorations: 7 of piece 2 right from (1, 5); 4 of piece 2 down from (7, 7); 4 of piece 2 down from (11, 7); 1 of piece 3 right from (9, 13); 1 of piece 2 right from (13, 7)."
  },
  {
   "address": 10516,
   "type": "line",
   "text": "Room 95's floor decorations: 5 of piece 0 right from (1, 9); 4 of piece 0 right from (9, 5); 1 of piece 1 right from (9, 7); 1 of piece 1 right from (5, 1), then the zero that ends the list."
  },
  {
   "address": 10529,
   "type": "line",
   "text": "Room 96's floor decorations: 4 of piece 2 right from (1, 3); 4 of piece 2 down from (7, 5); 4 of piece 2 right from (1, 13), then the zero that ends the list."
  },
  {
   "address": 10539,
   "type": "line",
   "text": "Room 97's floor decorations: 8 of piece 0 right from (1, 3); 8 of piece 0 right from (1, 13); 4 of piece 0 right from (5, 15); 4 of piece 0 right from (5, 1), then the zero that ends the list."
  },
  {
   "address": 10552,
   "type": "line",
   "text": "Room 98's floor decorations: 6 of piece 3 down from (9, 3); 2 of piece 3 down from (7, 7); 2 of piece 3 down from (5, 7); 3 of piece 2 right from (11, 3); 3 of piece 2 right from (11, 13)."
  },
  {
   "address": 10567,
   "type": "line",
   "text": "Room 99's floor decorations: 4 of piece 0 right from (1, 1); 1 of piece 0 right from (7, 3), then the zero that ends the list."
  },
  {
   "address": 10574,
   "type": "line",
   "text": "One pointer for each room to its description (from $2A16), which the message line scrolls on entry."
  },
  {
   "address": 10575,
   "type": "line",
   "text": "room_msgs' high bytes."
  },
  {
   "address": 10774,
   "type": "line",
   "text": "Room 0's description, scrolled on the message line when a player enters. The room is at row 4, column 6 of room_map (place $46); doorways top, bottom, left and right."
  },
  {
   "address": 10837,
   "type": "line",
   "text": "Room 1's description, scrolled on the message line when a player enters. The room is at row 3, column 6 of room_map (place $36); doorways top and bottom."
  },
  {
   "address": 10915,
   "type": "line",
   "text": "Room 2's description, scrolled on the message line when a player enters. The room is at row 4, column 7 of room_map (place $47); doorways left and right."
  },
  {
   "address": 10968,
   "type": "line",
   "text": "Room 3's description, scrolled on the message line when a player enters. The room is at row 5, column 6 of room_map (place $56); doorways top, bottom and left."
  },
  {
   "address": 11041,
   "type": "line",
   "text": "Room 4's description, scrolled on the message line when a player enters. The room is at row 4, column 5 of room_map (place $45); doorways top, left and right."
  },
  {
   "address": 11113,
   "type": "line",
   "text": "Room 5's description, scrolled on the message line when a player enters. The room is at row 4, column 8 of room_map (place $48); doorways bottom, left and right."
  },
  {
   "address": 11187,
   "type": "line",
   "text": "Room 6's description, scrolled on the message line when a player enters. The room is at row 2, column 6 of room_map (place $26); doorways bottom, left and right."
  },
  {
   "address": 11267,
   "type": "line",
   "text": "Room 7's description, scrolled on the message line when a player enters. The room is at row 2, column 7 of room_map (place $27); doorways left."
  },
  {
   "address": 11347,
   "type": "line",
   "text": "Room 8's description, scrolled on the message line when a player enters. The room is at row 2, column 5 of room_map (place $25); doorways top, bottom, left and right."
  },
  {
   "address": 11426,
   "type": "line",
   "text": "Room 9's description, scrolled on the message line when a player enters. The room is at row 1, column 5 of room_map (place $15); doorways bottom."
  },
  {
   "address": 11504,
   "type": "line",
   "text": "Room 10's description, scrolled on the message line when a player enters. The room is at row 1, column 7 of room_map (place $17); doorways left and right."
  },
  {
   "address": 11580,
   "type": "line",
   "text": "Room 11's description, scrolled on the message line when a player enters. The room is at row 1, column 6 of room_map (place $16); doorways right."
  },
  {
   "address": 11650,
   "type": "line",
   "text": "Room 12's description, scrolled on the message line when a player enters. The room is at row 4, column 9 of room_map (place $49); doorways left and right."
  },
  {
   "address": 11730,
   "type": "line",
   "text": "Room 13's description, scrolled on the message line when a player enters. The room is at row 5, column 8 of room_map (place $58); doorways top and bottom."
  },
  {
   "address": 11807,
   "type": "line",
   "text": "Room 14's description, scrolled on the message line when a player enters. The room is at row 4, column 10 of room_map (place $4A); doorways top, bottom and left. Exactly 80 characters with no zero after them: the line stops at 80 anyway, so the missing zero never shows."
  },
  {
   "address": 11887,
   "type": "line",
   "text": "Room 15's description, scrolled on the message line when a player enters. The room is at row 5, column 10 of room_map (place $5A); doorways top, bottom and right."
  },
  {
   "address": 11966,
   "type": "line",
   "text": "Room 16's description, scrolled on the message line when a player enters. The room is at row 6, column 10 of room_map (place $6A); doorways top, bottom and right."
  },
  {
   "address": 12046,
   "type": "line",
   "text": "Room 17's description, scrolled on the message line when a player enters. The room is at row 5, column 11 of room_map (place $5B); doorways left and right."
  },
  {
   "address": 12120,
   "type": "line",
   "text": "Room 18's description, scrolled on the message line when a player enters. The room is at row 6, column 11 of room_map (place $6B); doorways bottom, left and right."
  },
  {
   "address": 12200,
   "type": "line",
   "text": "Room 19's description, scrolled on the message line when a player enters. The room is at row 5, column 12 of room_map (place $5C); doorways left."
  },
  {
   "address": 12273,
   "type": "line",
   "text": "Room 20's description, scrolled on the message line when a player enters. The room is at row 6, column 12 of room_map (place $6C); doorways bottom, left and right."
  },
  {
   "address": 12348,
   "type": "line",
   "text": "Room 21's description, scrolled on the message line when a player enters. The room is at row 5, column 13 of room_map (place $5D); doorways top and bottom."
  },
  {
   "address": 12425,
   "type": "line",
   "text": "Room 22's description, scrolled on the message line when a player enters. The room is at row 6, column 13 of room_map (place $6D); doorways top, bottom and left."
  },
  {
   "address": 12505,
   "type": "line",
   "text": "Room 23's description, scrolled on the message line when a player enters. The room is at row 4, column 13 of room_map (place $4D); doorways top and bottom."
  },
  {
   "address": 12578,
   "type": "line",
   "text": "Room 24's description, scrolled on the message line when a player enters. The room is at row 7, column 10 of room_map (place $7A); doorways top, bottom, left and right."
  },
  {
   "address": 12655,
   "type": "line",
   "text": "Room 25's description, scrolled on the message line when a player enters. The room is at row 3, column 13 of room_map (place $3D); doorways top and bottom."
  },
  {
   "address": 12724,
   "type": "line",
   "text": "Room 26's description, scrolled on the message line when a player enters. The room is at row 2, column 13 of room_map (place $2D); doorways bottom and left."
  },
  {
   "address": 12804,
   "type": "line",
   "text": "Room 27's description, scrolled on the message line when a player enters. The room is at row 2, column 12 of room_map (place $2C); doorways top, left and right."
  },
  {
   "address": 12883,
   "type": "line",
   "text": "Room 28's description, scrolled on the message line when a player enters. The room is at row 2, column 11 of room_map (place $2B); doorways top, left and right."
  },
  {
   "address": 12939,
   "type": "line",
   "text": "Room 29's description, scrolled on the message line when a player enters. The room is at row 1, column 12 of room_map (place $1C); doorways bottom and left."
  },
  {
   "address": 13013,
   "type": "line",
   "text": "Room 30's description, scrolled on the message line when a player enters. The room is at row 1, column 11 of room_map (place $1B); doorways bottom, left and right. Exactly 80 characters with no zero after them: the line stops at 80 anyway, so the missing zero never shows."
  },
  {
   "address": 13093,
   "type": "line",
   "text": "Room 31's description, scrolled on the message line when a player enters. The room is at row 1, column 10 of room_map (place $1A); doorways bottom, left and right."
  },
  {
   "address": 13173,
   "type": "line",
   "text": "Room 32's description, scrolled on the message line when a player enters. The room is at row 1, column 9 of room_map (place $19); doorways bottom, left and right."
  },
  {
   "address": 13252,
   "type": "line",
   "text": "Room 33's description, scrolled on the message line when a player enters. The room is at row 2, column 9 of room_map (place $29); doorways top and right."
  },
  {
   "address": 13319,
   "type": "line",
   "text": "Room 34's description, scrolled on the message line when a player enters. The room is at row 1, column 8 of room_map (place $18); doorways left and right."
  },
  {
   "address": 13393,
   "type": "line",
   "text": "Room 35's description, scrolled on the message line when a player enters. The room is at row 2, column 10 of room_map (place $2A); doorways top, bottom, left and right."
  },
  {
   "address": 13466,
   "type": "line",
   "text": "Room 36's description, scrolled on the message line when a player enters. The room is at row 3, column 10 of room_map (place $3A); doorways top and bottom."
  },
  {
   "address": 13534,
   "type": "line",
   "text": "Room 37's description, scrolled on the message line when a player enters. The room is at row 3, column 5 of room_map (place $35); doorways top and bottom."
  },
  {
   "address": 13598,
   "type": "line",
   "text": "Room 38's description, scrolled on the message line when a player enters. The room is at row 2, column 4 of room_map (place $24); doorways top, bottom, left and right."
  },
  {
   "address": 13668,
   "type": "line",
   "text": "Room 39's description, scrolled on the message line when a player enters. The room is at row 1, column 4 of room_map (place $14); doorways bottom and left."
  },
  {
   "address": 13724,
   "type": "line",
   "text": "Room 40's description, scrolled on the message line when a player enters. The room is at row 4, column 4 of room_map (place $44); doorways top, left and right."
  },
  {
   "address": 13803,
   "type": "line",
   "text": "Room 41's description, scrolled on the message line when a player enters. The room is at row 3, column 4 of room_map (place $34); doorways top and bottom."
  },
  {
   "address": 13876,
   "type": "line",
   "text": "Room 42's description, scrolled on the message line when a player enters. The room is at row 2, column 3 of room_map (place $23); doorways right."
  },
  {
   "address": 13950,
   "type": "line",
   "text": "Room 43's description, scrolled on the message line when a player enters. The room is at row 1, column 3 of room_map (place $13); doorways top and right."
  },
  {
   "address": 14019,
   "type": "line",
   "text": "Room 44's description, scrolled on the message line when a player enters. The room is at row 0, column 3 of room_map (place $03); doorways bottom."
  },
  {
   "address": 14098,
   "type": "line",
   "text": "Room 45's description, scrolled on the message line when a player enters. The room is at row 6, column 6 of room_map (place $66); doorways top, left and right."
  },
  {
   "address": 14174,
   "type": "line",
   "text": "Room 46's description, scrolled on the message line when a player enters. The room is at row 6, column 7 of room_map (place $67); doorways bottom, left and right. Exactly 80 characters with no zero after them: the line stops at 80 anyway, so the missing zero never shows."
  },
  {
   "address": 14254,
   "type": "line",
   "text": "Room 47's description, scrolled on the message line when a player enters. The room is at row 6, column 8 of room_map (place $68); doorways top and left."
  },
  {
   "address": 14330,
   "type": "line",
   "text": "Room 48's description, scrolled on the message line when a player enters. The room is at row 7, column 7 of room_map (place $77); doorways top and bottom. Exactly 80 characters with no zero after them: the line stops at 80 anyway, so the missing zero never shows."
  },
  {
   "address": 14410,
   "type": "line",
   "text": "Room 49's description, scrolled on the message line when a player enters. The room is at row 6, column 5 of room_map (place $65); doorways bottom, left and right."
  },
  {
   "address": 14489,
   "type": "line",
   "text": "Room 50's description, scrolled on the message line when a player enters. The room is at row 8, column 7 of room_map (place $87); doorways top, bottom, left and right."
  },
  {
   "address": 14566,
   "type": "line",
   "text": "Room 51's description, scrolled on the message line when a player enters. The room is at row 9, column 7 of room_map (place $97); doorways top and bottom."
  },
  {
   "address": 14633,
   "type": "line",
   "text": "Room 52's description, scrolled on the message line when a player enters. The room is at row 10, column 7 of room_map (place $A7); doorways top, bottom and right."
  },
  {
   "address": 14690,
   "type": "line",
   "text": "Room 53's description, scrolled on the message line when a player enters. The room is at row 10, column 8 of room_map (place $A8); doorways top, bottom, left and right."
  },
  {
   "address": 14760,
   "type": "line",
   "text": "Room 54's description, scrolled on the message line when a player enters. The room is at row 11, column 8 of room_map (place $B8); doorways top and left. Exactly 80 characters with no zero after them: the line stops at 80 anyway, so the missing zero never shows."
  },
  {
   "address": 14840,
   "type": "line",
   "text": "Room 55's description, scrolled on the message line when a player enters. The room is at row 11, column 7 of room_map (place $B7); doorways top and right."
  },
  {
   "address": 14918,
   "type": "line",
   "text": "Room 56's description, scrolled on the message line when a player enters. The room is at row 8, column 8 of room_map (place $88); doorways bottom and left."
  },
  {
   "address": 14997,
   "type": "line",
   "text": "Room 57's description, scrolled on the message line when a player enters. The room is at row 9, column 8 of room_map (place $98); doorways top, bottom and right."
  },
  {
   "address": 15073,
   "type": "line",
   "text": "Room 58's description, scrolled on the message line when a player enters. The room is at row 9, column 9 of room_map (place $99); doorways left and right."
  },
  {
   "address": 15151,
   "type": "line",
   "text": "Room 59's description, scrolled on the message line when a player enters. The room is at row 10, column 9 of room_map (place $A9); doorways left and right."
  },
  {
   "address": 15215,
   "type": "line",
   "text": "Room 60's description, scrolled on the message line when a player enters. The room is at row 7, column 9 of room_map (place $79); doorways right."
  },
  {
   "address": 15291,
   "type": "line",
   "text": "Room 61's description, scrolled on the message line when a player enters. The room is at row 8, column 10 of room_map (place $8A); doorways top and bottom."
  },
  {
   "address": 15366,
   "type": "line",
   "text": "Room 62's description, scrolled on the message line when a player enters. The room is at row 9, column 10 of room_map (place $9A); doorways top, bottom and left."
  },
  {
   "address": 15442,
   "type": "line",
   "text": "Room 63's description, scrolled on the message line when a player enters. The room is at row 10, column 10 of room_map (place $AA); doorways top, left and right. Exactly 80 characters with no zero after them: the line stops at 80 anyway, so the missing zero never shows."
  },
  {
   "address": 15522,
   "type": "line",
   "text": "Room 64's description, scrolled on the message line when a player enters. The room is at row 7, column 11 of room_map (place $7B); doorways top, bottom, left and right."
  },
  {
   "address": 15600,
   "type": "line",
   "text": "Room 65's description, scrolled on the message line when a player enters. The room is at row 7, column 12 of room_map (place $7C); doorways top, bottom, left and right."
  },
  {
   "address": 15671,
   "type": "line",
   "text": "Room 66's description, scrolled on the message line when a player enters. The room is at row 7, column 13 of room_map (place $7D); doorways top, bottom and left."
  },
  {
   "address": 15750,
   "type": "line",
   "text": "Room 67's description, scrolled on the message line when a player enters. The room is at row 8, column 11 of room_map (place $8B); doorways top."
  },
  {
   "address": 15829,
   "type": "line",
   "text": "Room 68's description, scrolled on the message line when a player enters. The room is at row 8, column 12 of room_map (place $8C); doorways top, bottom and right."
  },
  {
   "address": 15905,
   "type": "line",
   "text": "Room 69's description, scrolled on the message line when a player enters. The room is at row 8, column 13 of room_map (place $8D); doorways top and left. 60 characters with no zero after them, so the line runs on into room 70's description until it reaches 80."
  },
  {
   "address": 15965,
   "type": "line",
   "text": "Room 70's description, scrolled on the message line when a player enters. The room is at row 9, column 12 of room_map (place $9C); doorways top, bottom, left and right."
  },
  {
   "address": 16033,
   "type": "line",
   "text": "Room 71's description, scrolled on the message line when a player enters. The room is at row 9, column 13 of room_map (place $9D); doorways left and right."
  },
  {
   "address": 16113,
   "type": "line",
   "text": "Room 72's description, scrolled on the message line when a player enters. The room is at row 9, column 14 of room_map (place $9E); doorways bottom, left and right."
  },
  {
   "address": 16188,
   "type": "line",
   "text": "Room 73's description, scrolled on the message line when a player enters. The room is at row 9, column 15 of room_map (place $9F); doorways left."
  },
  {
   "address": 16250,
   "type": "line",
   "text": "Room 74's description, scrolled on the message line when a player enters. The room is at row 10, column 14 of room_map (place $AE); doorways top and left."
  },
  {
   "address": 16322,
   "type": "line",
   "text": "Room 75's description, scrolled on the message line when a player enters. The room is at row 10, column 13 of room_map (place $AD); doorways bottom, left and right."
  },
  {
   "address": 16384,
   "type": "line",
   "text": "The last 14 characters of room 75's description (desc_75), from $4000 to its zero at $400D."
  },
  {
   "address": 16399,
   "type": "line",
   "text": "Room 76's description, scrolled on the message line when a player enters. The room is at row 10, column 12 of room_map (place $AC); doorways top and right."
  },
  {
   "address": 16476,
   "type": "line",
   "text": "Room 77's description, scrolled on the message line when a player enters. The room is at row 9, column 11 of room_map (place $9B); doorways bottom and right."
  },
  {
   "address": 16554,
   "type": "line",
   "text": "Room 78's description, scrolled on the message line when a player enters. The room is at row 10, column 11 of room_map (place $AB); doorways top and left."
  },
  {
   "address": 16624,
   "type": "line",
   "text": "Room 79's description, scrolled on the message line when a player enters. The room is at row 11, column 13 of room_map (place $BD); doorways top."
  },
  {
   "address": 16689,
   "type": "line",
   "text": "Room 80's description, scrolled on the message line when a player enters. The room is at row 8, column 6 of room_map (place $86); doorways left and right."
  },
  {
   "address": 16748,
   "type": "line",
   "text": "Room 81's description, scrolled on the message line when a player enters. The room is at row 8, column 5 of room_map (place $85); doorways top, bottom, left and right."
  },
  {
   "address": 16827,
   "type": "line",
   "text": "Room 82's description, scrolled on the message line when a player enters. The room is at row 8, column 4 of room_map (place $84); doorways right."
  },
  {
   "address": 16890,
   "type": "line",
   "text": "Room 83's description, scrolled on the message line when a player enters. The room is at row 7, column 5 of room_map (place $75); doorways top and bottom."
  },
  {
   "address": 16970,
   "type": "line",
   "text": "Room 84's description, scrolled on the message line when a player enters. The room is at row 6, column 4 of room_map (place $64); doorways right."
  },
  {
   "address": 17046,
   "type": "line",
   "text": "Room 85's description, scrolled on the message line when a player enters. The room is at row 9, column 5 of room_map (place $95); doorways top, bottom and left."
  },
  {
   "address": 17126,
   "type": "line",
   "text": "Room 86's description, scrolled on the message line when a player enters. The room is at row 10, column 5 of room_map (place $A5); doorways top and left."
  },
  {
   "address": 17196,
   "type": "line",
   "text": "Room 87's description, scrolled on the message line when a player enters. The room is at row 9, column 4 of room_map (place $94); doorways bottom, left and right."
  },
  {
   "address": 17273,
   "type": "line",
   "text": "Room 88's description, scrolled on the message line when a player enters. The room is at row 9, column 3 of room_map (place $93); doorways bottom and right."
  },
  {
   "address": 17353,
   "type": "line",
   "text": "Room 89's description, scrolled on the message line when a player enters. The room is at row 10, column 3 of room_map (place $A3); doorways top, bottom and right."
  },
  {
   "address": 17431,
   "type": "line",
   "text": "Room 90's description, scrolled on the message line when a player enters. The room is at row 11, column 3 of room_map (place $B3); doorways top and right."
  },
  {
   "address": 17501,
   "type": "line",
   "text": "Room 91's description, scrolled on the message line when a player enters. The room is at row 11, column 4 of room_map (place $B4); doorways top and left."
  },
  {
   "address": 17572,
   "type": "line",
   "text": "Room 92's description, scrolled on the message line when a player enters. The room is at row 10, column 4 of room_map (place $A4); doorways top, bottom, left and right. Exactly 80 characters with no zero after them: the line stops at 80 anyway, so the missing zero never shows."
  },
  {
   "address": 17652,
   "type": "line",
   "text": "Room 93's description, scrolled on the message line when a player enters. The room is at row 4, column 3 of room_map (place $43); doorways bottom, left and right."
  },
  {
   "address": 17727,
   "type": "line",
   "text": "Room 94's description, scrolled on the message line when a player enters. The room is at row 5, column 4 of room_map (place $54); doorways left."
  },
  {
   "address": 17807,
   "type": "line",
   "text": "Room 95's description, scrolled on the message line when a player enters. The room is at row 5, column 3 of room_map (place $53); doorways top and right."
  },
  {
   "address": 17885,
   "type": "line",
   "text": "Room 96's description, scrolled on the message line when a player enters. The room is at row 4, column 2 of room_map (place $42); doorways left and right. Exactly 80 characters with no zero after them: the line stops at 80 anyway, so the missing zero never shows."
  },
  {
   "address": 17965,
   "type": "line",
   "text": "Room 97's description, scrolled on the message line when a player enters. The room is at row 4, column 1 of room_map (place $41); doorways left and right."
  },
  {
   "address": 18045,
   "type": "line",
   "text": "Room 98's description, scrolled on the message line when a player enters. The room is at row 4, column 0 of room_map (place $40); doorways right. Exactly 80 characters with no zero after them: the line stops at 80 anyway, so the missing zero never shows."
  },
  {
   "address": 18125,
   "type": "line",
   "text": "Room 99's description, scrolled on the message line when a player enters. The room is at row 5, column 5 of room_map (place $55); doorways right."
  },
  {
   "address": 18204,
   "type": "line",
   "text": "The map: 12 rows of 16 places, each the number of the room there in binary-coded decimal (tens in the high nibble, which enter_room turns into binary), or $FF for none. map_index is a place here; leaving by a side moves one place, by the top or bottom sixteen. Room 0, the start, is at place $46 (row 4, column 6); room 99, Corrine's, at row 5, column 5."
  },
  {
   "address": 18396,
   "type": "line",
   "text": "One pointer for each of the 28 object types 0-$1B to its picture (shape_00 to shape_1b, $4814-$4E63, in type order), read by draw_object. Types 0 and 1 are 2 characters wide, 2-8 three and 9-$1B four, all two rows high, as draw_object and obj_width size them. Each picture is 8 bytes for each character: the top row's characters left to right, then the bottom row's."
  },
  {
   "address": 18397,
   "type": "line",
   "text": "obj_shapes' high bytes."
  },
  {
   "address": 18452,
   "type": "line",
   "text": "Type $00's picture, a scroll: 2 by 2 characters (32 bytes). Placed 19 times in 19 rooms: 19 to collect or open."
  },
  {
   "address": 18484,
   "type": "line",
   "text": "Type $01's picture, a bottle of restorative fluid: 2 by 2 characters (32 bytes). Placed 10 times in 10 rooms: 7 to collect or open, 3 solid."
  },
  {
   "address": 18516,
   "type": "line",
   "text": "Type $02's picture, armour: 3 by 2 characters (48 bytes). Placed 20 times in 19 rooms: 20 to collect or open."
  },
  {
   "address": 18564,
   "type": "line",
   "text": "Type $03's picture, a key: 3 by 2 characters (48 bytes). Placed 10 times in 10 rooms: 10 to collect or open."
  },
  {
   "address": 18612,
   "type": "line",
   "text": "Type $04's picture, a mask: 3 by 2 characters (48 bytes). Placed 11 times in 11 rooms: 11 to collect or open."
  },
  {
   "address": 18660,
   "type": "line",
   "text": "Type $05's picture, which the game gives no name: 3 by 2 characters (48 bytes). Placed 33 times in 33 rooms: 2 solid, 31 cabbala traps."
  },
  {
   "address": 18708,
   "type": "line",
   "text": "Type $06's picture, which the game gives no name: 3 by 2 characters (48 bytes). Placed 20 times in 18 rooms: 8 solid, 12 cabbala traps."
  },
  {
   "address": 18756,
   "type": "line",
   "text": "Type $07's picture, special key 7: 3 by 2 characters (48 bytes). Placed 1 time in 1 room: 1 to collect or open."
  },
  {
   "address": 18804,
   "type": "line",
   "text": "Type $08's picture, special key 8: 3 by 2 characters (48 bytes). Placed 1 time in 1 room: 1 to collect or open."
  },
  {
   "address": 18852,
   "type": "line",
   "text": "Type $09's picture, an amulet: 4 by 2 characters (64 bytes). Placed 6 times in 6 rooms: 6 to collect or open."
  },
  {
   "address": 18916,
   "type": "line",
   "text": "Type $0A's picture, which the game gives no name: 4 by 2 characters (64 bytes). Placed 68 times in 47 rooms: 5 that vanish when touched, 63 solid."
  },
  {
   "address": 18980,
   "type": "line",
   "text": "Type $0B's picture, which the game gives no name: 4 by 2 characters (64 bytes). Placed 32 times in 23 rooms: 1 that vanish when touched, 31 solid."
  },
  {
   "address": 19044,
   "type": "line",
   "text": "Type $0C's picture, which the game gives no name: 4 by 2 characters (64 bytes). Placed 15 times in 10 rooms: 15 solid."
  },
  {
   "address": 19108,
   "type": "line",
   "text": "Type $0D's picture, a door that takes a key: 4 by 2 characters (64 bytes). Placed 10 times in 9 rooms: 10 to collect or open."
  },
  {
   "address": 19172,
   "type": "line",
   "text": "Type $0E's picture, which the game gives no name: 4 by 2 characters (64 bytes). Placed 31 times in 12 rooms: 4 that vanish when touched, 27 solid."
  },
  {
   "address": 19236,
   "type": "line",
   "text": "Type $0F's picture, the door special key 7 opens: 4 by 2 characters (64 bytes). Placed 1 time in 1 room: 1 to collect or open."
  },
  {
   "address": 19300,
   "type": "line",
   "text": "Type $10's picture, which the game gives no name: 4 by 2 characters (64 bytes). Placed 35 times in 29 rooms: 4 that vanish when touched, 31 solid."
  },
  {
   "address": 19364,
   "type": "line",
   "text": "Type $11's picture, which the game gives no name: 4 by 2 characters (64 bytes). Placed 13 times in 8 rooms: 13 solid."
  },
  {
   "address": 19428,
   "type": "line",
   "text": "Type $12's picture, which the game gives no name: 4 by 2 characters (64 bytes). Placed 24 times in 22 rooms: 24 solid."
  },
  {
   "address": 19492,
   "type": "line",
   "text": "Type $13's picture, a jewel-filled chest: 4 by 2 characters (64 bytes). Placed 8 times in 8 rooms: 8 to collect or open."
  },
  {
   "address": 19556,
   "type": "line",
   "text": "Type $14's picture, which the game gives no name: 4 by 2 characters (64 bytes). Placed 13 times in 13 rooms: 13 solid."
  },
  {
   "address": 19620,
   "type": "line",
   "text": "Type $15's picture, which the game gives no name: 4 by 2 characters (64 bytes). Placed 1 time in 1 room: 1 solid."
  },
  {
   "address": 19684,
   "type": "line",
   "text": "Type $16's picture, food: 4 by 2 characters (64 bytes). Placed 39 times in 31 rooms: 30 to collect or open, 5 solid, 4 cabbala traps."
  },
  {
   "address": 19748,
   "type": "line",
   "text": "Type $17's picture, a snake brooch: 4 by 2 characters (64 bytes). Placed 4 times in 4 rooms: 3 to collect or open, 1 solid."
  },
  {
   "address": 19812,
   "type": "line",
   "text": "Type $18's picture, which the game gives no name: 4 by 2 characters (64 bytes). Placed 41 times in 23 rooms: 41 solid."
  },
  {
   "address": 19876,
   "type": "line",
   "text": "Type $19's picture, food: 4 by 2 characters (64 bytes). Placed 14 times in 14 rooms: 12 to collect or open, 2 solid."
  },
  {
   "address": 19940,
   "type": "line",
   "text": "Type $1A's picture, the door special key 8 opens: 4 by 2 characters (64 bytes). Placed 1 time in 1 room: 1 to collect or open."
  },
  {
   "address": 20004,
   "type": "line",
   "text": "Type $1B's picture, the laboratory door: 4 by 2 characters (64 bytes). Placed 1 time in 1 room: 1 to collect or open."
  },
  {
   "address": 20068,
   "type": "line",
   "text": "30 bytes of picture that no pointer or instruction uses, between the objects and Storm."
  },
  {
   "address": 20098,
   "type": "line",
   "text": "Storm (player B), four 4-by-2 pictures of 64 bytes, facing up, right, down and left ($4E82-$4F81)."
  },
  {
   "address": 20354,
   "type": "line",
   "text": "Monster kind 1, four facings of 64 bytes ($4F82-$5081)."
  },
  {
   "address": 20546,
   "type": "line",
   "text": "The operand compose's LDA at $6584 was assembled with; inside kind 1's left-facing picture."
  },
  {
   "address": 20610,
   "type": "line",
   "text": "Monster kind 2, two 3-by-2 frames of 48 bytes ($5082 and $50B2), alternated as it moves."
  },
  {
   "address": 20706,
   "type": "line",
   "text": "Generator look 1, a 3-by-2 picture (48 bytes)."
  },
  {
   "address": 20754,
   "type": "line",
   "text": "Generator look 2, a 3-by-2 picture (48 bytes)."
  },
  {
   "address": 20802,
   "type": "line",
   "text": "Two 4-by-2 pictures (128 bytes) that no pointer or instruction uses."
  },
  {
   "address": 20930,
   "type": "line",
   "text": "Monster kind 3, four facings of 64 bytes ($51C2-$52C1)."
  },
  {
   "address": 21186,
   "type": "line",
   "text": "Monster kind 4, two 3-by-2 frames ($52C2 and $52F2)."
  },
  {
   "address": 21282,
   "type": "line",
   "text": "Agravain (player A), four facings of 64 bytes ($5322-$5421)."
  },
  {
   "address": 21538,
   "type": "line",
   "text": "16 bytes of picture that nothing uses."
  },
  {
   "address": 21554,
   "type": "line",
   "text": "Monster kind 6, four facings of 64 bytes ($5432-$5531), each with its own colours."
  },
  {
   "address": 21810,
   "type": "line",
   "text": "Monster kind 5, four animation frames of 64 bytes ($5532-$5631)."
  },
  {
   "address": 22066,
   "type": "line",
   "text": "Silences the sound chip: clears the effect-playing flag sfx_on, zeroes the 24 registers $D400-$D417 (X = $17 down to 0) and then sets the volume register $D418 to 15. Called by the title start-up ($761E) and by game_init ($77C9)."
  },
  {
   "address": 22085,
   "type": "line",
   "text": "Starts sound effect A (0 to 14; X is kept in sfx_save_x). Takes the effect's 20-byte record from sfx_records through the pointer table sfx_ptrs (by patching the LDA operand at $5664), copies it to sfx_work ($5902-$5915), loads the voice 1 and voice 3 frequencies, attack/decay, pulse width and waveform from it, writes each waveform twice (gate off, then on) to restart both voices, and sets sfx_on. 24 calls in the game; effect 5 is never asked for."
  },
  {
   "address": 22116,
   "type": "line",
   "text": "Operand of the LDA at $5663, rewritten by sfx_start with the address of the chosen effect's record (sfx_records); the $57DD assembled here is effect 12's record."
  },
  {
   "address": 22117,
   "type": "line",
   "text": "High byte of the record address sfx_start patches into the LDA at $5663."
  },
  {
   "address": 22223,
   "type": "line",
   "text": "Fifteen little-endian pointers, one for each sound effect 0-14, to its 20-byte record in sfx_records ($56ED, $5701 ... $5805). sfx_start indexes it by effect number times two."
  },
  {
   "address": 22224,
   "type": "line",
   "text": "High byte of sfx_ptrs' first entry; sfx_start reads the pointers as two tables offset by one byte."
  },
  {
   "address": 22253,
   "type": "line",
   "text": "The fifteen sound-effect records, 20 bytes each, $56ED-$5818. sfx_start copies one to sfx_work, so each byte has the meaning of its place there: duration in frames, step length, voice 1 and voice 3 start frequencies, their attack/decay, their waveforms, their pulse widths, the two frequency sweep steps and directions, the repeat count and the random-pitch flag. The first is effect 0, for a locked door refusing a player (touch_object); sfx_01 to sfx_14 label the rest."
  },
  {
   "address": 22273,
   "type": "line",
   "text": "Sound effect 1's record, for a player leaving the room (edge_check)."
  },
  {
   "address": 22293,
   "type": "line",
   "text": "Sound effect 2's record, for picking up armour or a jewel-filled chest."
  },
  {
   "address": 22313,
   "type": "line",
   "text": "Sound effect 3's record, for eating food."
  },
  {
   "address": 22333,
   "type": "line",
   "text": "Sound effect 4's record, for picking up an amulet or a scroll."
  },
  {
   "address": 22353,
   "type": "line",
   "text": "Sound effect 5's record. Nothing in the game starts effect 5."
  },
  {
   "address": 22373,
   "type": "line",
   "text": "Sound effect 6's record, for a shot fired (control)."
  },
  {
   "address": 22393,
   "type": "line",
   "text": "Sound effect 7's record, for a monster or generator destroyed, by a shot or by magic."
  },
  {
   "address": 22413,
   "type": "line",
   "text": "Sound effect 8's record, for picking up a mask."
  },
  {
   "address": 22433,
   "type": "line",
   "text": "Sound effect 9's record, for picking up a snake brooch."
  },
  {
   "address": 22453,
   "type": "line",
   "text": "Sound effect 10's record, for a player dying (player_dies)."
  },
  {
   "address": 22473,
   "type": "line",
   "text": "Sound effect 11's record, for a cabbala trap going off (trap_fire)."
  },
  {
   "address": 22493,
   "type": "line",
   "text": "Sound effect 12's record, for picking up a key or a special key. The LDA at $5663 in sfx_start was assembled with this address."
  },
  {
   "address": 22513,
   "type": "line",
   "text": "Sound effect 13's record, for drinking restorative fluid."
  },
  {
   "address": 22533,
   "type": "line",
   "text": "Sound effect 14's record, for the low-energy warnings (lose_energy) and, six times over, finding Corrine (enter_room)."
  },
  {
   "address": 22553,
   "type": "line",
   "text": "Ends the playing effect when its duration runs out (entered from sfx_update with X = 0): clears sfx_on, zeroes the frequencies of voices 1 and 3, and sets sfx_unused_1 and sfx_unused_2 to 1."
  },
  {
   "address": 22576,
   "type": "line",
   "text": "Steps the playing sound effect once a frame, called from the play-area raster interrupt ($7E12). Does nothing unless sfx_on; stops the effect when its frame count sfx_duration reaches zero; stirs the random generator. While the step counter sfx_step runs it sweeps voice 1 by sfx_sweep1 and voice 3 by sfx_sweep3 each frame, up or down by the sign of sfx_dir1 and sfx_dir3; when it runs out and repeats remain, it restarts both voices at their start frequencies (adding the random byte to voice 1's high byte when sfx_random is set) and starts a new step; with no repeats left the sound holds until its duration ends."
  },
  {
   "address": 22782,
   "type": "line",
   "text": "X saved by sfx_start and given back on return."
  },
  {
   "address": 22783,
   "type": "line",
   "text": "Non-zero while a sound effect plays; set by sfx_start, cleared by sfx_stop and sfx_reset. sfx_update does nothing while it is zero."
  },
  {
   "address": 22784,
   "type": "line",
   "text": "Zeroed by sfx_start and set to 1 by sfx_stop; no instruction in the game reads it."
  },
  {
   "address": 22785,
   "type": "line",
   "text": "A second flag like sfx_unused_1: zeroed by sfx_start, set to 1 by sfx_stop, and read by nothing."
  },
  {
   "address": 22786,
   "type": "line",
   "text": "Work copy of the playing effect's record, first byte: frames left to play. sfx_update counts it down and stops the effect at zero. $5902-$5915 is the whole copy, filled by sfx_start."
  },
  {
   "address": 22787,
   "type": "line",
   "text": "Frames per step; sfx_step is reloaded from it at each repeat."
  },
  {
   "address": 22788,
   "type": "line",
   "text": "Voice 1 start frequency, low byte."
  },
  {
   "address": 22789,
   "type": "line",
   "text": "Voice 1 start frequency, high byte; at a repeat, when sfx_random is set, the random byte is added to it (no CLC comes first, so a carry left by the code before can add one more)."
  },
  {
   "address": 22790,
   "type": "line",
   "text": "Voice 3 start frequency, low byte."
  },
  {
   "address": 22791,
   "type": "line",
   "text": "Voice 3 start frequency, high byte."
  },
  {
   "address": 22792,
   "type": "line",
   "text": "Voice 1 attack/decay ($D405)."
  },
  {
   "address": 22793,
   "type": "line",
   "text": "Voice 3 attack/decay ($D413)."
  },
  {
   "address": 22794,
   "type": "line",
   "text": "Voice 1 control byte without its gate bit ($D404); sfx_start writes it, then it plus one to restart the note."
  },
  {
   "address": 22795,
   "type": "line",
   "text": "Voice 3 control byte without its gate bit ($D412)."
  },
  {
   "address": 22796,
   "type": "line",
   "text": "Voice 1 pulse width, high byte ($D403)."
  },
  {
   "address": 22797,
   "type": "line",
   "text": "Voice 3 pulse width, high byte ($D411)."
  },
  {
   "address": 22798,
   "type": "line",
   "text": "Voice 1 frequency change per frame, low byte."
  },
  {
   "address": 22799,
   "type": "line",
   "text": "Voice 1 frequency change per frame, high byte."
  },
  {
   "address": 22800,
   "type": "line",
   "text": "Voice 3 frequency change per frame, low byte."
  },
  {
   "address": 22801,
   "type": "line",
   "text": "Voice 3 frequency change per frame, high byte."
  },
  {
   "address": 22802,
   "type": "line",
   "text": "Voice 1 sweep: 0 none, positive up, negative ($80-$FF) down."
  },
  {
   "address": 22803,
   "type": "line",
   "text": "Voice 3 sweep: 0 none, positive up, negative down."
  },
  {
   "address": 22804,
   "type": "line",
   "text": "Repeats left: when a step ends and this is non-zero, sfx_update counts it down and restarts both voices at their start frequencies."
  },
  {
   "address": 22805,
   "type": "line",
   "text": "Non-zero to add the random byte to the high byte of voice 1's start frequency at each repeat."
  },
  {
   "address": 22806,
   "type": "line",
   "text": "Frames left in the current step; reloaded from sfx_step_len."
  },
  {
   "address": 22807,
   "type": "line",
   "text": "Voice 1's current frequency, low byte, as swept."
  },
  {
   "address": 22808,
   "type": "line",
   "text": "Voice 1's current frequency, high byte."
  },
  {
   "address": 22809,
   "type": "line",
   "text": "Voice 3's current frequency, low byte."
  },
  {
   "address": 22810,
   "type": "line",
   "text": "Voice 3's current frequency, high byte."
  },
  {
   "address": 22811,
   "type": "line",
   "text": "Steps a 32-bit shift register (rand_0 to rand_3) once and returns its top byte rand_0 in A: the new bit, shifted in at the bottom of rand_3, is the exclusive OR of bits 3 and 6 of rand_0, formed with an add. Only sfx_update calls it, once a frame while an effect plays, and only sfx_update uses the result, for the random pitch of an effect's repeats."
  },
  {
   "address": 22836,
   "type": "line",
   "text": "Random generator state, the byte random returns (most significant of the four)."
  },
  {
   "address": 22837,
   "type": "line",
   "text": "Random generator state, second byte."
  },
  {
   "address": 22838,
   "type": "line",
   "text": "Random generator state, third byte."
  },
  {
   "address": 22839,
   "type": "line",
   "text": "Random generator state, least significant byte."
  },
  {
   "address": 22840,
   "type": "line",
   "text": "Waits for raster line $F0, fills the whole screen $0400-$07FF with character 0, then the panel rows 0-5 ($0400-$04EF) with spaces in white, and falls into clear_message. Called at every room entry (enter_room) and by the instructions."
  },
  {
   "address": 22871,
   "type": "line",
   "text": "Entry used by the title menus with X = $EF: fills the panel rows 0-5 with spaces in white and falls into clear_message."
  },
  {
   "address": 22892,
   "type": "line",
   "text": "Blanks the message line (row 5, $04C8-$04EF) to white spaces and resets the scroller's indexes msg_index and msg_count to 0, so the scroller starts the message msg_ptr points at. Every message the game shows is set up by storing its address in msg_ptr ($7E61/$7E62) and calling this, with interrupts off."
  },
  {
   "address": 22916,
   "type": "line",
   "text": "Draws the current room's floor decorations. Takes the room's list from floor_ptrs (room number times two), up to five 3-byte records ended early by a zero: byte 0 is x (high nibble, in two-column units) and y (low nibble, in rows), byte 1 picks the piece (first character = (byte - $27) * 8 + $12), byte 2 is the count of pieces (high nibble) and the direction they run (low nibble: 0 up, 1 right, 2 down, 3 left). Each piece is 4 characters by 2 rows, drawn by floor_run."
  },
  {
   "address": 23015,
   "type": "line",
   "text": "Draws one floor record's run: run_count pieces from the cell at (cell_x, cell_y), each through cell_address and put_block, stepping two cells in direction dir after each."
  },
  {
   "address": 23073,
   "type": "line",
   "text": "Draws the current room's inner walls. Saves the address of the room's list from wall_ptrs in wall_list and reads up to ten 3-byte records ended early by a zero: byte 0 is x and y, byte 1 is the run length (high nibble) and direction (low nibble, as draw_floor), byte 2 bit 7 hides the record (walls a trap has removed), bits 4-6 the wall style (first character = style * 2 + 1, colour from it), bits 0-3 a kind; kind 4 marks door frames for door_record. Counts the walls drawn in walls_drawn."
  },
  {
   "address": 23200,
   "type": "line",
   "text": "Draws a run of 2-character wall pieces from (cell_x, cell_y): for each of run_count pieces, cell_address, door_record and put_block, then one cell in direction dir. Used by draw_walls, draw_border, open_exits and trap_wall."
  },
  {
   "address": 23249,
   "type": "line",
   "text": "Draws the room's outer wall in the character and colour draw_walls left in char_code and colour_ofs, those of the room's last wall record, removed or not (18 pieces along the top and the bottom, 16 down each side), then takes the room's exits from exit_bits (two rooms to a byte, the high nibble for an even room) into exits and falls into open_exits with character 0 to cut the doorways."
  },
  {
   "address": 23369,
   "type": "line",
   "text": "Draws, for each bit of exits, a 2-piece run of character char_code across that doorway: bit 3 the top (x 8, y 0), bit 2 the bottom (x 8, y $11), bit 1 the left (x 0, y 8), bit 0 the right (x $11, y 8). draw_border calls it with character 0 to open the doorways; leave_room with character 3 to close every doorway but the one a player leaves by."
  },
  {
   "address": 23500,
   "type": "line",
   "text": "Called for each wall piece wall_run draws: when the wall's kind is 4 and the screen already holds a character there, appends the cell's x, y and that character to door_cells (3 bytes each, count in door_cells_len) so trap_fire can put them back."
  },
  {
   "address": 23544,
   "type": "line",
   "text": "Places the current room's monster generators. Saves the room's list address from gen_ptrs in gen_list and reads up to five 3-byte records ended early by a zero: byte 0 x and y, byte 1 the generator's look (high nibble: 1 draws shape $50E2, else $5112) and the kind of monster it makes (low nibble). For each it sets gen_hits to 5 and fills gen_kind, gen_x, gen_y and gen_phase, then draws the 3-by-2 shape into characters $82 + 6n, saving the background in gen_save + 6n. Counts the generators in gen_count."
  },
  {
   "address": 23761,
   "type": "line",
   "text": "Places the current room's objects. Saves the room's list address from obj_ptrs in obj_list and reads up to eight 3-byte records ended early by a zero: byte 0 x and y, byte 1 the object's type (bit 7 set: already taken, skipped), byte 2 its class (high nibble: 1 collected or opened, 2 solid, any other a cabbala trap) and a flag (bit 2 of the low nibble: removed when a trap goes off). Each object gets characters $42 + 8n and save buffer obj_save + 8n and is drawn by draw_object. Counts the records read in obj_count."
  },
  {
   "address": 23911,
   "type": "line",
   "text": "Draws object type char_code at (cell_x, cell_y): the width and the colour row come from the type (types 0-1 two characters wide, 2-8 three, 9 and up four; colour offset from a chain of comparisons), the shape from obj_shapes, then falls into draw_actor."
  },
  {
   "address": 24068,
   "type": "line",
   "text": "Draws an actor: chars_address for its first character, then draw_saved."
  },
  {
   "address": 24071,
   "type": "line",
   "text": "Draws an actor at (cell_x, cell_y): cell_address, compose (save the background and build the actor's characters over it) and put_actor. Entered here by move_monster, which has set the character address already."
  },
  {
   "address": 24081,
   "type": "line",
   "text": "Spawns monsters. Counts spawn_timer up each pass of the main loop; when it reaches spawn_period (50) it takes generator gen_next (in turn), and if that generator still stands and fewer than ten monsters are out, tries the space two rows above it, then right, below and left (spawn_up, spawn_right, spawn_down, spawn_left). In the first free space it fills the first empty slot of the monster tables (mon_hp, mon_x, mon_y, mon_phase, mon_kind), giving the monster kind-dependent hit points (kind, or kind - 2 from kind 4 up) and shape, and draws it into characters $A0 + 8n."
  },
  {
   "address": 24215,
   "type": "line",
   "text": "Meant to clear the new monster's direction, this stores into mon_dir indexed by X, which still holds the generator's number rather than the new monster's slot (Y); the new monster keeps the direction its slot last had."
  },
  {
   "address": 24417,
   "type": "line",
   "text": "Loads cell_x and cell_y with the position of generator gen_cur."
  },
  {
   "address": 24433,
   "type": "line",
   "text": "Loads cell_x and cell_y with the position of monster gen_cur (the same index variable serves both)."
  },
  {
   "address": 24449,
   "type": "line",
   "text": "Returns in A the distance, in cells across plus cells down, from monster gen_cur to the point (target_x, target_y)."
  },
  {
   "address": 24502,
   "type": "line",
   "text": "Moves one monster a pass, mon_next in turn (0-9). An empty slot only costs a short delay. Otherwise the target is player A (Agravain); in a two-player game player B (Storm) when he is nearer. The player's record is loaded into the work copy, step_monster moves the monster toward him, and the work copy is stored back."
  },
  {
   "address": 24619,
   "type": "line",
   "text": "Moves monster gen_cur one cell toward the player in the work copy (p_x, p_y), first up or down, then left or right, each only where row_test or column_test finds nothing in the way (a player there is charged by touch_damage instead); records the direction of the last step taken in dir, then redraws the monster at the new place with its kind's drawer."
  },
  {
   "address": 24897,
   "type": "line",
   "text": "Moves monster gen_cur's picture: points restore_bg and compose at its save buffer mon_save + 8n, takes its characters $A0 + 8n, puts back the background at the old cell, stores the new cell (target_x, target_y) in mon_x and mon_y, and draws it there."
  },
  {
   "address": 24967,
   "type": "line",
   "text": "Drawer for monster kind 1: 4 characters wide, colour row 0, shape $4F82 + 64 * direction (four facings)."
  },
  {
   "address": 25003,
   "type": "line",
   "text": "Drawer for kind 2: 3 characters wide, colour row $10; flips bit 7 of mon_kind each move to alternate between shapes $50B2 and $5082."
  },
  {
   "address": 25062,
   "type": "line",
   "text": "Drawer for kind 3: 4 characters wide, colour row 0, shape $51C2 + 64 * direction."
  },
  {
   "address": 25098,
   "type": "line",
   "text": "Drawer for kind 4: 3 characters wide, colour row 8; flips bit 7 of mon_kind each move to alternate between shapes $52C2 and $52F2."
  },
  {
   "address": 25157,
   "type": "line",
   "text": "Drawer for kind 5: 4 characters wide, colour row $10; adds $10 to mon_kind each move, cycling the high nibble through 0-3 (back to $05 from $45), and draws frame $5532 + 64 * that nibble."
  },
  {
   "address": 25209,
   "type": "line",
   "text": "Drawer for kind 6: 4 characters wide, shape $5432 + 64 * direction and colour row $30 + 8 * direction."
  },
  {
   "address": 25252,
   "type": "line",
   "text": "When a step test found a player's character (player_hit), adds the touching monster's damage to that player's drain: characters $3A-$41 are player A's, charged to drain_a, others ($32-$39) to drain_b. The damage is mon_kind doubled twice in decimal mode, so it counts the animation bits of kinds 2, 4 and 5 as well as the kind."
  },
  {
   "address": 25284,
   "type": "line",
   "text": "Returns in A four times mon_kind of monster gen_cur, added in decimal mode (and leaves twice it in player_hit); called by touch_damage, which ends the decimal mode."
  },
  {
   "address": 25302,
   "type": "line",
   "text": "Sets char_code to $FF, the spawn tests' blocked mark, when the last row_test or column_test found something in the way (actor_char non-zero)."
  },
  {
   "address": 25313,
   "type": "line",
   "text": "Tests the two rows below a generator (y + 3, then y + 2) for a new monster; char_code is $FF when they are blocked or off the play area. When y + 3 is $11 or more it gives up at once and leaves cell_y at y + 3; otherwise it leaves cell_y at y + 2. Either way spawn takes the generator's cell again before the next test."
  },
  {
   "address": 25350,
   "type": "line",
   "text": "Tests the two strips to the left of a generator (x - 1, then x - 2); $FF in char_code when blocked or x - 1 is below 2. Leaves cell_x at x - 2."
  },
  {
   "address": 25381,
   "type": "line",
   "text": "Shared exit of the spawn tests: marks the space blocked (char_code = $FF)."
  },
  {
   "address": 25387,
   "type": "line",
   "text": "Tests the two strips to the right of a generator (x + 3, then x + 2); $FF in char_code when blocked or past x $10."
  },
  {
   "address": 25427,
   "type": "line",
   "text": "Tests the two rows above a generator (y - 1, then y - 2); $FF in char_code when blocked or y - 1 is below 2."
  },
  {
   "address": 25458,
   "type": "line",
   "text": "Sets the block size for erasing an object of type ($FB),y: two rows, and 2 characters wide for types 0-1, 3 for types 2-8, 4 for type 9 and up (the widths draw_object gives them)."
  },
  {
   "address": 25489,
   "type": "line",
   "text": "Tests the 4 characters of the row at (cell_x, cell_y) for an actor stepping up or down. Clears actor_char and player_hit, then leaves the result in actor_char: a wall (characters 1-$11) or a generator or monster ($82 and up) gives $FF; a player ($32-$41) gives $FF and its character in player_hit; an object ($42-$81) gives its character; floor ($12-$31) and empty space pass."
  },
  {
   "address": 25545,
   "type": "line",
   "text": "The same test as row_test for a sideways step, on the 2-character strip at (cell_x, cell_y) and the row below it (offsets 0, 1, 40 and 41)."
  },
  {
   "address": 25614,
   "type": "line",
   "text": "Puts back the background saved under an actor at (cell_x, cell_y), blk_w wide and blk_h high, from the save buffer whose address is patched into $641B and $6435 by the caller, starting at offset X. Waits for raster line $F0 first so the change is not seen half drawn."
  },
  {
   "address": 25627,
   "type": "line",
   "text": "Operand of the LDA at $641A: the save buffer restore_bg reads (mon_save, obj_save, gen_save or the player's p_save); callers patch it together with $6435."
  },
  {
   "address": 25628,
   "type": "line",
   "text": "High byte of the save buffer address in restore_bg's first loop."
  },
  {
   "address": 25653,
   "type": "line",
   "text": "Operand of the LDA at $6434, the second row of restore_bg's save buffer, patched with $641B."
  },
  {
   "address": 25654,
   "type": "line",
   "text": "High byte of the save buffer address in restore_bg's second loop."
  },
  {
   "address": 25669,
   "type": "line",
   "text": "Turns the cell (cell_x, cell_y) into a screen address in $FD/$FE and the matching colour RAM address in $03/$04: the row from row_addr (cell_y), plus cell_x * 2 columns. X is kept."
  },
  {
   "address": 25681,
   "type": "line",
   "text": "The second half of cell_address, entered with A = a column and X = a row times two: used for shots, which move by single columns."
  },
  {
   "address": 25706,
   "type": "line",
   "text": "Writes a block of characters at $FD/$FE: blk_w characters across and blk_h rows (1 or 2), numbered up from char_code (all character 0 when char_code is 0, which erases), with colours taken in turn from colour_rows + colour_ofs."
  },
  {
   "address": 25761,
   "type": "line",
   "text": "Waits for the frame flag frame_flag to be set (raster line $E8) and then cleared (line $FF): returns once a frame, below the play area. Used as the game's clock: the main loop calls it twice a pass."
  },
  {
   "address": 25772,
   "type": "line",
   "text": "A busy wait of about 2,600 loop steps (X 256 times, Y 10), keeping X and Y; move_monster spends it on an empty slot so a pass takes about as long with fewer monsters."
  },
  {
   "address": 25795,
   "type": "line",
   "text": "Patches the destination of compose's store ($658E/$658F) with the address of character actor_char in the set at $0800 (actor_char * 8 + $0800)."
  },
  {
   "address": 25833,
   "type": "line",
   "text": "Builds a single character with compose's inner loop: used by shot_step for the shot's character."
  },
  {
   "address": 25850,
   "type": "line",
   "text": "Builds an actor's characters over the background. First saves the blk_w by blk_h background characters at $FD into the save buffer (patched at $6513); then for each character builds a new character from three sources: the shape byte (operand $6585), ANDed with a mask chosen by the background character (operand $6588) and ORed with the background character's own pattern (operand $658B), stored as the next character from the one chars_address set (operand $658E). The mask is floor_masks + (character - $11) * 8, worked out in eight bits: character 0 and the shots' $FE and $FF take the first mask, and so does $31, whose product $100 wraps to 0."
  },
  {
   "address": 25875,
   "type": "line",
   "text": "Operand of compose's STA at $6512, the save buffer for the background under the actor; patched by every caller."
  },
  {
   "address": 25876,
   "type": "line",
   "text": "High byte of compose's save buffer address."
  },
  {
   "address": 25989,
   "type": "line",
   "text": "Operand of the LDA at $6584: the actor's shape, patched by every drawer; the $5042 assembled here is not a shape start."
  },
  {
   "address": 25990,
   "type": "line",
   "text": "High byte of the shape address compose reads."
  },
  {
   "address": 25992,
   "type": "line",
   "text": "Operand of the AND at $6587: the mask for the background character under this character, from the table floor_masks."
  },
  {
   "address": 25993,
   "type": "line",
   "text": "High byte of the mask address."
  },
  {
   "address": 25995,
   "type": "line",
   "text": "Operand of the ORA at $658A: the background character's own pattern in the set at $0800."
  },
  {
   "address": 25996,
   "type": "line",
   "text": "High byte of the background character's address."
  },
  {
   "address": 25998,
   "type": "line",
   "text": "Operand of the STA at $658D: the character being built, set by chars_address and stepped on by compose; the $0D00 assembled here is character $A0."
  },
  {
   "address": 25999,
   "type": "line",
   "text": "High byte of the address of the character being built."
  },
  {
   "address": 26033,
   "type": "line",
   "text": "Writes the actor's characters to the screen (put_block, numbered from actor_char) and advances actor_char by char_step for the next actor."
  },
  {
   "address": 26050,
   "type": "line",
   "text": "Puts both players at their starting cells for a new game: player A (Agravain) at x 7, y 7 and player B (Storm) at x 9, y 7, both facing up (direction 0)."
  },
  {
   "address": 26081,
   "type": "line",
   "text": "Draws each living player at room entry: player A unless a_dead, then player B in a two-player game unless b_dead, each by loading its record into the work copy, put_player and storing it back."
  },
  {
   "address": 26138,
   "type": "line",
   "text": "Erases the player in the work copy (restore_bg from p_save) and falls into put_player to draw him again; called after every turn and step."
  },
  {
   "address": 26169,
   "type": "line",
   "text": "Draws the player in the work copy at (p_x, p_y): saves the 4-by-2 background under him into p_save, picks the colour (player A one colour row, 8; player B the row $50 + 8 * direction) and the shape for his facing (base + 64 * p_dir; the base and his first character are patched in at $668A, $668F and $663A by load_a and load_b), and composes him into characters $3A-$41 (A) or $32-$39 (B)."
  },
  {
   "address": 26170,
   "type": "line",
   "text": "Operand of put_player's LDA #$3A: the player's first character, $3A for player A, $32 for player B, patched by load_a and load_b."
  },
  {
   "address": 26250,
   "type": "line",
   "text": "Operand of the ADC #$22 in put_player: low byte of the player's shape base, $22 for player A ($5322) and $82 for player B ($4E82)."
  },
  {
   "address": 26255,
   "type": "line",
   "text": "Operand of the LDA #$53 in put_player: high byte of the player's shape base."
  },
  {
   "address": 26275,
   "type": "line",
   "text": "Copies player A's record (Agravain, joystick 1) into the work copy the player routines use: position and direction, the background under him, his shot, score, armour, energy, dead flag and warning state; patches put_player for his shape and characters, sets cur_player to 0, reads joystick port 1 ($DC01) into joy and sets shot_char to $FE."
  },
  {
   "address": 26395,
   "type": "line",
   "text": "Stores the work copy back into player A's record, and reprints the score (print_score) when it has changed."
  },
  {
   "address": 26506,
   "type": "line",
   "text": "As load_a for player B (Storm, joystick 2): his record into the work copy, shape $4E82 and characters $32-$39, cur_player 1, joystick port 2 ($DC00) into joy, shot_char $FF."
  },
  {
   "address": 26626,
   "type": "line",
   "text": "Stores the work copy back into player B's record, reprinting the score when it has changed."
  },
  {
   "address": 26737,
   "type": "line",
   "text": "Runs each player's controls, every other pass of the main loop: counts turn_delay down, then for player A (when present in the room and alive) load_a, control and save_a; in a two-player game the same for player B."
  },
  {
   "address": 26793,
   "type": "line",
   "text": "One player's controls for this pass: movement and magic (joystick), then a new shot when fire is held without down, the player has no shot in flight (shot_dir negative) and then: sound 6, and the shot starts just outside him on the side he faces (facing up, two columns in from his left edge and a row above him; facing right, the column after his four and his lower row; facing down, one column in and the row below him; facing left, the column before him and his top row) and travels his way, drawn at once by shot_step. Shots move by single columns and rows, not cells."
  },
  {
   "address": 26895,
   "type": "line",
   "text": "Common end of the four shot starts: draws the new shot at once with shot_step."
  },
  {
   "address": 26899,
   "type": "line",
   "text": "Acts on the joystick bits in joy (0 = pressed). Left and right turn the player a quarter left or right (direction 0 up, 1 right, 2 down, 3 left), at most once every two passes (turn_delay), and redraw him. Up moves him one cell the way he faces (walk). Down with fire uses player A's scroll or player B's amulet: if he has one it is used up, and then, if monsters are out, the monster slots are cleared and the monsters erased, with sound 7. The loop checks only as many slots as mon_count says are out, from slot 0, so a monster in a higher slot after an earlier one was shot survives the magic, while mon_count is still set to 0. Down alone is player A's mask: if he has one it is used up and every generator in the room is removed, with sound 7; player B's down alone does nothing. The magic items are shared counters (amulets, masks, scrolls), not each player's own, and nothing resets them for a new game."
  },
  {
   "address": 27127,
   "type": "line",
   "text": "Moves the player one cell forward: tests the row or strip he would step into (row_test, column_test). A wall, a monster, a generator or the other player stops him; an object goes to touch_object first (which can also stop him); then he is erased, his position stepped and drawn again."
  },
  {
   "address": 27274,
   "type": "line",
   "text": "The player has walked into an object (its character in actor_char). Works out which object of the room's list it is (character - $42, divided by eight) and reads its class: class 2 is solid and stops the player; a class other than 1 is a cabbala symbol: its message and trap_fire. Class 1 is collected or opened: a door of type $0D takes a key (keys counted down), type $0F needs the special key skey_7 and type $1A skey_8 (neither is used up), type $1B needs three brooches; without them the door's message plays with sound 0 and the player stops (two return addresses dropped). Otherwise the object is marked taken in the room's list (bit 7 of its type), erased, and its effect applied by obj_effect."
  },
  {
   "address": 27457,
   "type": "line",
   "text": "Exactly three. The counter carries over from game to game (game_init never resets it), so brooches picked up in a later game can take it past 3 and keep the laboratory shut until the game is loaded again."
  },
  {
   "address": 27529,
   "type": "line",
   "text": "Applies a collected object's effect, by type, each with its message on the message line and a sound: food ($16 or $19) adds 200 energy; armour (2) adds 2 to player A's armour or 3 to player B's while it is 9 or less (the test is against $0D, and in decimal the armour goes from 9 to 10), so A's stops at 10 or 11 and B's at 10 to 12; a chest ($13) adds 1000 to the score; restorative fluid (1) adds 500 energy; an amulet (9), a mask (4), a scroll (0), a key (3), the special keys (7 and 8) and a brooch ($17) each add one to their counter, a counter both players share. Opened doors and every other type have no effect beyond disappearing. Energy, armour and score are decimal."
  },
  {
   "address": 27896,
   "type": "line",
   "text": "A cabbala symbol's trap, with sound 11: in the current room, every wall whose kind has bit 2 set is erased and marked removed in the room's list (trap_wall); the characters such walls covered are put back from door_cells; every object whose flag has bit 2 set and that is not taken is erased and marked taken (trap_object). The marks are in the room tables, so the change lasts until a new game resets them."
  },
  {
   "address": 28063,
   "type": "line",
   "text": "Erases one object for trap_fire: marks it taken (bit 7 of its type) and puts back the background from its save buffer obj_save."
  },
  {
   "address": 28126,
   "type": "line",
   "text": "Erases one wall record for trap_fire: marks it removed (bit 7 of its third byte) and redraws its run with character 0."
  },
  {
   "address": 28181,
   "type": "line",
   "text": "Shows the twelve pages of instructions. With the screen blanked it clears the screen, prints the heading, points the page reader's text pointer at the first page ($6EF7) and turns the screen on; then show_pages for the five story pages, a picture of Agravain (shape $5322) and his controls page, a picture of Storm ($4E82) and his, then the object pictures listed in ins_widths/ins_shape_lo/ins_shape_hi/ins_colours, two to a page, each page followed by its text, ending with the brooches page; then blanks the screen."
  },
  {
   "address": 28320,
   "type": "line",
   "text": "Picture loop of instructions: a width of 0 ends a page (show_pages), $FF ends the list; otherwise the picture is drawn at x 7, then the next one at x 10."
  },
  {
   "address": 28407,
   "type": "line",
   "text": "The instruction pages' text, $6EF7-$7450, read by show_pages: ASCII capitals, $0D for a new line, $00 at the end of a page (the reader waits for fire there) and $FF where a picture comes (the reader returns to instructions). Five pages of story, Agravain's controls, Storm's controls, then generators, amulets and scrolls, food, energy bottles and brooches."
  },
  {
   "address": 28572,
   "type": "line",
   "text": "Instruction page 2: Storm enlists Agravain Undead, who knows the way to Una Cum's lair. Ends with $00, where show_pages waits for fire."
  },
  {
   "address": 28720,
   "type": "line",
   "text": "Instruction page 3: Agravain shows Storm the ruined abbey's window onto another dimension."
  },
  {
   "address": 28872,
   "type": "line",
   "text": "Instruction page 4: Una's abode lies beneath the abbey, seen through the floorboards."
  },
  {
   "address": 28982,
   "type": "line",
   "text": "Instruction page 5, the last of the story, then $FF at $7197: show_pages returns, and instructions draws Agravain before the next page."
  },
  {
   "address": 29080,
   "type": "line",
   "text": "Instruction page 6: Agravain's controls on joystick 1 (fire shoots, left and right rotate, up moves, down uses a mask, down and fire a scroll), then $FF: Storm's picture follows."
  },
  {
   "address": 29287,
   "type": "line",
   "text": "Instruction page 7: Storm's controls on joystick 2 (down and fire fires an amulet), then $FF: the two generators' pictures follow."
  },
  {
   "address": 29468,
   "type": "line",
   "text": "Instruction page 8: generators produce monsters, removed for a while by shooting or by mask magic; then $FF for the amulet and scroll pictures."
  },
  {
   "address": 29572,
   "type": "line",
   "text": "Instruction page 9: amulets and scrolls destroy all monsters; then $FF for the two foods."
  },
  {
   "address": 29621,
   "type": "line",
   "text": "Instruction page 10: food raises energy; then $FF for the energy bottle."
  },
  {
   "address": 29660,
   "type": "line",
   "text": "Instruction page 11: energy bottles hold restorative fluid; then $FF for the brooch."
  },
  {
   "address": 29703,
   "type": "line",
   "text": "Instruction page 12: three snake brooches open the door to the wizard's laboratory; the $FF at $7450 ends the instructions."
  },
  {
   "address": 29777,
   "type": "line",
   "text": "PRESS FIRE TO CONTINUE., printed at the foot of each instruction page by show_pages."
  },
  {
   "address": 29800,
   "type": "line",
   "text": "*** STORM INSTRUCTIONS ***, printed in the panel by ins_clear."
  },
  {
   "address": 29826,
   "type": "line",
   "text": "Widths, in characters, of the pictures on the instruction pages, read by instructions: 0 ends a page, $FF ends the list. The pictures: two generators; an amulet and a scroll; two kinds of food; an energy bottle; a brooch."
  },
  {
   "address": 29839,
   "type": "line",
   "text": "Low bytes of the pictures' shape addresses (with ins_shape_hi: $50E2 and $5112, the two generators; $49A4 amulet, $4814 scroll; $4DA4 and $4CE4 food; $4834 energy bottle; $4D24 brooch)."
  },
  {
   "address": 29852,
   "type": "line",
   "text": "High bytes of the pictures' shape addresses, as ins_shape_lo."
  },
  {
   "address": 29865,
   "type": "line",
   "text": "Colour row of each picture on the instruction pages."
  },
  {
   "address": 29878,
   "type": "line",
   "text": "Waits for a frame, clears the play area and the rows below the panel (ins_wipe) and prints the instructions' heading in the panel."
  },
  {
   "address": 29898,
   "type": "line",
   "text": "Fills $04F0-$07FF with character 0: the screen from the end of the message line down."
  },
  {
   "address": 29917,
   "type": "line",
   "text": "Prints instruction text from the pointer at $74F6/$74F7, a character at a time from row 12, column 1 (characters $A0-$DF, the copy of the ROM font), a new line at $0D. At $00 it prints PRESS FIRE TO CONTINUE. on row 22, waits for fire to be pressed and let go on either joystick, clears the page and carries on with the next; at $FF it steps past it and returns to its caller."
  },
  {
   "address": 29942,
   "type": "line",
   "text": "Operand of the LDA at $74F5: the instruction text pointer, set to $6EF7 by instructions and advanced past each page and picture mark by show_pages."
  },
  {
   "address": 29943,
   "type": "line",
   "text": "High byte of the instruction text pointer."
  },
  {
   "address": 30069,
   "type": "line",
   "text": "Operand of the STA at $7574: the screen address of the next character of instruction text, reset to $05E1 at each call of show_pages and moved down a row at each $0D."
  },
  {
   "address": 30070,
   "type": "line",
   "text": "High byte of the text screen address."
  },
  {
   "address": 30074,
   "type": "line",
   "text": "Operand of the STA at $7579: the colour RAM address matching $7575."
  },
  {
   "address": 30075,
   "type": "line",
   "text": "High byte of the text colour address, kept at the screen's plus $D4."
  },
  {
   "address": 30081,
   "type": "line",
   "text": "Copies the character ROM's first 458 bytes ($D000-$D1C9: the upper-case set's characters 0-$38, @, the letters, punctuation and the digits 0-8, and the top two rows of the 9) into the game's set at $0D00-$0EC9, as characters $A0-$D9, with the character ROM switched in for the CPU ($01 bit 2 cleared) and interrupts off. Text on the play area (instructions) is printed in those characters; in play the monsters' pictures are built over them."
  },
  {
   "address": 30124,
   "type": "line",
   "text": "Where the loader hands over (JMP $75AC): jumps to setup_vectors."
  },
  {
   "address": 30127,
   "type": "line",
   "text": "Start of every game, and where a game ends up: resets the stack, blanks the screen at the next frame, copies the ROM font in, sets players to 2 and title_mode, and runs game_init (which draws the first room behind the title). Then prints the title's three lines in the panel, sets the message line to scroll the credits, turns the screen on, silences the sound effects and starts the music. Waits for fire on either joystick (pressed and let go), then asks for the number of players (left one, right two, on either joystick) and whether to show the instructions (up yes, down no), waits for the stick to be let go, clears title_mode, stops the music, blanks the screen and falls into game_init."
  },
  {
   "address": 30347,
   "type": "line",
   "text": "The number of players chosen: prints the instructions question."
  },
  {
   "address": 30423,
   "type": "line",
   "text": "Waits until neither joystick is pushed up or down, then leaves the title."
  },
  {
   "address": 30457,
   "type": "line",
   "text": "Sets up a new game: puts back every room's walls and objects (reset_walls, reset_objects), places the players, zeroes the scores, dead flags, warnings, armour, the hunger timer and the players' background saves, stops timer A of both CIAs (control registers $DC0E and $DD0E to 0; the zeros written to their interrupt registers change nothing) and installs the raster interrupt (irq at $7D80, display list from the start, first line 0), sets the video chip (multicolour text, character set at $0800, black, multicolour colours 8 and 7), starts at map_index $46 (room 0) with spawn_period 50 and energies of 2000 for player A and 2500 for player B (0 in a one-player game), silences the sound effects and falls into enter_room. Keys, special keys, brooches, amulets, masks and scrolls are not reset: they carry over from one game to the next, and the first game after loading starts with the three keys and two scrolls the file was saved with."
  },
  {
   "address": 30662,
   "type": "line",
   "text": "Stores player B's starting energy."
  },
  {
   "address": 30668,
   "type": "line",
   "text": "Draws the room at map_index and starts play there: blanks the screen, puts both shots out, clears the screen, turns map_index into the room number room through room_map (a decimal number, tens and units) and points the message line at the room's description (room_msgs), clears the room's counters and the monster table, draws the floor, walls, border, generators, objects and players, and on the title returns there. In play it prints both scores and the panel's labels, resets the stack, turns the screen on at the next frame and, in room 99, ends the game: Corrine's message on the message line and sound 14 six times, 256 frames apart (about 25 seconds), then back to the title. Otherwise it falls into the main loop."
  },
  {
   "address": 30862,
   "type": "line",
   "text": "Turns the screen on at the start of a frame."
  },
  {
   "address": 30935,
   "type": "line",
   "text": "One pass of play: clears both drains; waits for a frame (wait_frame), then runs the players' controls (every other pass), the shots, one monster's move and the spawn timer; waits for another frame, then moves the shots again and checks the exits (room_exits). Then charges each player's drain (monsters' touches) with lose_energy, prints the energies, and every 25 passes takes the hunger toll: 2 from player A and 1 from player B. A pass takes at least two frames and longer when its work overruns one: 384 passes in 1,000 frames were counted in room 0 with six monsters out (live), so the toll came about every 1.3 seconds. Loops until every player is dead, then shows GAME OVER."
  },
  {
   "address": 31107,
   "type": "line",
   "text": "Builds the letters of GAME OVER from the character ROM into characters $32-$3B (the players' own, over which nothing is left to draw), prints them in white in the middle of the play area, and waits for fire or about three seconds (150 frames) before going back to the title."
  },
  {
   "address": 31218,
   "type": "line",
   "text": "Checks whether the players have left the room and, if so, enters the next. Each living player is tested at the room's edge (edge_check). When every living player has gone out, map_index moves by room_step (one room left or right, sixteen up or down), the left-the-room mark is cleared from both players' x, and enter_room draws the new room."
  },
  {
   "address": 31320,
   "type": "line",
   "text": "When the player in the work copy stands on the room's edge cell (x 0 or $10, y 0 or $10), sets the room step and where he will enter the next room (the opposite edge, in the middle: y 9 or x 9 for player A, 7 for player B), erases him, closes every other doorway of this room behind him with character 3 (open_exits with close_exits), plays sound 1 and shows THE FIRST PLAYER TO LEAVE CLOSES ALL OTHER DOORS. His new x is stored with bit 7 set: he is out of this room."
  },
  {
   "address": 31488,
   "type": "line",
   "text": "Common end of edge_check's four edges."
  },
  {
   "address": 31588,
   "type": "line",
   "text": "Puts back the character the shot covered (shot_under) at its column and row, unless that was a shot character itself ($FE or more) or the cell now holds a monster's character ($A0-$FD), which has been drawn over it since."
  },
  {
   "address": 31626,
   "type": "line",
   "text": "Moves both shots one step: player A's when he is in the room, then player B's in a two-player game, each through the work copy (shot_move). Called twice a pass by main_loop, so a shot moves a column or a row every frame."
  },
  {
   "address": 31664,
   "type": "line",
   "text": "Moves the work copy's shot, if one is in flight (shot_dir not negative): puts back what it covered, steps its column or row by its direction (0 up, 1 right, 2 down, 3 left), then shot_step."
  },
  {
   "address": 31707,
   "type": "line",
   "text": "Places the work copy's shot at (shot_col, shot_row). Off the play area (column 0 or past $21, row 0 or past $10) it ends. Over empty space, floor, or the other shot it is drawn: its character ($FE for player A, $FF for player B) is built from the background character with the bullet's pattern (character 7 of the set) through the mask table, like an actor, and put on the screen in colour $0A, the covered character kept in shot_under. A wall, an object or a player ends it. A generator or a monster is hit (shot_hit)."
  },
  {
   "address": 31865,
   "type": "line",
   "text": "Ends the work copy's shot: shot_dir = $FF."
  },
  {
   "address": 31871,
   "type": "line",
   "text": "The shot has hit character A. A monster ($A0 and up): its slot is (A - $A0) / 8 and it loses a hit point (mon_hp); at zero it is erased, with sound 7, the shooter scores one point (decimal) and mon_count goes down. A generator ($82-$9F): its number is (A - $82) / 6 and it loses one of its five hits (gen_hits); at zero it is erased, with sound 7 and the message GENERATORS REAPPEAR IF THE ROOM IS RE-ENTERED. Either way the shot ends."
  },
  {
   "address": 31939,
   "type": "line",
   "text": "Erases generator Y: reads its cell from the room's generator list (gen_list, 3 bytes a record) and puts back the 3-by-2 background from its save buffer gen_save + 6Y. Used by shot_hit and the mask."
  },
  {
   "address": 32012,
   "type": "line",
   "text": "shot_hit's monster branch."
  },
  {
   "address": 32066,
   "type": "line",
   "text": "Erases monster X (Y = 8X, its save buffer offset): puts back the background at its cell from mon_save, 3 characters wide for kinds 2 and 4 and 4 for the others. Used by shot_hit and the scroll and amulet magic."
  },
  {
   "address": 32128,
   "type": "line",
   "text": "The raster interrupt, installed at $0314 by game_init, so it runs after the KERNAL has saved the registers. Acknowledges the video chip, takes the next entry of irq_list (wrapping at its zero), patches that entry's routine into the JSR at $7DAA and sets the line of the next interrupt, then calls the routine and returns through the KERNAL's register restore (PLA, TAY, PLA, TAX, PLA, RTI). Four interrupts a frame: lines $58, $60, $E8 and $FF."
  },
  {
   "address": 32171,
   "type": "line",
   "text": "Operand of the JSR at $7DAA, low byte: the routine of this interrupt, patched from irq_list; the $7E16 assembled here is frame_mark."
  },
  {
   "address": 32172,
   "type": "line",
   "text": "High byte of the routine irq calls."
  },
  {
   "address": 32179,
   "type": "line",
   "text": "The raster interrupt's display list, 3 bytes an entry: the routine's high byte, its low byte, and the raster line for the next interrupt. At line $58 message_band ($7DC0, next at $60); at $60 play_band ($7DE7, next at $E8); at $E8 frame_mark ($7E16, next at $FF); at $FF panel_band ($7E1C, next at $58). A zero high byte sends irq back to the first entry."
  },
  {
   "address": 32192,
   "type": "line",
   "text": "Interrupt at line $58, the top of the message line: after a short delay, a blue background ($D021 = 6), the fine scroll msg_scroll put into $D016 (the old $D016 kept in msg_scroll for play_band), and the ROM font (screen $0400, characters $1000)."
  },
  {
   "address": 32231,
   "type": "line",
   "text": "Interrupt at line $60, the top of the play area: puts the play area's $D016 back (multicolour, 38 columns, unscrolled) and moves the message line's scroll on by two pixels for the next frame, selects the game's character set at $0800, a black background, and steps the sound effects (sfx_update)."
  },
  {
   "address": 32278,
   "type": "line",
   "text": "Interrupt at line $E8: sets frame_flag, which wait_frame waits for."
  },
  {
   "address": 32284,
   "type": "line",
   "text": "Interrupt at line $FF, below the play area, run through the bottom border into the panel at the top of the next frame: clears frame_flag, selects the ROM font and a red background for the panel, plays the music while title_mode is set, and moves the message line. When the scroll has come round to 7 it shifts row 5 left one character and adds the next character of the message (operand $7E61/$7E62, index msg_index): ASCII letters become screen codes ($41 and up minus $40). A message ends at a zero byte, or after $50 characters in play ($77 on the title); spaces follow until $78 characters have passed, and then the room's own description (room_msg) starts again."
  },
  {
   "address": 32353,
   "type": "line",
   "text": "Operand of the LDA at $7E60: the address of the message on the message line. Every message is shown by storing its address here and calling clear_message; panel_band puts room_msg back when one has run out."
  },
  {
   "address": 32354,
   "type": "line",
   "text": "High byte of msg_ptr."
  },
  {
   "address": 32418,
   "type": "line",
   "text": "Clears the removed mark (bit 7 of the third byte) of every wall record of all 100 rooms. Walks the lists end to end from room 0's (patching the address at $7EC4, $7ECB and $7ED0), a list ending at its zero byte or after ten records: it counts on the lists lying one after another in room order. The $179B assembled in those operands is never used; the start-up replaces it first."
  },
  {
   "address": 32452,
   "type": "line",
   "text": "Operand of the LDA at $7EC3 in reset_walls: the current room's wall list, set from wall_ptrs' first entry and moved on a list at a time."
  },
  {
   "address": 32453,
   "type": "line",
   "text": "High byte of reset_walls' list address at $7EC3."
  },
  {
   "address": 32459,
   "type": "line",
   "text": "reset_walls' list address for the LDA at $7ECA, patched with $7EC4."
  },
  {
   "address": 32460,
   "type": "line",
   "text": "High byte of the list address at $7ECA."
  },
  {
   "address": 32464,
   "type": "line",
   "text": "reset_walls' list address for the STA at $7ECF, patched with $7EC4."
  },
  {
   "address": 32465,
   "type": "line",
   "text": "High byte of the list address at $7ECF."
  },
  {
   "address": 32511,
   "type": "line",
   "text": "Clears the taken mark (bit 7 of the type byte) of every object record of all 100 rooms, walking the lists from room 0's as reset_walls does (eight records at most), patching $7F21, $7F27 and $7F2C. The $1E8E assembled in those operands is never used: the start-up replaces it with obj_ptrs' first entry."
  },
  {
   "address": 32545,
   "type": "line",
   "text": "Operand of the LDA at $7F20 in reset_objects: the current object list."
  },
  {
   "address": 32546,
   "type": "line",
   "text": "High byte of reset_objects' list address at $7F20."
  },
  {
   "address": 32551,
   "type": "line",
   "text": "reset_objects' list address for the LDA at $7F26."
  },
  {
   "address": 32552,
   "type": "line",
   "text": "High byte of the list address at $7F26."
  },
  {
   "address": 32556,
   "type": "line",
   "text": "reset_objects' list address for the STA at $7F2B."
  },
  {
   "address": 32557,
   "type": "line",
   "text": "High byte of the list address at $7F2B."
  },
  {
   "address": 32604,
   "type": "line",
   "text": "Prints the work copy's score as four digits in the panel's third row: player A's at column 2, player B's at column 24."
  },
  {
   "address": 32637,
   "type": "line",
   "text": "Prints the decimal byte in A as two digits at ($FD),Y and moves Y on two."
  },
  {
   "address": 32657,
   "type": "line",
   "text": "Prints both energies as four digits in the panel's third row, player A's at column 10 and player B's at column 32."
  },
  {
   "address": 32694,
   "type": "line",
   "text": "Takes drain from the energy of the player in the work copy, unless he is dead. Armour comes first: with armour greater than the drain nothing is lost and the armour stays; otherwise the armour goes down by one and the drain less the armour is taken (all decimal). Below zero he dies (player_dies). Under 1000 the first warning, under 500 a second (AGRAVAIN IS ABOUT TO DIE.. or STORM NEEDS FOOD BADLY, with sound 14), each once, counted in p_warn; at 1000 or more the count is cleared."
  },
  {
   "address": 32766,
   "type": "line",
   "text": "Always taken (the BCC before it was not), to jump over the cartridge signature at $8000."
  },
  {
   "address": 32768,
   "type": "line",
   "text": "A cartridge signature: the cold and warm start vectors ($80A1 twice) and CBM80 ($C3 $C2 $CD $38 $30). The KERNAL's reset jumps through the first vector when it finds the signature, so a reset that keeps the RAM restarts the game at restart instead of going to BASIC. RESTORE never gets as far: nmi takes the NMI first. The nine bytes sit inside lose_energy, which branches over them at $7FFE."
  },
  {
   "address": 32777,
   "type": "line",
   "text": "lose_energy, energy under 500: the second warning."
  },
  {
   "address": 32791,
   "type": "line",
   "text": "lose_energy, energy between 500 and 999: the first warning, once."
  },
  {
   "address": 32805,
   "type": "line",
   "text": "Shows the warning: sound 14 and the player's message."
  },
  {
   "address": 32846,
   "type": "line",
   "text": "The player in the work copy dies: energy 0, p_dead set, sound 10, erased from the screen, his position set to $FF (out of the room), and the border flashes for 80 frames."
  },
  {
   "address": 32929,
   "type": "line",
   "text": "The cartridge vectors' target: STOP-key update ($F6BC) and I/O initialise ($FDA3) in the KERNAL, acknowledges the second CIA, resets the stack and falls into setup_vectors."
  },
  {
   "address": 32942,
   "type": "line",
   "text": "Points the NMI at nmi ($0318, and at $FFFA in the RAM under the KERNAL nmi_ram), stops timer A of both CIAs and acknowledges them, sends CHROUT $08 to lock the character set, and goes to title."
  },
  {
   "address": 32990,
   "type": "line",
   "text": "The NMI handler, through the KERNAL's vector at $0318: acknowledges the second CIA and returns, so RESTORE does nothing."
  },
  {
   "address": 33014,
   "type": "line",
   "text": "The same acknowledgement for the hardware vector at $FFFA, which the start-up writes into the RAM under the KERNAL; with the KERNAL always in, the CPU reads the ROM's vector instead."
  },
  {
   "address": 33030,
   "type": "line",
   "text": "Non-zero on the title and its menus (set by title, cleared when play starts): enter_room stops after drawing the room, and panel_band plays the music and lets a message run to $77 characters."
  },
  {
   "address": 33031,
   "type": "line",
   "text": "Counts the main loop's passes; the players' controls run when it is even. Zeroed at each room entry."
  },
  {
   "address": 33032,
   "type": "line",
   "text": "touch_object's offset of the touched object's save buffer in obj_save (its number times eight)."
  },
  {
   "address": 33033,
   "type": "line",
   "text": "The current room's place in room_map, 0-191 (row times 16 plus column); $46 at the start. room_exits adds room_step to it."
  },
  {
   "address": 33034,
   "type": "line",
   "text": "Records or pieces left in the loop that uses it (draw_floor, draw_walls, the generator and object readers, trap_fire), and the reset loops' room count."
  },
  {
   "address": 33035,
   "type": "line",
   "text": "Pieces left in a wall or floor run; in compose, the count of characters across (from blk_w), one for each column it saves and builds."
  },
  {
   "address": 33036,
   "type": "line",
   "text": "Direction: of a run in draw_floor and draw_walls (0 up, 1 right, 2 down, 3 left), and of the monster being moved."
  },
  {
   "address": 33037,
   "type": "line",
   "text": "put_block's first character (0 erases); an object's type in the object readers; the spawn tests' result ($FF blocked); compose's background character."
  },
  {
   "address": 33038,
   "type": "line",
   "text": "put_block's character, counting up from char_code."
  },
  {
   "address": 33039,
   "type": "line",
   "text": "Short-lived: the joysticks read on the title menus, compose's row count, step_monster's moved mark."
  },
  {
   "address": 33040,
   "type": "line",
   "text": "lose_energy's drain after armour, taken from the energy."
  },
  {
   "address": 33041,
   "type": "line",
   "text": "Width in characters of the block or actor being drawn, erased or composed."
  },
  {
   "address": 33042,
   "type": "line",
   "text": "The moving monster's width, set by its kind's drawer and copied to blk_w by redraw_monster."
  },
  {
   "address": 33043,
   "type": "line",
   "text": "Height in rows of the block or actor (1 or 2)."
  },
  {
   "address": 33044,
   "type": "line",
   "text": "The moving monster's height (2), copied to blk_h by redraw_monster."
  },
  {
   "address": 33045,
   "type": "line",
   "text": "The x of the cell being drawn or tested, in two-column units from column 2 (0-$11)."
  },
  {
   "address": 33046,
   "type": "line",
   "text": "The y of the cell being drawn or tested, in rows from row 6 (0-$11)."
  },
  {
   "address": 33047,
   "type": "line",
   "text": "The kind (low nibble of byte 2) of the wall being drawn; door_record acts on kind 4. The generator reader also writes it."
  },
  {
   "address": 33048,
   "type": "line",
   "text": "The current room's number, 0-99, decoded from room_map. 99 is Corrine's."
  },
  {
   "address": 33049,
   "type": "line",
   "text": "The current room's exits from exit_bits (bit 3 top, 2 bottom, 1 left, 0 right), or the doorways open_exits is to draw."
  },
  {
   "address": 33050,
   "type": "line",
   "text": "Keys held (object type 3), shared by both players; a type $0D door uses one up. Never reset for a new game; the file holds 3."
  },
  {
   "address": 33051,
   "type": "line",
   "text": "Special keys of type 7 collected (one in the game, room 92); a type $0F door opens while it is non-zero. Never reset for a new game."
  },
  {
   "address": 33052,
   "type": "line",
   "text": "Special keys of type 8 collected (one in the game, room 11); a type $1A door opens while it is non-zero. Never reset for a new game."
  },
  {
   "address": 33053,
   "type": "line",
   "text": "Snake brooches collected (type $17; three in the game can be taken). The laboratory door (type $1B) opens only when it is exactly 3. Never reset for a new game."
  },
  {
   "address": 33054,
   "type": "line",
   "text": "Player A's armour, decimal (0-11: a piece adds 2 while the armour is 9 or less)."
  },
  {
   "address": 33055,
   "type": "line",
   "text": "Player B's armour, decimal (0-12)."
  },
  {
   "address": 33056,
   "type": "line",
   "text": "The work copy's armour, decimal: lose_energy spends it."
  },
  {
   "address": 33057,
   "type": "line",
   "text": "Amulets held (type 9), used by player B's down and fire. Never reset for a new game."
  },
  {
   "address": 33058,
   "type": "line",
   "text": "Masks held (type 4), used by player A's down. Never reset for a new game."
  },
  {
   "address": 33059,
   "type": "line",
   "text": "Scrolls held (type 0), used by player A's down and fire. Never reset for a new game; the file holds 2."
  },
  {
   "address": 33060,
   "type": "line",
   "text": "The first character of the actor being drawn (put_actor moves it on by char_step); also the result of row_test and column_test (0 free, $FF blocked, or an object's character), and the touched object's or generator's number."
  },
  {
   "address": 33061,
   "type": "line",
   "text": "The player character a step test found (0 none), which touch_damage charges. $8126 after it is never used."
  },
  {
   "address": 33063,
   "type": "line",
   "text": "Y kept across a call (the offset in the list being read)."
  },
  {
   "address": 33064,
   "type": "line",
   "text": "The monster's distance to player A in move_monster; compose's offset in the shape."
  },
  {
   "address": 33065,
   "type": "line",
   "text": "X kept by cell_address and delay."
  },
  {
   "address": 33066,
   "type": "line",
   "text": "The monster or generator being worked on."
  },
  {
   "address": 33067,
   "type": "line",
   "text": "The generator's look from its record (1: shape $50E2, else $5112)."
  },
  {
   "address": 33068,
   "type": "line",
   "text": "The low nibble of a generator record's third byte; written, never read."
  },
  {
   "address": 33069,
   "type": "line",
   "text": "An object record's class (high nibble of byte 2), written by draw_objects and never read: touch_object reads the class from the list itself."
  },
  {
   "address": 33070,
   "type": "line",
   "text": "An object record's flag nibble, written by draw_objects and never read."
  },
  {
   "address": 33071,
   "type": "line",
   "text": "Offset into colour_rows of the colours put_block uses. $8130 after it is never used."
  },
  {
   "address": 33073,
   "type": "line",
   "text": "How many characters each actor of the current kind takes: 6 for generators, 8 for objects."
  },
  {
   "address": 33074,
   "type": "line",
   "text": "irq's offset in irq_list (0, 3, 6 or 9)."
  },
  {
   "address": 33075,
   "type": "line",
   "text": "Set by frame_mark at line $E8, cleared by panel_band at line $FF; wait_frame waits for both."
  },
  {
   "address": 33076,
   "type": "line",
   "text": "The message line's fine scroll, 7 down to 1 by twos; message_band and play_band also pass the play area's $D016 through it."
  },
  {
   "address": 33077,
   "type": "line",
   "text": "Index of the next character of the message on the message line."
  },
  {
   "address": 33078,
   "type": "line",
   "text": "Characters (and padding spaces) the message line has shown since its message started; at $78 the room's description starts again."
  },
  {
   "address": 33079,
   "type": "line",
   "text": "1 or 2, chosen on the title."
  },
  {
   "address": 33080,
   "type": "line",
   "text": "Whose record is in the work copy: 0 player A (Agravain), 1 player B (Storm)."
  },
  {
   "address": 33081,
   "type": "line",
   "text": "The work copy player's joystick, read by load_a ($DC01, port 1) or load_b ($DC00, port 2): bits 0-4 up, down, left, right, fire, 0 when pressed."
  },
  {
   "address": 33082,
   "type": "line",
   "text": "Wall records drawn in this room (not hidden); trap_fire looks at that many."
  },
  {
   "address": 33083,
   "type": "line",
   "text": "Generators in this room."
  },
  {
   "address": 33084,
   "type": "line",
   "text": "Object records in this room's list."
  },
  {
   "address": 33085,
   "type": "line",
   "text": "The doorways to close behind a player leaving (all but his own)."
  },
  {
   "address": 33086,
   "type": "line",
   "text": "What room_exits adds to map_index: -1, 1, -16 or 16."
  },
  {
   "address": 33087,
   "type": "line",
   "text": "A monster's target x (a player's); its new x in step_monster; a leaving player's x in the next room."
  },
  {
   "address": 33088,
   "type": "line",
   "text": "A monster's target y; its new y; a leaving player's y in the next room."
  },
  {
   "address": 33089,
   "type": "line",
   "text": "Bytes in door_cells (three per cell)."
  },
  {
   "address": 33090,
   "type": "line",
   "text": "Monsters out (spawn adds, shots and magic take away); at 10 no more spawn."
  },
  {
   "address": 33091,
   "type": "line",
   "text": "The monster slot move_monster moves next, 0-9."
  },
  {
   "address": 33092,
   "type": "line",
   "text": "Counts 1-5 each pass; each wrap advances hunger_timer. Also copied into gen_phase and mon_phase, which nothing reads."
  },
  {
   "address": 33093,
   "type": "line",
   "text": "Passes since the last spawn try."
  },
  {
   "address": 33094,
   "type": "line",
   "text": "Passes between spawn tries, 50."
  },
  {
   "address": 33095,
   "type": "line",
   "text": "The generator the next spawn comes from, round in turn."
  },
  {
   "address": 33096,
   "type": "line",
   "text": "Counts phase's wraps; at 5 (every 25 passes) the hunger toll is taken."
  },
  {
   "address": 33097,
   "type": "line",
   "text": "The damage monsters' touches charged to player A this pass, before armour: lose_energy takes the armour off it, and takes nothing while the armour is greater."
  },
  {
   "address": 33098,
   "type": "line",
   "text": "The damage monsters' touches charged to player B this pass, before armour, as drain_a."
  },
  {
   "address": 33099,
   "type": "line",
   "text": "The damage lose_energy is given to take, before armour: a pass's drain_a or drain_b, or the hunger toll."
  },
  {
   "address": 33100,
   "type": "line",
   "text": "Passes until the player can turn again (2 after each turn)."
  },
  {
   "address": 33101,
   "type": "line",
   "text": "The current room's description, which the message line goes back to; the credits on the title."
  },
  {
   "address": 33102,
   "type": "line",
   "text": "High byte of room_msg."
  },
  {
   "address": 33103,
   "type": "line",
   "text": "Address of the current room's object list."
  },
  {
   "address": 33104,
   "type": "line",
   "text": "High byte of obj_list."
  },
  {
   "address": 33105,
   "type": "line",
   "text": "Address of the current room's wall list."
  },
  {
   "address": 33106,
   "type": "line",
   "text": "High byte of wall_list."
  },
  {
   "address": 33107,
   "type": "line",
   "text": "Address of the current room's generator list."
  },
  {
   "address": 33108,
   "type": "line",
   "text": "High byte of gen_list."
  },
  {
   "address": 33109,
   "type": "line",
   "text": "HMMM.. THE BEST I'VE EVER TASTED, for food. Every message is ASCII capitals ended by a zero, put on the message line by storing its address in msg_ptr."
  },
  {
   "address": 33142,
   "type": "line",
   "text": "YOU HAVE FOUND SOME ARMOUR."
  },
  {
   "address": 33169,
   "type": "line",
   "text": "RESTORATIVE FLUID, REACHES THE PARTS OTHER FLUIDS CANNOT REACH."
  },
  {
   "address": 33232,
   "type": "line",
   "text": "YOU HAVE FOUND A JEWEL FILLED CHEST."
  },
  {
   "address": 33268,
   "type": "line",
   "text": "AGRAVAIN IS ABOUT TO DIE.., player A's low-energy warning."
  },
  {
   "address": 33295,
   "type": "line",
   "text": "STORM NEEDS FOOD BADLY, player B's low-energy warning."
  },
  {
   "address": 33318,
   "type": "line",
   "text": "GENERATORS REAPPEAR IF THE ROOM IS RE-ENTERED, when a shot destroys a generator."
  },
  {
   "address": 33364,
   "type": "line",
   "text": "CABBALA SYMBOLS TRIGGER TRAPS, when a trap goes off."
  },
  {
   "address": 33394,
   "type": "line",
   "text": "SAVE KEYS TO OPEN DOORS, for a key. Also the address the scroller's LDA at $7E60 was assembled with."
  },
  {
   "address": 33418,
   "type": "line",
   "text": "THE FIRST PLAYER TO LEAVE CLOSES ALL OTHER DOORS, when a player leaves a room."
  },
  {
   "address": 33467,
   "type": "line",
   "text": "THE AMULET IS A POWERFUL MAGICAL TOKEN."
  },
  {
   "address": 33506,
   "type": "line",
   "text": "SAVE SCROLLS TO CAST SPELLS."
  },
  {
   "address": 33534,
   "type": "line",
   "text": "MASK MAGIC MAY NOW BE CAST."
  },
  {
   "address": 33561,
   "type": "line",
   "text": "COLLECT THREE SNAKE BROACHES TO GAIN ENTRY TO THE WIZARDS CHAMBER."
  },
  {
   "address": 33627,
   "type": "line",
   "text": "THIS SPECIAL KEY WILL ONLY OPEN ONE DOOR, for both special keys."
  },
  {
   "address": 33668,
   "type": "line",
   "text": "A KEY IS REQUIRED TO OPEN THIS DOOR, at a locked door of types $0D, $0F and $1A."
  },
  {
   "address": 33704,
   "type": "line",
   "text": "THREE SNAKE BROACHES ARE NEEDED TO OPEN THIS DOOR, at the laboratory door."
  },
  {
   "address": 33754,
   "type": "line",
   "text": "The title's scroller: ..STORM.. (C) MASTERTRONIC LTD. 1986 WRITTEN BY THE FIRM CONVERTED BY J.BAGULEY. MUSIC AND SOUND FX BY DAVID WHITTAKER. 119 characters, exactly the title's limit of $77."
  },
  {
   "address": 33874,
   "type": "line",
   "text": "!!!! YOU HAVE FOUND CORRINE SHE IS GLAD TO SEE YOU WELL DONE !!!!, in room 99."
  },
  {
   "address": 33940,
   "type": "line",
   "text": "----- STORM -----, the title's first line (17 characters, copied by title as screen codes)."
  },
  {
   "address": 33957,
   "type": "line",
   "text": "PART 1:UNA CUM'S LAIR, the title's second line."
  },
  {
   "address": 33978,
   "type": "line",
   "text": "PRESS FIRE TO START, the title's third line."
  },
  {
   "address": 33997,
   "type": "line",
   "text": "DO YOU WANT INSTUCTIONS ? (the game's spelling)."
  },
  {
   "address": 34022,
   "type": "line",
   "text": "PUSH JOYSTICK FORWARD FOR YES."
  },
  {
   "address": 34051,
   "type": "line",
   "text": "PULL BACK FOR NO."
  },
  {
   "address": 34067,
   "type": "line",
   "text": "SELECT NUMBER OF PLAYERS."
  },
  {
   "address": 34091,
   "type": "line",
   "text": "PUSH JOYSTICK LEFT FOR ONE."
  },
  {
   "address": 34117,
   "type": "line",
   "text": "RIGHT FOR TWO."
  },
  {
   "address": 34130,
   "type": "line",
   "text": "SCORE   ENERGY, the panel's labels, printed twice by enter_room."
  },
  {
   "address": 34144,
   "type": "line",
   "text": "PLAYER (7 characters, printed twice with a 1 or a 2 by enter_room); GAME OVER after it is never printed from here: game_over builds its letters from the ROM."
  },
  {
   "address": 34160,
   "type": "line",
   "text": "Screen addresses of the play area's 18 rows (rows 6-23, column 2), a word each, read by cell_address with the row times two."
  },
  {
   "address": 34161,
   "type": "line",
   "text": "row_addr's high bytes, read one byte on."
  },
  {
   "address": 34196,
   "type": "line",
   "text": "Colour RAM values for actors and pieces, 120 bytes: put_block takes them in turn from colour_ofs, one for each character of the block. Values 8-15 are multicolour in their low three bits."
  },
  {
   "address": 34316,
   "type": "line",
   "text": "Player A's score, four decimal digits (two bytes, low first)."
  },
  {
   "address": 34317,
   "type": "line",
   "text": "High byte of score_a (thousands and hundreds)."
  },
  {
   "address": 34318,
   "type": "line",
   "text": "Player B's score, four decimal digits."
  },
  {
   "address": 34319,
   "type": "line",
   "text": "High byte of score_b."
  },
  {
   "address": 34320,
   "type": "line",
   "text": "The work copy's score, decimal, low byte first (two bytes)."
  },
  {
   "address": 34321,
   "type": "line",
   "text": "High byte of p_score."
  },
  {
   "address": 34322,
   "type": "line",
   "text": "Player A's energy, four decimal digits (two bytes, low first); 2000 at the start."
  },
  {
   "address": 34323,
   "type": "line",
   "text": "High byte of energy_a (thousands and hundreds)."
  },
  {
   "address": 34324,
   "type": "line",
   "text": "Player B's energy, four decimal digits; 2500 at the start of a two-player game."
  },
  {
   "address": 34325,
   "type": "line",
   "text": "High byte of energy_b."
  },
  {
   "address": 34326,
   "type": "line",
   "text": "The work copy's energy (two bytes, decimal)."
  },
  {
   "address": 34327,
   "type": "line",
   "text": "High byte of p_energy: food adds 2 here (200), restorative fluid 5 (500)."
  },
  {
   "address": 34328,
   "type": "line",
   "text": "Non-zero when player A is dead."
  },
  {
   "address": 34329,
   "type": "line",
   "text": "Non-zero when player B is dead."
  },
  {
   "address": 34330,
   "type": "line",
   "text": "The work copy's dead flag."
  },
  {
   "address": 34331,
   "type": "line",
   "text": "Player A's low-energy warnings given (0-2)."
  },
  {
   "address": 34332,
   "type": "line",
   "text": "Player B's low-energy warnings given."
  },
  {
   "address": 34333,
   "type": "line",
   "text": "The work copy's warning count."
  },
  {
   "address": 34334,
   "type": "line",
   "text": "Player B's x; bit 7 set when he has left the room, $FF when dead."
  },
  {
   "address": 34335,
   "type": "line",
   "text": "Player B's y."
  },
  {
   "address": 34336,
   "type": "line",
   "text": "Player B's facing, 0 up, 1 right, 2 down, 3 left."
  },
  {
   "address": 34337,
   "type": "line",
   "text": "The eight background characters under player B."
  },
  {
   "address": 34345,
   "type": "line",
   "text": "Player A's x; bit 7 set when he has left the room, $FF when dead."
  },
  {
   "address": 34346,
   "type": "line",
   "text": "Player A's y."
  },
  {
   "address": 34347,
   "type": "line",
   "text": "Player A's facing."
  },
  {
   "address": 34348,
   "type": "line",
   "text": "The eight background characters under player A."
  },
  {
   "address": 34356,
   "type": "line",
   "text": "The work copy's x: load_a or load_b copy a player's record here ($8634-$864B with the shot) and save_a or save_b copy it back."
  },
  {
   "address": 34357,
   "type": "line",
   "text": "The work copy's y."
  },
  {
   "address": 34358,
   "type": "line",
   "text": "The work copy's facing."
  },
  {
   "address": 34359,
   "type": "line",
   "text": "The work copy's background save, eight characters (4 across, 2 rows)."
  },
  {
   "address": 34367,
   "type": "line",
   "text": "Player A's shot: direction ($FF none), column, row and covered character."
  },
  {
   "address": 34368,
   "type": "line",
   "text": "Player A's shot column."
  },
  {
   "address": 34369,
   "type": "line",
   "text": "Player A's shot row."
  },
  {
   "address": 34370,
   "type": "line",
   "text": "The character under player A's shot."
  },
  {
   "address": 34371,
   "type": "line",
   "text": "Player B's shot: direction ($FF none), column, row and covered character."
  },
  {
   "address": 34372,
   "type": "line",
   "text": "Player B's shot column."
  },
  {
   "address": 34373,
   "type": "line",
   "text": "Player B's shot row."
  },
  {
   "address": 34374,
   "type": "line",
   "text": "The character under player B's shot."
  },
  {
   "address": 34375,
   "type": "line",
   "text": "The work copy's shot direction, 0-3, $FF when none is in flight."
  },
  {
   "address": 34376,
   "type": "line",
   "text": "The work copy's shot column, in screen columns from column 2."
  },
  {
   "address": 34377,
   "type": "line",
   "text": "The work copy's shot row, from row 6."
  },
  {
   "address": 34378,
   "type": "line",
   "text": "The character the shot covers."
  },
  {
   "address": 34379,
   "type": "line",
   "text": "The shot's character: $FE player A's, $FF player B's."
  },
  {
   "address": 34380,
   "type": "line",
   "text": "Hits each of the room's five generators can still take (5 when placed; 0 once destroyed)."
  },
  {
   "address": 34385,
   "type": "line",
   "text": "The kind of monster each generator makes (1-6)."
  },
  {
   "address": 34390,
   "type": "line",
   "text": "Each generator's x."
  },
  {
   "address": 34395,
   "type": "line",
   "text": "Each generator's y."
  },
  {
   "address": 34400,
   "type": "line",
   "text": "phase when each generator was placed; nothing reads it."
  },
  {
   "address": 34405,
   "type": "line",
   "text": "The background under each of the room's eight objects, 8 bytes each."
  },
  {
   "address": 34469,
   "type": "line",
   "text": "The background under each of the room's five generators, 6 bytes each."
  },
  {
   "address": 34499,
   "type": "line",
   "text": "Cells that kind-4 walls cover in this room, three bytes each (x, y, character), recorded by door_record and put back by trap_fire. As loaded it holds four cells left by the play the file was saved from."
  },
  {
   "address": 34626,
   "type": "line",
   "text": "Each monster slot's hit points (0 empty): its kind, or kind - 2 for kinds 4-6."
  },
  {
   "address": 34636,
   "type": "line",
   "text": "Each monster's x."
  },
  {
   "address": 34646,
   "type": "line",
   "text": "Each monster's y."
  },
  {
   "address": 34656,
   "type": "line",
   "text": "phase when each monster appeared; nothing reads it."
  },
  {
   "address": 34666,
   "type": "line",
   "text": "Each monster's kind in bits 0-2 (1-6), and its animation in the high bits (kinds 2 and 4 bit 7, kind 5 bits 4-5)."
  },
  {
   "address": 34676,
   "type": "line",
   "text": "Each monster's direction, as step_monster leaves it after a step (0 up, 1 right, 2 down, 3 left). spawn also stores 0 here, but at the generator's number rather than the new monster's slot ($5E97), so a new monster starts with whatever its slot last held."
  },
  {
   "address": 34686,
   "type": "line",
   "text": "The background under each of the ten monsters, 8 bytes each."
  },
  {
   "address": 34766,
   "type": "line",
   "text": "One 8-byte mask for each background character $11-$31 ($87CE-$88D5), the inverse of its character's multicolour pixels (two bits a pixel); compose ANDs it into the actor's shape before ORing in the background, so a floor decoration's pixels stay on top and the actor fills the rest of the character. compose finds a mask at (character - $11) * 8 in eight bits, so the first, all $FF, serves character 0, the shots' $FE and $FF, $11 (which no room places) and also $31, whose own mask at $88CE is never read: an actor over $31 is not masked, and where its pixels meet the decoration's the two colours mix. Character $12's mask has its rows 3 and 4 swapped: in each of those rows one pixel of an actor is hidden that should show and one is left over the decoration."
  },
  {
   "address": 35030,
   "type": "line",
   "text": "170 bytes from here to the end of the file ($88D6-$897F) that nothing reads: floor_masks ends at $88D5 (character $31), and no instruction or table points here. Play leaves them unchanged."
  },
  {
   "address": 36864,
   "type": "line",
   "text": "Starts the title tune (CSDb and HVSC give $9000 as the tune's init): clears the three voice records (36 bytes each at $90AA, $90CE and $90F2), points each voice at the first pattern of its order list (order lists from tune_orders), sets each order offset to 2 and duration to 1, silences the chip, sets the volume to 15 and the tempo counter to 1, and sets music_on. Called once, by title."
  },
  {
   "address": 37034,
   "type": "line",
   "text": "Voice 1's record, 36 bytes ($90AA-$90CD), the same layout as voice2 and voice3: +$00 effect flags (cleared at every new note: bit 0 flips each frame, bit 1 drum, bit 2 slide down, bit 3 note slide, bit 4 arpeggio, bit 5 slide up, bit 7 note slide upward); +$01/$02 the pattern read address; +$03/$04 the order list's address and +$05/$06 the offset of its next entry. The labels inside the record are its fields as the driver addresses voice 1 directly."
  },
  {
   "address": 37035,
   "type": "line",
   "text": "Voice 1's pattern read address, low byte (+$01)."
  },
  {
   "address": 37036,
   "type": "line",
   "text": "Voice 1's pattern read address, high byte (+$02)."
  },
  {
   "address": 37037,
   "type": "line",
   "text": "Voice 1's order list address, low byte (+$03), from tune_orders."
  },
  {
   "address": 37038,
   "type": "line",
   "text": "Voice 1's order list address, high byte (+$04)."
  },
  {
   "address": 37039,
   "type": "line",
   "text": "Voice 1, +$05-$0F: the order offset (+$05/$06), the pitch slide's running total (+$07/$08), the arpeggio's start (+$09/$0A) and read address (+$0B/$0C), the slide step (+$0D/$0E) and the slide delay (+$0F)."
  },
  {
   "address": 37050,
   "type": "line",
   "text": "Voice 1, +$10-$12: ticks left of the current note (+$10), the note length set by the last $E0-$FF byte (+$11), and the note number (+$12)."
  },
  {
   "address": 37053,
   "type": "line",
   "text": "Voice 1's attack/decay (+$13), set by a $Dx byte and written to $D405 every frame."
  },
  {
   "address": 37054,
   "type": "line",
   "text": "Voice 1's sustain/release (+$14), written to $D406."
  },
  {
   "address": 37055,
   "type": "line",
   "text": "Voice 1's frequency, low byte (+$15), computed every frame by voice_frame and written to $D400."
  },
  {
   "address": 37056,
   "type": "line",
   "text": "Voice 1's frequency, high byte (+$16), written to $D401."
  },
  {
   "address": 37057,
   "type": "line",
   "text": "Voice 1's pulse width, low byte (+$17), written to $D402; the pulse sweep moves it."
  },
  {
   "address": 37058,
   "type": "line",
   "text": "Voice 1's pulse width, high byte (+$18), written to $D403."
  },
  {
   "address": 37059,
   "type": "line",
   "text": "Voice 1, +$19-$1C: the restart count (+$19, 1 at a new note: the control register is written with the gate off once before it is turned on again), the vibrato depth (+$1A) and step (+$1B), and the vibrato's position (+$1C)."
  },
  {
   "address": 37063,
   "type": "line",
   "text": "Voice 1, +$1D-$20: vibrato flags (+$1D: bit 6 on, bit 5 moving up, bit 7 only every other frame), and the pulse sweep's lower limit (+$1E), upper limit (+$1F, both high bytes) and step (+$20)."
  },
  {
   "address": 37067,
   "type": "line",
   "text": "Voice 1, +$21-$22: the pulse sweep's state (+$21: 0 off, 1 up, $81 down) and the waveform chosen by the pattern (+$22)."
  },
  {
   "address": 37069,
   "type": "line",
   "text": "Voice 1's control byte for this frame (+$23): the waveform, or noise on a drum frame; written to $D404 with the gate bit added."
  },
  {
   "address": 37070,
   "type": "line",
   "text": "Voice 2's record, 36 bytes ($90CE-$90F1), laid out as voice1."
  },
  {
   "address": 37071,
   "type": "line",
   "text": "Voice 2's pattern read address, low byte."
  },
  {
   "address": 37072,
   "type": "line",
   "text": "Voice 2's pattern read address, high byte."
  },
  {
   "address": 37073,
   "type": "line",
   "text": "Voice 2's order list address, low byte."
  },
  {
   "address": 37074,
   "type": "line",
   "text": "Voice 2's order list address, high byte."
  },
  {
   "address": 37075,
   "type": "line",
   "text": "Voice 2, +$05-$0F (as voice 1's $90AF)."
  },
  {
   "address": 37086,
   "type": "line",
   "text": "Voice 2, +$10-$12: ticks left, note length, note."
  },
  {
   "address": 37089,
   "type": "line",
   "text": "Voice 2's attack/decay, written to $D40C."
  },
  {
   "address": 37090,
   "type": "line",
   "text": "Voice 2's sustain/release, written to $D40D."
  },
  {
   "address": 37091,
   "type": "line",
   "text": "Voice 2's frequency, low byte, written to $D407."
  },
  {
   "address": 37092,
   "type": "line",
   "text": "Voice 2's frequency, high byte, written to $D408."
  },
  {
   "address": 37093,
   "type": "line",
   "text": "Voice 2's pulse width, low byte, written to $D409."
  },
  {
   "address": 37094,
   "type": "line",
   "text": "Voice 2's pulse width, high byte, written to $D40A."
  },
  {
   "address": 37095,
   "type": "line",
   "text": "Voice 2, +$19-$1C: restart count and vibrato."
  },
  {
   "address": 37099,
   "type": "line",
   "text": "Voice 2, +$1D-$20: vibrato flags and the pulse sweep's limits and step."
  },
  {
   "address": 37103,
   "type": "line",
   "text": "Voice 2, +$21-$22: pulse sweep state and waveform."
  },
  {
   "address": 37105,
   "type": "line",
   "text": "Voice 2's control byte for this frame, written to $D40B."
  },
  {
   "address": 37106,
   "type": "line",
   "text": "Voice 3's record, 36 bytes ($90F2-$9115), laid out as voice1."
  },
  {
   "address": 37107,
   "type": "line",
   "text": "Voice 3's pattern read address, low byte."
  },
  {
   "address": 37108,
   "type": "line",
   "text": "Voice 3's pattern read address, high byte."
  },
  {
   "address": 37109,
   "type": "line",
   "text": "Voice 3's order list address, low byte."
  },
  {
   "address": 37110,
   "type": "line",
   "text": "Voice 3's order list address, high byte."
  },
  {
   "address": 37111,
   "type": "line",
   "text": "Voice 3, +$05-$0F (as voice 1's $90AF)."
  },
  {
   "address": 37122,
   "type": "line",
   "text": "Voice 3, +$10-$12: ticks left, note length, note."
  },
  {
   "address": 37125,
   "type": "line",
   "text": "Voice 3's attack/decay, written to $D413."
  },
  {
   "address": 37126,
   "type": "line",
   "text": "Voice 3's sustain/release, written to $D414."
  },
  {
   "address": 37127,
   "type": "line",
   "text": "Voice 3's frequency, low byte, written to $D40E."
  },
  {
   "address": 37128,
   "type": "line",
   "text": "Voice 3's frequency, high byte, written to $D40F."
  },
  {
   "address": 37129,
   "type": "line",
   "text": "Voice 3's pulse width, low byte, written to $D410."
  },
  {
   "address": 37130,
   "type": "line",
   "text": "Voice 3's pulse width, high byte, written to $D411."
  },
  {
   "address": 37131,
   "type": "line",
   "text": "Voice 3, +$19-$1C: restart count and vibrato."
  },
  {
   "address": 37135,
   "type": "line",
   "text": "Voice 3, +$1D-$20: vibrato flags and the pulse sweep's limits and step."
  },
  {
   "address": 37139,
   "type": "line",
   "text": "Voice 3, +$21-$22: pulse sweep state and waveform."
  },
  {
   "address": 37141,
   "type": "line",
   "text": "Voice 3's control byte for this frame, written to $D412."
  },
  {
   "address": 37142,
   "type": "line",
   "text": "Non-zero while the tune plays: set by music_init, cleared by music_stop; music_play does nothing without it."
  },
  {
   "address": 37143,
   "type": "line",
   "text": "voice_frame's vibrato top, twice the depth."
  },
  {
   "address": 37144,
   "type": "line",
   "text": "voice_frame's vibrato offset, signed, low byte, doubled once for every 12 notes (or part of 12) the note lies below $30 (the loop works on the note times two)."
  },
  {
   "address": 37145,
   "type": "line",
   "text": "vib_ofs' high byte (its sign at first)."
  },
  {
   "address": 37146,
   "type": "line",
   "text": "music_play's exit when the music is off."
  },
  {
   "address": 37147,
   "type": "line",
   "text": "The tune's frame call (HVSC's play address $911B), from panel_band once a frame while title_mode is set. Counts the tempo counter down and, when it runs out, reads the next pattern events for the three voices (voice_tick) and reloads it (5 frames as loaded; a $B8-$BF byte changes the operand at $9147). Then every frame computes each voice's frequency and effects (voice_frame) and writes all three voices' frequency, pulse width, envelope and control (with the gate on, after a gate-off write at a new note) and the volume."
  },
  {
   "address": 37191,
   "type": "line",
   "text": "Operand of music_play's LDA #$05: the tempo, frames per tick; a $B8-$BF byte in a pattern sets it to 1-8. The tune sets 5."
  },
  {
   "address": 37415,
   "type": "line",
   "text": "Stops the tune (music_on cleared) and falls into sid_clear. Called by title when play begins, and by the $91 command."
  },
  {
   "address": 37420,
   "type": "line",
   "text": "Writes 0 to the 24 sound chip registers $D400-$D417; the volume register $D418 is left as it was."
  },
  {
   "address": 37431,
   "type": "line",
   "text": "Frames left until the next tick."
  },
  {
   "address": 37432,
   "type": "line",
   "text": "The pattern commands' addresses, one word for each command byte $80-$93, read by voice_tick through the operand of the JMP at $949D: $80 hold ($93C4), $81 vibrato off, $82 vibrato on, $83 volume, $84 slide down, $85 slide up, $86 note slide down, $87 note slide up, $88 next pattern, $89 vibrato setting, $8A noise, $8B pulse, $8C sawtooth, $8D triangle, $8E drum, $8F pulse width, $90 pulse sweep, $91 stop, $92 triangle with ring modulation, $93 triangle with sync."
  },
  {
   "address": 37433,
   "type": "line",
   "text": "cmd_table's high bytes, read one byte on from its low bytes."
  },
  {
   "address": 37472,
   "type": "line",
   "text": "Command $90: the next three bytes are the pulse sweep's lower and upper limit (high bytes) and step; the sweep starts upward."
  },
  {
   "address": 37518,
   "type": "line",
   "text": "Command $8A: waveform noise ($80). $8B pulse ($40), $8C sawtooth ($20) and $8D triangle ($10) follow, each setting its value and joining at $92A4."
  },
  {
   "address": 37522,
   "type": "line",
   "text": "Command $8B: pulse waveform ($40)."
  },
  {
   "address": 37526,
   "type": "line",
   "text": "Command $8C: sawtooth waveform ($20)."
  },
  {
   "address": 37530,
   "type": "line",
   "text": "Command $8D: triangle waveform ($10)."
  },
  {
   "address": 37534,
   "type": "line",
   "text": "Command $92: triangle with ring modulation ($14). Its address is also what the JMP at $949D was assembled with."
  },
  {
   "address": 37538,
   "type": "line",
   "text": "Command $93: triangle with sync ($12); stores the waveform (+$22) for all six waveform commands."
  },
  {
   "address": 37547,
   "type": "line",
   "text": "Command $8F: pulse width = the next byte times 256, and the pulse sweep off."
  },
  {
   "address": 37576,
   "type": "line",
   "text": "Command $91: drops the return address into music_play and jumps to music_stop, so the tune stops mid-tick. The tune does not use it."
  },
  {
   "address": 37581,
   "type": "line",
   "text": "Command $88, the end of every pattern: takes the voice's next entry from its order list and moves the offset on; at a zero entry it starts the list again from its first entry. Then carries on reading the new pattern."
  },
  {
   "address": 37668,
   "type": "line",
   "text": "Command $85: sets the slide-up flag (bit 5) and joins cmd_slide_down to read the slide's step and delay."
  },
  {
   "address": 37676,
   "type": "line",
   "text": "Command $84: sets the slide-down flag (bit 2), clears the running total and takes the slide step (two bytes) and delay (one byte) from the pattern. The tune uses neither slide."
  },
  {
   "address": 37731,
   "type": "line",
   "text": "Command $89: the next byte is the vibrato step, the one after its depth (also its starting position)."
  },
  {
   "address": 37766,
   "type": "line",
   "text": "Command $87: sets bits 7 and 3, so the note rises a semitone each tick while it lasts."
  },
  {
   "address": 37774,
   "type": "line",
   "text": "Command $86: sets bit 3 (note slide), the note falls a semitone each tick."
  },
  {
   "address": 37784,
   "type": "line",
   "text": "Command $81: vibrato flags cleared."
  },
  {
   "address": 37792,
   "type": "line",
   "text": "Command $82: vibrato on (+$1D = $40)."
  },
  {
   "address": 37800,
   "type": "line",
   "text": "Command $83: the next byte is the volume register's value."
  },
  {
   "address": 37816,
   "type": "line",
   "text": "Command $8E: sets flag bits 0 and 1: until the next note, every other frame plays noise, its frequency raised by $3000: a drum."
  },
  {
   "address": 37828,
   "type": "line",
   "text": "Command $80: keeps the current note sounding for another note length, without restarting it."
  },
  {
   "address": 37831,
   "type": "line",
   "text": "One tick of the voice whose record $04/$05 points at: counts its note down; while it lasts, a note slide moves the note one semitone. When it ends, clears the effect flags and reads the pattern from its read address: a byte below $80 is the next note (restarting the voice), $80-$93 a command (cmd_table), $B8-$BF the tempo, $C0-$CF an arpeggio (from arp_table, sets flag bit 4), $D0-$DF an envelope (the next two bytes, attack/decay and sustain/release), $E0-$FF the note length (1-32 ticks). Commands and settings go on to the next byte; a note or $80 ends the tick."
  },
  {
   "address": 37857,
   "type": "line",
   "text": "voice_tick's read loop: the next pattern byte."
  },
  {
   "address": 37882,
   "type": "line",
   "text": "voice_tick's end: reloads the tick count from the note length and saves the read address."
  },
  {
   "address": 38046,
   "type": "line",
   "text": "Operand of the JMP at $949D: voice_tick patches the command's address from cmd_table here."
  },
  {
   "address": 38047,
   "type": "line",
   "text": "High byte of the command address the JMP at $949D jumps to."
  },
  {
   "address": 38048,
   "type": "line",
   "text": "One frame of the voice $04/$05 points at; returns its frequency in X (low) and Y (high). The note, plus the arpeggio's next offset when bit 4 is set (the arpeggio restarts at its $88 end), picks the frequency from freq_table. Then vibrato, a triangle offset of up to twice the depth around the note, scaled up for low notes; a pitch slide (bits 2 and 5), whose running total grows by the step each frame after its delay; the pulse sweep between its limits; and the drum (bits 0 and 1 both set: noise, $3000 higher, on alternate frames)."
  },
  {
   "address": 38118,
   "type": "line",
   "text": "Operand of voice_frame's ADC #$0C: the arpeggio offset added to the note, patched each frame from the arpeggio table."
  },
  {
   "address": 38495,
   "type": "line",
   "text": "The volume register's value ($D418), 15; command $83 changes it."
  },
  {
   "address": 38496,
   "type": "line",
   "text": "The SID frequencies of 95 notes, a word each ($0116 for note 0 up to $F880 for note 94), a semitone apart."
  },
  {
   "address": 38497,
   "type": "line",
   "text": "freq_table's high bytes, read one byte on."
  },
  {
   "address": 38686,
   "type": "line",
   "text": "Fourteen arpeggio addresses for the $C0-$CD bytes, each a list of semitone offsets ended by $88: 0 3 7, 0 4 7, 0 3 7 12, 0 4 7 12, 7 12 15, 7 12 16, 3 7 12, 4 7 12, 0 12, 0 4, 0 3, 0 5, 0 7 and 0 3 7 10 ($973A-$976F)."
  },
  {
   "address": 38687,
   "type": "line",
   "text": "arp_table's high bytes, read one byte on."
  },
  {
   "address": 38714,
   "type": "line",
   "text": "Arpeggio $C0: semitones 0 3 7 (a minor chord) above the note, ended by $88. The tune uses it for voice 2 over A."
  },
  {
   "address": 38718,
   "type": "line",
   "text": "Arpeggio $C1: semitones 0 4 7 (a major chord) above the note, ended by $88. The tune uses it for voice 2 over G."
  },
  {
   "address": 38722,
   "type": "line",
   "text": "Arpeggio $C2: semitones 0 3 7 12 (minor, with the octave) above the note, ended by $88. The tune does not use it."
  },
  {
   "address": 38727,
   "type": "line",
   "text": "Arpeggio $C3: semitones 0 4 7 12 (major, with the octave) above the note, ended by $88. The tune does not use it."
  },
  {
   "address": 38732,
   "type": "line",
   "text": "Arpeggio $C4: semitones 7 12 15 (minor, from the fifth) above the note, ended by $88. The tune does not use it."
  },
  {
   "address": 38736,
   "type": "line",
   "text": "Arpeggio $C5: semitones 7 12 16 (major, from the fifth) above the note, ended by $88. The tune uses it for voice 2 over C."
  },
  {
   "address": 38740,
   "type": "line",
   "text": "Arpeggio $C6: semitones 3 7 12 (minor, from the third) above the note, ended by $88. The tune does not use it."
  },
  {
   "address": 38744,
   "type": "line",
   "text": "Arpeggio $C7: semitones 4 7 12 (major, from the third) above the note, ended by $88. The tune uses it for voice 2 over F."
  },
  {
   "address": 38748,
   "type": "line",
   "text": "Arpeggio $C8: semitones 0 12 (octaves) above the note, ended by $88. The tune uses it for voice 3's opening."
  },
  {
   "address": 38751,
   "type": "line",
   "text": "Arpeggio $C9: semitones 0 4 above the note, ended by $88. The tune does not use it."
  },
  {
   "address": 38754,
   "type": "line",
   "text": "Arpeggio $CA: semitones 0 3 above the note, ended by $88. The tune does not use it."
  },
  {
   "address": 38757,
   "type": "line",
   "text": "Arpeggio $CB: semitones 0 5 above the note, ended by $88. The tune does not use it."
  },
  {
   "address": 38760,
   "type": "line",
   "text": "Arpeggio $CC: semitones 0 7 above the note, ended by $88. The tune does not use it."
  },
  {
   "address": 38763,
   "type": "line",
   "text": "Arpeggio $CD: semitones 0 3 7 10 (a minor seventh) above the note, ended by $88. The tune does not use it."
  },
  {
   "address": 38768,
   "type": "line",
   "text": "The order list addresses of voices 1, 2 and 3 ($9776, $97C0 and $980A), read by music_init."
  },
  {
   "address": 38769,
   "type": "line",
   "text": "tune_orders' first high byte: orders_v1 for voice 1."
  },
  {
   "address": 38770,
   "type": "line",
   "text": "tune_orders' second entry, low byte: orders_v2 for voice 2."
  },
  {
   "address": 38771,
   "type": "line",
   "text": "tune_orders' second high byte."
  },
  {
   "address": 38772,
   "type": "line",
   "text": "tune_orders' third entry, low byte: orders_v3 for voice 3."
  },
  {
   "address": 38773,
   "type": "line",
   "text": "tune_orders' third high byte."
  },
  {
   "address": 38774,
   "type": "line",
   "text": "Voice 1's order list: the address of each pattern in turn, ended by a zero word, at which cmd_next_pattern goes back to the start. bass_intro four times, then bass_a, bass_f, bass_c and bass_g eight times over: 640 ticks, the same length as the other two voices' lists, so the tune loops as a whole every 640 ticks (3,200 frames at the tempo of 5, 64 seconds on a PAL machine)."
  },
  {
   "address": 38848,
   "type": "line",
   "text": "Voice 2's order list: chime_intro four times, then the chords chord_a, chord_f, chord_c and chord_g eight times over (640 ticks)."
  },
  {
   "address": 38922,
   "type": "line",
   "text": "Voice 3's order list: pad_intro four times, then the melody's phrases tune_1, tune_1, tune_2, tune_2, tune_3, tune_3, tune_1, tune_1 (640 ticks)."
  },
  {
   "address": 38948,
   "type": "line",
   "text": "Voice 1's opening pattern, 32 ticks: sets the tempo to 5 and a pulse sweep, vibrato and envelope, then bass notes on C1, C2 and C3 (pulse wave) between pairs of high notes with ring modulation, and a drum (noise) every eight ticks. Ends with $88 at $9862."
  },
  {
   "address": 39011,
   "type": "line",
   "text": "Voice 1, one bar of 16 ticks under A minor: bass A2 (one E3 among them) on a pulse wave, a drum at tick 4 and two more, falling, at ticks 12 and 14. Ends with $88 at $988D."
  },
  {
   "address": 39054,
   "type": "line",
   "text": "Voice 1, one bar under F: the same rhythm on F2 (one C3), its drums an octave lower. Ends with $88 at $98AD."
  },
  {
   "address": 39086,
   "type": "line",
   "text": "Voice 1, one bar under C: the same rhythm on C2 (one G2), resetting the pulse sweep and vibrato as bass_a does. Ends with $88 at $98D8."
  },
  {
   "address": 39129,
   "type": "line",
   "text": "Voice 1, one bar under G: the same rhythm on G2 (one E2), drums as bass_f's. Ends with $88 at $98F8."
  },
  {
   "address": 39161,
   "type": "line",
   "text": "Voice 2's opening pattern, 32 ticks: 32 single-tick notes on C4, with C5 every few, on a triangle wave ring-modulated by voice 1. Ends with $88 at $991E."
  },
  {
   "address": 39199,
   "type": "line",
   "text": "Voice 2, one bar: A4 held for 16 ticks on a triangle wave with arpeggio $C0, so it ripples through A minor (A, C, E). Ends with $88 at $9926."
  },
  {
   "address": 39207,
   "type": "line",
   "text": "Voice 2, one bar: F4 with arpeggio $C7 (4, 7 and 12 semitones up: A, C and F), an F major chord. Ends with $88 at $992E."
  },
  {
   "address": 39215,
   "type": "line",
   "text": "Voice 2, one bar: C4 with arpeggio $C5 (7, 12 and 16 up: G, C and E), C major. Ends with $88 at $9936."
  },
  {
   "address": 39223,
   "type": "line",
   "text": "Voice 2, one bar: G4 with arpeggio $C1 (0, 4 and 7: G, B and D), G major. Ends with $88 at $993E."
  },
  {
   "address": 39231,
   "type": "line",
   "text": "Voice 3's opening pattern: one C3 held for 32 ticks with arpeggio $C8 (an octave jump), a slow pulse sweep and vibrato. Ends with $88 at $9950."
  },
  {
   "address": 39249,
   "type": "line",
   "text": "Voice 3, the melody's first phrase, 64 ticks (four bars): A3, a quick run down C4 B3 A3 G3, F3, the same run, C4, the run again, then D4 B3 A3 G3. Pulse wave with a sweep and vibrato. Ends with $88 at $9977."
  },
  {
   "address": 39288,
   "type": "line",
   "text": "Voice 3, the melody's second phrase, 64 ticks: A3 held, E4 D4 C4, A3 held again, then C3 C4 C4 C4 and D4 B3 A3 G3. Ends with $88 at $999A."
  },
  {
   "address": 39323,
   "type": "line",
   "text": "Voice 3, the melody's third phrase, 64 ticks: A3, E4 E4 D4, a long E4, then C3 C4 C4 C4 D4 B3 A3 G3. The last pattern; the six bytes after it, to the end of the file, are unused. Ends with $88 at $99C1."
  }
 ]
}