{"schema":1,"platform":"c64","game":"lethal-weapon","part":"ending","title":"Lethal Weapon","build":"PAL disk release in a G64 image whose title program is the file LOADER (no file TITLE, which the game-over code asks for); three parts: the title and character select, the game at stage 1A played as Riggs, and the ending","symbols_sha256":"5171e384929983b1cd194b951a094a1564770386bb3e50fa2a241165bd1990ba","snapshot":{"file":"work/ending.vsf","sha256":"0d3cecca46213e309f1a8c593de9a42533b9cfb0e68a5f325a8a49d522b5d023"},"index":[{"a":2304,"n":"ending_start","k":"routine","len":320,"c":true},{"a":2332,"n":"b_091C","k":"branch","len":1,"c":false},{"a":2550,"n":"b_09F6","k":"branch","len":1,"c":false},{"a":2563,"n":"b_0A03","k":"branch","len":1,"c":false},{"a":2606,"n":"b_0A2E","k":"branch","len":1,"c":false},{"a":2624,"n":"ending_loop","k":"routine","len":13,"c":true},{"a":2637,"n":"ending_filenames","k":"table","len":22,"c":true},{"a":2659,"n":"ending_load_file","k":"routine","len":78,"c":true},{"a":2721,"n":"b_0AA1","k":"branch","len":1,"c":false},{"a":2736,"n":"r_0AB0","k":"branch","len":1,"c":false},{"a":2737,"n":"ending_drive_code","k":"table","len":238,"c":true},{"a":2975,"n":"ending_fastload","k":"routine","len":39,"c":true},{"a":3014,"n":"f_0BC6","k":"table","len":8,"c":true},{"a":3022,"n":"b_0BCE","k":"routine","len":211,"c":true},{"a":3041,"n":"b_0BE1","k":"branch","len":1,"c":false},{"a":3053,"n":"b_0BED","k":"branch","len":1,"c":false},{"a":3081,"n":"b_0C09","k":"branch","len":1,"c":false},{"a":3105,"n":"b_0C21","k":"branch","len":1,"c":false},{"a":3116,"n":"b_0C2C","k":"branch","len":1,"c":false},{"a":3134,"n":"b_0C3E","k":"branch","len":1,"c":false},{"a":3158,"n":"b_0C56","k":"branch","len":1,"c":false},{"a":3173,"n":"b_0C65","k":"branch","len":1,"c":false},{"a":3183,"n":"b_0C6F","k":"branch","len":1,"c":false},{"a":3190,"n":"b_0C76","k":"branch","len":1,"c":false},{"a":3202,"n":"b_0C82","k":"branch","len":1,"c":false},{"a":3205,"n":"b_0C85","k":"branch","len":1,"c":false},{"a":3215,"n":"b_0C8F","k":"branch","len":1,"c":false},{"a":3233,"n":"s_0CA1","k":"routine","len":27,"c":true},{"a":3259,"n":"r_0CBB","k":"branch","len":1,"c":false},{"a":3260,"n":"s_0CBC","k":"routine","len":21,"c":true},{"a":3267,"n":"b_0CC3","k":"branch","len":1,"c":false},{"a":3281,"n":"a_0CD1","k":"routine","len":15,"c":true},{"a":3283,"n":"b_0CD3","k":"branch","len":1,"c":false},{"a":3285,"n":"b_0CD5","k":"branch","len":1,"c":false},{"a":3296,"n":"f_0CE0","k":"routine","len":32,"c":true},{"a":3328,"n":"s_0D00","k":"routine","len":14,"c":true},{"a":3345,"n":"ending_colours","k":"table","len":3,"c":true},{"a":3348,"n":"a_0D14","k":"variable","len":1,"c":true},{"a":3349,"n":"a_0D15","k":"variable","len":1,"c":true},{"a":3350,"n":"a_0D16","k":"variable","len":1,"c":true},{"a":3351,"n":"a_0D17","k":"variable","len":1,"c":true},{"a":3352,"n":"d_0D18","k":"table","len":256,"c":true},{"a":3565,"n":"j_0DED","k":"variable","len":1,"c":false},{"a":16384,"n":"ending_screen","k":"variable","len":1,"c":true},{"a":16385,"n":"f_4001","k":"table","len":22,"c":true},{"a":16407,"n":"f_4017","k":"variable","len":1,"c":true},{"a":16408,"n":"f_4018","k":"table","len":16,"c":true},{"a":16424,"n":"f_4028","k":"variable","len":1,"c":true},{"a":16425,"n":"f_4029","k":"table","len":22,"c":true},{"a":16447,"n":"f_403F","k":"variable","len":1,"c":true},{"a":16448,"n":"f_4040","k":"table","len":16,"c":true},{"a":16464,"n":"f_4050","k":"variable","len":1,"c":true},{"a":16465,"n":"f_4051","k":"table","len":22,"c":true},{"a":16487,"n":"f_4067","k":"variable","len":1,"c":true},{"a":16488,"n":"f_4068","k":"table","len":16,"c":true},{"a":16504,"n":"f_4078","k":"variable","len":1,"c":true},{"a":16505,"n":"f_4079","k":"table","len":22,"c":true},{"a":16527,"n":"f_408F","k":"variable","len":1,"c":true},{"a":16528,"n":"f_4090","k":"table","len":16,"c":true},{"a":16544,"n":"f_40A0","k":"variable","len":1,"c":true},{"a":16545,"n":"f_40A1","k":"table","len":22,"c":true},{"a":16567,"n":"f_40B7","k":"variable","len":1,"c":true},{"a":16568,"n":"f_40B8","k":"table","len":16,"c":true},{"a":16584,"n":"f_40C8","k":"variable","len":1,"c":true},{"a":16585,"n":"f_40C9","k":"table","len":22,"c":true},{"a":16607,"n":"f_40DF","k":"variable","len":1,"c":true},{"a":16608,"n":"f_40E0","k":"table","len":16,"c":true},{"a":16624,"n":"f_40F0","k":"variable","len":1,"c":true},{"a":16625,"n":"f_40F1","k":"table","len":15,"c":true},{"a":16640,"n":"f_4100","k":"table","len":7,"c":true},{"a":16647,"n":"f_4107","k":"variable","len":1,"c":true},{"a":16648,"n":"f_4108","k":"table","len":16,"c":true},{"a":16664,"n":"f_4118","k":"variable","len":1,"c":true},{"a":16665,"n":"f_4119","k":"table","len":22,"c":true},{"a":16687,"n":"f_412F","k":"variable","len":1,"c":true},{"a":16688,"n":"f_4130","k":"table","len":16,"c":true},{"a":16704,"n":"f_4140","k":"variable","len":1,"c":true},{"a":16705,"n":"f_4141","k":"table","len":22,"c":true},{"a":16727,"n":"f_4157","k":"variable","len":1,"c":true},{"a":16728,"n":"f_4158","k":"table","len":16,"c":true},{"a":16744,"n":"f_4168","k":"variable","len":1,"c":true},{"a":16745,"n":"f_4169","k":"table","len":22,"c":true},{"a":16767,"n":"f_417F","k":"variable","len":1,"c":true},{"a":16768,"n":"f_4180","k":"table","len":16,"c":true},{"a":16784,"n":"f_4190","k":"variable","len":1,"c":true},{"a":16785,"n":"f_4191","k":"table","len":22,"c":true},{"a":16807,"n":"f_41A7","k":"variable","len":1,"c":true},{"a":16808,"n":"f_41A8","k":"table","len":16,"c":true},{"a":16824,"n":"f_41B8","k":"variable","len":1,"c":true},{"a":16825,"n":"f_41B9","k":"table","len":22,"c":true},{"a":16847,"n":"f_41CF","k":"variable","len":1,"c":true},{"a":16848,"n":"f_41D0","k":"table","len":16,"c":true},{"a":16864,"n":"f_41E0","k":"variable","len":1,"c":true},{"a":16865,"n":"f_41E1","k":"table","len":31,"c":true},{"a":16896,"n":"f_4200","k":"table","len":8,"c":true},{"a":16904,"n":"f_4208","k":"variable","len":1,"c":true},{"a":16905,"n":"f_4209","k":"table","len":39,"c":true},{"a":16944,"n":"f_4230","k":"variable","len":1,"c":true},{"a":16945,"n":"f_4231","k":"table","len":39,"c":true},{"a":16984,"n":"f_4258","k":"variable","len":1,"c":true},{"a":16985,"n":"f_4259","k":"table","len":39,"c":true},{"a":17024,"n":"f_4280","k":"variable","len":1,"c":true},{"a":17025,"n":"f_4281","k":"table","len":39,"c":true},{"a":17064,"n":"f_42A8","k":"variable","len":1,"c":true},{"a":17065,"n":"f_42A9","k":"table","len":39,"c":true},{"a":17104,"n":"f_42D0","k":"table","len":40,"c":true},{"a":17144,"n":"f_42F8","k":"table","len":8,"c":true},{"a":17152,"n":"f_4300","k":"table","len":32,"c":true},{"a":17184,"n":"f_4320","k":"table","len":7,"c":true},{"a":17191,"n":"f_4327","k":"variable","len":1,"c":true},{"a":17192,"n":"f_4328","k":"table","len":32,"c":true},{"a":17224,"n":"f_4348","k":"table","len":7,"c":true},{"a":17231,"n":"f_434F","k":"variable","len":1,"c":true},{"a":17232,"n":"f_4350","k":"table","len":32,"c":true},{"a":17264,"n":"f_4370","k":"table","len":7,"c":true},{"a":17271,"n":"f_4377","k":"variable","len":1,"c":true},{"a":17272,"n":"f_4378","k":"table","len":32,"c":true},{"a":17304,"n":"f_4398","k":"table","len":7,"c":true},{"a":17311,"n":"f_439F","k":"variable","len":1,"c":true},{"a":17312,"n":"f_43A0","k":"table","len":32,"c":true},{"a":17344,"n":"f_43C0","k":"table","len":7,"c":true},{"a":17351,"n":"f_43C7","k":"variable","len":1,"c":true},{"a":17352,"n":"f_43C8","k":"table","len":32,"c":true},{"a":24576,"n":"ending_charset","k":"table","len":1024,"c":true}],"records":[{"a":0,"t":"gap","n":2304},{"a":1,"t":"note","l":"zpa_01","c":"The processor port: $35 in play (RAM everywhere but the I/O), $36 while a file loads (the KERNAL banked in for the drive commands), $30 for each byte the loader stores, so a file can load under the I/O area.","note":"outside the tracked image","x":[2307,2671,2726,3331,3338]},{"a":2,"t":"note","l":"zpa_02","c":"Set by the loader from $B9: when it is 0 a file loads at the caller's X/Y address, otherwise at its own.","note":"outside the tracked image","x":[2980,3247]},{"a":3,"t":"note","l":"zpa_03","c":"The address of the next 32 bytes of drive code to send (low byte), from $0416.","note":"outside the tracked image","x":[3027,3081,3095,3099]},{"a":4,"t":"note","l":"zpa_04","c":"The drive code's address, high byte.","note":"outside the tracked image","x":[3031,3103]},{"a":5,"t":"note","l":"zpa_05","c":"Two uses: the drive address of the next M-W, low byte, while a file loads; the walker record being moved ($E713) in play.","note":"outside the tracked image","x":[3035,3064,3106,3110]},{"a":6,"t":"note","l":"zpa_06","c":"The high byte of $05's address in both uses.","note":"outside the tracked image","x":[3039,3069,3114,3116]},{"a":10,"t":"note","l":"zpa_0A","c":"Scratch: keeps X in $13C6 and the random calls, and counts the continue screen's wait.","note":"outside the tracked image"},{"a":11,"t":"note","l":"zpa_0B","c":"Scratch: the scroll table index in $14E1, the object being checked in $1F37, the player's column in $21A1, the exit's place in $2388.","note":"outside the tracked image"},{"a":12,"t":"note","l":"zpa_0C","c":"Scratch: the player's line masked to an 8-line row, to compare with an enemy's.","note":"outside the tracked image"},{"a":14,"t":"note","l":"zpa_0E","c":"The multiplexer's place in the sort list: the next object the sprite interrupt places.","note":"outside the tracked image"},{"a":16,"t":"note","c":"Scratch for the sort ($F2B3): where the object being moved goes.","note":"outside the tracked image"},{"a":17,"t":"note","c":"Scratch for the sort: the place it came from.","note":"outside the tracked image"},{"a":18,"t":"note","c":"Scratch for the sort: the object being moved.","note":"outside the tracked image"},{"a":19,"t":"note","l":"zpp_13","c":"A pointer, low byte: the enemy record being run (set by $0F70), or where text or screen rows are written.","note":"outside the tracked image"},{"a":20,"t":"note","l":"zpa_14","c":"The pointer $13's high byte.","note":"outside the tracked image"},{"a":21,"t":"note","c":"Scratch for spawning: a record's x less the camera's, low byte.","note":"outside the tracked image"},{"a":22,"t":"note","l":"zpf_16","c":"The high byte that goes with $15 (scratch for spawning: a record's x less the camera's, low byte).","note":"outside the tracked image"},{"a":23,"t":"note","c":"Scratch for spawning: a record's line less the camera's, low byte.","note":"outside the tracked image"},{"a":24,"t":"note","c":"The high byte that goes with $17 (scratch for spawning: a record's line less the camera's, low byte).","note":"outside the tracked image"},{"a":33,"t":"note","l":"zpa_21","c":"A pointer, low byte: the text $0FBA prints, the map $0673 reads, the respawn list.","note":"outside the tracked image"},{"a":34,"t":"note","l":"zpa_22","c":"The pointer $21's high byte.","note":"outside the tracked image"},{"a":39,"t":"note","l":"camera_x","c":"The camera's x in the level, in pixels, low byte; with $28. The window shows the level from here less $18.","note":"outside the tracked image"},{"a":40,"t":"note","l":"zpa_28","c":"The camera's x, high byte.","note":"outside the tracked image","x":[2314,2326,2332,2347,2352,2371]},{"a":41,"t":"note","l":"camera_y","c":"The camera's y in the level, in lines, low byte; with $2A.","note":"outside the tracked image","x":[2318,2330,2336,2356,2360,2378]},{"a":42,"t":"note","l":"zpa_2A","c":"The camera's y, high byte.","note":"outside the tracked image"},{"a":43,"t":"note","l":"zpa_2B","c":"Scratch: 7 less the camera's fine position, for $D016 and $D011.","note":"outside the tracked image"},{"a":48,"t":"note","l":"zpa_30","c":"The map row being written by $0673, low byte; also the colour RAM pointer in $13C6.","note":"outside the tracked image"},{"a":49,"t":"note","l":"zpa_31","c":"The high byte that goes with $30 (the map row being written by $0673, low byte; also the colour RAM pointer in $13C6).","note":"outside the tracked image"},{"a":50,"t":"note","l":"zpa_32","c":"The screen row for the new edge (0, $13 or $FF for none), set by $1593.","note":"outside the tracked image","x":[2320]},{"a":51,"t":"note","l":"zpa_33","c":"The screen column for the new edge (0, $27 or $FF for none).","note":"outside the tracked image"},{"a":52,"t":"note","l":"zpa_34","c":"The level map address of the new edge column, low byte.","note":"outside the tracked image"},{"a":53,"t":"note","l":"zpa_35","c":"The high byte that goes with $34 (the level map address of the new edge column, low byte).","note":"outside the tracked image"},{"a":54,"t":"note","l":"zpa_36","c":"The level map address of the new edge row, low byte.","note":"outside the tracked image"},{"a":55,"t":"note","l":"zpa_37","c":"The high byte that goes with $36 (the level map address of the new edge row, low byte).","note":"outside the tracked image"},{"a":56,"t":"note","l":"zpa_38","c":"The tile's address in the tile table, low byte, in $0673.","note":"outside the tracked image"},{"a":57,"t":"note","l":"zpa_39","c":"The high byte that goes with $38 (the tile's address in the tile table, low byte, in $0673).","note":"outside the tracked image"},{"a":58,"t":"note","l":"zpa_3A","c":"The second row of the tile being written by $0673, low byte.","note":"outside the tracked image"},{"a":59,"t":"note","l":"zpa_3B","c":"The high byte that goes with $3A (the second row of the tile being written by $0673, low byte).","note":"outside the tracked image"},{"a":60,"t":"note","l":"zpa_3C","c":"A pointer, low byte: the map column $0673 starts at, the map address in $13C6 and $1593.","note":"outside the tracked image"},{"a":61,"t":"note","l":"zpa_3D","c":"The high byte that goes with $3C (a pointer, low byte: the map column $0673 starts at, the map address in $13C6 and $1593).","note":"outside the tracked image"},{"a":62,"t":"note","l":"zpa_3E","c":"A pointer, low byte: the tile map $0673 reads; the screen row in $1655.","note":"outside the tracked image"},{"a":63,"t":"note","l":"zpa_3F","c":"The high byte that goes with $3E (a pointer, low byte: the tile map $0673 reads; the screen row in $1655).","note":"outside the tracked image"},{"a":64,"t":"note","l":"zpa_40","c":"Which screen the scroll's edges are drawn into: 0 the one at $4000, 1 the one at $4400.","note":"outside the tracked image"},{"a":65,"t":"note","l":"zpa_41","c":"The value for $D016 (horizontal fine scroll), set each pass and written by the interrupt at $136F.","note":"outside the tracked image"},{"a":66,"t":"note","l":"zpa_42","c":"The value for $D011 (vertical fine scroll), likewise.","note":"outside the tracked image"},{"a":67,"t":"note","l":"zpa_43","c":"The value for $D018: bit 4 picks the shown screen, flipped by $1579.","note":"outside the tracked image"},{"a":68,"t":"note","c":"The line below which the sprite interrupt stops placing sprites and waits for the next interrupt.","note":"outside the tracked image"},{"a":70,"t":"note","l":"zpa_46","c":"A pointer, low byte: the stage's file list in the overlay, while $1B28 loads.","note":"outside the tracked image"},{"a":71,"t":"note","l":"zpa_47","c":"The high byte that goes with $46 (a pointer, low byte: the stage's file list in the overlay, while $1B28 loads).","note":"outside the tracked image"},{"a":74,"t":"note","l":"zpa_4A","c":"The player's animation script, low byte, read by $1A85.","note":"outside the tracked image"},{"a":75,"t":"note","l":"zpa_4B","c":"The high byte that goes with $4A (the player's animation script, low byte, read by $1A85).","note":"outside the tracked image"},{"a":76,"t":"note","l":"zpa_4C","c":"The player's place in his animation script.","note":"outside the tracked image"},{"a":82,"t":"note","l":"zpa_52","c":"Keeps Y (the object) in the collision loop at $1018.","note":"outside the tracked image"},{"a":83,"t":"note","l":"zpa_53","c":"Keeps X (the place in the sort list) in that loop.","note":"outside the tracked image"},{"a":84,"t":"note","l":"zpp_54","c":"The player's row in the screen, plus $78, low byte: where $20EF looks for the ground.","note":"outside the tracked image"},{"a":85,"t":"note","l":"zpa_55","c":"The high byte that goes with $54 (the player's row in the screen, plus $78, low byte: where $20EF looks for the ground).","note":"outside the tracked image"},{"a":86,"t":"note","l":"zpa_56","c":"The player's column, kept for $20EF.","note":"outside the tracked image"},{"a":92,"t":"note","l":"facing","c":"The player's facing: 0 right, 8 left, set by the joystick ($F314).","note":"outside the tracked image"},{"a":93,"t":"note","l":"zpa_5D","c":"Scratch for the collision checks: the player's or bullet's x less a margin.","note":"outside the tracked image"},{"a":94,"t":"note","l":"zpa_5E","c":"Its high bit.","note":"outside the tracked image"},{"a":95,"t":"note","l":"zpa_5F","c":"The record being spawned, times two, by $E001 and $E480; kept in the object's $60+n.","note":"outside the tracked image"},{"a":96,"t":"note","l":"f_0060","c":"For each object n, $60+n: the number (times two) of its enemy record, which $E82E turns into an address; for walkers, the direction they moved ($E588). $FF for the player and bullets.","note":"outside the tracked image"},{"a":97,"t":"note","c":"$60+n for object 1.","note":"outside the tracked image"},{"a":98,"t":"note","c":"$60+n for object 2.","note":"outside the tracked image"},{"a":99,"t":"note","l":"zpf_63","c":"$60+n for object 3, the first enemy slot: $0F70 reads $63+X.","note":"outside the tracked image"},{"a":100,"t":"note","l":"a_0064","c":"Two uses: $60+n for object 4, and, while a stage loads, the unpacker's input pointer (low byte).","note":"outside the tracked image"},{"a":101,"t":"note","l":"a_0065","c":"$60+n for object 5, and the unpacker's input pointer, high byte.","note":"outside the tracked image"},{"a":102,"t":"note","l":"a_0066","c":"$60+n for object 6, and the unpacker's output pointer, low byte.","note":"outside the tracked image"},{"a":103,"t":"note","l":"a_0067","c":"$60+n for object 7, and the unpacker's output pointer, high byte.","note":"outside the tracked image"},{"a":104,"t":"note","l":"zpa_68","c":"The unpacker's count of sequences left, low byte.","note":"outside the tracked image"},{"a":105,"t":"note","l":"zpa_69","c":"The high byte that goes with $68 (the unpacker's count of sequences left, low byte).","note":"outside the tracked image"},{"a":106,"t":"note","l":"zpa_6A","c":"The unpacker's count of blocks left.","note":"outside the tracked image"},{"a":107,"t":"note","l":"zpa_6B","c":"The value the unpacker last decoded or read, low byte.","note":"outside the tracked image"},{"a":108,"t":"note","l":"zpa_6C","c":"The high byte that goes with $6B (the value the unpacker last decoded or read, low byte).","note":"outside the tracked image"},{"a":109,"t":"note","l":"zpa_6D","c":"Scratch for the code table builder.","note":"outside the tracked image"},{"a":110,"t":"note","l":"zpa_6E","c":"The high byte that goes with $6D (scratch for the code table builder).","note":"outside the tracked image"},{"a":111,"t":"note","l":"zpa_6F","c":"The code table the unpacker is using, low byte ($4000, $4080 or $4100).","note":"outside the tracked image"},{"a":112,"t":"note","l":"zpa_70","c":"The high byte that goes with $6F (the code table the unpacker is using, low byte ($4000, $4080 or $4100)).","note":"outside the tracked image"},{"a":113,"t":"note","l":"zpa_71","c":"The unpacker's bit buffer, lowest byte; in play, the facing the jump started with ($20EF).","note":"outside the tracked image"},{"a":114,"t":"note","l":"f_0072","c":"The bit buffer's second byte; in play, bullet 1's muzzle count (bullet 2's at $73).","note":"outside the tracked image"},{"a":115,"t":"note","l":"zpa_73","c":"The bit buffer's third byte.","note":"outside the tracked image"},{"a":116,"t":"note","l":"zpa_74","c":"The bit buffer's top byte.","note":"outside the tracked image"},{"a":117,"t":"note","l":"zpa_75","c":"The bits left in the buffer.","note":"outside the tracked image"},{"a":118,"t":"note","l":"zpa_76","c":"The code length being built ($F7D9).","note":"outside the tracked image"},{"a":119,"t":"note","l":"zpa_77","c":"The next code, low byte.","note":"outside the tracked image"},{"a":120,"t":"note","l":"zpa_78","c":"The next code, high byte.","note":"outside the tracked image"},{"a":121,"t":"note","l":"zpa_79","c":"The code step, low byte.","note":"outside the tracked image"},{"a":122,"t":"note","l":"zpa_7A","c":"The code step, high byte.","note":"outside the tracked image"},{"a":123,"t":"note","l":"zpa_7B","c":"A pointer, low byte: the enemy record being spawned ($E001, $E480); in the unpacker, where a copy comes from.","note":"outside the tracked image"},{"a":124,"t":"note","l":"zpa_7C","c":"The high byte that goes with $7B (a pointer, low byte: the enemy record being spawned ($E001, $E480); in the unpacker, where a copy comes from).","note":"outside the tracked image"},{"a":125,"t":"note","l":"zpa_7D","c":"The builder's count.","note":"outside the tracked image"},{"a":126,"t":"note","c":"The byte before the sort list, read by the sort as $7E+X.","note":"outside the tracked image"},{"a":127,"t":"note","l":"sort_list","c":"The multiplexer's list of the 16 objects, sorted by line ($F2B3), with an end mark ($FF) at $8F.","note":"outside the tracked image"},{"a":144,"t":"note","l":"zpa_90","c":"The KERNAL's status byte: bit 1 set means the drive did not find the file.","note":"outside the tracked image","x":[3007]},{"a":147,"t":"note","l":"zpa_93","c":"The KERNAL's load/verify flag, cleared by the loader.","note":"outside the tracked image","x":[2694]},{"a":157,"t":"note","l":"zpa_9D","c":"The KERNAL's message flag, cleared so no messages are printed.","note":"outside the tracked image"},{"a":164,"t":"note","l":"zpa_A4","c":"The byte being received from the drive, built two bits at a time.","note":"outside the tracked image","x":[3290,3293,3299,3302,3308,3311,3317,3320,3325]},{"a":174,"t":"note","l":"zpa_AE","c":"Where the loader stores the next byte, low byte.","note":"outside the tracked image","x":[3220,3222,3236,3253,3334]},{"a":175,"t":"note","l":"zpa_AF","c":"Two uses: the loader's store address, high byte; in play, object 0's type ($AF+n is each object's type: 0 a walker, from $24 an enemy behaviour, 2-$22 pickups and hazards).","note":"outside the tracked image","x":[3181,3213,3225,3229,3243,3257]},{"a":176,"t":"note","l":"f_00B0","c":"Object 1's type (the first bullet).","note":"outside the tracked image"},{"a":177,"t":"note","c":"Object 2's type (the second bullet).","note":"outside the tracked image"},{"a":178,"t":"note","l":"zpa_B2","c":"Object 3's type, the first of the slots $0F70 runs: $B2+X is slot X's behaviour.","note":"outside the tracked image"},{"a":179,"t":"note","l":"zpa_B3","c":"Object 4's type, the second projectile slot's behaviour ($B2+1).","note":"outside the tracked image"},{"a":183,"t":"note","l":"zpa_B7","c":"The KERNAL's filename length, set before each load.","note":"outside the tracked image","x":[2401,2544]},{"a":184,"t":"note","l":"zpa_B8","c":"The KERNAL's logical file number.","note":"outside the tracked image","x":[2680]},{"a":185,"t":"note","l":"zpa_B9","c":"The KERNAL's secondary address.","note":"outside the tracked image","x":[2682,2686,2978,2984,2994]},{"a":186,"t":"note","l":"zpa_BA","c":"The KERNAL's device number, 8.","note":"outside the tracked image","x":[2667,2688,2989,3002,3041,3122]},{"a":187,"t":"note","l":"zpp_BB","c":"The KERNAL's filename pointer, low byte.","note":"outside the tracked image","x":[2334,2354,2376,2393,2712]},{"a":188,"t":"note","l":"zpa_BC","c":"The high byte that goes with $BB (the KERNAL's filename pointer, low byte).","note":"outside the tracked image","x":[2338,2362,2382,2397]},{"a":189,"t":"note","c":"Object 14's type.","note":"outside the tracked image"},{"a":190,"t":"note","c":"Object 15's type.","note":"outside the tracked image"},{"a":191,"t":"note","l":"zpa_BF","c":"$BF+n: each object's colour (low four bits) with the ninth bit of its x in bit 7 (stored inverted, so negative means x of 256 or more); $BF is the player's.","note":"outside the tracked image"},{"a":192,"t":"note","l":"f_00C0","c":"Object 1's colour and x bit.","note":"outside the tracked image"},{"a":193,"t":"note","c":"Object 2's colour and x bit.","note":"outside the tracked image"},{"a":194,"t":"note","l":"zpf_C2","c":"Slot X's colour and x bit ($C2+X, object X+3).","note":"outside the tracked image"},{"a":195,"t":"note","l":"zpa_C3","c":"Two uses: the loader's load address, low byte; object 4's colour and x bit.","note":"outside the tracked image","x":[2690,3251]},{"a":196,"t":"note","l":"zpa_C4","c":"The loader's load address, high byte; object 5's colour.","note":"outside the tracked image","x":[2692,3255]},{"a":198,"t":"note","l":"zpa_C6","c":"The block's address from the drive, low byte; object 7's colour.","note":"outside the tracked image","x":[3238]},{"a":199,"t":"note","l":"zpa_C7","c":"Its high byte; object 8's colour.","note":"outside the tracked image","x":[3245]},{"a":205,"t":"note","c":"Object 14's colour.","note":"outside the tracked image"},{"a":206,"t":"note","c":"Object 15's colour.","note":"outside the tracked image"},{"a":207,"t":"note","l":"player_frame","c":"$CF+n: each object's frame, the sprite pointer value; $CF is the player's.","note":"outside the tracked image"},{"a":208,"t":"note","l":"f_00D0","c":"Object 1's frame.","note":"outside the tracked image"},{"a":210,"t":"note","l":"zpf_D2","c":"Slot X's frame ($D2+X).","note":"outside the tracked image"},{"a":211,"t":"note","l":"zpa_D3","c":"Object 4's frame.","note":"outside the tracked image"},{"a":221,"t":"note","c":"Object 14's frame.","note":"outside the tracked image"},{"a":222,"t":"note","c":"Object 15's frame.","note":"outside the tracked image"},{"a":223,"t":"note","l":"player_line","c":"$DF+n: each object's line on the screen, 0 when the object is not in use; $DF is the player's.","note":"outside the tracked image"},{"a":224,"t":"note","l":"f_00E0","c":"Object 1's line.","note":"outside the tracked image"},{"a":225,"t":"note","c":"Object 2's line.","note":"outside the tracked image"},{"a":226,"t":"note","l":"zpf_E2","c":"Slot X's line ($E2+X).","note":"outside the tracked image"},{"a":227,"t":"note","l":"zpa_E3","c":"Object 4's line.","note":"outside the tracked image"},{"a":237,"t":"note","c":"Object 14's line.","note":"outside the tracked image"},{"a":238,"t":"note","c":"Object 15's line.","note":"outside the tracked image"},{"a":239,"t":"note","l":"player_x","c":"$EF+n: each object's x, low byte; $EF is the player's.","note":"outside the tracked image"},{"a":240,"t":"note","l":"f_00F0","c":"Object 1's x.","note":"outside the tracked image"},{"a":242,"t":"note","l":"zpf_F2","c":"Slot X's x ($F2+X).","note":"outside the tracked image"},{"a":243,"t":"note","l":"zpa_F3","c":"Object 4's x.","note":"outside the tracked image"},{"a":251,"t":"note","l":"zpa_FB","c":"Object 12's x; also the sound effect pointer, low byte, which $F88F keeps and puts back.","note":"outside the tracked image"},{"a":252,"t":"note","l":"zpa_FC","c":"Object 13's x; also the sound pointer's high byte.","note":"outside the tracked image"},{"a":253,"t":"note","c":"Object 14's x.","note":"outside the tracked image"},{"a":254,"t":"note","c":"Object 15's x.","note":"outside the tracked image"},{"a":673,"t":"note","l":"a_02A1","c":"The KERNAL's RS-232 interrupt flags; $03F4 clears it before a load so no serial interrupt can interfere.","note":"outside the tracked image","x":[2706]},{"a":678,"t":"note","l":"a_02A6","c":"The KERNAL's PAL/NTSC flag (1 on PAL), set at power-on: $0633 reads it to adjust the fast loader's timing.","note":"outside the tracked image","x":[3278]},{"a":788,"t":"note","c":"The KERNAL's IRQ vector; $EC95 points it at $E1AC as well as $FFFE, although the game runs with the KERNAL banked out.","note":"outside the tracked image"},{"a":789,"t":"note","c":"The high byte of the KERNAL's IRQ vector, set to $E1 by $EC9D.","note":"outside the tracked image"},{"a":960,"t":"note","l":"game_entry","c":"The game's first instruction, where the title program's JMP $03C0 hands over: one jump to the start-up at $EC66. GAM0 loads from $03C0, so this is also the first byte of that file.","note":"outside the tracked image"},{"a":963,"t":"note","l":"load_file","c":"Loads one file from drive 8 with the game's own fast loader. Filename at ($BB) with its length in $B7, load address in X (low) and Y (high), or the file's own address when $02 says so. A name starting with \"$\" goes to $248D instead. Masks the raster interrupt and CIA 1's, banks the KERNAL in ($01=$36) for the drive commands, blanks the screen ($D011=$0B), calls $0504, then banks back to $35 and turns the raster interrupt on again.","note":"outside the tracked image"},{"a":1043,"t":"note","l":"j_0413","c":"A filename beginning \"$\" (the directory) is not loaded: it jumps to $248D.","note":"outside the tracked image"},{"a":1046,"t":"note","l":"drive_code","c":"238 bytes of 1541 drive code. $0504 writes 256 bytes from here into the drive's RAM at $0600-$06FF with M-W commands and starts it with M-E at $06C7 (so its entry is $04DD here); the last 18 bytes it sends are the start of $0504 itself, sent along and not run. The drive finds the file and sends it two bits at a time over the serial port, which $0621 reads.","note":"outside the tracked image"},{"a":1284,"t":"note","l":"fastload_receive","c":"Opens the file through the KERNAL (OPEN, TALK, TKSA, ACPTR, CLOSE) to make the drive find it, and returns if the status $90 says it failed. Then uploads the drive code at $0416 in eight 32-byte M-W blocks, starts it with M-E, and receives the file: each block begins with a count byte, the first block's next two bytes are the load address (kept, or replaced by X/Y from $03C3), and every data byte is stored through $0665 with all ROMs and I/O banked out. Returns the end address in X/Y.","note":"outside the tracked image"},{"a":1323,"t":"note","l":"drive_commands","c":"\"M-W\" and \"M-E\" followed by $C7 $06: the drive commands $0504 sends; the M-E jumps to $06C7 in the drive.","note":"outside the tracked image"},{"a":1331,"t":"note","l":"b_0533","c":"The file was found: uploads the drive code ($0416, 32 bytes a time with M-W to drive $0600-$06FF), starts it with M-E, then receives the file block by block until the drive sends a short block.","note":"outside the tracked image"},{"a":1542,"t":"note","l":"fastload_address","c":"Reads the two bytes of a block's load address from the drive into $AE/$AF (and $C6/$C7); when $02 is zero, $AE/$AF take the caller's address from $C3/$C4 instead.","note":"outside the tracked image"},{"a":1569,"t":"note","l":"fastload_byte","c":"Receives one byte from the drive: signals ready on CIA 2 port A ($DD00=$0B), waits for the drive to pull bit 7, then reads $DD00 four times, two bits each (bits 6 and 7), building the byte in $A4. Flashes the border down and up around each byte, which is the stripe pattern seen while it loads. The two BEQs on $02A6 (the KERNAL's PAL/NTSC flag) branch to the next instruction either way: they adjust the timing by a cycle on PAL machines.","note":"outside the tracked image"},{"a":1637,"t":"note","l":"store_banked_out","c":"Stores A at ($AE),Y with $01=$30 (all RAM, no I/O), so a file can load under the I/O area and the ROMs, then restores $01=$36 and steps Y.","note":"outside the tracked image"},{"a":1651,"t":"note","l":"build_level_map","c":"Expands the level's tile map into the character map the screen scrolls over: 144 tile columns ($190F counts them) of 35 tiles each, read down a column from ($3E/$3F), which steps 64 bytes a column. Each map byte names a 2x2 tile, whose four characters it reads from $4000 + byte*4 and writes as two rows of two into a map 288 characters wide starting at $7D80, so the level is 288 by 70 characters ($7D80-$CC3F). When $1AAE is $10 it then puts character $47 into sixteen cells, four rows of four from $A028.","note":"outside the tracked image"},{"a":1888,"t":"note","l":"do_nothing","c":"A lone RTS: the handler for behaviours and pickups that do nothing, named in several tables ($077D, $10CE, $178F).","note":"outside the tracked image"},{"a":1889,"t":"note","l":"title_filename","c":"\"TITLE\", the file $0766 loads when the game is over. No file of that name is on this disk (its title program is called LOADER).","note":"outside the tracked image"},{"a":1894,"t":"note","l":"return_to_title","c":"The game is over: loads \"TITLE\" at $C000 and jumps there. On this disk image there is no file called TITLE, so the load finds nothing and the jump runs the level data that is at $C000, which crashes (facts.md).","note":"outside the tracked image"},{"a":1917,"t":"note","l":"behaviour_handlers","c":"27 words, one per behaviour number (even numbers $00-$34, kept in $B2+slot), each the routine $0F70 calls for an object every pass by writing it into the JSR at $0FA6. $00-$10 are $0F61 (animate only); then $0D81, $0D91, $09D5, $09D9, $085B, $EA16, $28A5, $28B3, $28D0, $0BFD, $0DDD, $0B27, $0A05, $08E6, $0899, $07B3, $EAD4 and $0760.","note":"outside the tracked image"},{"a":1918,"t":"note","l":"behaviour_handlers_hi","c":"The high bytes of behaviour_handlers's two-byte entries, which $0F82 reads through $077E, indexed.","note":"outside the tracked image"},{"a":1971,"t":"note","l":"bh_30","c":"Behaviour $30: an enemy that hides and shows itself. With frame 0 it sets frame $E7, a countdown of $1E in its record and a position, or empties itself; while shown it counts the record's +$0B down to frame $E1 and moves one pixel left a pass. When the player stands on its 8-line row and its countdown at +$0C has run out, it fires into slot 1 (if free) with sound $10.","note":"outside the tracked image"},{"a":2139,"t":"note","l":"bh_1A","c":"Behaviour $1A: a thrown object that climbs 3 lines a pass while the counter $28A2 runs down, switching to frame $AC with sound $0D when it reaches $13, and removes itself at line $B8 or when the counter runs out.","note":"outside the tracked image"},{"a":2201,"t":"note","l":"bh_2E","c":"Behaviour $2E: counts its record's +$0B down, showing frame $A7 below $46; at the end of the count it waits a random $50-$6F passes and, when slot 0 is free, puts a copy of itself into slot 0 as behaviour $1A with frame $AA and sets $28A2 (to $30, or $26 when $1AAE is below 2).","note":"outside the tracked image"},{"a":2278,"t":"note","l":"bh_2C","c":"Behaviour $2C: waits a random 0-127 passes, then if the player is on its 8-line row turns to face him (frames $AD and $A9) and fires into slot 0 or 1 (a random wait of $64-$83 if both are busy); on another row it shows frame $A5 and, when it and the player are on the same side and slot 0 is free, throws itself into slot 0 as behaviour $1A with sound $0E.","note":"outside the tracked image"},{"a":2304,"l":"ending_start","c":"The ending, from the file 111, entered from $375C when the last door is taken, with $32 saying who was played (1 Riggs, 0 Murtaugh). Loads that character's portrait (MEL and ME0 for Riggs, MUR and MU0 for Murtaugh: the screen at $4000, the characters at $6000) and colours (ME1 or MU1, at $0D11), then MUSI at $E000 over the game's code, and starts tune 0, the title's. Sets VIC bank 1 with the screen at $4000 and characters at $6000, multicolour characters, the four colours from $0D14-$0D17, colours each cell from $0D18 by its character, and blanks rows 20-24.","t":"code","b":[120],"m":"sei"},{"a":2305,"t":"code","b":[169,53],"m":"lda","o":"#$35"},{"a":2307,"t":"code","b":[133,1],"m":"sta","oa":1,"o":"zpa_01"},{"a":2309,"t":"code","b":[162,255],"m":"ldx","o":"#$FF"},{"a":2311,"t":"code","b":[154],"m":"txs"},{"a":2312,"t":"code","b":[169,77],"m":"lda","o":"#$4D"},{"a":2314,"t":"code","b":[133,40],"m":"sta","oa":40,"o":"zpa_28"},{"a":2316,"t":"code","b":[169,10],"m":"lda","o":"#$0A"},{"a":2318,"t":"code","b":[133,41],"m":"sta","oa":41,"o":"camera_y"},{"a":2320,"t":"code","b":[165,50],"m":"lda","oa":50,"o":"zpa_32"},{"a":2322,"t":"code","b":[208,8],"m":"bne","oa":2332,"o":"b_091C"},{"a":2324,"t":"code","b":[169,86],"m":"lda","o":"#$56"},{"a":2326,"t":"code","b":[133,40],"m":"sta","oa":40,"o":"zpa_28"},{"a":2328,"t":"code","b":[169,10],"m":"lda","o":"#$0A"},{"a":2330,"t":"code","b":[133,41],"m":"sta","oa":41,"o":"camera_y"},{"a":2332,"l":"b_091C","t":"code","b":[165,40],"m":"lda","oa":40,"o":"zpa_28","x":[2322]},{"a":2334,"t":"code","b":[133,187],"m":"sta","oa":187,"o":"zpp_BB"},{"a":2336,"t":"code","b":[165,41],"m":"lda","oa":41,"o":"camera_y"},{"a":2338,"t":"code","b":[133,188],"m":"sta","oa":188,"o":"zpa_BC"},{"a":2340,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":2342,"t":"code","b":[160,64],"m":"ldy","o":"#$40"},{"a":2344,"t":"code","b":[32,99,10],"m":"jsr","oa":2659,"o":"ending_load_file"},{"a":2347,"t":"code","b":[165,40],"m":"lda","oa":40,"o":"zpa_28"},{"a":2349,"t":"code","b":[24],"m":"clc"},{"a":2350,"t":"code","b":[105,3],"m":"adc","o":"#$03"},{"a":2352,"t":"code","b":[133,40],"m":"sta","oa":40,"o":"zpa_28"},{"a":2354,"t":"code","b":[133,187],"m":"sta","oa":187,"o":"zpp_BB"},{"a":2356,"t":"code","b":[165,41],"m":"lda","oa":41,"o":"camera_y"},{"a":2358,"t":"code","b":[105,0],"m":"adc","o":"#$00"},{"a":2360,"t":"code","b":[133,41],"m":"sta","oa":41,"o":"camera_y"},{"a":2362,"t":"code","b":[133,188],"m":"sta","oa":188,"o":"zpa_BC"},{"a":2364,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":2366,"t":"code","b":[160,96],"m":"ldy","o":"#$60"},{"a":2368,"t":"code","b":[32,99,10],"m":"jsr","oa":2659,"o":"ending_load_file"},{"a":2371,"t":"code","b":[165,40],"m":"lda","oa":40,"o":"zpa_28"},{"a":2373,"t":"code","b":[24],"m":"clc"},{"a":2374,"t":"code","b":[105,3],"m":"adc","o":"#$03"},{"a":2376,"t":"code","b":[133,187],"m":"sta","oa":187,"o":"zpp_BB"},{"a":2378,"t":"code","b":[165,41],"m":"lda","oa":41,"o":"camera_y"},{"a":2380,"t":"code","b":[105,0],"m":"adc","o":"#$00"},{"a":2382,"t":"code","b":[133,188],"m":"sta","oa":188,"o":"zpa_BC"},{"a":2384,"t":"code","b":[162,17],"m":"ldx","o":"#$11"},{"a":2386,"t":"code","b":[160,13],"m":"ldy","o":"#$0D"},{"a":2388,"t":"code","b":[32,99,10],"m":"jsr","oa":2659,"o":"ending_load_file"},{"a":2391,"t":"code","b":[169,95],"m":"lda","o":"#$5F"},{"a":2393,"t":"code","b":[133,187],"m":"sta","oa":187,"o":"zpp_BB"},{"a":2395,"t":"code","b":[169,10],"m":"lda","o":"#$0A"},{"a":2397,"t":"code","b":[133,188],"m":"sta","oa":188,"o":"zpa_BC"},{"a":2399,"t":"code","b":[169,4],"m":"lda","o":"#$04"},{"a":2401,"t":"code","b":[133,183],"m":"sta","oa":183,"o":"zpa_B7"},{"a":2403,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":2405,"t":"code","b":[160,224],"m":"ldy","o":"#$E0"},{"a":2407,"t":"code","b":[32,99,10],"m":"jsr","oa":2659,"o":"ending_load_file"},{"a":2410,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":2412,"t":"code","b":[32,0,224],"m":"jsr","oa":57344,"o":"s_E000"},{"a":2415,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":2417,"t":"code","b":[141,21,208],"m":"sta","o":"vic_sprite_enable"},{"a":2420,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":2422,"t":"code","b":[141,16,208],"m":"sta","o":"vic_sprite_x_msb"},{"a":2425,"t":"code","b":[141,28,208],"m":"sta","o":"vic_sprite_multicolour"},{"a":2428,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":2430,"t":"code","b":[142,13,220],"m":"stx","o":"cia1_interrupt"},{"a":2433,"t":"code","b":[142,14,220],"m":"stx","o":"cia1_control_a"},{"a":2436,"t":"code","b":[142,13,221],"m":"stx","o":"cia2_interrupt"},{"a":2439,"t":"code","b":[173,13,220],"m":"lda","o":"cia1_interrupt"},{"a":2442,"t":"code","b":[173,13,221],"m":"lda","o":"cia2_interrupt"},{"a":2445,"t":"code","b":[173,17,208],"m":"lda","o":"vic_control1"},{"a":2448,"t":"code","b":[41,119],"m":"and","o":"#$77"},{"a":2450,"t":"code","b":[9,16],"m":"ora","o":"#$10"},{"a":2452,"t":"code","b":[141,17,208],"m":"sta","o":"vic_control1"},{"a":2455,"t":"code","b":[173,22,208],"m":"lda","o":"vic_control2"},{"a":2458,"t":"code","b":[41,247],"m":"and","o":"#$F7"},{"a":2460,"t":"code","b":[9,16],"m":"ora","o":"#$10"},{"a":2462,"t":"code","b":[141,22,208],"m":"sta","o":"vic_control2"},{"a":2465,"t":"code","b":[173,24,208],"m":"lda","o":"vic_memory"},{"a":2468,"t":"code","b":[41,15],"m":"and","o":"#$0F"},{"a":2470,"t":"code","b":[141,24,208],"m":"sta","o":"vic_memory"},{"a":2473,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":2475,"t":"code","b":[141,28,208],"m":"sta","o":"vic_sprite_multicolour"},{"a":2478,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":2480,"t":"code","b":[141,37,208],"m":"sta","o":"vic_sprite_mc0"},{"a":2483,"t":"code","b":[169,10],"m":"lda","o":"#$0A"},{"a":2485,"t":"code","b":[141,38,208],"m":"sta","o":"vic_sprite_mc1"},{"a":2488,"t":"code","b":[173,24,208],"m":"lda","o":"vic_memory"},{"a":2491,"t":"code","b":[41,240],"m":"and","o":"#$F0"},{"a":2493,"t":"code","b":[9,8],"m":"ora","o":"#$08"},{"a":2495,"t":"code","b":[141,24,208],"m":"sta","o":"vic_memory"},{"a":2498,"t":"code","b":[173,0,221],"m":"lda","o":"cia2_port_a"},{"a":2501,"t":"code","b":[41,252],"m":"and","o":"#$FC"},{"a":2503,"t":"code","b":[9,2],"m":"ora","o":"#$02"},{"a":2505,"t":"code","b":[141,0,221],"m":"sta","o":"cia2_port_a"},{"a":2508,"t":"code","b":[169,255],"m":"lda","o":"#$FF"},{"a":2510,"t":"code","b":[141,21,208],"m":"sta","o":"vic_sprite_enable"},{"a":2513,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":2515,"t":"code","b":[141,16,208],"m":"sta","o":"vic_sprite_x_msb"},{"a":2518,"t":"code","b":[173,23,13],"m":"lda","oa":3351,"o":"a_0D17"},{"a":2521,"t":"code","b":[141,35,208],"m":"sta","o":"vic_background2"},{"a":2524,"t":"code","b":[173,22,13],"m":"lda","oa":3350,"o":"a_0D16"},{"a":2527,"t":"code","b":[141,34,208],"m":"sta","o":"vic_background1"},{"a":2530,"t":"code","b":[173,21,13],"m":"lda","oa":3349,"o":"a_0D15"},{"a":2533,"t":"code","b":[141,33,208],"m":"sta","o":"vic_background0"},{"a":2536,"t":"code","b":[173,20,13],"m":"lda","oa":3348,"o":"a_0D14"},{"a":2539,"t":"code","b":[141,32,208],"m":"sta","o":"vic_border"},{"a":2542,"t":"code","b":[169,3],"m":"lda","o":"#$03"},{"a":2544,"t":"code","b":[133,183],"m":"sta","oa":183,"o":"zpa_B7"},{"a":2546,"t":"code","b":[162,15],"m":"ldx","o":"#$0F"},{"a":2548,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":2550,"l":"b_09F6","t":"code","b":[157,0,208],"m":"sta","o":"vic_sprite0_x,x","x":[2554]},{"a":2553,"t":"code","b":[202],"m":"dex"},{"a":2554,"t":"code","b":[16,250],"m":"bpl","oa":2550,"o":"b_09F6"},{"a":2556,"t":"code","b":[169,16],"m":"lda","o":"#$10"},{"a":2558,"t":"code","b":[141,17,208],"m":"sta","o":"vic_control1"},{"a":2561,"t":"code","b":[162,0],"m":"ldx","o":"#$00"},{"a":2563,"l":"b_0A03","t":"code","b":[188,0,64],"m":"ldy","oa":16384,"o":"ending_screen,x","x":[2600]},{"a":2566,"t":"code","b":[185,24,13],"m":"lda","oa":3352,"o":"d_0D18,y"},{"a":2569,"t":"code","b":[157,0,216],"m":"sta","o":"colour_ram,x"},{"a":2572,"t":"code","b":[188,0,65],"m":"ldy","oa":16640,"o":"f_4100,x"},{"a":2575,"t":"code","b":[185,24,13],"m":"lda","oa":3352,"o":"d_0D18,y"},{"a":2578,"t":"code","b":[157,0,217],"m":"sta","o":"$D900,x"},{"a":2581,"t":"code","b":[188,0,66],"m":"ldy","oa":16896,"o":"f_4200,x"},{"a":2584,"t":"code","b":[185,24,13],"m":"lda","oa":3352,"o":"d_0D18,y"},{"a":2587,"t":"code","b":[157,0,218],"m":"sta","o":"$DA00,x"},{"a":2590,"t":"code","b":[188,0,67],"m":"ldy","oa":17152,"o":"f_4300,x"},{"a":2593,"t":"code","b":[185,24,13],"m":"lda","oa":3352,"o":"d_0D18,y"},{"a":2596,"t":"code","b":[157,0,219],"m":"sta","o":"$DB00,x"},{"a":2599,"t":"code","b":[232],"m":"inx"},{"a":2600,"t":"code","b":[208,217],"m":"bne","oa":2563,"o":"b_0A03"},{"a":2602,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":2604,"t":"code","b":[162,39],"m":"ldx","o":"#$27"},{"a":2606,"l":"b_0A2E","t":"code","b":[157,32,67],"m":"sta","oa":17184,"o":"f_4320,x","x":[2622]},{"a":2609,"t":"code","b":[157,72,67],"m":"sta","oa":17224,"o":"f_4348,x"},{"a":2612,"t":"code","b":[157,112,67],"m":"sta","oa":17264,"o":"f_4370,x"},{"a":2615,"t":"code","b":[157,152,67],"m":"sta","oa":17304,"o":"f_4398,x"},{"a":2618,"t":"code","b":[157,192,67],"m":"sta","oa":17344,"o":"f_43C0,x"},{"a":2621,"t":"code","b":[202],"m":"dex"},{"a":2622,"t":"code","b":[16,238],"m":"bpl","oa":2606,"o":"b_0A2E"},{"a":2624,"l":"ending_loop","c":"Plays a frame of music ($E003) each time the raster reaches line $50, for ever: the ending has no way out but a reset.","t":"code","b":[173,18,208],"m":"lda","o":"vic_raster","x":[2629,2634]},{"a":2627,"t":"code","b":[201,80],"m":"cmp","o":"#$50"},{"a":2629,"t":"code","b":[208,249],"m":"bne","oa":2624,"o":"ending_loop"},{"a":2631,"t":"code","b":[32,3,224],"m":"jsr","oa":57347,"o":"s_E003"},{"a":2634,"t":"code","b":[76,64,10],"m":"jmp","oa":2624,"o":"ending_loop"},{"a":2637,"l":"ending_filenames","c":"The ending's file names, three letters each, then MUSI: MEL, ME0, ME1 (Riggs's screen, characters and colours), MUR, MU0, MU1 (Murtaugh's), MUSI.","t":"byte","b":[77,69,76,77,69,48,77,69]},{"a":2645,"t":"byte","b":[49,77,85,82,77,85,48,77]},{"a":2653,"t":"byte","b":[85,49,77,85,83,73]},{"a":2659,"l":"ending_load_file","c":"The fast loader again, a third copy of the game's $03C3 at another address.","t":"code","b":[120],"m":"sei","x":[2344,2368,2388,2407]},{"a":2660,"t":"code","b":[169,240],"m":"lda","o":"#$F0"},{"a":2662,"t":"code","b":[141,26,208],"m":"sta","o":"vic_irq_enable"},{"a":2665,"t":"code","b":[169,8],"m":"lda","o":"#$08"},{"a":2667,"t":"code","b":[133,186],"m":"sta","oa":186,"o":"zpa_BA"},{"a":2669,"t":"code","b":[169,54],"m":"lda","o":"#$36"},{"a":2671,"t":"code","b":[133,1],"m":"sta","oa":1,"o":"zpa_01"},{"a":2673,"t":"code","b":[169,11],"m":"lda","o":"#$0B"},{"a":2675,"t":"code","b":[141,17,208],"m":"sta","o":"vic_control1"},{"a":2678,"t":"code","b":[169,15],"m":"lda","o":"#$0F"},{"a":2680,"t":"code","b":[133,184],"m":"sta","oa":184,"o":"zpa_B8"},{"a":2682,"t":"code","b":[133,185],"m":"sta","oa":185,"o":"zpa_B9"},{"a":2684,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":2686,"t":"code","b":[133,185],"m":"sta","oa":185,"o":"zpa_B9"},{"a":2688,"t":"code","b":[165,186],"m":"lda","oa":186,"o":"zpa_BA"},{"a":2690,"t":"code","b":[134,195],"m":"stx","oa":195,"o":"zpa_C3"},{"a":2692,"t":"code","b":[132,196],"m":"sty","oa":196,"o":"zpa_C4"},{"a":2694,"t":"code","b":[133,147],"m":"sta","oa":147,"o":"zpa_93"},{"a":2696,"t":"code","b":[169,127],"m":"lda","o":"#$7F"},{"a":2698,"t":"code","b":[141,13,220],"m":"sta","o":"cia1_interrupt"},{"a":2701,"t":"code","b":[173,13,220],"m":"lda","o":"cia1_interrupt"},{"a":2704,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":2706,"t":"code","b":[140,161,2],"m":"sty","oa":673,"o":"a_02A1"},{"a":2709,"t":"code","b":[140,21,208],"m":"sty","o":"vic_sprite_enable"},{"a":2712,"t":"code","b":[177,187],"m":"lda","oa":187,"o":"(zpp_BB),y"},{"a":2714,"t":"code","b":[201,36],"m":"cmp","o":"#$24"},{"a":2716,"t":"code","b":[208,3],"m":"bne","oa":2721,"o":"b_0AA1"},{"a":2718,"t":"code","b":[76,176,10],"m":"jmp","oa":2736,"o":"r_0AB0"},{"a":2721,"l":"b_0AA1","t":"code","b":[32,159,11],"m":"jsr","oa":2975,"o":"ending_fastload","x":[2716]},{"a":2724,"t":"code","b":[169,53],"m":"lda","o":"#$35"},{"a":2726,"t":"code","b":[133,1],"m":"sta","oa":1,"o":"zpa_01"},{"a":2728,"t":"code","b":[169,1],"m":"lda","o":"#$01"},{"a":2730,"t":"code","b":[141,25,208],"m":"sta","o":"vic_irq_status"},{"a":2733,"t":"code","b":[141,26,208],"m":"sta","o":"vic_irq_enable"},{"a":2736,"l":"r_0AB0","t":"code","b":[96],"m":"rts","x":[2718]},{"a":2737,"l":"ending_drive_code","c":"The same 238 bytes of 1541 drive code as the game's $0416, uploaded and started by $0B9F.","t":"byte","b":[169,3,133,49,32,10,245,80]},{"a":2745,"t":"byte","b":[254,184,173,1,28,153,0,3]},{"a":2753,"t":"byte","b":[200,208,244,160,186,80,254,184]},{"a":2761,"t":"byte","b":[173,1,28,153,0,1,200,208]},{"a":2769,"t":"byte","b":[244,32,224,248,165,56,197,71]},{"a":2777,"t":"byte","b":[240,3,76,4,6,32,233,245]},{"a":2785,"t":"byte","b":[197,58,240,3,76,4,6,173]},{"a":2793,"t":"byte","b":[0,3,240,42,162,0,189,0]},{"a":2801,"t":"byte","b":[3,32,128,6,232,208,247,173]},{"a":2809,"t":"byte","b":[0,3,197,12,208,12,173,1]},{"a":2817,"t":"byte","b":[3,133,13,173,0,3,133,12]},{"a":2825,"t":"byte","b":[208,170,133,12,173,1,3,133]},{"a":2833,"t":"byte","b":[13,169,1,76,105,249,162,0]},{"a":2841,"t":"byte","b":[238,1,3,189,0,3,32,128]},{"a":2849,"t":"byte","b":[6,232,236,1,3,208,244,169]},{"a":2857,"t":"byte","b":[127,76,105,249,10,8,2,0]},{"a":2865,"t":"byte","b":[133,133,134,130,170,44,0,24]},{"a":2873,"t":"byte","b":[16,251,160,16,140,0,24,41]},{"a":2881,"t":"byte","b":[3,168,185,124,6,44,0,24]},{"a":2889,"t":"byte","b":[48,251,141,0,24,138,74,74]},{"a":2897,"t":"byte","b":[170,41,3,168,185,124,6,141]},{"a":2905,"t":"byte","b":[0,24,138,74,74,170,41,3]},{"a":2913,"t":"byte","b":[168,185,124,6,141,0,24,138]},{"a":2921,"t":"byte","b":[74,74,170,41,3,168,185,124]},{"a":2929,"t":"byte","b":[6,141,0,24,166,130,96,32]},{"a":2937,"t":"byte","b":[0,193,165,24,166,25,133,12]},{"a":2945,"t":"byte","b":[134,13,141,0,3,142,1,3]},{"a":2953,"t":"byte","b":[169,224,133,3,165,3,48,252]},{"a":2961,"t":"byte","b":[201,2,144,244,201,127,240,3]},{"a":2969,"t":"byte","b":[76,10,230,76,158,193]},{"a":2975,"l":"ending_fastload","c":"The third copy of the game's $0504: finds the file through the KERNAL, uploads the drive code from $0AB1 and receives the file two bits at a time.","t":"code","b":[32,47,243],"m":"jsr","oa":62255,"o":"KERNAL_CLALLj","x":[2721]},{"a":2978,"t":"code","b":[166,185],"m":"ldx","oa":185,"o":"zpa_B9"},{"a":2980,"t":"code","b":[134,2],"m":"stx","oa":2,"o":"zpa_02"},{"a":2982,"t":"code","b":[169,96],"m":"lda","o":"#$60"},{"a":2984,"t":"code","b":[133,185],"m":"sta","oa":185,"o":"zpa_B9"},{"a":2986,"t":"code","b":[32,74,243],"m":"jsr","oa":62282,"o":"KERNAL_OPENj"},{"a":2989,"t":"code","b":[165,186],"m":"lda","oa":186,"o":"zpa_BA"},{"a":2991,"t":"code","b":[32,9,237],"m":"jsr","oa":60681,"o":"KERNAL_TALKj"},{"a":2994,"t":"code","b":[165,185],"m":"lda","oa":185,"o":"zpa_B9"},{"a":2996,"t":"code","b":[32,199,237],"m":"jsr","oa":60871,"o":"KERNAL_TKSAj"},{"a":2999,"t":"code","b":[32,19,238],"m":"jsr","oa":60947,"o":"KERNAL_ACPTRj"},{"a":3002,"t":"code","b":[165,186],"m":"lda","oa":186,"o":"zpa_BA"},{"a":3004,"t":"code","b":[32,145,242],"m":"jsr","oa":62097,"o":"KERNAL_CLOSEj"},{"a":3007,"t":"code","b":[165,144],"m":"lda","oa":144,"o":"zpa_90"},{"a":3009,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":3010,"t":"code","b":[74],"m":"lsr","o":"a"},{"a":3011,"t":"code","b":[144,9],"m":"bcc","oa":3022,"o":"b_0BCE"},{"a":3013,"t":"code","b":[96],"m":"rts"},{"a":3014,"l":"f_0BC6","c":"The drive commands \"M-W\" and \"M-E\" with the drive address $06C7.","t":"byte","b":[77,45,87,77,45,69,199,6],"x":[3053,3134]},{"a":3022,"l":"b_0BCE","c":"The file was found: uploads the drive code and receives the file.","t":"code","b":[32,210,245],"m":"jsr","oa":62930,"o":"s_F5D2","x":[3011]},{"a":3025,"t":"code","b":[169,177],"m":"lda","o":"#$B1"},{"a":3027,"t":"code","b":[133,3],"m":"sta","oa":3,"o":"zpa_03"},{"a":3029,"t":"code","b":[169,10],"m":"lda","o":"#$0A"},{"a":3031,"t":"code","b":[133,4],"m":"sta","oa":4,"o":"zpa_04"},{"a":3033,"t":"code","b":[169,0],"m":"lda","o":"#$00"},{"a":3035,"t":"code","b":[133,5],"m":"sta","oa":5,"o":"zpa_05"},{"a":3037,"t":"code","b":[169,6],"m":"lda","o":"#$06"},{"a":3039,"t":"code","b":[133,6],"m":"sta","oa":6,"o":"zpa_06"},{"a":3041,"l":"b_0BE1","t":"code","b":[165,186],"m":"lda","oa":186,"o":"zpa_BA","x":[3120]},{"a":3043,"t":"code","b":[32,12,237],"m":"jsr","oa":60684,"o":"KERNAL_LISTENj"},{"a":3046,"t":"code","b":[169,111],"m":"lda","o":"#$6F"},{"a":3048,"t":"code","b":[32,185,237],"m":"jsr","oa":60857,"o":"KERNAL_SECONDj"},{"a":3051,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":3053,"l":"b_0BED","t":"code","b":[185,198,11],"m":"lda","oa":3014,"o":"f_0BC6,y","x":[3062]},{"a":3056,"t":"code","b":[32,221,237],"m":"jsr","oa":60893,"o":"KERNAL_CIOUTj"},{"a":3059,"t":"code","b":[200],"m":"iny"},{"a":3060,"t":"code","b":[192,3],"m":"cpy","o":"#$03"},{"a":3062,"t":"code","b":[208,245],"m":"bne","oa":3053,"o":"b_0BED"},{"a":3064,"t":"code","b":[165,5],"m":"lda","oa":5,"o":"zpa_05"},{"a":3066,"t":"code","b":[32,221,237],"m":"jsr","oa":60893,"o":"KERNAL_CIOUTj"},{"a":3069,"t":"code","b":[165,6],"m":"lda","oa":6,"o":"zpa_06"},{"a":3071,"t":"code","b":[32,221,237],"m":"jsr","oa":60893,"o":"KERNAL_CIOUTj"},{"a":3074,"t":"code","b":[169,32],"m":"lda","o":"#$20"},{"a":3076,"t":"code","b":[32,221,237],"m":"jsr","oa":60893,"o":"KERNAL_CIOUTj"},{"a":3079,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":3081,"l":"b_0C09","t":"code","b":[177,3],"m":"lda","oa":3,"o":"(zpa_03),y","x":[3089]},{"a":3083,"t":"code","b":[32,221,237],"m":"jsr","oa":60893,"o":"KERNAL_CIOUTj"},{"a":3086,"t":"code","b":[200],"m":"iny"},{"a":3087,"t":"code","b":[192,32],"m":"cpy","o":"#$20"},{"a":3089,"t":"code","b":[144,246],"m":"bcc","oa":3081,"o":"b_0C09"},{"a":3091,"t":"code","b":[32,254,237],"m":"jsr","oa":60926,"o":"KERNAL_UNLSNj"},{"a":3094,"t":"code","b":[24],"m":"clc"},{"a":3095,"t":"code","b":[165,3],"m":"lda","oa":3,"o":"zpa_03"},{"a":3097,"t":"code","b":[105,32],"m":"adc","o":"#$20"},{"a":3099,"t":"code","b":[133,3],"m":"sta","oa":3,"o":"zpa_03"},{"a":3101,"t":"code","b":[144,2],"m":"bcc","oa":3105,"o":"b_0C21"},{"a":3103,"t":"code","b":[230,4],"m":"inc","oa":4,"o":"zpa_04"},{"a":3105,"l":"b_0C21","t":"code","b":[24],"m":"clc","x":[3101]},{"a":3106,"t":"code","b":[165,5],"m":"lda","oa":5,"o":"zpa_05"},{"a":3108,"t":"code","b":[105,32],"m":"adc","o":"#$20"},{"a":3110,"t":"code","b":[133,5],"m":"sta","oa":5,"o":"zpa_05"},{"a":3112,"t":"code","b":[144,2],"m":"bcc","oa":3116,"o":"b_0C2C"},{"a":3114,"t":"code","b":[230,6],"m":"inc","oa":6,"o":"zpa_06"},{"a":3116,"l":"b_0C2C","t":"code","b":[166,6],"m":"ldx","oa":6,"o":"zpa_06","x":[3112]},{"a":3118,"t":"code","b":[224,7],"m":"cpx","o":"#$07"},{"a":3120,"t":"code","b":[144,175],"m":"bcc","oa":3041,"o":"b_0BE1"},{"a":3122,"t":"code","b":[165,186],"m":"lda","oa":186,"o":"zpa_BA"},{"a":3124,"t":"code","b":[32,12,237],"m":"jsr","oa":60684,"o":"KERNAL_LISTENj"},{"a":3127,"t":"code","b":[169,111],"m":"lda","o":"#$6F"},{"a":3129,"t":"code","b":[32,185,237],"m":"jsr","oa":60857,"o":"KERNAL_SECONDj"},{"a":3132,"t":"code","b":[160,3],"m":"ldy","o":"#$03"},{"a":3134,"l":"b_0C3E","t":"code","b":[185,198,11],"m":"lda","oa":3014,"o":"f_0BC6,y","x":[3143]},{"a":3137,"t":"code","b":[32,221,237],"m":"jsr","oa":60893,"o":"KERNAL_CIOUTj"},{"a":3140,"t":"code","b":[200],"m":"iny"},{"a":3141,"t":"code","b":[192,8],"m":"cpy","o":"#$08"},{"a":3143,"t":"code","b":[208,245],"m":"bne","oa":3134,"o":"b_0C3E"},{"a":3145,"t":"code","b":[32,254,237],"m":"jsr","oa":60926,"o":"KERNAL_UNLSNj"},{"a":3148,"t":"code","b":[169,11],"m":"lda","o":"#$0B"},{"a":3150,"t":"code","b":[141,17,208],"m":"sta","o":"vic_control1"},{"a":3153,"t":"code","b":[120],"m":"sei"},{"a":3154,"t":"code","b":[160,0],"m":"ldy","o":"#$00"},{"a":3156,"t":"code","b":[162,4],"m":"ldx","o":"#$04"},{"a":3158,"l":"b_0C56","t":"code","b":[32,188,12],"m":"jsr","oa":3260,"o":"s_0CBC","x":[3188]},{"a":3161,"t":"code","b":[240,27],"m":"beq","oa":3190,"o":"b_0C76"},{"a":3163,"t":"code","b":[32,188,12],"m":"jsr","oa":3260,"o":"s_0CBC"},{"a":3166,"t":"code","b":[224,2],"m":"cpx","o":"#$02"},{"a":3168,"t":"code","b":[240,3],"m":"beq","oa":3173,"o":"b_0C65"},{"a":3170,"t":"code","b":[32,161,12],"m":"jsr","oa":3233,"o":"s_0CA1"},{"a":3173,"l":"b_0C65","t":"code","b":[32,188,12],"m":"jsr","oa":3260,"o":"s_0CBC","x":[3168,3184]},{"a":3176,"t":"code","b":[32,0,13],"m":"jsr","oa":3328,"o":"s_0D00"},{"a":3179,"t":"code","b":[208,2],"m":"bne","oa":3183,"o":"b_0C6F"},{"a":3181,"t":"code","b":[230,175],"m":"inc","oa":175,"o":"zpa_AF"},{"a":3183,"l":"b_0C6F","t":"code","b":[232],"m":"inx","x":[3179]},{"a":3184,"t":"code","b":[208,243],"m":"bne","oa":3173,"o":"b_0C65"},{"a":3186,"t":"code","b":[162,2],"m":"ldx","o":"#$02"},{"a":3188,"t":"code","b":[208,224],"m":"bne","oa":3158,"o":"b_0C56"},{"a":3190,"l":"b_0C76","t":"code","b":[32,188,12],"m":"jsr","oa":3260,"o":"s_0CBC","x":[3161]},{"a":3193,"t":"code","b":[224,2],"m":"cpx","o":"#$02"},{"a":3195,"t":"code","b":[240,5],"m":"beq","oa":3202,"o":"b_0C82"},{"a":3197,"t":"code","b":[72],"m":"pha"},{"a":3198,"t":"code","b":[32,161,12],"m":"jsr","oa":3233,"o":"s_0CA1"},{"a":3201,"t":"code","b":[104],"m":"pla"},{"a":3202,"l":"b_0C82","t":"code","b":[170],"m":"tax","x":[3195]},{"a":3203,"t":"code","b":[202],"m":"dex"},{"a":3204,"t":"code","b":[202],"m":"dex"},{"a":3205,"l":"b_0C85","t":"code","b":[32,188,12],"m":"jsr","oa":3260,"o":"s_0CBC","x":[3216]},{"a":3208,"t":"code","b":[32,0,13],"m":"jsr","oa":3328,"o":"s_0D00"},{"a":3211,"t":"code","b":[208,2],"m":"bne","oa":3215,"o":"b_0C8F"},{"a":3213,"t":"code","b":[230,175],"m":"inc","oa":175,"o":"zpa_AF"},{"a":3215,"l":"b_0C8F","t":"code","b":[202],"m":"dex","x":[3211]},{"a":3216,"t":"code","b":[208,243],"m":"bne","oa":3205,"o":"b_0C85"},{"a":3218,"t":"code","b":[152],"m":"tya"},{"a":3219,"t":"code","b":[24],"m":"clc"},{"a":3220,"t":"code","b":[101,174],"m":"adc","oa":174,"o":"zpa_AE"},{"a":3222,"t":"code","b":[133,174],"m":"sta","oa":174,"o":"zpa_AE"},{"a":3224,"t":"code","b":[170],"m":"tax"},{"a":3225,"t":"code","b":[165,175],"m":"lda","oa":175,"o":"zpa_AF"},{"a":3227,"t":"code","b":[105,0],"m":"adc","o":"#$00"},{"a":3229,"t":"code","b":[133,175],"m":"sta","oa":175,"o":"zpa_AF"},{"a":3231,"t":"code","b":[168],"m":"tay"},{"a":3232,"t":"code","b":[96],"m":"rts"},{"a":3233,"l":"s_0CA1","c":"Reads a block's load address from the drive (as $0606).","t":"code","b":[32,188,12],"m":"jsr","oa":3260,"o":"s_0CBC","x":[3170,3198]},{"a":3236,"t":"code","b":[133,174],"m":"sta","oa":174,"o":"zpa_AE"},{"a":3238,"t":"code","b":[133,198],"m":"sta","oa":198,"o":"zpa_C6"},{"a":3240,"t":"code","b":[32,188,12],"m":"jsr","oa":3260,"o":"s_0CBC"},{"a":3243,"t":"code","b":[133,175],"m":"sta","oa":175,"o":"zpa_AF"},{"a":3245,"t":"code","b":[133,199],"m":"sta","oa":199,"o":"zpa_C7"},{"a":3247,"t":"code","b":[165,2],"m":"lda","oa":2,"o":"zpa_02"},{"a":3249,"t":"code","b":[208,8],"m":"bne","oa":3259,"o":"r_0CBB"},{"a":3251,"t":"code","b":[165,195],"m":"lda","oa":195,"o":"zpa_C3"},{"a":3253,"t":"code","b":[133,174],"m":"sta","oa":174,"o":"zpa_AE"},{"a":3255,"t":"code","b":[165,196],"m":"lda","oa":196,"o":"zpa_C4"},{"a":3257,"t":"code","b":[133,175],"m":"sta","oa":175,"o":"zpa_AF"},{"a":3259,"l":"r_0CBB","t":"code","b":[96],"m":"rts","x":[3249]},{"a":3260,"l":"s_0CBC","c":"Receives one byte from the drive (as $0621).","t":"code","b":[169,11],"m":"lda","o":"#$0B","x":[3158,3163,3173,3190,3205,3233,3240]},{"a":3262,"t":"code","b":[141,0,221],"m":"sta","o":"cia2_port_a"},{"a":3265,"t":"code","b":[169,3],"m":"lda","o":"#$03"},{"a":3267,"l":"b_0CC3","t":"code","b":[44,0,221],"m":"bit","o":"cia2_port_a","x":[3270]},{"a":3270,"t":"code","b":[16,251],"m":"bpl","oa":3267,"o":"b_0CC3"},{"a":3272,"t":"code","b":[141,0,221],"m":"sta","o":"cia2_port_a"},{"a":3275,"t":"code","b":[206,32,208],"m":"dec","o":"vic_border"},{"a":3278,"t":"code","b":[173,166,2],"m":"lda","oa":678,"o":"a_02A6"},{"a":3281,"l":"a_0CD1","c":"An instruction of the ending's loader (the PAL/NTSC timing branch). The game's code beneath names this address as its arc flag, which the ending's load has replaced.","t":"code","b":[240,0],"m":"beq","oa":3283,"o":"b_0CD3"},{"a":3283,"l":"b_0CD3","t":"code","b":[240,0],"m":"beq","oa":3285,"o":"b_0CD5","x":[3281]},{"a":3285,"l":"b_0CD5","t":"code","b":[234],"m":"nop","x":[3283]},{"a":3286,"t":"code","b":[173,0,221],"m":"lda","o":"cia2_port_a"},{"a":3289,"t":"code","b":[10],"m":"asl","o":"a"},{"a":3290,"t":"code","b":[102,164],"m":"ror","oa":164,"o":"zpa_A4"},{"a":3292,"t":"code","b":[10],"m":"asl","o":"a"},{"a":3293,"t":"code","b":[102,164],"m":"ror","oa":164,"o":"zpa_A4"},{"a":3295,"t":"code","b":[173,0,221],"m":"lda","o":"cia2_port_a"},{"a":3296,"t":"note","l":"f_0CE0","c":"The middle of the ending's byte receiver. The game's code beneath names this address as an RTS of its own, which the ending's load has replaced.","note":"inside the item at $0CDF"},{"a":3298,"t":"code","b":[10],"m":"asl","o":"a"},{"a":3299,"t":"code","b":[102,164],"m":"ror","oa":164,"o":"zpa_A4"},{"a":3301,"t":"code","b":[10],"m":"asl","o":"a"},{"a":3302,"t":"code","b":[102,164],"m":"ror","oa":164,"o":"zpa_A4"},{"a":3304,"t":"code","b":[173,0,221],"m":"lda","o":"cia2_port_a"},{"a":3307,"t":"code","b":[10],"m":"asl","o":"a"},{"a":3308,"t":"code","b":[102,164],"m":"ror","oa":164,"o":"zpa_A4"},{"a":3310,"t":"code","b":[10],"m":"asl","o":"a"},{"a":3311,"t":"code","b":[102,164],"m":"ror","oa":164,"o":"zpa_A4"},{"a":3313,"t":"code","b":[173,0,221],"m":"lda","o":"cia2_port_a"},{"a":3316,"t":"code","b":[10],"m":"asl","o":"a"},{"a":3317,"t":"code","b":[102,164],"m":"ror","oa":164,"o":"zpa_A4"},{"a":3319,"t":"code","b":[10],"m":"asl","o":"a"},{"a":3320,"t":"code","b":[102,164],"m":"ror","oa":164,"o":"zpa_A4"},{"a":3322,"t":"code","b":[238,32,208],"m":"inc","o":"vic_border"},{"a":3325,"t":"code","b":[165,164],"m":"lda","oa":164,"o":"zpa_A4"},{"a":3327,"t":"code","b":[96],"m":"rts"},{"a":3328,"l":"s_0D00","c":"Stores a byte with all ROMs and the I/O banked out (as $0665).","t":"code","b":[72],"m":"pha","x":[3176,3208]},{"a":3329,"t":"code","b":[169,48],"m":"lda","o":"#$30"},{"a":3331,"t":"code","b":[133,1],"m":"sta","oa":1,"o":"zpa_01"},{"a":3333,"t":"code","b":[104],"m":"pla"},{"a":3334,"t":"code","b":[145,174],"m":"sta","oa":174,"o":"(zpa_AE),y"},{"a":3336,"t":"code","b":[169,54],"m":"lda","o":"#$36"},{"a":3338,"t":"code","b":[133,1],"m":"sta","oa":1,"o":"zpa_01"},{"a":3340,"t":"code","b":[200],"m":"iny"},{"a":3341,"t":"code","b":[96],"m":"rts"},{"a":3342,"c":"Three bytes of the file 111 after its code, not read; ME1's load begins just after them.","t":"byte","b":[0,0,0]},{"a":3345,"l":"ending_colours","c":"The colour file ME1 (MU1 for Murtaugh), loaded here: three bytes, then the border and three background colours, then a colour for each of the 256 characters.","t":"byte","b":[0,144,64]},{"a":3348,"l":"a_0D14","c":"The ending's border colour.","t":"byte","b":[0],"x":[2536]},{"a":3349,"l":"a_0D15","c":"Its background colour 0.","t":"byte","b":[0],"x":[2530]},{"a":3350,"l":"a_0D16","c":"Its background colour 1.","t":"byte","b":[8],"x":[2524]},{"a":3351,"l":"a_0D17","c":"Its background colour 2.","t":"byte","b":[9],"x":[2518]},{"a":3352,"l":"d_0D18","c":"The colour of each of the portrait's 256 characters, written into colour RAM by $0A03.","t":"byte","b":[15,255,255,255,255,255,255,255],"x":[2566,2575,2584,2593]},{"a":3360,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":3368,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":3376,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":3384,"t":"byte","b":[255,255,249,255,249,249,255,255]},{"a":3392,"t":"byte","b":[249,249,255,249,255,249,249,255]},{"a":3400,"t":"byte","b":[255,255,249,249,249,249,249,249]},{"a":3408,"t":"byte","b":[249,249,249,249,249,249,249,255]},{"a":3416,"t":"byte","b":[255,255,255,255,249,255,255,255]},{"a":3424,"t":"byte","b":[255,255,255,249,255,255,255,249]},{"a":3432,"t":"byte","b":[249,249,249,249,249,249,249,249]},{"a":3440,"t":"byte","b":[249,249,249,249,249,249,249,249]},{"a":3448,"t":"byte","b":[249,249,249,249,249,249,249,249]},{"a":3456,"t":"byte","b":[249,249,249,249,249,255,255,255]},{"a":3464,"t":"byte","b":[255,249,249,249,255,249,249,255]},{"a":3472,"t":"byte","b":[249,255,255,255,255,255,255,249]},{"a":3480,"t":"byte","b":[255,255,255,255,255,255,249,255]},{"a":3488,"t":"byte","b":[255,255,255,255,255,249,255,255]},{"a":3496,"t":"byte","b":[255,255,255,249,255,255,255,255]},{"a":3504,"t":"byte","b":[249,249,255,255,255,255,255,255]},{"a":3512,"t":"byte","b":[255,249,255,255,255,255,255,255]},{"a":3520,"t":"byte","b":[255,255,255,255,255,255,255,249]},{"a":3528,"t":"byte","b":[255,255,255,255,255,249,249,249]},{"a":3536,"t":"byte","b":[255,255,255,255,249,249,249,249]},{"a":3544,"t":"byte","b":[249,249,249,249,255,255,255,255]},{"a":3552,"t":"byte","b":[255,249,255,255,255,249,249,249]},{"a":3560,"t":"byte","b":[255,255,255,255,249]},{"a":3565,"l":"j_0DED","t":"byte","b":[255,255,255,255,255,255,249,255]},{"a":3573,"t":"byte","b":[255,255,255,255,249,255,255,255]},{"a":3581,"t":"byte","b":[249,249,255,255,249,249,249,249]},{"a":3589,"t":"byte","b":[255,255,255,249,255,249,249,249]},{"a":3597,"t":"byte","b":[249,249,249,249,249,249,249,249]},{"a":3605,"t":"byte","b":[249,249,249]},{"a":3608,"t":"gap","n":12776},{"a":3634,"t":"note","c":"Unused: nothing calls or jumps here. Turns frame $B9 into $B5, or $C7 into $C3, the standing frames of the patrolling enemy into its walking ones.","note":"outside the tracked image"},{"a":3814,"t":"note","l":"shot_direction","c":"Two flags, for slots 0 and 1: $FF when the shot flies left, 0 when it flies right.","note":"outside the tracked image"},{"a":3815,"t":"note","l":"a_0EE7","c":"Slot 1's shot direction, the second byte of $0EE6: $FF when it flies left.","note":"outside the tracked image"},{"a":3816,"t":"note","l":"s_0EE8","c":"Fires into slot Y with sound $0C on voice 1: faces the shooter toward the player (frames $C5/$B7), places the shot 12 pixels left of it (+24 when it flies right), with frame $CF or $C1, and sets behaviour $12/$14.","note":"outside the tracked image"},{"a":3937,"t":"note","l":"animate","c":"Steps an object's animation: adds to its frame number ($D2+X) the value the level's table at $387B gives for that frame, so each frame names the next. Skipped while $0FB9 is not zero, so objects animate on one pass in three.","note":"outside the tracked image"},{"a":3952,"t":"note","l":"update_objects","c":"Runs every object's behaviour, slots 12 down to 0: a slot whose line ($E2+X) is zero, or whose behaviour ($B2+X) is zero or negative, is skipped. The behaviour's routine comes from $077D and is written into the JSR at $0FA6; for behaviours from $24 on it first points $13/$14 at the enemy's record (from $E82E by $63+X) and copies the record's byte 7 into $C2+X, inverted when $C2+X was negative so that its bit 7 is kept. Then counts $0FB9 down from 2.","note":"outside the tracked image"},{"a":4007,"t":"note","l":"a_0FA7","c":"The low byte of the operand of the JSR at $0FA6, rewritten by $0F7F before it runs.","note":"outside the tracked image"},{"a":4008,"t":"note","l":"a_0FA8","c":"The high byte of the operand of the JSR at $0FA6, rewritten by $0F85 before it runs.","note":"outside the tracked image"},{"a":4025,"t":"note","l":"anim_divider","c":"Counts 2, 1, 0 across passes; $0F61 only steps frames when it is 0.","note":"outside the tracked image"},{"a":4026,"t":"note","l":"print_text","c":"Copies a zero-terminated string from ($21) to ($13) as screen codes: letters ($40 and up) less $40, digits less $30, anything else becomes 0 (a space in the panel's set).","note":"outside the tracked image"},{"a":4055,"t":"note","c":"Unused: nothing calls or jumps here. Counts the record's byte $0E and moves the object one pixel left or right by it, then runs on into $1000; the patrol of an enemy type the game no longer has.","note":"outside the tracked image"},{"a":4096,"t":"note","l":"s_1000","c":"Counts a record's timer at ($13),Y down by one; when it runs out, reloads it from the next byte and flips the direction byte at +$0E. Only the self-modified JSR at $10C4 names this address: that JSR's operand is replaced before every call, so this routine is the operand left in the file and is never called through it.","note":"outside the tracked image"},{"a":4120,"t":"note","l":"player_collisions","c":"Checks the player against every other object once a pass, unless the arc flag $0CD1 or the dying flag $1123 is set. Walks the multiplexer's sorted list at $7F-$8E (read as $FF8F,X with X from $F0 to $FF, an address that wraps past $FFFF) to the objects whose line lies between $5D and $7A, skips objects 0-2, and keeps those within $2D pixels to the right of the player's x less $19 on the same side of x 256. An object with type 0 ($AF+n) is an enemy: touching it hurts through $11FD, unless the player is already hurt this pass ($127F), while $E6C7 is set, or in the middle of a move ($369F between 1 and $1D). Any other type is a pickup or hazard, whose routine $10CE names and $10C4 calls.","note":"outside the tracked image"},{"a":4183,"t":"note","l":"a_1057","c":"The low byte of the operand of the CMP at $1056, rewritten by $1045 before it runs.","note":"outside the tracked image"},{"a":4204,"t":"note","l":"a_106C","c":"The low byte of the operand of the CMP at $106B, rewritten by $104B before it runs.","note":"outside the tracked image"},{"a":4293,"t":"note","l":"a_10C5","c":"The low byte of the operand of the JSR at $10C4, rewritten by $10BB before it runs.","note":"outside the tracked image"},{"a":4294,"t":"note","l":"a_10C6","c":"The high byte of the operand of the JSR at $10C4, rewritten by $10C1 before it runs.","note":"outside the tracked image"},{"a":4302,"t":"note","l":"contact_handlers","c":"27 words by object type ($AF+n, even): what touching an object does. Type 2 $116E, 4 $11B8, 6 $1151, 8 $1194, $0A $11E1, $12-$22 $1105 (a hazard); the rest $0760, nothing.","note":"outside the tracked image"},{"a":4303,"t":"note","l":"contact_handlers_hi","c":"The high bytes of contact_handlers's two-byte entries, which $10BE reads through $10CF, indexed.","note":"outside the tracked image"},{"a":4356,"t":"note","l":"hurt_cooldown","c":"Passes left in which a hazard ($1105) cannot hurt again: set to $B4 (180) on each hit; counted down at $3678.","note":"outside the tracked image"},{"a":4357,"t":"note","l":"touch_hazard","c":"Type $12-$22, a hazard: removes the object and, unless $1104 is still counting, takes 10 from the energy $F373, redraws the bar and starts the 180-pass cooldown. Energy that would go below zero makes the player die instead ($1124).","note":"outside the tracked image"},{"a":4387,"t":"note","l":"dying_flag","c":"1 while the player is dying: set by $1124 when the energy runs out, which also stops the collision checks and the controls.","note":"outside the tracked image"},{"a":4388,"t":"note","l":"b_1124","c":"Out of energy: sets $1123 and gives the player the falling frame $62 (or $76 when $5C is 0, facing the other way).","note":"outside the tracked image"},{"a":4411,"t":"note","c":"Unused: nothing calls it. A version of the hazard at $1105 that takes 5 energy instead of 10, with the same 180-pass cooldown.","note":"outside the tracked image"},{"a":4433,"t":"note","l":"pickup_life","c":"Type 6: removes the object, adds a life to $373C, redraws the lives ($F3F0) and plays sound 4.","note":"outside the tracked image"},{"a":4462,"t":"note","l":"pickup_ammo","c":"Type 2: removes the object and adds one, in decimal, to $F359, redrawn by $F35B (the count beside the bullet icon); sound 7.","note":"outside the tracked image"},{"a":4499,"t":"note","l":"weapon_level","c":"0, 3 or 6: raised by 3 at each type 8 pickup ($1194), never to 9. The player's shooting code ($1E5E onward) adds it to its frame numbers.","note":"outside the tracked image"},{"a":4500,"t":"note","l":"pickup_weapon","c":"Type 8: removes the object and raises $1193 by 3 unless it would reach 9; sound 5.","note":"outside the tracked image"},{"a":4536,"t":"note","l":"pickup_energy","c":"Type 4: removes the object and adds $10 to the energy $F373, at most $40; sound 3.","note":"outside the tracked image"},{"a":4577,"t":"note","l":"pickup_points","c":"Type $0A: removes the object and scores entry 0 of the table at $F202 (400 points); sound 6.","note":"outside the tracked image"},{"a":4605,"t":"note","l":"player_hurt","c":"The player has walked into an enemy: sets $127F, pushes the player one pixel away from it (left when the enemy's $60+n is 1, right when 2), sets the facing byte $BF to 6 or 9 ($FFF1 decides which), puts the player $13 lines above the enemy's $DF+n, and if his animation pointer $4A/$4B is at $24F6 or $24F9 switches it to $24AA (or $24BD when $5C is 0).","note":"outside the tracked image"},{"a":4735,"t":"note","l":"hurt_this_pass","c":"Set when $11FD pushes the player back; cleared at the top of $1018 every pass.","note":"outside the tracked image"},{"a":4736,"t":"note","l":"a_1280","c":"Counted up by the interrupt at $12F4, once a frame.","note":"outside the tracked image"},{"a":4737,"t":"note","l":"irq_panel","c":"Raster interrupt at the bottom of the play area: turns on extended colour mode and the 25-row screen with fine scroll 7, moves all eight sprites to 0,0 so none show over the panel, clears the horizontal fine scroll and points $D018 at the panel's characters, then sets $12F4 for line $C6.","note":"outside the tracked image"},{"a":4852,"t":"note","l":"irq_panel_2","c":"Raster interrupt at line $C6: counts $1280 up, sets $132B for line $CA, waits 16 NOPs and sets $D011 to fine scroll 1 with extended colour off.","note":"outside the tracked image"},{"a":4907,"t":"note","l":"irq_panel_3","c":"Raster interrupt at line $CA: after a short delay blanks the 24/25-row bits of $D011 (opening the lower border), sets the panel's two background colours ($06 blue, $0E light blue), sets $136F for line 0 and calls the sound update $F88F.","note":"outside the tracked image"},{"a":4975,"t":"note","l":"irq_top","c":"Raster interrupt at line 0: turns all sprites on, sets the level's colours from $FD99-$FD9C, the play screen's $D018 from $43, horizontal scroll from $41 and vertical scroll from $42, and sets $E1AC (the sprite interrupt) for the line in $F313.","note":"outside the tracked image"},{"a":5062,"t":"note","l":"draw_whole_screen","c":"Draws the visible window of the level from scratch onto both screens at $4000 and $4400, 18 rows of 40 characters, with each character's colour from the level's table at $FD9D into colour RAM. The map address is $7D80's row table at $170B (by the camera's y in $29/$2A, in 8-line rows) plus the camera's x in $27/$28 less $18, in 8-pixel columns. Then draws the panel: score, ammo, energy, lives and the $E915 bar.","note":"outside the tracked image"},{"a":5300,"t":"note","l":"a_14B4","c":"Set to $FF with $14B5 when a life starts ($19A0); written and read by the scroll and attack code ($2575, $26FC-$2716).","note":"outside the tracked image"},{"a":5301,"t":"note","l":"scroll_direction","c":"The direction the screen is scrolling, twice the direction number (0 up, 2 up-right, and so on clockwise to $0E up-left), or $FF when it is still. Times 8, plus twice the fine-scroll step, it indexes the scroll tables at $178F, $188F and $28ED.","note":"outside the tracked image"},{"a":5302,"t":"note","l":"a_14B6","c":"The half of the double buffer being drawn: $10 or 0, from bit 4 of $43 after $1584 flips it.","note":"outside the tracked image"},{"a":5303,"t":"note","l":"a_14B7","c":"Scratch: twice the scroll step in $1529.","note":"outside the tracked image"},{"a":5304,"t":"note","c":"Twice the scroll step, kept by $1529 for the table index. The seven bytes after it are not read by the scroll code.","note":"outside the tracked image"},{"a":5312,"t":"note","l":"f_14C0","c":"Paired with $14C1: per-direction steps read by $2766.","note":"outside the tracked image"},{"a":5313,"t":"note","l":"f_14C1","c":"A table of 16 bytes read by $276D, one per direction and step: 0, 1 or $FF, how the camera's x moves.","note":"outside the tracked image"},{"a":5328,"t":"note","l":"f_14D0","c":"Paired with $14D1: per-direction steps read by $2775.","note":"outside the tracked image"},{"a":5329,"t":"note","l":"f_14D1","c":"A table of 16 bytes read by $277C, one per direction and step: 0, 1 or $FF, how the camera's y moves.","note":"outside the tracked image"},{"a":5345,"t":"note","l":"scroll_pass","c":"One pass of the 8-way scroller. When nothing scrolls ($14B5 negative) it just runs the objects ($0F70), the player's animation ($1A85), the timers ($3678) and the sprite sort ($F2B3). Otherwise it sets the fine scroll bytes $41 and $42 from the camera's position ($27 and $29, inverted in their low three bits), picks this pass's routine from the table at $178F by direction, buffer half and fine-scroll step, and calls it through the JSR at $1569 (each copies one slice of the screen into the hidden buffer); when the step is the one the table at $28ED marks, it flips the shown screen (bit 4 of $43) and calls the edge-drawing routine from $188F through the JSR at $1584. A $FF entry stops the scroll ($14B5=$FF, $3755).","note":"outside the tracked image"},{"a":5482,"t":"note","l":"a_156A","c":"The low byte of the operand of the JSR at $1569, rewritten by $1566 before it runs.","note":"outside the tracked image"},{"a":5483,"t":"note","l":"a_156B","c":"The high byte of the operand of the JSR at $1569, rewritten by $1560 before it runs.","note":"outside the tracked image"},{"a":5509,"t":"note","l":"a_1585","c":"The low byte of the operand of the JSR at $1584, rewritten by $153E before it runs.","note":"outside the tracked image"},{"a":5510,"t":"note","l":"a_1586","c":"The high byte of the operand of the JSR at $1584, rewritten by $1544 before it runs.","note":"outside the tracked image"},{"a":5523,"t":"note","l":"scroll_edge_pointers","c":"Works out, for the scroll direction, where the new edge comes from: the level map address of the top-left of the window ($170B row table by camera y, plus camera x less $18, in characters) into $34/$35 and $36/$37, offset by the direction's entries in $16EB and $16FB, and the screen row and column to draw into, $32 and $33, from $16DB/$16DC ($FF for none).","note":"outside the tracked image"},{"a":5652,"t":"note","l":"draw_edge_row","c":"Copies one row of 40 characters from the map at ($36) into the hidden screen: the top row ($4000 or $4400) when $32 is 0, the bottom row ($42A8 or $46A8) when it is $13. Does nothing when $32 is negative.","note":"outside the tracked image"},{"a":5664,"t":"note","c":"An RTS that nothing reaches: $161D jumps over it and $162F returns before it.","note":"outside the tracked image"},{"a":5717,"t":"note","l":"draw_edge_column","c":"Copies one column of 19 characters from the map at ($34), 288 bytes a row, into column $33 of the hidden screen ($4000 or $4400 by $40). Does nothing when $33 is negative.","note":"outside the tracked image"},{"a":5819,"t":"note","l":"f_16BB","c":"Eight two-byte entries read by $2755, one per direction: 3 or 4.","note":"outside the tracked image"},{"a":5835,"t":"note","l":"f_16CB","c":"Eight two-byte entries read by $275E, one per direction: 4 or 3.","note":"outside the tracked image"},{"a":5851,"t":"note","l":"edge_columns","c":"By direction, two bytes: the screen column the new edge is drawn into (0 or $27, or $FF) and the row (0 or $13, or $FF), read by $1593.","note":"outside the tracked image"},{"a":5852,"t":"note","l":"edge_columns_hi","c":"The high bytes of edge_columns's two-byte entries, which $15E3 reads through $16DC, indexed.","note":"outside the tracked image"},{"a":5867,"t":"note","l":"edge_offset_a","c":"By direction, a 16-bit offset added to the map address for the edge column, read by $1593.","note":"outside the tracked image"},{"a":5868,"t":"note","l":"edge_offset_a_hi","c":"The high bytes of edge_offset_a's two-byte entries, which $15FF reads through $16EC, indexed.","note":"outside the tracked image"},{"a":5883,"t":"note","l":"edge_offset_b","c":"By direction, a 16-bit offset added to the map address for the edge row, read by $1593.","note":"outside the tracked image"},{"a":5884,"t":"note","l":"edge_offset_b_hi","c":"The high bytes of edge_offset_b's two-byte entries, which $160E reads through $16FC, indexed.","note":"outside the tracked image"},{"a":5899,"t":"note","l":"map_rows","c":"66 row addresses in the level's character map: $7D80 + 288 per row, which $13C6 and $1593 index by the camera's y.","note":"outside the tracked image"},{"a":5900,"t":"note","l":"map_rows_hi","c":"The high bytes of map_rows's two-byte entries, which $1428, $15D7 read through $170C, indexed.","note":"outside the tracked image"},{"a":6031,"t":"note","l":"scroll_slices","c":"128 routine addresses, the scroll's work for each pass: by direction (8), buffer half (2) and fine-scroll step (8). $0760 does nothing, $FFFF ends the scroll, $373E and $3751 are called at the ends of each run, and the rest ($29ED-$3374) are the copying routines, one slice of the screen each.","note":"outside the tracked image"},{"a":6032,"t":"note","l":"scroll_slices_hi","c":"The high bytes of scroll_slices's two-byte entries, which $1559 reads through $1790, indexed.","note":"outside the tracked image"},{"a":6287,"t":"note","l":"scroll_flip_jobs","c":"64 routine addresses, eight for each direction, for the JSR at $1584 when the screen flips: up $2B3F, up-right $3405, right $355B, down-right $3393, down $2BAE, down-left $34E9, left $35D0, up-left $3477 (one per step, all the same in each direction, except the last entry, $2B3F). Each shifts colour RAM to match and draws the colours of the new edge.","note":"outside the tracked image"},{"a":6288,"t":"note","l":"scroll_flip_jobs_hi","c":"The high bytes of scroll_flip_jobs's two-byte entries, which $1541 reads through $1890, indexed.","note":"outside the tracked image"},{"a":6415,"t":"note","l":"tile_column_count","c":"The count of tile columns left for $0673, from 144.","note":"outside the tracked image"},{"a":6416,"t":"note","l":"a_1910","c":"The player's x at the start of the pass, copied from $EF by $1912.","note":"outside the tracked image"},{"a":6417,"t":"note","l":"a_1911","c":"The player's facing and x high byte ($BF) at the start of the pass.","note":"outside the tracked image"},{"a":6418,"t":"note","l":"player_update","c":"The player's part of the main loop: saves his position and the camera's, then, while alive, reads the controls and moves him ($21A1), keeps the camera with him ($F314), runs his attacks ($2493) and the scroll ($2570). While dying ($1123 non-zero) he falls along the arc at $0CE1, one step a pass and a pixel sideways, until he is below line $B6; then the screen is blanked and the life is over: a life is taken from $373C (the game ends at $F49E when there are none), energy is refilled to $40, the player and camera go back to the checkpoint in $2835-$283B, the screen is redrawn, every object goes back to where the level put it (from the list at $FE9D into the records at $3970), and play restarts at the main loop.","note":"outside the tracked image"},{"a":6789,"t":"note","l":"player_animate","c":"Steps the player's animation: reads the next frame from the script at ($4A),$4C into $CF. A $FF ends the script, a $FE loops it to the start; frames $53 and $67 also clear $1EAE.","note":"outside the tracked image"},{"a":6829,"t":"note","l":"a_1AAD","c":"Read and written by $1DDC.","note":"outside the tracked image"},{"a":6830,"t":"note","l":"stage","c":"The stage being played, an even number: 0 L1A, 2 L1AX, 4 L1B, 6 L2A, 8 L2AX, $0A L2B, $0C L3A, $0E L3AX, $10 L3B, $12 L4A, $14 L4AX, $16 L4B, $18 L5A, $1A L5AX, $1C L5B. It picks the overlay's name at $1AD1 and the property block at $1AAF, and several routines treat stages $10, $16 and $1C specially. No exit in any overlay on this disk leads to stage $14, and the disk holds no L4AX file.","note":"outside the tracked image"},{"a":6831,"t":"note","l":"stage_blocks","c":"Fifteen addresses, by stage, of the stage's 256-byte block in the unpacked COL0 file ($5000-$5900); $1B28 copies the block to $FC95.","note":"outside the tracked image"},{"a":6832,"t":"note","l":"stage_blocks_hi","c":"The high bytes of stage_blocks's two-byte entries, which $1B56 reads through $1AB0, indexed.","note":"outside the tracked image"},{"a":6861,"t":"note","l":"stage_filenames","c":"\"COL0\", then the overlay file of each stage, four letters each: L1A0, L1AX, L1B0, L2A0, L2AX, L2B0, L3A0, L3AX, L3B0, L4A0, L4AX, L4B0, L5A0, L5AX, L5B0.","note":"outside the tracked image"},{"a":6925,"t":"note","l":"load_overlay","c":"Loads the stage's overlay file (its name from $1AD1 by the stage) to $3790. The overlay holds the stage's animation table, enemy records and the names of its other files.","note":"outside the tracked image"},{"a":6952,"t":"note","l":"load_stage","c":"Loads everything else for the stage. Except on the \"X\" stages (2, 8, $0E, $14, $1A), which carry on from the stage before, resets the clock to 5:00. Loads COL0 at $8000, unpacks it to $5000 ($F5D5) and copies the stage's 256 bytes to $FC95. Then the four files the overlay names at $37E4: the map (loaded at $4200, unpacked to $7D80 and moved to $4400-$67FF), the tiles (.BLK at $4000), which $0673 then builds into the level, the colours (.ATT at $FD96, whose first four bytes it puts in the border and background registers) and the characters (.CHR, unpacked from $5000 to $4800). Then each sprite file the overlay lists from $383C, six bytes each (name, address) until a negative byte, Murtaugh's sprites (SP0Z) in place of Riggs's (SP00) when $FFF1 is 0. Then the panel files PAN2, PAN1 and PAN0, clears the panel row and a sprite, and builds the respawn list at $FE9D from the overlay's object records ($3970, 19 bytes each, until one whose byte 1 is negative): three bytes each, from the record's bytes $11, 6 and 4.","note":"outside the tracked image"},{"a":7589,"t":"note","l":"a_1DA5","c":"The end of the respawn list at $FE9D, low byte, set by $1B28.","note":"outside the tracked image"},{"a":7590,"t":"note","l":"a_1DA6","c":"The end of the respawn list, high byte.","note":"outside the tracked image"},{"a":7591,"t":"note","l":"panel_filenames","c":"\"PAN0\", \"PAN1\", \"PAN2\": the panel's files, loaded by $1B28.","note":"outside the tracked image"},{"a":7603,"t":"note","l":"player_fire","c":"The fire button. With no rounds in the gun ($E914) and no spare magazines ($F359) it only plays sound $0E on voice 0, an empty click. Otherwise, unless $2411 is set, it fires on the press only (bit 4 of $F355, the previous state kept in $1AAD): finds a free bullet, object 1 or 2 (line $E0/$E1 zero), starts it 3 lines above the player and 22 pixels ahead of him, with a muzzle count of 2 ($72+n), his facing ($5C into $1EAF) and frame $77 or $80 by that facing, plus the weapon level $1193. Takes a round from $E914; when the gun is empty a magazine is taken from $F359 and the gun refilled with 6. Standing, the player takes the shooting pose ($24FC or $24FF); while jumping ($369F) he keeps his move. Redraws the rounds ($E915) and magazines ($F35B).","note":"outside the tracked image"},{"a":7854,"t":"note","l":"a_1EAE","c":"1 while the player's shooting pose runs, from $1DB3; cleared when his animation reaches frame $53 or $67 ($1A85); read by $25E5.","note":"outside the tracked image"},{"a":7855,"t":"note","l":"bullet_direction","c":"For bullets 1 and 2, the player's facing ($5C) when fired: below 8 the bullet flies right.","note":"outside the tracked image"},{"a":7857,"t":"note","l":"update_bullets","c":"Moves the player's two bullets (objects 1 and 2) that are in flight.","note":"outside the tracked image"},{"a":7878,"t":"note","l":"s_1EC6","c":"One bullet's pass: while its muzzle count ($72+n) runs, steps its frame and plays sound $0E on voice 0; then moves it 6 pixels a pass, right or left by $1EAF, removes it past x $140 or before x $0C, and checks it against the enemies ($1F37).","note":"outside the tracked image"},{"a":7991,"t":"note","l":"bullet_hits","c":"Checks one bullet against the objects in the sprite sort's order (the list at $7F, read as $FF8F,X with X from $F0, which wraps past $FFFF) whose line is within 8 above and 14 below the bullet's (the compare operands at $1F71 and $1F86 are written first), on the same side of x 256 and within $22 pixels right of the bullet's x less $0A, and whose type ($AF+n) is $26 or more, an enemy. Takes the damage for the weapon level ($285C) from the enemy's record byte $11. If it survives: knocks it back (sets its facing), skips its frame on to the end of its present sequence, removes the bullet, scores 300 and plays sound $0B on voice 2. Does nothing while $0CD1 is set.","note":"outside the tracked image"},{"a":8049,"t":"note","l":"a_1F71","c":"The low line limit, written by $1F5C (the bullet's line less 8) as the operand of this CMP.","note":"outside the tracked image"},{"a":8070,"t":"note","l":"a_1F86","c":"The high line limit, written by $1F62 (the bullet's line plus 14) as the operand of this CMP.","note":"outside the tracked image"},{"a":8272,"t":"note","l":"j_2050","c":"The bullet killed the enemy. A type $32 or $34 enemy (a boss in two objects: both are found) turns into frames $F7 and $F8 as an arcing body (behaviour $24) and scores 1000 with sound 8; any other turns into the dying frame from $E961 by its type (or $E953 when its record's byte $0D is set), behaviour $24, scoring 400 with sound 9. Both remove the bullet.","note":"outside the tracked image"},{"a":8431,"t":"note","l":"player_jump","c":"Runs a jump or a fall step by step. $369F is the step (even, 0 when standing); a jump starts when up is pressed (bit 3 of $F355). Each step adds that step's line change to the player's line from $36A0 (Murtaugh, $FFF1=0) or $36E2 (Riggs), unless the result would be above line $14; a change of facing during it plays sound 2 and sets the jump pose ($24F6, or $24F9 facing left). After 15 steps it looks at the character under his feet ($FC95 flags): solid (bit 7) ends the jump, and a ladder ($40) sets $2411 to $10. A $7F step ends it too.","note":"outside the tracked image"},{"a":8608,"t":"note","l":"a_21A0","c":"Set to 1 while the player falls ($234C); read by $25DB and $268D.","note":"outside the tracked image"},{"a":8609,"t":"note","l":"player_move","c":"Reads the play area under and around the player and decides what he can do. Finds the screen row of his feet (his line less the vertical fine scroll, from the row table $2415 or $2451 for the shown screen) and his column (x less the horizontal fine scroll), and looks the character there up in the stage's property table at $FC95. Bit 0 (a wall) starts the walking script $254F (or $2542, by facing) and sets $2411. Otherwise at his middle: bit 6 (a ladder) gives the climbing frames $89-$8C, and with up held sets $2411; bit 1 (a door) with up held, and no lift ($E000) or arc ($28A4) busy, searches the stage's exit list at $3790 for the player's place and goes through it ($2388). Then one row lower: a solid character (bit 7) keeps him standing, or on a ladder with up held climbing; anything else and he falls ($234C). While jumping it hands over to $20EF.","note":"outside the tracked image"},{"a":8907,"t":"note","l":"find_exit","c":"Walks the stage's exit list, 14 bytes an entry from $3790, comparing each entry's position with the player's (written first into the compare operands at $22CE, $22D3, $22DC and $22E1); the first entry that matches is the door taken.","note":"outside the tracked image"},{"a":8910,"t":"note","l":"a_22CE","c":"The exit's x to match, written by $22AB.","note":"outside the tracked image"},{"a":8915,"t":"note","l":"a_22D3","c":"The x high byte to match, written by $22B7.","note":"outside the tracked image"},{"a":8924,"t":"note","l":"a_22DC","c":"The line to match, written by $22C1 (masked to 0).","note":"outside the tracked image"},{"a":8929,"t":"note","l":"a_22E1","c":"The line's high byte to match, written by $22C8.","note":"outside the tracked image"},{"a":8951,"t":"note","c":"PLA, TAY: two instructions after the JMP at $22F4 that nothing reaches, perhaps left from an earlier version of the exit search.","note":"outside the tracked image"},{"a":9036,"t":"note","l":"player_fall","c":"Nothing solid under the player: he falls 2 lines a pass in the pose at $24F6 or $24F9 and sets $21A0; at line $AC he has fallen off the bottom and loses a life ($1974).","note":"outside the tracked image"},{"a":9090,"t":"note","c":"Unused: nothing calls it. Sets the background colour to red (2) and returns.","note":"outside the tracked image"},{"a":9096,"t":"note","l":"go_through_door","c":"Takes the door: silences the sound, empties every object, wipes the screen ($ED5A), and reads the exit's entry: a negative stage number ends the game in triumph ($375C); otherwise the new stage, camera x and y, player x, facing and line, which are also kept as the checkpoint in $2835-$283B. Loads the overlay ($1B0D) and the stage ($1B28), draws it and restarts the main loop.","note":"outside the tracked image"},{"a":9233,"t":"note","l":"a_2411","c":"While set ($10 or $20) the player is held by a wall or ladder: the fire button is ignored and $21A1 returns early.","note":"outside the tracked image"},{"a":9234,"t":"note","l":"a_2412","c":"The step in the short table at $2413, while the player falls.","note":"outside the tracked image"},{"a":9235,"t":"note","l":"f_2413","c":"Two bytes, 2 and $FF, read by the fall at $2379.","note":"outside the tracked image"},{"a":9237,"t":"note","l":"screen_rows_a","c":"30 addresses of screen rows in the screen at $4000 (from $3F5E, one row above it, 40 bytes apart), by the player's row, used when $14B6 is 0.","note":"outside the tracked image"},{"a":9238,"t":"note","l":"screen_rows_a_hi","c":"The high bytes of screen_rows_a's two-byte entries, which $21CB, $2630 read through $2416, indexed.","note":"outside the tracked image"},{"a":9297,"t":"note","l":"screen_rows_b","c":"The same 30 row addresses in the screen at $4400 (from $435E), used when $14B6 is $10.","note":"outside the tracked image"},{"a":9298,"t":"note","l":"screen_rows_b_hi","c":"The high bytes of screen_rows_b's two-byte entries, which $21D7, $263C read through $2452, indexed.","note":"outside the tracked image"},{"a":9357,"t":"note","l":"hang","c":"Flashes the border forever. $03C3 jumps here when asked to load a name that starts with \"$\", the disk's directory.","note":"outside the tracked image"},{"a":9363,"t":"note","l":"joystick_action","c":"Looks up the joystick bits in $F355 (fire masked off) in the pairs at $2813 and returns the action byte that follows the match.","note":"outside the tracked image"},{"a":9386,"t":"note","l":"player_anims","c":"The player's animation scripts, read by $1A85: frame numbers, each script ending $FF (stop) or $FE (go round again). $24AA and $24BD are the knock-back poses, $24F6 and $24F9 the jumping and falling poses, $24FC and $24FF the shooting poses, with $24D0 and $24E3 between.","note":"outside the tracked image"},{"a":9474,"t":"note","l":"f_2502","c":"Paired with $2503: a table of words read by $260F, one per joystick action.","note":"outside the tracked image"},{"a":9475,"t":"note","l":"f_2503","c":"The animation script to start for each joystick action, read by $25FF ($24BD, $24AA, $255C, $254F, $2542, or 0 for none).","note":"outside the tracked image"},{"a":9522,"t":"note","l":"f_2532","c":"Paired with $2533: a second table of scripts by action, read by $25F7.","note":"outside the tracked image"},{"a":9523,"t":"note","l":"f_2533","c":"Scripts by action for $25F0 ($24E3 and $24D0).","note":"outside the tracked image"},{"a":9538,"t":"note","l":"walk_anims","c":"Walking and climbing scripts: frames $4F-$52 three passes each ($2542) and $63-$66 ($254F), one for each facing, then the climbing frames $89-$8C ($255C), each ending $FE.","note":"outside the tracked image"},{"a":9584,"t":"note","l":"player_walk","c":"Moves the player by the joystick's direction (A, from $2493, plus $2411 for a wall or ladder): sideways by $296D and up or down by $29AD, keeping him between x $20 and $135 (else he goes back to $1910) and out of characters whose property bit 5 is set ($FC95). Starts the walking script for the direction from $2502/$2503 (or, in the shooting pose, $2532/$2533). Then decides whether to scroll: near the left or right of the window (x below $8C or from $C8) and with the camera inside the level (x from $20 to $7CC), or near the top or bottom (line below $5A, or from $66, with camera y from $2B to $1A3), it turns the wanted directions into one through $2813 into $14B4. When a scroll starts it aligns the camera to the step table $16BB/$16CB; each pass the camera moves by $14C0/$14D0, and every object is moved the other way by the same amount (the operands at $27A5 and $27DE are written first): an object that leaves the area (line below $15 or from $C0, x out of range) is removed and its record's byte 5 cleared, so it can appear again. Ends with the scroll's pass, $14E1.","note":"outside the tracked image"},{"a":10024,"t":"note","l":"a_2728","c":"The camera's y at the start of the pass, from $29; $2784 subtracts it to find how far the camera moved.","note":"outside the tracked image"},{"a":10025,"t":"note","l":"a_2729","c":"The camera's x at the start of the pass, from $27.","note":"outside the tracked image"},{"a":10062,"t":"note","l":"b_274E","c":"A scroll starts in direction Y: snaps the camera's fine position to the direction's starting step ($16BB, $16CB) before it moves.","note":"outside the tracked image"},{"a":10149,"t":"note","l":"a_27A5","c":"The amount every object moves down this pass, written by $278C before the ADC that uses it.","note":"outside the tracked image"},{"a":10206,"t":"note","l":"a_27DE","c":"The amount every object moves right this pass, written by $279C before the ADC that uses it.","note":"outside the tracked image"},{"a":10259,"t":"note","l":"direction_pairs","c":"Pairs of (bits, direction) for $2493 and $26F7: up $08 gives 0, up-right $09 2, right $01 4, down-right $05 6, down $04 8, down-left $06 $0A, left $02 $0C, up-left $0A $0E; none $00 gives $FF. The 16 bytes after the first nine pairs repeat them.","note":"outside the tracked image"},{"a":10260,"t":"note","l":"direction_pairs_hi","c":"The high bytes of direction_pairs's two-byte entries, which $24A1, $270B read through $2814, indexed.","note":"outside the tracked image"},{"a":10293,"t":"note","l":"checkpoint","c":"Where play restarts after a life is lost: camera x ($2835/$2836) and y ($2837/$2838), the player's x ($2839), facing ($283A) and line ($283B). Set at the start of the game and at each door.","note":"outside the tracked image"},{"a":10294,"t":"note","l":"a_2836","c":"The checkpoint's camera x, high byte.","note":"outside the tracked image"},{"a":10295,"t":"note","l":"a_2837","c":"The checkpoint's camera y, low byte.","note":"outside the tracked image"},{"a":10296,"t":"note","l":"a_2838","c":"The checkpoint's camera y, high byte.","note":"outside the tracked image"},{"a":10297,"t":"note","l":"a_2839","c":"The checkpoint's player x.","note":"outside the tracked image"},{"a":10298,"t":"note","l":"a_283A","c":"The checkpoint's player colour and facing byte ($BF).","note":"outside the tracked image"},{"a":10299,"t":"note","l":"a_283B","c":"The checkpoint's player line.","note":"outside the tracked image"},{"a":10300,"t":"note","c":"25 line changes for an arc, read by $EBB6: 0 six times, -4 three times, -2 three times, -1 twice, 0 three times, +1 twice, +2 three times, +4 three times.","note":"outside the tracked image"},{"a":10325,"t":"note","l":"a_2855","c":"The player's frame, kept while $3678 shows the flicker frame $4E in its place.","note":"outside the tracked image"},{"a":10326,"t":"note","c":"Three bytes read and written by $EA27, $EA6F and $EBF4.","note":"outside the tracked image"},{"a":10329,"t":"note","l":"a_2859","c":"Scratch: the horizontal distance between two objects, in $1018 and $1F37.","note":"outside the tracked image"},{"a":10331,"t":"note","l":"a_285B","c":"Scratch: the bullet (0 or 1) that $1F37 is checking.","note":"outside the tracked image"},{"a":10332,"t":"note","l":"damage_by_weapon","c":"How much one bullet takes from an enemy, by the weapon level $1193 (0, 3 or 6): 1, 2 or 3.","note":"outside the tracked image"},{"a":10341,"t":"note","c":"2, read and written by $F50C and $F517 on the game-over screen.","note":"outside the tracked image"},{"a":10342,"t":"note","l":"game_over_text","c":"The strings the game-over screen prints through $0FBA, each ending 0: \"  G A M E  \", \"  O V E R  \", two lines of eleven spaces (the first of which $F4C6 also uses to keep eleven bytes of colour RAM while the screen shows), and \" CONTINUE  \".","note":"outside the tracked image"},{"a":10366,"t":"note","c":"Used twice: a string of eleven spaces printed by $F5C4 to clear a panel line, and, from $F4C6, the place where the game-over screen keeps eleven bytes of colour RAM ($DB55) to put back when play continues ($F5C9).","note":"outside the tracked image"},{"a":10402,"t":"note","l":"a_28A2","c":"The countdown of a thrown object ($085B); set by $08E2 and $0967.","note":"outside the tracked image"},{"a":10404,"t":"note","l":"a_28A4","c":"Set while a lift, an arc or a scripted move is under way; doors and the scroll at the left edge wait for it to clear.","note":"outside the tracked image"},{"a":10405,"t":"note","l":"bh_1E","c":"Behaviour $1E: rises 3 lines a pass and disappears above line $14.","note":"outside the tracked image"},{"a":10419,"t":"note","l":"bh_20","c":"Behaviour $20: rises 1 line and moves 3 pixels left a pass, disappearing above line $14.","note":"outside the tracked image"},{"a":10448,"t":"note","l":"bh_22","c":"Behaviour $22: rises 1 line and moves 3 pixels right a pass, disappearing above line $14.","note":"outside the tracked image"},{"a":10477,"t":"note","l":"flip_steps","c":"By direction and step, as $178F is indexed: 1 where the scroll's pass flips the shown screen and runs the job from $188F.","note":"outside the tracked image"},{"a":10605,"t":"note","l":"walk_x","c":"The player's sideways step for each joystick action plus $2411: 0, 1 (right) or $FF (left).","note":"outside the tracked image"},{"a":10669,"t":"note","l":"walk_y","c":"The player's step up or down for each action plus $2411: 0 except $FF and 1, the climbing steps.","note":"outside the tracked image"},{"a":10733,"t":"note","c":"Scroll slice: copies rows 1-5 of the screen $4000 (5 rows of 39 characters, from column 1) to the screen at $4400, rows 0-4, from column 0: the picture moves 1 row(s) up and 1 column(s) left.","note":"outside the tracked image"},{"a":10769,"t":"note","c":"Scroll slice: copies rows 6-10 of the screen $4000 (5 rows of 39 characters, from column 1) to the screen at $4400, rows 5-9, from column 0: the picture moves 1 row(s) up and 1 column(s) left.","note":"outside the tracked image"},{"a":10805,"t":"note","c":"Scroll slice: copies rows 11-15 of the screen $4000 (5 rows of 39 characters, from column 1) to the screen at $4400, rows 10-14, from column 0: the picture moves 1 row(s) up and 1 column(s) left.","note":"outside the tracked image"},{"a":10841,"t":"note","c":"Scroll slice: copies rows 16-17 of the screen $4000 (2 rows of 39 characters, from column 1) to the screen at $4400, rows 15-16, from column 0: the picture moves 1 row(s) up and 1 column(s) left. Then draws the new edge row and column into the screen $4400 ($1593, $1614, $1655).","note":"outside the tracked image"},{"a":10872,"t":"note","c":"Scroll slice: copies rows 14-16 of the screen $4000 (3 rows of 39 characters, from column 1) to the screen at $4400, rows 15-17, from column 0: the picture moves 1 row(s) down and 1 column(s) left.","note":"outside the tracked image"},{"a":10896,"t":"note","c":"Scroll slice: copies rows 9-13 of the screen $4000 (5 rows of 39 characters, from column 1) to the screen at $4400, rows 10-14, from column 0: the picture moves 1 row(s) down and 1 column(s) left.","note":"outside the tracked image"},{"a":10932,"t":"note","c":"Scroll slice: copies rows 4-8 of the screen $4000 (5 rows of 39 characters, from column 1) to the screen at $4400, rows 5-9, from column 0: the picture moves 1 row(s) down and 1 column(s) left.","note":"outside the tracked image"},{"a":10968,"t":"note","c":"Scroll slice: copies rows 0-3 of the screen $4000 (4 rows of 39 characters, from column 1) to the screen at $4400, rows 1-4, from column 0: the picture moves 1 row(s) down and 1 column(s) left. Then draws the new edge row and column into the screen $4400 ($1593, $1614, $1655).","note":"outside the tracked image"},{"a":11011,"t":"note","c":"Scroll slice: copies rows 14-16 of the screen $4000 (3 rows of 39 characters, from column 0) to the screen at $4400, rows 15-17, from column 1: the picture moves 1 row(s) down and 1 column(s) right.","note":"outside the tracked image"},{"a":11035,"t":"note","c":"Scroll slice: copies rows 9-13 of the screen $4000 (5 rows of 39 characters, from column 0) to the screen at $4400, rows 10-14, from column 1: the picture moves 1 row(s) down and 1 column(s) right.","note":"outside the tracked image"},{"a":11071,"t":"note","l":"s_2B3F","c":"Screen flip, colour RAM: copies rows 0-16 of colour RAM (17 rows of 40 characters, from column 0) to colour RAM, rows 1-17, from column 0: the picture moves 1 row(s) down. Also calls $F13C.","note":"outside the tracked image"},{"a":11182,"t":"note","c":"Screen flip, colour RAM: copies rows 1-17 of colour RAM (17 rows of 40 characters, from column 0) to colour RAM, rows 0-16, from column 0: the picture moves 1 row(s) up. Also calls $F15E.","note":"outside the tracked image"},{"a":11293,"t":"note","c":"Scroll slice: copies rows 4-8 of the screen $4000 (5 rows of 39 characters, from column 0) to the screen at $4400, rows 5-9, from column 1: the picture moves 1 row(s) down and 1 column(s) right.","note":"outside the tracked image"},{"a":11329,"t":"note","c":"Scroll slice: copies rows 0-3 of the screen $4000 (4 rows of 39 characters, from column 0) to the screen at $4400, rows 1-4, from column 1: the picture moves 1 row(s) down and 1 column(s) right. Then draws the new edge row and column into the screen $4400 ($1593, $1614, $1655).","note":"outside the tracked image"},{"a":11372,"t":"note","c":"Scroll slice: copies rows 1-5 of the screen $4000 (5 rows of 39 characters, from column 0) to the screen at $4400, rows 0-4, from column 1: the picture moves 1 row(s) up and 1 column(s) right.","note":"outside the tracked image"},{"a":11408,"t":"note","c":"Scroll slice: copies rows 6-10 of the screen $4000 (5 rows of 39 characters, from column 0) to the screen at $4400, rows 5-9, from column 1: the picture moves 1 row(s) up and 1 column(s) right.","note":"outside the tracked image"},{"a":11444,"t":"note","c":"Scroll slice: copies rows 11-15 of the screen $4000 (5 rows of 39 characters, from column 0) to the screen at $4400, rows 10-14, from column 1: the picture moves 1 row(s) up and 1 column(s) right.","note":"outside the tracked image"},{"a":11480,"t":"note","c":"Scroll slice: copies rows 16-17 of the screen $4000 (2 rows of 39 characters, from column 0) to the screen at $4400, rows 15-16, from column 1: the picture moves 1 row(s) up and 1 column(s) right. Then draws the new edge row and column into the screen $4400 ($1593, $1614, $1655).","note":"outside the tracked image"},{"a":11511,"t":"note","c":"Scroll slice: copies rows 0-4 of the screen $4000 (5 rows of 39 characters, from column 1) to the screen at $4400, rows 0-4, from column 0: the picture moves 1 column(s) left.","note":"outside the tracked image"},{"a":11547,"t":"note","c":"Scroll slice: copies rows 5-9 of the screen $4000 (5 rows of 39 characters, from column 1) to the screen at $4400, rows 5-9, from column 0: the picture moves 1 column(s) left.","note":"outside the tracked image"},{"a":11583,"t":"note","c":"Scroll slice: copies rows 10-14 of the screen $4000 (5 rows of 39 characters, from column 1) to the screen at $4400, rows 10-14, from column 0: the picture moves 1 column(s) left.","note":"outside the tracked image"},{"a":11619,"t":"note","c":"Scroll slice: copies rows 15-17 of the screen $4000 (3 rows of 39 characters, from column 1) to the screen at $4400, rows 15-17, from column 0: the picture moves 1 column(s) left. Then draws the new edge row and column into the screen $4400 ($1593, $1614, $1655).","note":"outside the tracked image"},{"a":11656,"t":"note","c":"Scroll slice: copies rows 0-4 of the screen $4000 (5 rows of 39 characters, from column 0) to the screen at $4400, rows 0-4, from column 1: the picture moves 1 column(s) right.","note":"outside the tracked image"},{"a":11692,"t":"note","c":"Scroll slice: copies rows 5-9 of the screen $4000 (5 rows of 39 characters, from column 0) to the screen at $4400, rows 5-9, from column 1: the picture moves 1 column(s) right.","note":"outside the tracked image"},{"a":11728,"t":"note","c":"Scroll slice: copies rows 10-14 of the screen $4000 (5 rows of 39 characters, from column 0) to the screen at $4400, rows 10-14, from column 1: the picture moves 1 column(s) right.","note":"outside the tracked image"},{"a":11764,"t":"note","c":"Scroll slice: copies rows 15-17 of the screen $4000 (3 rows of 39 characters, from column 0) to the screen at $4400, rows 15-17, from column 1: the picture moves 1 column(s) right. Then draws the new edge row and column into the screen $4400 ($1593, $1614, $1655).","note":"outside the tracked image"},{"a":11801,"t":"note","c":"Scroll slice: copies rows 14-16 of the screen $4000 (3 rows of 40 characters, from column 0) to the screen at $4400, rows 15-17, from column 0: the picture moves 1 row(s) down.","note":"outside the tracked image"},{"a":11825,"t":"note","c":"Scroll slice: copies rows 9-13 of the screen $4000 (5 rows of 40 characters, from column 0) to the screen at $4400, rows 10-14, from column 0: the picture moves 1 row(s) down.","note":"outside the tracked image"},{"a":11861,"t":"note","c":"Scroll slice: copies rows 4-8 of the screen $4000 (5 rows of 40 characters, from column 0) to the screen at $4400, rows 5-9, from column 0: the picture moves 1 row(s) down.","note":"outside the tracked image"},{"a":11897,"t":"note","c":"Scroll slice: copies rows 0-3 of the screen $4000 (4 rows of 40 characters, from column 0) to the screen at $4400, rows 1-4, from column 0: the picture moves 1 row(s) down. Then draws the new edge row and column into the screen $4400 ($1593, $1614, $1655).","note":"outside the tracked image"},{"a":11940,"t":"note","c":"Scroll slice: copies rows 1-5 of the screen $4000 (5 rows of 40 characters, from column 0) to the screen at $4400, rows 0-4, from column 0: the picture moves 1 row(s) up.","note":"outside the tracked image"},{"a":11976,"t":"note","c":"Scroll slice: copies rows 6-10 of the screen $4000 (5 rows of 40 characters, from column 0) to the screen at $4400, rows 5-9, from column 0: the picture moves 1 row(s) up.","note":"outside the tracked image"},{"a":12012,"t":"note","c":"Scroll slice: copies rows 11-15 of the screen $4000 (5 rows of 40 characters, from column 0) to the screen at $4400, rows 10-14, from column 0: the picture moves 1 row(s) up.","note":"outside the tracked image"},{"a":12048,"t":"note","c":"Scroll slice: copies rows 16-17 of the screen $4000 (2 rows of 40 characters, from column 0) to the screen at $4400, rows 15-16, from column 0: the picture moves 1 row(s) up. Then draws the new edge row and column into the screen $4400 ($1593, $1614, $1655).","note":"outside the tracked image"},{"a":12079,"t":"note","c":"Scroll slice: copies rows 1-5 of the screen $4400 (5 rows of 39 characters, from column 1) to the screen at $4000, rows 0-4, from column 0: the picture moves 1 row(s) up and 1 column(s) left.","note":"outside the tracked image"},{"a":12095,"t":"note","c":"The second half of the scroll slices from $2F2F (see each slice's own comment).","note":"outside the tracked image"},{"a":12115,"t":"note","c":"Scroll slice: copies rows 6-10 of the screen $4400 (5 rows of 39 characters, from column 1) to the screen at $4000, rows 5-9, from column 0: the picture moves 1 row(s) up and 1 column(s) left.","note":"outside the tracked image"},{"a":12151,"t":"note","c":"Scroll slice: copies rows 11-15 of the screen $4400 (5 rows of 39 characters, from column 1) to the screen at $4000, rows 10-14, from column 0: the picture moves 1 row(s) up and 1 column(s) left.","note":"outside the tracked image"},{"a":12187,"t":"note","c":"Scroll slice: copies rows 16-17 of the screen $4400 (2 rows of 39 characters, from column 1) to the screen at $4000, rows 15-16, from column 0: the picture moves 1 row(s) up and 1 column(s) left. Then draws the new edge row and column into the screen $4000 ($1593, $1614, $1655).","note":"outside the tracked image"},{"a":12218,"t":"note","c":"Scroll slice: copies rows 14-16 of the screen $4400 (3 rows of 39 characters, from column 1) to the screen at $4000, rows 15-17, from column 0: the picture moves 1 row(s) down and 1 column(s) left.","note":"outside the tracked image"},{"a":12242,"t":"note","c":"Scroll slice: copies rows 9-13 of the screen $4400 (5 rows of 39 characters, from column 1) to the screen at $4000, rows 10-14, from column 0: the picture moves 1 row(s) down and 1 column(s) left.","note":"outside the tracked image"},{"a":12278,"t":"note","c":"Scroll slice: copies rows 4-8 of the screen $4400 (5 rows of 39 characters, from column 1) to the screen at $4000, rows 5-9, from column 0: the picture moves 1 row(s) down and 1 column(s) left.","note":"outside the tracked image"},{"a":12314,"t":"note","c":"Scroll slice: copies rows 0-3 of the screen $4400 (4 rows of 39 characters, from column 1) to the screen at $4000, rows 1-4, from column 0: the picture moves 1 row(s) down and 1 column(s) left. Then draws the new edge row and column into the screen $4000 ($1593, $1614, $1655).","note":"outside the tracked image"},{"a":12357,"t":"note","c":"Scroll slice: copies rows 14-16 of the screen $4400 (3 rows of 39 characters, from column 0) to the screen at $4000, rows 15-17, from column 1: the picture moves 1 row(s) down and 1 column(s) right.","note":"outside the tracked image"},{"a":12381,"t":"note","c":"Scroll slice: copies rows 9-13 of the screen $4400 (5 rows of 39 characters, from column 0) to the screen at $4000, rows 10-14, from column 1: the picture moves 1 row(s) down and 1 column(s) right.","note":"outside the tracked image"},{"a":12417,"t":"note","c":"Scroll slice: copies rows 4-8 of the screen $4400 (5 rows of 39 characters, from column 0) to the screen at $4000, rows 5-9, from column 1: the picture moves 1 row(s) down and 1 column(s) right.","note":"outside the tracked image"},{"a":12453,"t":"note","c":"Scroll slice: copies rows 0-3 of the screen $4400 (4 rows of 39 characters, from column 0) to the screen at $4000, rows 1-4, from column 1: the picture moves 1 row(s) down and 1 column(s) right. Then draws the new edge row and column into the screen $4000 ($1593, $1614, $1655).","note":"outside the tracked image"},{"a":12496,"t":"note","c":"Scroll slice: copies rows 1-5 of the screen $4400 (5 rows of 39 characters, from column 0) to the screen at $4000, rows 0-4, from column 1: the picture moves 1 row(s) up and 1 column(s) right.","note":"outside the tracked image"},{"a":12532,"t":"note","c":"Scroll slice: copies rows 6-10 of the screen $4400 (5 rows of 39 characters, from column 0) to the screen at $4000, rows 5-9, from column 1: the picture moves 1 row(s) up and 1 column(s) right.","note":"outside the tracked image"},{"a":12568,"t":"note","c":"Scroll slice: copies rows 11-15 of the screen $4400 (5 rows of 39 characters, from column 0) to the screen at $4000, rows 10-14, from column 1: the picture moves 1 row(s) up and 1 column(s) right.","note":"outside the tracked image"},{"a":12604,"t":"note","c":"Scroll slice: copies rows 16-17 of the screen $4400 (2 rows of 39 characters, from column 0) to the screen at $4000, rows 15-16, from column 1: the picture moves 1 row(s) up and 1 column(s) right. Then draws the new edge row and column into the screen $4000 ($1593, $1614, $1655).","note":"outside the tracked image"},{"a":12635,"t":"note","c":"Scroll slice: copies rows 0-4 of the screen $4400 (5 rows of 39 characters, from column 1) to the screen at $4000, rows 0-4, from column 0: the picture moves 1 column(s) left.","note":"outside the tracked image"},{"a":12671,"t":"note","c":"Scroll slice: copies rows 5-9 of the screen $4400 (5 rows of 39 characters, from column 1) to the screen at $4000, rows 5-9, from column 0: the picture moves 1 column(s) left.","note":"outside the tracked image"},{"a":12707,"t":"note","c":"Scroll slice: copies rows 10-14 of the screen $4400 (5 rows of 39 characters, from column 1) to the screen at $4000, rows 10-14, from column 0: the picture moves 1 column(s) left.","note":"outside the tracked image"},{"a":12743,"t":"note","c":"Scroll slice: copies rows 15-17 of the screen $4400 (3 rows of 39 characters, from column 1) to the screen at $4000, rows 15-17, from column 0: the picture moves 1 column(s) left. Then draws the new edge row and column into the screen $4000 ($1593, $1614, $1655).","note":"outside the tracked image"},{"a":12780,"t":"note","c":"Scroll slice: copies rows 0-4 of the screen $4400 (5 rows of 39 characters, from column 0) to the screen at $4000, rows 0-4, from column 1: the picture moves 1 column(s) right.","note":"outside the tracked image"},{"a":12816,"t":"note","c":"Scroll slice: copies rows 5-9 of the screen $4400 (5 rows of 39 characters, from column 0) to the screen at $4000, rows 5-9, from column 1: the picture moves 1 column(s) right.","note":"outside the tracked image"},{"a":12852,"t":"note","c":"Scroll slice: copies rows 10-14 of the screen $4400 (5 rows of 39 characters, from column 0) to the screen at $4000, rows 10-14, from column 1: the picture moves 1 column(s) right.","note":"outside the tracked image"},{"a":12888,"t":"note","c":"Scroll slice: copies rows 15-17 of the screen $4400 (3 rows of 39 characters, from column 0) to the screen at $4000, rows 15-17, from column 1: the picture moves 1 column(s) right. Then draws the new edge row and column into the screen $4000 ($1593, $1614, $1655).","note":"outside the tracked image"},{"a":12925,"t":"note","c":"Scroll slice: copies rows 14-16 of the screen $4400 (3 rows of 40 characters, from column 0) to the screen at $4000, rows 15-17, from column 0: the picture moves 1 row(s) down.","note":"outside the tracked image"},{"a":12949,"t":"note","c":"Scroll slice: copies rows 9-13 of the screen $4400 (5 rows of 40 characters, from column 0) to the screen at $4000, rows 10-14, from column 0: the picture moves 1 row(s) down.","note":"outside the tracked image"},{"a":12985,"t":"note","c":"Scroll slice: copies rows 4-8 of the screen $4400 (5 rows of 40 characters, from column 0) to the screen at $4000, rows 5-9, from column 0: the picture moves 1 row(s) down.","note":"outside the tracked image"},{"a":13021,"t":"note","c":"Scroll slice: copies rows 0-3 of the screen $4400 (4 rows of 40 characters, from column 0) to the screen at $4000, rows 1-4, from column 0: the picture moves 1 row(s) down. Then draws the new edge row and column into the screen $4000 ($1593, $1614, $1655).","note":"outside the tracked image"},{"a":13064,"t":"note","c":"Scroll slice: copies rows 1-5 of the screen $4400 (5 rows of 40 characters, from column 0) to the screen at $4000, rows 0-4, from column 0: the picture moves 1 row(s) up.","note":"outside the tracked image"},{"a":13100,"t":"note","c":"Scroll slice: copies rows 6-10 of the screen $4400 (5 rows of 40 characters, from column 0) to the screen at $4000, rows 5-9, from column 0: the picture moves 1 row(s) up.","note":"outside the tracked image"},{"a":13136,"t":"note","c":"Scroll slice: copies rows 11-15 of the screen $4400 (5 rows of 40 characters, from column 0) to the screen at $4000, rows 10-14, from column 0: the picture moves 1 row(s) up.","note":"outside the tracked image"},{"a":13172,"t":"note","c":"Scroll slice: copies rows 16-17 of the screen $4400 (2 rows of 40 characters, from column 0) to the screen at $4000, rows 15-16, from column 0: the picture moves 1 row(s) up. Then draws the new edge row and column into the screen $4000 ($1593, $1614, $1655).","note":"outside the tracked image"},{"a":13203,"t":"note","c":"Screen flip, colour RAM: copies rows 1-17 of colour RAM (17 rows of 39 characters, from column 1) to colour RAM, rows 0-16, from column 0: the picture moves 1 row(s) up and 1 column(s) left. Also calls $F15E, $EEA2.","note":"outside the tracked image"},{"a":13317,"t":"note","c":"Screen flip, colour RAM: copies rows 0-16 of colour RAM (17 rows of 39 characters, from column 1) to colour RAM, rows 1-17, from column 0: the picture moves 1 row(s) down and 1 column(s) left. Also calls $F13C, $EEA2.","note":"outside the tracked image"},{"a":13431,"t":"note","c":"Screen flip, colour RAM: copies rows 0-16 of colour RAM (17 rows of 39 characters, from column 0) to rows 1-17 from column 1: the picture moves 1 row down and 1 column right. Then draws the new right-hand column's and top row's colours ($EFEF, $F13C).","note":"outside the tracked image"},{"a":13545,"t":"note","c":"Screen flip, colour RAM: copies rows 1-17 of colour RAM (17 rows of 39 characters, from column 0) to colour RAM, rows 0-16, from column 1: the picture moves 1 row(s) up and 1 column(s) right. Also calls $F15E, $EFEF.","note":"outside the tracked image"},{"a":13659,"t":"note","c":"Screen flip, colour RAM: copies rows 0-17 of colour RAM (18 rows of 39 characters, from column 1) to colour RAM, rows 0-17, from column 0: the picture moves 1 column(s) left. Also calls $EEA2.","note":"outside the tracked image"},{"a":13776,"t":"note","c":"Screen flip, colour RAM: copies rows 0-17 of colour RAM (18 rows of 39 characters, from column 0) to colour RAM, rows 0-17, from column 1: the picture moves 1 column(s) right. Also calls $EFEF.","note":"outside the tracked image"},{"a":13893,"t":"note","l":"colour_panel","c":"Colours the panel's five rows (screen rows 18-22 at $42D0) by looking each character up in the panel's colour table at $500F and writing it into colour RAM at $DAD0.","note":"outside the tracked image"},{"a":13944,"t":"note","l":"update_timers","c":"While the hazard cooldown $1104 runs, counts it down and makes the player flicker: on odd passes his frame becomes $4E (blank), kept in $2855 and put back on even ones. When it reaches 1, clears $E000.","note":"outside the tracked image"},{"a":13983,"t":"note","l":"jump_step","c":"The step of the player's jump or fall, an even index into $36A0 or $36E2; 0 when he is on the ground.","note":"outside the tracked image"},{"a":13984,"t":"note","l":"jump_murtaugh","c":"Murtaugh's jump ($FFF1=0), one line change a step, two bytes each with the high byte unread: -4 seven times, -2 four times, -1 four times, 0 twice, +1 four times, +2 four times, +4 seven times, then $7F to end. 32 steps, rising 40 lines and coming back down.","note":"outside the tracked image"},{"a":14050,"t":"note","l":"jump_riggs","c":"Riggs's jump ($FFF1=1): -4 five times, -2 seven times, -1 six times, 0 four times, +1 six times, +2 seven times, +4 five times, then $7F. 40 steps to the same 40 lines, so Riggs's jump is slower than Murtaugh's and no higher.","note":"outside the tracked image"},{"a":14132,"t":"note","c":"Eight bytes read by $F3C0, which draws the lives: the bit patterns $80, $C0, $E0, $E0, $E8, $E8, $EE, $EE.","note":"outside the tracked image"},{"a":14140,"t":"note","l":"lives","c":"Lives left: 3 at the start ($ED51), one more for each life pickup, one fewer at each death; when none is left the next death ends the game ($F49E).","note":"outside the tracked image"},{"a":14142,"t":"note","l":"sort_start","c":"Starts the sprite multiplexer's object list at $3970 (the stage's records) and calls $E480.","note":"outside the tracked image"},{"a":14161,"t":"note","l":"s_3751","c":"Calls $E480 (named in the $178F table).","note":"outside the tracked image"},{"a":14165,"t":"note","l":"s_3755","c":"Calls $E480 when the scroll stops.","note":"outside the tracked image"},{"a":14169,"t":"note","l":"ending_filename","c":"\"111\", the file of the ending.","note":"outside the tracked image"},{"a":14172,"t":"note","l":"start_ending","c":"The last door: loads \"111\" to $0900, over the first enemy behaviours, with $32 set to the character played ($FFF1), and jumps to $0900.","note":"outside the tracked image"},{"a":14199,"t":"note","l":"a_3777","c":"Bytes read and written by $E480, $E4E6 and $E550 (the sprite sort).","note":"outside the tracked image"},{"a":14224,"t":"note","l":"stage_exits","c":"Stage 1A's overlay (file L1A0), loaded here by $1B0D, starts with its doors: six entries of 14 bytes, searched by $22CB. Bytes 1-3 are the place to match, byte 4 the stage it leads to (negative for the ending), then camera x and y, the player's x, his facing and his line there. Here: five doors to stage 2 (L1AX) and one to stage 4 (L1B). Every overlay has these six entries; later stages keep copies of 1A's that lead to stage 2.","note":"outside the tracked image"},{"a":14308,"t":"note","l":"stage_files","c":"The names of the stage's four files, sixteen characters each with spaces: \"L1A .BLK\" (tiles), \".MAP\", \".ATT\" (colours) and \".CHR\" (characters), loaded by $1B28 from here, $37F4, $3804 and $3814.","note":"outside the tracked image"},{"a":14372,"t":"note","l":"map_start","c":"The address in the unpacked map ($441D) where $0673 starts building, followed by unused bytes up to $383B.","note":"outside the tracked image"},{"a":14396,"t":"note","l":"sprite_files","c":"The stage's sprite files, six bytes each (four letters of name, then the load address): SP90 at $7BC0, SP00 at $53C0 (SP0Z for Murtaugh), SP91 at $6900, SP12 at $6940, SP01 at $6D40, SP20 at $7440, SP21 at $7840; then $FF ends the list.","note":"outside the tracked image"},{"a":14440,"t":"note","l":"walker_records","c":"The stage's walkers, read by $E713: three records of 13 bytes (x, line, mode, frame, counters). An entry whose byte 2 is negative, at $388F, ends the list.","note":"outside the tracked image"},{"a":14459,"t":"note","l":"anim_table","c":"The level's animation table, which every object's frame indexes from here ($387B + frame): the amount to add to a frame for the next one. Frames start at $4E, so the bytes read begin at $38C9; the bytes here before that are the end of the walkers' records.","note":"outside the tracked image"},{"a":14479,"t":"note","c":"The walkers' end mark, then the bytes $387B+frame reads: the animation table. For each frame number in use ($4E and up, so from $38C9) the amount added to it for the next frame: 1 steps on, a negative number goes back to the first frame of a cycle, 0 holds.","note":"outside the tracked image"},{"a":14704,"t":"note","c":"Stage 1A's 43 enemy records, 19 bytes each, which $E001 and $E480 spawn and the behaviours keep their state in: x and line (two bytes each), frame, an active flag, the type (the behaviour number), the colour and facing, timers and counts from byte 8, and the hit points at byte $11.","note":"outside the tracked image"},{"a":15483,"t":"note","c":"The last records of stage 1A, up to the end mark at $3CA1.","note":"outside the tracked image"},{"a":15521,"t":"note","c":"The records' end mark (a record of $FF) and the rest of the 2160-byte overlay, all $FF.","note":"outside the tracked image"},{"a":16167,"t":"note","l":"f_3F27","c":"Inside the overlay's padding of $FF; named only as the base of indexed copies ($2F34, $3160) that with X from $D9 to $FF reach the screen rows at $4000 or $4400 instead, $4000 onward.","note":"outside the tracked image"},{"a":16168,"t":"note","l":"f_3F28","c":"Inside the overlay's padding of $FF; named only as the base of indexed copies ($2AEC, $2CF9) that with X from $D9 to $FF reach the screen rows at $4000 or $4400 instead, $4001 onward.","note":"outside the tracked image"},{"a":16207,"t":"note","l":"f_3F4F","c":"Inside the overlay's padding of $FF; named only as the base of indexed copies ($2F3A, $3031, $3166) that with X from $D9 to $FF reach the screen rows at $4000 or $4400 instead, $4028 onward.","note":"outside the tracked image"},{"a":16208,"t":"note","l":"f_3F50","c":"Inside the overlay's padding of $FF; named only as the base of indexed copies ($29EF, $2AE6, $2CFF) that with X from $D9 to $FF reach the screen rows at $4000 or $4400 instead, $4029 onward.","note":"outside the tracked image"},{"a":16247,"t":"note","l":"f_3F77","c":"Inside the overlay's padding of $FF; named only as the base of indexed copies ($2F40, $302B, $316C) that with X from $D9 to $FF reach the screen rows at $4000 or $4400 instead, $4050 onward.","note":"outside the tracked image"},{"a":16248,"t":"note","l":"f_3F78","c":"Inside the overlay's padding of $FF; named only as the base of indexed copies ($29F5, $2AE0, $2D05) that with X from $D9 to $FF reach the screen rows at $4000 or $4400 instead, $4051 onward.","note":"outside the tracked image"},{"a":16287,"t":"note","l":"f_3F9F","c":"Inside the overlay's padding of $FF; named only as the base of indexed copies ($2F46, $3025, $3172) that with X from $D9 to $FF reach the screen rows at $4000 or $4400 instead, $4078 onward.","note":"outside the tracked image"},{"a":16288,"t":"note","l":"f_3FA0","c":"Inside the overlay's padding of $FF; named only as the base of indexed copies ($29FB, $2ADA, $2D0B) that with X from $D9 to $FF reach the screen rows at $4000 or $4400 instead, $4079 onward.","note":"outside the tracked image"},{"a":16327,"t":"note","l":"f_3FC7","c":"Inside the overlay's padding of $FF; named only as the base of indexed copies ($2F4C, $301F, $3178) that with X from $D9 to $FF reach the screen rows at $4000 or $4400 instead, $40A0 onward.","note":"outside the tracked image"},{"a":16328,"t":"note","l":"f_3FC8","c":"Inside the overlay's padding of $FF; named only as the base of indexed copies ($2A01, $2ACE, $2D11) that with X from $D9 to $FF reach the screen rows at $4000 or $4400 instead, $40A1 onward.","note":"outside the tracked image"},{"a":16367,"t":"note","l":"f_3FEF","c":"Inside the overlay's padding of $FF; named only as the base of indexed copies ($2F58, $3013, $3184) that with X from $D9 to $FF reach the screen rows at $4000 or $4400 instead, $40C8 onward.","note":"outside the tracked image"},{"a":16368,"t":"note","l":"f_3FF0","c":"Inside the overlay's padding of $FF; named only as the base of indexed copies ($2A07, $2AC8, $2D1D) that with X from $D9 to $FF reach the screen rows at $4000 or $4400 instead, $40C9 onward.","note":"outside the tracked image"},{"a":16384,"l":"ending_screen","c":"The ending's picture, the file MEL (MUR for Murtaugh): 1000 character codes, the portrait, the thumb and WELL DONE! THE MAGIC CONTINUES.","t":"byte","b":[0],"x":[2563]},{"a":16385,"l":"f_4001","c":"Row 0, column 1 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":16393,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":16401,"t":"byte","b":[0,0,0,0,0,0]},{"a":16407,"l":"f_4017","c":"Row 0, column 23 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0]},{"a":16408,"l":"f_4018","c":"Row 0, column 24 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":16416,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":16424,"l":"f_4028","c":"Row 1, column 0 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0]},{"a":16425,"l":"f_4029","c":"Row 1, column 1 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":16433,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":16441,"t":"byte","b":[0,0,0,0,0,0]},{"a":16447,"l":"f_403F","c":"Row 1, column 23 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0]},{"a":16448,"l":"f_4040","c":"Row 1, column 24 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":16456,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":16464,"l":"f_4050","c":"Row 2, column 0 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0]},{"a":16465,"l":"f_4051","c":"Row 2, column 1 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,40,0,40,41,42]},{"a":16473,"t":"byte","b":[43,0,44,59,0,0,60,61]},{"a":16481,"t":"byte","b":[62,63,64,74,40,41]},{"a":16487,"l":"f_4067","c":"Row 2, column 23 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[42]},{"a":16488,"l":"f_4068","c":"Row 2, column 24 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[43,0,0,0,0,0,233,0]},{"a":16496,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":16504,"l":"f_4078","c":"Row 3, column 0 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0]},{"a":16505,"l":"f_4079","c":"Row 3, column 1 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,45,46,47,48,49]},{"a":16513,"t":"byte","b":[50,0,51,65,0,0,47,50]},{"a":16521,"t":"byte","b":[50,51,66,75,47,48]},{"a":16527,"l":"f_408F","c":"Row 3, column 23 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[49]},{"a":16528,"l":"f_4090","c":"Row 3, column 24 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[50,0,0,0,0,230,231,0]},{"a":16536,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":16544,"l":"f_40A0","c":"Row 4, column 0 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0]},{"a":16545,"l":"f_40A1","c":"Row 4, column 1 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,52,53,54,55,56]},{"a":16553,"t":"byte","b":[57,56,58,68,69,0,55,70]},{"a":16561,"t":"byte","b":[71,72,73,76,77,55]},{"a":16567,"l":"f_40B7","c":"Row 4, column 23 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[56]},{"a":16568,"l":"f_40B8","c":"Row 4, column 24 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[78,0,0,0,225,226,0,0]},{"a":16576,"t":"byte","b":[235,236,0,228,0,0,233,0]},{"a":16584,"l":"f_40C8","c":"Row 5, column 0 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0]},{"a":16585,"l":"f_40C9","c":"Row 5, column 1 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":16593,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":16601,"t":"byte","b":[0,0,0,0,0,0]},{"a":16607,"l":"f_40DF","c":"Row 5, column 23 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0]},{"a":16608,"l":"f_40E0","c":"Row 5, column 24 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,219,220,221,0]},{"a":16616,"t":"byte","b":[232,0,223,224,0,230,231,0]},{"a":16624,"l":"f_40F0","c":"Row 6, column 0 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0]},{"a":16625,"l":"f_40F1","c":"Row 6, column 1 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":16633,"t":"byte","b":[0,0,0,0,0,0,0]},{"a":16640,"l":"f_4100","c":"Row 6, column 16 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,0,0],"x":[2572]},{"a":16647,"l":"f_4107","c":"Row 6, column 23 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0]},{"a":16648,"l":"f_4108","c":"Row 6, column 24 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,212,0,213,214]},{"a":16656,"t":"byte","b":[215,216,217,218,241,242,0,0]},{"a":16664,"l":"f_4118","c":"Row 7, column 0 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0]},{"a":16665,"l":"f_4119","c":"Row 7, column 1 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":16673,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":16681,"t":"byte","b":[0,0,0,0,0,0]},{"a":16687,"l":"f_412F","c":"Row 7, column 23 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0]},{"a":16688,"l":"f_4130","c":"Row 7, column 24 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,207,208,209]},{"a":16696,"t":"byte","b":[146,211,210,210,237,238,239,0]},{"a":16704,"l":"f_4140","c":"Row 8, column 0 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0]},{"a":16705,"l":"f_4141","c":"Row 8, column 1 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":16713,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":16721,"t":"byte","b":[0,0,0,0,0,0]},{"a":16727,"l":"f_4157","c":"Row 8, column 23 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0]},{"a":16728,"l":"f_4158","c":"Row 8, column 24 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,106,107,108]},{"a":16736,"t":"byte","b":[109,110,111,112,157,158,159,160]},{"a":16744,"l":"f_4168","c":"Row 9, column 0 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0]},{"a":16745,"l":"f_4169","c":"Row 9, column 1 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":16753,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":16761,"t":"byte","b":[0,0,0,0,0,0]},{"a":16767,"l":"f_417F","c":"Row 9, column 23 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0]},{"a":16768,"l":"f_4180","c":"Row 9, column 24 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,113,114,115]},{"a":16776,"t":"byte","b":[116,117,118,119,146,162,163,164]},{"a":16784,"l":"f_4190","c":"Row 10, column 0 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[79]},{"a":16785,"l":"f_4191","c":"Row 10, column 1 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[80,81,82,83,84,85,86,87]},{"a":16793,"t":"byte","b":[88,89,90,91,92,93,94,95]},{"a":16801,"t":"byte","b":[96,97,98,79,80,82]},{"a":16807,"l":"f_41A7","c":"Row 10, column 23 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[99]},{"a":16808,"l":"f_41A8","c":"Row 10, column 24 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[100,100,101,102,103,120,121,122]},{"a":16816,"t":"byte","b":[123,124,125,126,166,167,168,169]},{"a":16824,"l":"f_41B8","c":"Row 11, column 0 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[104]},{"a":16825,"l":"f_41B9","c":"Row 11, column 1 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[105,188,189,190,105,191,192,188]},{"a":16833,"t":"byte","b":[147,193,194,195,175,182,255,247]},{"a":16841,"t":"byte","b":[248,194,194,104,105,189]},{"a":16847,"l":"f_41CF","c":"Row 11, column 23 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[104]},{"a":16848,"l":"f_41D0","c":"Row 11, column 24 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[249,250,229,234,206,127,128,129]},{"a":16856,"t":"byte","b":[130,131,132,133,67,171,172,173]},{"a":16864,"l":"f_41E0","c":"Row 12, column 0 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0]},{"a":16865,"l":"f_41E1","c":"Row 12, column 1 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":16873,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":16881,"t":"byte","b":[0,0,0,0,0,1,2,0]},{"a":16889,"t":"byte","b":[0,0,134,0,134,135,136]},{"a":16896,"l":"f_4200","c":"Row 12, column 32 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[137,138,139,140,176,177,178,179],"x":[2581]},{"a":16904,"l":"f_4208","c":"Row 13, column 0 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0]},{"a":16905,"l":"f_4209","c":"Row 13, column 1 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":16913,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":16921,"t":"byte","b":[0,0,0,0,0,3,4,0]},{"a":16929,"t":"byte","b":[0,0,0,0,0,141,142,143]},{"a":16937,"t":"byte","b":[144,145,146,183,184,185,186]},{"a":16944,"l":"f_4230","c":"Row 14, column 0 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0]},{"a":16945,"l":"f_4231","c":"Row 14, column 1 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":16953,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":16961,"t":"byte","b":[0,0,5,6,7,8,9,0]},{"a":16969,"t":"byte","b":[0,0,0,0,0,0,148,149]},{"a":16977,"t":"byte","b":[150,151,146,196,197,0,198]},{"a":16984,"l":"f_4258","c":"Row 15, column 0 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0]},{"a":16985,"l":"f_4259","c":"Row 15, column 1 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":16993,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17001,"t":"byte","b":[0,0,10,11,12,13,14,0]},{"a":17009,"t":"byte","b":[0,0,0,0,0,152,153,146]},{"a":17017,"t":"byte","b":[154,155,156,202,0,0,203]},{"a":17024,"l":"f_4280","c":"Row 16, column 0 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0]},{"a":17025,"l":"f_4281","c":"Row 16, column 1 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17033,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17041,"t":"byte","b":[0,0,15,16,17,18,19,20]},{"a":17049,"t":"byte","b":[0,0,0,0,251,0,251,252]},{"a":17057,"t":"byte","b":[253,254,0,0,0,0,0]},{"a":17064,"l":"f_42A8","c":"Row 17, column 0 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0]},{"a":17065,"l":"f_42A9","c":"Row 17, column 1 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17073,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17081,"t":"byte","b":[0,21,22,23,24,25,26,27]},{"a":17089,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17097,"t":"byte","b":[0,0,0,0,0,0,0]},{"a":17104,"l":"f_42D0","c":"Row 18, column 0 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17112,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17120,"t":"byte","b":[0,0,28,29,30,31,32,33]},{"a":17128,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17136,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17144,"l":"f_42F8","c":"Row 19, column 0 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17152,"l":"f_4300","c":"Row 19, column 8 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,0,0,0],"x":[2590]},{"a":17160,"t":"byte","b":[0,0,0,34,35,36,37,38]},{"a":17168,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17176,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17184,"l":"f_4320","c":"Row 20, column 0 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,0,0],"x":[2606]},{"a":17191,"l":"f_4327","c":"Row 20, column 7 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0]},{"a":17192,"l":"f_4328","c":"Row 20, column 8 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17200,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17208,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17216,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17224,"l":"f_4348","c":"Row 21, column 0 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,0,0],"x":[2609]},{"a":17231,"l":"f_434F","c":"Row 21, column 7 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0]},{"a":17232,"l":"f_4350","c":"Row 21, column 8 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17240,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17248,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17256,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17264,"l":"f_4370","c":"Row 22, column 0 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,0,0],"x":[2612]},{"a":17271,"l":"f_4377","c":"Row 22, column 7 of the ending's picture, named only by the game's code beneath as the base of an indexed copy.","t":"byte","b":[0]},{"a":17272,"l":"f_4378","c":"Row 22, column 8 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17280,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17288,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17296,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17304,"l":"f_4398","c":"Row 23, column 0 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,0,0],"x":[2615]},{"a":17311,"l":"f_439F","c":"Row 23, column 7 of the ending's picture, named only by the game's code beneath as the base of an indexed copy.","t":"byte","b":[0]},{"a":17312,"l":"f_43A0","c":"Row 23, column 8 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17320,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17328,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17336,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17344,"l":"f_43C0","c":"Row 24, column 0 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,0,0],"x":[2618]},{"a":17351,"l":"f_43C7","c":"Row 24, column 7 of the ending's picture, named only by the game's code beneath as the base of an indexed copy.","t":"byte","b":[0]},{"a":17352,"l":"f_43C8","c":"Row 24, column 8 of the ending's picture (MEL or MUR). The game's code still in memory beneath (its scroll and panel routines) names this address as the base of an indexed copy; the ending does not use it as one.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17360,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17368,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17376,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":17384,"t":"gap","n":7192},{"a":18432,"t":"note","l":"level_charset","c":"The stage's character set, 256 characters for the play area, unpacked from the .CHR file by $1B28. Each character's colour is in $FD9D and its behaviour in $FC95.","note":"outside the tracked image"},{"a":19456,"t":"note","c":"The second half of the stage's character set, characters 128-255.","note":"outside the tracked image"},{"a":20480,"t":"note","l":"panel_charset","c":"The panel's character set, from the file PAN0 (848 bytes, loaded by $1B28): 106 characters, among them the three-row score digits ($33-$50), the clock and magazine digits ($1B-$24), the energy cells ($2B, and 2 rewritten by $F375), the lives ($29) and the rounds ($2C). The 48 bytes after it ($5350-$537F) are not loaded by PAN0 and not read.","note":"outside the tracked image"},{"a":20495,"t":"note","l":"f_500F","c":"The panel's colour table, one byte per panel character, from the file PAN2 (loaded at $5008 by $1B28); $3645 reads it before PAN0 is loaded over the same addresses, so in play these bytes are PAN0's characters.","note":"outside the tracked image"},{"a":20496,"t":"note","c":"Row 0 of panel character 2, the part-full cell of the energy bar, rewritten by $F375.","note":"outside the tracked image"},{"a":20497,"t":"note","c":"Row 1 of the energy bar's part-full character.","note":"outside the tracked image"},{"a":20498,"t":"note","c":"Row 2 of the energy bar's part-full character.","note":"outside the tracked image"},{"a":20499,"t":"note","c":"Row 3 of the energy bar's part-full character.","note":"outside the tracked image"},{"a":20500,"t":"note","c":"Row 4 of the energy bar's part-full character.","note":"outside the tracked image"},{"a":20501,"t":"note","c":"Row 5 of the energy bar's part-full character.","note":"outside the tracked image"},{"a":20502,"t":"note","c":"Row 6 of the energy bar's part-full character.","note":"outside the tracked image"},{"a":20503,"t":"note","c":"Row 7 of the energy bar's part-full character, always blank.","note":"outside the tracked image"},{"a":20567,"t":"note","c":"The panel's characters 10 to 105, up to $534F, among them the clock and magazine digits, the score's three-row digits and the energy, lives and rounds symbols.","note":"outside the tracked image"},{"a":21376,"t":"note","l":"f_5380","c":"64 bytes cleared by $1D2B when a stage loads: sprite frame $4E, the blank frame the player flickers to.","note":"outside the tracked image"},{"a":21440,"t":"note","c":"Sprite frames $4F-$5E, from SP00 (Riggs; Murtaugh's are SP0Z), 64 bytes each: the player and his bullets ($4F-$52 walking one way).","note":"outside the tracked image"},{"a":22464,"t":"note","c":"Sprite frames $5F-$6E, from SP00 (Riggs; Murtaugh's are SP0Z), 64 bytes each: the player and his bullets ($63-$66 walking the other way).","note":"outside the tracked image"},{"a":23488,"t":"note","c":"Sprite frames $6F-$7E, from SP00 (Riggs; Murtaugh's are SP0Z), 64 bytes each: the player and his bullets ($77-$7F the bullets and their muzzle flashes facing right (three sizes by weapon level)).","note":"outside the tracked image"},{"a":24512,"t":"note","c":"Sprite frames $7F-$8E, from SP00 (Riggs; Murtaugh's are SP0Z), 64 bytes each: the player and his bullets ($80-$88 the same facing left; $89-$8C climbing).","note":"outside the tracked image"},{"a":24576,"l":"ending_charset","c":"The ending's character set, the file ME0 (MU0 for Murtaugh), 256 multicolour characters.","t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":24584,"t":"byte","b":[0,0,1,5,5,21,21,21]},{"a":24592,"t":"byte","b":[0,0,64,96,96,96,96,96]},{"a":24600,"t":"byte","b":[85,85,85,85,85,85,85,85]},{"a":24608,"t":"byte","b":[96,96,96,160,128,128,128,128]},{"a":24616,"t":"byte","b":[0,0,0,0,0,3,3,1]},{"a":24624,"t":"byte","b":[0,0,0,0,244,85,65,126]},{"a":24632,"t":"byte","b":[0,0,0,0,0,0,0,144]},{"a":24640,"t":"byte","b":[85,85,85,149,149,149,21,21]},{"a":24648,"t":"byte","b":[128,128,128,128,160,160,160,160]},{"a":24656,"t":"byte","b":[13,13,13,13,1,1,12,60]},{"a":24664,"t":"byte","b":[92,87,85,85,85,85,85,85]},{"a":24672,"t":"byte","b":[84,20,16,193,113,86,86,85]},{"a":24680,"t":"byte","b":[21,21,21,21,21,21,37,37]},{"a":24688,"t":"byte","b":[160,168,168,104,104,106,90,90]},{"a":24696,"t":"byte","b":[55,213,213,213,213,21,197,241]},{"a":24704,"t":"byte","b":[21,197,113,84,85,85,85,85]},{"a":24712,"t":"byte","b":[85,85,86,84,24,64,64,64]},{"a":24720,"t":"byte","b":[5,5,9,9,9,9,9,37]},{"a":24728,"t":"byte","b":[86,86,86,86,85,85,85,85]},{"a":24736,"t":"byte","b":[0,128,128,128,128,128,128,128]},{"a":24744,"t":"byte","b":[3,3,3,3,3,0,3,3]},{"a":24752,"t":"byte","b":[220,87,85,85,85,85,21,197]},{"a":24760,"t":"byte","b":[85,21,234,96,84,84,84,88]},{"a":24768,"t":"byte","b":[128,0,0,0,0,0,0,0]},{"a":24776,"t":"byte","b":[37,37,37,37,5,9,9,130]},{"a":24784,"t":"byte","b":[85,85,85,86,86,86,90,88]},{"a":24792,"t":"byte","b":[128,128,128,128,0,0,0,0]},{"a":24800,"t":"byte","b":[3,3,3,0,0,0,0,0]},{"a":24808,"t":"byte","b":[112,85,85,85,38,64,20,17]},{"a":24816,"t":"byte","b":[80,160,128,0,0,1,21,85]},{"a":24824,"t":"byte","b":[1,1,5,85,85,85,85,85]},{"a":24832,"t":"byte","b":[96,88,86,85,86,85,86,89]},{"a":24840,"t":"byte","b":[168,32,160,160,128,128,128,128]},{"a":24848,"t":"byte","b":[5,9,2,0,0,0,0,0]},{"a":24856,"t":"byte","b":[85,85,85,165,10,0,0,0]},{"a":24864,"t":"byte","b":[85,85,85,89,166,42,2,0]},{"a":24872,"t":"byte","b":[86,90,102,154,168,168,160,0]},{"a":24880,"t":"byte","b":[128,0,0,0,0,0,0,0]},{"a":24888,"t":"byte","b":[10,2,0,0,0,0,128,128]},{"a":24896,"t":"byte","b":[0,84,84,84,84,84,84,84]},{"a":24904,"t":"byte","b":[0,85,85,85,85,84,84,84]},{"a":24912,"t":"byte","b":[0,85,85,85,85,0,0,0]},{"a":24920,"t":"byte","b":[0,21,21,21,21,21,21,21]},{"a":24928,"t":"byte","b":[0,5,5,5,5,5,5,5]},{"a":24936,"t":"byte","b":[84,84,84,84,84,84,85,85]},{"a":24944,"t":"byte","b":[0,0,16,16,84,84,85,85]},{"a":24952,"t":"byte","b":[84,84,84,84,84,84,84,84]},{"a":24960,"t":"byte","b":[84,85,85,85,85,84,84,84]},{"a":24968,"t":"byte","b":[0,80,80,80,80,0,0,0]},{"a":24976,"t":"byte","b":[21,21,21,21,21,21,21,21]},{"a":24984,"t":"byte","b":[5,5,5,5,5,5,5,5]},{"a":24992,"t":"byte","b":[85,85,85,85,84,84,0,0]},{"a":25000,"t":"byte","b":[69,69,1,1,0,0,0,0]},{"a":25008,"t":"byte","b":[84,84,84,84,84,84,0,0]},{"a":25016,"t":"byte","b":[84,84,85,85,85,85,0,0]},{"a":25024,"t":"byte","b":[0,0,85,85,85,85,0,0]},{"a":25032,"t":"byte","b":[21,21,21,21,21,21,0,0]},{"a":25040,"t":"byte","b":[5,5,69,69,69,69,0,0]},{"a":25048,"t":"byte","b":[0,64,64,64,64,64,64,64]},{"a":25056,"t":"byte","b":[0,85,85,85,85,84,84,84]},{"a":25064,"t":"byte","b":[0,80,84,84,85,21,21,21]},{"a":25072,"t":"byte","b":[0,1,5,5,21,21,21,21]},{"a":25080,"t":"byte","b":[0,84,85,85,85,5,5,5]},{"a":25088,"t":"byte","b":[0,5,5,5,69,69,69,69]},{"a":25096,"t":"byte","b":[64,64,64,64,64,64,64,64]},{"a":25104,"t":"byte","b":[69,69,69,69,69,69,69,69]},{"a":25112,"t":"byte","b":[170,170,170,170,170,170,170,170]},{"a":25120,"t":"byte","b":[64,64,85,85,85,85,0,0]},{"a":25128,"t":"byte","b":[0,0,80,80,80,80,0,0]},{"a":25136,"t":"byte","b":[21,21,85,84,84,80,0,0]},{"a":25144,"t":"byte","b":[21,21,21,5,5,1,0,0]},{"a":25152,"t":"byte","b":[5,5,85,85,85,84,0,0]},{"a":25160,"t":"byte","b":[69,69,69,5,5,5,0,0]},{"a":25168,"t":"byte","b":[0,64,64,80,80,84,84,85]},{"a":25176,"t":"byte","b":[85,69,69,65,65,64,64,64]},{"a":25184,"t":"byte","b":[64,64,64,64,64,64,0,0]},{"a":25192,"t":"byte","b":[84,84,84,84,84,84,0,0]},{"a":25200,"t":"byte","b":[0,21,21,21,21,21,0,0]},{"a":25208,"t":"byte","b":[0,0,255,255,15,15,15,15]},{"a":25216,"t":"byte","b":[0,0,243,243,3,3,3,3]},{"a":25224,"t":"byte","b":[0,0,195,195,195,195,195,255]},{"a":25232,"t":"byte","b":[0,0,207,207,207,207,207,207]},{"a":25240,"t":"byte","b":[0,0,252,252,0,0,0,240]},{"a":25248,"t":"byte","b":[0,0,3,3,3,3,3,3]},{"a":25256,"t":"byte","b":[0,0,192,243,255,204,192,192]},{"a":25264,"t":"byte","b":[0,0,243,243,243,243,243,243]},{"a":25272,"t":"byte","b":[0,0,255,255,195,195,195,255]},{"a":25280,"t":"byte","b":[0,0,195,207,207,207,207,207]},{"a":25288,"t":"byte","b":[0,0,255,255,0,0,0,0]},{"a":25296,"t":"byte","b":[0,0,60,60,60,60,60,60]},{"a":25304,"t":"byte","b":[0,0,63,255,240,240,240,240]},{"a":25312,"t":"byte","b":[0,0,240,240,0,0,0,0]},{"a":25320,"t":"byte","b":[0,0,0,3,3,3,3,3]},{"a":25328,"t":"byte","b":[0,0,255,255,192,192,192,192]},{"a":25336,"t":"byte","b":[0,0,195,207,15,15,15,15]},{"a":25344,"t":"byte","b":[0,0,252,255,15,15,15,15]},{"a":25352,"t":"byte","b":[0,0,60,63,63,63,60,60]},{"a":25360,"t":"byte","b":[0,0,60,60,252,252,252,60]},{"a":25368,"t":"byte","b":[0,0,15,207,255,255,63,15]},{"a":25376,"t":"byte","b":[0,0,60,60,60,60,60,60]},{"a":25384,"t":"byte","b":[0,0,255,255,240,240,240,255]},{"a":25392,"t":"byte","b":[0,0,195,207,15,15,15,3]},{"a":25400,"t":"byte","b":[0,0,252,255,15,15,192,240]},{"a":25408,"t":"byte","b":[15,15,15,15,15,15,0,0]},{"a":25416,"t":"byte","b":[3,3,3,3,3,3,0,0]},{"a":25424,"t":"byte","b":[10,10,10,2,0,0,0,0]},{"a":25432,"t":"byte","b":[153,166,153,166,41,2,0,0]},{"a":25440,"t":"byte","b":[149,89,153,85,153,105,153,41]},{"a":25448,"t":"byte","b":[87,85,87,149,151,154,170,106]},{"a":25456,"t":"byte","b":[127,255,127,255,127,255,0,0]},{"a":25464,"t":"byte","b":[255,255,255,255,255,255,15,0]},{"a":25472,"t":"byte","b":[253,253,253,245,245,245,245,245]},{"a":25480,"t":"byte","b":[0,0,2,2,0,2,2,0]},{"a":25488,"t":"byte","b":[0,160,128,0,195,192,112,165]},{"a":25496,"t":"byte","b":[9,10,1,1,1,5,133,165]},{"a":25504,"t":"byte","b":[106,90,214,118,117,117,245,221]},{"a":25512,"t":"byte","b":[0,130,168,132,172,156,167,170]},{"a":25520,"t":"byte","b":[0,168,10,50,129,161,5,90]},{"a":25528,"t":"byte","b":[61,13,141,163,149,101,153,85]},{"a":25536,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":25544,"t":"byte","b":[38,153,102,154,102,154,102,152]},{"a":25552,"t":"byte","b":[151,23,23,23,23,159,95,95]},{"a":25560,"t":"byte","b":[247,223,247,223,127,223,119,223]},{"a":25568,"t":"byte","b":[106,106,106,90,218,214,245,245]},{"a":25576,"t":"byte","b":[170,169,87,255,125,23,29,119]},{"a":25584,"t":"byte","b":[117,245,253,247,253,127,253,247]},{"a":25592,"t":"byte","b":[2,2,2,2,2,2,0,0]},{"a":25600,"c":"The ending's characters 128-255.","t":"byte","b":[102,154,106,153,161,161,161,161]},{"a":25608,"t":"byte","b":[95,93,95,125,126,118,125,93]},{"a":25616,"t":"byte","b":[119,221,119,165,2,168,88,212]},{"a":25624,"t":"byte","b":[253,247,125,255,127,159,111,103]},{"a":25632,"t":"byte","b":[95,127,93,87,221,87,213,245]},{"a":25640,"t":"byte","b":[253,247,221,118,213,118,85,86]},{"a":25648,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":25656,"t":"byte","b":[161,160,160,160,128,128,128,0]},{"a":25664,"t":"byte","b":[85,82,9,9,41,25,26,54]},{"a":25672,"t":"byte","b":[84,18,169,85,87,221,127,127]},{"a":25680,"t":"byte","b":[103,89,89,89,86,214,118,214]},{"a":25688,"t":"byte","b":[213,245,253,117,125,117,157,117]},{"a":25696,"t":"byte","b":[85,86,85,85,85,85,85,85]},{"a":25704,"t":"byte","b":[0,0,0,0,0,0,2,2]},{"a":25712,"t":"byte","b":[182,182,182,169,170,170,165,149]},{"a":25720,"t":"byte","b":[127,127,255,87,169,170,90,85]},{"a":25728,"t":"byte","b":[246,222,245,93,101,105,153,105]},{"a":25736,"t":"byte","b":[85,117,85,149,149,149,149,85]},{"a":25744,"t":"byte","b":[85,85,85,85,85,85,85,85]},{"a":25752,"t":"byte","b":[207,207,207,207,207,195,0,0]},{"a":25760,"t":"byte","b":[165,42,41,6,9,6,41,166]},{"a":25768,"t":"byte","b":[86,170,149,95,159,87,85,87]},{"a":25776,"t":"byte","b":[169,107,103,87,255,223,255,127]},{"a":25784,"t":"byte","b":[93,95,87,87,213,85,213,85]},{"a":25792,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":25800,"t":"byte","b":[153,165,153,165,169,165,41,10]},{"a":25808,"t":"byte","b":[253,127,253,119,221,85,85,85]},{"a":25816,"t":"byte","b":[213,85,85,85,85,85,86,106]},{"a":25824,"t":"byte","b":[85,85,86,90,104,160,128,0]},{"a":25832,"t":"byte","b":[86,86,86,86,86,85,85,85]},{"a":25840,"t":"byte","b":[0,32,42,10,2,0,0,0]},{"a":25848,"t":"byte","b":[0,0,0,160,170,170,0,0]},{"a":25856,"t":"byte","b":[0,0,0,2,40,160,0,0]},{"a":25864,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":25872,"t":"byte","b":[128,160,170,42,0,0,0,0]},{"a":25880,"t":"byte","b":[0,8,160,1,5,6,22,25]},{"a":25888,"t":"byte","b":[0,0,84,85,169,105,90,214]},{"a":25896,"t":"byte","b":[0,0,0,0,0,0,64,64]},{"a":25904,"t":"byte","b":[89,86,90,86,90,106,154,106]},{"a":25912,"t":"byte","b":[0,0,128,129,129,133,137,169]},{"a":25920,"t":"byte","b":[89,89,103,101,103,89,90,90]},{"a":25928,"t":"byte","b":[214,246,246,118,86,214,118,182]},{"a":25936,"t":"byte","b":[64,64,64,64,64,64,64,64]},{"a":25944,"t":"byte","b":[170,170,170,170,170,169,169,169]},{"a":25952,"t":"byte","b":[86,102,102,102,102,150,154,106]},{"a":25960,"t":"byte","b":[153,153,153,148,148,148,80,80]},{"a":25968,"t":"byte","b":[0,0,0,0,0,0,8,10]},{"a":25976,"t":"byte","b":[0,0,0,0,240,240,0,0]},{"a":25984,"t":"byte","b":[170,106,170,106,154,106,90,102]},{"a":25992,"t":"byte","b":[169,169,169,169,169,170,170,170]},{"a":26000,"t":"byte","b":[217,247,247,253,253,117,84,146]},{"a":26008,"t":"byte","b":[80,64,64,64,0,0,0,0]},{"a":26016,"t":"byte","b":[2,2,2,0,0,160,32,32]},{"a":26024,"t":"byte","b":[0,0,128,0,0,0,0,0]},{"a":26032,"t":"byte","b":[3,3,3,3,3,0,0,0]},{"a":26040,"t":"byte","b":[90,86,89,86,89,86,90,86]},{"a":26048,"t":"byte","b":[170,168,168,168,168,160,160,160]},{"a":26056,"t":"byte","b":[128,128,0,0,0,0,0,0]},{"a":26064,"t":"byte","b":[0,0,0,8,8,8,8,10]},{"a":26072,"t":"byte","b":[40,10,2,0,0,0,0,0]},{"a":26080,"t":"byte","b":[255,195,195,195,195,195,0,0]},{"a":26088,"t":"byte","b":[207,207,207,207,207,207,0,0]},{"a":26096,"t":"byte","b":[240,0,0,0,252,252,0,0]},{"a":26104,"t":"byte","b":[192,192,192,192,192,192,0,0]},{"a":26112,"t":"byte","b":[243,243,243,243,243,243,0,0]},{"a":26120,"t":"byte","b":[0,15,15,15,255,255,0,0]},{"a":26128,"t":"byte","b":[60,60,60,60,60,60,0,0]},{"a":26136,"t":"byte","b":[240,240,240,240,255,63,0,0]},{"a":26144,"t":"byte","b":[90,102,90,102,90,106,154,106]},{"a":26152,"t":"byte","b":[160,160,160,128,128,128,0,0]},{"a":26160,"t":"byte","b":[2,2,0,0,0,0,128,130]},{"a":26168,"t":"byte","b":[0,128,128,130,10,0,0,0]},{"a":26176,"t":"byte","b":[0,128,128,128,128,0,0,0]},{"a":26184,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":26192,"t":"byte","b":[160,160,128,0,0,0,0,0]},{"a":26200,"t":"byte","b":[130,130,0,0,0,0,32,32]},{"a":26208,"t":"byte","b":[0,128,130,0,0,0,0,0]},{"a":26216,"t":"byte","b":[8,40,160,0,0,0,0,0]},{"a":26224,"t":"byte","b":[252,63,15,15,255,252,0,0]},{"a":26232,"t":"byte","b":[0,0,2,2,2,2,2,2]},{"a":26240,"t":"byte","b":[169,166,169,166,169,166,169,166]},{"a":26248,"t":"byte","b":[149,101,149,101,149,85,149,85]},{"a":26256,"t":"byte","b":[255,255,255,255,255,255,255,255]},{"a":26264,"t":"byte","b":[119,223,119,223,119,223,127,223]},{"a":26272,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":26280,"t":"byte","b":[10,2,10,42,42,170,169,170]},{"a":26288,"t":"byte","b":[0,10,170,166,153,101,153,101]},{"a":26296,"t":"byte","b":[10,170,165,101,85,85,87,85]},{"a":26304,"t":"byte","b":[170,150,85,93,127,223,119,223]},{"a":26312,"t":"byte","b":[170,170,170,106,218,85,221,247]},{"a":26320,"t":"byte","b":[169,165,165,149,119,221,127,255]},{"a":26328,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":26336,"t":"byte","b":[128,0,32,32,0,8,8,2]},{"a":26344,"t":"byte","b":[128,128,130,162,32,32,40,10]},{"a":26352,"t":"byte","b":[2,2,2,2,0,0,0,42]},{"a":26360,"t":"byte","b":[0,0,128,128,128,128,130,170]},{"a":26368,"t":"byte","b":[0,0,0,0,0,10,170,170]},{"a":26376,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":26384,"t":"byte","b":[2,2,2,130,2,2,130,130]},{"a":26392,"t":"byte","b":[0,0,8,0,0,8,136,136]},{"a":26400,"t":"byte","b":[8,8,8,8,40,32,32,32]},{"a":26408,"t":"byte","b":[255,240,240,240,255,255,0,0]},{"a":26416,"t":"byte","b":[0,0,0,0,2,2,0,2]},{"a":26424,"t":"byte","b":[32,128,128,128,128,0,0,0]},{"a":26432,"t":"byte","b":[0,32,32,32,32,32,32,0]},{"a":26440,"t":"byte","b":[0,0,0,0,0,0,0,32]},{"a":26448,"t":"byte","b":[0,0,15,15,207,195,0,0]},{"a":26456,"t":"byte","b":[0,0,0,0,2,0,8,8]},{"a":26464,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":26472,"t":"byte","b":[118,214,86,213,85,213,85,85]},{"a":26480,"t":"byte","b":[170,170,130,160,168,138,128,128]},{"a":26488,"t":"byte","b":[40,160,128,0,0,130,170,0]},{"a":26496,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":26504,"t":"byte","b":[88,88,88,218,86,214,118,214]},{"a":26512,"t":"byte","b":[40,0,0,0,0,0,128,128]},{"a":26520,"t":"byte","b":[0,0,0,0,0,0,0,0]},{"a":26528,"t":"byte","b":[0,0,0,0,0,128,160,104]},{"a":26536,"t":"byte","b":[2,10,8,168,0,0,0,10]},{"a":26544,"t":"byte","b":[138,8,8,0,32,160,128,128]},{"a":26552,"t":"byte","b":[15,15,15,15,207,195,0,0]},{"a":26560,"t":"byte","b":[15,15,15,15,255,252,0,0]},{"a":26568,"t":"byte","b":[60,60,60,60,63,15,0,0]},{"a":26576,"t":"byte","b":[60,60,60,60,252,252,0,0]},{"a":26584,"t":"byte","b":[2,0,0,0,0,0,0,0]},{"a":26592,"t":"byte","b":[165,170,10,0,0,0,0,0]},{"a":26600,"t":"byte","b":[86,170,160,128,0,0,0,0]},{"a":26608,"t":"byte","b":[160,128,0,0,0,0,0,0]},{"a":26616,"t":"byte","b":[192,192,192,192,255,255,0,0]},{"a":26624,"t":"gap","n":38912},{"a":26688,"t":"note","c":"Sprite frames $A1-$A3, the end of SP00, the player's file.","note":"outside the tracked image"},{"a":26880,"t":"note","c":"Sprite frame $A4, from SP91, loaded over the last frame of SP00: the boss's shot, which $EAD4 fires with this frame (behaviour $1C).","note":"outside the tracked image"},{"a":26944,"t":"note","c":"Sprite frames $A5-$B3, from SP12: the gunmen of behaviours $2C and $2E (frames $A5-$AD) and their shots ($AB, $AF).","note":"outside the tracked image"},{"a":27456,"t":"note","l":"f_6B40","c":"Sprite frame $AD, cleared by $1D3A on stage $1C (the last) along with frames $AF, $B1 and $B3 ($6BC0, $6C40, $6CC0), so those enemies' frames are invisible there.","note":"outside the tracked image"},{"a":27520,"t":"note","c":"Sprite frame $AE, from SP12.","note":"outside the tracked image"},{"a":27584,"t":"note","l":"f_6BC0","c":"Sprite frame $AF, cleared on stage $1C by $1D3D.","note":"outside the tracked image"},{"a":27648,"t":"note","c":"Sprite frame $B0, from SP12.","note":"outside the tracked image"},{"a":27712,"t":"note","l":"f_6C40","c":"Sprite frame $B1, cleared on stage $1C by $1D40.","note":"outside the tracked image"},{"a":27776,"t":"note","c":"Sprite frames $B2 and $B3, the last of SP12.","note":"outside the tracked image"},{"a":27840,"t":"note","l":"f_6CC0","c":"Sprite frame $B3, cleared on stage $1C by $1D43.","note":"outside the tracked image"},{"a":27968,"t":"note","c":"Sprite frames $B5-$C4, from SP01: enemies ($B5-$C7 the patrolling gunman's walking, standing and shooting frames, $C1-$CF the shots and dying frames).","note":"outside the tracked image"},{"a":28992,"t":"note","c":"Sprite frames $C5-$D0, from SP01: enemies ($B5-$C7 the patrolling gunman's walking, standing and shooting frames, $C1-$CF the shots and dying frames).","note":"outside the tracked image"},{"a":29760,"t":"note","c":"Sprite frames $D1-$E0, from SP20: the gunman who faces the player ($D1-$DB) and his shots ($D6, $DE).","note":"outside the tracked image"},{"a":30784,"t":"note","c":"Sprite frames $E1-$EE, from SP21: the hiding enemy ($E1, $E7) and the dying frames ($EE).","note":"outside the tracked image"},{"a":31680,"t":"note","c":"Sprite frames $EF-$F8, from SP90, the boss's frames ($EF-$F8), loaded last, over the start of the level map.","note":"outside the tracked image"},{"a":63257,"t":"note","l":"decode","c":"Decodes one value with the code table at ($6F): reads bits until a code in the table matches, then reads the extra bits that value says and returns it in $6B/$6C.","note":"outside the tracked image"},{"a":63342,"t":"note","l":"f_F76E","c":"The bit values 1, 2, 4 ... $80, used by $F719.","note":"outside the tracked image"},{"a":63350,"t":"note","l":"s_F776","c":"Moves A into X and reads that many bits ($F777).","note":"outside the tracked image"},{"a":63351,"t":"note","l":"read_bits","c":"Takes X bits from the bit buffer $71-$74 into $6B/$6C, refilling it two bytes at a time from the input at ($64).","note":"outside the tracked image"},{"a":63415,"t":"note","l":"f_F7B7","c":"Masks for 0-16 bits, low bytes: 0, 1, 3, 7 ... $FF.","note":"outside the tracked image"},{"a":63432,"t":"note","l":"f_F7C8","c":"Masks for 0-16 bits, high bytes.","note":"outside the tracked image"},{"a":63449,"t":"note","l":"build_table","c":"Reads a Huffman table from the packed stream: a 5-bit count of code lengths, 4 bits each into $4180, then builds the codes in order of length into the table at ($6F), with each code's value $3C bytes further on.","note":"outside the tracked image"},{"a":63622,"t":"note","c":"Keeps X while $EA16 and $EAD4 call the sound.","note":"outside the tracked image"},{"a":63623,"t":"note","c":"Keeps Y while they call it.","note":"outside the tracked image"},{"a":63624,"t":"note","c":"Keeps A while they call it.","note":"outside the tracked image"},{"a":63625,"t":"note","l":"sound_init","c":"Jumps to $FA24, which silences all three voices, clears the SID and sets the volume to 15.","note":"outside the tracked image"},{"a":63628,"t":"note","l":"play_sound","c":"Jumps to $F95A: starts sound effect X on voice Y.","note":"outside the tracked image"},{"a":63631,"t":"note","l":"sound_update","c":"The sound effects' update, once a frame from the panel interrupt ($132B): for each voice that is playing, slides its frequency by the effect's step ($FA65/$FA68) and, when its time runs out, reads the effect's next command ($F8CA).","note":"outside the tracked image"},{"a":63690,"t":"note","l":"sound_next","c":"Reads a voice's next commands from its effect: $FF ends it (or starts it again when it loops), $FC stops the slide, $FD sets a new slide, $FE sets the pulse width; anything else is a waveform byte followed by the frequency (high, low), and the next step's length.","note":"outside the tracked image"},{"a":63834,"t":"note","l":"start_sound","c":"Starts effect X on voice Y: from the effect's address ($FA71/$FA83) takes its length (and the loop flag in bit 7), the slide, attack/decay, sustain/release, pulse width, the filter (when its low four bits are not 0 or 2: the mode and volume and the cutoff, and routes the voice through it) and the first waveform and frequency.","note":"outside the tracked image"},{"a":64036,"t":"note","l":"j_FA24","c":"Silences the sound: clears each voice's state and the 25 SID registers, filter routing off, volume 15.","note":"outside the tracked image"},{"a":64068,"t":"note","l":"f_FA44","c":"The register offset of each voice: 0, 7, 14.","note":"outside the tracked image"},{"a":64071,"t":"note","l":"f_FA47","c":"Each voice's bit in the filter routing: 1, 2, 4.","note":"outside the tracked image"},{"a":64074,"t":"note","l":"f_FA4A","c":"The same bits inverted, to take a voice out of the filter.","note":"outside the tracked image"},{"a":64077,"t":"note","l":"f_FA4D","c":"The effect each voice is playing.","note":"outside the tracked image"},{"a":64080,"t":"note","l":"f_FA50","c":"Each voice's place in its effect (0 when silent).","note":"outside the tracked image"},{"a":64083,"t":"note","l":"f_FA53","c":"Each voice's time left on its present step.","note":"outside the tracked image"},{"a":64086,"t":"note","l":"f_FA56","c":"Each voice's place to go back to when its effect loops.","note":"outside the tracked image"},{"a":64089,"t":"note","l":"f_FA59","c":"Each voice's loop flag.","note":"outside the tracked image"},{"a":64095,"t":"note","l":"f_FA5F","c":"Each voice's frequency, low byte.","note":"outside the tracked image"},{"a":64098,"t":"note","l":"f_FA62","c":"Each voice's frequency, high byte.","note":"outside the tracked image"},{"a":64101,"t":"note","l":"f_FA65","c":"Each voice's frequency slide, low byte.","note":"outside the tracked image"},{"a":64104,"t":"note","l":"f_FA68","c":"Each voice's frequency slide, high byte.","note":"outside the tracked image"},{"a":64107,"t":"note","l":"a_FA6B","c":"The voice's register offset while an effect is started or read.","note":"outside the tracked image"},{"a":64108,"t":"note","l":"a_FA6C","c":"The voice's filter bit while an effect is started.","note":"outside the tracked image"},{"a":64109,"t":"note","l":"a_FA6D","c":"The voice number while an effect is started.","note":"outside the tracked image"},{"a":64110,"t":"note","l":"a_FA6E","c":"Where the loop of the effect being started begins.","note":"outside the tracked image"},{"a":64111,"t":"note","l":"a_FA6F","c":"The voice's inverted filter bit while an effect is started.","note":"outside the tracked image"},{"a":64112,"t":"note","l":"a_FA70","c":"The filter routing and resonance byte written to $D417.","note":"outside the tracked image"},{"a":64113,"t":"note","l":"sound_table_lo","c":"The low bytes of the 18 sound effects' addresses ($FA95 to $FC80).","note":"outside the tracked image"},{"a":64131,"t":"note","l":"sound_table_hi","c":"The high bytes of the 18 effects' addresses.","note":"outside the tracked image"},{"a":64149,"t":"note","l":"sound_effects","c":"The 18 sound effects, numbered 0-$11 by their place in $FA71/$FA83: each a header (length and loop flag, slide, attack/decay, sustain/release, pulse, filter, waveform and frequency) and then commands for $F8CA. The calls to $F88C say which event plays which.","note":"outside the tracked image"},{"a":64661,"t":"note","l":"char_properties","c":"The stage's character properties, one byte for each of the 256 characters, copied from COL0 by $1B28: bit 7 solid floor, bit 6 ladder, bit 5 wall, bit 1 door, and bit 0 a character that holds the player (it sets $2411).","note":"outside the tracked image"},{"a":64917,"t":"note","c":"The byte between the property table and the colours: not loaded by either, not read.","note":"outside the tracked image"},{"a":64918,"t":"note","l":"stage_colours","c":"The stage's .ATT file: three bytes, then the border and three background colours ($FD99-$FD9C, set by $136F every frame), then the colour of each of the 256 characters ($FD9D) for colour RAM, multicolour bit included.","note":"outside the tracked image"},{"a":64921,"t":"note","l":"a_FD99","c":"The border colour, from the .ATT file.","note":"outside the tracked image"},{"a":64922,"t":"note","l":"a_FD9A","c":"Background colour 0.","note":"outside the tracked image"},{"a":64923,"t":"note","l":"a_FD9B","c":"Background colour 1 (multicolour).","note":"outside the tracked image"},{"a":64924,"t":"note","l":"a_FD9C","c":"Background colour 2 (multicolour).","note":"outside the tracked image"},{"a":64925,"t":"note","l":"char_colours","c":"The colour-RAM value of each of the stage's 256 characters, from the .ATT file: the low four bits the colour, bit 3 the multicolour switch.","note":"outside the tracked image"},{"a":65181,"t":"note","l":"respawn_list","c":"Three bytes for each enemy record, built by $1B28 from the records' bytes $11, 6 and 4 (hit points, type and frame) and copied back into the records when a life starts ($19FA), so every enemy comes back whole. The list ends at the address in $1DA5/$1DA6.","note":"outside the tracked image"},{"a":65423,"t":"note","l":"f_FF8F","c":"Named only as the base of the reads $FF8F,X at $1050, $1061, $1F6A and $1F7B, which with X from $F0 wrap past $FFFF to the sort list at $7F-$8E. The bytes here are RAM the game never writes, the emulator's power-on pattern.","note":"outside the tracked image"},{"a":65521,"t":"note","l":"character","c":"The character chosen at the title: 1 Riggs, 0 Murtaugh. Picks the player's sprites, colour, jump and push.","note":"outside the tracked image"}]}