Styker's Run (Enhanced version) disassembly =========================================== Stryker's Run was written by Chris Roberts and Philip Meller, with graphics by Nick Elms and music by Martin Galway. It was published by Superior Software for the BBC Micro in 1986. It is a side-scrolling shooter, in which the player must transport plans across a battlefield. The game is notable for its graphics. The following disassembly was created by reverse engineering binary images, without access to any source code. It is nevertheless reasonably complete, allowing the technical approaches used to be understood. The author of this disassembly imposes no additional copyright restrictions beyond those already present on the game itself. It is provided for educational purposes only, and it is hoped that the original authors will accept it in the good faith it was intended - as a tribute to their skills. Technical notes =============== The main binary is protected by a VIA-based decryption routine written by Kevin Edwards. The disassembly analyses each stage after decryption has taken place. The enhanced version uses sideways RAM banks 4, 5, 6 and 7. Compared to the standard version, it contains forty-three extra scenery sprites (one unused), nineteen extra mover sprites (two unused), and eight extra mover types, including five extra aerial vehicles and a tank. There is also a high score table and two tunes. Pressing the C, H, R, I and S keys simultaneously on the title screen enables an observer mode in which the world can be scrolled. Ignoring address changes, differences in the code are marked by ***. Interesting pokes ================= &2920 = &a9 infinite lives &26d5 = &a9 infinite fuel &263c = &00 player moves twice as quickly Notes ===== Mover types: &00 : MOVER_TYPE_PLAYER &01 : MOVER_TYPE_SOLDIER_WITH_RIFLE &02 : MOVER_TYPE_OFFICER_WITH_PISTOL &03 : MOVER_TYPE_TROOPER_WITH_RIFLE &04 : MOVER_TYPE_TROOPER_WITH_BAZOOKA &05 : MOVER_TYPE_HELICOPTER_WITH_MISSILE &06 : MOVER_TYPE_HELICOPTER &07 : MOVER_TYPE_HELICOPTER_WITH_SOLDIER &08 : MOVER_TYPE_RED_HELICOPTER &09 : MOVER_TYPE_MORTAR &0a : MOVER_TYPE_MACHINE_GUN &0b : MOVER_TYPE_BLUE_CRAFT &0c : MOVER_TYPE_SAM &0d : MOVER_TYPE_SKELETON &0e : MOVER_TYPE_EXPLOSION &0f : MOVER_TYPE_BULLET &10 : MOVER_TYPE_GRENADE &11 : MOVER_TYPE_BOMB &12 : MOVER_TYPE_ROCKET &13 : MOVER_TYPE_MINE &14 : MOVER_TYPE_TANK &15 : MOVER_TYPE_HEAVY_GUN &16 : MOVER_TYPE_GREEN_WHITE_HELICOPTER &17 : MOVER_TYPE_GREEN_WHITE_CRAFT_ONE &18 : MOVER_TYPE_GREEN_WHITE_CRAFT_TWO &19 : MOVER_TYPE_FLYING_SCOOTER &1a : MOVER_TYPE_GREEN_WHITE_HELICOPTER_WITH_MISSILE &1b : MOVER_TYPE_SHELL Mover slots: &00 : player &01 - &09 : enemies &0a - &0b : enemy helicopters &0c : player grenade &0d - &10 : enemy grenades &11 : player bullet &12 - &14 : enemy bullets &15 - &17 : ally bullets &18 - &21 : ally helicopters Loader disassembly ================== ; Stryker ; FFFF0E00 FFFF8023 0018 &0e00 0d # Start of BASIC program &0e01 00 0a 0a d0 3d 26 45 30 30 0d ; 10PAGE=&E00 &0e0b 00 14 06 2a 2f 0d ; 20*/ &0e11 00 1e 06 2a 2f 0d ; 30*/ &0e17 ff # End of BASIC program ; StrykerSCR ; FFFF1100 FFFF1E71 0DD8 ; unused &1100 00 ; packed_data_zero # Image &1101 04 16 bc 04 16 fc b9 b6 b9 b6 b9 bc b6 b9 b6 b9 &1111 b6 bc b9 b6 b9 b6 b9 bc 3d 03 96 bc 0a 00 bc bf &1121 bc 80 94 7d 54 fd 94 00 29 d6 83 a9 43 56 bc b9 &1131 bc b9 b6 b9 b6 b9 bc b6 b9 b6 b9 b6 bc b9 b6 b9 &1141 b6 b9 bc 30 03 96 0b 03 96 a8 0b 00 a8 be a8 80 &1151 bc 7f bc 05 3f bc 00 2f 7c a9 83 96 bc b9 b6 b9 &1161 b6 b3 bc b9 bc b9 bc b9 bc b6 b9 b6 b9 b6 bc 06 &1171 29 30 03 a9 96 09 03 bc 11 00 bc ff bc 7f be bd &1181 bf bd 94 00 2d 56 bc 79 7c 04 36 bc b9 b3 b9 b3 &1191 b9 bc b6 bc b6 bc b6 bc d6 35 03 a9 96 05 03 bc &11a1 a8 0e 00 94 bd bc 80 a8 be ff bc 05 3f bc 00 2b &11b1 b6 b9 b6 b9 b3 bc b6 b9 b6 b9 b6 bc 05 33 bc 05 &11c1 33 05 3c 96 15 03 06 16 14 03 bc 04 03 bc 05 03 &11d1 a9 bc 0e 00 bc 7f bc 80 bc ff bc 7f bd be a8 00 &11e1 31 05 36 bc 05 33 bc 05 36 bc 05 33 07 3c 05 16 &11f1 c3 0a 16 ac bc 06 30 78 96 10 03 bc a9 05 03 a9 &1201 96 83 56 bc a8 0e 00 bc 7f bc 80 bc 7e bd 7f be &1211 bf be 7d 94 00 35 05 33 bc 05 33 bc 05 33 bc 05 &1221 33 0a 3c 4c ac bc ad cf bc 8c 8d 4f 4c 9c 8c ac &1231 b4 07 30 bc 0f 03 a9 96 07 03 bc a8 07 00 94 04 &1241 38 54 04 00 bc bf bc 80 bc ff be bd bf bc ff bc &1251 00 3c 05 33 bc 05 36 bc 05 33 bc 05 36 06 3c 6d &1261 8d 9c cc ac 4c 9c 8f ac 06 0c 9c ac 9c 8c bc b4 &1271 04 30 b4 bc 0e 03 56 a9 05 03 96 bc a8 04 00 54 &1281 ed b4 f0 b4 ed bc 94 bc a8 40 a8 be bf be bd be &1291 bf bc 7f be a8 00 45 05 33 bc 05 33 bc b6 b9 b6 &12a1 b9 b6 bc b6 04 33 bc 96 bc 9e bc 9e ad 9e ad 9e &12b1 ad 9c ad 9c ac 9c bc ac 9c ac 9c ad 9e ad 9e 9c &12c1 bc ac 4c 8f 04 2d 8f bc 0c 03 96 a9 07 03 96 bc &12d1 c0 94 ad ac 4c 8e 8f 9e 8e 7c ac 9e 4f 04 0c ac &12e1 bc 54 80 bc bf be bd bf bc be a8 00 56 b9 b6 b9 &12f1 b6 b9 bc b9 b6 b9 76 bc b6 b9 b6 bc b6 bc b6 b9 &1301 b6 b3 b6 bc 83 08 29 bc 9e bc 9e bc e9 9c bc 9e &1311 bc 9e ad 9e bc 9c ac 8c 4e 4f 9e 04 38 96 11 03 &1321 56 bc 80 54 ad 4f 8d 9c ac 9c ac 9c ac 9c bc ac &1331 9c ac 9e ac 9c 8c 9e 8f 9c 04 38 7c be bf bc 00 &1341 54 05 29 bc b9 b6 b9 b3 bc 83 e9 43 bc b6 b9 b6 &1351 b9 b6 bc 16 03 a9 9e bc 9c bc 04 1c b8 bc 04 30 &1361 bc 10 03 96 bc 94 6d 4f 9e 8f 9e ad 9e ad 9c ac &1371 9c a8 80 68 7c 9c ad 9c ad 9e b8 f0 b4 bc 73 04 &1381 39 94 00 43 05 03 a9 bc 76 bc a9 06 03 bc b6 bc &1391 b6 bc b6 bc 16 03 96 ac bc ad bc ad 6c bc b4 bc &13a1 04 30 bc 0a 03 04 16 6c 8c 5c 0d 38 94 06 00 04 &13b1 28 bc f4 bc b6 f3 b6 b3 b6 b9 94 00 39 2e 03 bc &13c1 8c 05 0f 8c 9c 6c 05 2d bc 05 16 04 2c 6d 05 0c &13d1 bc 70 a0 04 10 04 30 f4 bc 05 00 06 14 05 3c 94 &13e1 bc 76 bc b3 bc b3 bc 00 2c 2e 03 bc 8c 4f 9e 8c &13f1 9c ac 4c 8d 04 0f bc f0 bc 06 0c 8e 4c 9c 04 3c &1401 b0 80 08 30 bc cc ac 94 80 94 6c 9c 05 3c a9 bd &1411 7c 78 b0 60 78 b6 a8 00 30 09 16 c3 05 16 43 08 &1421 16 c3 06 16 83 56 c3 d6 bc ac 8c 7c 9c 05 0c 9e &1431 4e 8c bc f0 bc 0b 0c 04 2d b4 08 30 bc ac cc 9c &1441 79 bc 8c 08 3c 96 bc 70 04 10 80 a0 b0 bc 00 37 &1451 ec ad 05 0f ec 04 0c ac bc ac 8c 5c 7c 9c 4c ac &1461 bc ac 4e cf fc 8e 6c ad 4f 4e 8c 6c 8c 9c 4c ac &1471 9c 4c ac 9c e8 b4 bc 8c 9c bc 0e 1c bc 05 34 70 &1481 bc 04 1c b9 b3 7c 8c 0a 3c 07 30 90 b0 7c 00 40 &1491 05 3c 5e 4c 9c cc 9c 4c 9c 8d 9e b8 04 30 b4 b8 &14a1 9c 8c bc 8c 9c 8c 9c 8c 9e f8 9c 8c 9c 8e 9e 8c &14b1 9c 8c 9c 8c 9c 8c 9c 8c bc 4c 9c 8c ac 94 c0 bc &14c1 ac bc 8c 6c 8c 9c 8c 9c ac 4c ac 8c 9c 8d 8f 9e &14d1 b8 07 30 bc 4f 4e bc 73 bc 4c 06 3c 96 ab bc b4 &14e1 07 30 fc 00 55 08 3c ad 9c ac 9c ac ad 9e ad 9e &14f1 ad bc b0 b8 b4 b0 74 b8 bc ac 9c bc 0d 38 bc 9c &1501 ac 9c ac 9c ac 9c ad 9c ac 9c ac 9c bc b0 78 bc &1511 8c ac 8c 9c 8c ac 9c 8c 9c 4c ac 8c 9c 04 3c b0 &1521 a0 07 30 b8 9e 04 0c bc 68 9c cc 04 2c 05 3c 74 &1531 70 b4 7c a8 00 51 07 3c 9e bc 9e bc 9c e9 bc 9e &1541 bc 9e bc b8 b4 b8 74 bc 69 bc b4 b8 b4 b8 b4 b8 &1551 b4 b8 b4 b8 b4 b8 b4 b8 b4 bc ac 9c ac 9c ad 9e &1561 ad 9e ad 9c ac bc f0 bc 9c ac 9c ac 9c bc ac 9c &1571 ac 9c ac ad 9e ad 9e ad bc ad bc b0 90 a0 08 30 &1581 78 9c bc a8 c0 07 28 9e bc 9e bc 9e fc 68 00 5a &1591 7c a9 11 03 04 29 05 03 0f 29 83 12 3c 9c 0b 3c &15a1 9e ad 9e ad bc b4 70 04 10 06 30 b4 bc 13 00 94 &15b1 bd 94 bd 94 00 26 2d 03 7c 0e 3d 06 3c fd bc 04 &15c1 00 e8 bc 9e bc ad bc ad 04 2c 6d bc 6d bc 12 00 &15d1 94 bc 7f bd be bd 94 00 23 2e 03 10 29 83 bc 40 &15e1 04 28 08 00 94 ad 9e ad 9e 8f 8d 04 0c 8e 8f ad &15f1 9e a8 12 00 bc bf bc 7f bc bf bc 00 24 3d 03 96 &1601 a8 0d 00 94 bc 8f ac 9e 8e 8c 4f 8c 9c cc 9c a8 &1611 14 00 a8 be 7f be bf be a8 00 1e 3a 03 96 68 0e &1621 00 bc 70 b8 9c cc 9c ac 5c ac 9c a8 18 00 a8 be &1631 68 00 18 a9 96 37 03 96 a8 11 00 a8 74 bc ac 9c &1641 06 0c 6c 54 00 13 43 a9 96 33 03 96 a8 15 00 a8 &1651 9c bc 9c ac 9c 8c 9c 06 0c 7c 94 05 00 d4 00 1a &1661 c3 a9 bc 96 30 03 bc 1a 00 68 9c ac 9c ac 9c ac &1671 5c b8 f0 bc d4 bc a8 54 7c 54 00 1c 06 03 a9 56 &1681 2c 03 96 a8 19 00 94 c0 e8 7c f0 74 79 b3 7c a8 &1691 07 3c 68 54 00 1a 09 03 a9 96 29 03 bc 11 00 bc &16a1 80 94 bc b8 94 04 00 bc 08 00 04 28 f6 a8 94 04 &16b1 3c b9 06 3c 54 68 54 00 23 0b 03 69 56 14 03 69 &16c1 96 0f 03 bc 10 00 bc 94 7c b0 ba bd 94 40 bc 0c &16d1 00 94 05 3c b9 b6 b9 bc b6 b3 bc a8 06 3c 54 68 &16e1 54 00 2a 0e 03 69 96 14 03 a9 96 0b 03 56 a8 11 &16f1 00 bc 80 fc b4 b0 ba bc 80 bc 0b 00 06 3c b6 bc &1701 b6 bc 05 28 5e 6d 06 3c 94 bc 00 29 0f 03 96 a9 &1711 15 03 a9 96 09 03 bc 14 00 bc a8 04 3c 74 04 3c &1721 0c 00 e8 0c 00 68 5e 04 28 7c a8 00 21 0e 03 bc &1731 19 03 bc 06 03 96 a8 15 00 bc 80 a8 06 3c 80 bc &1741 07 00 0d 05 00 19 0b 03 56 a9 1a 03 69 96 c3 bc &1751 1b 00 a8 04 3c 85 bc 45 17 0f c5 00 17 09 03 96 &1761 bc 43 a9 96 1c 03 a9 96 a8 1b 00 85 4f fc 8f ad &1771 4f 9e 06 0f bc 14 0f 45 00 1d 07 03 96 a9 06 03 &1781 a9 96 1c 03 69 94 16 00 85 04 0f 04 3c 8f bc 8f &1791 fc 9e 04 0f bc 18 0f 85 00 20 0f 03 a9 96 1f 03 &17a1 bc 13 00 06 0f 04 2d 4f bc ad 05 3c 9e 4f bc 18 &17b1 0f 9e 4f 00 1b 11 03 bc 1f 03 a9 94 10 00 0d 0f &17c1 bc 9e 07 3c 9e ad 12 0f 5e 04 0f bc cf 00 1a 10 &17d1 03 96 a9 20 03 bc 94 0e 00 0e 0f bc 8f ad 06 3c &17e1 8f bc 09 0f 5e cf bc 4f 9e fc 9e 4f bc 04 0f 00 &17f1 22 0e 03 96 a9 24 03 a9 54 0b 00 0f 0f ad 4f ad &1801 fc 4f bc 08 0f 04 3c 9e 8f bc 4f 06 3c 9e ad 04 &1811 0f 00 22 0c 03 56 a9 26 03 56 a8 0a 00 14 0f 7c &1821 4f bc 08 0f ad 04 3c ad 9e 4f ad 05 3c 8f bc cf &1831 00 1f 09 03 96 69 25 03 d6 a8 0e 00 13 0f 7c 9e &1841 8f ad 0b 0f 7c 8f bc 05 0f fc 8f bc 4f 00 1d 06 &1851 03 56 a9 21 03 d6 bc e8 13 00 8a 10 0f 05 2d 0b &1861 0f 9e 7c 8f bc 06 0f 7c 8f bc 8f 00 1e c3 96 69 &1871 1f 03 d6 68 1c 00 8a 28 0f ed 8f 8a 00 11 43 96 &1881 a9 1c 03 d6 68 24 00 4a 25 0f 4a 00 0f 83 96 a9 &1891 19 03 56 68 2d 00 4a 1c 0f ca 00 0f a9 19 03 96 &18a1 a8 36 00 05 0a 0d 0f ca 00 0e 18 03 96 a8 00 06 &18b1 16 03 96 a8 00 06 14 03 96 a8 00 06 11 03 56 a8 &18c1 00 06 0e 03 96 68 00 06 0a 03 56 68 00 06 08 03 &18d1 96 a8 00 06 06 03 96 a8 00 06 04 03 96 a8 00 06 &18e1 c3 bc 00 04 43 96 a8 00 05 83 96 a8 00 05 96 a8 &18f1 00 84 ; unused &18f2 00 ; packed_data_one # Logos &18f4 94 7d 54 0e 00 54 7d 54 17 00 bc 04 2d bc c0 bc &1904 0d 2d bc 00 15 bc bf bc 7e 7d 54 06 00 54 7d 7e &1914 69 7e 7d 54 13 00 bc 04 0f bc c0 bc cf de bc e8 &1924 bc 4f bc 00 20 bc bf bc 43 69 7e 7d 54 7d 7e 69 &1934 06 03 69 7e 7d 54 0f 00 bc 04 0f 05 2d cf bc 06 &1944 00 bc 4f bc 00 21 bc bf bc 56 04 03 69 7e 69 04 &1954 03 56 7d 56 04 03 a9 bc bf bc 0f 00 bc 0c 1e bc &1964 06 00 bc 5e bc 00 21 bc 04 3f 7d 56 06 03 56 7d &1974 06 3f 7d 56 83 bc bf bc 23 00 04 14 00 17 a8 7e &1984 06 3f 7d 56 7d 06 3f 7e 06 3f 7d bf bc 23 00 bc &1994 4f bc 00 16 c0 68 7e 0a 3f 7e 68 40 e8 7e 04 3f &19a4 bc 0f 00 bc 14 2d 4f bc 00 16 bc 54 04 00 68 7e &19b4 7f 7e 68 0b 00 68 7e bc 0f 00 bc 09 0f 0b 1e 4f &19c4 bc 00 19 bc 43 69 54 04 00 68 13 00 a8 0f 00 0b &19d4 28 09 00 bc 4f bc 00 15 bc 06 03 69 54 80 fc 80 &19e4 94 04 3c 94 80 fc 80 94 04 3c 94 23 00 04 28 00 &19f4 19 bc 83 07 17 83 bc 80 a8 04 3c a8 80 fc 80 a8 &1a04 04 3c a8 80 a8 7c 0f 00 bc 16 2d bc 00 1d bc 83 &1a14 ab 07 03 bc c0 06 14 04 00 09 14 0f 00 bc 09 0f &1a24 de cf 05 1e 4f bc 00 1a bc 83 04 2b 83 ab 43 bc &1a34 80 fc 04 28 fc 80 fc 07 28 0f 00 0a 28 40 bc cf &1a44 bc c0 bc 4f bc 00 1f bc 83 eb bf 97 c3 bc 80 68 &1a54 06 3c 68 80 a8 09 3c 16 00 05 14 bc cf bc c0 bc &1a64 4f bc 00 1d bc c3 ab 57 c3 bc 80 08 14 c0 09 14 &1a74 10 00 bc 06 2d 06 1e cf 05 2d 4f bc 00 1a bc 83 &1a84 04 2b 04 03 bc 80 e8 7c e8 7c 80 e8 fc 68 7c c0 &1a94 94 0b 00 07 28 05 00 0c 28 00 1d bc 83 04 2b 97 &1aa4 ab 43 bc 80 08 14 7c 04 00 68 04 3c a8 c0 bc 04 &1ab4 00 94 11 00 bc 0b 2d bc 00 1f bc 83 04 2b bf 6b &1ac4 83 bc 80 08 28 7c c0 06 14 05 00 bc 04 00 bc 04 &1ad4 00 94 80 0b 14 bc 4f 05 1e bc 04 28 00 24 bc 83 &1ae4 97 ab bf ab 97 c3 bc 80 94 09 3c 80 fc a8 7c a8 &1af4 fc c0 bc 04 00 bc 04 00 bc 80 bc 0d 0f bc 00 22 &1b04 bc 83 ab 83 6b 04 03 bc 80 a8 7c 07 14 80 68 40 &1b14 68 40 68 40 94 bc 04 00 bc 04 00 bc 80 bc 05 1e &1b24 bc 04 28 bc 4f bc 09 14 00 2a bc 83 97 eb 97 c3 &1b34 bc 80 94 7c 07 28 80 09 3c 94 40 7c c0 94 bc 04 &1b44 00 bc 0c 00 bc 0b 1e bc 00 20 bc 83 07 2b 83 bc &1b54 80 a8 09 3c 80 d4 fc 94 fc 40 7c c0 7c c0 94 bc &1b64 80 18 14 00 1b bc 09 03 bc 80 09 14 40 04 28 80 &1b74 04 28 c0 7c c0 7c c0 7c 80 bc 16 0f bc 00 1a bc &1b84 09 03 bc 80 e8 7c 68 fc 80 0a 3c 40 7c c0 7c c0 &1b94 7c 80 bc 0b 1e 4f bc 09 28 00 1c bc 09 03 bc 80 &1ba4 09 3c a8 c0 06 14 04 00 7c 80 94 80 7c c0 7c 06 &1bb4 00 d4 ed cf ad 54 00 1d bc 09 03 bc 80 09 14 40 &1bc4 fc 04 28 fc 40 7c 80 bc 80 7c 80 bc 80 7c 80 54 &1bd4 ed 04 0f de e8 5e 6d 54 00 22 bc 09 03 bc 80 e8 &1be4 fc a8 fc 80 68 06 3c 68 40 7c 80 bc 80 7c 80 bc &1bf4 80 7c 80 bc cf 5e e8 08 00 68 5e 6d 94 00 25 bc &1c04 09 03 bc 80 04 3c a8 04 3c a8 80 09 14 40 07 14 &1c14 a8 80 a8 80 68 80 04 28 11 00 68 00 1e bc 09 03 &1c24 bc c0 06 14 c0 e8 fc a8 fc 80 04 3c 68 07 3c 80 &1c34 bc 16 2d bc 00 19 bc 09 03 bc 80 fc a8 7c a8 fc &1c44 80 04 3c a8 04 3c a8 05 00 54 fc 40 7c 80 bc 0e &1c54 0f 06 1e 4f bc 00 21 bc 09 03 bc 80 68 40 68 40 &1c64 68 0c 00 04 3c e8 06 3c 80 bc cf bc 07 28 bc 4f &1c74 bc 04 00 bc 4f bc 00 21 bc 09 03 bc 25 00 bc cf &1c84 bc 07 00 bc 4f bc 04 00 bc 5e bc 00 15 bc 09 03 &1c94 bc 17 00 07 3c 06 14 80 bc de bc 07 00 04 28 00 &1ca4 14 bc 09 03 bc 17 00 fc 68 40 06 28 80 18 14 00 &1cb4 10 bc 09 03 bc 17 00 fc 04 14 07 00 bc 16 0f bc &1cc4 00 11 bc 09 03 bc 17 00 07 28 06 3c 80 bc 08 1e &1cd4 68 bc cf bc 04 28 bc 4f bc 00 19 bc 09 03 bc 30 &1ce4 00 bc cf bc 04 00 bc 4f bc 00 10 bc 09 03 bc 17 &1cf4 00 08 3c 05 14 80 07 14 05 2d cf bc 04 14 bc 4f &1d04 bc 00 18 bc 09 03 bc 17 00 05 28 40 04 28 7c 80 &1d14 bc 06 1e 04 28 bc 0b 1e bc 00 18 bc 09 03 bc 17 &1d24 00 08 14 c0 7c 80 06 14 c0 0f 14 00 12 bc 09 03 &1d34 bc 17 00 07 28 06 3c 80 bc 04 0f bc c0 bc 06 0f &1d44 05 1e 4f bc 00 19 bc 09 03 bc 25 00 bc 04 0f bc &1d54 d4 bc cf bc e8 c0 bc 4f bc 00 15 bc 09 03 bc 25 &1d64 00 bc 0c 0f bc 06 00 bc 4f bc 00 11 a8 09 02 a8 &1d74 25 00 0e 28 06 00 04 28 00 8e ; unused &1d7e 52 55 4e 20 67 61 6d 65 0d ; "RUN game" ; unused &1d87 0d ; packed_data_addresses_low_table &1d88 11 18 ; unused &1d8a 00 ; packed_data_addresses_high_table &1d8b 01 f4 ; unused &1d8d 00 ; mask_table ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &1d8e ff aa 55 00 aa aa 00 00 55 00 55 00 00 00 00 00 ; &00 &1d9e aa aa 00 00 aa aa 00 00 00 00 00 00 00 00 00 00 ; &10 &1dae 55 00 55 00 00 00 00 00 55 00 55 00 00 00 00 00 ; &20 &1dbe 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; &30 ; unpack_screen_data &1dce 86 75 STX &75 ; screen_address_high &1dd0 85 74 STA &74 ; screen_address_low &1dd2 86 71 STX &71 ; column_address_high &1dd4 85 70 STA &70 ; column_address_low &1dd6 b9 88 1d LDA &1d88,Y ; packed_data_addresses_low_table &1dd9 85 73 STA &73 ; data_address_high &1ddb b9 8b 1d LDA &1d8b,Y ; packed_data_addresses_high_table &1dde 85 72 STA &72 ; data_address_low &1de0 a0 00 LDY #&00 ; unpack_screen_data_loop &1de2 b1 72 LDA (&72),Y ; data_address # Get byte of packed data &1de4 f0 66 BEQ &1e4c ; end_of_column # Zero indicates end of column ; not_end_of_column &1de6 aa TAX &1de7 10 12 BPL &1dfb ; is_positive ; is_negative &1de9 29 40 AND #&40 &1deb d0 07 BNE &1df4 ; is_run_length_3 ; is_run_length_1 &1ded 8a TXA # 10 ...... run length 1 &1dee 29 3f AND #&3f &1df0 a2 01 LDX #&01 &1df2 d0 19 BNE &1e0d ; unpack_run # Always branches ; is_run_length_3 &1df4 8a TXA # 11 ...... run length 3 &1df5 29 3f AND #&3f &1df7 a2 03 LDX #&03 &1df9 d0 12 BNE &1e0d ; unpack_run # Always branches ; is_positive &1dfb 29 40 AND #&40 &1dfd f0 07 BEQ &1e06 ; is_variable_run_length ; is_run_length_2 &1dff 8a TXA # 01 ...... run length 2 &1e00 29 3f AND #&3f &1e02 a2 02 LDX #&02 &1e04 d0 07 BNE &1e0d ; unpack_run # Always branches ; is_variable_run_length &1e06 c8 INY # 00 ...... use next byte for run length &1e07 d0 02 BNE &1e0b ; skip_page &1e09 e6 73 INC &73 ; data_address_high ; skip_page &1e0b b1 72 LDA (&72),Y ; data_address # Get byte of packed data for run length ; unpack_run &1e0d 8d 29 1e STA &1e29 ; pixel_value &1e10 84 76 STY &76 ; offset &1e12 a8 TAY &1e13 b9 8e 1d LDA &1d8e,Y; mask_table &1e16 8d 27 1e STA &1e27 ; pixel_mask &1e19 a4 76 LDY &76 ; offset &1e1b c8 INY &1e1c d0 02 BNE &1e20 ; unpack_run_loop &1e1e e6 73 INC &73 ; data_address_high ; unpack_run_loop &1e20 84 76 STY &76 ; offset &1e22 a0 00 LDY #&00 &1e24 b1 74 LDA (&74),Y ; screen_address &1e26 29 ff AND #&ff # actually AND pixel_mask &1e28 49 ff EOR #&ff # actually EOR pixel_value &1e2a 91 74 STA (&74),Y ; screen_address &1e2c a4 76 LDY &76 ; offset &1e2e a5 74 LDA &74 ; screen_address_low &1e30 29 07 AND #&07 &1e32 f0 07 BEQ &1e3b ; move_up_a_group ; move_up_a_row &1e34 c6 74 DEC &74 ; screen_address_low ; next_byte_of_run &1e36 ca DEX &1e37 d0 e7 BNE &1e20 ; unpack_run_loop &1e39 f0 a7 BEQ &1de2 ; unpack_screen_data_loop # Always branches ; move_up_a_group &1e3b c6 75 DEC &75 ; screen_address_high &1e3d c6 75 DEC &75 ; screen_address_high &1e3f a5 74 LDA &74 ; screen_address_low &1e41 38 SEC &1e42 e9 79 SBC #&79 &1e44 85 74 STA &74 ; screen_address_low &1e46 b0 ee BCS &1e36 ; next_byte_of_run &1e48 c6 75 DEC &75 ; screen_address_high &1e4a d0 ea BNE &1e36 ; next_byte_of_run # Always branches ; end_of_column &1e4c c8 INY &1e4d d0 02 BNE &1e51 ; skip_page &1e4f e6 73 INC &73 ; data_address_high ; skip_page &1e51 b1 72 LDA (&72),Y ; data_address # Get byte of packed data &1e53 10 01 BPL &1e56 ; next_column # Negative indicates end of data &1e55 60 RTS ; next_column &1e56 c8 INY &1e57 d0 02 BNE &1e5b ; skip_page &1e59 e6 73 INC &73 ; data_address_high ; skip_page &1e5b a5 70 LDA &70 ; column_address_low &1e5d 18 CLC &1e5e 69 08 ADC #&08 # Move right a column &1e60 85 70 STA &70 ; column_address_low &1e62 90 02 BCC &1e66 ; skip_page_column &1e64 e6 71 INC &71 ; column_address_high ; skip_page_column &1e66 a5 71 LDA &71 ; column_address_high &1e68 85 75 STA &75 ; screen_address_high &1e6a a5 70 LDA &70 ; column_address_low &1e6c 85 74 STA &74 ; screen_address_low &1e6e 4c e2 1d JMP &1de2 ; unpack_screen_data_loop ; entry_point &1e71 a0 00 LDY #&00 &1e73 84 70 STY &70 ; offset ; write_initialise_screen_loop &1e75 b9 cf 1e LDA &1ecf,Y ; initialise_screen_string &1e78 20 ee ff JSR &ffee ; OSWRCH &1e7b e6 70 INC &70 ; offset &1e7d a4 70 LDY &70 ; offset &1e7f c0 09 CPY #&09 &1e81 90 f2 BCC &1e75 ; write_initialise_screen_loop &1e83 a9 06 LDA #&06 ; R6: Vertical displayed register &1e85 8d 00 fe STA &fe00 ; video register number &1e88 a9 16 LDA #&16 &1e8a 8d 01 fe STA &fe01 ; video register value &1e8d a9 07 LDA #&07 ; R7: Vertical sync position &1e8f 8d 00 fe STA &fe00 ; video register number &1e92 a9 1f LDA #&1f &1e94 8d 01 fe STA &fe01 ; video register value &1e97 a9 0c LDA #&0c ; R12: Displayed screen start address register (high) &1e99 8d 00 fe STA &fe00 ; video register number &1e9c a9 09 LDA #&09 # Set screen memory to start at &4900 &1e9e 8d 01 fe STA &fe01 ; video register value &1ea1 a9 0d LDA #&0d ; R13: Displayed screen start address register (low) &1ea3 8d 00 fe STA &fe00 ; video register number &1ea6 a9 20 LDA #&20 &1ea8 8d 01 fe STA &fe01 ; video register value &1eab a9 9a LDA #&9a ; Write to Video ULA control register and RAM copy &1ead a2 14 LDX #&14 # Use settings for MODE 2, disabling cursor &1eaf 20 f4 ff JSR &fff4 ; OSBYTE &1eb2 a9 01 LDA #&01 # Set colour 0 to cyan &1eb4 8d 21 fe STA &fe21 ; video ULA palette register &1eb7 a9 67 LDA #&67 # Set colour 6 to black &1eb9 8d 21 fe STA &fe21 ; video ULA palette register &1ebc a9 07 LDA #&07 &1ebe a2 6c LDX #&6c ; &6c07 &1ec0 a0 00 LDY #&00 # Plot image &1ec2 20 ce 1d JSR &1dce ; unpack_screen_data &1ec5 a9 a4 LDA #&a4 &1ec7 a2 6a LDX #&6a ; &6aa4 &1ec9 a0 01 LDY #&01 # Plot Stryker's Run and Superior Software logo &1ecb 20 ce 1d JSR &1dce ; unpack_screen_data &1ece 60 RTS ; initialise_screen_string &1ecf 16 02 ; MODE 2 &1ed1 1c 00 1f 13 19 ; define text window x:(&00, &13), y:(&19, &1f) &1ed6 11 06 ; COLOUR 6 ; Stryker1 ; FFFF0E00 FFFF0E00 0084 ; entry_point &0e00 a9 8c LDA #&8c ; Select Tape FS &0e02 a2 0c LDX #&0c ; 1200 baud &0e04 20 f4 ff JSR &fff4 ; OSBYTE &0e07 a9 c8 LDA #&c8 ; Read/Write BREAK/ESCAPE effect &0e09 a2 03 LDX #&03 ; Clear memory on next RESET &0e0b a0 00 LDY #&00 &0e0d 20 f4 ff JSR &fff4 ; OSBYTE &0e10 78 SEI &0e11 a9 00 LDA #&00 &0e13 8d a5 02 STA &02a5 &0e16 8d a6 02 STA &02a6 &0e19 8d a7 02 STA &02a7 &0e1c 8d a8 02 STA &02a8 &0e1f 58 CLI ; load_data_files_loop &0e20 a2 70 LDX #&70 ; &0e70 = load_data_command &0e22 a0 0e LDY #&0e &0e24 20 f7 ff JSR &fff7 ; OSCLI &0e27 78 SEI &0e28 a2 00 LDX #&00 # actually LDX file_number &0e2a bd 80 0e LDA &0e80,X ; ram_banks &0e2d 8d 30 fe STA &fe30 ; Paged ROM latch &0e30 a0 00 LDY #&00 &0e32 84 70 STY &70 ; source_address_low &0e34 84 72 STY &72 ; target_address_low &0e36 a9 80 LDA #&80 # Load data1, data2 and data3 at &8000 &0e38 e0 03 CPX #&03 &0e3a d0 02 BNE &0e3e ; set_target_address_high &0e3c a9 84 LDA #&84 # Load data4 at &8400 ; set_target_address_high &0e3e 85 73 STA &73 ; target_address_high &0e40 a9 10 LDA #&10 # Move &1000 - &47ff &0e42 85 71 STA &71 ; source_address_high &0e44 a2 38 LDX #&38 ; move_data_to_sideways_ram_loop &0e46 b1 70 LDA (&70),Y ; source_address &0e48 91 72 STA (&72),Y ; target_address &0e4a c8 INY &0e4b d0 f9 BNE &0e46 ; move_data_to_sideways_ram_loop &0e4d e6 71 INC &71 ; source_address_high &0e4f e6 73 INC &73 ; target_address_high &0e51 ca DEX &0e52 d0 f2 BNE &0e46 ; move_data_to_sideways_ram_loop &0e54 a5 f4 LDA &f4 ; os_ram_copy_of_currently_selected_rom_number &0e56 8d 30 fe STA &fe30 ; Paged ROM latch &0e59 58 CLI &0e5a ee 29 0e INC &0e29 ; file_number &0e5d ee 79 0e INC &0e79 ; load_data_command + 9 # Load data1, data2, data3 and data4 in turn &0e60 ad 29 0e LDA &0e29 ; file_number &0e63 c9 04 CMP #&04 &0e65 90 b9 BCC &0e20 ; load_data_files_loop &0e67 a2 6e LDX #&6e ; &0e6e = run_command &0e69 a0 0e LDY #&0e &0e6b 4c f7 ff JMP &fff7 ; OSCLI # *RUN ; run_command &0e6e 2f 0d ; "/" ; load_data_command &0e70 4c 4f 41 44 20 64 61 74 61 31 20 31 30 30 30 0d ; "LOAD data1 1000" ; ram_banks &0e80 04 06 07 05 ; Stryker2 ; FFFF0400 FFFF0400 0301 ; entry_point &0400 a2 0f LDX #&0f &0402 a9 00 LDA #&00 ; remove_roms_loop &0404 9d a1 02 STA &02a1,X ; os_paged_rom_type_table # Remove paged ROMs from ROM information table &0407 ca DEX &0408 10 fa BPL &0404 ; remove_roms_loop &040a e8 INX ; 0 &040b a9 0f LDA #&0f ; Flush all buffers &040d 20 f4 ff JSR &fff4 ; OSBYTE &0410 4c d3 04 JMP &04d3 ; via_decryption ; unused &0413 50 72 6f 74 65 63 74 69 6f 6e 20 28 63 29 20 4b ; "Protection (c) K" &0423 65 76 69 6e 20 45 64 77 61 72 64 73 20 31 39 38 ; "evin Edwards 198" &0433 36 ; "6" ; unused &0436 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &0446 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &0456 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &0466 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &0476 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &0486 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &0496 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &04a6 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &04b6 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &04c6 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; via_decryption &04d3 78 SEI &04d4 a2 ff LDX #&ff &04d6 9a TXS &04d7 e8 INX ; 0 &04d8 a9 40 LDA #&40 # Set User VIA timer 1 to continuous interrupts &04da 8d 6b fe STA &fe6b ; User VIA auxiliary control register &04dd a9 7f LDA #&7f # Disable all User VIA interrupts &04df 8d 6e fe STA &fe6e ; User VIA interrupt enable register &04e2 a9 e0 LDA #&e0 # Enable interrupts for User VIA timers 1 and 2 &04e4 8d 6e fe STA &fe6e ; User VIA interrupt enable register &04e7 a9 21 LDA #&21 &04e9 8d 68 fe STA &fe68 ; User VIA timer 2 counter LSB &04ec a9 56 LDA #&56 &04ee 8d 69 fe STA &fe69 ; User VIA timer 2 counter MSB &04f1 a9 45 LDA #&45 &04f3 8d 64 fe STA &fe64 ; User VIA timer 1 counter LSB &04f6 a9 4b LDA #&4b &04f8 8d 65 fe STA &fe65 ; User VIA timer 1 counter MSB &04fb a9 03 LDA #&03 # Enable ESCAPE, clear memory on BREAK &04fd 8d 58 02 STA &0258 ; ESCAPE/BREAK effect ; via_decryption_code ; via_decryption_loop &0500 ad 00 05 LDA &0500 # Runs from &0500 to &05ff # actually LDA &0500 + via_decryption_offset &0503 4d 69 fe EOR &fe69 ; User VIA timer 2 counter MSB &0506 ce 65 fe DEC &fe65 ; User VIA timer 1 counter MSB &0509 5d 00 06 EOR &0600,X ; payload &050c 9d 00 01 STA &0100,X ; stack # Populate &0100 - &01ff with random numbers &050f ac 64 fe LDY &fe64 ; User VIA timer 1 counter LSB &0512 8c 17 05 STY &0517 ; via_decryption_add &0515 18 CLC &0516 69 ed ADC #&ed # actually ADC via_decryption_add &0518 4d 64 fe EOR &fe64 ; User VIA timer 1 counter LSB &051b ac 65 fe LDY &fe65 ; User VIA timer 1 counter MSB &051e cc 69 fe CPY &fe69 ; User VIA timer 2 counter MSB &0521 6d 68 fe ADC &fe68 ; User VIA timer 2 counter LSB &0524 ac 69 fe LDY &fe69 ; User VIA timer 2 counter MSB &0527 8c 2b 05 STY &052b ; via_decryption_eor_one &052a 49 ee EOR #&ee # actually EOR via_decryption_eor_one &052c 4d 17 05 EOR &0517 ; via_decryption_add &052f 4d 64 fe EOR &fe64 ; User VIA timer 1 counter LSB &0532 0e 69 fe ASL &fe69 ; User VIA timer 2 counter MSB &0535 ce 65 fe DEC &fe65 ; User VIA timer 1 counter MSB &0538 4d 69 fe EOR &fe69 ; User VIA timer 2 counter MSB *** &053b ac 65 fe LDY &fe65 ; User VIA timer 1 counter MSB &053e 59 00 05 EOR &0500,Y ; via_decryption_code &0541 ee 45 05 INC &0545 ; via_decryption_eor_two &0544 49 78 EOR #&78 # actually EOR via_decryption_eor_two &0546 4d 66 fe EOR &fe66 ; User VIA timer 1 latch LSB &0549 ce 67 fe DEC &fe67 ; User VIA timer 1 latch MSB &054c 5d 01 06 EOR &0601,X; payload + 1 # Runs over &0601 to &0700 &054f ce 69 fe DEC &fe69 ; User VIA timer 2 counter MSB &0552 38 SEC &0553 6e 68 fe ROR &fe68 ; User VIA timer 2 counter LSB &0556 ac 69 fe LDY &fe69 ; User VIA timer 2 counter MSB &0559 8c 64 fe STY &fe64 ; User VIA timer 1 counter LSB &055c 9d 00 06 STA &0600,X ; payload &055f e8 INX &0560 d0 9e BNE &0500 ; via_decryption_loop &0562 a0 03 LDY #&03 # Clear memory on break &0564 8c 58 02 STY &0258 ; ESCAPE/BREAK effect &0567 a9 4c LDA #&4c ; JMP # Set BREAK intercept code to JMP &0287, endless loop &0569 8d 87 02 STA &0287 ; BREAK intercept code &056c a9 87 LDA #&87 &056e 8d 88 02 STA &0288 ; BREAK intercept code + 1 &0571 88 DEY ; 2 &0572 8c 89 02 STY &0289 ; BREAK intercept code + 2 &0575 a9 40 LDA #&40 ; RTI # Reset NMI handler &0577 8d 00 0d STA &0d00 ; nmi_handler &057a ad fa ff LDA &fffa ; os_nmi_handler_address_low # Ensure NMI handler address hasn't been changed &057d d0 5e BNE &05dd ; endless_wiping_loop &057f ad fb ff LDA &fffb ; os_nmi_handler_address_high &0582 c9 0d CMP #&0d ; &0d00 = nmi_handler &0584 d0 57 BNE &05dd ; endless_wiping_loop &0586 ee 01 05 INC &0501 ; via_decryption_offset &0589 f0 03 BEQ &058e ; calculate_checksum &058b 4c 00 05 JMP &0500 ; via_decryption_loop ; calculate_checksum # Checksum &0600 - &0613 &058e a9 00 LDA #&00 &0590 85 70 STA &70 ; calculated_checksum_one &0592 85 71 STA &71 ; calculated_checksum_two &0594 a8 TAY ; calculate_checksum_loop &0595 a5 71 LDA &71 ; calculated_checksum_two &0597 59 00 06 EOR &0600,Y ; payload &059a 85 71 STA &71 ; calculated_checksum_two &059c a2 08 LDX #&08 ; calculate_checksum_inner_loop &059e a5 71 LDA &71 ; calculated_checksum_two &05a0 2a ROL A &05a1 90 0c BCC &05af ; clear_set &05a3 a5 71 LDA &71 ; calculated_checksum_two &05a5 49 08 EOR #&08 &05a7 85 71 STA &71 ; calculated_checksum_two &05a9 a5 70 LDA &70 ; calculated_checksum_one &05ab 49 10 EOR #&10 &05ad 85 70 STA &70 ; calculated_checksum_one ; clear_set &05af 26 70 ROL &70 ; calculated_checksum_one &05b1 26 71 ROL &71 ; calculated_checksum_two &05b3 ca DEX &05b4 d0 e8 BNE &059e ; calculate_checksum_inner_loop &05b6 c8 INY &05b7 c0 14 CPY #&14 &05b9 d0 da BNE &0595 ; calculate_checksum_loop &05bb a5 70 LDA &70 ; calculated_checksum_one &05bd cd fe 06 CMP &06fe; valid_checksum_one &05c0 d0 14 BNE &05d6 ; invalid_checksum &05c2 a5 71 LDA &71 ; calculated_checksum_two &05c4 cd ff 06 CMP &06ff ; valid_checksum_two &05c7 f0 37 BEQ &0600 ; payload # If the checksum matches, run the decrypted code &05c9 d0 0b BNE &05d6 ; invalid_checksum ; unused &05cb 48 69 20 42 54 57 20 2e 2e 2e 2e ; "Hi BTW ...." ; invalid_checksum &05d6 a9 c8 LDA #&c8 ; Read/Write BREAK/ESCAPE effect # This is handled by the OS OSBYTE handler at &e99c, &05d8 a2 03 LDX #&03 ; Clear memory on next RESET # which isn't checked in the decryption routine &05da 20 f4 ff JSR &fff4 ; OSBYTE # so could be intercepted with a custom ROM ; endless_wiping_loop # Otherwise, if the checksum doesn't match, &05dd 99 00 06 STA &0600,Y ; payload # Wipe &0600 - &06ff (failed decryption) with &c8 &05e0 c8 INY &05e1 4c dd 05 JMP &05dd ; endless_wiping_loop ; unused &05e4 20 28 63 29 20 4b 65 76 69 6e 20 45 64 77 61 72 ; " (c) Kevin Edwar" &05f4 64 73 20 31 39 38 36 20 20 20 20 20 ; "ds 1986 " ; payload &0600 a2 c8 LDX #&c8 &0602 9a TXS &0603 a9 03 LDA #&03 # Enable ESCAPE, clear memory on BREAK &0605 8d 58 02 STA &0258 ; ESCAPE/BREAK effect &0608 a9 41 LDA #&41 ; &412d = main_binary_entry_point - 1 # Used at &067c &060a 48 PHA &060b a9 2d LDA #&2d &060d 48 PHA &060e a9 ef LDA #&ef # Used to decrypt main binary &0610 48 PHA ; decryption_key_low &0611 a9 48 LDA #&48 # Used to decrypt main binary &0613 48 PHA ; decryption_key_high &0614 a0 00 LDY #&00 &0616 98 TYA ; wipe_0600_to_0616_loop # Wipe &0600 - &0616 &0617 99 00 06 STA &0600,Y &061a c8 INY &061b c0 17 CPY #&17 &061d d0 f8 BNE &0617 ; wipe_0600_to_0616_loop &061f a2 35 LDX #&35 ; check_vector_table_loop &0621 bd 00 02 LDA &0200,X ; os_vector_table # Check all vectors are in ROM &0624 10 b7 BPL &05dd ; endless_wiping_loop # Wipe payload if any are in RAM &0626 ca DEX &0627 ca DEX &0628 10 f7 BPL &0621 ; check_vector_table_loop &062a a0 00 LDY #&00 &062c 98 TYA ; wipe_0600_to_062c_loop # Wipe &0600 - &062c &062d 99 00 06 STA &0600,Y &0630 c8 INY &0631 c0 2d CPY #&2d &0633 d0 f8 BNE &062d ; wipe_0600_to_062c_loop &0635 a9 7f LDA #&7f # Disable all User VIA interrupts &0637 8d 6e fe STA &fe6e ; User VIA interrupt enable register &063a 58 CLI &063b a9 8c LDA #&8c ; Select Tape FS &063d a2 0c LDX #&0c ; 1200 baud &063f 20 f4 ff JSR &fff4 ; OSBYTE &0642 a2 7d LDX #&7d ; &067d = load_game_command # *LOAD Game.. E00 &0644 a0 06 LDY #&06 &0646 20 f7 ff JSR &fff7 ; OSCLI &0649 78 SEI &064a a9 03 LDA #&03 # Enable ESCAPE, clear memory on BREAK &064c 8d 58 02 STA &0258 ; ESCAPE/BREAK effect &064f a9 40 LDA #&40 # Set timer 1 to continuous countdown &0651 8d 6b fe STA &fe6b ; User VIA auxiliary control register &0654 68 PLA ; decryption_key_low # Use values set at &060e for decryption &0655 8d 68 fe STA &fe68 ; User VIA timer 2 counter LSB &0658 68 PLA ; decryption_key_high &0659 8d 69 fe STA &fe69 ; User VIA timer 2 counter MSB &065c a0 00 LDY #&00 &065e a2 39 LDX #&39 ; decrypt_0e00_to_46ff_loop # Decrypt &0e00 - &46ff &0660 b9 00 0e LDA &0e00,Y # actually LDA decryption_read_address,Y &0663 4d 68 fe EOR &fe68 ; User VIA timer 2 counter LSB &0666 ee 68 fe INC &fe68 ; User VIA timer 2 counter LSB &0669 4d 69 fe EOR &fe69 ; User VIA timer 2 counter MSB &066c 99 00 0e STA &0e00,Y # actually LDA decryption_write_address,Y &066f c8 INY &0670 d0 ee BNE &0660 ; decrypt_0e00_to_46ff_loop &0672 ee 62 06 INC &0662 ; decryption_read_address_high &0675 ee 6e 06 INC &066e ; decryption_write_address_high &0678 ca DEX &0679 d0 e5 BNE &0660 ; decrypt_0e00_to_46ff_loop &067b 58 CLI &067c 60 RTS # Leaves to main_binary_entry_point, pushed at &0608 ; load_game_command # Filename contains TELETEXT_YELLOW and DELETE &067d 4c 2e 47 41 4d 45 83 7f 20 45 30 30 0d ; "L.GAME.. E00" ; game_string # Unused &068a 47 41 4d 45 83 7f 0d ; "GAME.." &0691 20 20 4d 69 73 73 69 6f 6e 20 44 41 44 37 30 30 ; " Mission DAD700" &06a1 30 2c 20 43 79 72 75 73 20 31 20 66 6f 72 65 76 ; "0, Cyrus 1 forev" &06b1 65 72 20 20 20 20 20 20 20 20 20 20 21 50 72 6f ; "er !Pro" &06c1 74 65 63 74 69 6f 6e 20 28 63 29 20 4b 65 76 69 ; "tection (c) Kevi" &06d1 6e 20 45 64 77 61 72 64 73 20 31 39 38 36 20 59 ; "n Edwards 1986 Y" &06e1 6f 75 20 74 6f 6f 6b 20 79 6f 75 72 20 74 69 6d ; "ou took your tim" &06f1 65 20 21 20 48 69 20 74 6f 20 42 54 57 ; "e ! Hi to BTW" ; valid_checksum_one &06fe 37 ; valid_checksum_two &06ff ca &0700 00 # Used at &054c in final round of via_decryption Game disassembly ================ ; GAME?? ; BBC1BBC2 BBC1BBC2 3900 # Loaded at &0e00 ; enemy_helicopters_initial_x &0e00 29 57 ; scenery_data_one ; s d &0e02 01 06 ; SCENERY_GREEN_YELLOW_PILLBOX &0e04 81 0c ; SCENERY_GREEN_YELLOW_PILLBOX | SCENERY_FLIPPED &0e06 0e 14 ; SCENERY_HEADQUARTERS_SIGN &0e08 0a 3c ; SCENERY_LOW_RED_BUILDING &0e0a 16 42 ; SCENERY_RED_BUILDING_WITH_DOOR &0e0c 96 4b ; SCENERY_RED_BUILDING_WITH_DOOR | SCENERY_FLIPPED &0e0e 8d 58 ; SCENERY_HIGH_RED_BUILDING | SCENERY_FLIPPED &0e10 0d 60 ; SCENERY_HIGH_RED_BUILDING &0e12 0a 6a ; SCENERY_LOW_RED_BUILDING &0e14 8a 70 ; SCENERY_LOW_RED_BUILDING | SCENERY_FLIPPED &0e16 32 8c ; SCENERY_RED_TOWER_WITH_DOOR &0e18 b2 98 ; SCENERY_RED_TOWER_WITH_DOOR | SCENERY_FLIPPED &0e1a 02 a4 ; SCENERY_LOW_GREEN_YELLOW_PILLBOX &0e1c 82 aa ; SCENERY_LOW_GREEN_YELLOW_PILLBOX | SCENERY_FLIPPED &0e1e 8c b2 ; SCENERY_SANDBAGS | SCENERY_FLIPPED &0e20 07 f0 ; SCENERY_SIGNPOST &0e22 39 16 ; SCENERY_WOOD_LEFT &0e24 3b 22 ; SCENERY_WOOD_MIDDLE_TWO &0e26 3c 2e ; SCENERY_WOOD_RIGHT &0e28 14 c8 ; SCENERY_HIGH_RUINS &0e2a 12 d4 ; SCENERY_LOW_RUINS &0e2c 94 e0 ; SCENERY_HIGH_RUINS | SCENERY_FLIPPED &0e2e 0b f9 ; SCENERY_GRAVES_WITH_HELMETS &0e30 1f 02 ; SCENERY_CAFE_RUINS &0e32 25 64 ; SCENERY_STATUE &0e34 11 fb ; SCENERY_OIL_DRUMS &0e36 11 01 ; SCENERY_OIL_DRUMS &0e38 2d 10 ; SCENERY_CONNING_TOWER_TWO &0e3a ad 1c ; SCENERY_CONNING_TOWER_TWO | SCENERY_FLIPPED &0e3c 15 a0 ; SCENERY_TREES_TWO &0e3e 06 a8 ; SCENERY_TREES_ONE &0e40 95 b2 ; SCENERY_TREES_TWO | SCENERY_FLIPPED &0e42 06 ba ; SCENERY_TREES_ONE &0e44 86 c4 ; SCENERY_TREES_ONE | SCENERY_FLIPPED &0e46 09 f0 ; SCENERY_GRAVES &0e48 1a 46 ; SCENERY_WRECKED_HELICOPTER &0e4a 13 64 ; SCENERY_WHITE_GREEN_PILLBOX_WITH_SKULL &0e4c 93 6a ; SCENERY_WHITE_GREEN_PILLBOX_WITH_SKULL | SCENERY_FLIPPED &0e4e 14 8a ; SCENERY_HIGH_RUINS &0e50 41 97 ; SCENERY_JAZZ_RUINS &0e52 27 f5 ; SCENERY_MOUNT_RUSHMORE &0e54 30 4c ; SCENERY_LOW_GREEN_TOWER &0e56 b0 58 ; SCENERY_LOW_GREEN_TOWER | SCENERY_FLIPPED &0e58 11 7c ; SCENERY_OIL_DRUMS &0e5a 0f 8a ; SCENERY_CONNING_TOWER &0e5c 8f 92 ; SCENERY_CONNING_TOWER | SCENERY_FLIPPED &0e5e 8c 9c ; SCENERY_SANDBAGS | SCENERY_FLIPPED &0e60 31 0a ; SCENERY_LOW_RED_TOWER &0e62 b1 15 ; SCENERY_LOW_RED_TOWER | SCENERY_FLIPPED &0e64 12 7e ; SCENERY_LOW_RUINS &0e66 94 8a ; SCENERY_HIGH_RUINS | SCENERY_FLIPPED &0e68 92 96 ; SCENERY_LOW_RUINS | SCENERY_FLIPPED &0e6a 3f bc ; SCENERY_CINEMA_RUINS &0e6c 32 e0 ; SCENERY_RED_TOWER_WITH_DOOR &0e6e b2 ec ; SCENERY_RED_TOWER_WITH_DOOR | SCENERY_FLIPPED &0e70 28 f8 ; SCENERY_GREEN_TOWER_TWO &0e72 a8 04 ; SCENERY_GREEN_TOWER_TWO | SCENERY_FLIPPED &0e74 21 10 ; SCENERY_RED_TOWER &0e76 22 1c ; SCENERY_RED_TOWER_BRIDGE &0e78 23 28 ; SCENERY_SLIM_RED_TOWER &0e7a 20 34 ; SCENERY_GREEN_TOWER_ONE &0e7c a0 3e ; SCENERY_GREEN_TOWER_ONE | SCENERY_FLIPPED &0e7e 21 4a ; SCENERY_RED_TOWER &0e80 a1 56 ; SCENERY_RED_TOWER | SCENERY_FLIPPED &0e82 41 63 ; SCENERY_JAZZ_RUINS &0e84 12 6f ; SCENERY_LOW_RUINS &0e86 14 b1 ; SCENERY_HIGH_RUINS &0e88 0c c2 ; SCENERY_SANDBAGS &0e8a 01 ce ; SCENERY_GREEN_YELLOW_PILLBOX &0e8c 81 d4 ; SCENERY_GREEN_YELLOW_PILLBOX | SCENERY_FLIPPED &0e8e 11 dc ; SCENERY_OIL_DRUMS &0e90 11 e2 ; SCENERY_OIL_DRUMS &0e92 26 e8 ; SCENERY_BIG_TANK_ONE &0e94 02 14 ; SCENERY_LOW_GREEN_YELLOW_PILLBOX &0e96 82 1a ; SCENERY_LOW_GREEN_YELLOW_PILLBOX | SCENERY_FLIPPED &0e98 8c 22 ; SCENERY_SANDBAGS | SCENERY_FLIPPED &0e9a 1b 64 ; SCENERY_CAMOUFLAGED_BASE &0e9c 9b 88 ; SCENERY_CAMOUFLAGED_BASE | SCENERY_FLIPPED &0e9e 39 c8 ; SCENERY_WOOD_LEFT &0ea0 3a d4 ; SCENERY_WOOD_MIDDLE_ONE &0ea2 3b e0 ; SCENERY_WOOD_MIDDLE_TWO &0ea4 3b ec ; SCENERY_WOOD_MIDDLE_TWO &0ea6 3c f8 ; SCENERY_WOOD_RIGHT &0ea8 12 8c ; SCENERY_LOW_RUINS &0eaa 19 a8 ; SCENERY_GUN_ON_PILLBOX &0eac 00 b4 ; SCENERY_WHITE_GREEN_PILLBOX &0eae 80 ba ; SCENERY_WHITE_GREEN_PILLBOX | SCENERY_FLIPPED &0eb0 13 c0 ; SCENERY_WHITE_GREEN_PILLBOX_WITH_SKULL &0eb2 93 c6 ; SCENERY_WHITE_GREEN_PILLBOX_WITH_SKULL | SCENERY_FLIPPED &0eb4 11 f6 ; SCENERY_OIL_DRUMS &0eb6 11 fc ; SCENERY_OIL_DRUMS &0eb8 33 02 ; SCENERY_BIG_TANK_TWO &0eba 00 28 ; SCENERY_WHITE_GREEN_PILLBOX &0ebc 80 2e ; SCENERY_WHITE_GREEN_PILLBOX | SCENERY_FLIPPED &0ebe 8c 36 ; SCENERY_SANDBAGS | SCENERY_FLIPPED &0ec0 06 c8 ; SCENERY_TREES_ONE &0ec2 14 e6 ; SCENERY_HIGH_RUINS &0ec4 41 08 ; SCENERY_JAZZ_RUINS &0ec6 29 64 ; SCENERY_HUGE_CRAFT_LEFT &0ec8 2a 7c ; SCENERY_HUGE_CRAFT_MIDDLE &0eca aa 94 ; SCENERY_HUGE_CRAFT_MIDDLE | SCENERY_FLIPPED &0ecc 2b ac ; SCENERY_HUGE_CRAFT_RIGHT &0ece 15 f0 ; SCENERY_TREES_TWO &0ed0 12 f8 ; SCENERY_LOW_RUINS &0ed2 1d b4 ; SCENERY_RUINED_GUN_EMPLACEMENT &0ed4 1e d0 ; SCENERY_RUINED_GUN_EMPLACEMENT_MIDDLE &0ed6 9d dc ; SCENERY_RUINED_GUN_EMPLACEMENT | SCENERY_FLIPPED &0ed8 06 b4 ; SCENERY_TREES_ONE &0eda 15 be ; SCENERY_TREES_TWO &0edc 12 0a ; SCENERY_LOW_RUINS &0ede 02 1e ; SCENERY_LOW_GREEN_YELLOW_PILLBOX &0ee0 82 24 ; SCENERY_LOW_GREEN_YELLOW_PILLBOX | SCENERY_FLIPPED &0ee2 01 2a ; SCENERY_GREEN_YELLOW_PILLBOX &0ee4 81 30 ; SCENERY_GREEN_YELLOW_PILLBOX | SCENERY_FLIPPED &0ee6 17 36 ; SCENERY_HANGER &0ee8 97 4e ; SCENERY_HANGER | SCENERY_FLIPPED &0eea 11 68 ; SCENERY_OIL_DRUMS &0eec 11 6e ; SCENERY_OIL_DRUMS &0eee 40 78 ; SCENERY_WATER_TANK &0ef0 c0 83 ; SCENERY_WATER_TANK | SCENERY_FLIPPED &0ef2 2c 8e ; SCENERY_SHARK_PLANE &0ef4 2c bb ; SCENERY_SHARK_PLANE &0ef6 06 f0 ; SCENERY_TREES_ONE &0ef8 15 6e ; SCENERY_TREES_TWO &0efa 0c c8 ; SCENERY_SANDBAGS &0efc 00 d2 ; SCENERY_WHITE_GREEN_PILLBOX &0efe 80 d8 ; SCENERY_WHITE_GREEN_PILLBOX | SCENERY_FLIPPED &0f00 13 de ; SCENERY_WHITE_GREEN_PILLBOX_WITH_SKULL &0f02 93 e4 ; SCENERY_WHITE_GREEN_PILLBOX_WITH_SKULL | SCENERY_FLIPPED &0f04 12 f0 ; SCENERY_LOW_RUINS &0f06 8d a0 ; SCENERY_HIGH_RED_BUILDING | SCENERY_FLIPPED &0f08 0d a8 ; SCENERY_HIGH_RED_BUILDING &0f0a 38 06 ; SCENERY_LOW_WHITE_TOWER &0f0c b8 11 ; SCENERY_LOW_WHITE_TOWER | SCENERY_FLIPPED &0f0e 19 76 ; SCENERY_GUN_ON_PILLBOX &0f10 00 82 ; SCENERY_WHITE_GREEN_PILLBOX &0f12 80 88 ; SCENERY_WHITE_GREEN_PILLBOX | SCENERY_FLIPPED &0f14 13 8e ; SCENERY_WHITE_GREEN_PILLBOX_WITH_SKULL &0f16 93 94 ; SCENERY_WHITE_GREEN_PILLBOX_WITH_SKULL | SCENERY_FLIPPED &0f18 00 9a ; SCENERY_WHITE_GREEN_PILLBOX &0f1a 80 a0 ; SCENERY_WHITE_GREEN_PILLBOX | SCENERY_FLIPPED &0f1c 1c a6 ; SCENERY_WHITE_GREEN_BUILDING_WITH_DOOR &0f1e 9c b2 ; SCENERY_WHITE_GREEN_BUILDING_WITH_DOOR | SCENERY_FLIPPED &0f20 11 d2 ; SCENERY_OIL_DRUMS &0f22 11 d8 ; SCENERY_OIL_DRUMS &0f24 11 fc ; SCENERY_OIL_DRUMS &0f26 0f 04 ; SCENERY_CONNING_TOWER &0f28 8f 0c ; SCENERY_CONNING_TOWER | SCENERY_FLIPPED &0f2a 40 15 ; SCENERY_WATER_TANK &0f2c c0 20 ; SCENERY_WATER_TANK | SCENERY_FLIPPED &0f2e 34 2b ; SCENERY_BIG_TANK_THREE &0f30 35 49 ; SCENERY_BIG_TANK_FOUR &0f32 99 65 ; SCENERY_GUN_ON_PILLBOX | SCENERY_FLIPPED &0f34 39 0a ; SCENERY_WOOD_LEFT &0f36 3a 16 ; SCENERY_WOOD_MIDDLE_ONE &0f38 3b 22 ; SCENERY_WOOD_MIDDLE_TWO &0f3a 3a 2e ; SCENERY_WOOD_MIDDLE_ONE &0f3c 3b 3a ; SCENERY_WOOD_MIDDLE_TWO &0f3e 3c 46 ; SCENERY_WOOD_RIGHT &0f40 14 52 ; SCENERY_HIGH_RUINS &0f42 15 5e ; SCENERY_TREES_TWO &0f44 07 f2 ; SCENERY_SIGNPOST &0f46 06 b4 ; SCENERY_TREES_ONE &0f48 15 be ; SCENERY_TREES_TWO &0f4a 11 c6 ; SCENERY_OIL_DRUMS &0f4c 06 cc ; SCENERY_TREES_ONE &0f4e 86 d6 ; SCENERY_TREES_ONE | SCENERY_FLIPPED &0f50 15 e0 ; SCENERY_TREES_TWO &0f52 12 c8 ; SCENERY_LOW_RUINS &0f54 14 d4 ; SCENERY_HIGH_RUINS &0f56 94 e0 ; SCENERY_HIGH_RUINS | SCENERY_FLIPPED &0f58 09 ec ; SCENERY_GRAVES &0f5a 37 f4 ; SCENERY_HUGE_GUN_EMPLACEMENT_LEFT &0f5c 3d 30 ; SCENERY_HUGE_GUN_EMPLACEMENT_MIDDLE &0f5e 3e 54 ; SCENERY_HUGE_GUN_EMPLACEMENT_RIGHT &0f60 00 ce ; SCENERY_WHITE_GREEN_PILLBOX &0f62 80 d4 ; SCENERY_WHITE_GREEN_PILLBOX | SCENERY_FLIPPED &0f64 36 14 ; SCENERY_BIG_HELICOPTER &0f66 06 a0 ; SCENERY_TREES_ONE &0f68 15 aa ; SCENERY_TREES_TWO &0f6a 23 64 ; SCENERY_SLIM_RED_TOWER &0f6c a2 70 ; SCENERY_RED_TOWER_BRIDGE | SCENERY_FLIPPED &0f6e 22 7c ; SCENERY_RED_TOWER_BRIDGE &0f70 23 88 ; SCENERY_SLIM_RED_TOWER &0f72 a2 94 ; SCENERY_RED_TOWER_BRIDGE | SCENERY_FLIPPED &0f74 a1 a0 ; SCENERY_RED_TOWER | SCENERY_FLIPPED &0f76 12 50 ; SCENERY_LOW_RUINS &0f78 01 98 ; SCENERY_GREEN_YELLOW_PILLBOX &0f7a 81 9e ; SCENERY_GREEN_YELLOW_PILLBOX | SCENERY_FLIPPED &0f7c 1a c8 ; SCENERY_WRECKED_HELICOPTER &0f7e 24 00 ; SCENERY_JEEP &0f80 26 0e ; SCENERY_BIG_TANK_ONE &0f82 26 29 ; SCENERY_BIG_TANK_ONE &0f84 12 a0 ; SCENERY_LOW_RUINS &0f86 01 b4 ; SCENERY_GREEN_YELLOW_PILLBOX &0f88 81 ba ; SCENERY_GREEN_YELLOW_PILLBOX | SCENERY_FLIPPED &0f8a 0a c8 ; SCENERY_LOW_RED_BUILDING &0f8c 8a ce ; SCENERY_LOW_RED_BUILDING | SCENERY_FLIPPED &0f8e 16 d6 ; SCENERY_RED_BUILDING_WITH_DOOR &0f90 96 df ; SCENERY_RED_BUILDING_WITH_DOOR | SCENERY_FLIPPED &0f92 8a e8 ; SCENERY_LOW_RED_BUILDING | SCENERY_FLIPPED &0f94 8d ef ; SCENERY_HIGH_RED_BUILDING | SCENERY_FLIPPED &0f96 0d f7 ; SCENERY_HIGH_RED_BUILDING &0f98 23 02 ; SCENERY_SLIM_RED_TOWER &0f9a a2 0e ; SCENERY_RED_TOWER_BRIDGE | SCENERY_FLIPPED &0f9c 22 1a ; SCENERY_RED_TOWER_BRIDGE &0f9e 23 26 ; SCENERY_SLIM_RED_TOWER &0fa0 21 32 ; SCENERY_RED_TOWER &0fa2 a1 3e ; SCENERY_RED_TOWER | SCENERY_FLIPPED &0fa4 17 4a ; SCENERY_HANGER &0fa6 97 62 ; SCENERY_HANGER | SCENERY_FLIPPED &0fa8 17 7a ; SCENERY_HANGER &0faa 97 92 ; SCENERY_HANGER | SCENERY_FLIPPED &0fac 40 aa ; SCENERY_WATER_TANK &0fae c0 b5 ; SCENERY_WATER_TANK | SCENERY_FLIPPED &0fb0 40 c0 ; SCENERY_WATER_TANK &0fb2 c0 cb ; SCENERY_WATER_TANK | SCENERY_FLIPPED &0fb4 40 d6 ; SCENERY_WATER_TANK &0fb6 c0 e1 ; SCENERY_WATER_TANK | SCENERY_FLIPPED &0fb8 2c ec ; SCENERY_SHARK_PLANE &0fba 2c 19 ; SCENERY_SHARK_PLANE &0fbc 2c 46 ; SCENERY_SHARK_PLANE &0fbe 36 73 ; SCENERY_BIG_HELICOPTER &0fc0 36 a3 ; SCENERY_BIG_HELICOPTER &0fc2 2d d4 ; SCENERY_CONNING_TOWER_TWO &0fc4 ad e0 ; SCENERY_CONNING_TOWER_TWO | SCENERY_FLIPPED &0fc6 0e ed ; SCENERY_HEADQUARTERS_SIGN &0fc8 02 f5 ; SCENERY_LOW_GREEN_YELLOW_PILLBOX &0fca 82 fb ; SCENERY_LOW_GREEN_YELLOW_PILLBOX | SCENERY_FLIPPED &0fcc 01 01 ; SCENERY_GREEN_YELLOW_PILLBOX &0fce 81 07 ; SCENERY_GREEN_YELLOW_PILLBOX | SCENERY_FLIPPED &0fd0 01 0d ; SCENERY_GREEN_YELLOW_PILLBOX &0fd2 81 13 ; SCENERY_GREEN_YELLOW_PILLBOX | SCENERY_FLIPPED &0fd4 23 19 ; SCENERY_SLIM_RED_TOWER # Not displayed &0fd6 81 f9 ; SCENERY_GREEN_YELLOW_PILLBOX | SCENERY_FLIPPED # Not displayed &0fd8 17 ; SCENERY_HANGER # Not displayed ; scenery_data_two ; s d y &0fd9 21 28 17 ; SCENERY_RED_TOWER &0fdc a1 34 17 ; SCENERY_RED_TOWER | SCENERY_FLIPPED &0fdf 20 51 17 ; SCENERY_GREEN_TOWER_ONE &0fe2 a0 5b 17 ; SCENERY_GREEN_TOWER_ONE | SCENERY_FLIPPED &0fe5 21 6a 17 ; SCENERY_RED_TOWER &0fe8 22 76 17 ; SCENERY_RED_TOWER_BRIDGE &0feb 23 82 17 ; SCENERY_SLIM_RED_TOWER &0fee 10 fe 00 ; SCENERY_BRIDGE &0ff1 90 08 00 ; SCENERY_BRIDGE | SCENERY_FLIPPED &0ff4 09 f0 17 ; SCENERY_GRAVES &0ff7 08 e5 14 ; SCENERY_RUNWAY &0ffa 08 f1 14 ; SCENERY_RUNWAY &0ffd 08 fd 14 ; SCENERY_RUNWAY &1000 0b f8 17 ; SCENERY_GRAVES_WITH_HELMETS &1003 10 74 00 ; SCENERY_BRIDGE &1006 90 7e 00 ; SCENERY_BRIDGE | SCENERY_FLIPPED &1009 08 64 14 ; SCENERY_RUNWAY &100c 08 70 14 ; SCENERY_RUNWAY &100f 06 78 17 ; SCENERY_TREES_ONE &1012 06 80 17 ; SCENERY_TREES_ONE &1015 07 89 17 ; SCENERY_SIGNPOST &1018 0b 82 17 ; SCENERY_GRAVES_WITH_HELMETS &101b 08 d2 14 ; SCENERY_RUNWAY &101e 08 de 14 ; SCENERY_RUNWAY &1021 08 ea 14 ; SCENERY_RUNWAY &1024 10 f4 00 ; SCENERY_BRIDGE &1027 90 fe 00 ; SCENERY_BRIDGE | SCENERY_FLIPPED &102a 07 06 17 ; SCENERY_SIGNPOST &102d 0b 0a 17 ; SCENERY_GRAVES_WITH_HELMETS &1030 07 cc 17 ; SCENERY_SIGNPOST &1033 08 36 14 ; SCENERY_RUNWAY &1036 08 42 14 ; SCENERY_RUNWAY &1039 08 4e 14 ; SCENERY_RUNWAY &103c 08 5a 14 ; SCENERY_RUNWAY &103f 0b 64 17 ; SCENERY_GRAVES_WITH_HELMETS &1042 07 6a 17 ; SCENERY_SIGNPOST &1045 0b 6e 17 ; SCENERY_GRAVES_WITH_HELMETS &1048 08 c0 14 ; SCENERY_RUNWAY &104b 08 cc 14 ; SCENERY_RUNWAY &104e 08 d8 14 ; SCENERY_RUNWAY &1051 08 e4 14 ; SCENERY_RUNWAY &1054 08 f0 14 ; SCENERY_RUNWAY &1057 07 fa 17 ; SCENERY_SIGNPOST &105a 10 fa 00 ; SCENERY_BRIDGE &105d 90 04 00 ; SCENERY_BRIDGE | SCENERY_FLIPPED &1060 08 c6 14 ; SCENERY_RUNWAY &1063 08 d2 14 ; SCENERY_RUNWAY &1066 06 aa 17 ; SCENERY_TREES_ONE &1069 07 ae 17 ; SCENERY_SIGNPOST &106c 07 b4 17 ; SCENERY_SIGNPOST &106f 15 bb 17 ; SCENERY_TREES_TWO &1072 10 c0 00 ; SCENERY_BRIDGE &1075 90 ca 00 ; SCENERY_BRIDGE | SCENERY_FLIPPED &1078 10 d4 00 ; SCENERY_BRIDGE &107b 90 de 00 ; SCENERY_BRIDGE | SCENERY_FLIPPED &107e 10 e8 00 ; SCENERY_BRIDGE &1081 90 f2 00 ; SCENERY_BRIDGE | SCENERY_FLIPPED &1084 07 aa 17 ; SCENERY_SIGNPOST &1087 07 96 17 ; SCENERY_SIGNPOST &108a 23 96 17 ; SCENERY_SLIM_RED_TOWER &108d 07 96 17 ; SCENERY_SIGNPOST ; trigger_points_x_low_table &1090 ff 44 08 90 1c ae 30 c2 80 28 d7 58 b5 dd 48 c7 &10a0 cb 52 d0 8e 80 fa b1 64 f0 0c 82 78 16 20 fa ac &10b0 66 3e cd 7a 02 ; trigger_points_x_high_table &10b5 fe 01 02 02 03 03 04 04 05 07 07 08 08 09 0a 0a &10c5 0b 0c 0c 0d 0e 0e 0f 10 10 12 12 13 14 15 15 16 &10d5 17 18 18 19 1a 63 ; new_movers_type &10db 01 13 01 83 13 83 01 83 83 83 01 83 83 83 83 13 &10eb 01 83 89 83 83 83 82 8c 83 82 83 82 84 83 8c 82 &10fb 8c 8c 8c 82 0a 83 84 89 84 82 8a 8c 83 8c 8c 84 &110b 83 82 8a 95 83 02 01 84 82 8a 83 8c 83 84 8c 83 &111b 01 09 01 13 83 13 95 83 13 84 83 8c 8c 83 84 83 &112b 8a 82 13 83 89 83 83 82 8a 84 83 83 89 8c 83 8a &113b 83 82 83 8c 83 83 8a 82 83 13 83 84 83 84 89 83 &114b 01 02 83 82 01 ; new_movers_initial_x_low &1150 1e bc d2 fa 04 0a 38 6e 82 8c c1 26 42 74 b6 dc &1160 3a 5a 64 82 b4 f6 32 3c 5a b4 da 1a 2c be e6 24 &1170 46 80 92 a0 30 3c 5e aa b5 be 04 1e 50 40 58 70 &1180 96 bc c8 16 aa d2 1a 42 6e 90 fc 12 1e 8c aa dc &1190 00 dc e6 fa 02 46 6e a0 00 28 76 b4 c8 f8 3c 5e &11a0 66 74 82 aa d0 06 82 c6 f0 0a 64 02 46 6e 9e ba &11b0 8e a0 aa fa 46 6e b4 01 32 8c b4 dc 1f 6e 8c c8 &11c0 08 2e 50 78 96 ; new_movers_initial_x_high_and_flags &11c5 80 00 40 80 01 81 41 41 81 41 81 42 42 82 82 02 &11d5 43 83 03 83 43 43 84 04 84 44 44 45 45 85 05 46 &11e5 06 07 07 87 08 88 88 08 88 88 09 09 49 0a 0a 4a &11f5 4a 8a 0a 0b 4b 8b 4c 8c 4c 0c 8c 0d 8d 4d 0d 4d &1205 8e 0e 4e 0e 4f 0f 8f 4f 10 50 50 10 10 50 51 91 &1215 11 52 12 52 12 93 53 53 13 54 54 55 15 15 55 15 &1225 56 56 96 16 57 57 17 98 58 18 58 58 59 99 19 59 &1235 9a 5a 9a 5a 9a ; new_helicopter_types &123a 85 ; MOVER_TYPE_ENEMY | MOVER_TYPE_HELICOPTER_WITH_MISSILE &123b 86 ; MOVER_TYPE_ENEMY | MOVER_TYPE_HELICOPTER &123c 96 ; MOVER_TYPE_ENEMY | MOVER_TYPE_GREEN_WHITE_HELICOPTER &123d 87 ; MOVER_TYPE_ENEMY | MOVER_TYPE_HELICOPTER_WITH_SOLDIER &123e 97 ; MOVER_TYPE_ENEMY | MOVER_TYPE_GREEN_WHITE_CRAFT_ONE &123f 9a ; MOVER_TYPE_ENEMY | MOVER_TYPE_GREEN_WHITE_HELICOPTER_WITH_MISSILE &1240 99 ; MOVER_TYPE_ENEMY | MOVER_TYPE_FLYING_SCOOTER &1241 98 ; MOVER_TYPE_ENEMY | MOVER_TYPE_GREEN_WHITE_CRAFT_TWO ; movers_firing_cooldown &1242 00 00 00 00 00 00 00 00 00 00 00 00 ; scenery_layer_sprite_banks &124e 00 00 00 00 00 00 00 00 ; unused_variable &1256 00 ; scenery_layer_sprite_addresses_high &1257 00 00 00 00 00 00 00 00 ; scenery_layer_sprite_addresses_low &125f 00 00 00 00 00 00 00 00 ; scenery_layers_y &1267 00 00 00 00 00 00 00 00 ; scenery_layers_flip &126f 00 00 00 00 00 00 00 00 ; scenery_layer_addresses_high &1277 00 00 00 00 00 00 00 00 ; scenery_layer_addresses_low &127f 00 00 00 00 00 00 00 00 ; scenery_sprite_banks ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &1287 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 04 ; &00 &1297 04 04 04 04 04 04 04 06 06 06 06 06 06 06 06 06 ; &10 &12a7 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 ; &20 &12b7 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 ; &30 &12c7 07 07 ; &40 ; flipped_scenery_sprite_addresses_low_table ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &12c9 78 26 ea ba a8 a5 90 ea 27 6f ea 54 9b 29 80 f4 ; &00 &12d9 7b ce 65 3d 0c e4 9e e7 b3 03 bb 0b 30 dd a6 0d ; &10 &12e9 89 2b 3e 83 76 62 69 d2 77 e6 4b 7d 08 b7 9d 72 ; &20 &12f9 1f c6 88 08 35 88 7c 8d 20 99 d4 14 00 13 96 7b ; &30 &1309 c4 ff ; &40 ; flipped_scenery_sprite_addresses_high_table ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &130b 80 81 81 82 83 84 85 85 86 86 86 87 87 88 88 88 ; &00 &131b 89 89 8a 06 07 07 8c 81 82 84 84 89 8b 8d 90 94 ; &10 &132b 95 97 98 9a 9b 9e a0 a5 a7 a9 ac ad b2 b3 b4 b5 ; &20 &133b 81 82 84 88 8b 8d 91 99 9b 9c 9e a1 a3 a9 af b4 ; &30 &134b b5 b6 ; &40 ; unflipped_scenery_sprite_addresses_low_table ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &134d 00 93 4a 10 c9 b8 b8 a2 f0 2d 77 09 60 a1 38 89 ; &00 &135d 06 87 db 80 66 16 fc 00 f4 c1 1e c2 39 51 05 cc ; &10 &136d 11 b8 4a 49 a4 7f 6d 6f d8 aa f7 70 9e 0f f3 ac ; &20 &137d 00 58 f5 bc 0f 3e 94 84 b2 47 c4 03 52 05 30 a0 ; &30 &138d 87 e9 ; &40 ; unflipped_scenery_sprite_addresses_high_table ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &138f 80 80 81 82 82 83 84 85 85 86 86 87 87 87 88 88 ; &00 &139f 89 89 89 05 06 07 8b 80 81 82 84 84 89 8b 8e 90 ; &10 &13af 94 95 97 98 9a 9b 9e a0 a5 a7 a9 ac ad b2 b3 b4 ; &20 &13bf 80 81 82 84 88 8b 8d 91 99 9b 9c 9f a1 a3 a9 af ; &30 &13cf b4 b5 ; &40 ; scenery_sprite_width_table ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &13d1 05 05 05 0b 0b 0b 09 06 0b 07 05 07 07 07 07 07 ; &00 &13e1 09 05 0b 05 0b 07 08 17 0b 0b 0b 23 0b 1b 0b 1d ; &10 &13f1 09 0b 0b 0b 0d 15 1a 23 0b 17 17 0b 2c 0b 0b 0c ; &20 &1401 0b 0a 0b 24 1d 1b 2f 3b 0a 0b 0b 0b 0b 23 2f 23 ; &30 &1411 0a 0b ; &40 ; unflipped_mover_sprite_addresses_low_table ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &1413 dd aa 75 41 0f e4 b5 84 5b 35 0c d9 b4 8c 5f 2f ; &00 &1423 fe 10 36 83 d8 b5 8f 5a 39 0e e3 b8 96 6e 41 0f ; &10 &1433 e9 7c 12 b0 6e 3c fe 9e 3f 19 0b f9 e0 a3 8b 00 ; &20 &1443 00 00 00 6e aa 06 00 57 e7 a6 ee 3c 8b 44 eb 95 ; &30 &1453 2c e7 8f cb 73 2b e0 8e 4d fb b0 73 ; &40 ; unflipped_mover_sprite_addresses_high_table ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &145f 3f 3f 3f 3f 3f 3e 3e 3e 3e 3e 3e 3d 3d 3d 3d 3d ; &00 &146f 3c 82 3c 3b 3a 34 3a 3a 3a 3a 39 39 39 39 39 39 ; &10 &147f 38 38 38 37 37 37 36 36 36 36 36 35 35 35 35 35 ; &20 &148f 34 34 33 8a 8a 8b 00 8b 8b 8c 8c 8d 8d 8e 8e 8f ; &30 &149f 90 90 91 91 92 93 93 94 95 95 96 97 ; &40 ; flipped_mover_sprite_addresses_high_table ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &14ab 3f 3f 3f 3f 3f 3f 3e 3e 3e 3e 3e 3e 3d 3d 3d 3d ; &00 &14bb 3d 82 3c 3c 3b 35 3a 3a 3a 3a 3a 39 39 39 39 39 ; &10 &14cb 39 38 38 38 37 37 37 36 36 36 36 36 35 35 35 35 ; &20 &14db 35 34 34 8a 8b 8b 00 8b 8b 8c 8d 8d 8e 8e 8f 90 ; &30 &14eb 90 91 91 92 93 93 94 95 95 96 97 97 ; &40 ; flipped_mover_sprite_addresses_low_table ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &14f7 fd da a7 72 3e 0c e1 b2 81 58 32 03 d6 b1 89 5c ; &00 &1507 29 b1 f2 2c 79 7f d1 8c 57 36 0b e0 b5 93 6b 3e ; &10 &1517 0c e2 74 0a aa 6b 36 f4 94 3c 15 06 f4 d8 9d 00 ; &20 &1527 00 00 00 a7 01 4d 00 e3 f3 e8 36 85 35 e1 8d 29 ; &30 &1537 dc 85 c8 69 21 d5 86 45 f1 a5 62 7d ; &40 ; movers_type_and_colour ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &1543 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; &00 &1553 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; &10 &1563 00 00 ; &20 ; movers_frame_and_flip ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &1565 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; &00 &1575 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; &10 &1585 00 00 ; &20 ; movers_x_low ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &1587 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; &00 &1597 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; &10 &15a7 00 00 ; &20 ; movers_x_high ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &15a9 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; &00 &15b9 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; &10 &15c9 00 00 ; &20 ; movers_y ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &15cb 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; &00 &15db 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; &10 &15eb 00 00 ; &20 ; movers_screen_address_low ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &15ed 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; &00 &15fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; &10 &160d 00 00 ; &20 ; movers_screen_address_high ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &160f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; &00 &161f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; &10 &162f 00 00 ; &20 ; movers_raster_y ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &1631 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; &00 &1641 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; &10 &1651 00 00 ; &20 ; projectiles_x_velocity &1653 00 00 00 00 00 00 00 00 00 00 00 00 ; projectiles_y_velocity &165f 00 00 00 00 00 00 00 00 00 00 00 00 ; projectiles_is_rocket &166b 00 00 00 00 00 00 00 00 00 00 00 00 ; projectiles_ttl &1677 00 00 00 00 00 00 00 00 00 00 00 00 ; mover_types_parts ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &1683 00 00 00 00 00 01 01 01 01 01 01 02 02 02 02 02 ; &00 &1693 02 02 02 02 01 02 01 02 02 02 01 02 ; &10 ; mover_types_first_sprite_animation_offsets ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &169f 00 00 00 00 00 2c 33 3a 4c 5e 5e 53 61 40 44 49 ; &00 &16af 4a 4b 62 63 64 6f 70 76 77 78 79 7f 0e 1c 0e 1c ; &10 &16bf 55 25 25 25 25 5f 60 00 00 00 00 00 00 00 00 00 ; &20 &16cf 68 00 25 00 00 00 25 00 ; &30 ; mover_types_width_table ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &16d7 06 06 06 06 06 0b 0b 0b 0b 09 09 0b 0b 06 06 02 ; &00 &16e7 02 03 02 03 0b 0b 0b 0b 0b 0b 0b 02 ; &10 ; mover_types_height_table ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &16f3 1e 1c 1f 1c 1c 1c 1b 1c 1c 16 16 17 17 1d 0f 03 ; &00 &1703 04 04 0d 05 20 18 1c 18 18 18 1c 02 ; &10 ; mover_types_third_sprite &170f 09 0c 0e 20 20 ; mover_types_second_sprite_offset ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &1714 00 00 00 00 00 0e 0e 15 15 1c 1d 00 00 00 00 00 ; &00 &1724 00 00 00 00 1e 00 0e 00 00 00 0e 00 ; &10 ; mover_types_animation_frame ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &1730 06 06 06 06 06 06 06 06 06 01 01 01 01 04 05 01 ; &00 &1740 01 01 01 01 03 01 06 01 01 01 06 01 ; &10 ; mover_types_new_grenade_bomb_or_rocket_y_offset ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &174c 22 22 22 22 22 01 01 01 01 22 00 01 22 00 00 00 ; &00 &175c 00 00 00 00 00 00 01 01 01 00 01 ; &10 ; mover_types_new_bullet_y_offset ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &1767 10 10 10 10 10 10 0f 14 10 00 18 10 00 00 00 00 ; &00 &1777 00 00 00 00 20 1c 10 10 10 10 10 ; &10 ; mover_types_new_grenade_bomb_or_rocket_type ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &1782 10 00 10 00 00 11 10 11 11 10 00 00 12 00 00 00 ; &00 &1792 00 00 00 00 00 00 11 11 10 00 10 ; &10 ; mover_types_new_grenade_bomb_or_rocket_y_velocity ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &179d 06 00 06 00 00 80 80 80 80 08 00 80 01 00 00 00 ; &00 &17ad 00 00 00 00 00 00 80 80 80 00 80 ; &10 ; mover_types_new_bullet_type ; 0 1 2 3 4 5 6 7 8 9 a b c d e f ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &17b8 0f 0f 0f 0f 11 0f 0f 0f 00 00 0f 0f 00 00 00 00 ; &00 &17c8 00 00 00 00 1b 1b 0f 0f 0f 0f 0f ; &10 ; mover_types_new_bullet_y_velocity ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &17d3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; &00 &17e3 00 00 00 00 00 00 00 00 00 00 00 ; &10 ; mover_types_maximum_firing_cooldown ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &17ee 0a 0a 0a 0a 0a 05 06 02 05 00 02 00 00 00 00 00 ; &00 &17fe 00 00 00 00 05 05 04 03 02 03 06 ; &10 ; player_helicopter_types_vertical_speed ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &1809 04 03 02 02 00 00 04 00 00 00 00 00 00 00 00 00 ; &00 &1819 00 03 00 00 00 02 ; &10 ; animation_table &181f 00 ; &00 &00 : SPRITE_LEGS_ONE &1820 01 ; &01 : SPRITE_LEGS_TWO &1821 02 ; &02 : SPRITE_LEGS_THREE &1822 00 ; &03 : SPRITE_LEGS_ONE &1823 03 ; &04 : SPRITE_LEGS_FOUR &1824 04 ; &05 : SPRITE_LEGS_FIVE &1825 0a ; &06 : SPRITE_LEGS_SIX &1826 0d ; &07 : SPRITE_LEGS_SEVEN &1827 0a ; &08 : SPRITE_LEGS_SIX &1828 1b ; &09 : SPRITE_LEGS_NINE &1829 1c ; &0a : SPRITE_LEGS_TEN &182a 1a ; &0b : SPRITE_LEGS_EIGHT &182b 0a ; &0c : SPRITE_LEGS_SIX &182c 0d ; &0d : SPRITE_LEGS_SEVEN &182d 05 ; &0e &00 : SPRITE_TORSO_WITH_PISTOL_ONE &182e 06 ; &01 : SPRITE_TORSO_WITH_PISTOL_TWO &182f 05 ; &02 : SPRITE_TORSO_WITH_PISTOL_ONE &1830 08 ; &03 : SPRITE_TORSO_WITH_PISTOL_FOUR &1831 07 ; &04 : SPRITE_TORSO_WITH_PISTOL_THREE &1832 08 ; &05 : SPRITE_TORSO_WITH_PISTOL_FOUR &1833 0f ; &06 : SPRITE_TORSO_WITH_PISTOL_FIVE &1834 0f ; &07 : SPRITE_TORSO_WITH_PISTOL_FIVE &1835 05 ; &08 : SPRITE_TORSO_WITH_PISTOL_ONE &1836 1d ; &09 : SPRITE_TORSO_WITH_PISTOL_SIX &1837 05 ; &0a : SPRITE_TORSO_WITH_PISTOL_ONE &1838 1e ; &0b : SPRITE_TORSO_WITH_PISTOL_SEVEN &1839 1f ; &0c : SPRITE_TORSO_WITH_PISTOL_EIGHT &183a 05 ; &0d : SPRITE_TORSO_WITH_PISTOL_ONE &183b 10 ; &1c &00 : SPRITE_TORSO_WITH_RIFLE_ONE &183c 10 ; &01 : SPRITE_TORSO_WITH_RIFLE_ONE &183d 10 ; &02 : SPRITE_TORSO_WITH_RIFLE_ONE &183e 10 ; &03 : SPRITE_TORSO_WITH_RIFLE_ONE &183f 10 ; &04 : SPRITE_TORSO_WITH_RIFLE_ONE &1840 10 ; &05 : SPRITE_TORSO_WITH_RIFLE_ONE &1841 0b ; &06 : SPRITE_TORSO_WITH_RIFLE_ZERO &1842 0b ; &07 : SPRITE_TORSO_WITH_RIFLE_ZERO &1843 10 ; &08 : SPRITE_TORSO_WITH_RIFLE_ONE &1844 16 ; &25 &00 : SPRITE_ROTORS_ONE &1845 17 ; &01 : SPRITE_ROTORS_TWO &1846 19 ; &02 : SPRITE_ROTORS_FOUR &1847 18 ; &03 : SPRITE_ROTORS_THREE &1848 19 ; &04 : SPRITE_ROTORS_FOUR &1849 17 ; &05 : SPRITE_ROTORS_TWO &184a 42 ; &06 : SPRITE_ROTORS_WRECK &184b 12 ; &2c &00 : SPRITE_HELICOPTER_WITH_MISSILE_BODY &184c 12 ; &01 : SPRITE_HELICOPTER_WITH_MISSILE_BODY &184d 12 ; &02 : SPRITE_HELICOPTER_WITH_MISSILE_BODY &184e 12 ; &03 : SPRITE_HELICOPTER_WITH_MISSILE_BODY &184f 12 ; &04 : SPRITE_HELICOPTER_WITH_MISSILE_BODY &1850 12 ; &05 : SPRITE_HELICOPTER_WITH_MISSILE_BODY &1851 40 ; &06 : SPRITE_HELICOPTER_WITH_MISSILE_BODY_WRECK &1852 11 ; &33 &00 : SPRITE_HELICOPTER_BODY &1853 11 ; &01 : SPRITE_HELICOPTER_BODY &1854 11 ; &02 : SPRITE_HELICOPTER_BODY &1855 11 ; &03 : SPRITE_HELICOPTER_BODY &1856 11 ; &04 : SPRITE_HELICOPTER_BODY &1857 11 ; &05 : SPRITE_HELICOPTER_BODY &1858 43 ; &06 : SPRITE_HELICOPTER_BODY_WRECK &1859 15 ; &3a &00 : SPRITE_HELICOPTER_WITH_SOLDIER_BODY &185a 15 ; &01 : SPRITE_HELICOPTER_WITH_SOLDIER_BODY &185b 15 ; &02 : SPRITE_HELICOPTER_WITH_SOLDIER_BODY &185c 15 ; &03 : SPRITE_HELICOPTER_WITH_SOLDIER_BODY &185d 15 ; &04 : SPRITE_HELICOPTER_WITH_SOLDIER_BODY &185e 15 ; &05 : SPRITE_HELICOPTER_WITH_SOLDIER_BODY &185f 24 ; &40 &00 : SPRITE_SKELETON_FOUR &1860 23 ; &01 : SPRITE_SKELETON_THREE &1861 22 ; &02 : SPRITE_SKELETON_TWO &1862 21 ; &03 : SPRITE_SKELETON_ONE &1863 29 ; &44 &00 : SPRITE_EXPLOSION_FIVE &1864 28 ; &01 : SPRITE_EXPLOSION_FOUR &1865 27 ; &02 : SPRITE_EXPLOSION_THREE &1866 26 ; &03 : SPRITE_EXPLOSION_TWO &1867 25 ; &04 : SPRITE_EXPLOSION_ONE &1868 2a ; &49 &00 : SPRITE_BULLET &1869 2b ; &4a &00 : SPRITE_GRENADE &186a 2c ; &4b &00 : SPRITE_BOMB &186b 14 ; &4c &00 : SPRITE_RED_HELICOPTER_BODY &186c 14 ; &01 : SPRITE_RED_HELICOPTER_BODY &186d 14 ; &02 : SPRITE_RED_HELICOPTER_BODY &186e 14 ; &03 : SPRITE_RED_HELICOPTER_BODY &186f 14 ; &04 : SPRITE_RED_HELICOPTER_BODY &1870 14 ; &05 : SPRITE_RED_HELICOPTER_BODY &1871 41 ; &00 : SPRITE_RED_HELICOPTER_BODY_WRECK &1872 13 ; &53 &00 : SPRITE_BLUE_CRAFT &1873 3e ; &00 : SPRITE_BLUE_CRAFT_WRECK &1874 2d ; &55 &00 : SPRITE_TORSO_WITH_BAZOOKA &1875 2d ; &01 : SPRITE_TORSO_WITH_BAZOOKA &1876 2d ; &02 : SPRITE_TORSO_WITH_BAZOOKA &1877 2d ; &03 : SPRITE_TORSO_WITH_BAZOOKA &1878 2d ; &04 : SPRITE_TORSO_WITH_BAZOOKA &1879 2d ; &05 : SPRITE_TORSO_WITH_BAZOOKA &187a 2d ; &06 : SPRITE_TORSO_WITH_BAZOOKA &187b 2d ; &07 : SPRITE_TORSO_WITH_BAZOOKA &187c 2d ; &08 : SPRITE_TORSO_WITH_BAZOOKA &187d 34 ; &5e &00 : SPRITE_MORTAR_OR_MACHINE_GUN_SOLDIER &187e 33 ; &5f &00 : SPRITE_MORTAR &187f 35 ; &60 &00 : SPRITE_MACHINE_GUN &1880 37 ; &61 &00 : SPRITE_SAM &1881 38 ; &62 &00 : SPRITE_ROCKET &1882 2e ; &63 &00 : SPRITE_MINE &1883 39 ; &64 &00 : SPRITE_TANK_WHEELS_ONE &1884 3a ; &01 : SPRITE_TANK_WHEELS_TWO &1885 3b ; &02 : SPRITE_TANK_WHEELS_THREE &1886 39 ; &03 : SPRITE_TANK_WHEELS_ONE &1887 3c ; &68 &00 : SPRITE_TANK_BODY &1888 3c ; &01 : SPRITE_TANK_BODY &1889 3c ; &02 : SPRITE_TANK_BODY &188a 4a ; &03 : SPRITE_TANK_BODY_WRECK &188b 3d ; &6c &00 : SPRITE_VEHICLE_BODY # Unused &188c 3d ; &01 : SPRITE_VEHICLE_BODY &188d 3d ; &02 : SPRITE_VEHICLE_BODY &188e 44 ; &6f &03 : SPRITE_HEAVY_GUN &188f 45 ; &70 &00 : SPRITE_GREEN_WHITE_HELICOPTER_BODY &1890 45 ; &00 : SPRITE_GREEN_WHITE_HELICOPTER_BODY &1891 45 ; &00 : SPRITE_GREEN_WHITE_HELICOPTER_BODY &1892 45 ; &00 : SPRITE_GREEN_WHITE_HELICOPTER_BODY &1893 45 ; &00 : SPRITE_GREEN_WHITE_HELICOPTER_BODY &1894 45 ; &00 : SPRITE_GREEN_WHITE_HELICOPTER_BODY &1895 46 ; &76 &00 : SPRITE_GREEN_WHITE_CRAFT_ONE &1896 47 ; &77 &00 : SPRITE_GREEN_WHITE_CRAFT_TWO &1897 48 ; &78 &00 : SPRITE_FLYING_SCOOTER &1898 49 ; &79 &00 : SPRITE_GREEN_WHITE_CRAFT_WITH_MISSILE &1899 49 ; &00 : SPRITE_GREEN_WHITE_CRAFT_WITH_MISSILE &189a 49 ; &00 : SPRITE_GREEN_WHITE_CRAFT_WITH_MISSILE &189b 49 ; &00 : SPRITE_GREEN_WHITE_CRAFT_WITH_MISSILE &189c 49 ; &00 : SPRITE_GREEN_WHITE_CRAFT_WITH_MISSILE &189d 49 ; &00 : SPRITE_GREEN_WHITE_CRAFT_WITH_MISSILE &189e 4b ; &7f &00 : SPRITE_SHELL ; sprites_y_offset ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &189f 0c 0b 0a 0c 0b 0a 0c 06 0c 0a 0a 09 0c 04 15 15 ; &00 &18af 15 15 15 15 15 17 17 17 17 17 17 17 00 00 05 06 ; &10 &18bf 07 05 ; &20 ; player_helicopters_type &18c1 08 0b 06 05 06 08 05 05 0b 14 ; player_helicopters_initial_x_low &18cb ec 66 c8 da 43 4f c1 ea cf 08 ; player_helicopters_initial_x_high &18d5 02 05 32 09 0e 0e 11 11 14 08 ; scroll_screen_left &18df 20 01 1d JSR &1d01 ; initialise_column_buffer &18e2 a6 b2 LDX &b2 ; viewport_left_low &18e4 d0 02 BNE &18e8 ; skip_overflow_left &18e6 c6 ba DEC &ba ; viewport_left_high ; skip_overflow_left &18e8 c6 b2 DEC &b2 ; viewport_left_low &18ea a4 b3 LDY &b3 ; viewport_right_low &18ec d0 07 BNE &18f5 ; skip_underflow_right &18ee c6 bb DEC &bb ; viewport_right_high &18f0 a5 bb LDA &bb ; viewport_right_high &18f2 20 55 23 JSR &2355 ; add_enemy_helicopters ; skip_underflow_right &18f5 c6 b3 DEC &b3 ; viewport_right_low &18f7 ce 4f 1c DEC &1c4f ; ground_left_x_low &18fa ce 50 1c DEC &1c50 ; ground_right_x_low &18fd a6 01 LDX &01 ; screen_start_address_high &18ff a5 00 LDA &00 ; screen_start_address_low &1901 a0 00 LDY #&00 ; &0008 # Move left a column &1903 20 56 1d JSR &1d56 ; subtract_delta_from_screen_address_in_AX &1906 86 01 STX &01 ; screen_start_address_high &1908 85 00 STA &00 ; screen_start_address_low &190a a6 b0 LDX &b0 ; crtc_start_address_high &190c a4 b1 LDY &b1 ; crtc_start_address_low &190e 88 DEY &190f c0 ff CPY #&ff &1911 d0 01 BNE &1914 ; skip_underflow_crtc &1913 ca DEX ; skip_underflow_crtc &1914 e0 07 CPX #&07 &1916 d0 02 BNE &191a ; skip_wraparound &1918 a2 0f LDX #&0f ; skip_wraparound &191a 86 b0 STX &b0 ; crtc_start_address_high &191c 84 b1 STY &b1 ; crtc_start_address_low &191e a0 07 LDY #&07 *** # Enhanced version has extra layer for clouds &1920 84 b7 STY &b7 ; edge_and_layer &1922 a9 01 LDA #&01 &1924 85 cc STA &cc ; edge # Set to non-zero to indicate right edge &1926 a9 d0 LDA #&d0 ; BNE &1928 8d 42 1a STA &1a42 ; use_flipped_or_unflipped_scenery_sprite_opcode_one &192b 8d cd 1b STA &1bcd ; use_flipped_or_unflipped_scenery_sprite_opcode_two &192e a9 55 LDA #&55 ; Kf &1930 20 73 20 JSR &2073 ; change_pixel_tables # Use background palette (use colour 15 for cyan) ; scroll_layers_left_loop # For each of four layers on two edges, &1933 b9 4e 12 LDA &124e,Y ; scenery_layer_sprite_banks *** &1936 85 f4 STA &f4 ; os_ram_copy_of_currently_selected_rom *** &1938 8d 30 fe STA &fe30 ; Paged ROM latch *** &193b 20 95 19 JSR &1995 ; check_for_scenery_when_scrolling_left # Returns non-zero if scenery present &193e f0 09 BEQ &1949 ; no_scenery_in_layer &1940 a5 cc LDA &cc ; edge &1942 d0 0b BNE &194f ; consider_next_layer # If this is a left layer, &1944 20 0c 1a JSR &1a0c ; add_column_of_scenery_to_column_buffer # plot a column of scenery &1947 10 06 BPL &194f ; consider_next_layer # Always branches ; no_scenery_in_layer &1949 b9 ad 1a LDA &1aad,Y ; scenery_layers_table &194c 20 d0 19 JSR &19d0 ; consider_adding_scenery_when_scrolling_left ; consider_next_layer &194f c6 b7 DEC &b7 ; edge_and_layer &1951 a4 b7 LDY &b7 ; edge_and_layer &1953 c0 03 CPY #&03 *** # Enhanced version has extra layer for clouds &1955 d0 02 BNE &1959 ; not_left_edge &1957 c6 cc DEC &cc ; edge # Set to zero to indicate left edge ; not_left_edge &1959 98 TYA &195a 10 d7 BPL &1933 ; scroll_layers_left_loop &195c a9 14 LDA #&14 ; KC &195e 20 73 20 JSR &2073 ; change_pixel_tables # Use foreground palette (use colour 6 for cyan) &1961 a0 00 LDY #&00 &1963 20 11 1c JSR &1c11 ; add_ground_to_column_buffer # Plot a column of ground &1966 20 7b 1c JSR &1c7b ; use_viewport_left_as_edge &1969 20 9d 1d JSR &1d9d ; calculate_screen_addresses_for_movers_on_edge &196c 20 61 1f JSR &1f61 ; add_movers_to_column_buffer # Plot a column of movers &196f a6 7e LDX &7e ; trigger_offset &1971 bc 90 10 LDY &1090,X ; trigger_points_x_low_table &1974 88 DEY &1975 cc 87 15 CPY &1587 ; movers_x_low &1978 d0 14 BNE &198e ; skip_trigger_left &197a bd b5 10 LDA &10b5,X ; trigger_points_x_high_table &197d cd a9 15 CMP &15a9 ; movers_x_high &1980 d0 0c BNE &198e ; skip_trigger_left &1982 20 bf 31 JSR &31bf ; decrement_new_movers_offset &1985 ca DEX &1986 86 7e STX &7e ; trigger_offset &1988 20 c9 31 JSR &31c9 ; add_new_movers &198b 20 bf 31 JSR &31bf ; decrement_new_movers_offset ; skip_trigger_left &198e a5 00 LDA &00 ; screen_start_address_low &1990 a6 01 LDX &01 ; screen_start_address_high &1992 4c 76 1b JMP &1b76 ; set_edge_screen_address_from_AX ; check_for_scenery_when_scrolling_left &1995 20 0c 1d JSR &1d0c ; get_scenery_address_for_layer_Y &1998 f0 06 BEQ &19a0 ; leave # Leave with zero if no scenery in layer &199a 20 bb 1b JSR &1bbb ; calculate_sprite_address_for_column_of_scenery &199d b9 57 12 LDA &1257,Y ; scenery_layer_sprite_addresses_high ; leave &19a0 60 RTS ; get_scenery_type &19a1 a0 00 LDY #&00 &19a3 b1 b4 LDA (&b4),Y ; scenery_data_address ; get_sprite_and_flip &19a5 48 PHA ; byte &19a6 29 7f AND #&7f # Low seven bits specify scenery or sprite type &19a8 aa TAX &19a9 68 PLA ; byte &19aa 29 80 AND #&80 # Top bit set if horizontally flipped &19ac 4a LSR A &19ad 49 40 EOR #&40 &19af 85 cb STA &cb ; scenery_layer_flip &19b1 60 RTS # Leave with X = sprite, A = flip ; get_mountain_or_cloud_type &19b2 a0 00 LDY #&00 &19b4 b1 b4 LDA (&b4),Y ; scenery_data_address &19b6 29 03 AND #&03 &19b8 aa TAX &19b9 bd c5 1a LDA &1ac5,X ; clouds_y_table *** &19bc 8d b8 1a STA &1ab8 ; scenery_layers_y_positions + 3 *** # Set y position of layer 3 on left edge &19bf 8d bc 1a STA &1abc ; scenery_layers_y_positions + 7 *** # Set y position of layer 3 on right edge &19c2 a5 b5 LDA &b5 ; scenery_data_address_high *** &19c4 30 05 BMI &19cb ; is_mountains *** # Negative if mountain layer, positive if cloud layer ; is_clouds *** &19c6 bd c1 1a LDA &1ac1,X ; clouds_table *** &19c9 d0 03 BNE &19ce ; to_get_sprite_and_flip *** ; is_mountains &19cb bd bd 1a LDA &1abd,X ; mountains_table ; to_get_sprite_and_flip &19ce 80 d5 BRA &19a5 ; get_sprite_and_flip *** # 65C02 opcode ; consider_adding_scenery_when_scrolling_left &19d0 85 c5 STA &cd ; scenery_layer &19d2 a5 b4 LDA &b4 ; scenery_data_address_low &19d4 38 SEC &19d5 e5 cd SBC &cd ; scenery_layer &19d7 85 b4 STA &b4 ; scenery_data_address_low &19d9 b0 02 BCS &19dd ; skip_page &19db c6 b5 DEC &b5 ; scenery_data_address_high ; skip_page &19dd a5 cd LDA &cd ; scenery_layer &19df c9 01 CMP #&01 &19e1 d0 0e BNE &19f1 ; not_mountain_or_cloud &19e3 20 b2 19 JSR &19b2 ; get_mountain_or_cloud_type &19e6 a5 b5 LDA &b5 ; scenery_data_address_high *** &19e8 30 18 BMI &1a02 ; add_scenery_when_scrolling_left *** # Negative if mountain layer, positive if cloud layer &19ea bd d1 13 LDA &13d1,X ; scenery_sprite_width_table *** &19ed a0 00 LDY #&00 *** &19ef 80 07 BRA &19f8 ; use_width *** # 65C02 opcode ; not_mountain_or_cloud &19f1 20 a1 19 JSR &19a1 ; get_scenery_type &19f4 bd d1 13 LDA &13d1,X ; scenery_sprite_width_table &19f7 c8 INY ; use_width &19f8 18 CLC &19f9 71 b4 ADC (&b4),Y ; scenery_data_address &19fb a4 cc LDY &cc ; edge # Zero if left edge, non-zero if right edge &19fd d9 b2 00 CMP &00b2,Y ; viewport_left_low &1a00 d0 59 BNE &1a5b ; leave ; add_scenery_when_scrolling_left &1a02 20 22 1a JSR &1a22 ; get_scenery_y_sprite_and_flip_for_layer_Y &1a05 20 1a 1d JSR &1d1a ; set_scenery_address_for_layer_Y &1a08 a5 cc LDA &cc ; edge # Zero if left edge, non-zero if right edge &1a0a d0 4f BNE &1a5b ; leave ; add_column_of_scenery_to_column_buffer &1a0c b9 4e 12 LDA &124e,Y ; scenery_layer_sprite_banks *** &1a0f 85 f4 STA &f4 ; os_ram_copy_of_currently_selected_rom *** &1a11 8d 30 fe STA &fe30 ; Paged ROM latch *** &1a14 b9 67 12 LDA &1267,Y ; scenery_layers_y &1a17 48 PHA ; scenery_layer_y &1a18 be 57 12 LDX &1257,Y ; scenery_layer_sprite_addresses_high &1a1b b9 5f 12 LDA &125f,Y ; scenery_layer_sprite_addresses_low &1a1e a8 TAY &1a1f 4c a9 1c JMP &1ca9 ; add_column_of_scenery_sprite_to_column_buffer ; get_scenery_y_sprite_and_flip_for_layer_Y &1a22 a4 b7 LDY &b7 ; edge_and_layer &1a24 b9 b5 1a LDA &1ab5,Y ; scenery_layers_y_positions &1a27 a0 03 LDY #&03 &1a29 c4 cd CPY &cd ; scenery_layer &1a2b d0 03 BNE &1a30 ; not_variable_y_position &1a2d 88 DEY &1a2e b1 b4 LDA (&b4),Y ; scenery_data_address ; not_variable_y_position &1a30 a4 b7 LDY &b7 ; edge_and_layer &1a32 99 67 12 STA &1267,Y ; scenery_layers_y &1a35 bd 87 12 LDA &1287,X ; scenery_sprite_banks *** &1a38 99 4e 12 STA &124e,Y ; scenery_layer_sprite_banks *** &1a3b a5 cb LDA &cb ; scenery_layer_flip &1a3d 99 6f 12 STA &126f,Y ; scenery_layers_flip &1a40 85 b8 STA &b8 ; pixel_table_address_low ; use_flipped_or_unflipped_scenery_sprite_opcode_one &1a42 f0 08 BEQ &1a4c ; use_flipped_sprite # if scrolling right # also BNE &1de5 ; use_flipped_sprite # if scrolling left ; use_unflipped_sprite &1a44 bd 4d 13 LDA &134d,X ; unflipped_scenery_sprite_addresses_low_table &1a47 bc 8f 13 LDY &138f,X ; unflipped_scenery_sprite_addresses_high_table &1a4a d0 06 BNE &1a52 ; set_scenery_sprite_address # Always branches ; use_flipped_sprite &1a4c bd c9 12 LDA &12c9,X ; flipped_scenery_sprite_addresses_low_table &1a4f bc 0b 13 LDY &130b,X ; flipped_scenery_sprite_addresses_high_table ; set_scenery_sprite_address &1a52 a6 b7 LDX &b7 ; edge_and_layer &1a54 9d 5f 12 STA &125f,X ; scenery_layer_sprite_addresses_low &1a57 98 TYA &1a58 9d 57 12 STA &1257,X ; scenery_layer_sprite_addresses_high ; leave &1a5b a4 b7 LDY &b7 ; edge_and_layer &1a5d 60 RTS ; consider_adding_scenery_when_scrolling_right &1a5e a5 cd LDA &cd ; scenery_layer &1a60 c9 01 CMP #&01 &1a62 d0 10 BNE &1a74 ; not_mountains &1a64 20 b2 19 JSR &19b2 ; get_mountain_or_cloud_type &1a67 a5 b5 LDA &b5 ; scenery_data_address_high *** &1a69 30 17 BMI &1a82 ; add_scenery_when_scrolling_right *** # Negative if mountain layer positive if cloud layer &1a6b a4 cc LDY &cc ; edge *** &1a6d b9 b2 00 LDA &00b2,Y ; viewport_left_low *** &1a70 a0 00 LDY #&00 *** &1a72 f0 0a BEQ &1a7e ; use_width *** # Always branches ; not_mountains &1a74 20 a1 19 JSR &19a1 ; get_scenery_type &1a77 a4 cc LDY &cc ; edge # Zero if left edge, non-zero if right edge &1a79 b9 b2 00 LDA &00b2,Y ; viewport_left_low &1a7c a0 01 LDY #&01 ; use_Width &1a7e d1 b4 CMP (&b4),Y ; scenery_data_address &1a80 d0 0a BNE &1a8c ; leave ; add_scenery_when_scrolling_right &1a82 20 22 1a JSR &1a22 ; get_scenery_y_sprite_and_flip_for_layer_Y &1a85 a5 cc LDA &cc ; edge # Zero if left edge, non-zero if right edge &1a87 f0 03 BEQ &1a8c ; leave &1a89 4c 0c 1a JMP &1a0c ; add_column_of_scenery_to_column_buffer ; leave &1a8c 60 RTS ; check_for_scenery_when_scrolling_right &1a8d 85 cd STA &cd ; scenery_layer &1a8f 20 0c 1d JSR &1d0c ; get_scenery_address_for_layer_Y &1a92 f0 18 BEQ &1aac ; leave # Leave with zero if no scenery in layer &1a94 20 bb 1b JSR &1bbb ; calculate_sprite_address_for_column_of_scenery &1a97 b9 57 12 LDA &1257,Y ; scenery_layer_sprite_addresses_high &1a9a d0 10 BNE &1aac ; leave &1a9c a5 b4 LDA &b4 ; scenery_data_address_low &1a9e 18 CLC &1a9f 65 cd ADC &cd ; scenery_layer &1aa1 85 b4 STA &b4 ; scenery_data_address_low &1aa3 90 02 BCC &1aa7 ; skip_page &1aa5 e6 b5 INC &b5 ; scenery_data_address_high ; skip_page &1aa7 20 1a 1d JSR &1d1a ; set_scenery_address_for_layer_Y &1aaa a9 00 LDA #&00 ; leave &1aac 60 RTS ; scenery_layers_table ; left right ; 0 1 2 3 4 5 6 7 # &01 = mountains or clouds &1aad 02 03 01 01 02 03 01 01 # &02 = scenery one, &03 = scenery two ; scenery_layers_y_positions ; left right ; 0 1 2 3 4 5 6 7 &1ab5 17 03 17 03 17 03 17 03 ; mountains_table &1abd 05 ; SCENERY_MOUNTAINS_TWO &1abe 85 ; SCENERY_MOUNTAINS_TWO | SCENERY_FLIPPED &1abf 84 ; SCENERY_MOUNTAINS_ONE | SCENERY_FLIPPED &1ac0 04 ; SCENERY_MOUNTAINS_ONE ; clouds_table &1ac1 2e ; SCENERY_CLOUD_ONE &1ac2 2f ; SCENERY_CLOUD_TWO &1ac3 ae ; SCENERY_CLOUD_ONE | SCENERY_FLIPPED &1ac4 af ; SCENERY_CLOUD_TWO | SCENERY_FLIPPED ; clouds_y_table &1ac5 aa a7 a3 a1 ; scroll_screen_right &1ac9 20 01 1d JSR &1d01 ; initialise_column_buffer &1acc e6 b2 INC &b2 ; viewport_left_low &1ace d0 02 BNE &1ad2 ; skip_overflow_left &1ad0 e6 ba INC &ba ; viewport_left_high ; skip_overflow_left &1ad2 e6 b3 INC &b3 ; viewport_right_low &1ad4 d0 07 BNE &1add ; skip_overflow_right &1ad6 e6 bb INC &bb ; viewport_right_high &1ad8 a5 bb LDA &bb ; viewport_right_high &1ada 20 55 23 JSR &2355 ; add_enemy_helicopters ; skip_overflow_right &1add ee 4f 1c INC &1c4f ; ground_left_x_low &1ae0 ee 50 1c INC &1c50 ; ground_right_x_low &1ae3 a6 01 LDX &01 ; screen_start_address_high &1ae5 a5 00 LDA &00 ; screen_start_address_low &1ae7 a0 00 LDY #&00 ; &0008 # Move right a column &1ae9 20 37 1d JSR &1d37 ; add_delta_to_screen_address_in_AX &1aec 86 01 STX &01 ; screen_start_address_high &1aee 85 00 STA &00 ; screen_start_address_low &1af0 a6 b0 LDX &b0 ; crtc_start_address_high &1af2 a4 b1 LDY &b1 ; crtc_start_address_low &1af4 c8 INY &1af5 d0 01 BNE &1af8 ; skip_page &1af7 e8 INX ; skip_page &1af8 e0 10 CPX #&10 &1afa d0 02 BNE &1afe ; skip_wraparound &1afc a2 08 LDX #&08 ; skip_wraparound &1afe 86 b0 STX &b0 ; crtc_start_address_high &1b00 84 b1 STY &b1 ; crtc_start_address_low &1b02 a0 07 LDY #&07 *** # Enhanced version has extra layer for clouds &1b04 84 b7 STY &b7 ; edge_and_layer &1b06 a9 01 LDA #&01 &1b08 85 cc STA &cc ; edge # Set to non-zero to indicate right edg &1b0a a9 f0 LDA #&f0 ; BEQ &1b0c 8d 42 1a STA &1a42 ; use_flipped_or_unflipped_scenery_sprite_opcode_one &1b0f 8d cd 1b STA &1bcd ; use_flipped_or_unflipped_scenery_sprite_opcode_two &1b12 a9 55 LDA #&55 ; Kf &1b14 20 73 20 JSR &2073 ; change_pixel_tables # Use background palette (use colour 15 for cyan) ; scroll_layers_right_loop # For each of four layers on two edges, &1b17 b9 4e 12 LDA &124e,Y ; scenery_layer_sprite_banks *** &1b1a 85 f4 STA &f4 ; os_ram_copy_of_currently_selected_rom *** &1b1c 8d 30 fe STA &fe30 ; Paged ROM latch *** &1b1f b9 ad 1a LDA &1aad,Y ; scenery_layers_table &1b22 20 8d 1a JSR &1a8d ; check_for_scenery_when_scrolling_right # Returns non-zero if scenery present &1b25 f0 09 BEQ &1b30 ; no_scenery_in_layer &1b27 a5 cc LDA &cc ; edge &1b29 f0 08 BEQ &1b33 ; consider_next_layer # If this is a right layer, &1b2b 20 0c 1a JSR &1a0c ; add_column_of_scenery_to_column_buffer # plot a column of scenery &1b2e 10 03 BPL &1b33 ; consider_next_layer # Always branches ; no_scenery_in_layer &1b30 20 5e 1a JSR &1a5e ; consider_adding_scenery_when_scrolling_left ; consider_next_layer &1b33 c6 b7 DEC &b7 ; edge_and_layer &1b35 a4 b7 LDY &b7 ; edge_and_layer &1b37 c0 03 CPY #&03 *** # Enhanced version has extra layer for clouds &1b39 d0 02 BNE &1b3d ; not_left_edge &1b3b c6 cc DEC &cc ; edge # Set to zero to indicate left edge ; not_left_edge &1b3d 98 TYA &1b3e 10 d7 BPL &1b17 ; scroll_layers_right_loop &1b40 a9 14 LDA #&14 ; KC &1b42 20 73 20 JSR &2073 ; change_pixel_tables # Use foreground palette (use colour 6 for cyan) &1b45 a0 01 LDY #&01 &1b47 20 11 1c JSR &1c11 ; add_ground_to_column_buffer # Plot a column of ground &1b4a 20 73 1c JSR &1c73 ; use_viewport_right_as_edge &1b4d 20 9d 1d JSR &1d9d ; calculate_screen_addresses_for_movers_on_edge &1b50 20 61 1f JSR &1f61 ; add_movers_to_column_buffer # Plot a column of mover &1b53 a6 7e LDX &7e ; trigger_offset &1b55 e8 INX &1b56 bc 90 10 LDY &1090,X ; trigger_points_x_low_table &1b59 cc 87 15 CPY &1587 ; movers_x_low &1b5c d0 0f BNE &1b6d ; skip_trigger_right &1b5e bd b5 10 LDA &10b5,X ; trigger_points_x_high_table &1b61 cd a9 15 CMP &15a9 ; movers_x_high &1b64 d0 07 BNE &1b6d ; skip_trigger_right &1b66 86 7e STX &7e ; trigger_offset &1b68 e8 INX &1b69 e8 INX &1b6a 20 c9 31 JSR &31c9 ; add_new_movers ; skip_trigger_right &1b6d a6 01 LDX &01 ; screen_start_address_high &1b6f a5 00 LDA &00 ; screen_start_address_low &1b71 a0 07 LDY #&07 ; &0278 &1b73 20 37 1d JSR &1d37 ; add_delta_to_screen_address_in_AX ; set_edge_screen_address_from_AX &1b76 86 86 STX &86 ; edge_screen_address_high &1b78 85 85 STA &85 ; edge_screen_address_low &1b7a 18 CLC # Unnecessary code &1b7b 60 RTS ; update_screen ; wait_for_timer &1b7c ad 69 fe LDA &fe69 ; User VIA timer 2 counter MSB &1b7f c9 c8 CMP #&c8 &1b81 b0 f9 BCS &1b7c ; wait_for_timer # Wait for raster to be at approximately ground level ; update_screen_without_delay &1b83 a2 0c LDX #&0c ; R12: Displayed screen start address register (high) &1b85 8e 00 fe STX &fe00 ; video register number &1b88 a5 b0 LDA &b0 ; crtc_start_address_high &1b8a 8d 01 fe STA &fe01 ; video register value &1b8d e8 INX ; &0d ; R13: Displayed screen start address register (low) &1b8e 8e 00 fe STX &fe00 ; video register number &1b91 a5 b1 LDA &b1 ; crtc_start_address_low &1b93 8d 01 fe STA &fe01 ; video register value &1b96 a0 00 LDY #&00 &1b98 a2 c8 LDX #&c8 ; plot_column_from_buffer_loop &1b9a bd ff 02 LDA &02ff,X ; column_buffer - 1 &1b9d 91 85 STA (&85),Y ; edge_screen_address &1b9f c8 INY &1ba0 c0 08 CPY #&08 &1ba2 f0 04 BEQ &1ba8 ; next_group ; next_row &1ba4 ca DEX &1ba5 d0 f3 BNE &1b9a ; plot_column_from_buffer_loop &1ba7 60 RTS ; next_group &1ba8 da PHX # 65C02 opcode &1ba9 a5 85 LDA &85 ; edge_screen_address_low &1bab a6 86 LDX &86 ; edge_screen_address_high &1bad a0 02 LDY #&02 ; &0280 # Move down a group &1baf 20 37 1d JSR &1d37 ; add_delta_to_screen_address_in_AX &1bb2 86 86 STX &86 ; edge_screen_address_high &1bb4 85 85 STA &85 ; edge_screen_address_low &1bb6 fa PLX # 65C02 opcode &1bb7 a0 00 LDY #&00 &1bb9 f0 e9 BEQ &1ba4 ; next_row # Always branches ; calculate_sprite_address_for_column_of_scenery &1bbb b9 6f 12 LDA &126f,Y ; scenery_layers_flip &1bbe 85 b8 STA &b8 ; pixel_table_address_low &1bc0 18 CLC &1bc1 69 80 ADC #&80 # &0480 = flipped_mask_table, &04c0 = unflipped_mask_table &1bc3 85 c8 STA &c8 ; mask_table_address_low &1bc5 a9 04 LDA #&04 &1bc7 85 c9 STA &c9 ; mask_table_address_high &1bc9 85 b9 STA &b9 ; pixel_table_address_high &1bcb a5 b8 LDA &b8 ; pixel_table_address_low # Zero if sprite is flipped ; use_flipped_or_unflipped_scenery_sprite_opcode_two &1bcd f0 03 BEQ &1bd2 ; to_move_backwards_through_sprite # if scrolling right # also BNE &1f4e ; to_move_backwards_through_sprite # if scrolling left &1bcf 4c f6 1b JMP &1bf6 ; move_forward_through_sprite ; to_move_backwards_through_sprite &1bd2 4c d5 1b JMP &1bd5 ; move_backwards_through_sprite # Unnecessary code ; move_backwards_through_sprite &1bd5 20 65 1c JSR &1c65 ; use_scenery_sprite_address_for_layer_Y &1bd8 b1 ce LDA (&ce),Y ; scenery_sprite_address &1bda f0 14 BEQ &1bf0 ; set_scenery_layer_sprite_address_high &1bdc 85 f9 STA &f9 ; column_length_in_bytes &1bde a6 cf LDX &cf ; scenery_sprite_address_high &1be0 a5 ce LDA &ce ; scenery_sprite_address_low &1be2 38 SEC &1be3 e5 f9 SBC &f9 ; column_length_in_bytes &1be5 b0 01 BCS &1be8 ; skip_page &1be7 ca DEX ; skip_page &1be8 a4 b7 LDY &b7 ; edge_and_layer &1bea 99 5f 12 STA &125f,Y ; scenery_layer_sprite_addresses_low &1bed 8a TXA &1bee d0 02 BNE &1bf2 ; set_scenery_layer_sprite_address_high # Always branches ; set_scenery_layer_Y_sprite_address_high &1bf0 a4 b7 LDY &b7 ; edge_and_layer &1bf2 99 57 12 STA &1257,Y ; scenery_layer_sprite_addresses_high &1bf5 60 RTS ; move_forward_through_sprite &1bf6 b9 5f 12 LDA &125f,Y ; scenery_layer_sprite_addresses_low &1bf9 a8 TAY &1bfa 20 88 1c JSR &1c88 ; move_to_next_column_in_XY &1bfd 99 5f 12 STA &125f,Y ; scenery_layer_sprite_addresses_low &1c00 8a TXA &1c01 99 57 12 STA &1257,Y ; scenery_layer_sprite_addresses_high &1c04 20 65 1c JSR &1c65 ; use_scenery_sprite_address_for_layer_Y &1c07 b1 ce LDA (&ce),Y ; scenery_sprite_address &1c09 10 03 BPL &1c0e ; leave &1c0b 98 TYA &1c0c f0 e2 BEQ &1bf0 ; set_scenery_layer_sprite_address_high ; leave &1c0e a4 b7 LDY &b7 ; edge_and_layer &1c10 60 RTS ; add_ground_to_column_buffer &1c11 be 4f 1c LDX &1c4f,Y ; ground_left_x_low &1c14 bd 00 e0 LDA &e000,X ; os_rom + &2000 *** # Use ROM as pseudo-random stream for ground &1c17 29 03 AND #&03 &1c19 aa TAX &1c1a 48 PHA ; ground_type &1c1b 20 1e 2f JSR &2f1e ; multiply_A_by_X &1c1e 68 PLA ; ground_type &1c1f aa TAX &1c20 ad 09 03 LDA &0309 ; column_buffer + 9 &1c23 d0 29 BNE &1c4e ; leave # Don't add ground if a bridge is present &1c25 a0 13 LDY #&13 &1c27 ad 15 03 LDA &0315 ; column_buffer + &15 &1c2a d0 14 BNE &1c40 ; add_ground_to_column_buffer_loop # Don't add ground edge if runway present &1c2c bd 51 1c LDA &1c51,X ; ground_edge_bottom_pixel_values &1c2f 8d 16 03 STA &0316 ; column_buffer + &16 &1c32 ad 17 03 LDA &0317 ; column_buffer + &17 &1c35 3d 59 1c AND &1c59,X ; ground_edge_masks &1c38 5d 55 1c EOR &1c55,X ; ground_edge_top_pixel_values &1c3b 8d 17 03 STA &0317 ; column_buffer + &17 &1c3e a0 15 LDY #&15 ; add_ground_to_column_buffer_loop &1c40 b1 c5 LDA (&c5),Y ; result # &0000,Y, &0001,Y, &0004,Y or &0009,Y &1c42 29 07 AND #&07 &1c44 aa TAX &1c45 bd 5d 1c LDA &1c5d,X ; ground_pixel_values &1c48 99 00 03 STA &0300,Y ; column_buffer # Add ground to column buffe &1c4b 88 DEY &1c4c 10 f2 BPL &1c40 ; add_ground_to_column_buffer_loop ; leave &1c4e 60 RTS ; ground_left_x_low &1c4f 00 ; ground_right_x_low &1c50 00 ; ground_edge_bottom_pixel_values &1c51 3c ; CC &1c52 29 ; CR &1c53 16 ; RC &1c54 03 ; RR ; ground_edge_top_pixel_values &1c55 00 ; KK &1c56 14 ; KC &1c57 28 ; CK &1c58 3c ; CC ; ground_edge_masks &1c59 ff ; ## &1c5a aa ; #. &1c5b 55 ; .# &1c5c 00 ; .. ; ground_pixel_values &1c5d 03 ; RR &1c5e 29 ; CR &1c5f 03 ; RR &1c60 16 ; RC &1c61 03 ; RR &1c62 03 ; RR &1c63 03 ; RR &1c64 03 ; RR ; use_scenery_sprite_address_for_layer_Y &1c65 b9 5f 12 LDA &125f,Y ; scenery_layer_sprite_addresses_low &1c68 be 57 12 LDX &1257,Y ; scenery_layer_sprite_addresses_high &1c6b a8 TAY ; set_scenery_sprite_address_from_XY &1c6c 86 cf STX &cf ; scenery_sprite_address_high &1c6e 84 ce STY &ce ; scenery_sprite_address_low &1c70 a0 00 LDY #&00 &1c72 60 RTS ; use_viewport_right_as_edge &1c73 a6 b3 LDX &b3 ; viewport_right_low &1c75 a4 bb LDY &bb ; viewport_right_high &1c77 a9 01 LDA #&01 # Non-zero to indicate right edge &1c79 d0 06 BNE &1c81 ; set_edge_x # Always branches ; use_viewport_left_as_edge &1c7b a6 b2 LDX &b2 ; viewport_left_low &1c7d a4 ba LDY &ba ; viewport_left_high &1c7f a9 00 LDA #&00 # Zero to indicate left edge ; set_edge_x &1c81 86 b5 STX &b5 ; edge_x_low &1c83 84 b4 STY &b4 ; edge_x_high &1c85 85 cf STA &cf ; edge &1c87 60 RTS ; move_to_next_column_in_XY &1c88 20 6c 1c JSR &1c6c ; set_scenery_sprite_address_from_XY # Returns Y = 0 ; find_end_of_column_loop &1c8b c8 INY &1c8c b1 ce LDA (&ce),Y ; scenery_sprite_address # Zero indicates end of column &1c8e f0 09 BEQ &1c99 ; move_to_next_column &1c90 b1 ce LDA (&ce),Y ; scenery_sprite_address &1c92 29 c0 AND #&c0 &1c94 d0 f5 BNE &1c8b ; find_end_of_column_loop &1c96 c8 INY # Get extra byte for variable length run &1c97 d0 f2 BNE &1c8b ; find_end_of_column_loop # Always branches ; move_to_next_column &1c99 a6 cf LDX &cf ; scenery_sprite_address_high &1c9b c8 INY # One byte for the zero that indicates end of column &1c9c d0 01 BNE &1c9f ; skip_page_byte &1c9e e8 INX ; skip_page_byte &1c9f 98 TYA # Bytes for the content of the plotted column &1ca0 18 CLC &1ca1 65 ce ADC &ce ; scenery_sprite_address_low &1ca3 90 01 BCC &1ca6 ; skip_page_column_length &1ca5 e8 INX ; skip_page_column_length &1ca6 a4 b7 LDY &b7 ; edge_and_layer &1ca8 60 RTS # Leave with AX = scenery_sprite_address ; add_column_of_scenery_sprite_to_column_buffer &1ca9 a9 b1 LDA #&b1 ; LDA (&c8),Y ; scenery_sprite_address # Plot with mask &1cab 8d e2 1c STA &1ce2 ; plot_scenery_mask_opcode &1cae a9 c8 LDA #&c8 &1cb0 8d e3 1c STA &1ce3 ; plot_scenery_mask_opcode + 1 &1cb3 68 PLA ; scenery_layer_y ; add_column_of_sprite_to_column_buffer # Called with A = y position &1cb4 20 6c 1c JSR &1c6c ; set_scenery_sprite_address_from_XY &1cb7 85 f8 STA &f8 ; end_of_run_offset ; unpack_scenery_loop &1cb9 c8 INY &1cba b1 ce LDA (&ce),Y ; scenery_sprite_address # Get byte of scenery data &1cbc f0 db BEQ &1c99 ; move_to_next_column # Zero indicates end of column &1cbe aa TAX &1cbf 10 0d BPL &1cce ; is_positive ; is_negativ &1cc1 0a ASL A &1cc2 30 05 BMI &1cc9 ; is_run_length_3 ; is_run_length_1 &1cc4 8a TXA # 10 ...... run length 1 &1cc5 a2 01 LDX #&01 &1cc7 d0 10 BNE &1cd9 ; unpack_scenery_run # Always branches ; is_run_length_3 &1cc9 8a TXA # 11 ...... run length 1 &1cca a2 03 LDX #&03 &1ccc d0 0b BNE &1cd9 ; unpack_scenery_run # Always branches ; is_positive &1cce 0a ASL A &1ccf 10 05 BPL &1cd6 ; is_variable_run_length ; is_run_length_2 &1cd1 8a TXA # 01 ...... run length 2 &1cd2 a2 02 LDX #&02 &1cd4 d0 03 BNE &1cd9 ; unpack_scenery_run # Always branches ; is_variable_run_length &1cd6 c8 INY # 00 ...... use next byte for run length &1cd7 b1 ce LDA (&ce),Y ; scenery_sprite_address ; unpack_scenery_run &1cd9 84 d0 STY &d0 ; scenery_data_offset &1cdb 29 3f AND #&3f &1cdd a8 TAY &1cde b1 b8 LDA (&b8),Y ; pixel_table_address &1ce0 85 f9 STA &f9 ; scenery_pixel_value ; plot_scenery_mask_opcode &1ce2 b1 c8 LDA (&c8),Y ; mask_table_address # if adding scenery # also LDA #&ff # if adding movers &1ce4 85 a7 STA &a7 ; scenery_mask &1ce6 8a TXA &1ce7 18 CLC &1ce8 65 f8 ADC &f8 ; end_of_run_offset &1cea a6 f8 LDX &f8 ; end_of_run_offset &1cec 85 f8 STA &f8 ; end_of_run_offset ; unpack_scenery_run_loop &1cee bd 00 03 LDA &0300,X ; column_buffer &1cf1 25 a7 AND &a7 ; mask &1cf3 45 f9 EOR &f9 ; pixel &1cf5 9d 00 03 STA &0300,X ; column_buffer # Add scenery sprite to background buffer &1cf8 e8 INX &1cf9 e4 f8 CPX &f8 ; end_of_run_offset &1cfb d0 f1 BNE &1cee ; unpack_scenery_run_loop &1cfd a4 d0 LDY &d0 ; scenery_data_offset &1cff d0 b8 BNE &1cb9 ; unpack_scenery_loop # Always branche ; initialise_column_buffer &1d01 a9 00 LDA #&00 &1d03 a2 c8 LDX #&c8 ; initialise_column_buffer_loop &1d05 9d ff 02 STA &02ff,X ; column_buffer - 1 &1d08 ca DEX &1d09 d0 fa BNE &1d05 ; initialise_column_buffer_loop &1d0b 60 RTS ; get_scenery_address_for_layer_Y &1d0c b9 77 12 LDA &1277,Y ; scenery_layer_addresses_high &1d0f 85 b5 STA &b5 ; scenery_data_address_high &1d11 b9 7f 12 LDA &127f,Y ; scenery_layer_addresses_low &1d14 85 b4 STA &b4 ; scenery_data_address_low &1d16 be 57 12 LDX &1257,Y ; scenery_layer_sprite_addresses_high &1d19 60 RTS ; set_scenery_address_for_layer_Y &1d1a a5 b4 LDA &b4 ; scenery_data_address_low &1d1c 99 7f 12 STA &127f,Y ; scenery_layer_addresses_low &1d1f a5 b5 LDA &b5 ; scenery_data_address_high &1d21 99 77 12 STA &1277,Y ; scenery_layer_addresses_high &1d24 60 RTS ; deltas_low_table ; 0 1 2 3 4 5 6 7 8 &1d25 08 10 80 79 20 28 30 78 88 ; deltas_high_table ; 0 1 2 3 4 5 6 7 8 &1d2e 00 00 02 02 00 00 00 02 3e ; add_delta_to_screen_address_in_AX # Called with A = address_low, X = address_high &1d37 20 49 1d JSR &1d49 ; get_screen_address_delta &1d3a 18 CLC &1d3b 65 b6 ADC &b6 ; delta_low &1d3d a8 TAY &1d3e 8a TXA &1d3f 65 b7 ADC &b7 ; delta_high &1d41 10 03 BPL &1d46 ; skip_wraparound &1d43 38 SEC &1d44 e9 40 SBC #&40 ; skip_wraparound &1d46 aa TAX &1d47 98 TYA &1d48 60 RTS # Leave with A = address_low, X = address_high ; get_screen_address_delta &1d49 48 PHA ; tmp_a &1d4a b9 25 1d LDA &1d25,Y ; deltas_low_table &1d4d 85 b6 STA &b6 ; delta_low &1d4f b9 2e 1d LDA &1d2e,Y ; deltas_high_table &1d52 85 b7 STA &b7 ; delta_high &1d54 68 PLA ; tmp_a &1d55 60 RTS ; subtract_delta_from_screen_address_in_AX # Called with A = address_low, X = address_high &1d56 20 49 1d JSR &1d49 ; get_screen_address_delta &1d59 38 SEC &1d5a e5 b6 SBC &b6 ; delta_low &1d5c a8 TAY &1d5d 8a TXA &1d5e e5 b7 SBC &b7 ; delta_high &1d60 c9 40 CMP #&40 &1d62 b0 02 BCS &1d66 ; skip_wraparound &1d64 69 40 ADC #&40 ; skip_wraparound &1d66 aa TAX &1d67 98 TYA ; leave &1d68 60 RTS # Leave with A = address_low, X = address_high ; subtract_Y_rows_from_screen_address_in_AX &1d69 84 76 STY &76 ; rows &1d6b f0 fb BEQ &1d68 ; leave ; consider_next_row &1d6d a8 TAY &1d6e 29 07 AND #&07 &1d70 f0 07 BEQ &1d79 ; next_group &1d72 88 DEY &1d73 98 TYA ; next_row &1d74 c6 76 DEC &76 ; rows &1d76 d0 f5 BNE &1d6d ; consider_next_row &1d78 60 RTS ; next_group &1d79 98 TYA &1d7a a0 03 LDY #&03 ; &0279 &1d7c 20 56 1d JSR &1d56 ; subtract_delta_from_screen_address_in_AX &1d7f 4c 74 1d JMP &1d74 ; next_row ; add_Y_rows_from_screen_address_in_AX &1d82 84 76 STY &76 ; rows ; next_row &1d84 f0 e2 BEQ &1d68 ; leave *** # Leave if no rows to add (not present in standard version) &1d86 a8 TAY &1d87 29 07 AND #&07 &1d89 c9 07 CMP #&07 &1d8b f0 07 BEQ &1d94 ; next_group &1d8d c8 INY &1d8e 98 TYA &1d8f c6 76 DEC &76 ; rows ; to_next_row &1d91 d0 f3 BNE &1d86 ; rows &1d93 60 RTS ; next_group &1d94 98 TYA &1d95 a0 03 LDY #&03 ; &0279 &1d97 20 37 1d JSR &1d37 ; add_delta_to_screen_address_in_AX &1d9a 4c 8f 1d JMP &1d8f ; to_next_row ; calculate_screen_addresses_for_movers_on_edge &1d9d a0 00 LDY #&00 ; MOVER_FIRST # Bug: player is never on edge, so should be &01 ; calculate_screen_addresses_for_movers_on_edge_loop &1d9f 20 a8 1d JSR &1da8 ; calculate_screen_addresses_for_mover_on_edge &1da2 c8 INY &1da3 c0 22 CPY #&22 ; MOVER_LAST + 1 *** # Enhanced version adds tank &1da5 90 f8 BCC &1d9f ; calculate_screen_addresses_for_movers_on_edge_loop &1da7 60 RTS ; calculate_screen_addresses_for_mover_on_edge &1da8 b9 a9 15 LDA &15a9,Y ; movers_x_high &1dab 85 d0 STA &d0 ; mover_x_high &1dad 20 b9 30 JSR &30b9 ; get_mover_Y_type # Returns A = mover type &1db0 aa TAX &1db1 bd d7 16 LDA &16d7,X ; mover_types_width_table &1db4 85 cd STA &cd ; mover_width &1db6 b9 87 15 LDA &1587,Y ; movers_x_low &1db9 a6 cf LDX &cf ; edge # Zero for left edge, non-zero for right edge &1dbb d0 07 BNE &1dc4 ; skip_adding_width &1dbd 18 CLC # Consider right edge of mover for left edge of screen &1dbe 65 cd ADC &cd ; mover_width &1dc0 90 02 BCC &1dc4 ; skip_overflow &1dc2 e6 d0 INC &d0 ; mover_x_high ; skip_overflow ; skip_adding_width &1dc4 c5 b5 CMP &b5 ; edge_x_low # Is the edge of the mover on the edge of the screen? &1dc6 d0 47 BNE &1e0f ; leave &1dc8 a5 d0 LDA &d0 ; mover_x_high &1dca c5 b4 CMP &b4 ; edge_x_high &1dcc d0 41 BNE &1e0f ; leave &1dce a9 c7 LDA #&c7 # If so, calculate the screen address &1dd0 38 SEC &1dd1 f9 cb 15 SBC &15cb,Y ; movers_y &1dd4 84 79 STY &79 ; mover &1dd6 aa TAX &1dd7 29 07 AND #&07 &1dd9 85 d0 STA &d0 ; row_in_group &1ddb 8a TXA &1ddc 4a LSR A &1ddd 4a LSR A &1dde 4a LSR A &1ddf 85 d1 STA &d1 ; groups &1de1 a6 01 LDX &01 ; screen_start_address_high &1de3 a5 00 LDA &00 ; screen_start_address_low ; add_groups_loop &1de5 a0 02 LDY #&02 ; &0280 # Move down a group &1de7 20 37 1d JSR &1d37 ; add_delta_to_screen_address_in_AX &1dea c6 d1 DEC &d1 ; groups &1dec d0 f7 BNE &1de5 ; add_groups_loop &1dee 18 CLC &1def 65 d0 ADC &d0 ; row_in_group &1df1 a4 cf LDY &cf ; edge &1df3 f0 08 BEQ &1dfd ; is_left_edge ; is_right_edge &1df5 a0 07 LDY #&07 ; &0278 # Move to right of group &1df7 20 37 1d JSR &1d37 ; add_delta_to_screen_address_in_AX &1dfa 4c 06 1e JMP &1e06 ; set_mover_screen_address ; is_left_edge &1dfd a0 00 LDY #&00 ; &0008 # Move left a column &1dff 20 56 1d JSR &1d56 ; subtract_delta_from_screen_address_in_AX &1e02 c6 cd DEC &cd ; mover_width &1e04 d0 f7 BNE &1dfd ; find_right_edge_loop ; set_mover_screen_address &1e06 a4 79 LDY &79 ; mover &1e08 99 ed 15 STA &15ed,Y ; movers_screen_address_low &1e0b 8a TXA &1e0c 99 0f 16 STA &160f,Y ; movers_screen_address_high ; leave &1e0f 60 RTS ; consider_plotting_next_column_of_mover &1e10 84 cd STY &cd ; sprite_data_offset &1e12 a5 ce LDA &ce ; screen_address_low &1e14 a6 cf LDX &cf ; screen_address_high &1e16 a0 00 LDY #&00 ; &0008 # Move right a column &1e18 20 37 1d JSR &1d37 ; add_delta_to_screen_address_in_AX &1e1b 85 ce STA &ce ; screen_address_low &1e1d 86 cf STX &cf ; screen_address_high &1e1f 86 3e STX &3e ; column_screen_address_high &1e21 85 3d STA &3d ; column_screen_address_low &1e23 a4 b8 LDY &b8 ; pixel_table_address_low # Zero if sprite is flipped &1e25 d0 11 BNE &1e38 ; not_flipped ; is_flipped &1e27 84 cd STY &cd ; sprite_data_offset &1e29 b1 05 LDA (&05),Y ; mover_sprite_address &1e2b f0 11 BEQ &1e3e ; leave &1e2d a5 05 LDA &05 ; sprite_address_low &1e2f 38 SEC &1e30 f1 05 SBC (&05),Y ; mover_sprite_address # Move back a column of sprite data &1e32 85 05 STA &05 ; sprite_address_low &1e34 b0 02 BCS &1e38 ; skip_page &1e36 c6 06 DEC &06 ; sprite_address_high ; skip_page ; not_flipped &1e38 a6 f8 LDX &f8 ; mover_x_low &1e3a e4 b3 CPX &b3 ; viewport_right_low &1e3c d0 01 BNE &1e3f ; next_column ; leave &1e3e 60 RTS ; next_column &1e3f e8 INX &1e40 86 f8 STX &f8 ; mover_x_low &1e42 a4 cd LDY &cd ; sprite_data_offset &1e44 c8 INY &1e45 4c 04 00 JMP &0004 ; unpack_column_of_sprite ; get_mover_type_and_colour &1e48 a9 04 LDA #&04 ; &0440 = unflipped_green_pixel_table &1e4a 85 b9 STA &b9 ; pixel_table_address_high &1e4c a9 40 LDA #&40 &1e4e 85 b8 STA &b8 ; pixel_table_address_low # Non-zero to indicate not flipped by default &1e50 b9 43 15 LDA &1543,Y ; movers_type_and_colour # Positive if ally, negative if enemy &1e53 10 0e BPL &1e63; not_white &1e55 c9 85 CMP #&85 ; MOVER_TYPE_ENEMY | MOVER_TYPE_HELICOPTER_WITH_MISSILE &1e57 f0 0a BEQ &1e63; not_white &1e59 c9 95 CMP #&95 ; MOVER_TYPE_ENEMY | MOVER_TYPE_HEAVY_GUN *** &1e5b b0 06 BCS &1e63; not_white *** &1e5d c9 87 CMP #&87 ; MOVER_TYPE_ENEMY | MOVER_TYPE_HELICOPTER_WITH_SOLDIER &1e5f f0 02 BEQ &1e63; not_white &1e61 e6 b9 INC &b9 ; pixel_table_address_high # Use white pixel table for most enemies ; not_white &1e63 29 7f AND #&7f &1e65 85 7a STA &7a ; mover_type &1e67 60 RTS ; plot_player &1e68 a0 00 LDY #&00 ; MOVER_PLAYER ; plot_mover &1e6a a9 04 LDA #&04 *** &1e6c 85 f4 STA &f4 ; os_ram_copy_of_currently_selected_rom *** &1e6e 8d 30 fe STA &fe30 ; Paged ROM latch *** &1e71 a5 b2 LDA &b2 ; viewport_left_low &1e73 85 b5 STA &b5 ; edge_x_low &1e75 84 79 STY &79 ; mover &1e77 98 TYA &1e78 f0 06 BEQ &1e80 ; use_mask_table &1e7a a9 a9 LDA #&a9 ; LDA #&ff # Plot without mask &1e7c a2 ff LDX #&ff &1e7e d0 04 BNE &1e84 ; set_mask_table_lookup_opcode # Always branches ; use_mask_table &1e80 a9 b1 LDA #&b1 ; LDA (&c8),Y ; mask_table_address # Plot with mask &1e82 a2 c8 LDX #&c8 ; set_mask_table_lookup_opcode &1e84 85 32 STA &32 ; mask_table_lookup_opcode &1e86 86 33 STX &33 ; mask_table_lookup_opcode + 1 &1e88 20 e1 1f JSR &1fe1 ; get_mover_Y_x &1e8b 20 48 1e JSR &1e48 ; get_mover_type_and_colour # Returns A = mover type &1e8e aa TAX &1e8f 20 8f 20 JSR &208f ; check_if_mover_is_on_screen # Returns carry set if mover not on screen &1e92 b0 d3 BCS &1e67 ; leave &1e94 20 09 1f JSR &1f09 ; get_mover_sprite_and_screen_addresses &1e97 20 ed 1e JSR &1eed ; plot_mover_sprite # Plot first part of mover (e.g. player's legs) &1e9a a4 79 LDY &79 ; mover &1e9c 20 e1 1f JSR &1fe1 ; get_mover_Y_x &1e9f a6 7a LDX &7a ; mover_type &1ea1 bd 83 16 LDA &1683,X ; mover_types_parts *** &1ea4 c9 02 CMP #&02 *** &1ea6 b0 60 BCS &1f08 ; leave # Leave if the mover only uses one sprite &1ea8 b9 65 15 LDA &1565,Y ; movers_frame_and_flip &1eab 29 3f AND #&3f &1ead 7d 14 17 ADC &1714,X ; mover_types_second_sprite_offset &1eb0 aa TAX &1eb1 bd 9f 18 LDA &189f,X ; sprites_y_offset &1eb4 85 78 STA &78 ; y_offset &1eb6 a5 7a LDA &7a ; mover_type &1eb8 18 CLC &1eb9 69 1c ADC #&1c *** # Use mover types &1c - &37 for second part of mover &1ebb aa TAX &1ebc 20 09 1f JSR &1f09 ; get_mover_sprite_and_screen_addresses &1ebf a4 78 LDY &78 ; y_offset &1ec1 20 69 1d JSR &1d69 ; subtract_Y_rows_from_screen_address_in_AX &1ec4 20 ed 1e JSR &1eed ; plot_mover_sprite # Plot second part of mover (e.g. player's torso) &1ec7 a4 79 LDY &79 ; mover &1ec9 20 e1 1f JSR &1fe1 ; get_mover_Y_x &1ecc a6 7a LDX &7a ; mover_type &1ece bd 83 16 LDA &1683,X ; mover_types_parts *** &1ed1 d0 35 BNE &1f08 ; leave *** # Leave if the mover only uses two sprites &1ed3 a5 78 LDA &78 ; y_offset &1ed5 18 CLC &1ed6 69 08 ADC #&08 &1ed8 85 78 STA &78 ; y_offset &1eda a9 00 LDA #&00 &1edc 85 cd STA &cd ; sprite_data_offset &1ede bd 0f 17 LDA &170f,X ; mover_types_third_sprite &1ee1 aa TAX &1ee2 b9 65 15 LDA &1565,Y ; movers_frame_and_flip &1ee5 20 12 1f JSR &1f12 ; get_sprite_and_screen_addresses_for_frame_A &1ee8 a4 78 LDY &78 ; y_offset &1eea 20 69 1d JSR &1d69 ; subtract_Y_rows_from_screen_address_in_AX ; plot_mover_sprite # Plot third part of mover (e.g. player's head) &1eed 85 3d STA &3d ; column_screen_address_low &1eef 86 3e STX &3e ; column_screen_address_high &1ef1 85 ce STA &ce ; screen_address_low &1ef3 86 cf STX &cf ; screen_address_high &1ef5 a9 04 LDA #&04 &1ef7 85 c9 STA &c9 ; mask_table_address_high &1ef9 a5 b8 LDA &b8 ; pixel_table_address_low &1efb 09 80 ORA #&80 &1efd 85 c8 STA &c8 ; mask_table_address_low &1eff a0 01 LDY #&01 &1f01 20 04 00 JSR &0004 ; unpack_column_of_sprite &1f04 a9 40 LDA #&40 &1f06 85 b8 STA &b8 ; pixel_table_address_low ; leave &1f08 60 RTS ; get_mover_sprite_and_screen_addresses # Called with X = mover type &1f09 a9 00 LDA #&00 &1f0b 85 cd STA &cd ; columns_to_clip_from_left &1f0d a4 79 LDY &79 ; mover &1f0f 20 63 20 JSR &2063 ; get_mover_Y_sprite # Returns X = sprite, A = frame and flip ; get_sprite_and_screen_addresses_for_frame_A &1f12 30 11 BMI &1f25 ; is_flipped ; is_unflipped &1f14 bc 13 14 LDY &1413,X ; unflipped_mover_sprite_addresses_low_table &1f17 bd 5f 14 LDA &145f,X ; unflipped_mover_sprite_addresses_high_table &1f1a aa TAX &1f1b 20 56 1f JSR &1f56 ; check_mover_x_against_viewport_left &1f1e b0 1c BCS &1f3c ; set_sprite_address &1f20 20 20 20 JSR &2020 ; clip_unflipped_mover_loop # Returns carry set &1f23 b0 17 BCS &1f3c ; set_sprite_address # Always branches ; is_flipped &1f25 a9 00 LDA #&00 &1f27 85 b8 STA &b8 ; pixel_table_address_low &1f29 bc f7 14 LDY &14f7,X ; flipped_mover_sprite_addresses_low_table &1f2c 84 ce STY &ce ; sprite_address_low &1f2e bd ab 14 LDA &14ab,X ; flipped_mover_sprite_addresses_high_table &1f31 aa TAX &1f32 86 cf STX &cf ; sprite_address_high &1f34 20 56 1f JSR &1f56 ; check_mover_x_against_viewport_left &1f37 b0 03 BCS &1f3c ; set_sprite_address &1f39 20 41 20 JSR &2041 ; clip_flipped_mover_loop ; set_sprite_address &1f3c 84 05 STY &05 ; mover_sprite_address_low &1f3e 86 06 STX &06 ; mover_sprite_address_high &1f40 a4 79 LDY &79 ; mover &1f42 be 0f 16 LDX &160f,Y ; movers_screen_address_high &1f45 b9 ed 15 LDA &15ed,Y ; movers_screen_address_low &1f48 a4 cd LDY &cd ; columns_to_clip_from_left &1f4a f0 09 BEQ &1f55 ; leave ; adjust_screen_address_loop &1f4c a0 00 LDY #&00 ; &0008 # Move right a column &1f4e 20 37 1d JSR &1d37 ; add_delta_to_screen_address_in_AX &1f51 c6 cd DEC &cd ; columns_to_clip_from_left &1f53 d0 f7 BNE &1f4c ; adjust_screen_address_loop ; leave &1f55 60 RTS # Leave with AX = mover_screen_address ; check_mover_x_against_viewport_left &1f56 a5 c5 LDA &c5 ; mover_x_high &1f58 c5 ba CMP &ba ; viewport_left_high &1f5a d0 04 BNE &1f60 ; leave &1f5c a5 f8 LDA &f8 ; mover_x_low &1f5e c5 b2 CMP &b2 ; viewport_left_low ; leave &1f60 60 RTS # Leave with carry set if mover_x >= viewport_left ; add_movers_to_column_buffer &1f61 a9 04 LDA #&04 *** &1f63 85 f4 STA &f4 ; os_ram_copy_of_currently_selected_rom *** &1f65 8d 30 fe STA &fe30 ; Paged ROM latch *** &1f68 a9 a9 LDA #&a9 ; LDA #&ff # Plot without mask &1f6a 8d e2 1c STA &1ce2 ; plot_scenery_mask_opcode &1f6d a9 ff LDA #&ff &1f6f 8d e3 1c STA &1ce3 ; plot_scenery_mask_opcode + 1 &1f72 a0 01 LDY #&01 ; MOVER_FIRST + 1 &1f74 84 03 STY &03 ; mover_to_update ; add_movers_to_column_buffer_loop &1f76 a4 03 LDY &03 ; mover_to_update &1f78 20 48 1e JSR &1e48 ; get_mover_type_and_colour # Returns A = mover type &1f7b 20 ec 1f JSR &1fec ; check_if_mover_is_on_edge # Returns carry set if mover is on edge &1f7e 90 4d BCC &1fcd ; consider_next_mover &1f80 a5 f9 LDA &f9 ; mover_y &1f82 20 b4 1c JSR &1cb4 ; add_column_of_sprite_to_column_buffer # Add first part of mover (e.g. player's legs) &1f85 20 da 1f JSR &1fda ; get_mover_x_and_y &1f88 a6 7a LDX &7a ; mover_type &1f8a bd 83 16 LDA &1683,X ; mover_types_parts *** &1f8d c9 02 CMP #&02 *** &1f8f b0 3c BCS &1fcd ; consider_next_mover # Finish if the mover only uses one sprite &1f91 a5 f9 LDA &f9 ; mover_y &1f93 b9 65 15 LDA &1565,Y ; movers_frame_and_flip &1f96 29 3f AND #&3f &1f98 7d 14 17 ADC &1714,X ; mover_types_second_sprite_offset &1f9b aa TAX &1f9c a5 f9 LDA &f9 ; mover_y &1f9e 7d 9f 18 ADC &189f,X ; sprites_y_offset &1fa1 85 78 STA &78 ; y_offset &1fa3 a5 7a LDA &7a ; mover_type &1fa5 18 CLC &1fa6 69 1c ADC #&1c *** # Use mover types &14 - &37 for second part of mover &1fa8 aa TAX &1fa9 20 14 20 JSR &2014 ; calculate_sprite_address_for_mover_on_edge &1fac a5 78 LDA &78 ; y_offset &1fae 20 b4 1c JSR &1cb4 ; add_column_of_sprite_to_column_buffer # Add second part of mover (e.g. player's torso) &1fb1 20 da 1f JSR &1fda ; get_mover_x_and_y &1fb4 a6 7a LDX &7a ; mover_type &1fb6 bd 83 16 LDA &1683,X ; mover_types_parts *** &1fb9 d0 12 BNE &1fcd ; consider_next_mover *** # Finish if the mover only uses two sprites &1fbb bd 0f 17 LDA &170f,X ; mover_types_third_sprite &1fbe aa TAX &1fbf b9 65 15 LDA &1565,Y ; movers_frame_and_flip &1fc2 20 17 20 JSR &2017 ; calculate_sprite_address_for_mover_on_edge_from_sprite &1fc5 a5 78 LDA &78 ; y_offset &1fc7 18 CLC &1fc8 69 08 ADC #&08 &1fca 20 b4 1c JSR &1cb4 ; add_column_of_sprite_to_column_buffer # Add third part of mover (e.g. player's head) ; consider_next_mover &1fcd a9 40 LDA #&40 &1fcf 85 b8 STA &b8 ; pixel_table_address_low # Set to &40 to use unflipped pixel table by default &1fd1 e6 03 INC &03 ; mover_to_update &1fd3 a4 03 LDY &03 ; mover_to_update &1fd5 c0 22 CPY #&22 ; MOVER_LAST + 1 *** # Enhanced version adds tank &1fd7 90 9d BCC &1f76 ; add_movers_to_column_buffer_loop &1fd9 60 RTS ; get_mover_x_and_y &1fda a4 03 LDY &03 ; mover_to_update ; get_mover_Y_x_and_y &1fdc b9 cb 15 LDA &15cb,Y ; movers_y &1fdf 85 f9 STA &f9 ; mover_y ; get_mover_Y_x &1fe1 b9 87 15 LDA &1587,Y ; movers_x_low &1fe4 85 f8 STA &f8 ; mover_x_low &1fe6 b9 a9 15 LDA &15a9,Y ; movers_x_high &1fe9 85 c5 STA &c5 ; mover_x_high &1feb 60 RTS ; check_if_mover_is_on_edge &1fec 20 da 1f JSR &1fda ; get_mover_x_and_y &1fef a6 7a LDX &7a ; mover_type &1ff1 a4 c5 LDY &c5 ; mover_x_high &1ff3 c4 b4 CPY &b4 ; edge_x_high &1ff5 90 0a BCC &2001 ; check_x_max &1ff7 f0 02 BEQ &1ffb ; check_x_low ; leave_with_carry_clear &1ff9 18 CLC # Leave with carry clear to indicate mover not on edge &1ffa 60 RTS ; check_x_low &1ffb a5 b5 LDA &b5 ; edge_x_low &1ffd c5 f8 CMP &f8 ; mover_x_low &1fff 90 f8 BCC &1ff9 ; leave_with_carry_clear ; check_x_max &2001 a5 f8 LDA &f8 ; mover_x_low &2003 18 CLC &2004 7d d7 16 ADC &16d7,X ; mover_types_width_table &2007 90 01 BCC &200a ; skip_overflow &2009 c8 INY ; skip_overflow &200a c4 b4 CPY &b4 ; edge_x_high &200c 90 eb BCC &1ff9 ; leave_with_carry_clear &200e d0 04 BNE &2014 ; is_on_edge &2010 c5 b5 CMP &b5 ; edge_x_low &2012 90 e5 BCC &1ff9 ; leave_with_carry_clear ; calculate_sprite_address_for_mover_on_edge &2014 20 61 20 JSR &2061 ; get_mover_sprite # Returns X = sprite, A = frame and flip &2017 30 1a BMI &2033 ; is_flipped ; is_unflipped &2019 bc 13 14 LDY &1413,X ; unflipped_mover_sprite_addresses_low_table &201c bd 5f 14 LDA &145f,X ; unflipped_mover_sprite_addresses_high_table &201f aa TAX ; clip_unflipped_mover_loop &2020 a5 f8 LDA &f8 ; mover_x_low &2022 c5 b5 CMP &b5 ; edge_x_low &2024 f0 0b BEQ &2031 ; leave_with_carry_set &2026 20 88 1c JSR &1c88 ; move_to_next_column_in_XY &2029 a8 TAY &202a e6 f8 INC &f8 ; mover_x_low &202c e6 cd INC &cd ; columns_to_clip_from_left &202e 4c 20 20 JMP &2020 ; clip_unflipped_mover_loop ; leave_with_carry_set &2031 38 SEC # Leave with carry set to indicate mover is on edge &2032 60 RTS ; is_flipped &2033 bd f7 14 LDA &14f7,X ; flipped_mover_sprite_addresses_low_table &2036 85 ce STA &ce ; sprite_address_low &2038 bd ab 14 LDA &14ab,X ; flipped_mover_sprite_addresses_high_table &203b 85 cf STA &cf ; sprite_address_high &203d a9 00 LDA #&00 &203f 85 b8 STA &b8 ; pixel_table_address_low # Set to zero to use flipped pixel table ; clip_flipped_mover_loop &2041 a0 00 LDY #&00 &2043 a5 f8 LDA &f8 ; mover_x_low &2045 c5 b5 CMP &b5 ; edge_x_low &2047 f0 12 BEQ &205b ; leave_with_sprite_address_and_carry_set &2049 a5 ce LDA &ce ; sprite_address_low &204b 38 SEC &204c f1 ce SBC (&ce),Y ; sprite_address # Move back a column of sprite data &204e 85 ce STA &ce ; sprite_address_low &2050 b0 02 BCS &2054 ; skip_page &2052 c6 cf DEC &cf ; sprite_address_high ; skip_page &2054 e6 f8 INC &f8 ; mover_x_low &2056 e6 cd INC &cd ; columns_to_clip_from_left &2058 4c 41 20 JMP &2041 ; clip_flipped_mover_loop ; leave_with_sprite_address_and_carry_set &205b a4 ce LDY &ce ; sprite_address_low &205d a6 cf LDX &cf ; sprite_address_high &205f 38 SEC # Leave with carry set to indicate mover is on edge &2060 60 RTS ; get_mover_sprite &2061 a4 03 LDY &03 ; mover_to_update ; get_mover_Y_sprite &2063 b9 65 15 LDA &1565,Y ; movers_frame_and_flip &2066 48 PHA ; mover_frame_and_flip &2067 29 3f AND #&3f &2069 18 CLC &206a 7d 9f 16 ADC &169f,X ; mover_types_first_sprite_animation_offsets &206d a8 TAY &206e be 1f 18 LDX &181f,Y ; animation_table &2071 68 PLA ; mover_frame_and_flip &2072 60 RTS # Leave with X = sprite, A = mover frame and flip ; change_pixel_tables # Called with A = &14 (KC) or A = &55 (Kf) &2073 85 ce STA &ce ; value &2075 8d 54 04 STA &0454 ; unflipped_green_pixel_table + &14 # KC &2078 8d 28 04 STA &0428 ; flipped_green_pixel_table + &28 &207b 0a ASL A &207c 8d 14 04 STA &0414 ; flipped_green_pixel_table + &14 &207f 8d 68 04 STA &0468 ; unflipped_green_pixel_table + &28 # CK &2082 45 ce EOR &ce ; value &2084 8d 3c 04 STA &043c ; flipped_green_pixel_table + &3c &2087 8d 7c 04 STA &047c ; unflipped_green_pixel_table + &3c # CC &208a 60 RTS ; check_if_mover_Y_is_on_screen &208b 20 b9 30 JSR &30b9 ; get_mover_Y_type # Returns A = mover type &208e aa TAX ; check_if_mover_is_on_screen &208f a4 c5 LDY &c5 ; mover_x_high &2091 c4 bb CPY &bb ; viewport_right_high &2093 90 0a BCC &209f ; is_left_of_viewport_right &2095 f0 02 BEQ &2099 ; check_x_low ; leave_with_carry_set &2097 38 SEC # Leave with carry set to indicate mover not on screen &2098 60 RTS ; check_x_low &2099 a5 b3 LDA &b3 ; viewport_right_low &209b c5 f8 CMP &f8 ; mover_x_low &209d 90 f8 BCC &2097 ; leave_with_carry_set ; is_left_of_viewport_right &209f bd d7 16 LDA &16d7,X ; mover_types_width_table &20a2 18 CLC &20a3 65 f8 ADC &f8 ; mover_x_low &20a5 90 01 BCC &20a8 ; skip_overflow &20a7 c8 INY ; skip_overflow &20a8 c4 ba CPY &ba ; viewport_left_high &20aa 90 eb BCC &2097 ; leave_with_carry_set &20ac d0 04 BNE &20b2 ; leave_with_carry_clear &20ae c5 b2 CMP &b2 ; viewport_left_low &20b0 90 e5 BCC &2097 ; leave_with_carry_set ; leave_with_carry_clear &20b2 18 CLC # Leave with carry clear to indicate mover is on screen &20b3 60 RTS ; completion_screen &20b4 a0 c9 LDY #&c9 ; &22c9 = completion_screen_text &20b6 a2 22 LDX #&22 &20b8 20 e7 32 JSR &32e7 ; text_screen ; game_over_screen &20bb a0 59 LDY #&59 ; &3359 = game_over_text &20bd a2 33 LDX #&33 &20bf 20 e7 32 JSR &32e7 ; text_screen ; to_title_screen &20c2 20 8f 22 JSR &228f ; reset_screen_scroll *** &20c5 a9 07 LDA #&07 *** # Set colour 0 to black &20c7 85 94 STA &94 ; bottom_palette_value *** &20c9 85 9f STA &9f ; top_palette_value *** &20cb 20 a2 33 JSR &33a2 ; convert_score_to_numbers *** &20ce a9 05 LDA #&05 *** &20d0 85 f4 STA &f4 ; os_ram_copy_of_currently_selected_rom *** &20d2 8d 30 fe STA &fe30 ; Paged ROM latch *** &20d5 20 22 8c JSR &8c22 ; title_screen *** ; start_game &20d8 a9 01 LDA #&01 *** &20da 85 9f STA &9f ; top_palette_value *** # Set colour 0 to cyan &20dc a2 17 LDX #&17 ; MOVER_FIRST_ALLY_HELICOPTER - 1 # Remove all movers except for ally helicopters &20de a9 ff LDA #&ff ; initialise_movers_loop &20e0 9d a9 15 STA &15a9,X ; movers_x_high # Set to negative to indicate no mover in slot &20e3 ca DEX &20e4 10 fa BPL &20e0 ; initialise_movers_loop &20e6 a2 21 LDX #&21 ; MOVER_LAST_ALLY_HELICOPTER *** # Enhanced version adds tank ; initialise_player_helicopters_loop &20e8 bd a9 18 LDA &18a9,X ; player_helicopters_type - &18 &20eb 9d 43 15 STA &1543,X ; movers_type_and_colour &20ee bd b3 18 LDA &18b3,X ; player_helicopters_initial_x_low - &18 &20f1 9d 87 15 STA &1587,X ; movers_x_low &20f4 bd bd 18 LDA &18bd,X ; player_helicopters_initial_x_high - &18 &20f7 9d a9 15 STA &15a9,X ; movers_x_high &20fa a9 02 LDA #&02 &20fc 9d 60 09 STA &0960,X ; movers_helicopter_fuel_high &20ff a9 18 LDA #&18 &2101 9d cb 15 STA &15cb,X ; movers_y &2104 9e 65 15 STZ &1565,X ; movers_frame_and_flip *** # 65C02 opcode, not zeroed in standard version &2107 ca DEX &2108 e0 17 CPX #&17 ; MOVER_FIRST_ALLY_HELICOPTER - 1 &210a d0 dc BNE &20e8 ; initialise_player_helicopters_loop &210c a9 26 LDA #&26 # Set player starting position &210e 8d 87 15 STA &1587 ; movers_x_low &2111 a9 18 LDA #&18 &2113 8d cb 15 STA &15cb ; movers_y &2116 a9 0a LDA #&0a ; MOVER_FIRST_HELICOPTER &2118 85 80 STA &80 ; helicopter_to_update &211a a9 09 LDA #&09 # Player starts with nine lives &211c 85 95 STA &95 ; lives &211e a9 04 LDA #&04 &2120 85 b9 STA &b9 ; pixel_table_address_high &2122 a9 40 LDA #&40 &2124 85 b8 STA &b8 ; pixel_table_address_low &2126 a2 01 LDX #&01 &2128 86 7f STX &7f ; new_movers_offset &212a 86 c0 STX &c0 ; movers_to_update_base &212c ca DEX ; 0 &212d 86 7e STX &7e ; trigger_offset &212f 86 82 STX &82 ; player_y_velocity &2131 86 84 STX &84 ; player_helicopter # Set to zero to indicate not in helicopter &2133 86 8e STX &8e ; player_firing_cooldown &2135 86 8f STX &8f ; player_helicopter_explosion # Set to zero to indicate not exploding &2137 8e a9 15 STX &15a9 ; movers_x_high &213a 8e 43 15 STX &1543 ; movers_type_and_colour ; initialise_enemies_loop &213d 86 78 STX &78 ; initial_new_movers_offset &213f 20 c9 31 JSR &31c9 ; add_new_movers &2142 a6 78 LDX &78 ; initial_new_movers_offset &2144 e8 INX &2145 e0 03 CPX #&03 &2147 90 f4 BCC &213d ; initialise_enemies_loop &2149 a9 02 LDA #&02 # Set colour 0 to magenta &214b 85 94 STA &94 ; bottom_palette_value &214d a0 05 LDY #&05 &214f a9 6c LDA #&6c ; "0" ; initialise_score_loop &2151 99 6d 33 STA &336d,Y ; game_over_text + &14 &2154 88 DEY &2155 10 fa BPL &2151 ; initialise_score_loop &2157 20 fb 21 JSR &21fb ; scroll_into_world &215a 20 6f 2c JSR &2c6f ; buffer_player &215d a0 00 LDY #&00 ; MOVER_PLAYER &215f 20 6a 1e JSR &1e6a ; plot_mover &2162 20 7e 32 JSR &327e ; plot_lives &2165 ad b1 21 LDA &21b1 ; observer_mode *** # Non-zero if observer mode &2168 f0 48 BEQ &21b2 ; main_game_loop *** &216a a9 05 LDA #&05 *** &216c 8d 56 12 STA &1256 ; unused_variable *** # Unused variable ; observer_mode_loop *** &216f a2 86 LDX #&86 ; RIGHT *** &2171 20 f1 21 JSR &21f1 ; check_for_keypress *** &2174 d0 10 BNE &2186 ; not_scrolling_right *** &2176 ee 87 15 INC &1587 ; movers_x_low *** &2179 d0 03 BNE &217e ; skip_overflow *** &217b ee a9 15 INC &15a9 ; movers_x_high *** ; skip_overflow *** &217e 20 c9 1a JSR &1ac9 ; scroll_screen_right *** &2181 20 7c 1b JSR &1b7c ; update_screen *** &2184 80 e9 BRA &216f ; observer_mode_loop *** # 65C02 opcode ; not_scrolling_right *** &2186 a2 e6 LDX #&e6 ; LEFT *** &2187 20 f1 21 JSR &21f1 ; check_for_keypress *** &218b d0 15 BNE &21a2 ; not_scrolling_left *** &218d ce 87 15 DEC &1587 ; movers_x_low *** &2190 ad 87 15 LDA &1587 ; movers_x_low *** &2193 c9 ff CMP #&ff *** &2195 d0 03 BNE &219a ; skip_underflow *** &2197 ce a9 15 DEC &15a9 ; movers_x_high *** ; skip_underflow *** &219a 20 df 18 JSR &18df ; scroll_screen_left *** &219d 20 7c 1b JSR &1b7c ; update_screen *** &21a0 80 cd BRA &216f ; observer_mode_loop *** # 65C02 opcode ; not_scrolling_left *** &21a2 a2 8f LDX #&8f ; ESCAPE *** &21a4 20 f1 21 JSR &21f1 ; check_for_keypress *** &21a7 d0 c6 BNE &216f ; observer_mode_loop *** &21a9 a9 00 LDA #&00 *** &21ab 8d b1 21 STA &21b1 ; observer_mode *** &21ae 4c c2 20 JMP &20c2 ; to_title_screen *** ; observer_mode *** &21b1 00 *** ; main_game_loop &21b2 a2 8f LDX #&8f &21b4 20 f1 21 JSR &21f1 ; check_for_keypress &21b7 f0 08 BEQ &21c1 &21b9 a5 95 LDA &95 ; lives &21bb 10 07 BPL &21c4 ; not_game_over &21bd a5 96 LDA &96 ; game_over_cooldown &21bf 10 27 BPL &21e8 ; not_at_headquarters &21c1 4c bb 20 JMP &20bb ; game_over_screen ; not_game_over &21c4 20 65 2f JSR &2f65 ; check_for_player_input &21c7 a5 c2 LDA &c2 ; keys_pressed_bitmap # Negative if &80 (KEY_PAUSE) set &21c9 10 09 BPL &21d4 ; not_paused ; wait_for_unpause &21cb 20 65 2f JSR &2f65 ; check_for_player_input &21ce a5 c2 LDA &c2 ; keys_pressed_bitmap &21d0 29 7f AND #&7f ; !KEY_PAUSE &21d2 f0 f7 BEQ &21cb ; wait_for_unpause ; not_paused &21d4 20 af 25 JSR &25af ; update_player &21d7 ad 87 15 LDA &1587 ; movers_x_low &21da c9 ed CMP #&ed &21dc d0 0a BNE &21e8 ; not_at_headquarters &21de ad a9 15 LDA &15a9 ; movers_x_high &21e1 c9 1c CMP #&1c &21e3 d0 03 BNE &21e8 ; not_at_headquarters &21e5 4c b4 20 JMP &20b4 ; completion_screen ; not_at_headquarters &21e8 20 a2 29 JSR &29a2 ; update_projectiles &21eb 20 ba 27 JSR &27ba ; update_movers &21ee 4c b2 21 JMP &21b2 ; main_game_loop ; check_for_keypress &21f1 a0 ff LDY #&ff &21f3 a9 81 LDA #&81 ; Scan for a particular key &21f5 20 f4 ff JSR &fff4 ; OSBYTE &21f8 e0 ff CPX #&ff &21fa 60 RTS ; scroll_into_world &21fb 20 8f 22 JSR &228f ; reset_screen_scroll &21fe a2 07 LDX #&07 *** &2200 8e 56 12 STX &1256 ; unused_variable # Unused variable &2203 20 79 22 JSR &2279 ; initialise_scenery_layer_addresses &2206 20 79 22 JSR &2279 ; initialise_scenery_layer_addresses &2209 a2 01 LDX #&01 ; R1: Number of characters per line &220b 8e 00 fe STX &fe00 ; video register number &220e ca DEX ; 0 # Hide screen &220f 8e 01 fe STX &fe01 ; video register value &2212 a9 4f LDA #&4f &2214 85 02 STA &02 ; count ; scroll_into_world_loop &2216 20 c9 1a JSR &1ac9 ; scroll_screen_right &2219 20 83 1b JSR &1b83 ; update_screen_without_delay &221c c6 02 DEC &02 ; count &221e d0 f6 BNE &2216 ; scroll_into_world_loop &2220 a2 03 LDX #&03 *** # Enhanced version has extra layer for clouds &2222 20 79 22 JSR &2279 ; initialise_scenery_layer_addresses &2225 a2 00 LDX #&00 &2227 8d 4f 1c STA &1c4f ; ground_left_x_low &222a 20 c9 1a JSR &1ac9 ; scroll_screen_right &222d 20 83 1b JSR &1b83 ; update_screen_without_delay &2230 20 42 22 JSR &2242 ; wait_for_vsync &2233 a2 01 LDX #&01 ; R1: Number of characters per line &2235 8e 00 fe STX &fe00 ; video register number &2238 a9 50 LDA #&50 # Display screen &223a 8d 01 fe STA &fe01 ; video register value &223d ca DEX ; 0 &223e 8e 56 12 STX &1256 ; unused_variable # Unused variable &2241 60 RTS ; wait_for_vsync &2242 a9 13 LDA #&13 ; Wait for vertical retrace &2244 20 f4 ff JSR &fff4 ; OSBYTE *** &2247 ad 4b fe LDA &fe4b ; System VIA auxiliary control register*** &224a 29 df AND #&df *** # Set System VIA timer 2 to one-shot mode &224c 8d 6b fe STA &fe6b ; User VIA auxiliary control register *** &224f a9 20 LDA #&20 *** # Enable System VIA timer 2 interrupts &2251 8d 6e fe STA &fe6e ; User VIA interrupt enable register *** &2254 a9 ff LDA #&ff *** &2256 8d 68 fe STA &fe68 ; User VIA timer 2 counter LSB *** &2259 8d 69 fe STA &fe69 ; User VIA timer 2 counter MSB *** &225c ad 6b fe LDA &fe6b ; User VIA auxiliary control register *** &225f 29 3f AND #&3f *** # Set User VIA timer 1 to one-shot mode &2261 8d 6b fe STA &fe6b ; User VIA auxiliary control register *** &2264 a9 00 LDA #&00 *** # Do nothing &2266 8d 6e fe STA &fe6e ; User VIA interrupt enable register *** &2269 a9 00 LDA #&00 *** &226b 8d 64 fe STA &fe64 ; User VIA timer 1 counter LSB *** &226e a9 29 LDA #&29 *** &2270 8d 65 fe STA &fe65 ; User VIA timer 1 counter MSB *** &2273 a9 01 LDA #&01 *** # Set colour 0 to cyan for sky &2275 8d 21 fe STA &fe21 ; video ULA palette register *** &2278 60 RTS *** ; initialise_scenery_layer_addresses &2279 a0 03 LDY #&03 ; initialise_scenery_layer_addresses_loop &227b b9 c1 22 LDA &22c1,Y ; initial_scenery_layer_addresses_high &227e 9d 77 12 STA &1277,X ; scenery_layer_addresses_high &2281 b9 c5 22 LDA &22c5,Y ; initial_scenery_layer_addresses_low &2284 9d 7f 12 STA &127f,X ; scenery_layer_addresses_low &2287 9e 52 12 STZ &1257,X ; scenery_layer_sprite_addresses_high # 65C02 opcode &228a ca DEX &228b 88 DEY &228c 10 ed BPL &227b ; initialise_scenery_layer_addresses_loop &228e 60 RTS ; reset_screen_scroll &228f a2 0d LDX #&0d ; R13: Displayed screen start address register (low) &2291 8e 00 fe STX &fe00 ; video register number &2294 a0 00 LDY #&00 &2296 84 b1 STY &b1 ; crtc_start_address_low &2298 8c 01 fe STY &fe01 ; video register value &229b ca DEX ; &0c ; R12: Displayed screen start address register (high) &229c 8e 00 fe STX &fe00 ; video register number &229f a9 08 LDA #&08 &22a1 85 b0 STA &b0 ; crtc_start_address_high &22a3 8d 01 fe STA &fe01 ; video register value &22a6 88 DEY &22a7 84 b3 STY &b3 ; viewport_right_low &22a9 84 ba STY &ba ; viewport_left_high &22ab 84 bb STY &bb ; viewport_right_high &22ad 8c 50 1c STY &1c50 ; ground_right_x_low &22b0 a9 b0 LDA #&b0 &22b2 85 b2 STA &b2 ; viewport_left_low &22b4 a2 01 LDX #&01 ; reset_screen_start_address_loop &22b6 bd bf 22 LDA &22bf,X ; initial_screen_start_address &22b9 95 00 STA &00,X ; screen_start_address &22bb ca DEX &22bc 10 f8 BPL &22b6 ; reset_screen_start_address_loop &22be 60 RTS ; initial_screen_start_address &22bf 00 40 ; initial_scenery_layer_addresses_high # &00 : &0e02 = scenery_data_one ; 0 1 2 # &01 : &0fd9 = scenery_data_two &22c1 0e 0f c3 0e *** # &02 : &c300 = os_rom + &300 (used for mountains) ; initial_scenery_layer_addresses_low # &03 : &0e02 = scenery_data_one (address unused) &22c5 02 d9 00 02 *** # Enhanced version has extra layer for clouds ; completion_screen_text &22c9 78 45 ; at &4578 &22cb 2a 18 48 48 18 36 30 60 06 36 2a 3c 24 12 4e 12 ; "MISSION COMPLETED" &22db 0c &22dc fe ; end of string &22dd 38 57 ; at &5738 &22df 06 36 0c 12 60 54 18 06 4e 36 42 5a ; "CODE VICTORY" &22eb ff ; end of text ; consider_adding_player_bullet_or_grenade &22ec 29 10 AND #&10 ; KEY_FIRE &22ee f0 30 BEQ &2320 ; consider_adding_player_grenade &22f0 ad ba 15 LDA &15ba ; movers_x_high + &11 (MOVER_PLAYER_BULLET) &22f3 10 2b BPL &2320 ; consider_adding_player_grenade # Positive if a bullet already in slot &22f5 a9 06 LDA #&06 ; FRAME_SHOOTING &22f7 85 81 STA &81 ; frame &22f9 85 a0 STA &a0 ; firing_frame &22fb a5 84 LDA &84 ; player_helicopter # Non-zero if in helicopter &22fd d0 05 BNE &2304 ; add_player_bullet &22ff a9 04 LDA #&04 &2301 85 8e STA &8e ; player_firing_cooldown &2303 60 RTS ; add_player_bullet &2304 a2 05 LDX #&05 ; MOVER_PLAYER_BULLET - &c &2306 86 86 STX &86 ; projectile_slot &2308 e8 INX ; 6 ; FRAME_SHOOTING &2309 86 a0 STX &a0 ; firing_frame &230b ae 43 15 LDX &1543 ; movers_type_and_colour &230e 20 55 2b JSR &2b55 ; add_bullet # Returns carry set if bullet couldn't be added &2311 b0 41 BCS &2354 ; leave &2313 a9 0c LDA #&0c &2315 8d 7c 16 STA &167c ; projectiles_ttl - &c + &11 (MOVER_PLAYER_BULLET) ; plot_bullet_and_play_sound &2318 20 2c 30 JSR &302c ; plot_projectile &231b a9 20 LDA #&20 # Play sound for firing bullet &231d 4c 8a 2f JMP &2f8a ; play_sound ; consider_adding_player_grenade &2320 a5 c2 LDA &c2; keys_pressed_bitmap &2322 29 20 AND #&20 ; KEY_GRENADE &2324 f0 2e BEQ &2354 ; leave &2326 a5 84 LDA &84 ; player_helicopter # Zero if player not in helicopter &2328 f0 07 BEQ &2331 ; add_player_grenade &232a ad cb 15 LDA &15cb ; movers_y &232d c9 30 CMP #&30 # Helicopter can't drop bombs if too low &232f 90 23 BCC &2354 ; leave ; add_player_grenade &2331 a2 00 LDX #&00 ; MOVER_PLAYER_GRENADE - &c &2333 bd b5 15 LDA &15b5,X ; movers_x_high + &c (MOVER_PLAYER_GRENADE) &2336 10 1c BPL &2354 ; leave &2338 86 86 STX &86 ; projectile_slot &233a ae 43 15 LDX &1543 ; movers_type_and_colour &233d 20 7b 2b JSR &2b7b ; add_new_grenade_to_slot &2340 b0 12 BCS &2354 ; leave &2342 a6 84 LDX &84 ; player_helicopter # Zero if player not in helicopter &2344 f0 07 BEQ &234d ; skip_setting_velocity &2346 a5 82 LDA &82 ; player_y_velocity &2348 10 03 BPL &234d ; skip_setting_velocity &234a 99 5f 16 STA &165f,Y ; projectiles_y_velocity ; skip_setting_velocity &234d a9 0c LDA #&0c ; FRAME_THROWING &234f 85 81 STA &81 ; frame &2351 20 63 32 JSR &3263 ; plot_grenade_and_play_sound ; leave &2354 60 RTS ; add_enemy_helicopters # Called with A = viewport_right_high &2355 85 78 STA &78 ; right_high &2357 0a ASL A &2358 a8 TAY &2359 a2 0a LDX #&0a ; MOVER_FIRST_HELICOPTER ; add_enemy_helicopters_loop &235b bd f6 0d LDA &0df6,X ; enemy_helicopters_initial_x - &a &235e 9d 87 15 STA &1587,X ; movers_x_low &2361 38 SEC &2362 e9 28 SBC #&28 &2364 9d 93 2f STA &2f93,X ; enemy_helicopters_minimum_x_low - &a &2367 18 CLC &2368 69 64 ADC #&64 &236a 9d 91 2f STA &2f91,X ; enemy_helicopters_maximum_x_low - &a &236d a5 78 LDA &78 ; right_high &236f 9d a9 15 STA &15a9,X ; movers_x_high &2372 8a TXA &2373 18 CLC &2374 65 78 ADC &78 ; right_high &2376 a8 TAY &2377 b9 00 0e LDA &0e00,Y *** # Use binary as as pseudo-random stream for enemy helicopters &237a 29 07 AND #&07 &237c a8 TAY &237d b9 3a 12 LDA &123a,Y ; new_helicopter_types &2380 9d 43 15 STA &1543,X ; movers_type_and_colour &2383 ad 68 fe LDA &fe68 ; User VIA timer 2 counter LSB &2386 29 1f AND #&1f # Use random height for helicopter &2388 18 CLC &2389 69 73 ADC #&73 &238b 9d cb 15 STA &15cb,X ; movers_y &238e 9e 65 15 STZ &1565,X ; movers_frame_and_flip *** # 65C02 opcode &2391 c8 INY &2392 e8 INX &2393 e0 0c CPX #&0c ; MOVER_LAST_HELICOPTER + 1 &2395 90 c4 BCC &235b ; add_enemy_helicopters_loop &2397 60 RTS ; animate_mover &2398 a9 80 LDA #&80 &239a 85 8d STA &8d ; hostile_mover # Set to negative to indicate no hostile mover &239c 85 81 STA &81 ; mover_had_hostile_collision # Set to negative to indicate no hostile collision &239e 20 b7 30 JSR &30b7 ; get_mover_type # Returns A = mover type &23a1 c9 0d CMP #&0d ; MOVER_TYPE_SKELETON &23a3 f0 24 BEQ &23c9 ; skip_animation &23a5 aa TAX &23a6 98 TYA *** &23a7 d0 08 BNE &23b1 ; not_player *** ; is_player *** &23a9 a5 84 LDA &84 ; player_helicopter *** # Zero if player not in helicopter &23ab f0 04 BEQ &23b1 ; not_player *** &23ad a5 97 LDA &97 ; helicopter_fuel_high *** &23af 30 18 BMI &23c9 ; skip_animation *** # Don't animate player helicopter if out of fuel ; not_player &23b1 bd 30 17 LDA &1730,X ; mover_types_animation_frames &23b4 85 c6 STA &c6 ; frames &23b6 b9 65 15 LDA &1565,Y ; movers_frame_and_flip &23b9 29 7f AND #&7f &23bb aa TAX &23bc e8 INX &23bd e4 c6 CPX &c6 ; frames &23bf 90 02 BCC &23c3 ; skip_wraparound &23c1 a2 00 LDX #&00 ; skip_wraparound &23c3 8a TXA &23c4 05 7b ORA &7b ; flip &23c6 99 65 15 STA &1565,Y ; movers_frame_and_flip ; skip_animation &23c9 b9 cb 15 LDA &15cb,Y ; movers_y &23cc 60 RTS ; move_mover_right &23cd a5 f8 LDA &f8 ; mover_x_low &23cf 18 CLC &23d0 65 7c ADC &7c ; x_delta &23d2 aa TAX &23d3 a5 c5 LDA &c5 ; mover_x_high &23d5 69 00 ADC #&00 &23d7 a8 TAY &23d8 20 ec 23 JSR &23ec ; check_for_collision_after_horizontal_move # Returns carry set if hostile collision occurred &23db b0 08 BCS &23e5 ; skip_changing_screen_address &23dd a4 7c LDY &7c ; x_delta &23df 88 DEY &23e0 30 03 BMI &23e5 ; skip_changing_screen_address &23e2 20 37 1d JSR &1d37 ; add_delta_to_screen_address_in_AX ; skip_changing_screen_address &23e5 85 c2 STA &c2 ; mover_screen_address_low &23e7 86 c3 STX &c3 ; mover_screen_address_high &23e9 4c 7b 1c JMP &1c7b ; use_viewport_left_as_edge *** # JSR use_viewport_left_as_edge : RTS in standard version ; check_for_collision_after_horizontal_move &23ec 8a TXA &23ed 20 47 28 JSR &2847 ; check_for_mover_collision_with_movers # Returns carry set if collision, X = mover collided with &23f0 20 08 24 JSR &2408 ; check_for_hostile_collision # Returns carry set if collision was hostile &23f3 90 0e BCC &2403 ; not_hostile &23f5 c6 81 DEC &81 ; mover_had_hostile_collision # Set to positive to indicate hostile collisio &23f7 b9 87 15 LDA &1587,Y ; movers_x_low &23fa 85 f8 STA &f8 ; mover_x_low &23fc b9 a9 15 LDA &15a9,Y ; movers_x_high &23ff 85 c5 STA &c5 ; mover_x_high &2401 64 99 STZ &99 ; x_edge_size_and_direction *** # 65C02 opcode; set to zero to skip edge buffering ; not_hostile &2402 a6 c3 LDX &c3 ; mover_screen_address_high &2405 a5 c2 LDA &c2 ; mover_screen_address_low &2407 60 RTS ; check_for_hostile_collision &2408 bd 43 15 LDA &1543,X ; movers_type_and_colour &240b a4 03 LDY &03 ; mover_to_update &240d 90 1e BCC &242d ; leave_with_carry_clear # Carry is clear if no collision occurred &240f d0 0a BNE &241b ; not_player ; is_player &2411 c9 0d CMP #&0d ; MOVER_TYPE_SKELETON &2413 90 18 BCC &242d ; leave_with_carry_clear # Player can walk through all friendly movers &2415 c9 8c CMP #&8c ; MOVER_TYPE_ENEMY | MOVER_TYPE_SAM &2417 f0 14 BEQ &242d ; leave_with_carry_clear # Player can walk through enemy SAM &2419 d0 0e BNE &2429 ; leave_with_carry_set # Everything else is hostile to player; always branches ; not_player &241b c0 0c CPY #&0c ; MOVER_FIRST_PROJECTILE &241d 90 0a BCC &2429 ; leave_with_carry_set # All collisions involving enemies are hostile &241f 29 7f AND #&7f &2421 c9 13 CMP #&13 ; MOVER_TYPE_MINE &2423 b0 04 BCS &2429 ; leave_with_carry_set # All collisions involving mines are hostile &2425 c9 0c CMP #&0c ; MOVER_TYPE_SAM &2427 b0 04 BCS &242d ; leave_with_carry_clear # Ignore collisions with skeletons, explosions and projectiles ; leave_with_carry_set &2429 86 8d STX &8d ; hostile_mover &242b 38 SEC # Leave with carry set to indicate hostile collision &242c 60 RTS ; leave_with_carry_clear &242d 18 CLC # Leave with carry clear to indicate not hostile &242e 60 RTS ; move_mover_left &242f a5 f8 LDA &f8 ; mover_x_low &2431 38 SEC &2432 e5 7c SBC &7c ; x_delta &2434 aa TAX &2435 a5 c5 LDA &c5 ; mover_x_high &2437 e9 00 SBC #&00 &2439 a8 TAY &243a 20 ec 23 JSR &23ec ; check_for_collision_after_horizontal_move # Returns carry set if hostile collision occurred &243d b0 08 BCS &2447 ; skip_changing_screen_address &243f a4 7c LDY &7c ; x_delta &2441 88 DEY &2442 30 03 BMI &2447 ; skip_changing_screen_address &2444 20 56 1d JSR &1d56 ; subtract_delta_from_screen_address_in_AX ; skip_changing_screen_address &2447 85 c2 STA &c2 ; mover_screen_address_low &2449 86 c3 STX &c3 ; mover_screen_address_high &244b 4c 73 1c JMP &1c73 ; use_viewport_right_as_edge *** # JSR use_viewport_right_as_edge : RTS in standard version ; move_mover_up # Called with A = mover_y &244e 18 CLC &244f 65 7d ADC &7d ; y_delta &2451 85 f9 STA &f9 ; mover_y &2453 20 64 24 JSR &2464 ; check_for_collision_after_vertical_move &2456 b0 07 BCS &245f ; skip_changing_screen_address &2458 a4 7d LDY &7d ; y_delta &245a f0 03 BEQ &245f ; skip_changing_screen_address &245c 20 69 1d JSR &1d69 ; subtract_Y_rows_from_screen_address_in_AX ; skip_changing_screen_address ; set_mover_screen_address &245f 86 c3 STX &c3 ; mover_screen_address_high &2461 85 c2 STA &c2 ; mover_screen_address_low &2463 60 RTS ; check_for_collision_after_vertical_move &2464 a6 03 LDX &03 ; mover_to_update &2466 bc a9 15 LDY &15a9,X ; movers_x_high &2469 bd 87 15 LDA &1587,X ; movers_x_low &246c 20 47 28 JSR &2847 ; check_for_mover_collision_with_movers # Returns carry set if collision, X = mover collided with &246f 20 08 24 JSR &2408 ; check_for_hostile_collision # Returns carry set if collision was hostile &2472 90 07 BCC &247b ; no_collision &2474 b9 cb 15 LDA &15cb,Y ; movers_y &2477 85 f9 STA &f9 ; mover_y &2479 64 9a STZ &9a ; y_edge_size_and_direction *** # 65C02 opcode; set to zero to skip edge buffering ; no_collision &247b be 0f 16 LDX &160f,Y ; movers_screen_address_high &247e b9 ed 15 LDA &15ed,Y ; movers_screen_address_low &2481 60 RTS ; move_mover_down # Called with A = mover_y &2482 38 SEC &2483 e5 7d SBC &7d ; y_delta &2485 85 f9 STA &f9 ; mover_y &2487 20 64 24 JSR &2464 ; check_for_collision_after_vertical_move &248a b0 d3 BCS &245f ; skip_changing_screen_address &248c a4 7d LDY &7d ; y_delta &248e f0 cf BEQ &245f ; skip_changing_screen_address &2490 20 82 1d JSR &1d82 ; add_Y_rows_from_screen_address_in_AX &2493 4c 5f 24 JMP &245f ; set_mover_screen_address ; move_mover_up_and_right &2496 20 4e 24 JSR &244e ; move_mover_up &2499 4c cd 23 JMP &23cd ; move_mover_right ; move_mover_down_and_right &249c 20 82 24 JSR &2482 ; move_mover_down &249f 4c cd 23 JMP &23cd ; move_mover_right ; move_mover_up_and_left &24a2 20 4e 24 JSR &244e ; move_mover_up &24a5 4c 2f 24 JMP &242f ; move_mover_left ; move_mover_down_and_left &24a8 20 82 24 JSR &2482 ; move_mover_down &24ab 4c 2f 24 JMP &242f ; move_mover_left ; unplot_and_move_mover &24ae a4 03 LDY &03 ; mover_to_update &24b0 20 6a 1e JSR &1e6a ; plot_mover # Unplot mover ; move_mover &24b3 a5 7c LDA &7c ; x_delta &24b5 29 80 AND #&80 &24b7 85 7b STA &7b ; flip &24b9 0a ASL A &24ba 2a ROL A &24bb 48 PHA ; x direction &24bc a5 7d LDA &7d ; y_delta &24be 0a ASL A &24bf 68 PLA ; x direction &24c0 2a ROL A &24c1 aa TAX &24c2 bd cb 28 LDA &28cb,X ; move_mover_routine_addresses_high_table &24c5 8d e3 24 STA &24e3 ; move_mover_routine_address_high &24c8 bd cf 28 LDA &28cf,X ; move_mover_routine_addresses_low_table &24cb 8d e2 24 STA &24e2 ; move_mover_routine_address_low &24ce a5 7c LDA &7c ; x_delta &24d0 85 99 STA &99 ; x_edge_size_and_direction *** &24d2 29 7f AND #&7f &24d4 85 7c STA &7c ; x_delta &24d6 a5 7d LDA &7d ; y_delta &24d8 85 9a STA &9a ; y_edge_size_and_direction *** &24da 29 7f AND #&7f &24dc 85 7d STA &7d ; y_delta &24de 20 98 23 JSR &2398 ; animate_mover # Returns A = mover_y &24e1 20 ff ff JSR &ffff # Move mover up or down, then right or left # actually JSR move_mover_routine_address &24e4 a4 03 LDY &03 ; mover_to_update &24e6 a5 f8 LDA &f8 ; mover_x_low &24e8 99 87 15 STA &1587,Y ; movers_x_low &24eb a5 c5 LDA &c5 ; mover_x_high &24ed 99 a9 15 STA &15a9,Y ; movers_x_high &24f0 a5 c2 LDA &c2 ; mover_screen_address_low &24f2 99 ed 15 STA &15ed,Y ; movers_screen_address_low &24f5 a5 c3 LDA &c3 ; mover_screen_address_high &24f7 99 0f 16 STA &160f,Y ; movers_screen_address_high &24fa a5 f9 LDA &f9 ; mover_y &24fc 99 cb 15 STA &15cb,Y ; movers_y &24ff 85 c6 STA &c6 ; y &2501 a9 c7 LDA #&c7 &2503 38 SEC &2504 e5 c6 SBC &c6 ; y &2506 18 CLC &2507 69 18 ADC #&18 &2509 a2 4e LDX #&4e &250b 20 1e 2f JSR &2f1e ; multiply_A_by_X &250e a4 03 LDY &03 ; mover_to_update &2510 a5 c6 LDA &c6 ; result_high &2512 99 31 16 STA &1631,Y ; movers_raster_y &2515 20 a8 1d JSR &1da8 ; calculate_screen_addresses_for_mover_on_edge &2518 c0 00 CPY #&00 ; MOVER_PLAYER &251a d0 12 BNE &252e ; leave &251c a5 81 LDA &81 ; mover_had_hostile_collision # Positive if mover had hostile collision &251e 10 0e BPL &252e ; leave # Don't scroll if player had hostile collision &2520 a5 7c LDA &7c ; x_delta &2522 f0 0a BEQ &252e ; leave &2524 a5 7b LDA &7b ; flip &2526 10 03 BPL &252b ; to_scroll_screen_right &2528 4c df 18 JMP &18df ; scroll_screen_left ; to_scroll_screen_right &252b 20 c9 1a JSR &1ac9 ; scroll_screen_right &252e 60 RTS ; use_player_position_for_mover_Y &252f ae 0f 16 LDX &160f ; movers_screen_address_high &2532 ad ed 15 LDA &15ed ; movers_screen_address_low ; use_player_position_for_mover_Y_with_screen_address_from_AX &2535 99 ed 15 STA &15ed,Y ; movers_screen_address_low &2538 8a TXA &2539 99 0f 16 STA &160f,Y ; movers_screen_address_high &253c ad a9 15 LDA &15a9 ; movers_x_high &253f 99 a9 15 STA &15a9,Y ; movers_x_high &2542 ad 87 15 LDA &1587 ; movers_x_low &2545 99 87 15 STA &1587,Y ; movers_x_low &2548 ad 65 15 LDA &1565 ; movers_frame_and_flip &254b 99 65 15 STA &1565,Y ; movers_frame_and_flip &254e 60 RTS ; leave_helicopter &254f 20 7a 2c JSR &2c7a ; unbuffer_player_getting_addresses &2552 a4 84 LDY &84 ; player_helicopter &2554 20 2f 25 JSR &252f; use_player_position_for_mover_Y &2557 a5 97 LDA &97 ; helicopter_fuel_high &2559 99 60 09 STA &0960,Y ; movers_helicopter_fuel_high ; set_player_as_soldier &255c a9 00 LDA #&00 ; MOVER_TYPE_PLAYER &255e 85 84 STA &84 ; player_helicopter # Set to zero to indicate player not in helicopter &2560 8d 43 15 STA &1543 ; movers_type_and_colour &2563 20 6a 1e JSR &1e6a ; plot_mover &2566 4c a8 25 JMP &25a8 ; buffer_and_plot_player ; enter_or_leave_helicopter &2569 a4 84 LDY &84 ; player_helicopter # Zero if player not in helicopter &256b d0 e2 BNE &254f ; leave_helicopter &256d a9 01 LDA #&01 &256f 85 81 STA &81 ; mover_x_offset &2571 20 da 1f JSR &1fda ; get_mover_x_and_y &2574 20 8d 2a JSR &2a8d ; calculate_mover_x_max_from_offset_getting_frame_and_flip &2577 a9 33 LDA #&33 &2579 85 c9 STA &c9 ; mover_y_max &257b a2 17 LDX #&17 ; MOVER_FIRST_ALLY_HELICOPTER - 1 &257d 86 b7 STX &b7 ; last_mover &257f a2 21 LDX #&21 ; MOVER_LAST_ALLY_HELICOPTER *** # Enhanced version adds tank &2581 20 5a 28 JSR &285a ; check_for_mover_collision_with_range_of_movers &2584 90 28 BCC &25ae ; leave # Carry clear if no collision, otherwise X = mover &2586 86 8d STX &8d ; helicopter &2588 86 84 STX &84 ; player_helicopter &258a 20 7a 2c JSR &2c7a ; unbuffer_player_getting_addresses &258d a4 8d LDY &8d ; helicopter &258f b9 43 15 LDA &1543,Y ; movers_type_and_colour &2592 8d 43 15 STA &1543 ; movers_type_and_colour # Turn player into helicopter &2595 b9 65 15 LDA &1565,Y ; movers_frame_and_flip &2598 8d 65 15 STA &1565 ; movers_frame_and_flip &259b 20 6a 1e JSR &1e6a ; plot_mover &259e a4 84 LDY &84 ; player_helicopter &25a0 20 9c 29 JSR &299c ; remove_mover &25a3 b9 60 09 LDA &0960,Y ; movers_helicopter_fuel_high &25a6 85 97 STA &97 ; helicopter_fuel_high ; buffer_and_plot_player &25a8 20 6f 2c JSR &2c6f ; buffer_player &25ab 4c 68 1e JMP &1e68 ; plot_player ; leave &25ae 60 RTS *** ; update_player &25af a0 00 LDY #&00 ; MOVER_PLAYER &25b1 84 03 STY &03 ; mover_to_update &25b3 a5 8f LDA &8f ; player_helicopter_explosion # Zero if player helicopter is not exploding &25b5 f0 0e BEQ &25c5 ; not_in_exploding_helicopter ; update_player_in_exploding_helicopter &25b7 ad ba 15 LDA &15ba ; movers_x_high + &11 (MOVER_PLAYER_BULLET) &25ba 10 37 BPL &25f3 ; leave # Positive if explosion animation hasn't finished &25bc 84 8f STY &8f ; player_helicopter_explosion # Set to zero to indicate explosion has finished &25be 84 83 STY &83 ; player_jump_direction &25c0 a4 84 LDY &84 ; player_helicopter &25c2 4c 5c 25 JMP &255c ; set_player_as_soldier ; not_in_exploding_helicopter &25c5 ad 43 15 LDA &1543 ; movers_type_and_colour &25c8 c9 0d CMP #&0d ; MOVER_TYPE_SKELETON &25ca d0 1c BNE &25e8 ; not_skeleton ; is_skeleton &25cc 20 f7 2c JSR &2cf7 ; check_if_player_is_on_ground &25cf d0 66 BNE &2637 ; to_to_consider_falling ; is_skeleton_on_ground &25d1 20 7a 2c JSR &2c7a ; unbuffer_player_getting_addresses &25d4 ad 65 15 LDA &1565 ; movers_frame_and_flip &25d7 29 7f AND #&7f &25d9 d0 07 BNE &25e2 ; animate_player_skeleton # Zero at end of animation &25db a9 50 LDA #&50 &25dd 85 96 STA &96 ; game_over_cooldown &25df c6 95 DEC &95 ; lives # Set to negative to indicate game over &25e1 60 RTS ; animate_player_skeleton &25e2 ce 65 15 DEC &1565 ; movers_frame_and_flip &25e5 4c 68 1e JMP &1e68 ; plot_player ; not_skeleton &25e8 a5 8e LDA &8e ; player_firing_cooldown &25ea f0 08 BEQ &25f4 ; not_firing &25ec c6 8e DEC &8e ; player_firing_cooldown &25ee d0 03 BNE &25f3 ; leave &25f0 20 04 23 JSR &2304 ; add_player_bullet ; leave &25f3 60 RTS ; not_firing &25f4 20 f7 2c JSR &2cf7 ; check_if_player_is_on_ground &25f7 d0 18 BNE &2611 ; not_entering_or_leaving_helicopter &25f9 a5 c2 LDA &c2 ; keys_pressed_bitmap &25fb 29 40 AND #&40 ; KEY_ENTER &25fd f0 0d BEQ &260c ; not_entering_or_leaving_helicopter &25ff ad b9 27 LDA &27b9 ; entering_or_leaving *** # Non-zero if player recently entered or left &2602 30 0d BMI &2611 ; skip_entering_or_leaving *** &2604 a9 ff LDA #&ff *** &2606 8d b9 27 STA &27b9 ; entering_or_leaving *** # Set to non-zero to suppress auto-repeat &2609 4c 69 25 JMP &2569 ; enter_or_leave_helicopter ; not_entering_or_leaving_helicopter &260c a9 00 LDA #&00 *** &260e 8d b9 27 STA &27b9 ; entering_or_leaving *** # Set to zero to permit entering or leaving ; skip_entering_or_leaving &2611 ad 65 15 LDA &1565 ; movers_frame_and_flip &2614 29 80 AND #&80 &2616 85 7b STA &7b ; flip &2618 aa TAX &2619 a5 c2 LDA &c2 ; keys_pressed_bitmap &261b 29 0c AND #&0c ; KEY_RIGHT | KEY_LEFT &261d f0 0d BEQ &262c ; set_x_delta &261f c9 0c CMP #&0c ; KEY_RIGHT | KEY_LEFT &2621 f0 09 BEQ &262c ; set_x_delta &2623 88 DEY ; &ff # Set to negative to indicate moving horizontally &2624 a2 01 LDX #&01 # Set player moving right &2626 c9 04 CMP #&04 ; KEY_RIGHT &2628 f0 02 BEQ &262c ; set_x_delta &262a a2 81 LDX #&81 # Set player moving left ; set_x_delta &262c 86 7c STX &7c ; x_delta &262e 84 81 STY &81 ; frame # Set to zero if player is not moving, &ff if moving &2630 a5 84 LDA &84 ; player_helicopter # Zero if player not in helicopter &2632 d0 0c BNE &2640 ; check_for_player_firing &2634 20 f7 2c JSR &2cf7 ; check_if_player_is_on_ground ; to_to_consider_falling &2637 d0 3c BNE &2675 ; to_consider_falling ; is_soldier_on_ground &2639 a5 80 LDA &80 ; helicopter_to_update &263b 29 01 AND #&01 &263d f0 01 BEQ &2640 ; check_for_player_firing # Branch one in two frames ; leave &263f 60 RTS ; check_for_player_firing &2640 a5 c2 LDA &c2 ; keys_pressed_bitmap &2642 29 30 AND #&30 ; KEY_FIRE | KEY_GRENADE &2644 f0 07 BEQ &264d ; not_firing &2646 20 ec 22 JSR &22ec ; consider_adding_player_bullet_or_grenade &2649 a5 84 LDA &84 ; player_helicopter # Zero if player not in helicopter &264b f0 4c BEQ &2699 ; skip_vertical_movement ; not_firing &264d ad 65 15 LDA &1565 ; movers_frame_and_flip &2650 29 7f AND #&7f &2652 aa TAX &2653 a5 c2 LDA &c2 ; keys_pressed_bitmap &2655 29 01 AND #&01 ; KEY_UP &2657 d0 1f BNE &2678 ; is_jumping_or_moving_up ; not_jumping &2659 20 f7 2c JSR &2cf7 ; check_if_player_is_on_ground &265c d0 61 BNE &26bf ; consider_falling ; consider_crouching_or_moving_down &265e a5 c2 LDA &c2 ; keys_pressed_bitmap &2660 29 02 AND #&02 ; KEY_DOWN &2662 d0 29 BNE &268d ; is_crouching_or_moving_down &2664 e0 09 CPX #&09 ; FRAME_PREJUMP &2666 d0 31 BNE &2699 ; skip_vertical_movement ; start_jump &2668 a5 7c LDA &7c ; x_delta &266a 85 83 STA &83 ; player_jump_direction &266c a9 30 LDA #&30 # Play sound for jumping &266e 20 8a 2f JSR &2f8a ; play_sound &2671 a9 06 LDA #&06 ; set_player_y_velocity &2673 85 82 STA &82 ; player_y_velocity ; to_consider_falling &2675 4c bf 26 JMP &26bf ; consider_falling ; is_jumping_or_moving_up &2678 ac 43 15 LDY &1543 ; movers_type_and_colour &267b f0 14 BEQ &2691 ; prepare_for_jump &267d ad cb 15 LDA &15cb ; movers_y &2680 c9 a4 CMP #&a4 # Player can't move above top of screen &2682 b0 3b BCS &26bf ; consider_falling &2684 b9 04 18 LDA &1804,Y; player_helicopter_types_vertical_speed - 5 &2687 a6 97 LDX &97 ; helicopter_fuel_high &2689 10 e8 BPL &2673 ; set_player_y_velocity &268b 30 32 BMI &26bf ; consider_falling # Always branches ; is_crouching_or_moving_down &268d a9 0d LDA #&0d ; FRAME_CROUCHING &268f d0 02 BNE &2693 ; set_player_frame # Always branches ; prepare_for_jump &2691 a9 09 LDA #&09 ; FRAME_PREJUMP ; set_player_frame &2693 85 81 STA &81 ; frame &2695 e4 81 CPX &81 ; frame &2697 f0 a6 BEQ &263f ; leave ; skip_vertical_movement &2699 a5 81 LDA &81 ; frame &269b 30 22 BMI &26bf ; consider_falling # Negative if player moving left or right &269d ad 43 15 LDA &1543 ; movers_type_and_colour &26a0 f0 09 BEQ &26ab ; not_helicopter ; is_helicopter &26a2 c9 14 CMP #&14 ; MOVER_TYPE_TANK *** &26a4 f0 99 BEQ &263f ; leave *** # Tank only animates when moving &26a6 20 98 23 JSR &2398 ; animate_mover &26a9 d0 07 BNE &26b2 ; replot_player # Always branches ; not_helicopter &26ab a5 7b LDA &7b ; flip &26ad 05 81 ORA &81 ; frame &26af 8d 65 15 STA &1565 ; movers_frame_and_flip ; replot_player &26b2 a0 00 LDY #&00 ; MOVER_PLAYER ; wait_to_replot_player &26b4 20 45 2f JSR &2f45 ; check_if_raster_is_in_mover # Returns carry set if raster is in mover &26b7 b0 fb BCS &26b4 ; wait_to_replot_player &26b9 20 7a 2c JSR &2c7a ; unbuffer_player_getting_addresses &26bc 4c 68 1e JMP &1e68 ; plot_player ; consider_falling &26bf a5 82 LDA &82 ; player_y_velocity &26c1 85 7d STA &7d ; y_delta &26c3 a5 84 LDA &84 ; player_helicopter # Zero if player not in helicopter &26c5 d0 0a BNE &26d1 ; is_descending_helicopter &26c7 20 f7 2c JSR &2cf7 ; check_if_player_is_on_ground &26ca f0 1e BEQ &26ea ; skip_setting_x_delta &26cc a5 83 LDA &83 ; player_jump_direction &26ce 4c e8 26 JMP &26e8 ; set_x_delta ; is_descending_helicopter &26d1 a5 97 LDA &97 ; helicopter_fuel_high &26d3 30 11 BMI &26e6 ; suppress_horizontal_movement &26d5 c6 98 DEC &98 ; helicopter_fuel_low &26d7 d0 02 BNE &26db ; skip_underflow &26d9 c6 97 DEC &97 ; helicopter_fuel_high ; skip_underflow &26db a5 84 LDA &84 ; player_helicopter *** &26dd c9 21 CMP #&21 ; MOVER_TANK *** &26df b0 09 BCS &26ea ; skip_setting_x_delta *** # Tank can move on ground &26e1 20 f7 2c JSR &2cf7 ; check_if_player_is_on_ground &26e4 d0 04 BNE &26ea ; skip_setting_x_delta ; suppress_horizontal_movement &26e6 a5 7b LDA &7b ; flip ; set_x_delta &26e8 85 7c STA &7c ; x_delta ; skip_setting_x_delta &26ea a6 7c LDX &7c ; x_delta &26ec e0 81 CPX #&81 &26ee d0 0b BNE &26fb ; not_at_left_edge_of_world &26f0 a5 b2 LDA &b2 ; viewport_left_low &26f2 d0 07 BNE &26fb ; not_at_left_edge_of_world &26f4 a5 ba LDA &ba ; viewport_left_high &26f6 d0 03 BNE &26fb ; not_at_left_edge_of_world &26f8 ca DEX ; &80 &26f9 86 7c STX &7c ; x_delta # Set to &80 to stop player moving left of edge ; not_at_left_edge_of_world &26fb 20 57 2c JSR &2c57 ; get_player_screen_address &26fe 20 b3 24 JSR &24b3 ; move_mover &2701 20 5e 2d JSR &2d5e ; buffer_player_edges *** &2704 ad 43 15 LDA &1543 ; movers_type_and_colour &2707 d0 18 BNE &27219 ; skip_animating_player &2709 20 f7 2c JSR &2cf7 ; check_if_player_is_on_ground &270c d0 08 BNE &2716 ; use_jumping_frame &270e a5 82 LDA &82 ; player_y_velocity &2710 f0 0f BEQ &2721 ; skip_animating_player &2712 a9 0b LDA #&0b ; FRAME_LANDING &2714 d0 02 BNE &2718 ; set_frame # Always branches ; use_jumping_frame &2716 a9 0a LDA #&0a ; FRAME_JUMPING ; set_frame &2718 85 79 STA &79 ; new_frame &271a a5 7b LDA &7b ; flip &271c 05 79 ORA &79 ; new_frame &271e 8d 65 15 STA &1565 ; movers_frame_and_flip ; skip_animating_player &2721 a5 81 LDA &81 ; frame # Negative if moving left or right &2723 10 12 BPL &2737 ; not_scrolling &2725 a5 7c LDA &7c ; x_delta &2727 f0 0e BEQ &2737 ; not_scrolling &2729 20 42 22 JSR &2242 ; wait_for_vsync &272c 20 7d 2c JSR &2c7d ; unbuffer_player &272f 20 7c 1b JSR &1b7c ; update_screen &2732 20 7e 32 JSR &327e ; plot_lives &2735 80 0a BRA &2741 ; skip_rebuffering_player *** # 65C02 opcode ; not_scrolling &2737 a0 00 LDY #&00 ; MOVER_PLAYER ; wait_to_unplot_player &2739 20 45 2f JSR &2f45 ; check_if_raster_is_in_mover # Returns carry set if raster is in mover &273c b0 f9 BCS &2737 ; wait_to_unplot_player &273e 20 7d 2c JSR &2c7d ; unbuffer_player ; skip_rebuffering_player &2741 a4 8d LDY &8d ; hostile_mover # Positive if player touching hostile mover &2743 30 2a BMI &276f ; skip_killing_player &2745 20 d9 28 JSR &28d9 ; kill_mover &2748 a5 91 LDA &91 ; dying_mover_type &274a c9 0d CMP #&0d ; MOVER_TYPE_SKELETON &274c f0 21 BEQ &276f ; skip_killing_player &274e ad 43 15 LDA &1543 ; movers_type_and_colour &2751 c9 0d CMP #&0d ; MOVER_TYPE_SKELETON &2753 f0 1a BEQ &276f ; skip_killing_player &2755 c9 14 CMP #&14 ; MOVER_TYPE_TANK *** &2757 d0 0e BNE &2767 ; not_tank *** ; is_tank *** &2759 a5 91 LDA &91 ; dying_mover_type *** &275b c9 0f CMP #&0f ; MOVER_TYPE_BULLET *** # Tank is immune to bullets &275d f0 10 BEQ &276f ; skip_killing_player *** &275f c9 0e CMP #&0e ; MOVER_TYPE_EXPLOSION *** # Tank is immune to explosions &2761 f0 0c BEQ &276f ; skip_killing_player *** &2763 c9 05 CMP #&05 ; MOVER_TYPE_FIRST_HELICOPTER *** # Tank is immune to soldiers &2765 90 08 BCC &276f ; skip_killing_player *** ; not_tank *** &2767 a0 00 LDY #&00 ; MOVER_PLAYER &2769 20 01 29 JSR &2901 ; kill_mover_Y &276c 4c 72 27 JMP &2772 ; skip_plotting_player ; skip_killing_player &276f 20 68 1e JSR &1e68 ; plot_player ; skip_plotting_player &2772 20 c3 2d JSR &2dc3 ; update_player_buffer *** # Unbuffer edge buffers to main player buffer &2775 a9 04 LDA #&04 &2777 85 f4 STA &f4 ; os_ram_copy_of_currently_selected_rom &2779 8d 30 fe STA &fe30 ; Paged ROM latch &277c 20 f7 2c JSR &2cf7 ; check_if_player_is_on_ground &277f d0 06 BNE &2787 ; not_on_ground &2781 a6 82 LDX &82 ; player_y_velocity &2783 d0 2a BNE &27af ; end_jump &2785 f0 31 BEQ &27b8 ; leave # Always branches ; not_on_ground &2787 a6 82 LDX &82 ; player_y_velocity &2789 d0 02 BNE &278d ; not_starting_to_fall &278b a2 80 LDX #&80 # Set player moving down ; not_starting_to_fall &278d 30 05 BMI &2794 ; is_falling &278f ca DEX &2790 d0 1a BNE &27ac ; set_player_y_velocity &2792 a2 7f LDX #&7f ; is_falling &2794 ad cb 15 LDA &15cb ; movers_y &2797 38 SEC &2798 e9 18 SBC #&18 &279a c5 7d CMP &7d ; y_delta &279c 90 0b BCC &27a9 ; set_player_falling_velocity &279e f0 09 BEQ &27a9 ; set_player_falling_velocity &27a0 e8 INX &27a1 e0 86 CPX #&86 &27a3 90 07 BCC &27ac ; set_player_y_velocity &27a5 a2 86 LDX #&86 # Maximum falling speed &27a7 30 03 BMI &27ac ; set_player_y_velocity # Always branches ; set_player_falling_velocity &27a9 09 80 ORA #&80 &27ab aa TAX ; set_player_y_velocity &27ac 86 82 STX &82 ; player_y_velocity &27ae 60 RTS ; end_jump &27af a9 00 LDA #&00 &27b1 85 82 STA &82 ; player_y_velocity &27b3 a9 28 LDA #&28 # Play sound for landing &27b5 20 8a 2f JSR &2f8a ; play_sound ; leave &27b8 60 RTS ; entering_or_leaving &27b9 00 *** ; update_movers &27ba ad 4b fe LDA &fe4b ; System VIA auxiliary control register &27bd 29 df AND #&df # Set System VIA timer 2 to one-shot mode &27bf 8d 4b fe STA &fe4b ; System VIA auxiliary control register &27c2 a9 20 LDA #&20 # Enable System VIA timer 2 interrupts &27c4 8d 4e fe STA &fe4e ; System VIA interrupt enable register &27c7 a9 ff LDA #&ff &27c9 8d 48 fe STA &fe48 ; System VIA timer 2 counter LSB &27cc 8d 49 fe STA &fe49 ; System VIA timer 2 counter MSB &27cf a4 c0 LDY &c0 ; movers_to_update_base &27d1 a2 02 LDX #&02 &27d3 86 c1 STX &c1 ; movers_to_update_count ; populate_movers_to_update_loop &27d5 b9 31 16 LDA &1631,Y ; movers_raster_y &27d8 9d 25 28 STA &2825,X ; movers_to_update_raster_y &27db 98 TYA &27dc 9d 22 28 STA &2822,X ; movers_to_update &27df c8 INY &27e0 c0 0a CPY #&0a ; MOVER_LAST_ENEMY_SOLDIER + 1 &27e2 90 02 BCC &27e6 ; skip_wraparound &27e4 a0 01 LDY #&01 ; MOVER_FIRST_ENEMY ; skip_wraparound &27e6 ca DEX &27e7 10 ec BPL &27d5 ; populate_movers_to_update_loop &27e9 84 c0 STY &c0 ; movers_to_update_base ; update_movers_loop &27eb a2 02 LDX #&02 ; find_topmost_remaining_mover_loop &27ed a0 02 LDY #&02 ; find_topmost_remaining_mover_inner_loop &27ef b9 25 28 LDA &2825,Y ; movers_to_update_raster_y &27f2 dd 25 28 CMP &2825,X ; movers_to_update_raster_y &27f5 b0 03 BCS &27fa ; not_topmost_mover &27f7 ca DEX &27f8 10 f3 BPL &27ed ; find_topmost_remaining_mover_loop # Always branches ; not_topmost_mover &27fa 88 DEY &27fb 10 f2 BPL &27ef ; find_topmost_remaining_mover_inner_loop &27fd a9 ff LDA #&ff &27ff 9d 25 28 STA &2825,X ; movers_to_update_raster_y # Set to maximum value to prevent being found again &2802 bc 22 28 LDY &2822,X ; movers_to_update &2805 84 03 STY &03 ; mover_to_update &2807 20 74 31 JSR &3174 ; update_mover # Update mover &280a c6 c1 DEC &c1 ; movers_to_update_count &280c 10 dd BPL &27eb ; update_movers_loop &280e a5 80 LDA &80 ; helicopter_to_update &2810 a8 TAY &2811 49 01 EOR #&01 # Update enemy helicopters alternately &2813 85 80 STA &80 ; helicopter_to_update &2815 84 03 STY &03 ; mover_to_update &2817 20 9f 2f JSR &2f9f ; update_enemy_helicopter ; wait_for_timer &281a ad 49 fe LDA &fe49 ; System VIA timer 2 counter MSB &281d c9 70 CMP #&70 &281f b0 f9 BCS &281a ; wait_for_timer # Wait for raster to be in sky &2821 60 RTS ; movers_to_update &2822 00 00 00 ; movers_to_update_raster_y &2825 00 00 00 ; get_mover_X_type_and_height &2828 bd 43 15 LDA &1543,X ; movers_type_and_colour &282b 29 7f AND #&7f &282d a8 TAY &282e bd 65 15 LDA &1565,X ; movers_frame_and_flip &2831 29 7f AND #&7f &2833 c9 0d CMP #&0d ; MOVER_TYPE_SKELETON &2835 d0 04 BNE &283b ; use_height_table &2837 a9 11 LDA #&11 &2839 d0 03 BNE &283e ; leave # Always branches ; use_height_table &283b b9 f3 16 LDA &16f3,Y ; mover_types_height_table &283e 60 RTS ; check_for_mover_Y_collision_with_player # Called with X = 0 (MOVER_PLAYER) &283f 20 dc 1f JSR &1fdc ; get_mover_Y_x_and_y &2842 a8 TAY &2843 a5 f8 LDA &f8 ; mover_x_low &2845 d0 02 BNE &2849 ; set_first_mover # Always branches ; check_for_mover_collision_with_movers &2847 a2 17 LDX #&17 ; MOVER_LAST_PROJECTILE ; set_first_mover &2849 86 b6 STX &b6 ; first_mover &284b a2 ff LDX #&ff ; MOVER_PLAYER - 1 &284d 86 b7 STX &b7 ; last_mover &284f a6 03 LDX &03 ; mover_to_update &2851 85 f8 STA &f8 ; mover_x_low &2853 84 c5 STY &c5 ; mover_x_high &2855 20 66 28 JSR &2866 ; calculate_mover_x_max_and_y_max &2858 a6 b6 LDX &b6 ; first_mover ; check_for_mover_collision_with_range_of_movers ; check_for_mover_collision_with_range_of_movers_loop &285a 20 89 28 JSR &2889 ; check_for_mover_collision_with_mover_X &285d b0 06 BCS &2865 ; leave # Leave with carry set to indicate collision, X = mover &285f ca DEX &2860 e4 b7 CPX &b7 ; last_mover &2862 d0 f6 BNE &285a ; check_for_mover_collision_with_range_of_movers_loop &2864 18 CLC # Leave with carry clear to indicate no collision ; leave &2865 60 RTS ; calculate_mover_x_max_and_y_max &2866 a5 c5 LDA &c5 ; mover_x_high &2868 85 c6 STA &c6 ; mover_x_max_high &286a 20 28 28 JSR &2828 ; get_mover_X_type_and_height &286d 18 CLC &286e 65 f9 ADC &f9 ; mover_y &2870 85 c9 STA &c9 ; mover_y_max &2872 b9 d7 16 LDA &16d7,Y ; mover_types_width_table &2875 18 CLC &2876 65 f8 ADC &f8 ; mover_x_low &2878 90 02 BCC &287c ; skip_overflow &287a e6 c6 INC &c6 ; mover_x_max_high ; skip_overflow &287c 85 c7 STA &c7 ; mover_x_max_low &287e 60 RTS ; check_for_player_collision_with_mover_Y &287f 20 dc 1f JSR &1fdc ; get_mover_Y_x_and_y &2882 20 66 28 JSR &2866 ; calculate_mover_x_max_and_y_max &2885 a2 00 LDX #&00 ; MOVER_PLAYER &2887 f0 04 BEQ &288d ; check_for_collision_with_mover ; check_for_mover_collision_with_mover_X &2889 e4 03 CPX &03 ; mover_to_update &288b f0 3c BEQ &28c9 ; leave_with_carry_clear ; check_for_collision_with_mover &288d 20 28 28 JSR &2828 ; get_mover_X_type_and_height &2890 85 78 STA &78 ; height &2892 b9 d7 16 LDA &16d7,Y ; mover_types_width_table &2895 85 7a STA &7a ; width &2897 bd a9 15 LDA &15a9,X ; movers_x_high &289a a8 TAY &289b c5 c6 CMP &c6 ; mover_x_max_high &289d 90 09 BCC &28a8 ; check_x_high &289f d0 28 BNE &28c9 ; leave_with_carry_clear &28a1 a5 c7 LDA &c7 ; mover_x_max_low &28a3 dd 87 15 CMP &1587,X ; movers_x_low &28a6 90 21 BCC &28c9 ; leave_with_carry_clear ; check_x_high &28a8 bd 87 15 LDA &1587,X ; movers_x_low &28ab 18 CLC &28ac 65 7a ADC &7a ; width &28ae 90 01 BCC &28b1 ; skip_overflow &28b0 c8 INY ; skip_overflow &28b1 c4 c5 CPY &c5 ; mover_x_high &28b3 90 14 BCC &28c9 ; leave_with_carry_clear &28b5 d0 04 BNE &28bb ; leave_with_carry_clear ; skip_low_check &28b7 c5 f8 CMP &f8 ; mover_x_low &28b9 90 0e BCC &28c9 ; leave_with_carry_clear &28bb bd cb 15 LDA &15cb,X ; movers_y &28be c5 c9 CMP &c9 ; mover_y_max &28c0 b0 07 BCS &28c9 ; leave_with_carry_clear &28c2 65 78 ADC &78 ; height &28c4 c5 f9 CMP &f9 ; mover_y &28c6 90 01 BCC &28c9 ; leave_with_carry_clear &28c8 60 RTS # Leave with carry set to indicate collision ; leave_with_carry_clear &28c9 18 CLC # Leave with carry clear to indicate no collision &28ca 60 RTS ; move_mover_routine_addresses_high_table # &00 : &2496 = move_mover_up_and_right &28cb 24 24 24 24 # &01 : &249c = move_mover_down_and_right ; move_mover_routine_addresses_low_table # &02 : &24a2 = move_mover_up_and_left &28cf 96 9c a2 a8 # &03 : &24a8 = move_mover_down_and_left ; set_dying_mover_type &28d3 20 b9 30 JSR &30b9 ; get_mover_Y_type # Returns A = mover type &28d6 85 91 STA &91 ; dying_mover_type &28d8 60 RTS ; kill_mover # Called with Y = hostile mover &28d9 20 d3 28 JSR &28d3 ; set_dying_mover_type # Returns A = mover type &28dc 84 87 STY &87 ; dying_mover &28de c9 13 CMP #&13 ; MOVER_TYPE_MINE &28e0 b0 04 BCS &28e6 ; check_if_player *** # Branch if mine or any of enhanced movers &28e2 c9 0c CMP #&0c ; MOVER_TYPE_SAM &28e4 b0 e3 BCS &28c9 ; leave_with_carry_clear ; check_if_player &28e6 c0 00 CPY #&00 ; MOVER_PLAYER &28e8 d0 09 BNE &28f3 ; not_player &28ea a5 8f LDA &8f ; player_helicopter_explosion # Non-zero if player in exploding helicopter &28ec d0 db BNE &28c9 ; leave_with_carry_clear &28ee 20 7a 2c JSR &2c7a ; unbuffer_player_getting_addresses &28f1 80 0c BRA &28ff ; skip_unplotting_mover *** # 65C02 opcode ; not_player &28f3 a6 87 LDX &87 ; dying_mover &28f5 20 7f 28 JSR &287f ; check_for_player_collision_with_mover_Y # Returns carry set if collision &28f8 a4 87 LDY &87 ; dying_mover &28fa b0 cd BCS &28c9 ; leave_with_carry_clear # Skip unplotting if player was cause of collision &28fc 20 6a 1e JSR &1e6a ; plot_mover ; skip_unplotting_mover &28ff a4 87 LDY &87 ; dying_mover ; kill_mover_Y &2901 84 87 STY &87 ; dying_mover &2903 20 d3 28 JSR &28d3 ; set_dying_mover_type &2906 a9 00 LDA #&00 # Play sound for explosion &2908 20 8a 2f JSR &2f8a ; play_sound &290b a6 91 LDX &91 ; dying_mover_type &290d a9 10 LDA #&10 # Play sound for exploding soldier &290f e0 05 CPX #&05 ; MOVER_TYPE_FIRST_HELICOPTER &2911 90 02 BCC &2915 ; play_sound_for_dying_mover &2913 a9 08 LDA #&08 # Play sound for exploding helicopter ; play_sound_for_dying_mover &2915 20 8a 2f JSR &2f8a ; play_sound &2918 a4 87 LDY &87 ; dying_mover &291a d0 0f BNE &292b ; not_player ; is_player &291c a5 84 LDA &84 ; player_helicopter # Zero if player not in helicopter &291e d0 3a BNE &295a ; kill_player_helicopter ; kill_player &2920 c6 95 DEC &95 ; lives &2922 08 PHP ; out of lives &2923 20 7e 32 JSR &327e ; plot_lives &2926 a4 87 LDY &87 ; dying_mover &2928 28 PLP ; out of lives &2929 d0 2c BNE &2957 ; to_plot_mover # Don't turn player into skeleton until last life ; not_player &292b a6 91 LDX &91 ; dying_mover_type &292d a9 0d LDA #&0d ; MOVER_TYPE_SKELETON &292f e0 05 CPX #&05 ; MOVER_TYPE_FIRST_HELICOPTER &2931 a2 03 LDX #&03 &2933 90 03 BCC &2938 ; set_dying_mover_type_and_frame &2935 a9 0e LDA #&0e ; MOVER_TYPE_EXPLOSION &2937 e8 INX ; set_dying_mover_type_and_frame &2938 99 43 15 STA &1543,Y ; movers_type_and_colour &293b 8a TXA &293c 85 81 STA &81 ; frame &293e b9 65 15 LDA &1565,Y ; movers_frame_and_flip &2941 29 80 AND #&80 &2943 49 80 EOR #&80 &2945 05 81 ORA &81 ; frame &2947 99 65 15 STA &1565,Y ; movers_frame_and_flip &294a 84 92 STY &92 ; dying_mover &294c a6 92 LDX &92 ; dying_mover &294e 20 7f 28 JSR &287f ; check_for_player_collision_with_mover_Y # Returns carry set if collision &2951 a4 92 LDY &92 ; dying_mover &2953 f0 02 BEQ &2957 ; to_plot_mover &2955 b0 45 BCS &299c ; remove_mover # Skip unplotting if player was cause of collision ; to_plot_mover &2957 4c 6a 1e JMP &1e6a ; plot_mover ; kill_player_helicopter &295a ae 43 15 LDX &1543 ; movers_type_and_colour *** &295d bd 30 17 LDA &1730,X ; mover_types_animation_frames *** &2960 cd 65 15 CMP &1565 ; movers_frame_and_flip *** &2963 f0 09 BEQ &296e ; already_wrecked *** &2965 8d 65 15 STA &1565 ; movers_frame_and_flip *** # Set helicopter or tank as wreck &2968 a9 ff LDA #&ff *** &296a 85 97 STA &97 ; helicopter_fuel_high *** &296c 80 e9 BRA &2957 ; to_plot_mover *** # 65C02 opcode ; already_wrecked *** &296e a9 04 LDA #&04 &2970 8d 65 15 STA &1565 ; movers_frame_and_flip &2973 20 92 29 JSR &2992 ; plot_player_bullet_and_grenade # Unplot player bullet and grenade &2976 a0 11 LDY #&11 ; MOVER_PLAYER_BULLET &2978 20 2f 25 JSR &252f ; use_player_position_for_mover_Y &297b ad ed 15 LDA &15ed ; movers_screen_address_low &297e a0 06 LDY #&06 ; &0030 &2980 20 37 1d JSR &1d37 ; add_delta_to_screen_address_in_AX &2983 a0 0c LDY #&0c ; MOVER_PLAYER_GRENADE # Use slots for player helicopter explosions &2985 20 35 25 JSR &2535 ; use_player_position_for_mover_Y_with_screen_address_from_AX &2988 a0 0e LDY #&0e ; MOVER_TYPE_EXPLOSION &298a 8c 4f 15 STY &154f ; movers_type_and_colour + &c (MOVER_PLAYER_GRENADE) &298d 8c 54 15 STY &1554 ; movers_type_and_colour + &11 (MOVER_PLAYER_BULLET) &2990 84 8f STY &8f ; player_helicopter_explosion # Set to non-zero to indicate player helicopter exploding ; plot_player_bullet_and_grenade &2992 a0 11 LDY #&11 ; MOVER_PLAYER_BULLET &2994 20 6a 1e JSR &1e6a ; plot_mover &2997 a0 0c LDY #&0c ; MOVER_PLAYER_GRENADE &2999 4c 6a 1e JMP &1e6a ; plot_mover ; remove_mover &299c a9 ff LDA #&ff &299e 99 a9 15 STA &15a9,Y ; movers_x_high # Set to negative to indicate no mover in slot &29a1 60 RTS ; update_projectiles &29a2 a0 17 LDY #&17 ; MOVER_LAST_PROJECTILE ; update_projectiles_loop &29a4 84 03 STY &03 ; mover_to_update &29a6 b9 a9 15 LDA &15a9,Y ; movers_x_high # Negative if no projectile in slot &29a9 30 17 BMI &29c2 ; to_consider_next_projectile &29ab b9 43 15 LDA &1543,Y ; movers_type_and_colour &29ae c9 0e CMP #&0e ; MOVER_TYPE_EXPLOSION &29b0 d0 13 BNE &29c5 ; update_projectile ; update_explosion &29b2 20 6a 1e JSR &1e6a ; plot_mover # Unplot explosion &29b5 a6 03 LDX &03 ; mover_to_update &29b7 a4 03 LDY &03 ; mover_to_update &29b9 de 65 15 DEC &1565,X ; movers_frame_and_flip &29bc 18 CLC &29bd 10 59 BPL &2a18 ; to_replot_projectile ; remove_projectile &29bf 20 9c 29 JSR &299c ; remove_mover ; to_consider_next_projectile &29c2 4c 82 2a JMP &2a82 ; consider_next_projectile &29c5 b9 53 16 LDA &1653,Y ; projectiles_y_velocity - &c &29c8 be 5f 16 LDX &165f,Y ; projectiles_is_rocket - &c # Non-zero if projectile is rocket &29cb d0 19 BNE &29e6 ; is_rocket ; not_rocket &29cd c0 11 CPY #&11 ; MOVER_PLAYER_BULLET # Bullets aren't affected by gravity &29cf b0 1e BCS &29ef ; set_y_delta &29d1 aa TAX &29d2 30 08 BMI &29dc ; increase_downwards_velocity &29d4 ca DEX # Grenades and bombs fall &29d5 8a TXA &29d6 d0 17 BNE &29ef ; set_y_delta &29d8 a9 80 LDA #&80 &29da 30 13 BMI &29ef ; set_y_delta ; increase_downwards_velocity &29dc e8 INX &29dd 8a TXA &29de c9 86 CMP #&86 &29e0 90 0d BCC &29ef ; set_y_delta &29e2 a9 86 LDA #&86 &29e4 30 09 BMI &29ef ; set_y_delta # Always branches ; is_rocket &29e6 aa TAX &29e7 e8 INX # Rockets accelerate upwards &29e8 e0 0a CPX #&0a &29ea 90 02 BCC &29ee ; skip_ceiling &29ec a2 0a LDX #&0a ; skip_ceiling &29ee 8a TXA ; set_y_delta &29ef 85 7d STA &7d ; y_delta &29f1 99 53 16 STA &1653,Y ; projectiles_y_velocity - &c &29f4 b9 47 16 LDA &1647,Y ; projectiles_x_velocity - &c &29f7 85 7c STA &7c ; x_delta &29f9 20 ae 24 JSR &24ae ; unplot_and_move_mover # Move projectile &29fc a6 03 LDX &03 ; mover_to_update &29fe a4 8d LDY &8d ; hostile_mover # Positive if projectile hit hostile mover &2a00 10 1f BPL &2a21 ; projectile_hit_mover &2a02 bd cb 15 LDA &15cb,X ; movers_y &2a05 c9 19 CMP #&19 &2a07 90 46 BCC &2a4f ; explode_projectile # Explode grenades and bombs on ground &2a09 bc 43 15 LDY &1543,X ; movers_type_and_colour &2a0c c0 0f CPY #&0f ; MOVER_TYPE_BULLET &2a0e f0 04 BEQ &2a14 ; skip_top_check *** &2a10 c9 ae CMP #&ae &2a12 b0 3b BCS &2a4f ; explode_projectile # Explode rocket at top of screen ; skip_top_check &2a14 a4 03 LDY &03 ; mover_to_update &2a16 c0 11 CPY #&11 ; MOVER_FIRST_BULLET ; to_replot_projectile &2a18 90 65 BCC &2a7f ; replot_projectile # Grenades have no ttl, but bullets do &2a1a de 6b 16 DEC &166b,X ; projectiles_ttl - &c &2a1d f0 30 BEQ &2a4f ; explode_projectile # Explode projectile at end of life &2a1f d0 5e BNE &2a7f ; replot_projectile # Always branches ; projectile_hit_mover &2a21 e0 11 CPX #&11 ; MOVER_PLAYER_BULLET &2a23 f0 04 BEQ &2a29 ; is_player_projectile &2a25 e0 0c CPX #&0c ; MOVER_PLAYER_GRENADE &2a27 d0 03 BNE &2a2c ; not_player_projectile ; is_player_projectile &2a29 20 1c 33 JSR &331c ; increase_score_for_killing_enemy &2a2c 20 b7 30 JSR &30b7 ; get_mover_type *** ; not_player_projectile &2a2f a4 8d LDY &8d ; projectile_hit_mover *** &2a31 c9 0f CMP #&0f ; MOVER_TYPE_BULLET *** &2a33 d0 07 BNE &2a3c ; not_bullet *** &2a35 20 b9 30 JSR &30b9 ; get_mover_Y_type *** # Returns A = mover type &2a38 c9 14 CMP #&14 ; MOVER_TYPE_TANK *** &2a3a f0 13 BEQ &2a4f ; explode_projectile *** # Tank is not damaged by bullets ; not_bullet *** &2a3c a6 8d LDX &8d ; projectile_hit_mover &2a3e f0 09 BEQ &2a49 ; projectile_hit_player &2a40 20 7f 28 JSR &287f ; check_for_player_collision_with_mover_Y # Returns carry set if collision &2a43 a4 8d LDY &8d ; hostile_mover &2a45 90 02 BCC &2a49 ; explode_mover_Y &2a47 a0 00 LDY #&00 ; MOVER_PLAYER ; projectile_hit_player &2a49 20 d9 28 JSR &28d9 ; kill_mover &2a4c 4c 61 2a JMP &2a61 ; replace_projectile_with_explosion ; explode_projectile &2a4f a4 03 LDY &03 ; mover_to_update ; explode_mover_Y &2a51 a9 38 LDA #&38 # Play sound for exploding bullet &2a53 c0 11 CPY #&11 ; MOVER_FIRST_BULLET &2a55 b0 07 BCS &2a5e ; play_sound_for_exploding_projectile &2a57 a9 00 LDA #&00 # Play sound for exploding grenade &2a59 20 8a 2f JSR &2f8a ; play_sound &2a5c a9 08 LDA #&08 # Play sound for exploding grenade ; play_sound_for_exploding_projectile &2a5e 20 8a 2f JSR &2f8a ; play_sound ; replace_projectile_with_explosion &2a61 a4 03 LDY &03 ; mover_to_update &2a63 a9 04 LDA #&04 # Big explosion &2a65 c0 11 CPY #&11 ; MOVER_FIRST_BULLET &2a67 90 02 BCC &2a6b ; set_frame_and_flip &2a69 a9 00 LDA #&00 # Small explosion ; set_frame_and_flip &2a6b 99 65 15 STA &1565,Y ; movers_frame_and_flip &2a6e a9 0e LDA #&0e ; MOVER_TYPE_EXPLOSION &2a70 99 43 15 STA &1543,Y ; movers_type_and_colour &2a73 a2 00 LDX #&00 ; MOVER_PLAYER &2a75 20 3f 28 JSR &283f ; check_for_mover_Y_collision_with_player # Returns carry set if collision &2a78 a4 03 LDY &03 ; mover_to_update &2a7a 90 03 BCC &2a7f ; replot_projectile &2a7c 4c bf 29 JMP &29bf ; remove_projectile ; replot_projectile &2a7f 20 6a 1e JSR &1e6a ; plot_mover # Plot projectile or explosion ; consider_next_projectile &2a82 a4 03 LDY &03 ; mover_to_update &2a84 88 DEY &2a85 c0 0c CPY #&0c ; MOVER_FIRST_PROJECTILE &2a87 90 03 BCC &2a8c ; leave &2a89 4c a4 29 JMP &29a4 ; update_projectiles_loop ; leave &2a8c 60 RTS ; calculate_mover_x_max_from_offset_getting_frame_and_flip &2a8d 20 61 31 JSR &3161; get_mover_frame_and_flip ; calculate_mover_x_max_from_offset &2a90 a6 c5 LDX &c5 ; mover_x_high &2a92 86 c6 STX &c6 ; mover_x_max_high &2a94 a5 f8 LDA &f8 ; mover_x_low &2a96 a4 b7 LDY &b7 ; frame_and_flip &2a98 30 0b BMI &2aa5 ; is_flipped ; not_flipped &2a9a 18 CLC &2a9b 65 81 ADC &81 ; mover_x_offset &2a9d 90 01 BCC &2aa0 ; skip_overflow &2a9f e8 INX ; skip_overflow &2aa0 85 c7 STA &c7 ; mover_x_max_low # Leave with mover_x_max = mover_x + x_offset, &2aa2 86 c6 STX &c6 ; mover_x_max_high # mover_x = mover_x if unflipped &2aa4 60 RTS ; is_flipped &2aa5 85 c7 STA &c7 ; mover_x_max_low # Leave with mover_x_max = mover_x, &2aa7 38 SEC # mover_x = mover_x - x_offset if flipped &2aa8 e5 81 SBC &81 ; mover_x_offset &2aaa b0 01 BCS &2aad ; set_mover_x &2aac ca DEX ; set_mover_x &2aad 86 c5 STX &c5 ; mover_x_high &2aaf 85 f8 STA &f8 ; mover_x_low &2ab1 60 RTS ; check_for_collision_with_friends &2ab2 a2 0b LDX #&0b ; MOVER_LAST_ENEMY_HELICOPTER ; check_for_collision_with_non_bullet_movers_loop &2ab4 20 89 28 JSR &2889 ; check_for_mover_collision_with_mover_X &2ab7 90 05 BCC &2abe ; consider_next_mover &2ab9 20 c3 2a JSR &2ac3 ; check_if_friendly # Returns carry set if friendly &2abc 90 04 BCC &2ac2 ; leave # Leave with carry clear to indicate hostile collision ; consider_next_mover &2abe ca DEX &2abf 10 f3 BPL &2ab4 ; check_for_collision_with_non_bullet_movers_loop &2ac1 38 SEC # Leave with carry set to indicate no hostile collision ; leave &2ac2 60 RTS ; check_if_friendly &2ac3 a4 03 LDY &03 ; mover_to_update &2ac5 bd 43 15 LDA &1543,X ; movers_type_and_colour &2ac8 c9 0d CMP #&0d ; MOVER_TYPE_SKELETON # Skeletons are friendly &2aca f0 06 BEQ &2ad2 ; leave_with_carry_set &2acc 59 43 15 EOR &1543,Y ; movers_type_and_colour # Otherwise check if movers are same colour &2acf 18 CLC # Leave with carry clear to indicate unfriendly &2ad0 30 f0 BMI &2ac2 ; leave ; leave_with_carry_set &2ad2 38 SEC # Leave with carry set to indicate friendly &2ad3 60 RTS ; search_for_target_with_offset &2ad4 85 81 STA &81 ; mover_x_offset &2ad6 20 da 1f JSR &1fda ; get_mover_x_and_y &2ad9 20 8b 20 JSR &208b ; check_if_mover_Y_is_on_screen # Returns carry set if mover is not on screen &2adc b0 f4 BCS &2ad2 ; leave_with_carry_set # If so, leave with carry set to indicate no target found &2ade a5 f9 LDA &f9 ; mover_y &2ae0 18 CLC &2ae1 69 40 ADC #&40 &2ae3 85 c9 STA &c9 ; mover_y_max ; search_for_target &2ae5 20 90 2a JSR &2a90 ; calculate_mover_x_max_from_offset &2ae8 a2 ff LDX #&ff &2aea 86 b6 STX &b6 ; target # Set to negative to indicate no target found by default &2aec e8 INX ; 0 &2aed 86 89 STX &89 ; friendly_targets_found &2aef 86 8a STX &8a ; unfriendly_targets_found &2af1 a2 0b LDX #&0b ; MOVER_LAST_ENEMY_HELICOPTER ; search_for_target_loop &2af3 20 89 28 JSR &2889 ; check_for_mover_collision_with_mover_X # Returns carry set if collision, i.e. mover in range &2af6 90 29 BCC &2b21 ; consider_next_enemy &2af8 20 c3 2a JSR &2ac3 ; check_if_friendly *** # Returns carry set if friendly &2afb 90 04 BCC &2b01 ; not_friendly *** ; is_friendly *** &2afd e6 89 INC &89 ; friendly_targets_found *** &2aff 80 02 BRA &2b03 ; consider_target *** # 65C02 opcode ; not_friendly *** &2b01 e6 8a INC &8a ; unfriendly_targets_found *** ; consider_target *** &2b03 a4 b6 LDY &b6 ; target &2b05 30 18 BMI &2b1f ; found_target ; check_if_target_is_better &2b07 b9 a9 15 LDA &15a9,Y ; movers_x_high # Prefer nearer targets &2b0a dd a9 15 CMP &15a9,X ; movers_x_high &2b0d d0 06 BNE &2b15 ; skip_low_check &2b0f b9 87 15 LDA &1587,Y ; movers_x_low &2b12 dd 87 15 CMP &1587,X ; movers_x_low ; skip_low_check &2b15 a5 b7 LDA &b7 ; frame_and_flip &2b17 30 04 BMI &2b1d ; is_facing_left ; is_facing_right &2b19 90 06 BCC &2b21 ; consider_next_enemy &2b1b b0 02 BCS &2b1f ; found_target # Always branches ; is_facing_left &2b1d b0 02 BCS &2b21 ; consider_next_enemy ; found_target &2b1f 86 b6 STX &b6 ; target ; consider_next_enemy &2b21 ca DEX &2b22 10 cf BPL &2af3 ; search_for_target_loop &2b24 a6 b6 LDX &b6 ; target &2b26 10 9b BPL &2ac3 ; check_if_friendly # Leave with carry clear if unfriendly target found &2b28 38 SEC # Leave with carry set to indicate no target found &2b29 60 RTS ; find_free_projectile_slot # Called with A = first slot, X = last slot + 1 &2b2a 85 85 STA &85 ; last_slot ; find_free_projectile_slot_loop &2b2c bd b5 15 LDA &15b5,X ; movers_x_high + &c (MOVERS_FIRST_PROJECTILE) &2b2f 30 07 BMI &2b38 ; found_free_slot &2b31 e8 INX &2b32 e4 85 CPX &85 ; last_slot &2b34 90 f6 BCC &2b2c ; find_free_projectile_slot_loop &2b36 a2 ff LDX #&ff # Negative to indicate no free slot ; found_free_slot &2b38 86 86 STX &86 ; projectile_slot &2b3a 20 b9 30 JSR &30b9 ; get_mover_Y_type # Returns A = mover type &2b3d aa TAX # Leave with A = X = mover type &2b3e 60 RTS ; add_mover_bullet &2b3f a4 03 LDY &03 ; mover_to_update &2b41 a9 06 LDA #&06 ; MOVER_FIRST_ENEMY_BULLET - &c &2b43 be 43 15 LDX &1543,Y ; movers_type_and_colour # Negative if enemy &2b46 30 02 BMI &2b4a ; calculate_last_slot &2b48 a9 09 LDA #&09 ; MOVER_FIRST_ALLY_BULLET - &c ; calculate_last_slot &2b4a aa TAX &2b4b 18 CLC &2b4c 69 03 ADC #&03 &2b4e 20 2a 2b JSR &2b2a ; find_free_projectile_slot # Returns X = mover type &2b51 a5 86 LDA &86 ; projectile_slot &2b53 30 17 BMI &2b6c ; leave_with_carry_set # Negative if no free slot ; add_bullet &2b55 bc 67 17 LDY &1767,X ; mover_types_new_bullet_y_offset &2b58 bd d3 17 LDA &17d3,X ; mover_types_new_bullet_y_velocity *** &2b5b 85 78 STA &78 ; y_velocity &2b5d bd b8 17 LDA &17b8,X ; mover_types_new_bullet_type &2b60 f0 0a BEQ &2b6c ; leave_with_carry_set # Leave if mover can't fire bullets &2b62 20 88 2b JSR &2b88 ; add_new_projectile &2b65 a6 86 LDX &86 ; projectile_slot &2b67 fe 53 16 INC &1653,X ; projectiles_x_velocity &2b6a 18 CLC # Leave with carry clear to indicate bullet added &2b6b 60 RTS ; leave_with_carry_set &2b6c 38 SEC # Leave with carry set to indicate couldn't add bullet &2b6d 60 RTS ; add_new_grenade # Also bombs and rockets &2b6e a4 03 LDY &03 ; mover_to_update &2b70 a2 01 LDX #&01 ; MOVER_FIRST_ENEMY_GRENADE - &c &2b72 a9 05 LDA #&05 ; MOVER_LAST_ENEMY_GRENADE - &c + 1 &2b74 20 2a 2b JSR &2b2a ; find_free_projectile_slot # Returns X = mover type &2b77 a4 86 LDY &86 ; projectile_slot &2b79 30 f1 BMI &2b6c ; leave_with_carry_set # Negative if no free slot ; add_new_grenade_to_slot &2b7b bd 9d 17 LDA &179d,X ; mover_types_new_grenade_bomb_or_rocket_y_velocity &2b7e 85 78 STA &78 ; y_velocity &2b80 bc 4c 17 LDY &174c,X ; mover_types_new_grenade_bomb_or_rocket_y_offset &2b83 bd 82 17 LDA &1782,X ; mover_types_new_grenade_bomb_or_rocket_type &2b86 f0 e4 BEQ &2b6c ; leave_with_carry_set # Leave if mover can't fire grenade ; add_new_projectile &2b88 84 87 STY &87 ; projectile_y_offset &2b8a a4 86 LDY &86 ; projectile_slot &2b8c 99 4f 15 STA &154f,Y ; movers_type_and_colour + &c (MOVERS_FIRST_PROJECTILE) &2b8f 86 a1 STX &a1 ; firing_mover_type &2b91 a9 00 LDA #&00 &2b93 e0 05 CPX #&05 ; MOVER_TYPE_FIRST_HELICOPTER &2b95 b0 05 BCS &2b9c ; not_soldier &2b97 a4 a0 LDY &a0 ; firing_frame &2b99 b9 9f 18 LDA &189f,Y ; sprites_y_offset ; not_soldier &2b9c a6 86 LDX &86 ; projectile_slot &2b9e a4 03 LDY &03 ; mover_to_update &2ba0 18 CLC &2ba1 65 87 ADC &87 ; projectile_y_offset &2ba3 85 87 STA &87 ; projectile_y_offset &2ba5 79 cb 15 ADC &15cb,Y ; movers_y &2ba8 38 SEC &2ba9 e9 0a SBC #&0a &2bab 9d d7 15 STA &15d7,X ; movers_y + &c (MOVERS_FIRST_PROJECTILE) &2bae b9 65 15 LDA &1565,Y ; movers_frame_and_flip &2bb1 29 80 AND #&80 &2bb3 9d 71 15 STA &1571,X ; movers_frame_and_flip + &c (MOVERS_FIRST_PROJECTILE) &2bb6 85 89 STA &89 ; firing_direction &2bb8 a2 05 LDX #&05 &2bba a9 01 LDA #&01 # Set projectiles_is_rocket to non-zero if rocket &2bbc a4 a1 LDY &a1 ; firing_mover_type &2bbe c0 0c CPY #&0c ; MOVER_TYPE_SAM &2bc0 f0 07 BEQ &2bc9 ; skip_offset &2bc2 be d7 16 LDX &16d7,Y ; mover_types_width_table &2bc5 e8 INX &2bc6 e8 INX &2bc7 a9 00 LDA #&00 # Set projectiles_is_rocket to zero if not rocket ; skip_offset &2bc9 a4 86 LDY &86 ; projectile_slot &2bcb 99 6b 16 STA &166b,Y ; projectiles_is_rocket &2bce 49 01 EOR #&01 &2bd0 45 89 EOR &89 ; firing_direction &2bd2 99 53 16 STA &1653,Y ; projectiles_x_velocity &2bd5 86 88 STX &88 ; projectile_x_offset &2bd7 a4 03 LDY &03 ; mover_to_update &2bd9 b9 87 15 LDA &1587,Y ; movers_x_low &2bdc be a9 15 LDX &15a9,Y ; movers_x_high &2bdf a4 a1 LDY &a1 ; firing_mover_type &2be1 c0 0c CPY #&0c ; MOVER_TYPE_SAM &2be3 f0 04 BEQ &2be9 ; add_x_offset &2be5 a4 89 LDY &89 ; firing_direction &2be7 30 08 BMI &2bf1 ; subtract_x_offset ; add_x_offset &2be9 18 CLC &2bea 65 88 ADC &88 ; projectile_x_offset &2bec 90 09 BCC &2bf7 ; calculate_bullet_screen_address &2bee e8 INX &2bef 10 06 BPL &2bf7 ; calculate_bullet_screen_address # Always branches ; subtract_x_offset &2bf1 38 SEC &2bf2 e9 04 SBC #&04 &2bf4 b0 01 BCS &2bf7 ; calculate_bullet_screen_address &2bf6 ca DEX ; calculate_bullet_screen_address &2bf7 a4 86 LDY &86 ; projectile_slot &2bf9 99 93 15 STA &1593,Y ; movers_x_low + &c (MOVERS_FIRST_PROJECTILE) &2bfc 8a TXA &2bfd 99 b5 15 STA &15b5,Y ; movers_x_high + &c (MOVERS_FIRST_PROJECTILE) &2c00 a4 03 LDY &03 ; mover_to_update &2c02 be 0f 16 LDX &160f,Y ; movers_screen_address_high &2c05 b9 ed 15 LDA &15ed,Y ; movers_screen_address_low &2c08 a4 a1 LDY &a1 ; firing_mover_type &2c0a c0 0c CPY #&0c ; MOVER_TYPE_SAM &2c0c f0 04 BEQ &2c12 ; mover_is_firing_right &2c0e a4 89 LDY &89 ; firing_direction &2c10 30 0b BMI &2c1d ; mover_is_firing_left ; mover_is_firing_right &2c12 a0 00 LDY #&00 ; &0008 # Move right a column &2c14 20 37 1d JSR &1d37 ; add_delta_to_screen_address_in_AX &2c17 c6 88 DEC &88 ; projectile_x_offset &2c19 d0 f7 BNE &2c12 ; mover_is_firing_right &2c1b f0 05 BEQ &2c22 ; subtract_y_offset # Always branches ; mover_is_firing_left &2c1d a0 04 LDY #&04 ; &0020 # Move left four columns &2c1f 20 56 1d JSR &1d56 ; subtract_delta_from_screen_address_in_AX ; subtract_y_offset &2c22 a4 87 LDY &87 ; projectile_y_offset &2c24 20 69 1d JSR &1d69 ; subtract_Y_rows_from_screen_address_in_AX &2c27 a0 0a LDY #&0a &2c29 20 82 1d JSR &1d82 ; add_Y_rows_from_screen_address_in_AX &2c2c a4 86 LDY &86 ; projectile_slot &2c2e 99 f9 15 STA &15f9,Y ; movers_screen_address_low + &c (MOVERS_FIRST_PROJECTILE) &2c31 8a TXA &2c32 99 1b 16 STA &161b,Y ; movers_screen_address_high + &c (MOVERS_FIRST_PROJECTILE) &2c35 a5 78 LDA &78 ; y_velocity &2c37 99 5f 16 STA &165f,Y ; projectiles_y_velocity &2c3a a9 0e LDA #&0e &2c3c a6 a1 LDX &a1 ; firing_mover_type &2c3e e0 05 CPX #&05 ; MOVER_TYPE_FIRST_HELICOPTER &2c40 b0 10 BCS &2c52 ; set_ttl ; is_soldier &2c42 a5 ba LDA &ba ; viewport_left_high &2c44 4a LSR A &2c45 c9 04 CMP #&04 &2c47 b0 07 BCS &2c50 ; use_ceiling &2c49 29 03 AND #&03 &2c4b 18 CLC &2c4c 69 0a ADC #&0a &2c4e 90 02 BCC &2c52 ; set_ttl ; use_ceiling &2c50 a9 0e LDA #&0e &2c52 99 77 16 STA &1677,Y ; projectiles_ttl - &c + &c (MOVERS_FIRST_PROJECTILE) &2c55 18 CLC &2c56 60 RTS ; get_player_screen_address &2c57 ad ed 15 LDA &15ed ; movers_screen_address_low &2c5a ae 0f 16 LDX &160f ; movers_screen_address_high &2c5d 85 8b STA &8b ; player_screen_address_low &2c5f 86 8c STX &8c ; player_screen_address_high &2c61 60 RTS *** # Standard version gets buffer address as well ; set_buffering_or_unbuffering &2c62 a0 03 LDY #&03 ; set_buffering_or_unbuffering_loop &2c64 bd fd 2c LDA &2cfd,X ; buffer_or_unbuffer_code &2c67 99 aa 2c STA &2caa,Y ; buffer_or_unbuffer_player_column_loop &2c6a ca DEX &2c6b 88 DEY &2c6c 10 f6 BPL &2c64 ; set_buffering_or_unbuffering_loop &2c6e 60 RTS ; buffer_player &2c6f 64 9b STZ &9b ; buffer_x_origin *** # 65C02 opcode &2c71 64 9c STZ &9c ; buffer_y_origin *** # 65C02 opcode &2c73 20 57 2c JSR &2c57 ; get_player_screen_address &2c76 a2 07 LDX #&07 # Use buffering code &2c78 d0 05 BNE &2c7f ; buffer_or_unbuffer_player # Always branches ; unbuffer_player_getting_addresses &2c7a 20 57 2c JSR &2c57 ; get_player_screen_address ; unbuffer_player &2c7d a2 03 LDX #&03 # Use unbuffering code ; buffer_or_unbuffer_player &2c7f 20 62 2c JSR &2c62 ; set_buffering_or_unbuffering &2c82 20 ac 2d JSR &2dac ; calculate_player_width_and_height *** &2c85 a5 9e LDA &9e ; player_mover_height *** &2c87 85 79 STA &79 ; rows_remaining *** &2c89 a5 9c LDA &9c ; buffer_y_origin *** &2c8b 85 77 STA &77 ; buffer_y *** &2c8d a6 9d LDX &9d ; player_mover_width *** &2c8f 20 1e 2f JSR &2f1e ; multiply_A_by_X *** &2c92 a5 c5 LDA &c5 ; result_low *** &2c94 85 89 STA &89 ; buffer_address_low *** &2c96 a5 c6 LDA &c6 ; result_high *** &3c98 09 80 ORA #&80 ; &8000 = player_buffer *** &2c9a 85 8a STA &8a ; buffer_address_high *** ; buffer_or_unbuffer_player_row_loop &2c9c a4 8b LDY &8b ; player_screen_address_low &2c9e a5 8c LDA &8c ; player_screen_address_high &2ca0 85 cf STA &cf ; screen_address_high &2ca2 a5 9d LDA &9d ; player_mover_width *** &2ca4 85 7a STA &7a ; columns_remaining &2ca6 84 ce STY &ce ; screen_address_low *** &2ca8 a4 9b LDY &9b ; buffer_x_origin *** ; buffer_or_unbuffer_player_column_loop &2caa b1 89 LDA (&89),Y ; buffer_address # if unbuffering # also LDA (&ce) ; screen_address *** # 65C02 opcode; if buffering &2cac 92 ce STA (&ce) ; screen_address *** # 65C02 opcode; if unbuffering # also STA (&89,Y) ; buffer_address # if buffering &2cae a5 ce LDA &ce ; screen_address_low *** &2cb0 18 CLC &2cb1 69 08 ADC #&08 &2cb3 85 ce STA &ce ; screen_address_low *** &2cb5 90 08 BCC &2cbf ; skip_page_screen &2cb7 e6 cf INC &cf ; screen_address_high &2cb9 10 04 BPL &2cbf ; skip_wraparound_screen &2cbb a9 40 LDA #&40 &2cbd 85 cf STA &cf ; screen_address_high ; skip_wraparound_screen ; skip_page_screen &2cbf c8 INY *** &2cc0 c4 9d CPY &9d ; player_mover_width *** &2cc2 90 02 BCC &2cc6 ; skip_wraparound_width *** &2cc4 a0 00 LDY #&00 *** ; skip_wraparound_width &2cc6 c6 7a DEC &7a ; columns_remaining &2cc8 d0 e0 BNE &2caa ; buffer_or_unbuffer_player_column_loop &2cca a5 8b LDA &8b ; player_screen_address_low &2ccc a6 8c LDX &8c ; player_screen_address_high &2cce a0 01 LDY #&01 &2cd0 20 69 1d JSR &1d69 ; subtract_Y_rows_from_screen_address_in_AX &2cd3 85 8b STA &8b ; player_screen_address_low &2cd5 86 8c STX &8c ; player_screen_address_high &2cd7 a5 89 LDA &89 ; buffer_address_low *** &2cd9 18 CLC *** &2cda 65 9d ADC &9d ; player_mover_width *** &2cdc 85 89 STA &89 ; buffer_address_low *** &2cde 90 02 BCC &2ce2 ; skip_page *** &2ce0 e6 8a INC &8a ; buffer_address_high *** ; skip_page *** &2ce2 e6 77 INC &77 ; buffer_y *** &2ce4 a5 77 LDA &77 ; buffer_y *** &2ce6 c5 9e CMP &9e ; player_mover_height *** &2ce8 90 08 BCC &2cf2 ; skip_wraparound_height *** &2cea 64 89 STZ &89 ; buffer_address_low *** # 65C02 opcode &2cec a9 80 LDA #&80 ; &8000 = player_buffer *** &2cee 85 8a STA &8a ; buffer_address_high *** &2cf0 64 77 STZ &77 ; buffer_y *** # 65C02 opcode ; skip_wraparound_height *** &2cf2 c6 79 DEC &79 ; rows_remaining &2cf4 d0 a6 BNE &2c9c ; buffer_or_unbuffer_player_row_loop &2cf6 60 RTS ; check_if_player_is_on_ground &2cf7 ad cb 15 LDA &15cb ; movers_y &2cfa c9 18 CMP #&18 &2cfc 60 RTS ; buffer_or_unbuffer_code # Copied, not executed &2cfd b1 89 LDA (&89),Y ; buffer_address # &03 : unbuffer (copy from buffer to screen) &2cff 92 ce STA (&ce) ; screen_address *** # 65C02 opcode ; # &07 : buffer (copy from screen to buffer) &2d01 b2 ce LDA (&ce) ; screen_address *** # 65C02 opcode &2d03 91 89 STA (&89),Y ; buffer_address ; buffer_player_x_edge *** # &2d05 - &2ea7 is extra code &2d05 a5 9e LDA &9e ; player_mover_height &2d07 85 79 STA &79 ; rows_remaining &2d09 64 cc STZ &cc ; buffer_offset # 65C02 opcode ; buffer_player_x_edge_loop &2d0b a4 cc LDY &cc ; buffer_offset &2d0d b2 ce LDA (&ce) ; screen_address # 65C02 opcode &2d0e 99 00 82 STA &8200,Y ; player_x_edge_buffer &2d12 c8 INY &2d13 84 cc STY &cc ; buffer_offset &2d15 a6 cf LDX &cf ; screen_address_high &2d17 a5 ce LDA &ce ; screen_address_low &2d19 a0 01 LDY #&01 &2d1b 20 69 1d JSR &1d69 ; subtract_Y_rows_from_screen_address_in_AX &2d1e 86 cf STX &cf ; screen_address_high &2d20 85 ce STA &ce ; screen_address_low &2d22 c6 79 DEC &79 ; rows_remaining &2d24 d0 e5 BNE &2d0b ; buffer_player_x_edge_loop &2d26 60 RTS ; buffer_player_y_edge &2d27 64 cc STZ &cc ; buffer_offset # 65C02 opcode ; buffer_player_y_edge_row_loop &2d29 85 89 STA &89 ; player_edge_screen_address_low &2d2b 86 8a STX &8a ; player_edge_screen_address_high &2d2d a5 9d LDA &9d ; player_mover_width &2d2f 85 79 STA &79 ; columns_remaining ; buffer_player_y_edge_column_loop &2d31 a4 cc LDY &cc ; buffer_offset &2d33 b2 ce LDA (&ce) ; screen_address # 65C02 opcode &2d35 99 00 83 STA &8300,Y ; player_y_edge_buffer &2d38 c8 INY &2d39 84 cc STY &cc ; buffer_offset &2d3b a6 cf LDX &cf ; screen_address_high &2d3d a5 ce LDA &ce ; screen_address_low &2d3f a0 00 LDY #&00 ; &0008 # Move right a column &2d41 20 37 1d JSR &1d37 ; add_delta_to_screen_address_in_AX &2d44 86 cf STX &cf ; screen_address_high &2d46 85 ce STA &ce ; screen_address_low &2d48 c6 79 DEC &79 ; columns_remaining &2d4a d0 e5 BNE &2d31 ; buffer_player_y_edge_column_loop &2d4c a6 8a LDX &8a ; player_edge_screen_address_high &2d4e a5 89 LDA &89 ; player_edge_screen_address_low &2d50 a0 01 LDY #&01 &2d52 20 69 1d JSR &1d69 ; subtract_Y_rows_from_screen_address_in_AX &2d55 86 cf STX &cf ; screen_address_high &2d57 85 ce STA &ce ; screen_address_low &2d59 c6 77 DEC &77 ; rows &2d5b d0 cc BNE &2d29 ; buffer_player_y_edge_row_loop &2d5d 60 RTS ; buffer_player_edges &2d5e 20 ac 2d JSR &2dac ; calculate_player_width_and_height &2d61 a5 9d LDA &9d ; player_mover_width &2d63 3a DEC A # 65C02 opcode &2d64 85 79 STA &79 ; width &2d66 a5 99 LDA &99 ; x_edge_size_and_direction &2d68 29 7f AND #&7f &2d6a f0 1a BEQ &2d86 ; skip_buffering_vertical_edge # If the player is moving horizontally, &2d6c ad ed 15 LDA &15ed ; movers_screen_address_low &2d6f ae 0f 16 LDX &160f ; movers_screen_address_high &2d72 a4 99 LDY &99 ; x_edge_size_and_direction &2d74 30 09 BMI &2d7f ; not_right_edge ; is_right_edge ; calculate_right_edge_loop &2d76 a0 00 LDY #&00 &2d78 20 37 1d JSR &1d37 ; add_delta_to_screen_address_in_AX &2d7b c6 79 DEC &79 ; width &2d7d d0 f7 BNE &2d76 ; calculate_right_edge_loop ; not_right_edge &2d7f 85 ce STA &ce ; screen_address_low &2d81 86 cf STX &cf ; screen_address_high &2d83 20 05 2d JSR &2d05 ; buffer_player_x_edge # Buffer left or right edge behind player ; skip_buffering_vertical_edge &2d86 a5 9a LDA &9a ; y_edge_size_and_direction &2d88 29 7f AND #&7f &2d8a f0 1f BEQ &2dab ; leave # If the player is moving vertically, &2d8c 85 77 STA &77 ; rows &2d8e a5 9e LDA &9e ; player_mover_height &2d90 38 SEC &2d91 e5 77 SBC &77 ; rows &2d93 85 cc STA &cc ; height &2d95 ad ed 15 LDA &15ed ; movers_screen_address_low &2d98 ae 0f 16 LDX &160f ; movers_screen_address_high &2d9b a4 9a LDY &9a ; y_edge_size_and_direction &2d9d 30 05 BMI &2da4 ; not_top_edge ; is_top_edge &2d9f a4 cc LDY &cc ; height &2da1 20 69 1d JSR &1d69 ; subtract_Y_rows_from_screen_address_in_AX ; not_top_edge &2da4 85 ce STA &ce ; screen_address_low &2da6 86 cf STX &cf ; screen_address_high &2da8 20 27 2d JSR &2d27 ; buffer_player_y_edge # Buffer top or bottom edge behind player ; leave &2dab 60 RTS ; calculate_player_width_and_height &2dac a9 05 LDA #&05 # Use &8000 - &83ff of bank 5 for player buffers &2dae 85 f4 STA &f4 ; os_ram_copy_of_currently_selected_rom &2db0 8d 30 fe STA &fe30 ; Paged ROM latch &2db3 ae 43 15 LDX &1543 ; movers_type_and_colour &2db6 bd d7 16 LDA &16d7,X ; mover_types_width_table &2db9 1a INC A # 65C02 opcode &2dba 85 9d STA &9d ; player_mover_width &2dbc bd f3 16 LDA &16f3,X ; mover_types_height_table &2dbf 1a INC A # 65C02 opcode &2dc0 85 9e STA &9e ; player_mover_height &2dc2 60 RTS ; update_player_buffer &2dc3 20 ac 2d JSR &2dac ; calculate_player_width_and_height &2dc6 a5 99 LDA &99 ; x_edge_size_and_direction &2dc8 29 7f AND #&7f &2dca f0 30 BEQ &2dfc ; consider_updating_y_edge &2dcc a4 99 LDY &99 ; x_edge_size_and_direction &2dce 30 23 BMI &2df3 ; is_moving_left ; is_moving_right &2dd0 20 dc 2d JSR &2ddc ; mover_right_in_buffer &2dd3 20 fc 2d JSR &2dfc ; consider_updating_y_edge &2dd6 20 e8 2d JSR &2de8 ; move_left_in_buffer &2dd9 20 27 2e JSR &2e27 ; update_x_edge_of_player_buffer ; move_right_in_buffer &2ddc a5 9b LDA &9b ; buffer_x_origin &2dde 1a INC A # 65C02 opcode &2ddf c5 9d CMP &9d ; player_mover_width &2de1 90 02 BCC &2de5 ; skip_wraparound_right &2de3 a9 00 LDA #&00 ; skip_wraparound_right &2de5 85 9b STA &9b ; buffer_x_origin &2de7 60 RTS ; move_left_in_buffer &2de8 a5 9b LDA &9b ; buffer_x_origin &2dea 3a DEC A # 65C02 opcode &2deb 10 03 BPL &2df0 ; skip_wraparound_left &2ded a5 9d LDA &9d ; player_mover_width &2def 3a DEC A # 65C02 opcode ; skip_wraparound_left &2df0 85 9b STA &9b ; buffer_x_origin &2df2 60 RTS ; is_moving_left &2df3 20 e8 2d JSR &2de8 ; move_left_in_buffer &2df6 20 fc 2d JSR &2dfc ; consider_updating_y_edge &2df9 4c 27 2e JMP &2e27 ; update_x_edge_of_player_buffer ; consider_updating_y_edge &2dfc a5 9a LDA &9a ; y_edge_size_and_direction &2dfe 29 7f AND #&7f &2e00 f0 16 BEQ &2e18 ; leave &2e02 85 77 STA &77 ; rows &2e04 a4 9a LDY &9a ; y_edge_size_and_direction &2e06 30 11 BMI &2e19 ; unbuffer_bottom_edge ; unbuffer_top_edge &2e08 20 68 2e JSR &2e68 ; update_y_edge_of_player_buffer &2e0b a5 9c LDA &9c ; buffer_y_origin &2e0d 18 CLC &2e0e 65 77 ADC &77 ; rows &2e10 c5 9e CMP &9e ; player_mover_height &2e12 90 02 BCC &2e16 ; skip_wraparound_top &2e14 e5 9e SBC &9e ; player_mover_height ; skip_wraparound_top &2e16 85 9c STA &9c ; buffer_y_origin ; leave &2e18 60 RTS ; unbuffer_bottom_edge &2e19 a5 9c LDA &9c ; buffer_y_origin &2e1b 38 SEC &2e1c e5 77 SBC &77 ; rows &2e1e b0 02 BCS &2e22 ; skip_wraparound_bottom &2e20 65 9e ADC &9e ; player_mover_height ; skip_wraparound_bottom &2e22 85 9c STA &9c ; buffer_y_origin &2e24 4c 68 2e JMP &2e68 ; update_y_edge_of_player_buffer ; update_x_edge_of_player_buffer &2e27 20 58 2e JSR &2e58 ; calculate_buffer_address &2e2a a5 9e LDA &9e ; player_mover_height &2e2c 85 79 STA &79 ; rows_remaining &2e2e a4 9b LDY &9b ; buffer_x_origin &2e30 a2 00 LDX #&00 ; update_x_edge_of_player_buffer_loop &2e32 bd 00 82 LDA &8200,X ; player_x_edge_buffer &2e35 91 c5 STA (&c5),Y ; buffer_address &2e37 e8 INX &2e38 a5 c5 LDA &c5 ; buffer_address_low &2e3a 18 CLC &2e3b 65 9d ADC &9d ; player_mover_width &2e3d 90 02 BCC &2e41 ; skip_page &2e3f e6 c6 INC &c6 ; buffer_address_high ; skip_page &2e41 85 c5 STA &c5 ; buffer_address_low &2e43 e6 cd INC &cd ; buffer_y &2e45 a5 cd LDA &cd ; buffer_y &2e47 c5 9e CMP &9e ; player_mover_height &2e49 90 08 BCC &2e53 ; skip_wraparound &2e4b 64 cd STZ &cd ; buffer_y # 65C02 opcode &2e4d 64 c5 STZ &c5 ; buffer_address_low # 65C02 opcode &2e4f a9 80 LDA #&80 ; &8000 = player_buffer &2e51 85 c6 STA &c6 ; buffer_address_high ; skip_wraparound &2e53 c6 79 DEC &79 ; rows_remaining &2e55 d0 db BNE &2e32 ; update_x_edge_of_player_buffer_loop &2e57 60 RTS ; calculate_buffer_address &2e58 a5 9d LDA &9d ; player_mover_width &2e5a a6 9c LDX &9c ; buffer_y_origin &2e5c 86 cd STX &cd ; buffer_y &2e5e 20 1e 2f JSR &2f1e ; multiply_A_by_X &2e61 a5 c6 LDA &c6 ; result_high &2e63 09 80 ORA #&80 ; &8000 = player_buffer &2e65 85 c6 STA &c6 ; result_high &2e67 60 RTS ; update_y_edge_of_player_buffer &2e68 20 58 2e JSR &2e58 ; calculate_buffer_address &2e6b a5 77 LDA &77 ; rows &2e6d 85 79 STA &79 ; rows_remaining &2e6f a2 00 LDX #&00 ; update_y_edge_of_player_buffer_row_loop &2e71 a4 9b LDY &9b ; buffer_x_origin &2e73 a5 9d LDA &9d ; player_mover_width &2e75 85 cc STA &cc ; buffer_x ; update_y_edge_of_player_buffer_column_loop &2e77 bd 00 83 LDA &8300,X ; player_y_edge_buffer &2e7a 91 c5 STA (&c5),Y ; buffer_address &2e7c e8 INX &2e7d c8 INY &2e7e c4 9d CPY &9d ; player_mover_width &2e80 90 02 BCC &2e84 ; skip_wraparound_width &2e82 a0 00 LDY #&00 ; skip_wraparound_width &2e84 c6 cc DEC &cc ; buffer_x &2e86 d0 ef BNE &2e77 ; update_y_edge_of_player_buffer_column_loop &2e88 a5 c5 LDA &c5 ; buffer_address_low &2e8a 18 CLC &2e8b 65 9d ADC &9d ; player_mover_width &2e8d 90 02 BCC &2e91 ; skip_page &2e8f e6 c6 INC &c6 ; buffer_address_high ; skip_page &2e91 85 c5 STA &c5 ; buffer_address_low &2e93 e6 cd INC &cd ; buffer_y &2e95 a5 cd LDA &cd ; buffer_y &2e97 c5 9e CMP &9e ; player_mover_height &2e99 90 08 BCC &2ea3 ; skip_wraparound_height &2e9b 64 cd STZ &cd ; buffer_y # 65C02 opcode &2e9d 64 c5 STZ &c5 ; buffer_address_low # 65C02 opcode &2e9f a9 80 LDA #&80 ; &8000 = player_buffer &2ea1 85 c6 STA &c6 ; buffer_address_high ; skip_wraparound_height &2ea3 c6 79 DEC &79 ; rows_remaining &2ea5 d0 ca BNE &2e71 ; update_y_edge_of_player_buffer_row_loop &2ea7 60 RTS *** # &2ea7 is end of extra code ; clear_screen &2ea8 a9 01 LDA #&01 # Set colour 0 to cyan &2eaa 85 94 STA &94 ; bottom_palette_value &2eac 20 42 22 JSR &2242 ; wait_for_vsync &2eaf a9 40 LDA #&40 &2eb1 8d b8 2e STA &2eb8 ; wipe_address_high &2eb4 a2 00 LDX #&00 ; clear_screen_loop # Wipe &4000 - &7fff &2eb6 9e 00 40 STZ &4000,X # 65C02 opcode # actually STZ wipe_address,X &2eb9 e8 INX &2eba d0 fa BNE &2eb6 ; clear_screen_loop &2ebc ee b8 2e INC &2eb8 ; wipe_address_high &2ebf 10 f5 BPL &2eb6 ; clear_screen_loop &2ec1 60 RTS ; irq1_handler &2ec2 da PHX *** # 65C02 opcode &2ec3 5a PHY *** # 65C02 opcode &2ec4 a5 fc LDA &fc ; irq_accumulator *** &2ec6 48 PHA *** &2ec7 ad 4d fe LDA &fe4d ; System VIA interrupt flag register &2eca 29 82 AND #&82 &2ecc c9 82 CMP #&82 # &80 set if an interrupt occurred, &02 if v-sync &2ece f0 13 BEQ &2ee3 ; is_vsync ; not_vsync &2ed0 ad 6d fe LDA &fe6d ; User VIA interrupt flag register &2ed3 29 c0 AND #&c0 # &40 set if timer 1 interrupt &2ed5 c9 c0 CMP #&c0 &2ed7 d0 3d BNE &2f16 ; leave_irq1_handler &2ed9 ad 64 fe LDA &fe64 ; User VIA timer 1 counter LSB &2edc a5 94 LDA &94 ; bottom_palette_value &2ede 8d 21 fe STA &fe21 ; video ULA palette register &2ee1 d0 33 BNE &2f16 ; leave_irq1_handler # Always branches ; not_vsync &2ee3 ad 6b fe LDA &fe6b ; User VIA auxiliary control register &2ee6 29 df AND #&df # Set User VIA timer 2 to one-shot mode &2ee8 8d 6b fe STA &fe6b ; User VIA auxiliary control register &2eeb a9 20 LDA #&20 # Enable User VIA timer 2 interrupts &2eed 8d 6e fe STA &fe6e ; User VIA interrupt enable register &2ef0 a9 ff LDA #&ff &2ef2 8d 68 fe STA &fe68 ; User VIA timer 2 counter LSB &2ef5 8d 69 fe STA &fe69 ; User VIA timer 2 counter MSB &2ef8 ad 6b fe LDA &fe6b ; User VIA auxiliary control register &2efb 29 3f AND #&3f # Set User VIA timer 1 to one-shot mode &2efd 8d 6b fe STA &fe6b ; User VIA auxiliary control register &2f00 a9 c0 LDA #&c0 # Enable User VIA timer 1 interrupts &2f02 8d 6e fe STA &fe6e ; User VIA interrupt enable register &2f05 a9 00 LDA #&00 &2f07 8d 64 fe STA &fe64 ; User VIA timer 1 counter LSB &2f0a a9 29 LDA #&29 &2f0c 8d 65 fe STA &fe65 ; User VIA timer 1 counter MSB &2f0f a5 9f LDA &9f ; top_palette_value *** &2f11 8d 21 fe STA &fe21 ; video ULA palette register &2f14 c6 96 DEC &96 ; game_over_cooldown ; leave_irq1_handler &2f16 68 PLA *** &2f17 85 fc STA &fc ; irq_accumulator *** &2f19 7a PLY *** # 65C02 opcode &2f1a fa PLX *** # 65C02 opcode &2f1b 4c ff ff JMP &ffff # actually JMP previous_irq1_vector ; multiply_A_by_X &2f1e 85 c7 STA &c7 ; multiplicand &2f20 86 c8 STX &c8 ; multiplier_low &2f22 a9 00 LDA #&00 &2f24 85 c5 STA &c5 ; result_low &2f26 85 c6 STA &c6 ; result_high &2f28 85 c9 STA &c9 ; multiplier_high &2f2a a0 08 LDY #&08 ; multiply_A_by_X_loop &2f2c 46 c7 LSR &c7 ; multiplicand &2f2e 90 0d BCC &2f3d ; consider_next_bit &2f30 18 CLC &2f31 a5 c8 LDA &c8 ; multiplier_low &2f33 65 c5 ADC &c5 ; result_low &2f35 85 c5 STA &c5 ; result_low &2f37 a5 c9 LDA &c9 &2f39 65 c6 ADC &c6 ; result_high &2f3b 85 c6 STA &c6 ; result_high ; consider_next_bit &2f3d 06 c8 ASL &c8 ; multiplier_low &2f3f 26 c9 ROL &c9 ; multiplier_high &2f41 88 DEY &2f42 d0 e8 BNE &2f2c ; multiply_A_by_X_loop &2f44 60 RTS ; check_if_raster_is_in_mover &2f45 ad 69 fe LDA &fe69 ; User VIA timer 2 counter MSB &2f48 49 ff EOR #&ff &2f4a 85 cf STA &cf ; threshold &2f4c b9 31 16 LDA &1631,Y ; movers_raster_y &2f4f c5 cf CMP &cf ; threshold &2f51 b0 08 BCS &2f5b ; leave_with_carry_set &2f53 69 08 ADC #&08 &2f55 c5 cf CMP &cf ; threshold &2f57 90 02 BCC &2f5b ; leave_with_carry_set &2f59 18 CLC # Leave with carry clear to indicate raster not in mover &2f5a 60 RTS &2f5b 38 SEC # Leave with carry set to indicate raster in mover &2f5c 60 RTS ; keys &2f5d be ; &01 (KEY_UP) : A &2f5e 9e ; &02 (KEY_DOWN) : Z &2f5f 86 ; &04 (KEY_RIGHT) : RIGHT &2f60 e6 ; &08 (KEY_LEFT) : LEFT &2f61 ff ; &10 (KEY_FIRE) : SHIFT &2f62 a6 ; &20 (KEY_GRENADE) : DELETE &2f63 fe ; &40 (KEY_ENTER) : CTRL &2f64 c8 ; &80 (KEY_PAUSE) : P ; check_for_player_input &2f65 a0 00 LDY #&00 &2f67 84 c2 STY &c2 ; keys_pressed_bitmap &2f69 84 c3 STY &c3 ; key_to_check ; check_for_player_input_loop &2f6b be 5d 2f LDX &2f5d,Y ; keys &2f6e 20 f1 21 JSR &21f1 ; check_for_keypress &2f71 d0 0e BNE &2f81 ; key_not_pressed &2f73 a9 01 LDA #&01 &2f75 a4 c3 LDY &c3 ; key_to_check &2f77 f0 04 BEQ &2f7d ; skip_shift ; shift_loop &2f79 0a ASL A &2f7a 88 DEY &2f7b d0 fc BNE &2f79 ; shift_loop ; skip_shift &2f7d 45 c2 EOR &c2 ; keys_pressed_bitmap &2f7f 85 c2 STA &c2 ; keys_pressed_bitmap ; key_not_pressed &2f81 e6 c3 INC &c3 ; key_to_check &2f83 a4 c3 LDY &c3 ; key_to_check &2f85 c0 08 CPY #&08 &2f87 d0 e2 BNE &2f6b ; check_for_player_input_loop ; leave &2f89 60 RTS ; play_sound &2f8a ac 9a 2f LDY &2f9a ; sound_muted *** &2f8d d0 fa BNE &2f89 ; leave *** &2f8f 09 80 ORA #&80 &2f91 aa TAX &2f92 a0 08 LDY #&08 &2f94 a9 07 LDA #&07 ; Generate a sound &2f96 4c f1 ff JMP &fff1 ; OSWORD ; music_muted &2f99 00 *** # Non-zero if music is muted ; sound_muted &2f9a 00 *** # Non-zero if sound is muted ; enemy_helicopters_maximum_x_low &2f9b 00 00 ; enemy_helicopters_minimum_x_low &2f9d 00 00 ; update_enemy_helicopter &2f9f 20 6e 30 JSR &306e ; check_if_mover_can_be_updated # Returns carry clear if mover can be updated &2fa2 b0 e5 BCS &2f89 ; leave &2fa4 20 61 31 JSR &3161 ; get_mover_frame_and_flip &2fa7 20 da 1f JSR &1fda ; get_mover_x_and_y &2faa a9 55 LDA #&55 # Consider targets in air, in front of helicopter &2fac 85 f9 STA &f9 ; mover_y &2fae a9 b0 LDA #&b0 &2fb0 85 c9 STA &c9 ; mover_y_max &2fb2 a9 3c LDA #&3c &2fb4 85 81 STA &81 ; mover_x_offset &2fb6 20 e5 2a JSR &2ae5 ; search_for_target # Returns carry clear if target found &2fb9 a4 03 LDY &03 ; mover_to_update &2fbb 90 15 BCC &2fd2 ; move_helicopter_towards_target_vertically &2fbd a5 b7 LDA &b7 ; frame_and_flip &2fbf 49 80 EOR #&80 # Consider targets in air, behind helicopter &2fc1 85 b7 STA &b7 ; frame_and_flip &2fc3 20 da 1f JSR &1fda ; get_mover_x_and_y &2fc6 20 e5 2a JSR &2ae5 ; search_for_target # Returns carry clear if target found &2fc9 a4 03 LDY &03 ; mover_to_update &2fcb 90 23 BCC &2ff0 ; keep_vertical_position &2fcd 20 61 31 JSR &3161 ; get_mover_frame_and_flip &2fd0 b0 1e BCS &2ff0 ; keep_vertical_position # Always branches ; move_helicopter_towards_target_vertically &2fd2 bd cb 15 LDA &15cb,X ; movers_y &2fd5 38 SEC &2fd6 f9 cb 15 SBC &15cb,Y ; movers_y &2fd9 b0 02 BCS &2fdd ; skip_inversion &2fdb 49 7f EOR #&7f ; skip_inversion &2fdd be cb 15 LDX &15cb,Y ; movers_y &2fe0 29 83 AND #&83 &2fe2 85 7d STA &7d ; y_delta &2fe4 90 06 BCC &2fec ; is_moving_down ; is_moving_up &2fe6 e0 a0 CPX #&a0 # Enemy helicopters can't rise above top of screen &2fe8 90 0a BCC &2ff4 ; consider_horizontal_direction &2fea b0 04 BCS &2ff0 ; keep_vertical_position # Always branches ; is_moving_down &2fec e0 69 CPX #&69 # Enemy helicopters can't fall below top of mountains &2fee b0 04 BCS &2ff4 ; consider_horizontal_direction ; keep_vertical_position &2ff0 a9 00 LDA #&00 &2ff2 85 7d STA &7d ; y_delta ; consider_horizontal_direction &2ff4 98 TYA &2ff5 29 01 AND #&01 &2ff7 85 cf STA &cf ; which_helicopter &2ff9 a5 b7 LDA &b7 ; frame_and_flip &2ffb 29 80 AND #&80 &2ffd 48 PHA ; helicopter direction &2ffe 0a ASL A # Set carry if helicopter is flipped &2fff 2a ROL A # Set &01 if helicopter is flipped &3000 0a ASL A # Set &02 if helicopter is flipped &3001 45 cf EOR &cf ; which_helicopter &3003 aa TAX &3004 20 da 1f JSR &1fda ; get_mover_x_and_y &3007 a5 f8 LDA &f8 ; mover_x_low &3009 dd 9b 2f CMP &2f9b,X ; helicopters_maximum_x_low # Use helicopters_minimum_x_low if helicopter is flipped &300c d0 0c BNE &301a ; skip_flipping_direction &300e 20 e5 2a JSR &2ae5 ; search_for_target # Returns carry clear if target found &3011 a4 03 LDY &03 ; mover_to_update &3013 68 PLA ; helicopter direction &3014 aa TAX &3015 90 06 BCC &301d ; set_x_delta # If no target found, &3017 49 80 EOR #&80 # Flip direction of helicopter &3019 48 PHA ; helicopter direction ; skip_flipping_direction &301a 68 PLA ; helicopter direction &301b aa TAX &301c e8 INX ; set_x_delta &301d 86 7c STX &7c ; x_delta &301f 20 3a 30 JSR &303a ; move_and_replot_mover # Move helicopter &3022 a9 14 LDA #&14 &3024 a2 05 LDX #&05 ; MOVER_TYPE_HELICOPTER_WITH_MISSILE &3026 20 20 32 JSR &3220 ; consider_mover_firing_grenade # Consider dropping bomb &3029 4c da 30 JMP &30da ; consider_mover_firing_bullet ; plot_projectile &302c 98 TYA &302d 18 CLC &302e 69 0c ADC #&0c ; MOVER_FIRST_PROJECTILE &3030 a8 TAY &3031 4c 6a 1e JMP &1e6a ; plot_mover ; move_horizontally_and_replot_mover &3034 a4 03 LDY &03 ; mover_to_update &3036 a9 00 LDA #&00 &3038 85 7d STA &7d ; y_delta ; move_and_replot_mover ; wait_to_move_mover &303a 20 45 2f JSR &2f45 ; check_if_raster_is_in_mover # Returns carry set if raster is in mover &303d b0 fb BCS &303a ; wait_to_move_mover &303f 20 ae 24 JSR &24ae ; unplot_and_move_mover &3042 20 61 31 JSR &3161 ; get_mover_frame_and_flip &3045 a6 8d LDX &8d ; hostile_mover &3047 30 0c BMI &3055 ; to_plot_mover &3049 20 c3 2a JSR &2ac3 ; check_if_friendly # Returns carry set if friendly &304c 90 0a BCC &3058 ; kill_hostile_mover_and_mover ; is_friendly &304e a5 b7 LDA &b7 ; frame_and_flip &3050 49 80 EOR #&80 # Flip friendly mover when touching player &3052 99 65 15 STA &1565,Y ; movers_frame_and_flip ; to_plot_mover &3055 4c 6a 1e JMP &1e6a ; plot_mover # Plot mover ; kill_hostile_mover_and_mover &3058 a4 8d LDY &8d ; hostile_mover &305a 20 b9 30 JSR &30b9 ; get_mover_Y_type *** # Returns A = mover type &305d c9 14 CMP #&14 ; MOVER_TYPE_TANK *** &305f f0 03 BEQ &3064 ; skip_killing_mover *** &3061 20 d9 28 JSR &28d9 ; kill_mover ; skip_killing_mover *** &3064 20 b7 30 JSR &30b7 ; get_mover_type *** &3067 c9 14 CMP #&14 ; MOVER_TYPE_TANK *** &3069 f0 47 BEQ &30b2 ; leave *** &306b 4c 01 29 JMP &2901 ; kill_mover_Y ; check_if_mover_can_be_updated &306e a6 03 LDX &03 ; mover_to_update &3070 20 7f 28 JSR &287f ; check_for_player_collision_with_mover_Y # Returns carry set if collision &3073 b0 3b BCS &30b0 ; leave_with_mover_to_update # Leave with carry set if mover overlaps player &3075 a6 bb LDX &bb ; viewport_right_high &3077 a5 b3 LDA &b3 ; viewport_right_low &3079 18 CLC &307a 69 0a ADC #&0a &307c 90 01 BCC &307f ; skip_overflow &307e e8 INX ; skip_overflow &307f e4 c5 CPX &c5 ; mover_x_high &3081 90 2c BCC &30af ; leave_with_carry_set &3083 d0 04 BNE &3089 ; skip_low_check &3085 c5 f8 CMP &f8 ; mover_x_low # If the mover is beyond the right edge of the screen, &3087 90 26 BCC &30af ; leave_with_carry_set # Leave with carry set to indicate no update required ; is_on_screen &3089 20 b7 30 JSR &30b7 ; get_mover_type # Returns A = mover type &308c c9 13 CMP #&13 ; MOVER_TYPE_MINE # If the mover is a mine, &308e b0 23 BCS &30b3 ; leave_with_mover_to_update # Leave with carry set to indicate no update required &3090 c9 0d CMP #&0d ; MOVER_TYPE_SKELETON # If the mover is not an explosion or a skeleton, &3092 90 1c BCC &30b0 ; leave_with_mover_to_update # Leave with carry clear to indicate it can be updated ; animate_explosion_or_skeleton &3094 20 6a 1e JSR &1e6a ; plot_mover # Unplot explosion or skeleton &3097 a6 03 LDX &03 ; mover_to_update &3099 bd 65 15 LDA &1565,X ; movers_frame_and_flip &309c 29 7f AND #&7f &309e d0 07 BNE &30a7 ; not_end_of_animation ; remove_explosion_or_skeleton &30a0 a9 ff LDA #&ff &30a2 9d a9 15 STA &15a9,X ; movers_x_high # Set to negative to remove mover &30a5 38 SEC # Leave with carry set to indicate no update required &30a6 60 RTS ; not_end_of_animation &30a7 de 65 15 DEC &1565,X ; movers_frame_and_flip &30aa a4 03 LDY &03 ; mover_to_update &30ac 20 6a 1e JSR &1e6a ; plot_mover # Plot explosion or skeleton ; leave_with_carry_set &30af 38 SEC # Leave with carry set to indicate no update required &30b0 a4 03 LDY &03 ; mover_to_update *** ; leave *** &30b2 60 RTS *** ; leave_with_mover_to_update &30b3 a4 03 LDY &03 ; mover_to_update &30b5 18 CLC *** &30b6 60 RTS ; get_mover_type &30b7 a4 03 LDY &03 ; movers_type_and_colour ; get_mover_Y_type &30b9 b9 43 15 LDA &1543,Y ; movers_type_and_colour &30bc 29 7f AND #&7f &30be 60 RTS ; movers_minimum_x_low &30bf 00 00 00 00 00 00 00 00 00 ; movers_maximum_x_low &30c8 00 00 00 00 00 00 00 00 00 ; movers_flags &30d1 00 00 00 00 00 00 00 00 00 ; consider_mover_firing_bullet &30da a6 03 LDX &03 ; mover_to_update &30dc bd 41 12 LDA &1241,X ; movers_firing_cooldown - 1 &30df f0 06 BEQ &30e7 ; can_fire &30e1 de 41 12 DEC &1241,X ; movers_firing_cooldown - 1 &30e4 38 SEC &30e5 d0 79 BNE &3160 ; leave ; can_fire &30e7 20 61 31 JSR &3161 ; get_mover_frame_and_flip &30ea a9 22 LDA #&22 # Consider targets in front of mover &30ec 20 d4 2a JSR &2ad4 ; search_for_target_with_offset # Returns carry clear if target found &30ef 20 b7 30 JSR &30b7 ; get_mover_type # Returns A = mover type &30f2 aa TAX &30f3 86 7c STX &7cc ; mover_type &30f5 90 19 BCC &3110 ; found_target ; check_for_target_behind_mover &30f7 a5 b7 LDA &b7 ; frame_and_flip &30f9 49 80 EOR #&80 # Consider targets behind mover &30fb 85 b7 STA &b7 ; frame_and_flip &30fd a9 28 LDA #&28 &30ff 20 d4 2a JSR &2ad4 ; search_for_target_with_offset # Returns carry clear if target found &3102 b0 5d BCS &3161 ; get_mover_frame_and_flip &3104 a9 08 LDA #&08 ; FRAME_SHOOTING &3106 a6 7c LDX &7c ; mover_type &3108 e0 05 CPX #&05 ; MOVER_TYPE_FIRST_HELICOPTER &310a 90 35 BCC &3141 ; replot_mover &310c a5 b7 LDA &b7 ; frame_and_flip &310e b0 39 BCS &3149 ; set_frame_and_flip # Always branches ; found_target &3110 a9 07 LDA #&07 # 4 in 8 chance initially of soldier crouching &3112 20 6d 32 JSR &326d ; rnd_skewed_towards_right_of_world &3115 b0 49 BCS &3160 ; leave &3117 a2 06 LDX #&06 ; FRAME_GUN_DOWN &3119 ad 69 fe LDA &fe69 ; User VIA timer 2 counter MSB &311c 29 0f AND #&0f # Soldiers more likely to crouch to shoot further right &311e c5 ba CMP &ba ; viewport_left_high &3120 b0 01 BCS &3123 ; set_firing_frame &3122 e8 INX ; 7 ; FRAME_SHOOTING_CROUCHED ; set_firing_frame &3123 86 a0 STX &a0 ; firing_frame &3125 20 3f 2b JSR &2b3f ; add_mover_bullet # Returns carry clear if bullet added &3128 b0 36 BCS &3160 ; leave # If not, leave with carry set to indicate mover couldn't fire &312a 20 18 23 JSR &2318 ; plot_bullet_and_play_sound &312d 20 61 31 JSR &3161 ; get_mover_frame_and_flip &3130 a6 7c LDX &7c ; mover_type &3132 bd ee 17 LDA &17ee,X ; mover_types_maximum_firing_cooldown &3135 99 41 12 STA &1241,Y ; movers_firing_cooldown - 1 &3138 20 61 31 JSR &3161 ; get_mover_frame_and_flip &313b e0 05 CPX #&05 ; MOVER_TYPE_FIRST_HELICOPTER &313d b0 20 BCS &315f ; leave_with_carry_clear &313f a5 a0 LDA &a0 ; firing_frame ; replot_mover &3141 85 7c STA &7c ; new_frame &3143 a5 b7 LDA &b7 ; frame_and_flip &3145 29 80 AND #&80 &3147 05 7c ORA &7c ; new_frame ; set_frame_and_flip &3149 85 7c STA &7c ; new_frame_and_flip &314b a4 03 LDY &03 ; mover_to_update ; wait_to_replot_mover &314d 20 45 2f JSR &2f45 ; check_if_raster_is_in_mover # Returns carry set if raster is in mover &3150 b0 fb BCS &314d ; wait_to_replot_mover &3152 20 6a 1e JSR &1e6a ; plot_mover # Unplot mover &3155 a4 03 LDY &03 ; mover_to_update &3157 a5 7c LDA &7c ; new_frame_and_flip &3159 99 65 15 STA &1565,Y ; movers_frame_and_flip &315c 20 6a 1e JSR &1e6a ; plot_mover # Replot mover ; leave_with_carry_clear &315f 18 CLC ; leave &3160 60 RTS ; get_mover_frame_and_flip &3161 a4 03 LDY &03 ; mover_to_update &3163 b9 65 15 LDA &1565,Y ; movers_frame_and_flip &3166 85 b7 STA &b7 ; frame_and_flip ; leave &3168 60 RTS ; animate_stationery_mover &3169 ad 69 fe LDA &fe69 ; User VIA timer 2 counter MSB &316c 29 20 AND #&20 &316e d0 f8 BNE &3168 ; leave &3170 a9 08 LDA #&08 ; FRAME_GUN_DOWN &3172 d0 cd BNE &3141 ; replot_mover # Always branches ; update_mover &3174 20 6e 30 JSR &306e ; check_if_mover_can_be_updated # Returns carry clear if mover can be updated &3177 b0 e6 BCS &315f ; leave &3179 20 da 30 JSR &30da ; consider_mover_firing_bullet # Returns carry clear if mover fired bullet &317c 90 e1 BCC &315f ; leave_with_carry_clear &317e 20 20 32 JSR &3220 ; consider_mover_firing_grenade # Returns carry clear if mover fired grenade &3181 a4 03 LDY &03 ; mover_to_update &3183 b0 0f BCS &3194 ; not_throwing_grenade &3185 20 61 31 JSR &3161 ; get_mover_frame_and_flip &3188 20 b9 30 JSR &30b9 ; get_mover_Y_type # Returns A = mover type &318b c9 05 CMP #&05 ; MOVER_TYPE_FIRST_HELICOPTER &318d b0 05 BCS &3194 ; not_throwing_grenade &318f a9 0c LDA #&0c ; FRAME_THROWING &3191 4c 41 31 JMP &3141 ; replot_mover ; not_throwing_grenade &3194 b9 d0 30 LDA &30d0,Y ; movers_flags - 1 &3197 f0 cf BEQ &3168 ; leave # If mover_flags is &00, mover is stationary &3199 c9 80 CMP #&80 &319b f0 cc BEQ &3169 ; animate_stationery_mover # If mover flags is &80, mover is stationary but lifts gun &319d a5 b7 LDA &b7 ; frame_and_flip # Otherwise, mover moves between two limits &319f 29 80 AND #&80 &31a1 aa TAX &31a2 e8 INX &31a3 86 7c STX &7c ; x_delta &31a5 a6 7c LDX &7c ; x_delta &31a7 98 TYA &31a8 ca DEX &31a9 30 03 BMI &31ae ; is_moving_left ; is_moving_right &31ab 18 CLC &31ac 69 09 ADC #&09 ; movers_maximum_x_low - movers_minimum_x_low ; is_moving_left &31ae aa TAX &31af a5 f8 LDA &f8 ; mover_x_low &31b1 dd be 30 CMP &30be,X ; movers_minimum_x_low - 1 &31b4 d0 06 BNE &31bc ; skip_changing_direction &31b6 a5 7c LDA &7c ; x_delta &31b8 49 80 EOR #&80 &31ba 85 7c STA &7c ; x_delta ; skip_changing_direction &31bc 4c 34 30 JMP &3034 ; move_horizontally_and_replot_mover ; decrement_new_movers_offset &31bf a4 7f LDY &7f ; new_movers_offset &31c1 88 DEY &31c2 d0 02 BNE &31c6 ; skip_wraparound &31c4 a0 03 LDY #&03 ; skip_wraparound &31c6 84 7f STY &7f ; new_movers_offset &31c8 60 RTS ; add_new_movers # Called with X = new movers offset &31c9 a9 03 LDA #&03 &31cb 20 1e 2f JSR &2f1e ; multiply_A_by_X # Add three movers in slots 1, 4 and 7 &31ce a4 7f LDY &7f ; new_movers_offset # or 2, 5 and 8 &31d0 a6 7f LDX &7f ; new_movers_offset # or 3, 6 and 9 &31d2 c8 INY &31d3 c0 04 CPY #&04 &31d5 90 02 BCC &31d9 ; skip_wraparound &31d7 a0 01 LDY #&01 &31d9 84 7f STY &7f ; new_movers_offset ; skip_wraparound &31db a4 c5 LDY &c5 ; result_low ; add_movers_loop &31dd b9 c5 11 LDA &11c5,Y ; new_movers_initial_x_high_and_flags &31e0 29 c0 AND #&c0 &31e2 9d d0 30 STA &30d0,X ; movers_flags - 1 &31e5 b9 50 11 LDA &1150,Y ; new_movers_initial_x_low &31e8 9d 87 15 STA &1587,X ; movers_x_low &31eb 38 SEC &31ec e9 1e SBC #&1e &31ee b0 02 BCS &31f2 ; skip_floor &31f0 a9 00 LDA #&00 ; skip_floor &31f2 9d be 30 STA &30be,X ; movers_minimum_x_low - 1 &31f5 18 CLC &31f6 69 3c ADC #&3c &31f8 90 02 BCC &31fc ; skip_ceiling &31fa a9 ff LDA #&ff ; skip_ceiling &31fc 9d c7 30 STA &30c7,X ; movers_maximum_x_low - 1 &31ff b9 db 10 LDA &10db,Y ; new_movers_type &3202 9d 43 15 STA &1543,X ; movers_type_and_colour &3205 b9 c5 11 LDA &11c5,Y ; new_movers_initial_x_high_and_flags &3208 29 3f AND #&3f &320a 9d a9 15 STA &15a9,X ; movers_x_high &320d a9 00 LDA #&00 &320f 9d 65 15 STA &1565,X ; movers_frame_and_flip &3212 a9 18 LDA #&18 &3214 9d cb 15 STA &15cb,X ; movers_y &3217 e8 INX &3218 e8 INX &3219 e8 INX &321a c8 INY &321b e0 0a CPX #&0a &321d 90 be BCC &31dd ; add_movers_loop &321f 60 RTS ; consider_mover_firing_grenade # Also bombs and rockets &3220 20 da 1f JSR &1fda ; get_mover_x_and_y &3223 20 8b 20 JSR &208b ; check_if_mover_Y_is_on_screen # Returns carry set if mover is not on screen &3226 b0 44 BCS &326c ; leave &3228 86 a1 STX &a1 ; firing_mover_type &322a a0 0f LDY #&0f &322c 84 81 STY &81 ; mover_x_offset &322e 20 8d 2a JSR &2a8d ; calculate_mover_x_max_from_offset_getting_frame_and_flip &3231 a6 a1 LDX &a1 ; firing_mover_type &3233 a9 0a LDA #&0a &3235 e0 0c CPX #&0c ; MOVER_TYPE_SAM &3237 d0 08 BNE &3241 ; not_sam ; is_sam &3239 a5 b7 LDA &b7 ; frame_and_flip &323b 49 80 EOR #&80 &323d 85 b7 STA &b7 ; frame_and_flip &323f a9 3c LDA #&3c ; not_sam &3241 85 f9 STA &f9 ; mover_y &3243 18 CLC &3244 69 78 ADC #&78 &3246 85 c9 STA &c9 ; mover_y_max &3248 a9 0a LDA #&0a &324a 85 81 STA &81 ; mover_x_offset &324c 20 90 2a JSR &2a90 ; calculate_mover_x_max_from_offset &324f 20 61 31 JSR &3161 ; get_mover_frame_and_flip &3252 20 b2 2a JSR &2ab2 ; check_for_collision_with_friends # Returns carry set if collision with friendly mover &3255 b0 15 BCS &326c ; leave &3257 a9 3f LDA #&3f # 4 in 64 chance initially of firing grenade &3259 20 6d 32 JSR &326d ; rnd_skewed_towards_right_of_world &325c b0 0e BCS &326c ; leave &325e 20 6e 2b JSR &2b6e ; add_new_grenade # Returns carry clear if grenade was added &3261 b0 09 BCS &326c ; leave # Otherwise, leave with carry set to indicate no grenade fired ; plot_grenade_and_play_sound &3263 20 2c 30 JSR &302c ; plot_projectile &3266 a9 18 LDA #&18 # Play sound for firing grenade &3268 20 8a 2f JSR &2f8a ; play_sound &326b 18 CLC # Leave with carry clear to indicate grenade fired ; leave &326c 60 RTS ; rnd_skewed_towards_right_of_world &326d 85 ce STA &ce ; mask &326f a5 ba LDA &ba ; viewport_left_high &3271 18 CLC &3272 69 04 ADC #&04 &3274 85 cf STA &cf ; threshold &3276 ad 68 fe LDA &fe68 ; User VIA timer 2 counter LSB &3279 25 ce AND &ce ; mask &327b c5 cf CMP &cf ; threshold &327d 60 RTS ; plot_lives &327e a5 00 LDA &00 ; screen_start_address_low &3280 85 ce STA &ce ; text_screen_address_low &3282 a5 01 LDA &01 ; screen_start_address_high &3284 85 cf STA &cf ; text_screen_address_high &3286 a5 95 LDA &95 ; lives &3288 a2 06 LDX #&06 &328a 20 1e 2f JSR &2f1e ; multiply_A_by_X &328d a5 c5 LDA &c5 ; result_low &328f 18 CLC &3290 69 6c ADC #&6c ; "0" &3292 20 9f 32 JSR &329f ; plot_character &3295 a0 07 LDY #&07 &3297 a9 00 LDA #&00 ; plot_lives_blank_loop &3299 91 ce STA (&ce),Y ; text_screen_address &329b 88 DEY &329c 10 fb BPL &3299 ; plot_lives_blank_loop &329e 60 RTS ; plot_character # Called with A = font offset for characte &329f aa TAX &32a0 18 CLC &32a1 69 06 ADC #&06 &32a3 85 c8 STA &c8 ; font_end_offset &32a5 a9 aa LDA #&aa # Start with left pixel &32a7 85 c5 STA &c5 ; text_pixel ; plot_character_column_loop &32a9 bd 0d 34 LDA &340d,X ; font_data &32ac 85 c9 STA &c9 ; font_byte &32ae a0 07 LDY #&07 ; plot_character_row_loop &32b0 a9 00 LDA #&00 &32b2 26 c9 ROL &c9 ; font_byte &32b4 90 04 BCC &32ba ; set_pixel_value &32b6 a9 3c LDA #&3c ; set_pixel_value &32b8 25 c5 AND &c5 ; text_pixel &32ba 85 c6 STA &c6 ; pixel_value &32bc a5 c5 LDA &c5 ; text_pixel &32be 49 ff EOR #&ff &32c0 31 ce AND (&ce),Y ; text_screen_address &32c2 45 c6 EOR &c6 ; pixel_value &32c4 91 ce STA (&ce),Y ; text_screen_address &32c6 88 DEY &32c7 10 e7 BPL &32b0 ; plot_character_row_loop &32c9 a5 c5 LDA &c5 ; text_pixel &32cb 49 ff EOR #&ff # Use other pixel &32cd 85 c5 STA &c5 ; text_pixel &32cf 10 10 BPL &32e1 ; not_next_byte &32d1 86 cd STX &cd ; tmp_x &32d3 a6 cf LDX &cf ; text_screen_address_high &32d5 a5 ce LDA &ce ; text_screen_address_low &32d7 c8 INY &32d8 20 37 1d JSR &1d37 ; add_delta_to_screen_address_in_AX &32db 86 cf STX &cf ; text_screen_address_high &32dd 85 ce STA &ce ; text_screen_address_low &32df a6 cd LDX &cd ; tmp_x ; not_next_byte &32e1 e8 INX &32e2 e4 c8 CPX &c8 ; font_end_offset &32e4 d0 c3 BNE &32a9 ; plot_character_column_loop &32e6 60 RTS ; text_screen &32e7 86 c3 STX &c3 ; text_address_high &32e9 84 c2 STY &c2 ; text_address_low &32eb 20 8f 22 JSR &228f ; reset_screen_scroll &32ee 20 a8 2e JSR &2ea8 ; clear_screen ; plot_text_loop &32f1 b1 c2 LDA (&c2),Y ; text_address # Get two bytes for screen address &32f3 85 ce STA &ce ; text_screen_address_low &32f5 c8 INY &32f6 b1 c2 LDA (&c2),Y ; text_address &32f8 85 cf STA &cf ; text_screen_address_high &32fa 20 0b 33 JSR &330b ; plot_text_string &32fd c8 INY &32fe c9 ff CMP #&ff # &ff indicates end of text &3300 d0 ef BNE &32f1 ; plot_text_loop &3302 a9 1e LDA #&1e *** &3304 85 96 STA &96 ; game_over_cooldown *** ; delay_loop *** &3306 a5 96 LDA &96 ; game_over_cooldown *** &3308 10 fc BPL &3306 ; delay_loop *** &330a 60 RTS ; plot_text_string_loop &330b c8 INY &330c b1 c2 LDA (&c2),Y ; text_screen_address_high # Get byte for character &330e c9 fe CMP #&fe &3310 90 01 BCC &3313 ; not_end_of_string # &fe indicates end of string, &ff end of text &3312 60 RTS ; not_end_of_string &3313 84 c1 STY &c1 ; text_offset &3315 20 9f 32 JSR &329f ; plot_character &3318 a4 c1 LDY &c1 ; text_offset &331a d0 ef BNE &330b ; plot_text_string_loop # Always branches ; increase_score_for_killing_enemy &331c 20 b9 30 JSR &30b9 ; get_mover_Y_type # Returns A = mover type &331f a8 TAY &3320 c0 0b CPY #&0b ; MOVER_TYPE_MACHINE_GUN + 1 &3322 90 07 BCC &332b ; increase_score *** &3324 c0 15 CPY #&15 ; MOVER_TYPE_HEAVY_GUN *** &3326 90 30 BCC &3358 ; leave *** &3328 e9 0a SBC #&0a *** &332a a8 TAY *** ; increase_score *** &332b ad 70 33 LDA &3370 ; game_over_text + &17 # Bytes in Game Over text are used for score &332e 18 CLC &332f 79 74 33 ADC &3374,Y ; mover_type_scoring_table &3332 8d 70 33 STA &3370 ; game_over_text + &17 &3335 ad 71 33 LDA &3371 ; game_over_text + &18 *** &3338 18 CLC *** &3339 79 86 33 ADC &3386,Y ; mover_type_scoring_tens_table *** &333c 8d 71 33 STA &3371 ; game_over_text + &18 *** &333f a2 05 LDX #&05 &3341 a0 00 LDY #&00 ; update_score_loop &3343 98 TYA &3344 a0 00 LDY #&00 &3346 18 CLC &3347 7d 6d 33 ADC &336d,X ; game_over_text + &14 &334a c9 a8 CMP #&a8 ; "9" + 6 &334c 90 04 BCC &3352 ; skip_overflow &334e e9 3c SBC #&3c ; "9" - "0" + 6 &3350 a0 06 LDY #&06 ; skip_overflow &3352 9d 6d 33 STA &336d,X ; game_over_text + &14 &3355 ca DEX &3356 10 eb BPL &3343 ; update_score_loop ; leave &3358 60 RTS ; game_over_text &3359 d8 4a ; at &4ad8 &335b 66 00 2a 12 60 36 54 12 42 ; "GAME OVER" &3364 fe ; end of string &3365 b8 63 ; at &63b8 &3367 48 06 36 42 12 60 66 66 66 66 66 66 ; "SCORE GGGGGG" &3373 ff ; end of text ; mover_type_scoring_table &3374 00 ; &00 : MOVER_TYPE_PLAYER # 0 points (unused) &3375 00 ; &01 : MOVER_TYPE_SOLDIER_WITH_RIFLE # 0 points &3376 18 ; &02 : MOVER_TYPE_OFFICER_WITH_PISTOL # 450 points &3377 0c ; &03 : MOVER_TYPE_TROOPER_WITH_RIFLE # 270 points &3378 12 ; &04 : MOVER_TYPE_TROOPER_WITH_BAZOOKA # 350 points &3379 2a ; &05 : MOVER_TYPE_HELICOPTER_WITH_MISSILE # 700 points &337a 30 ; &06 : MOVER_TYPE_HELICOPTER # 850 points &337b 1e ; &07 : MOVER_TYPE_HELICOPTER_WITH_SOLDIER # 590 points &337c 00 ; &08 : MOVER_TYPE_RED_HELICOPTER # 0 points &337d 18 ; &09 : MOVER_TYPE_MORTAR # 400 points &337e 24 ; &0a : MOVER_TYPE_MACHINE_GUN # 650 points &337f 18 ; &15 : MOVER_TYPE_HEAVY_GUN *** # 450 points &3380 1e ; &16 : MOVER_TYPE_GREEN_WHITE_HELICOPTER *** # 580 points &3381 36 ; &17 : MOVER_TYPE_GREEN_WHITE_CRAFT_ONE *** # 900 points &3382 2a ; &18 : MOVER_TYPE_GREEN_WHITE_CRAFT_TWO *** # 720 points &3383 1e ; &19 : MOVER_TYPE_FLYING_SCOOTER *** # 500 points &3384 30 ; &1a : MOVER_TYPE_GREEN_WHITE_HELICOPTER_WITH_MISSILE *** # 850 points &3385 00 ; &1b : MOVER_TYPE_SHELL *** # 0 points ; mover_type_scoring_tens_table &3386 00 ; &00 : MOVER_TYPE_PLAYER *** &3387 00 ; &01 : MOVER_TYPE_SOLDIER_WITH_RIFLE *** &3388 1e ; &02 : MOVER_TYPE_OFFICER_WITH_PISTOL *** &3389 2a ; &03 : MOVER_TYPE_TROOPER_WITH_RIFLE *** &338a 1e ; &04 : MOVER_TYPE_TROOPER_WITH_BAZOOKA *** &338b 00 ; &05 : MOVER_TYPE_HELICOPTER_WITH_MISSILE *** &338c 1e ; &06 : MOVER_TYPE_HELICOPTER *** &338d 36 ; &07 : MOVER_TYPE_HELICOPTER_WITH_SOLDIER *** &338e 00 ; &08 : MOVER_TYPE_RED_HELICOPTER *** &338f 1e ; &09 : MOVER_TYPE_MORTAR *** &3390 1e ; &0a : MOVER_TYPE_MACHINE_GUN *** &3391 00 ; &15 : MOVER_TYPE_HEAVY_GUN *** &3392 30 ; &16 : MOVER_TYPE_GREEN_WHITE_HELICOPTER *** &3393 00 ; &17 : MOVER_TYPE_GREEN_WHITE_CRAFT_ONE *** &3394 0c ; &18 : MOVER_TYPE_GREEN_WHITE_CRAFT_TWO *** &3395 00 ; &19 : MOVER_TYPE_FLYING_SCOOTER *** &3396 1e ; &1a : MOVER_TYPE_GREEN_WHITE_HELICOPTER_WITH_MISSILE *** &3397 00 ; &1b : MOVER_TYPE_SHELL *** ; offsets_to_numbers_table *** ; 0 1 2 3 4 5 6 7 8 9 *** &3398 6c 72 78 7e 84 8a 90 96 9c a2 *** # Offsets for each digit into font_data ; convert_score_to_numbers *** &33a2 a0 05 LDY #&05 *** ; convert_score_to_numbers_digit_loop *** &33a4 a2 09 LDX #&09 *** &33a6 b9 6d 33 LDA &336d,Y ; game_over_text + &14 *** ; convert_score_to_numbers_offset_loop *** &33a9 dd 98 33 CMP &3398,X ; offsets_to_numbers_table *** &33ac f0 03 BEQ &33b1 ; set_digit *** &33ae ca DEX *** &33af 10 f8 BPL &33a9 ; convert_score_to_numbers_offset_loop *** ; set_digit *** &33b1 8a TXA *** &33b2 99 6d 33 STA &336d,Y ; game_over_text + &14 *** &33b5 88 DEY *** &33b6 10 ec BPL &33a4 ; convert_score_to_numbers_digit_loop *** &33b8 60 RTS ; unused # Table would start at &338e &33b9 01 0e ; 270 &33bb 01 18 ; 280 &33bd 01 22 ; 290 &33bf 01 2c ; 300 &33c1 01 36 ; 310 &33c3 01 40 ; 320 &33c5 01 4a ; 330 &33c7 01 54 ; 340 &33c9 01 5e ; 350 &33cb 01 68 ; 360 &33cd 01 72 ; 370 &33cf 01 7c ; 380 &33d1 01 86 ; 390 &33d3 01 90 ; 400 &33d5 01 9a ; 410 &33d7 01 a4 ; 420 &33d9 01 ae ; 430 &33db 01 b8 ; 440 &33dd 01 c2 ; 450 &33df 01 cc ; 460 &33e1 01 d6 ; 470 &33e3 01 e0 ; 480 &33e5 01 ea ; 490 &33e7 01 f4 ; 500 &33e9 01 fe ; 510 &33eb 02 08 ; 520 &33ed 02 12 ; 530 &33ef 02 1c ; 540 &33f1 02 26 ; 550 &33f3 02 30 ; 560 &33f5 02 3a ; 570 &33f7 02 44 ; 580 &33f9 02 4e ; 590 &33fb 02 58 ; 600 &33fd 02 62 ; 610 &33ff 02 ; unused # Source code fragment &3400 0d # Start of BASIC program &3401 00 00 13 f4 20 53 41 56 45 22 53 4f ; 0REM SAVE"SO ... ; font_data # start with A, 60 = " ", six bytes per character &340d ff f9 19 19 ff 00 ; &00 : "A" &3413 ff f9 c1 c1 c0 00 ; &06 : "C" &3419 ff f9 c1 c3 fe 00 ; &0c : "D" &341f ff f9 c9 c9 c0 00 ; &12 : "E" &3425 00 c1 ff f9 c1 00 ; &18 : "I" &342b ff f8 0c 36 c3 00 ; &1e : "K" &3431 ff f8 c0 c0 c0 00 ; &24 : "L" &3437 ff f3 06 03 ff 00 ; &2a : "M" &343d ff f9 01 01 ff 00 ; &30 : "N" &3443 ff f9 c1 c1 ff 00 ; &36 : "O" &3449 ff f9 19 19 1f 00 ; &3c : "P" &344f ff f9 19 19 ef 00 ; &42 : "R" &3455 cf cd c9 f9 f8 00 ; &48 : "S" &345b 01 01 ff f9 01 00 ; &4e : "T" &3461 3f 78 c0 60 3f 00 ; &54 : "U" or "V" &3467 3f 38 e0 20 3f 00 ; &5a : "Y" &346d 00 00 00 00 00 00 ; &60 : " " &3473 ff f9 c1 db f8 00 ; &66 : "G" &3479 00 fe f2 c2 c2 fe ; &6c : "0" &347f 00 00 fe f0 00 00 ; &72 : "1" &3485 00 f2 f2 d2 d2 de ; &78 : "2" &348b 00 c0 d2 d2 d2 fe ; &7e : "3" &3491 00 1e 10 fc f0 10 ; &84 : "4" &3497 00 de d2 d2 d2 f2 ; &8a : "5" &349d 00 fe e8 c8 c8 f8 ; &80 : "6" &34a3 00 02 c2 f2 3e 0e ; &96 : "7" &34a9 00 fe f2 d2 d2 fe ; &9c : "8" &34af 00 1e 12 12 f2 fe ; &a2 : "9" ; mover_sprite_15 (SPRITE_HELICOPTER_WITH_SOLIDER) &34b5 00 12 00 bc ec bd bc 00 08 bc 06 00 07 14 05 00 &34c5 a8 9c bf ae bc 00 0e bc 94 c0 94 bc ac 6e bf 7e &34d5 fd 04 2c bc bf 8c bc 00 12 bc 80 a8 94 bc bd 9d &34e5 9c bd bc 7d bf bd 04 3e 5c bc 8c ae bc 00 16 bc &34f5 94 a9 83 96 7d be bf bd be bf bd be bd 7f 7e bf &3505 bd bc 9d bc 00 17 bc a8 96 bc 05 3e bc ad bc b9 &3515 b3 bc bf bc 4f ad be bc bf bc 00 16 a8 40 bc bf &3525 bc de bc 8f bc 8f bc e8 bc 9e a8 80 bc bf bc 00 &3535 15 c0 bc ae bc 8c bc 94 fc 8f bc 7d 6c fd ac 8c &3545 bc 00 12 94 40 bc 9d bc 4c 6e bf bc 8f 7c 07 38 &3555 9c a8 00 11 bc 40 bc be bf 6e 8c 5c bc ad bc b8 &3565 f0 a0 80 90 b4 a8 00 14 bc 94 a8 80 bc 04 0c bc &3575 b0 78 a8 60 80 90 94 b4 a8 00 13 a8 94 c0 68 5c &3585 bc 06 34 68 00 8b ; mover_sprite_2e (SPRITE_MINE) &358b 00 bc bd 94 00 05 bc 8c ae bd 94 00 07 bc 4c be &359b a8 00 06 bc 9c a8 00 85 ; mover_sprite_2d (SPRITE_TORSO_WITH_BAZOOKA) &35a3 00 06 00 05 14 00 06 bc 05 2c bc 8f 9b b3 00 09 &35b3 bc 9c 6c 8c 5c ad 73 00 09 bc 9c bc 5c 73 bc b3 &35c3 a2 00 0a c0 94 ad 79 9e 8f 85 94 00 0a 04 00 68 &35d3 bc 4f ad 94 00 09 06 00 bc de bc 00 87 ; mover_sprite_2c (SPRITE_BOMB) &35e0 00 94 ac 94 bd 94 00 07 94 6c bd 94 00 06 a8 9c &35f0 9d be a8 00 07 40 a8 00 84 ; mover_sprite_2b (SPRITE_GRENADE) &35f9 00 80 94 7d 94 00 06 a8 9c 4c be a8 00 07 40 68 &3609 00 84 ; mover_sprite_2a (SPRITE_BULLET) &360b 00 bc a9 bc 00 05 bc 83 bc 00 05 e8 00 83 ; mover_sprite_29 (SPRITE_EXPLOSION_FIVE) &3619 00 00 02 08 00 94 00 05 05 00 54 a9 83 bc 94 00 &3629 09 04 00 a8 56 4b 83 96 a8 00 0a 06 00 68 96 a8 &3639 00 07 00 02 00 82 ; mover_sprite_28 (SPRITE_EXPLOSION_FOUR) &363f 00 05 00 94 80 94 80 94 bd 54 00 0b 40 94 bc bd &364f 7c be a8 80 bc 7e bc 00 0d 94 bd bc be bc 96 83 &365f a9 94 a9 83 96 a8 be a8 00 11 bc bd bc d6 8b 8f &366f 8b 83 bc 54 bc bd 94 00 0f 80 bc be a8 40 a8 bc &367f 83 bc 56 bc 7d 94 00 0f c0 bc bd 94 bc bf bc bd &368f bc a8 be 68 00 0e 04 00 a8 40 a8 80 a8 00 89 ; mover_sprite_27 (SPRITE_EXPLOSION_THREE) &369e 00 05 00 94 80 94 80 94 bd 54 00 0b 40 94 7d bf &36ae bd bf bc 7e 7f bc 00 0c 94 bd 7f be bc 69 94 a9 &36be 94 bc bf be bd 94 00 10 bc bd bf bd bc 80 bc 96 &36ce 8f 87 a9 bc 7e bd bc 00 11 80 bc bf 7d bc 95 bc &36de 96 7c bd be bf bd 94 00 10 40 a8 be 7f be bf be &36ee bf be a8 be 68 00 0e 04 00 68 80 a8 80 a8 00 89 ; mover_sprite_26 (SPRITE_EXPLOSION_TWO) &36fe 00 00 02 04 00 d4 fd 54 00 07 40 94 bc 7f be a8 &370e 7e bf be bd bc 00 0d 80 a8 be bf 7d 94 80 94 bd &371e 7f bc 00 0d 40 a8 bc ff bd ff bd be a8 00 0b c0 &372e 68 be bc bf bc be 68 00 0a 07 00 a8 00 85 ; mover_sprite_25 (SPRITE_EXPLOSION_ONE) &373c 00 00 02 08 00 54 00 05 04 00 94 fd 7f bc 94 00 &374c 09 c0 bc be bf be 68 be bf bd bc 00 0c c0 bc 7e &375c bf 7d bf be bd bc 00 0b 06 00 68 bc be 68 00 08 &376c 00 82 ; mover_sprite_24 (SPRITE_SKELETON_FOUR) &376e 00 94 7d 94 80 54 00 07 94 bd be bf bd 7e bc 54 &377e 00 0a a8 be bd bc bd bc bf bd 7f bd 94 00 0d bc &378e bf bd bc be bc bf bd 7f be a8 00 0d a8 be bd 7e &379e bc 04 28 00 09 a8 be bd bf be a8 00 08 a8 7e a8 &37ae 00 85 ; mover_sprite_23 (SPRITE_SKELETON_THREE) &37b0 00 0c 00 54 7d 94 00 07 94 bd 94 bd 54 04 00 94 &37c0 bd bf be bc a8 54 00 10 bc be bd bc 7e bd bc 94 &37d0 bd 94 bc bd bc bf bd 7f bd 94 00 14 94 bd bc 94 &37e0 7d bc bf bc be a8 be bc 7f bd 7f be a8 00 13 bc &37f0 be bd bf be 68 be bc bf 7c be bf bd bc 68 00 11 &3800 40 68 05 00 bc bd bf bc 68 00 0b 08 00 a8 7e a8 &3810 00 87 ; mover_sprite_22 (SPRITE_SKELETON_TWO) &3812 00 0c 00 94 fd 94 00 07 94 bd 54 7d 54 05 00 bc &3822 bd bf be a8 05 14 00 10 bc be bd 94 68 7e 7d 80 &3832 54 bd bc 7d bc bf bd 7f bd bc 00 14 94 bd bc 40 &3842 d4 bc 7d bf bd bf bd bf bc be bf bd 7f be bc 00 &3852 15 bc be bc 7d fe bd bc a8 be bc bf bc bf bc bf &3862 bc e8 40 00 14 40 04 28 40 a8 80 a8 7e 7d bc 94 &3872 a8 00 0e 0d 00 68 7e a8 00 87 ; mover_sprite_21 (SPRITE_SKELETON_ONE) &387c 00 0e 00 54 00 05 94 bd 94 c0 54 05 00 a8 7e 04 &388c 3d 94 00 0e bc be 04 3d 7e fd 54 80 54 bd bc bd &389c bc bf bc 54 bd bc 7d 94 00 16 94 bd bc e8 54 e8 &38ac be bf bd bf bd bf bd bf bd bf bc bf bc bf be ff &38bc bc 00 19 bc be 04 3d 7e fd bf aa bc be bc bf bc &38cc bf bc bf be 68 04 3e a8 00 17 40 04 28 40 05 28 &38dc 7e 05 3d be a8 00 0d 0f 00 05 28 00 86 ; mover_sprite_20 (SPRITE_TROOPER_HEAD) &38e9 00 00 02 94 bc a9 6c a9 bc 94 00 09 bc 4c 5c 4c &38f9 bc 00 07 bc 8c 9c 8c bc 8c 9c bc 00 0a 80 06 28 &3909 00 05 00 02 00 82 ; mover_sprite_1f (SPRITE_TORSO_WITH_PISTOL_EIGHT) &390f 00 00 02 bc 6c bc ec bc 00 07 bc 9c b9 b3 b6 9c &391f 4c 00 09 bc 73 6d 5c b9 00 07 a8 bc 8f 9e bc 68 &392f b6 b9 bc b9 94 00 0d 80 e8 04 00 a8 f6 a8 00 09 &393f 00 82 ; mover_sprite_1e (SPRITE_TORSO_WITH_PISTOL_SEVEN) &3941 00 00 02 94 6c 7c 6c 94 00 07 8c 9c ac 4c 9c 4c &3951 00 08 5c bc 9c b3 b9 bc 9c 00 09 c0 a8 bc 73 8f &3961 ad 94 00 09 05 00 e8 5e a8 00 07 00 82 ; mover_sprite_1d (SPRITE_TORSO_WITH_PISTOL_SIX) &396e 00 c0 d4 00 04 6c bc cc ac 94 00 07 8c bc 73 bc &397e 9c 4c 00 08 bc 73 6d 5c a8 00 07 bc ad 8f 9e a8 &398e 00 07 80 68 00 04 00 82 ; mover_sprite_1c (SPRITE_LEGS_TEN) &3996 00 00 02 94 bc 69 bc 94 40 54 00 09 bc 83 96 bc &39a6 4c 6c 4c 00 09 05 28 bc dc a8 00 07 00 02 00 02 &39b6 00 82 ; mover_sprite_1b (SPRITE_LEGS_NINE) &39b8 00 00 02 94 bc 69 94 c0 54 00 08 bc 83 96 ac 8c &39c8 ac 94 bc 4c 00 0b bc a9 bc ac 5c cc 9c 00 09 68 &39d8 80 a8 5c bc 68 00 08 00 02 00 82 ; mover_sprite_1a (SPRITE_LEGS_EIGHT) &39e3 00 00 02 40 54 04 00 94 00 07 80 bc 56 ac 54 bc &39f3 8c 00 09 94 a9 83 96 6c bc 4c 00 09 bc 96 a8 5c &3a03 cc bc 00 08 05 00 e8 00 05 00 82 ; mover_sprite_19 (SPRITE_ROTORS_FOUR) &3a0e 00 00 02 00 02 00 02 40 54 00 04 40 bc ab bc 00 &3a1e 06 ed 83 bc 00 05 fe 83 bc 00 05 40 bc 97 bc 00 &3a2e 06 c0 68 00 04 00 02 00 02 00 82 ; mover_sprite_18 (SPRITE_ROTORS_THREE) &3a39 00 00 02 00 02 00 02 00 02 00 02 6d bc bd 94 00 &3a49 06 5e bc be bc 00 06 00 02 00 02 00 02 00 02 00 &3a59 82 ; mover_sprite_17 (SPRITE_ROTORS_TWO) &3a5a 00 00 02 00 02 40 54 00 04 40 bc bf bc 00 06 40 &3a6a bc 83 bc 00 06 6d 9f 83 bc 00 06 7e ad 83 bc 00 &3a7a 06 40 bc 83 bc 00 06 40 bc bf bc 00 06 c0 68 00 &3a8a 04 00 02 00 82 ; mover_sprite_16 (SPRITE_ROTORS_ONE) &3a8f 00 40 bc bd 94 00 06 40 bc bf bc 00 06 40 bc ab &3a9f bc 00 06 40 bc 83 bc 00 06 40 bc 83 bc 00 06 7d &3aaf be 83 bc 00 06 5e ad 83 bc 00 06 40 bc 83 bc 00 &3abf 06 40 bc 83 bc 00 06 40 bc 97 bc 00 06 40 bc bf &3acf bc 00 06 40 a8 be bc 00 86 ; mover_sprite_14 (SPRITE_RED_HELICOPTER_BODY) &3ad8 00 0d 00 a8 bc e9 d4 69 bc 00 0a 0f 00 a8 96 83 &3ae8 9e 8b 83 96 a8 00 0c 0a 00 bc a9 6d bc 69 83 bc &3af8 83 bc 00 0d 94 06 00 d4 bc 83 4f bc c3 bc 83 bc &3b08 00 0e bc 04 00 94 7c 43 bc 96 5e bc e8 bc 83 bc &3b18 ad 94 00 12 bc 94 80 94 a9 43 bc 43 bc 54 05 00 &3b28 bc 83 bc 8f a8 00 13 bc 80 a8 bc c3 bc ad bc b8 &3b38 b0 07 38 b0 bc 9e 00 11 bc 40 bc c3 bc 8f bc 05 &3b48 30 a0 80 90 b0 b4 a8 00 11 bc 40 bc c3 bc 9e bc &3b58 b0 60 80 50 b0 b4 a8 00 10 bc 94 a8 bc c3 bc b0 &3b68 a0 50 b0 74 68 00 0e bc 40 a8 bc 43 bc b0 74 68 &3b78 00 0b a8 94 40 a8 56 bc a8 00 89 ; mover_sprite_13 (SPRITE_BLUE_SPACESHIP) &3b83 00 94 04 00 d4 fc 78 bc 78 bc 80 bc 69 bc 00 0f &3b93 bc 40 54 bc 56 7c a9 70 bc a9 7c 94 bc 56 bc 00 &3ba3 11 bc a8 94 bc 83 7c b0 7c 83 70 bc 83 7c b4 bc &3bb3 70 bc 00 13 bc 80 94 bc 96 7c b0 7c 83 70 fc 40 &3bc3 bc 74 bc 00 11 bc a8 80 bc 83 7c b0 7c 83 70 bc &3bd3 a8 40 bf bc 00 11 bc 40 bc 83 7c b0 7c 83 70 bc &3be3 40 bf 94 a8 00 10 c0 bc 96 7c b0 7c 83 70 bc 80 &3bf3 bf 94 a8 00 0f 05 00 a8 bc b0 7c 83 b0 bc 80 bf &3c03 94 a8 00 0f 94 c0 94 a8 bc b4 7c 83 b0 bc bf 94 &3c13 a8 00 0f bc 80 94 a8 c0 fc 83 b0 bc 94 a8 00 0d &3c23 bc a8 06 00 7c 83 b4 bc 00 0a a8 94 07 00 a8 96 &3c33 bc 00 89 ; mover_sprite_12 (SPRITE_HELICOPTER_WITH_MISSILE) &3c36 00 0f 00 a8 bc bd 6c bc 00 09 bc 05 00 94 6d bc &3c46 6d 94 04 00 bc ae 9d bc 00 10 bc a8 94 04 00 a8 &3c56 9e b9 9e a8 80 54 6c bc 9d bf bc 00 13 bc 40 a8 &3c66 94 c0 bc b3 fc 7e bf 8c bc 7f bc 00 10 bc a8 94 &3c76 80 94 bc 94 ac bc b3 bc 9c 4c bc 7f bd ae 8c bc &3c86 00 15 a8 94 80 bc bf ae 8c 9d bc b3 bc bf bd 9c &3c96 bc 7e dc bc 00 14 c0 bc cc be ad a7 ad 7e b8 04 &3ca6 30 a0 b0 bc 00 10 bc 80 94 a8 bc be 7f bd 9e bd &3cb6 bc 04 30 a0 80 90 bc 00 13 bc a8 80 bc 4c ac be &3cc6 ae bd bf bc 70 a0 80 90 b4 a8 00 13 a8 94 80 a8 &3cd6 9c 8c ae bf bd 9c 8c bc b0 80 90 b4 a8 00 13 05 &3ce6 00 bc ad bc a8 bc 9d bc b0 b4 a8 00 0e 05 00 bc &3cf6 9e bc 80 a8 7e a8 00 8b ; mover_sprite_10 (SPRITE_TORSO_WITH_RIFLE_ONE) &3cfe 00 00 02 bc ac bc 04 2c 94 00 08 bc ac 4c ad 9c &3d0e 4c 00 08 bc 9c 99 b9 8f 5c a8 00 09 bc 9e 76 8f &3d1e 9e a8 00 08 a8 9e 76 8f ad 94 00 08 04 00 68 00 &3d2e 85 ; mover_sprite_0f (SPRITE_TORSO_WITH_PISTOL_FIVE) &3d2f 00 00 02 bc 06 2c bc 00 06 bc 8c 9c ac 4c 9c 8c &3d3f 00 09 68 bc 9c b3 b9 9c bc 00 09 40 a8 b6 bc b6 &3d4f b9 b3 8f bc 00 0b 05 00 68 bc 9e bc 00 08 00 82 ; mover_sprite_0e (SPRITE_OFFICER_HEAD) &3d5f 00 00 02 54 bc a9 bc ac 54 00 08 bc b9 b3 b9 96 &3d6f a9 9c 8c 6c 94 00 0c bc 76 b3 be bc 96 a9 9c 5e &3d7f bc 00 0c c0 68 40 68 00 06 00 02 00 82 ; mover_sprite_0d (SPRITE_LEGS_SEVEN) &3d8c 00 00 02 bc e9 bc ac 40 00 07 bc 96 6c 4c 40 00 &3d9c 07 bc 69 5c ac 40 00 07 bc 83 96 bc 9c 8c bc 00 &3dac 09 e8 80 68 00 05 00 82 ; mover_sprite_0c (SPRITE_SOLDIER_HEAD) &3db4 00 00 02 94 bc 04 2c bc 94 00 08 bc 5c b9 9c 4c &3dc4 bc 00 08 bc 76 b3 be ac 9c bc 00 09 40 05 28 00 &3dd4 05 00 02 00 82 ; mover_sprite_0b (SPRITE_TORSO_WITH_RIFLE_ZERO) &3dd9 00 00 02 bc 06 2c bc 00 06 bc 8c 9c ac 4c 9c 8c &3de9 00 09 7c 9c 4c bc 9e 8f 00 08 40 a8 bc 8d 73 4f &3df9 94 00 09 c0 94 ad 79 8f bc 00 08 04 00 68 bc 5e &3e09 a8 00 88 ; mover_sprite_0a (SPRITE_LEGS_SIX) &3e0c 00 00 02 bc 69 bc 6c 94 7c ec 00 09 bc 96 7c 5c &3e1c cc 5c 8c 00 09 bc 43 bc 4c ec 5c a8 00 09 bc 96 &3e2c bc 07 28 00 07 00 02 00 82 ; mover_sprite_09 (SPRITE_PLAYER_HEAD) &3e35 00 00 02 94 bc 04 2c bc 94 00 08 bc 8c 9c 6d 9c &3e45 8c bc 00 09 bc 9c bc 9e 8f 9e bc a8 00 0a c0 e8 &3e55 00 04 00 02 00 82 ; mover_sprite_08 (SPRITE_TORSO_WITH_PISTOL_FOUR) &3e5b 00 00 02 bc 6c bc ec bc 00 07 bc 9c b9 b3 b6 9c &3e6b 4c 00 09 bc 73 6d 5c bc 00 07 a8 bc 8f 9e bc 76 &3e7b bc 00 09 80 e8 00 04 00 82 ; mover_sprite_07 (SPRITE_TORSO_WITH_PISTOL_THREE) &3e84 00 c0 04 14 00 05 fc b9 b3 a6 ac bc 00 08 bc 73 &3e94 a7 ad 9c 4c 00 08 bc ad 8f 9e bc 99 b9 bc 00 0a &3ea4 e8 80 a8 bc b6 73 bc 00 09 06 00 04 28 00 06 00 &3eb4 82 ; mover_sprite_06 (SPRITE_TORSO_WITH_PISTOL_TWO) &3eb5 00 c0 04 14 00 05 bc ec 4c ac bc 00 07 bc cc 9c &3ec5 ac 4c 00 07 bc 5c bc 59 9c bc 00 08 c0 68 76 b3 &3ed5 9b 8f ad 94 00 0a 07 00 e8 5e a8 00 07 00 82 ; mover_sprite_05 (SPRITE_TORSO_WITH_PISTOL_ONE) &3ee4 00 00 02 bc 06 2c bc 00 06 bc 8c 9c b9 4c 9c 8c &3ef4 00 09 7c 73 9c bc 9c a8 00 08 80 a8 bc 73 8f bc &3f04 00 08 40 68 bc 9e bc 00 07 00 82 ; mover_sprite_04 (SPRITE_LEGS_FIVE) &3f0f 00 40 94 bc e9 bc 00 07 40 bc 83 96 ac 8c ac 7c &3f1f 00 0a 40 68 7c 5c ac 8c 00 08 54 bc 6c cc 5c 00 &3f2f 07 bc 83 a9 bc 9c bc e8 00 09 a8 bc 56 bc 00 06 &3f3f 00 82 ; mover_sprite_03 (SPRITE_LEGS_FOUR) &3f41 00 94 bc e9 bc 94 00 07 bc 83 96 bc ac 8c 6c 7c &3f51 ac 00 0b 68 04 3c 5c bc 4c 00 08 40 bc 43 bc 8c &3f61 ac 4c 9c 00 0a 40 bc 96 bc a8 bc 5c bc a8 00 0b &3f71 00 02 00 82 ; mover_sprite_02 (SPRITE_LEGS_THREE) &3f75 00 40 94 e9 bc 94 00 07 80 bc 83 96 6c 8c 7c ac &3f85 00 0a 80 e8 bc 9c 8c ac 4c 00 09 54 bc 6c 8c ac &3f95 5c bc 00 09 bc 83 a9 bc 9c bc 68 00 09 a8 bc 56 &3fa5 bc 00 06 00 82 ; mover_sprite_01 (SPRITE_LEGS_TWO) &3faa 00 94 bc e9 bc 94 00 07 bc 83 96 bc ac 8c 6c 7c &3fba ac 00 0b 68 04 3c 9c 04 0c 00 08 40 bc 43 bc 8c &3fca ec 9c 00 09 40 bc 96 bc a8 bc 5c bc a8 00 0b 00 &3fda 02 00 82 ; mover_sprite_00 (SPRITE_LEGS_ONE) &3fdd 00 00 02 07 14 80 94 bc 6c 00 08 bc 43 bc cc 6c &3fed cc 00 08 bc 96 bc e8 bc dc bc a8 00 0a 00 02 00 &3ffd 02 00 82 # &4000 - &4073 is moved to &0004 - &0077 at &414b ; unpack_column_of_sprite &0004 b9 ff ff LDA &ffff,Y # actually LDA mover_sprite_address,Y &0007 aa TAX &0008 f0 5f BEQ &0069 ; end_of_column # &00 indicates end of column &000a 10 11 BPL &001d ; is_positive ; is_negative &000c 0a ASL A &000d 10 07 BPL &0016 ; is_run_length_1 ; is_run_length_3 &000f 8a TXA # 11 ...... run length 3 &0010 29 3f AND #&3f &0012 a2 03 LDX #&03 &0014 d0 14 BNE &002a ; unpack_run # Always branches ; is_run_length_1 &0016 8a TXA # 10 ...... run length 1 &0017 29 3f AND #&3f &0019 a2 01 LDX #&01 &001b d0 0d BNE &002a ; unpack_run # Always branches ; is_positive &001d 0a ASL A &001e 10 07 BPL &0027 ; get_next_byte_of_sprite_data ; is_run_length_2 &0020 8a TXA # 01 ...... run length 2 &0021 29 3f AND #&3f &0023 a2 02 LDX #&02 &0025 d0 03 BNE &002a ; unpack_run # Always branches ; is_variable_run_length &0027 c8 INY # 00 ...... use next byte for run length &0028 b1 05 LDA (&05),Y ; sprite_address ; unpack_run &002a c8 INY &002b 84 cd STY &cd ; sprite_data_offset &002d a8 TAY &002e b1 b8 LDA (&b8),Y ; pixel_table_address &0030 85 3b STA &3b ; sprite_byte ; mask_table_lookup_opcode &0032 b1 c8 LDA (&c8),Y ; mask_table_address # also LDA #&ff &0034 85 39 STA &39 ; sprite_mask ; unpack_run_loop &0036 b2 3d LDA (&3d) ; column_screen_address *** # 65C02 opcode &0038 29 ff AND #&ff # actually AND sprite_mask &003a 49 ff EOR #&ff # actually EOR sprite_byte &003c 8d ee ee STA &eeee # actually STA column_screen_address &003f a5 3d LDA &3d ; column_screen_address_low &0041 29 07 AND #&07 &0043 f0 09 BEQ &004e ; move_up_a_group &0045 c6 3d DEC &3d ; column_screen_address_low # Move up a row ; next_byte_of_run &0047 ca DEX &0048 d0 ec BNE &0036 ; unpack_run_loop &004a a4 cd LDY &cd ; sprite_data_offset &004c d0 b6 BNE &0004 ; unpack_column_of_sprite ; move_up_a_group &004e c6 3e DEC &3e ; column_screen_address_high # Move up a group &0050 c6 3e DEC &3e ; column_screen_address_high &0052 a5 3d LDA &3d ; column_screen_address_low &0054 38 SEC &0055 e9 79 SBC #&79 &0057 85 3d STA &3d ; column_screen_address_low &0059 b0 02 BCS &005d ; skip_page &005b c6 3e DEC &3e ; column_screen_address_high ; skip_page &005d a5 3e LDA &3e ; column_screen_address_high &005f c9 40 CMP #&40 &0061 b0 e4 BCS &0047 ; next_byte_of_run &0063 69 40 ADC #&40 &0065 85 3e STA &3e ; column_screen_address_high &0067 d0 de BNE &0047 ; next_byte_of_run # Always branches ; end_of_column &0069 c8 INY &006a b1 05 LDA (&05),Y ; sprite_address &006c 30 03 BMI &0071 ; consider_next_column ; to_consider_plotting_next_column_of_mover &006e 4c 10 1e JMP &1e10 ; consider_plotting_next_column_of_mover ; consider_next_column &0071 a5 b8 LDA &b8 ; pixel_table_address_low # Zero if sprite is flipped &0073 f0 f9 BEQ &006e ; to_consider_plotting_next_column_of_mover &0075 60 RTS ; unused &0076 00 00 *** ; initialisation &4074 a9 14 LDA #&14 &4076 8d 20 fe STA &fe20 ; video ULA control register &4079 8d 48 02 STA &0248 ; os_ram_copy_of_video_ULA_control_register &407c a2 0d LDX #&0d ; write_video_registers_loop &407e bd 61 41 LDA &4161,X ; video_register_values &4081 8e 00 fe STX &fe00 ; video register number &4084 8d 01 fe STA &fe01 ; video register value &4087 ca DEX &4088 10 f4 BPL &407e ; write_video_registers_loop &408a a2 0f LDX #&0f ; initialise_colours_loop &408c 8a TXA &408d 49 07 EOR #&07 &408f 85 78 STA &78 ; colour &4091 8a TXA &4092 0a ASL A &4093 0a ASL A &4094 0a ASL A &4095 0a ASL A &4096 05 78 ORA &78 ; colour &4098 8d 21 fe STA &fe21 ; video ULA palette register &409b ca DEX &409c 10 ee BPL &408c ; initialise_colours_loop &409e a9 0f LDA #&0f &40a0 8d 42 fe STA &fe42 ; System VIA data direction register B &40a3 a9 04 LDA #&04 # Set B4 = 0 &40a5 8d 40 fe STA &fe40 ; System VIA port B input/output register &40a8 a9 05 LDA #&05 # Set B5 = 0, i.e. scroll from &4000 &40aa 8d 40 fe STA &fe40 ; System VIA port B input/output register &40ad a9 0a LDA #&0a ; Set second colour duration &40af a2 00 LDX #&00 # Disable flashing colours &40b1 20 f4 ff JSR &fff4 ; OSBYTE &40b4 a9 f7 LDA #&f7 # Set colour 15 to black &40b6 8d 21 fe STA &fe21 ; video ULA palette register &40b9 a9 80 LDA #&80 # Set colour 8 to white &40bb 8d 21 fe STA &fe21 ; video ULA palette register &40be a9 97 LDA #&97 # Set colour 9 to black &40c0 8d 21 fe STA &fe21 ; video ULA palette register &40c3 a9 67 LDA #&67 # Set colour 6 to black &40c5 8d 21 fe STA &fe21 ; video ULA palette register &40c8 a9 06 LDA #&06; FRAME_SHOOTING &40ca 85 a0 STA &a0 ; firing_frame &40cc ad 04 02 LDA &0204 ; irq1_vector_low &40cf 8d 1c 2f STA &2f1c ; previous_irq1_vector_low &40d2 ad 05 02 LDA &0205 ; irq1_vector_high &40d5 8d 1d 2f STA &2f1d ; irq1_vector_high &40d8 78 SEI &40d9 a9 c2 LDA #&c2 ; &2ec2 = irq1_handler &40db 8d 04 02 STA &0204 ; irq1_vector_low &40de a9 2e LDA #&2e &40e0 8d 05 02 STA &0205 ; irq1_vector_high &40e3 58 CLI &40e4 a9 02 LDA #&02 # Disable v-sync interrupt &40e6 8d 4e fe STA &fe4e ; System VIA interrupt enable register ; wait_for_vsync &40e9 2c 4d fe BIT &fe4d ; System VIA interrupt flag register &40ec f0 fb BEQ &40e9; wait_for_vsync &40ee ad 6b fe LDA &fe6b ; User VIA auxiliary control register &40f1 29 df AND #&df # Set User VIA timer 2 to one-shot mode &40f3 8d 6b fe STA &fe6b ; User VIA auxiliary control register &40f6 a9 20 LDA #&20 # Enable User VIA timer 2 interrupts &40f8 8d 6e fe STA &fe6e ; User VIA interrupt enable register &40fb a9 ff LDA #&ff &40fd 8d 68 fe STA &fe68 ; User VIA timer 2 counter LSB &4100 8d 69 fe STA &fe69 ; User VIA timer 2 counter MSB &4103 a9 82 LDA #&82 # Enable v-sync interrupts &4105 8d 4e fe STA &fe4e ; System VIA interrupt enable register &4108 ad 6b fe LDA &fe6b ; User VIA auxiliary control register &410b 29 3f AND #&3f # Set User VIA timer 1 to one-shot mode &410d 8d 6b fe STA &fe6b ; User VIA auxiliary control register &4110 a9 c0 LDA #&c0 # Enable User VIA timer 1 interrupts &4112 8d 6e fe STA &fe6e ; User VIA interrupt enable register &4115 a9 90 LDA #&90 &4117 8d 64 fe STA &fe64 ; User VIA timer 1 counter LSB &411a a9 29 LDA #&29 &411c 8d 65 fe STA &fe65 ; User VIA timer 1 counter MSB &411f a9 01 LDA #&01 # Set colour 0 to cyan &4121 8d 21 fe STA &fe21 ; video ULA palette register &4124 a9 04 LDA #&04 &4126 8d 30 fe STA &fe30 ; Paged ROM latch &4129 85 f4 STA &f4 ; os_ram_copy_of_currently_selected_rom &412b 4c c2 20 JMP &20c2 ; to_title_screen ; entry_point &412e a2 ff LDX #&ff &4130 9a TXS &4131 a2 00 LDX #&00 ; move_4200_to_45ff_loop # Move &4200 - &45ff to &0400 - &07ff &4133 bd 00 42 LDA &4200,X # actually LDA source_address,X &4136 9d 00 04 STA &0400,X # actually STA target_address,X &4139 e8 INX &413a d0 f7 BNE &4133 ; move_4200_to_45ff_loop &413c ee 35 41 INC &4135 ; source_address_high &413f ee 38 41 INC &4138 ; target_address_high &4142 ad 35 41 LDA &4135 ; source_address_high &4145 c9 46 CMP #&46 &4147 d0 ea BNE &4133 ; move_4200_to_45ff_loop &4149 a2 73 LDX #&73 ; move_4000_to_4073_loop # Move &4000 - &4073 to &0004 - &0077 &414b bd 00 40 LDA &4000,X ; unrelocated_unpack_column_of_sprite &414e 95 04 STA &04,X ; unpack_column_of_sprite &4150 ca DEX &4151 10 f8 BPL &414b ; move_4000_to_4073_loop &4153 a2 e0 LDX #&e0 ; move_4600_to_46df_loop # Move &4600 - &46df to &0880 - &095f &4155 bd ff 45 LDA &45ff,X &4158 9d 7f 08 STA &087f,X &415b ca DEX &415c d0 f7 BNE &4155 ; move_4600_to_46df_loop &415e 4c 74 40 JMP &4074 ; initialisation ; video_register_values &4161 7f ; R0: Horizontal total register &4162 50 ; R1: Number of characters per line &4163 62 ; R2: Horizontal sync position register &4164 28 ; R3: Sync width register &4165 26 ; R4: Vertical total register &4166 00 ; R5: Vertical total adjust register &4167 19 ; R6: Vertical displayed register &4168 20 ; R7: Vertical sync position &4169 01 ; R8: Interlace and delay register &416a 07 ; R9: Scan lines per character register &416b 67 ; R10: Cursor start register &416c 08 ; R11: Cursor end register &416d 08 ; R12: Displayed screen start address register (high) # Set screen start address to &4000 &416e 00 ; R13: Displayed screen start address register (low) ; unused &416f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &417f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &418f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &419f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &41af 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &41bf 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &41cf 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &41df 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &41ef 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &41ff 00 # &4200 - &45ff is moved to &0400 - &07ff at &4133 ; flipped_green_pixel_table ; 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 5 6 7 8 9 a b c d e f &0400 00 02 01 03 08 0a 09 0b 04 06 05 07 0c 0e 0d 0f ; &00 : KK RK KR RR GK YK GR YR KG RG KY RY GG YG GY YY &0410 20 22 21 23 28 2a 29 2b 24 26 25 27 2c 2e 2d 2f ; &10 : BK MK BR MR CK WK CR WR BG MG BY MY CG WG CY WY &0420 10 12 11 13 18 1a 19 1b 14 16 15 17 1c 1e 1d 1f ; &20 : KB RB KM RM GB YB GM YM KC RC KW RW GC YC GW YW &0430 30 32 31 33 38 3a 39 3b 34 36 35 37 3c 3e 3d 3f ; &30 : BB MB BM MM CB WB CM WM BC MC BW MW CC WC CW WW ; unflipped_green_pixel_table ; 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 5 6 7 8 9 a b c d e f &0440 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f ; &00 : KK KR RK RR KG KY RG RY GK GR YK YR GG GY YG YY &0450 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f ; &10 : KB KM RB RM KC KW RC RW GB GM YB YM GC GW YC YW &0460 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f ; &20 : BK BR MK MR BG BY MG MY CK CR WK WR CG CY WG WY &0470 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f ; &30 : BB BM MB MM BC BW MC MW CB CM WB WM CC CW WC WW ; flipped_mask_table ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &0480 ff 55 aa 00 55 55 00 00 aa 00 aa 00 00 00 00 00 ; &00 &0490 55 55 00 00 55 55 00 00 00 00 00 00 00 00 00 00 ; &10 &04a0 aa 00 aa 00 00 00 00 00 aa 00 aa 00 00 00 00 00 ; &20 &04b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; &30 ; unflipped_mask_table ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &04c0 ff aa 55 00 aa aa 00 00 55 00 55 00 00 00 00 00 ; &00 &04d0 aa aa 00 00 aa aa 00 00 00 00 00 00 00 00 00 00 ; &10 &04e0 55 00 55 00 00 00 00 00 55 00 55 00 00 00 00 00 ; &20 &04f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; &30 ; flipped_white_pixel_table # Uses white in place of green ; 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 5 6 7 8 9 a b c d e f &0500 00 02 01 03 2a 0a 2b 0b 15 17 05 07 3f 1f 2f 0f ; &00 : KK RK KR RR WK YK WR YR KW RW KY RY WW YW WY YY &0510 20 22 21 23 28 2a 29 2b 35 37 25 27 3d 3f 2d 2f ; &10 : BK MK BR MR CK WK CR WR BW MW BY MY CW WW CY WY &0520 10 12 11 13 3a 1a 3b 1b 14 16 15 17 3e 1e 3f 1f ; &20 : KB RB KM RM WB YB WM YM KC RC KW RW WC YC WW YW &0530 30 32 31 33 38 3a 39 3b 34 36 35 37 3c 3e 3d 3f ; &30 : BB MB BM MM CB WB CM WM BC MC BW MW CC WC CW WW ; unflipped_white_pixel_table # Uses white in place of green ; 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 5 6 7 8 9 a b c d e f &0540 00 01 02 03 15 05 17 07 2a 2b 0a 0b 3f 2f 1f 0f ; &00 : KK KR RK RR KW KY RW RY WK WR YK YR WW WY YW YY &0550 10 11 12 13 14 15 16 17 3a 3b 1a 1b 3e 3f 1e 1f ; &10 : KB KM RB RM KC KW RC RW WB WM YB YM WC WW YC YW &0560 20 21 22 23 35 25 37 27 28 29 2a 2b 3d 2d 3f 2f ; &20 : BK BR MK MR BW BY MW MY CK CR WK WR CW CY WW WY &0570 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f ; &30 : BB BM MB MM BC BW MC MW CB CM WB WM CC CW WC WW ; scenery_sprite_13 (SCENERY_WHITE_GREEN_PILLBOX_WITH_SKULL) &0580 00 06 2c 06 3d 6c 0c 3d 07 2c 0b 3d ec 7d 04 2c &0590 fd 06 2c bc c0 bc bd bc 94 00 1a 07 2c 04 3d 07 &05a0 2c 0a 3d 04 2c 08 3d bc 05 3d ac fd ec 05 3d 04 &05b0 2c bc c0 bc ac bc 9c ac 94 00 20 cc 9d ff 04 2e &05c0 bf 9d 8c 7c ac fd 7c 7f ae 8c ae 7f 5d 8c 9d ff &05d0 7e fc 04 2e 4c ae bf 5d cc ae 05 3f 9d 8c bc c0 &05e0 bc 8c bc 8c bd bc 00 2d 8c 9d ff ae 4c 9d 05 3f &05f0 bc bf bd 7e bd ae bc 6e bf 4c 9d 04 3f 7e 04 3c &0600 06 3d bc 9c 4c 04 3f 5d 07 3f 8c bc c0 bc 8c bc &0610 7f bc 00 2c 8c 09 3f ae 4c 9d bc 7f 7c 4c bc 8c &0620 9d bf 9d 7f 7e 06 3c bd 7f be 7c be ff bd be 08 &0630 3f ae 8c ae ff bc d4 bc bf bc 7f bc 00 2a 04 3f &0640 ae bf ae 04 0c 9d 7f bc 7f 7c bf 9d bc 04 3f 07 &0650 3c ff 7e bf bd 07 3f bc 07 3f 05 0c ae 06 3f ae &0660 bc ae bf bc 00 a8 ; scenery_sprite_14 (SCENERY_HIGH_RUINS) &0666 00 69 bc c0 d4 00 06 43 69 bc a9 bc 83 bc 07 29 &0676 bc 08 14 bc a9 bc 04 14 00 13 04 03 bc 96 bc 69 &0686 83 12 16 c3 bc 54 04 00 d4 00 11 0a 03 bc 10 00 &0696 bc 05 03 bc 04 14 bc 83 bc d4 00 11 0a 03 bc 10 &06a6 00 bc a9 bc 08 03 e9 43 bc 04 14 00 11 c3 bc a9 &06b6 bc 04 03 bc 10 00 bc 96 7c a9 bc 0e 03 bc 00 13 &06c6 c3 bc 96 bc 04 03 bc 10 00 bc 43 bc 96 bc 43 bc &06d6 0c 28 00 14 0a 03 bc 10 14 bc 07 03 bc 00 0b 06 &06e6 03 bc a9 bc 83 12 16 06 03 7c 08 14 00 0f 06 03 &06f6 bc 96 bc 68 10 00 bc c3 bc e8 00 0e 08 03 bc 54 &0706 10 00 bc d6 bc 00 0b 04 16 bc a8 bc d6 bc 00 89 ; scenery_sprite_15 (SCENERY_TREES_TWO) &0716 00 fc 05 14 08 3c d4 04 3c 54 06 00 94 c0 94 09 &0726 00 54 0d 00 d4 bc 68 00 18 1b 3c 94 bc 54 bc 54 &0736 bc 94 fc 54 bc e8 94 0b 00 54 bc a8 c0 a8 94 00 &0746 18 05 3c 05 28 bc 94 80 94 40 68 bc 04 00 68 0a &0756 3c 08 28 c0 a8 07 00 54 bc a8 00 1b bc 68 07 00 &0766 94 80 a8 c0 94 a8 94 08 00 a8 80 a8 80 06 14 08 &0776 3c 54 80 54 fc 68 7c 94 00 1e bc 94 fc d4 7c 54 &0786 05 3c 04 14 80 94 bc 04 14 09 3c 05 28 bc a8 07 &0796 3c 94 04 00 68 bc 68 94 c0 94 00 22 0d 3c 04 28 &07a6 0e 3c 68 04 00 a8 04 00 bc 94 40 e8 bc 68 bc 94 &07b6 05 00 a8 94 80 a8 94 a8 80 a8 00 20 7c a8 04 00 &07c6 04 28 09 00 68 05 00 68 bc 94 04 00 94 a8 06 00 &07d6 bc 94 08 00 a8 bc 94 05 00 a8 40 a8 94 00 23 a8 &07e6 1d 00 68 54 a8 80 a8 05 00 a8 80 a8 bc 09 00 68 &07f6 94 a8 07 00 a8 94 a8 00 9a ; unused &07ff 00 # &4600 - &46df is moved to &0880 - &095f at &4155 ; sound_data ; chan vol pitch dur &0880 10 00 f1 ff 07 00 07 00 ; &00 # Explosion solider or helicopter, exploding grenade &0888 11 00 06 00 c8 00 07 00 ; &08 # Exploding soldier, exploding grenade &0890 11 00 09 00 c8 00 07 00 ; &10 # Exploding helicopter &0898 13 00 07 00 a0 00 1e 00 ; &18 # Firing grenade &08a0 12 00 07 00 78 00 0a 00 ; &20 # Firing bullet &08a8 12 00 08 00 05 00 05 00 ; &28 # Player landing &08b0 13 00 07 00 37 00 05 00 ; &30 # Player jumping &08b8 10 00 f1 ff 06 00 03 00 ; &38 # Exploding grenade ; OS envelope storage &08c0 03 00 00 00 00 00 00 7f fb ff 00 7e 6e 00 00 00 ; 1 &08d0 01 00 00 00 00 00 00 7f e7 fb ce 7e 64 00 00 00 ; 2 &08e0 05 ff 01 00 01 01 00 7f fb ff 00 7e 5a 00 00 00 ; 3 &08f0 03 00 00 00 00 00 00 7f e7 e7 e7 7e 64 00 00 00 ; 4 &0900 01 fd 00 00 64 00 00 7e ff ff ff 7e 64 00 00 00 ; 5 &0910 01 fe 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 ; 6 &0920 01 ff 00 00 ff 00 00 3c ff ff fd 7e 64 00 00 00 ; 7 &0930 01 02 00 00 ff 00 00 7f fe 00 f6 7e 64 00 00 00 ; 8 &0940 02 02 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 ; 9 &0950 01 00 00 00 00 00 00 7f fd fd fd 7e 64 00 00 00 ; 10 ; unused &46e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &46f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; data1 ; FFFF1000 FFFF1000 1782 # Loaded into bank 4 at &8000 - &9781 ; scenery_sprite_00 (SCENERY_WHITE_GREEN_PILLBOX) &8000 00 fd ec 0c 3d 05 2c bc 40 94 bc 05 2c 07 3d 04 &8010 2c bc 94 00 14 ae 4c 5d 04 3f 04 2e 07 3f ae 4c &8020 bc 94 ac 8c bc 8c dd 05 3f ae dd cc bc bf bd 94 &8030 00 1d 8c 9d 08 3f 5d 04 0c ae ff 9d 4c 7c 5d bc &8040 0f 3e 9c bc 7f bc 00 16 0f 3e dc 04 3e 9c 7c be &8050 bd bc ff ee 8c 5d 07 3f bc ac be bc 00 16 cc 09 &8060 3f ae 08 3f 9d 8c 7c 7f bc bf ae cc 9d 4c ae 04 &8070 3f bc 7f bc 8c 9d bc 00 1b 9d 06 3f ee 04 0c ae &8080 08 3f 7c 7f bc bf 5d 05 3f 9d 04 3f bc 7f bc 7f &8090 bc 00 9a ; scenery_sprite_01 (SCENERY_GREEN_YELLOW_PILLBOX) &8093 00 05 2c 04 2d 10 2c ed 04 2c bc 0f 2c bc c0 bc &80a3 6d 94 00 13 04 1c 04 1e 06 1c 7c 08 1c de 04 1c &80b3 5e 0f 1c bc c0 bc 9e 9c bc 00 17 8c 05 0e 8c ac &80c3 06 0c 5c 4c 4f 8e 8c 8e 06 0c 04 1c 9e 9c bc ac &80d3 8c 9c 4c dc 04 0c bc c0 bc 4c bc 00 22 09 2c bc &80e3 ec bc 0c 2c bc 4c 7c 40 7c 8c 4d 9c 8c bc 8c 9c &80f3 8c ac 9c 4c bc 40 94 bc 4c bc 00 1f 8d 04 0c 5c &8103 8c ac 9c ac bc 9c ac 4c 7c 6c 7c 04 0c bc 8c 8d &8113 7c 40 7c 8c 9c 8e 8f 8c ac 04 1c ac 8d 8f ed 04 &8123 0c bc 00 28 4f 4d 04 0c ac 8c ac 8c 4d 4f bc 8f &8133 7c 8d bc 04 0c bc 4c 7c 40 7c cc 8e 9e cc 8d 04 &8143 0f 4e 05 0c bc 00 a3 ; scenery_sprite_02 (SCENERY_LOW_GREEN_YELLOW_PILLBOX) &814a 00 ec bc 05 2c 06 2d 05 2c 6d ac 7c ac bc 40 94 &815a bc ad bc 6c bc ec bc 80 bc 6c bc ad 94 00 1e dc &816a bc 06 1c de 5c fc 9c 5e 5c 7c 8f bc 80 bc 8c bc &817a ad 9e 9c ac 04 0c bc 94 bc 4c bc 8f 8e bc 00 21 &818a cc bc 4c cd 8f cc ad 9c ac ad 8d bc 8f 8e cc bc &819a 8c bc 80 bc 8c bc de dc 5e 05 1c bc 4c bc 00 20 &81aa cc bc 8d 4f 4e 8f 4c 4f 9c ec 8e 4c 6c 8c bc 8d &81ba fc ac bc 8c ac 9c ac 4f 8e 8c 5c 4c 8d bc ac 9c &81ca bc 00 23 8f 8d 8c bc 9e 07 1c 9e 0b 1c bc 8c fc &81da 8c bc 6c 8c 8e 9e 9c 4c 7c 4f 8c bc 8c 8e bc 00 &81ea 1e cf bc 8f 8d bc 8d 8c bc 4c bc 4c bc 8e 8f bc &81fa 8e 8c bc 4c bc 8c fc 8c bc 4c ac cc 8d 8f 7c 8e &820a 4c bc 4c bc 00 a5 ; mover_sprite_11 (SPRITE_HELICOPTER_BODY) ; scenery_sprite_03 (SCENERY_HELICOPTER) # Not used as scenery &8210 00 0e 00 a8 bc 6c bc ec bc a8 00 0b bc 0f 00 bc &8220 8c bc 8c 9c a8 00 0b bc a8 94 04 00 04 14 bc 04 &8230 2c 4c bc 8c bc 00 10 bc 40 a8 54 bc 8f bc 4f bc &8240 78 9c cc bc 8c bc 00 11 bc c0 bc 8c bc 8f bc ad &8250 9e b8 f0 f8 bc 9c bc 00 11 bc e8 bc 4c ac bc 8f &8260 bc 07 30 bc 9e bc 00 0f a8 94 c0 bc 4c bc 8f bc &8270 06 30 bf bc 8f bc 00 10 94 04 00 7c ac bc 9e bc &8280 b4 f0 b5 ba b4 68 00 10 bc 40 94 a8 80 bc 8c bc &8290 9e 7c b0 b5 ba b4 a8 00 11 bc 94 a8 c0 bc 8c bc &82a0 4c bc b0 b4 a8 00 0e bc 05 00 bc 8c bc 8c 9c 68 &82b0 00 0b a8 94 05 00 a8 bc 9c a8 00 8a be 68 be bc &82c0 be a8 04 00 a8 be a8 00 8e ; scenery_sprite_04 (SCENERY_MOUNTAINS_ONE) &82c9 00 0f 00 68 54 19 00 54 68 80 94 bd 0f 3f 7d 54 &82d9 00 11 13 00 a8 94 13 00 54 68 06 00 7c 7d 0f 3f &82e9 be a8 00 12 15 00 a8 54 0e 00 94 a8 08 00 94 bd &82f9 0b 3f be 05 3f be bc 00 15 18 00 68 54 08 00 94 &8309 a8 0a 00 a8 7e 0a 3f bd be 7f be bd 7f bd 94 00 &8319 18 1c 00 a8 54 40 94 68 0e 00 a8 fe 08 3f bd be &8329 bd 06 3f bc 00 15 1f 00 a8 94 a8 11 00 54 95 bd &8339 08 3f bd be 05 3f be a8 00 14 e8 d4 0e 00 94 a8 &8349 0a 00 a8 94 0f 00 94 bd 0e 3f bd 7e bf be a8 00 &8359 17 06 00 68 94 08 00 54 a8 0d 00 a8 0e 00 a8 7e &8369 11 3f 7d 94 00 15 08 00 a8 94 04 00 94 68 20 00 &8379 a8 be 14 3f bc 00 11 0a 00 68 94 a8 1d 00 a8 94 &8389 05 00 94 7d 05 3f 7e fd 07 3f be a8 00 17 0d 00 &8399 a8 94 1e 00 bc c0 bc 07 3f bd 09 3f 7e a8 00 12 &83a9 0f 00 bc 1e 00 a8 94 40 bc 0e 3f be a8 00 8f ; scenery_sprite_05 (SCENERY_MOUNTAINS_TWO) &83b8 00 0e 00 94 a8 13 00 94 0b 00 bc 80 54 bd 0d 3f &83c8 bc 00 12 0c 00 94 a8 15 00 a8 94 09 00 94 68 be &83d8 0b 3f be 04 3f bd 54 00 16 0b 00 bc 19 00 a8 54 &83e8 05 00 94 a8 c0 a8 be 0a 3f bd 7e 04 3f 7d 94 00 &83f8 18 0a 00 bc 80 a8 54 19 00 68 54 80 a8 94 05 00 &8408 68 be 0a 3f bd be ff be a8 00 1a 09 00 bc 05 00 &8418 68 94 1a 00 a8 94 a8 07 00 94 bd 09 3f be bd 7e &8428 a8 00 18 12 00 a8 94 18 00 bc 07 00 94 bd 08 3f &8438 be 7d 04 3f bd 94 00 15 14 00 bc 14 00 54 a8 06 &8448 00 94 bd 0d 3f 7e 04 3f bc 00 13 15 00 a8 94 10 &8458 00 94 a8 07 00 94 bd 0c 3f be 7d 04 3f be a8 00 &8468 16 16 00 94 a8 0d 00 94 a8 d4 06 00 a8 be 11 3f &8478 be a8 00 13 14 00 94 a8 0e 00 94 a8 04 00 e8 94 &8488 04 00 a8 be 0d 3f be a8 00 16 12 00 94 a8 17 00 &8498 94 a8 06 00 bc 0a 3f 7e bd bf bd 94 00 14 0f 00 &84a8 94 68 1a 00 68 54 40 bc 0a 3f bd ff be a8 00 92 ; scenery_sprite_06 (SCENERY_TREES_ONE) &84b8 00 1b 00 d4 bc 68 40 54 06 00 94 06 00 94 a8 94 &84c8 00 11 fc 08 14 07 3c d4 40 d4 bc a8 c0 bc a8 94 &84d8 bc 40 94 06 00 bc 80 94 e8 80 94 00 1b bc 68 06 &84e8 3c 04 28 c0 04 28 06 3c 68 d4 04 00 a8 40 bc c0 &84f8 94 bc e8 54 68 80 bc 00 1c 94 13 00 a8 94 c0 bc &8508 80 a8 94 80 94 68 40 94 68 80 bc 94 bc 68 40 54 &8518 07 00 94 00 1c fc 0d 14 06 00 a8 c0 bc 94 68 07 &8528 00 54 bc c0 54 bc a8 d4 a8 94 80 94 a8 94 00 1b &8538 14 3c 05 14 7c 04 00 d4 04 3c a8 04 3c a8 c0 d4 &8548 80 94 a8 00 15 05 3c e8 bc 54 05 00 04 28 0d 3c &8558 a8 bc 68 04 00 7c a8 bc 94 a8 c0 a8 00 19 a8 0a &8568 00 a8 0f 00 a8 7c 0a 00 94 a8 80 a8 94 68 7c 94 &8578 80 94 a8 94 00 18 1e 00 a8 94 07 00 94 a8 94 80 &8588 a8 80 a8 04 00 a8 94 00 13 1e 00 a8 80 a8 94 a8 &8598 94 0c 00 a8 94 a8 80 a8 00 91 ; scenery_sprite_07 (SCENERY_SIGNPOST) &85a2 00 0c 00 94 bd 94 40 bc fd bc 00 0b 0c 00 bc bf &85b2 bc 40 bc bf bc bf bc 00 0d bc 10 3d bc bf be bf &85c2 bc bd bc 00 0c 0c 28 bc bd bc 68 bc bf be bf bc &85d2 68 00 0e 0c 00 bc be bc 40 bc bf bc bf bc 00 0d &85e2 11 00 a8 be bf be a8 00 09 13 00 a8 00 85 ; scenery_sprite_08 (SCENERY_RUNWAY) &85f0 00 bc 4f bc 00 05 bc 4f bc 00 05 bc 4f bc 00 05 &8600 bc 4f bc 00 05 bc 4f bc 00 05 bc 4f bc 00 05 bc &8610 4f bc 00 05 bc 4f bc 00 05 bc 4f bc 00 05 bc 4f &8620 bc 00 05 bc 4f bc 00 05 bc 4f bc 00 85 ; scenery_sprite_09 (SCENERY_GRAVES) &862d 00 bc 09 3d d4 00 06 bc 7f be bf bc 04 3f 7e bf &863d bd bc 94 00 0e bc 7f bc bf be bf fd 7c bd bf 7c &864d 00 0d bc 7f bd bf bd 04 3f fe 68 00 0b 0a 28 bc &865d 4f bc 00 07 0b 2d 5e 6d bc 00 07 0a 28 bc 4f bc &866d 68 00 08 0a 00 a8 5e a8 00 87 ; scenery_sprite_0a (SCENERY_LOW_RED_BUILDING) &8677 00 23 00 04 14 bc 69 bc 05 38 bd bc a9 bc 04 14 &8687 00 11 1e 14 7c e9 04 03 bc 43 08 29 83 bc 04 03 &8697 e9 7c 00 12 1e 03 7c 07 29 bc 0b 29 bc 07 29 7c &86a7 94 00 0f 05 29 bc 04 39 bc e9 bc 04 38 7d bc 08 &86b7 29 7c 07 03 bc 43 08 16 83 bc 43 bc 04 39 fc 00 &86c7 1e 05 03 bc 04 39 bc c3 bc 05 30 ba bc 08 03 7c &86d7 07 16 bc 43 bc 04 30 ba bf bc 83 bc 43 bc 04 39 &86e7 04 3c 00 23 05 03 bc 04 39 bc c3 bc 06 34 bc 08 &86f7 03 7c 07 03 bc 43 bc 06 30 bc 83 bc 43 05 29 7c &8707 00 9e ; scenery_sprite_0b (SCENERY_GRAVES_WITH_HELMETS) &8709 00 0c 00 94 6d 94 00 07 0c 00 bc 4f bc 80 05 14 &8719 00 0a 0d 2d 5e 6d bc cc 6c 94 00 0a 0c 28 bc 4f &8729 bc 68 bc 8c 5c bc a8 00 0d 0c 00 bc 4f bc 40 e8 &8739 00 09 09 00 d4 80 68 80 54 04 2c 54 00 0c 05 28 &8749 7c d4 fc 94 04 3c 9c 04 0c bc 00 0e 06 00 a8 0b &8759 00 bc 5c bc 68 00 8b ; scenery_sprite_0c (SCENERY_SANDBAGS) &8760 00 6d 7c ed bc 94 00 07 cf ad bc cf bc 6d bc 94 &8770 00 0a de bc ad cf bc cf bc 00 09 cf ad bc 5e bc &8780 ad 4f 9e bc 00 0b 04 0f bc 4f ad bc e8 00 09 de &8790 6d 4f 9e bc 00 07 cf ad bc e8 00 06 de bc a8 00 &87a0 85 ; scenery_sprite_0d (SCENERY_HIGH_RED_BUILDING) &87a1 00 32 03 0b 16 43 06 16 83 fc 00 0b 06 03 bc 0c &87b1 39 bc 05 03 bc 09 2d bc 0e 03 bc 07 30 ba bf bc &87c1 43 bc 04 36 bc 83 7c 00 1d 06 03 bc 0c 36 bc 05 &87d1 03 bc 09 1e bc c3 bc 0a 03 bc 09 30 bc 43 bc 04 &87e1 36 bc 83 04 3c 00 1e 27 16 bc 0a 03 bc 09 34 bc &87f1 43 bc 96 f6 bc 83 04 3c 00 13 0f 03 09 16 0f 03 &8801 bc 1e 16 04 3c 00 0d 0f 03 bc 05 30 7a bc 0f 03 &8811 bc 0c 03 06 16 0c 03 fc 00 13 27 28 bc 0c 03 bc &8821 04 36 bc 0c 03 7c a8 00 0f 27 00 bc 0c 16 bc 04 &8831 36 bc 0c 16 7c 00 8e ; scenery_sprite_0e (SCENERY_HEADQUARTERS_SIGN) &8838 00 07 00 94 07 2d 94 00 08 07 2d bc 8f 6d bc 6d &8848 8f bc 00 0b 07 28 bc 8f 5e bc 5e 8f bc 00 0b 07 &8858 00 bc 8f 9e 05 0f bc 00 0a 07 00 bc 8f 9e ed bc &8868 8f bc 00 0b 07 14 bc 8f 7c 5e bc 8f bc 00 0b 07 &8878 1e bc 8f 9e 05 0f bc 00 0a 07 00 a8 07 1e a8 00 &8888 88 ; scenery_sprite_0f (SCENERY_CONNING_TOWER) &8889 00 25 00 54 ac bc 0b 00 bc 6c 54 00 0c 21 00 54 &8899 6c cc bc 09 38 7d bc 04 0c fc 0c 14 00 11 20 2c &88a9 bc 07 0c bc 0a 30 ba bc 04 0c 7c a8 00 10 20 0c &88b9 bc 07 0c bc 0b 30 bc 04 0c 7c 94 00 0f 20 1c bc &88c9 07 1c 0d 2c 04 1c 04 3c 00 0d 20 0c bc 07 0c bc &88d9 09 38 7d bc 04 0c fc a8 00 10 1a 2d 7c 04 0c bc &88e9 07 0c bc 0b 30 bc 04 0c 7c a8 00 12 1a 0f 7c 04 &88f9 0c bc 07 0c bc 0b 30 bc 04 0c 7c 00 91 ; scenery_sprite_10 (SCENERY_BRIDGE) &8906 00 43 56 43 96 43 a9 43 d6 bc a8 7c 6d fc 00 0f &8916 a9 05 03 56 bc 04 28 54 6d 5e 68 fc 00 0e 96 bc &8926 05 28 40 54 6d 5e 68 04 00 fc 00 0e 09 00 bc 8f &8936 6d 54 06 00 fc 00 0b 09 00 bc 8f bc a8 5e 6d 54 &8946 40 fc 00 0d 09 00 bc 8f bc c0 68 5e 6d fc 00 0c &8956 09 00 bc 8f bc 05 00 54 ad 8f fc 00 0d 09 00 bc &8966 8f bc 80 54 6d 5e 68 fc 00 0d 09 00 bc 8f 6d 5e &8976 68 04 00 fc 00 0c 09 00 bc 8f bc a8 08 00 fc 00 &8986 8b ; scenery_sprite_11 (SCENERY_OIL_DRUMS) &8987 00 94 05 00 94 05 00 94 05 00 94 00 0c bc 05 3d &8997 bc 05 3d bc 05 3d bc 00 0c bc bf 4c ae bf bc bf &89a7 4c ae bf bc bf 4c ae bf bc 00 12 bc 04 0c bf bc &89b7 04 0c bf bc 04 0c bf bc 94 00 10 bc 05 0c bc 05 &89c7 0c bc 05 0c bc a8 00 0d bc 05 28 bc 05 28 bc 05 &89d7 28 bc 00 8c ; scenery_sprite_12 (SCENERY_LOW_RUINS) &89db 00 bc a9 bc 80 d4 00 07 bc 96 bc 94 bc 83 bc 00 &89eb 09 43 bc 83 bc a9 bc 00 08 43 e9 83 69 bc c0 bc &89fb a9 bc 00 0b 06 03 bc a9 bc e9 bc 83 bc 06 29 bc &8a0b a9 bc 00 10 06 03 bc 96 bc 0b 28 7c 96 bc 00 0c &8a1b bc a9 bc d6 43 bc 0b 00 7c 83 bc 00 0d bc 96 7c &8a2b 83 bc 43 bc 0b 00 7c 96 bc 00 0e bc 83 bc e9 43 &8a3b 69 bc 94 bc 08 29 bc 83 bc 00 10 e9 08 03 d6 bc &8a4b a8 bc 56 bc a9 bc 96 bc 00 0f bc a9 bc 83 bc a8 &8a5b bc 83 d6 bc 07 00 bc 96 bc 00 11 bc 96 bc 68 80 &8a6b e8 00 88 ; mover_sprite_33 (SPRITE_MORTAR) &8a6e 00 00 02 00 02 00 02 94 95 94 00 05 bc 8f be bc &8a7e 6f 55 54 00 09 bc 9e e8 de be af 7d 54 00 0a c0 &8a8e 54 6d 7e bc 9e 8f 6f 7d 94 00 0c 94 6d 5e 68 04 &8a9e 00 68 5e a8 00 0b 80 68 00 04 00 82 ; mover_sprite_34 (SPRITE_MORTAR_OR_MACHINE_GUN_SOLDIER) &8aaa 00 07 00 05 14 00 06 54 69 54 bc ac 8c 9c ac 8c &8aba 6c 94 00 0d bc 83 96 ac 8c ac 9c 4c bc 8c 9c ac &8aca 4c ac 94 04 2c 94 00 14 04 28 5c 8c 9c 68 bc 4c &8ada 9c 7c 4c 5c 4c bc 00 10 06 00 68 40 a8 9c 99 b9 &8aea 94 a8 9c 7c 8c 9c a8 00 11 0b 00 a8 62 a8 c0 68 &8afa 00 09 00 02 00 02 00 02 17 00 00 84 ; mover_sprite_35 (SPRITE_MACHINE_GUN) &8b06 00 00 02 00 02 00 02 94 0d 00 85 00 06 a8 94 0c &8b16 00 8a 94 00 08 40 a8 94 04 00 fc d4 85 bc 80 94 &8b26 00 0d bc d4 7c 06 14 bc 5e bc 94 bc 00 0c a8 40 &8b36 94 68 06 00 a8 bc 8f bc a8 bc 00 0e 80 94 a8 0a &8b46 00 bc 8f bc 80 a8 00 0c bc 0c 00 bc 9e bc 94 00 &8b56 89 ; mover_sprite_37 (SPRITE_SAM) &8b57 00 94 00 03 bc 94 00 04 bc 9c ac 94 c0 54 00 08 &8b67 a8 80 a8 9c ac 94 bc 8c bc c0 54 bc 05 2c bc 54 &8b77 00 12 94 c0 bc 8c bc 8c ac bc 80 bc ac 8c bc 05 &8b87 0c bc 56 a8 00 14 bc d4 bc 9c bc 4c fc 4c bc 05 &8b97 0c bc 54 00 0f 7c 04 1c bc 4c fc 4c bc 05 0c bc &8ba7 56 a8 00 0f bc c0 bc 8c bc 4c bc a8 bc 4c bc 05 &8bb7 0c bc 54 00 11 c0 94 ac 9c bc 8c bc a8 80 a8 bc &8bc7 9c bc 05 0c bc 56 a8 00 14 bc 94 ac 9c a8 80 a8 &8bd7 9c bc 05 00 07 28 00 0f bc 9c a8 00 05 bc 00 83 ; mover_sprite_38 (SPRITE_ROCKET) &8be7 00 40 54 00 04 94 bc 96 0a 29 94 00 08 80 a8 96 &8bf7 bc 09 28 00 88 ; scenery_sprite_16 (SCENERY_RED_BUILDING_WITH_DOOR) &8bfc 00 04 29 bc 06 39 bc 14 29 bc 0b 39 bc 05 29 bc &8c0c 06 38 7d bc 0a 29 7c 00 18 04 03 bc 06 36 bc 14 &8c1c 03 0d 29 05 03 bc 08 34 bc 0a 03 7c 00 15 3f 16 &8c2c 07 16 7c 00 07 1c 16 04 03 0f 16 c3 0a 16 0a 03 &8c3c 7c 00 0e 1a 0f 7c 04 03 bc 0d 33 bc c3 bc 06 30 &8c4c ba bf bc 04 03 bc 04 39 fc 00 18 1a 0f 7c 04 03 &8c5c bc 09 39 bc 04 29 c3 bc 08 30 bc 04 03 bc 04 39 &8c6c fc 00 18 0f 0f 5e 09 0f 7c 04 03 bc 09 33 bc 07 &8c7c 03 bc 08 30 bc 04 03 bc 04 39 fc 00 1a 1a 1e 7c &8c8c 04 03 bc 09 36 bc 07 03 bc 08 34 bc 04 03 06 29 &8c9c 7c 00 16 3f 03 07 03 7c 00 87 ; mover_sprite_39 (SPRITE_TANK_WHEELS_ONE) &8ca6 00 00 02 80 54 69 7c e9 54 00 08 83 04 16 bc a8 &8cb6 05 16 bc 00 0a a8 56 c3 7c 43 56 a8 00 09 c0 07 &8cc6 28 00 05 00 02 00 02 00 02 80 54 a9 7c 69 54 00 &8cd6 08 bc d6 bc a8 04 16 bc 00 09 a8 56 43 7c 83 56 &8ce6 a8 00 09 c0 05 28 00 85 ; mover_sprite_3a (SPRITE_TANK_WHEELS_TWO) &8cee 00 00 02 80 54 04 29 7c a9 54 00 09 bc 83 69 56 &8cfe a8 bc 96 c3 bc 00 0b a8 56 83 96 bc a9 43 a9 bc &8d0e 96 a8 00 0d c0 07 28 00 05 00 02 00 02 00 02 80 &8d1e 54 e9 7c 54 00 07 bc 69 56 a8 bc 96 43 bc 00 0a &8d2e a8 d6 bc a9 43 7c a8 00 09 c0 05 28 00 85 ; mover_sprite_3b (SPRITE_TANK_WHEELS_THREE) &8d3c 00 00 02 80 54 a9 7c 04 29 54 00 09 bc 04 03 bc &8d4c a8 96 69 43 bc 00 0b a8 56 69 83 a9 bc 96 83 56 &8d5c a8 00 0c c0 07 28 00 05 00 02 00 02 00 02 80 54 &8d6c bc 04 29 54 00 08 bc 43 a9 bc a8 bc 69 83 bc 00 &8d7c 0b a8 96 bc e9 bc d6 a8 00 09 c0 05 28 00 85 ; mover_sprite_3c (SPRITE_TANK_BODY) &8d8b 00 06 00 94 ac bc ac bc ac 94 00 0b 07 00 68 9c &8d9b bc 8c ac 54 40 54 80 d4 00 0e 0a 00 bc cc bc 94 &8dab ac 8c bc ac bc 8c bc 00 0f 09 00 94 bc cc 7c 4c &8dbb bc 4c 6c 94 00 0d 54 80 94 80 54 ac bc 8c bc cc &8dcb 7c 4c bc 04 0c bc 00 12 bc 8f bc 8f ad bc 5c bc &8ddb 9c bc cc 7c 4c bc 04 0c bc 00 13 bc 6d bc ac cc &8deb bc 8c bc cc 7c 4c bc 04 0c bc 00 11 80 68 9e bc &8dfb cc bc 8c bc cc bc a8 9c 8c bc 6c bc a8 00 13 05 &8e0b 00 68 9c bc 8c bc cc bc 40 a8 bc 5c a8 00 10 08 &8e1b 00 bc 8c bc 4c bc 04 00 bc 8c bc 00 0e 08 00 bc &8e2b 9c bc 8c bc 05 00 bc 8c bc 00 0e 07 00 a8 40 bc &8e3b 9c a8 05 00 bc 9c bc 00 8e ; mover_sprite_3d (SPRITE_VEHICLE_BODY) # Unused &8e44 00 06 00 94 ec bc 6c bc ec 94 00 0b 07 00 68 9c &8e54 8c ac 9c bc 04 0c ac 94 00 0e 0a 00 bc 4c bc 9c &8e64 05 0c ac 94 00 0c 09 00 94 ac 8c 9c bc 8c ac 05 &8e74 1c bc 00 0e 07 14 6c 8c 9c ac 8c bc 4c bc cf bc &8e84 69 94 00 10 bc cf bc 05 0c bc 4c bc 4c bc cf ad &8e94 bc a8 00 10 bc cf bc 05 0c bc 4c bc 4c bc cf bc &8ea4 69 94 00 10 04 28 bc 05 0c bc 4c bc 4c bc de 7c &8eb4 a8 00 0f 05 00 68 9c 4c bc 4c bc 9c b8 b0 b5 ba &8ec4 b4 a8 00 11 08 00 bc 8c bc 4c bc b0 b5 ba b4 a8 &8ed4 00 0e 08 00 bc 9c bc 4c bc ba b4 a8 00 0c 07 00 &8ee4 a8 40 a8 5c 68 00 89 ; mover_sprite_3e (SPRITE_BLUE_CRAFT_WRECK) &8eeb 00 94 04 00 d4 7c d4 bc 78 bc 80 54 00 0d bc 40 &8efb 54 bc 56 7c a9 70 bc a9 7c 94 bc 96 bc 94 00 12 &8f0b bc a8 94 bc 83 7c b0 7c a8 b4 b0 bc 83 7c b4 bc &8f1b b0 b4 a8 00 15 bc 80 94 bc 96 7c b0 08 3c 40 bc &8f2b 74 a8 00 0f bc a8 80 bc 83 bc a8 a0 7c 83 70 bc &8f3b a8 40 be a8 00 12 bc 40 fc 80 a8 7c 83 b8 b0 bc &8f4b 40 aa 94 a8 00 10 04 00 94 bc 80 b8 fc b4 b0 bc &8f5b 94 68 00 0e 06 00 94 b0 7c 83 b0 bc 80 bc 00 0c &8f6b 04 00 94 a8 bc b4 7c 83 b0 bc bf 94 a8 00 0f c0 &8f7b a8 c0 bc 68 96 b0 bc 94 a8 00 0c 09 00 94 a9 b4 &8f8b bc 00 08 09 00 a8 96 bc 00 87 ; mover_sprite_3f (SPRITE_UNUSED_HELICOPTER_BODY_WRECK) # Unused &8f95 00 80 94 40 54 40 7c 54 00 09 a8 40 bc ac bc 94 &8fa5 bc 8c 8f 8e ac 94 00 0e bc a8 94 ac 8c bc ad bc &8fb5 cc bc 00 0c c0 a8 9c bc 8f bc 4f 4c bc 94 c0 a8 &8fc5 7c 94 00 10 c0 94 ad bc 9e 7c 4c 7c b0 f8 94 bc &8fd5 a0 b8 bc 00 11 94 80 94 a8 9e bc 4f bc 9c 9e ad &8fe5 ac 74 f0 b8 b0 b4 bc 00 14 7c 40 bc 6d fc 68 bc &8ff5 5c ad bc 04 2d bc 00 0f 80 a8 94 e8 7c 9c 8e ac &9005 ad 8d 4c ac bc 6d bc 9e a8 00 13 c0 a8 c0 a8 bc &9015 a8 bc 9c 9e bc a8 9c ad 7c a8 00 11 0c 00 68 40 &9025 68 00 07 00 02 00 82 ; mover_sprite_40 (SPRITE_HELICOPTER_WITH_MISSILE_BODY_WRECK) &902c 00 04 00 94 0e 00 94 bc 00 09 40 94 a8 40 94 6d &903c bc 6d 94 04 00 bc 94 bd bc 00 11 94 a8 94 04 00 &904c a8 9e b9 9e a8 05 00 a8 9c bf bc 00 12 c0 a8 94 &905c 40 94 b9 b6 7c d4 40 bc 7d bc 00 0f 40 68 94 bc &906c 94 b9 b6 7d 9c 4c 7c 94 bd ae 8c bc 00 12 c0 94 &907c bd be b9 b6 bd ee bd 9c bc 7e dc bc 00 10 c0 7c &908c ad a7 ad be 9d 8c 5c b8 f0 f4 bc 00 0f bc 80 94 &909c a8 80 a8 9e bd bf be 9c e8 f4 a8 94 00 11 bc a8 &90ac 40 94 bc ac be ae bd bc 80 54 bc a8 bc b4 a8 00 &90bc 13 a8 94 80 a8 9c 8c ae bf bd 9c ac bc b8 80 bc &90cc a8 00 12 04 00 94 ad bc 68 bc 9d bc b0 b4 a8 00 &90dc 0e c0 bc 9e bc c0 a8 7e a8 00 8a ; mover_sprite_41 (SPRITE_RED_HELICOPTER_BODY_WRECK) &90e7 00 11 00 bc 94 80 bc 00 08 10 00 94 7c 94 bc 00 &90f7 08 0a 00 94 40 54 69 83 bc 96 a8 00 0c 07 00 d4 &9107 bc a9 94 7c 83 a9 83 bc a9 94 00 0f bc 04 00 94 &9117 80 a8 96 83 bc 96 5e bc e8 bc 83 bc ad 94 00 14 &9127 bc 94 80 94 e9 bc 43 bc 54 05 00 bc 83 bc 8f a8 &9137 00 12 bc 80 a8 bc d6 bc ad bc b8 b0 07 38 b0 bc &9147 9e 00 11 80 a8 40 7c 83 bc 8f bc 05 30 a0 80 90 &9157 bc 68 00 11 94 40 bc a9 43 bc 9e bc b0 a0 b4 68 &9167 94 bc b4 a8 00 12 bc 94 a8 bc 83 bc a9 bc b0 a0 &9177 90 bc 00 0e bc 40 a8 bc 43 bc b0 74 a8 00 0b a8 &9187 94 40 a8 56 bc a8 00 89 ; mover_sprite_42 (SPRITE_ROTORS_WRECK) &918f 00 00 02 04 00 94 00 05 c0 94 bc 00 05 40 bc bf &919f bc 00 06 40 bc 96 a8 00 06 7d 9e a9 94 00 06 9e &91af a8 be 83 bc 00 07 40 a8 96 bc 00 06 40 bc 96 bc &91bf 00 06 40 a8 80 bc 00 06 00 02 00 82 ; mover_sprite_43 (SPRITE_HELICOPTER_BODY_WRECK) &91cb 00 12 00 bc 80 94 00 07 10 00 bc ac bc 94 bc 94 &91db 00 0a 40 94 05 00 d4 bc ac 54 ac 4c bc 8c bc a8 &91eb 00 10 c0 a8 d4 80 94 bc 8f bc 78 9c cc 7c 00 0e &91fb bc c0 bc 8c bc ad bc ad 9e b8 b4 bc b0 f8 bc 9c &920b bc 00 13 bc e8 bc 4c ac bc 9e bc b4 bc 05 30 bc &921b 9e bc 00 11 a8 94 c0 a8 bc 8c bc ad bc f0 74 b0 &922b bf bc a8 bc 00 12 94 04 00 7c ac bc 9e bc b4 70 &923b bc 80 bc b4 a8 00 11 bc 40 94 a8 80 a8 9c bc 9e &924b 7c b0 bc 94 00 0f bc 94 a8 05 00 bc 4c bc b0 b4 &925b a8 00 0d 80 bc 04 00 94 ac bc 8c 9c 68 00 0c a8 &926b 06 00 a8 bc 9c a8 00 89 ; mover_sprite_44 (SPRITE_HEAVY_GUN) &9273 00 7c 54 04 00 94 80 05 14 00 0a 7c 8c bc 40 94 &9283 ad 8f bc bd bf bc 7f 7d 05 14 00 11 80 bc bf bc &9293 54 bc 5e bc 7f bc be bd ff bc ff bd 94 00 13 80 &92a3 bc ae bc 43 bc 04 3f be bc 7f bc bd bc bf be bc &92b3 bf be a8 00 16 7c 9c ac 96 bc e8 fc 5c be bf 7c &92c3 ac 9c bc 7d 94 00 12 bc 5d bc ec 04 3d 7e bf bd &92d3 7c 7d 7e 68 00 0f bc 7e 7d bc 04 28 bc 7e 7d 7e &92e3 7c ac bc 00 0f a8 bc bf bc a8 c0 94 7d 7e bd bc &92f3 9d 4c bc 8c bc 00 12 80 bc ae bc 05 00 68 80 bc &9303 9c bc ae bf 9d bc 68 00 12 80 bc 8c bc 0a 00 bc &9313 9c 7e bc 00 0c 7c bf bc 0b 00 bc 9d bc 00 0a bc &9323 e8 0b 00 bc be 7c 00 89 ; mover_sprite_45 (SPRITE_GREEN_WHITE_HELICOPTER_BODY) &932b 00 0a 00 05 14 07 2c bc 00 09 80 94 08 00 bc cc &933b bc bd bc bf 9d 8c 9c a8 00 10 bc 07 00 54 bc 8c &934b 9d bf bc 7f bc 7e bc 00 0f bc a8 94 05 00 bc 8c &935b bc ff bc 7f bc bf ac bc 00 11 bc 40 a8 94 6c bd &936b bc be bc ff bc bf ae bc 4c bc 00 12 bc e8 bc bd &937b be ff bc bd be bf bc 5c bc 4c bc 00 11 a8 c0 bc &938b 7f bc bf ae bc 7f bc b8 f0 b8 9c bc 00 11 04 00 &939b bc 6e bc 4c bc be b8 f0 a0 90 b4 a8 00 10 bc 80 &93ab 94 68 be 8c bc 4c bc f0 a0 90 b4 a8 00 10 bc a8 &93bb c0 a8 be bc 9d 8c bc b0 a0 90 b4 a8 00 10 bc 05 &93cb 00 a8 bc ae bf bc b0 b4 a8 00 0d 80 a8 05 00 a8 &93db 5c bc a8 00 8a ; mover_sprite_46 (SPRITE_GREEN_WHITE_CRAFT_ONE) &93e0 00 08 00 54 07 3c 54 00 08 d4 40 94 7d bc ff bc &93f0 8c bc 8c ae bc bf bc 00 10 bc ae bc 94 bd bf 6e &9400 bc ff bc bf bc 4c bc be bc 94 00 13 bc 8c bc 7f &9410 9d 4c bc ae 7f bc bf bc bf 9c bc 4c bc 00 13 bc &9420 bf bc ff 9d 8c bc 8c ae bf bc be 78 70 b8 9c bc &9430 00 13 bc bf bc be 04 3f bc 9c 8c be b8 04 30 a0 &9440 b0 bc 00 12 e8 bc bd be 7f bc bf bc 04 30 a0 90 &9450 b4 a8 00 10 c0 bc 7e bc be bc bf bc 70 a0 90 b4 &9460 a8 00 0f 04 00 bc bf bc ae bc 8c bc b0 90 b4 a8 &9470 00 0f 04 00 68 bc 8c bc 8c bc b4 a8 00 0c 06 00 &9480 bc 8c bc 9c a8 00 09 06 00 bc 9c bc 00 87 ; mover_sprite_47 (SPRITE_GREEN_WHITE_CRAFT_TWO) &948e 00 bc ac bc 94 bc ec bd ac 94 07 3c d4 00 0e bc &949e 8c bc 94 bc 8c 9d ff bc bf bc 9d cc ae bc 7f bc &94ae 00 13 bc 9d bc 80 bc bd be ff bc 8c bc 7f 9d 4c &94be bc 8c bf bc 00 14 bc bf bc 80 bc 7f bd be bf bc &94ce 8c bc 8c ae bf 9c 78 9c 8c bc 00 16 e8 80 bc 8c &94de 7f bc ad bc bf bc 8c 9c b8 b0 a0 b0 b4 a8 00 14 &94ee 04 00 bc 4c ae bc 8f bc bd bc b8 70 a0 90 b4 a8 &94fe 00 12 04 00 bc dc bc 8f bc bf bc 70 a0 90 b4 a8 &950e 00 10 06 00 bc 8f bc 8f bc bf bc b0 a0 90 b4 a8 &951e 00 10 06 00 a8 7c 8f bc ae bc b0 90 b4 a8 00 0e &952e 07 00 a8 bc 8f bc 8c bc b0 b4 a8 00 0d 08 00 bc &953e 9e bc 8c bc b4 a8 00 0b 0a 00 bc 9c bc 00 87 ; mover_sprite_48 (SPRITE_FLYING_SCOOTER) &954d 00 80 94 bd 6c bc ac bc ac bc 94 00 0c 80 bc 7f &955d 9d bc 8c bc 8c ae bf bc 00 0d 80 a8 be 7f bc bf &956d bc 9d 8c ae bc 00 0d 40 94 bc be bc bf bc be 9c &957d bd bc 7d 54 00 0f 94 a9 83 96 97 7d 7c 7f bc bf &958d fe 7d 94 00 0f a8 56 a8 7e 04 3f be bc bd ff bd &959d be bc 7d 94 00 11 04 00 a8 9e bc 7e a8 80 a8 be &95ad bf bd bc bd 05 3f bc 00 13 04 00 94 80 bc 9d bc &95bd 40 a8 be ae be bc 7f bd bc bf be a8 00 15 c0 7c &95cd 94 bc ae bc 80 94 ac 9c a8 40 e8 80 a8 00 11 c0 &95dd 7c 80 bc 8c bc bd 9c a8 00 0b 04 00 bc 80 a8 7c &95ed bd be a8 00 0b 04 00 a8 c0 bc be a8 00 89 ; mover_sprite_49 (SPRITE_GREEN_WHITE_CRAFT_WITH_MISSILE) &95fb 00 0f 00 bc 04 2c bd bc 00 09 94 a8 0e 00 a8 9c &960b bf be a8 00 0b bc 94 06 00 94 6c bd bc 54 80 94 &961b bc bf bc 00 10 bc 80 a8 54 fd bc 4c ae bc 8f bc &962b bd bf bc bf bd 94 00 13 bc c0 a8 be 7f bc 9d 4c &963b bc 8f bc ae bf bc 7f bc 00 12 bc 04 14 bc 8c ae &964b bc 7f 9d bc 9e b8 9c 8c bc 6e bc 00 13 bc 04 00 &965b bc ad 9c bc bf 7e b8 f0 b8 bc 4c bc 00 11 05 00 &966b bc ad bc bd 7c 05 30 a0 b0 bc a8 00 0f 94 a8 80 &967b 94 a8 bc 8f bc ae bf bc f0 a0 90 b4 a8 00 12 bc &968b 94 a8 40 a8 9e bc 8c ae bc b0 a0 90 b4 a8 00 11 &969b bc 06 00 bc 4c bc bd b4 a8 00 0b a8 94 06 00 a8 &96ab 9c bc a8 00 8a ; mover_sprite_4a (SPRITE_TANK_BODY_WRECK) &96b0 00 09 00 94 bc ac 94 00 08 08 00 a8 9c bc 8c ac &96c0 54 40 54 80 d4 00 0e 0a 00 a8 9c 4c bc 94 ac 8c &96d0 bc ac bc 8c bc 00 10 09 00 54 ac 9c 8c 7c 4c bc &96e0 4c 6c 94 00 0e 54 ad 94 80 54 ac bc 8c bc 8c ac &96f0 8c 7c 8c 7c 9c ac 8c 9c a8 00 16 bc 8f bc 9e a8 &9700 bc 5c bc 9c bc 9c 4c 7c 9c ac 7c 4c ac 94 00 15 &9710 bc 6d bc ac cc bc 9c fc 8c 7c 4c bc 8c ac 5c bc &9720 00 12 80 68 9e 68 bc 8c bc 8c bc ac 4c bc a8 9c &9730 8c bc ac bc 94 80 a8 00 17 07 00 7c 8c bc 8c 5c &9740 bc 40 a8 bc 5c a8 00 0f 08 00 bc 8c 7c 40 a8 c0 &9750 bc 9c a8 00 0d 08 00 bc 9c bc 8c bc 05 00 bc 8c &9760 bc 00 0e 07 00 a8 40 bc 9c a8 04 00 94 bc a8 bc &9770 94 00 90 ; mover_sprite_4b (SPRITE_SHELL) &9773 00 bc ac bc 00 05 bc 9d bc 00 05 80 a8 00 84 ; data2 ; FFFF1000 FFFF1000 3575 # Loaded into bank 6 at &8000 - &b574 ; scenery_sprite_17 (SCENERY_HANGER) &8000 00 05 2d 6c 08 2d 04 2c 0a 2d 6c 08 2d 05 2c bc &8010 ac bc ad 07 2c ad bc 06 2d 05 2c bc 00 1d 6d 05 &8020 2c 07 3c fd bc fd bc 6c 6d 12 2c bc ac bc 09 2c &8030 bc 05 2d 06 2c bc 00 1a 8e 4c 8d cf ad bc 04 3e &8040 bc fe bc fe bc 4c 8e 4c 8d 9c 07 38 bd b8 bd b8 &8050 7d 9c 8c bc 8c bc 09 0c bc 8f 4e 08 0c bc 00 28 &8060 4d 05 0c 8e dc 8c dc 8c 5c 9e 4f 8d 4c cd 8c ac &8070 0c 34 be ad 8d bc ac bc 8c cd 05 0c bc 8e 08 0c &8080 8d 8f 7c 00 25 07 1e 0d 1c 06 1e 0f 1c de bc 9c &8090 bc 9c 04 1e 04 1c bc 08 1c de 7c 00 18 cc ce 8f &80a0 4d 05 0c 8e 4f 8d cc cf 4c 8e 4f 8e 8c 04 1c bc &80b0 8c bc 05 1c 4c cf 4c 8e 4f 8e 4c bc 8f 8e 04 0c &80c0 ce 4f bc a8 00 29 08 1c de 06 1c 9e 05 1c 9e 04 &80d0 1c 9e 5c bc de bc 9c bc 04 1c bc 04 1c 9e 04 0c &80e0 8e cc bc 8c bc ec dc 4c 8e bc 54 00 27 43 96 83 &80f0 96 83 2c 3c 5c 04 0c bc 8c bc 06 0c ac bc 8c bc &8100 8c bc 00 17 c3 a9 43 bc 06 29 29 3c 5c bc 8c bc &8110 8c 8d 04 0c 9c bc 8c bc 8c bc 00 18 06 29 bc 43 &8120 a9 96 a9 83 2c 3c 8d bc 5e 9c ec 4c 8d bc 9c bc &8130 00 16 43 a9 96 a9 83 bc 06 16 2c 3c cf ce 4c 8d &8140 4f bc 94 00 13 06 16 33 3c 4f 8e 06 0c 8e 8f bc &8150 a8 00 0e 39 3c 4f cc 9c de 4f bc 00 0a 39 3c 8e &8160 4f 8d 8c bc 4c bc 8c 8e bc 6c bc 00 10 39 3c 4c &8170 8e 4f bc 4c bc 4c bc 4c bc 00 0e 39 3c 05 0c bc &8180 4c bc 8c 8d bc 4c bc 00 0e 39 3c ac bc cc ec ad &8190 4f bc 4c bc 00 0d 39 3c 8c bc 05 0c 4e 4f bc e8 &81a0 00 0c 39 3c 8d bc 8c bc ec dc 8c bc 94 00 0d 39 &81b0 3c 8f bc 8d bc 8c bc ac 9c 8c bc 8c 7c 00 10 39 &81c0 3c 9e bc 8e bc 8c bc 9c ad 8f bc 8c 7c 00 10 39 &81d0 3c 8e 4c bc dc 6d ac 8c bc 00 0c 39 3c 8f 8d 05 &81e0 0c 8e 4c 8d bc 68 00 0d 39 3c 4f 8d 04 0c 4d 4f &81f0 bc 68 00 8c ; scenery_sprite_18 (SCENERY_CRANE) # Unused &81f4 00 bc ad bc 00 05 a8 bc ad bc 05 00 08 14 00 0a &8204 80 bc 8e bc 40 54 ac bc cc dc 8c ed d4 00 0f 80 &8214 bc 8c bc 80 7c 5c bc 8f 4c bc 70 04 38 70 b5 bc &8224 00 13 bc ad bc 6d 7c 4e bc 4e 8c bc 04 34 f0 b5 &8234 be a8 00 12 a8 bc ad bc a8 7c 5c bc 8c 9c bc ad &8244 bc 4f bc ad b4 be a8 00 15 80 bc 8f bc 80 7c 9c &8254 bc ad 7c 9e 8f 9e 6d 9e 8f 9e bc a8 bc a8 54 00 &8264 18 80 bc 8c bc 40 a8 80 68 bc 9e bc 6d 5e a8 bc &8274 68 80 bc a8 bc 80 a8 bc 54 00 1a bc ac 7c 08 00 &8284 04 28 80 04 28 bc 54 bc 94 a8 80 bc 80 7c 54 00 &8294 16 e8 15 00 e8 94 7c 80 bc 94 a8 bc a8 54 00 0f &82a4 0c 00 04 14 0e 00 e8 94 7c 80 bc a8 bc 54 00 10 &82b4 0a 00 68 bc d4 80 13 14 e8 d4 68 00 8d ; scenery_sprite_19 (SCENERY_GUN_ON_PILLBOX)/ &82c1 00 bc ec bc ac 04 3d ec 7c fd ec bc 54 0c 00 bc &82d1 ac 7c 00 13 bc 8c 9c bd be bd bc 8c ae 7f 9c ac &82e1 8c 9c ac be bf 7d 9d bc 8c bc 0c 00 bc 8c bc 00 &82f1 1d bc 7e bc be bc dc fe bc 5c bc 9c 04 3e bc be &8301 bc 0a 00 bc bd bc bf bc d4 00 1a bc 4c 9c 7e 9d &8311 04 1c bf fe 05 1c be bc bf fc 08 00 bc 8c bc ae &8321 bc be bf bc 00 1b bc 8c bf bc 8f bc bf bc 4f bc &8331 bf bc 43 56 c3 7c bf fc 08 00 bc bd bc 8c bc 8c &8341 7c 00 1d bc 7f fd bf bc 4f bc bf bc 07 16 7c bf &8351 7c bd bc 05 00 94 bc 7f bc 9d bc 8c bc 8c ac bc &8361 00 1f bc 8c ae bc ad bc bf 04 3d ae 4c ff 7e bf &8371 9d bc 8c 7c 9c bc 05 14 7c 7e bc be bc 9c fc ac &8381 7c 00 21 bc 5c bc 9e bc 04 3e 05 1c fe dc bc 9c &8391 fc 4c 6e 0a 3f bc 9d bc 8c bc 8c bc 00 1b bc 8c &83a1 bc 8c 9d bc 7f bc 7f bc 9d 8c bc 7f bc 7f 7c bf &83b1 7c bd bc 05 28 7c 7d bc 04 3d bc bd bf bc 8c bc &83c1 00 24 bc 9c bc 7e bc 7e bc 7e bc 7e bc 7e bc 7e &83d1 7c be 7c be bc 05 00 7c ae bf bc 04 3f bc 7f bc &83e1 be a8 00 22 bc 7f 6e 9c be 7f ae 04 0c bf 7e ff &83f1 ae bc 8c fc 06 00 a8 bc 4c bc ae 7f be 7d bc ac &8401 bc 00 1f bc 05 1c fe 7c 04 1c 7e 04 1c bc 9c fc &8411 08 00 a8 9c bc 5c be bc be 04 28 00 9a ; scenery_sprite_1a (SCENERY_WRECKED_HELICOPTER) &841e 00 bc a8 00 04 94 6c 54 00 05 bc 8c 9d bc b0 7d &842e 54 00 09 a8 9c ae 8c ac b4 b0 7a 7d 94 00 0c 94 &843e bc bf 5d bc b4 04 30 ba b8 bc 54 00 0e a8 80 bc &844e 6e bc 8c ac f4 7d be 4c ac 94 00 0f bd 94 80 bc &845e 8c bc 8c be bf bd be ae 9c 8c bd 7e bc 80 94 00 &846e 15 a8 d4 a8 bc bf be bd ac 9c ac 9c ff bd 9c ac &847e 8c bc 00 13 68 94 40 bc bd bc ae ac 9c ac bf bd &848e be bf 8c 9c bc 69 94 00 15 ac bc 80 a8 94 a8 be &849e bf bd bc 8c bf 7e bc a9 bc 83 a9 d6 a8 00 16 9c &84ae bc c0 a8 94 a8 7e 68 c0 a8 96 bc 68 00 0f 07 00 &84be a8 54 00 86 ; scenery_sprite_1b (SCENERY_CAMOUFLAGED_BASE) &84c2 00 83 00 03 43 94 00 04 83 bc 8c ac 94 00 07 a9 &84d2 5c a9 43 81 00 07 05 03 56 6c 94 00 07 43 56 ac &84e2 05 0c ac 94 00 09 96 ac 4c 9c 06 0c 9c 6c 94 00 &84f2 0b bc 4c 9c ac 05 0c ac cc 9c 6c 94 00 0d a9 9c &8502 0a 0c 9c 05 0c bc 00 0a 83 96 6c 5c 05 0c bc 07 &8512 0c ac 94 00 0d bc 05 0c 6c 4c ac 9c 08 0c bc 00 &8522 0c bc 09 0c 9c 08 0c ac 8c ac 54 00 0c 83 bc 05 &8532 0c 9c 08 0c 9c 07 0c ac 54 00 0e 83 bc cc 9c ac &8542 07 0c 9c ac cc 9c 06 0c ac 94 16 00 bc bd bc 00 &8552 16 bc 04 0c ac 9c 07 0c bc 04 0c ac 9c ac 06 0c &8562 ac 94 13 00 7c 7d 7c 00 18 83 a9 9c 09 0c 9c ac &8572 8c ac 9c cc bc 04 0c ac 9c cc bc 04 3d bc 54 0b &8582 00 7c 7f bc 00 1d 43 a9 5c 05 0c 9c 05 0c ac 9c &8592 cc ac 9c 4c ac 8c ac 9c bd 05 3f bc 7f 7d 54 07 &85a2 00 7c bf be bc 94 00 22 05 03 bc 4c 9c ac 08 0c &85b2 9c 07 0c 9c ac 8c ac be 04 3f bc 7e 04 3f 7d 54 &85c2 c0 7c bf bc 8f bc 04 00 94 bc 04 3d bc 94 00 28 &85d2 a9 96 04 03 a9 bc 5c 06 0c 04 1c 05 0c ac 4c ac &85e2 4c ac 7e ac 4c 9c ec be ff bc 0d 3d bc 05 3f bc &85f2 be 6c 94 00 25 43 a9 56 a9 04 16 bc 9c 8c 9c 69 &8602 d6 83 e9 9c 4c 9c ac cc 9c 05 0c ac cc 9c 04 2c &8612 bc 68 7c bd bc b8 bc 6d bc a8 bc 04 3f be ac 04 &8622 0c bc 00 2f 43 96 04 03 96 ac 96 ac cc ec 56 04 &8632 2c 4c bc 06 0c bc 7d 5c bc 08 0c bc 94 7c 04 38 &8642 bc bd 7c 80 bc 7f be ac 9c bc bd 9c 8c ac 8c 6c &8652 94 00 2f 96 a9 43 56 ac cc ac 9c 06 0c bc 06 0c &8662 ac 9c 4c 5c bd ff bc bf bd 9c 4c 5c 4c 9c 04 3c &8672 04 34 bc be bc 40 bc be ac 9c bd bf bc 7f bc 05 &8682 0c bc 00 31 43 bc ac 08 0c ac 0e 0c bc 9c bd 05 &8692 3f bc ff 7d 7f 7d bc 40 7c 5e bc b0 bc 80 94 6c &86a2 4c ac fe bc be ac 06 0c 9c 6c 94 00 29 96 ac 16 &86b2 0c 9c 69 83 bc 06 3f bc 09 3f bc c0 7c 9e bc e8 &86c2 dc 09 0c 9c ac 08 0c bc 00 1d 9c ad bc 15 0c ac &86d2 96 43 bc 06 3f bc 09 3f bc 0d 00 bc bd bc 9c 10 &86e2 0c bc 00 1a 4f bc 6d bc 06 0c ac 9c 0c 0c ac 96 &86f2 bc 06 3f bc 09 3f bc 0d 00 bc 7f bc ac 9c 0c 0c &8702 9c ac 8c ac 94 09 00 bc bd bc a8 00 29 4f bc 4f &8712 bc 07 0c ac 9c ac 05 0c 9c 05 0c 9c bc 7e 04 3f &8722 bc 09 3f bc 05 00 d4 c0 94 bd 7e ac cc ac 9c 08 &8732 0c 9c ac 04 0c ac 94 07 00 94 bc bf bc 94 00 33 &8742 4f bc 8f ad 9c 8c 9c bc 6d bc a9 9c ac 05 0c bc &8752 05 0c bc 04 0c ac be 7f bc 05 3f be ec bc 04 3d &8762 bc cc bc 7d bf be ac 08 0c 9c 08 0c 9c 04 0c ac &8772 bc 04 3d bc 94 7c be 7c 00 3a 4f bc 4f bc ad 8f &8782 bc 4f bc 6d bc 9c 8c 5c ac 05 0c ac 05 0c 9c 04 &8792 2c 7e ec 05 0c ac be 6c 9c 04 0c 6c bc 08 0c 9c &87a2 ac 08 0c 9c cc ac 9c 8c 9c 05 2c 94 80 bc be bc &87b2 00 38 4f bc 4f bc 4f bc 4f bc 4f bc 83 a9 43 a9 &87c2 5c 69 04 0c 5c ac 04 0c ac 4c ac 9c cc 9c 0b 0c &87d2 9c ac 04 0c ac 9c 8c 9c ac 08 0c 9c ac 06 0c bc &87e2 04 0c 9c bc 80 54 bc 00 37 a9 9e bc 4f bc 4f bc &87f2 4f bc 4f bc 0e 38 9c cc 5c b8 9c 08 38 9c 08 0c &8802 bc 08 0c ac 9c 09 0c ac 9c 07 0c ac 8c bc bd bf &8812 bc 0c 14 0a 00 04 14 13 00 94 00 33 ad 8f bc 4f &8822 bc 8f ad 9e 4f bc 4f bc 20 38 bc 04 0c 9c 6c 9c &8832 06 0c 9c ac 8c ac 9c 07 0c 9c 69 9c 04 0c 9c 7d &8842 ff bc ac be 08 3f be bc ac 94 06 00 94 bd bc 7f &8852 bc bd 94 11 00 bc 00 3c 4f bc 4f bc 4f bc 4f bc &8862 8f 9e b8 1d 30 74 6c cc ac 04 0c bc 04 0c 9c ac &8872 04 0c ac 04 0c 9c a9 04 03 a9 9c 7d 04 3f be ac &8882 4c ac be 05 3f be ac 04 0c bc c0 94 bd 7f bc 7f &8892 bc 7f bc 94 05 00 0a 14 bc 54 00 44 4f bc 4f bc &88a2 8f 9e ad 4f bc 4f bc 1a 30 b4 6c cc 9c 09 0c ac &88b2 4c bc 0c 0c ac 96 04 03 bc be 05 2c 05 0c bc 04 &88c2 3f bd 04 1c 4c bc c0 bc ff bc bf be bc be ac 4c &88d2 bc 0a 00 bc c0 a8 00 3c 4f bc 4f bc 8f ad 9e 4f &88e2 bc 4f bc 1b 30 05 38 bc 0a 0c ac 0f 0c 9c a9 c3 &88f2 bc be 05 3d 9c cc 9c bd 08 3f bc bd 9c 05 3d 7e &8902 ec 06 0c bc 7d bc 13 28 00 32 4f bc 4f bc 4f bc &8912 4f bc 4f bc 20 34 bc 1b 0c ac d6 05 2c be 7f bd &8922 5c bd 09 3f bc 7f bc a8 bc 6c 06 0c bc 7d bc 9c &8932 bc 7d bc 07 28 00 ad ; scenery_sprite_1c (SCENERY_WHITE_GREEN_BUILDING_WITH_DOOR) &8939 00 0a 2c bc 7d bc 94 c0 94 bc ec bc c0 bc 08 2c &8949 08 3d 06 2c bc bd 54 7c bd bc 94 05 00 94 bc 0d &8959 3d bc bd 54 7c 6c bc 94 00 29 06 0c 5c 8c bd be &8969 bd bf bc bf ec 8c bc cc bc e8 bc 07 0c 08 3f 9d &8979 06 0c bc 7e fc bf bc bf bd 94 80 94 bd bf bc 0d &8989 3f bc 7e fc 4c bc 8c ac 94 00 31 04 0c 9c 8c bd &8999 be bd ff ae bc 05 0c bc cc bc c0 bc 06 0c 9d 0a &89a9 3f 05 0c bc 04 3e bc bf bc ff bc ff bc 0d 3f bc &89b9 04 3e bc 4c bc cc bc ac bc 00 30 cc bc be bd 07 &89c9 3f bc bf 5d 4c bc 9d 4c ac bc 94 bc ac 04 0c 7f &89d9 ae 0a 3f 9d 04 0c ac 7e 7c bd bf bc ff bc ff bc &89e9 0d 3f bd 7e 7c bd 9d 8c bc cc bc bf bc 00 34 04 &89f9 1c 07 3e 9c be bc 05 3e bc 07 3e 04 1c 7e dc 0b &8a09 3e 04 1c 06 3e bc ff bc ff bc 14 3e 9c bc 8c 9d &8a19 bf bc bf bc 00 27 4c 9d 07 3f 4c ae bc 05 3f bc &8a29 07 3f 4c 9d bf ae 8c 04 1c 04 3e 06 3f 9d 8c 9d &8a39 bf 04 3e 7f bc bd be bf bc bf be bd bc 14 3f 9d &8a49 bc ac be bf bc 68 00 32 8c 08 3f 04 0c bc ae 04 &8a59 3f bc 07 3f 5d bf cc bc 05 3e 7c 09 3f bc 7e fc &8a69 bf bc 7f bd bc bd 7f bc 06 3f 8c ae 05 3f be 7d &8a79 7c be 7f bc 8c bf bd bc 00 32 07 3f ae 05 0c bc &8a89 4c ff bc 0a 3f 9d 4c bc 05 3e 7c 09 3f bc 04 3e &8a99 bc bf bc ff bc ff bc 06 3f 4c ae 04 3f bc 04 3d &8aa9 bc 7f bc ff bc bd bc bd bc 00 31 05 3f 7e 9c 8c &8ab9 dc 8c bc 4c ae 7f bc bf fe bf fe ff 4c bc 05 3e &8ac9 7c 09 3f bc 7f fc bf bc ff bc ff bc 06 3f cc ae &8ad9 ff bc 7d fc 7f bc ff bc bf bc be bc 00 33 1f 29 &8ae9 bc 8c bc 05 3e 7c 09 3f bc 7e fc bf bc ff bc ff &8af9 bc 06 3f 04 0c ae 7f bc 7e fc bf ae bc ff bc bf &8b09 7c 00 25 1f 29 bc 9d dc 05 3e 09 3f bc 04 3e bc &8b19 bf bc ff bc ff bc 06 3f 05 0c ae bf bc 04 3e bc &8b29 4c bc ff bc be bc 00 25 1f 03 bc bf bc 05 3e 7c &8b39 09 3f bc 7f fc bf bc ff bc ff bc 06 3f 07 0c bc &8b49 7f fc 4c bc ff bc 00 a0 ; scenery_sprite_1d (SCENERY_RUINED_GUN_EMPLACEMENT) &8b51 00 1a 00 bc 6c 7c 00 07 1a 00 a8 9c 9d bc a8 00 &8b61 09 1a 00 bc 9d bf bc 00 08 1a 00 bc 7f bc 00 07 &8b71 6c 54 16 00 bc ae 8c bc 00 0a 04 0c 6c 94 13 00 &8b81 bc 8c ac 94 00 0c cc 5c a8 04 00 54 0d 00 94 bc &8b91 9c 8c bc 00 0f 05 0c ac 54 7d be bc 6c 54 08 00 &8ba1 bc 8c bc 8c 7d 94 08 00 94 00 16 04 0c 9d bc bd &8bb1 04 3f bc bf 9d 4c ac bc 06 00 bc 9d bc bf 7e a8 &8bc1 08 00 bc ac bc a8 00 1d 4c 9d 08 3f bc bf ae 4c &8bd1 9c a8 c0 54 80 bc bf bc bd bc 94 09 00 bc bf bc &8be1 00 1a 8c 0a 3f bc bf 04 0c bc c0 bc 8c ac bd be &8bf1 bc bf ae 8c bc 08 00 94 bd bc ac 94 00 1c 0b 3f &8c01 bc 05 0c bc d4 bc 9d 04 3f 7d 9c bc 06 00 54 bc &8c11 9c bc 9d bc 00 18 09 3f ae 9c ac 9c 5d 7f bc bf &8c21 8c 7c 09 3f bd bc 94 c0 7c 8c 9d bc be a8 00 1a &8c31 08 3f 8c 5d bc 05 3f bc 5d fc be 7f bd be bc be &8c41 bf ae bc 9c ac bc a8 7c 7d bc be bc 00 1e 06 3f &8c51 ae 9d ff bc 05 3f bc 7f 7c bd 04 3f be bd 6c 9c &8c61 bc 9c 8c bc 40 e8 bc 00 1b 05 3f 9d 05 3f bc 05 &8c71 3f bc 7f bd bc 7e ff ae 04 0c bc 9c bf bc 40 04 &8c81 28 00 1a 06 3f 7e bd 7f bc ff ae 8c bc bf bc a9 &8c91 bc 4f bc ad 7e 7f be bc a8 9c 8c bc 0a 00 a8 54 &8ca1 80 bc 54 a8 00 23 6c 7e bf be 7d ff bc ae 04 0c &8cb1 bc a8 bc 83 bc 69 bc 8f bc 83 bc bd bc 40 a8 9c &8cc1 bc 0b 00 05 3c 00 21 4c 5d 7c 05 3f bc 9d 9c 8c &8cd1 5c a8 80 68 80 7c a8 9e bc 83 bc bf 7d bc 0e 00 &8ce1 7c ac 8c bc 00 1f 9d 7f be bc 7e bc 7d be bc 7f &8cf1 7d 94 04 00 bc 8f bc 40 bc 83 bc bf be a8 0f 00 &8d01 7c bf bc a8 00 20 7f be bc bd bf bd ff 9d 8c 6c &8d11 7e bf bc c0 e8 40 94 a9 bc a8 11 00 7c ac 54 00 &8d21 1b 06 3f bd 04 3f cc bc 8c 6c 54 06 00 bc 96 bc &8d31 12 00 94 bc 4c bc 00 17 ff ae 8c 05 3f 04 0c bc &8d41 5d ff 7d 54 17 00 7c 4c bc 00 13 bf ae 4c 05 3f &8d51 04 0c 9d bc ff be 7f bc be bf bd bc 54 13 00 7c &8d61 5c bc 00 19 cc 05 3f ae 4c 9d 7f bc bf be bf be &8d71 7c ff be bd ae 8c 6c 05 14 04 00 05 14 c0 7c 7e &8d81 bc 04 00 54 40 04 14 00 25 4c 05 3f ae 8c 9d 04 &8d91 3f bc 7f bc fd be ff be 04 0c bc 9d bf 7d 94 80 &8da1 54 7d 9d 4c ac 94 80 7c 7e bc 40 94 bd 7f 7d cc &8db1 bc ac 94 00 2c 8c 06 3f 8c 9d 05 3f bc bf bd 08 &8dc1 3f ae cc 9d bc 05 3d 7c 05 3d 6c bc 80 7c be 9c &8dd1 bc 80 bc 05 3d 04 2c bc ac 9c a8 00 28 06 3f 9d &8de1 07 3f bc 09 3f ae 4c ff bc ff bd be bd 07 3f 9d &8df1 bc 80 7c 5c bc 94 bc 04 3f ae cc 9d bc 8c bc 54 &8e01 bd 94 00 a7 ; scenery_sprite_1e (SCENERY_RUINED_GUN_EMPLACEMENT_MIDDLE) &8e05 00 11 3d 07 2c 04 3d be bf bc ff 6e 8c 9d bf be &8e15 ff ae 8c ec 05 3f ae 4c 7f be ff be bd ff ae 9c &8e25 a8 09 00 54 7c 7d 04 2c bc ac bd bc 00 2d 7d bc &8e35 bd 7c bd 7c 7d 7c bd bc bd ac bc 6c bc 6c bc 7d &8e45 bc 7f 7c 04 2c fd 7c 7d 04 2c bc bd 7c bd ac bc &8e55 ac 09 3d bc be 4c ac bc 54 bc c0 bc 94 80 94 40 &8e65 08 28 bc 7e bc 00 39 7f bc 7f bc bf bd 7c bd bc &8e75 7f bc ae 8c bc 4c bc 9d bf bc 7f bc bf be fd 9c &8e85 4c bf be 04 3f ae 4c 9d bc 7f fc 4c bc 08 3f ae &8e95 bc 8c ac 9c ac 9d 7d bc c0 bc ae 7c 0a 00 94 7c &8ea5 94 00 3c 7f bc 7f bc 7f bc 8c bf bc 7f bc 4c bc &8eb5 9d bf bc 7f bc bf be bd 05 3f bc 9d bf 7c bd bf &8ec5 ae 5d ff bc 7f fc 8c be bd 07 3f ae 8c bc 4c 9d &8ed5 bd be 7f bc 7d 94 bc 6c 7d bc 94 04 00 94 7d 57 &8ee5 bc 97 7d 94 00 43 7f bc 7f bc ae 9c bc 7f bc bf &8ef5 ae 9c bd bf bc 7f bc 7f bc bd bf bc 7f be bf ac &8f05 be bf 7d 09 3f bc 7f fc 7f bc 04 3f ae 04 0c bc &8f15 9d 04 3f bd be bc 8c ae 9c ac 9d ff bc bd 94 bc &8f25 94 80 bc 04 03 bc c3 bc 00 44 7f bc 7f 7c 9d bc &8f35 7f bc 7f bc 7f bc 7f bc 7f bc 7f fc 7f 8c bc 04 &8f45 3f be ff bd 7e bd bc 7f fc 7f bc 7f ae cc 9d 7f &8f55 bc bf be bd 04 3f bc 4c 9d bd 7f be bf bc 8c ac &8f65 9d bc 80 94 a9 eb bc eb bc 00 41 7f bc bf 8c 7c &8f75 bf bc 7f bc 7f bc 7f bc be bf bc 7f bc bf be 7c &8f85 7f 4c bc 7f bd 7f bd be 04 3c bf bc 7f 04 3c be &8f95 bc ae 4c 5d 04 3f fc be 04 3f bc 8c 06 3f ac bc &8fa5 8c 7f bc 80 bc 04 17 bc d7 bc 00 41 7f bc 4c bc &8fb5 bf bd bc 7f bc 7f bc 7f bc 7f bc 7f bc be bd bc &8fc5 bf ae 8c 9c bc 06 3f be bc bd 7c 7d bc bf 04 3c &8fd5 bd bf bc 9d 05 3f bd be 7c 7d 7c 7f be bc 06 3f &8fe5 ae 8c bc bf be a8 40 bc 04 03 bc c3 bc 00 43 bf &8ff5 ae bc 8c 9d bc 7f bc 7f bc 7f bc 7f bc 7f bc 7f &9005 bc 7f bc 4c ac 5d bc 04 3f be bd 04 3f bd ae bc &9015 bd 04 3c 7f bc 05 3f be 7d bf bc 04 3f be bd bf &9025 bc 05 3e ac 5c bc a8 04 00 a8 7e 6b bc ab 7e a8 &9035 00 43 4c bc 9d bf bc 7f bc ff bc be bc 7f bc 7f &9045 bc be bd bc bf ae bc 5d 7f be bd 09 3f ae 8c ac &9055 bc 7f fc 7f bc ff be bd 04 3f bc 7f be bd ff bc &9065 c0 bc 8c 9d bc 0a 00 a8 7c a8 00 3a 5c bc 7e bc &9075 7e bc fe bc be bc 7e bc 7e bc 7e bc be 9c bc 7f &9085 be bc 0a 3e 5c fe bc be 7c 7e bc 0a 3e bc be bd &9095 05 3f bc c0 bc 7f bd 05 14 80 04 14 bc bd ac bc &90a5 00 36 9c 17 3e 9c fe bd bf bc 04 3f 6e 06 0c ae &90b5 bf fe 0f 3f bc 05 3f be a8 04 00 68 7e 05 1c bc &90c5 04 3e bc 5c bc 00 a5 ; scenery_sprite_1f (SCENERY_CAFE_RUINS) &90cc 00 30 00 bc 94 00 06 07 14 09 00 0e 14 80 05 14 &90dc 80 08 14 80 54 bc 83 bc 94 00 14 8f ad bc 83 bc &90ec 96 bc 54 07 00 bc 83 bc 96 ad 09 0f ad 8f 9e bc &90fc 83 bc 80 bc 83 bc a9 9e cf ad 9e ac bc 83 bc 83 &910c bc 94 00 29 cf ad bc 96 bc 83 bc 05 00 bc a9 bc &911c 83 bc a9 9e ad 0a 0f 7c 83 bc a9 bc 83 bc 96 ad &912c 8f 5e ac 9c ad bc 96 bc 83 bc 83 bc 94 00 2b cf &913c 7c 83 bc 96 bc 80 d4 80 bc 83 bc a9 bc 83 bc 0a &914c 0f ad 96 bc a9 bc 83 bc 96 ad 4f 9e ac bc ad 9e &915c 8f bc a9 bc 83 bc 96 bc 83 bc 94 00 2e 4f ad 96 &916c bc 96 bc d4 bc 83 bc 94 bc a9 bc 83 bc ad 0d 0f &917c ad 96 bc 6d 8f 5e ac 9c ad 04 0f bc 83 bc 83 bc &918c a9 bc 83 bc 96 bc 94 00 2c 04 0f ad 96 bc 83 bc &919c 83 bc 83 bc 83 bc 96 7c 8f ad 9e 0b 0f 9e ad 04 &91ac 0f 9e ac bc ad 9e 05 0f bc 83 bc 83 fc 83 bc a9 &91bc bc 83 bc 00 2c 07 0f 7c 83 bc 6d 96 bc 83 bc ad &91cc 0d 0f ad 04 0f 9e ac 9c ad 08 0f bc 83 bc 83 bc &91dc 83 bc 83 bc 96 bc 96 bc 05 14 00 27 05 0f 9e ad &91ec 4f ad 04 1e 7c 14 1e 8f ad 0a 0f bc 83 bc 96 bc &91fc 83 bc 96 bc ad 9e 4f 6d 9e 8f bc 69 bc 00 23 cf &920c 6d 04 0f bc 8f bc 8c 14 1c 4c bc 09 0f 9e bc 8f &921c bc 83 bc a9 bc 83 bc a9 bc 04 1e a8 de bc e8 00 &922c 22 08 0f ad 4f bc 8c bc 7f aa 80 aa ff 6a 06 3f &923c 6a bc 4c bc 08 0f bc 9c bc 9e bc 83 bc 83 bc 96 &924c bc 83 bc 83 bc 83 bc 00 28 0b 0f bc 8c bc 7f 6a &925c 40 aa 05 00 6a 55 7f bc 4c bc 08 0f bc 8c bc 8f &926c bc 83 bc 83 bc a9 bc 83 7c a8 bc 00 24 0b 0f bc &927c 9c bd ff aa bf 95 08 00 6a 7f bc 8c 9c ad 8f 5e &928c 4f 9e a9 5e bc a9 7c 83 bc 96 bc 83 bc 96 bc 96 &929c a8 bc 00 27 8f 9e 4f 6d 5e ad 4f bc 8c bc 7f 0f &92ac 00 95 bc 8c ac 9e a9 bc 83 bc a9 bc 83 bc 83 bc &92bc 83 7c 83 bc a9 bc 96 bc a9 bc 40 a8 00 2a 4f ad &92cc 9e ad cf ad 9e 8f bc 9c a8 aa c0 bc 0a 00 ea bc &92dc 8c 9c bc 83 bc 96 bc 96 fc 96 7c a8 bc 96 bc 83 &92ec bc 80 bc 96 bc c0 bc 00 2b bc 4f ad 9e 4f 5e a9 &92fc bc a9 bc 04 28 80 bc 0d 00 68 80 e8 80 bc bf 04 &930c 3e bf bc a8 bc a8 bc 83 bc 68 7c 06 28 00 26 bc &931c 9e 4f ad 9e bc a9 bc 83 bc a8 06 00 bc 13 00 bc &932c bf bc 7f be bd be a8 04 00 a8 bc 00 1e bc 83 bc &933c a9 bc 83 bc 83 bc 68 07 00 bc 12 00 94 bd 04 3e &934c 7f bc 06 00 bc 00 1a bc 87 bc 83 bc 96 bc 18 28 &935c bc 05 28 bc bf 7e bc be bd bc 07 28 bc 68 00 19 &936c cf ad bc 08 00 bc 11 00 bc 04 00 bc bf 04 3e bf &937c 7c 54 00 14 04 0f bc a9 bc a9 bc 04 28 bc 68 0f &938c 00 a8 c0 94 bd 7f bd bf bc be a8 bc 00 1a 4f 9e &939c 8f bc a9 bc 83 bc a9 bc 40 bc 15 00 bc bf 04 3e &93ac bf bc 80 a8 00 18 4f bc ac bc 83 bc a9 bc a9 bc &93bc 54 bc 94 13 00 bc bf bc bf bd be bd bc 00 19 8f &93cc ad bc 8c bc a9 bc 96 bc 83 bc 40 bc 14 00 bc 06 &93dc 3e bc 00 15 cf 6d 96 bc 83 bc 68 00 09 cf 9e bc &93ec 83 bc 96 bc 00 09 5e bc 83 bc 96 bc 83 bc 00 0a &93fc 8f bc 68 bc 83 bc 96 bc 00 0a 9e bc 40 bc 96 bc &940c 00 08 bc 00 83 ; scenery_sprite_20 (SCENERY_GREEN_TOWER_ONE) &9411 00 27 00 bc ed 04 14 05 00 bc ad 54 1e 00 d4 00 &9421 10 26 00 94 bc 4f 7c 4f bc 05 00 bc 4f bc c0 54 &9431 16 00 94 bc ad bc 4f ed d4 00 1a 25 00 94 7c 06 &9441 0f bc 05 00 bc 4f bc c0 bc 8f ad bc 40 54 0d 00 &9451 54 fc 8f bc 4e 6c 04 0f ed d4 00 21 20 00 d4 05 &9461 3c 4f 7c 4f bc d4 fc 4f bc 54 7c 4f bc 94 7c 8f &9471 ad bc 06 00 d4 07 3c 9c bc 04 2c 04 1c ce cf ad &9481 7c 05 14 00 29 13 00 08 14 05 2d 04 0f ad fc 8e &9491 8c 6c 8e 8f bc 4f ad fc 8f 8e bc ad fc 8f 8e bc &94a1 ad 7c 8f 8e bc 04 2d bc ad 04 0f ad 05 3c 8c bc &94b1 4c 7c 04 0c ec 5c 8e 8f ad 05 3c 8f 6d 94 00 3b &94c1 0a 14 09 2d 0e 0f 04 1e fc 4c 5c 4c bc 4c 9c 8c &94d1 7c 4c bc 4c 7c 4c bc 8c 7c 4c bc 8e 5e 8e bc 8f &94e1 4e 5c 4c 04 3c 8c bc 06 1c 09 0c 8e 05 3c 04 0f &94f1 ad 94 00 34 0f 0f 0d 1e 05 2c 8c 9c 4c fc 4c 7c &9501 4c bc 4c bc 8c 7c 4c bc 4c 7c 4c bc 8c 7c 4c bc &9511 8c 7c 8c bc cc 7c cc fc ac bc 4c 5c 4c 04 2c dc &9521 cc ac 04 3c 4c 8e 4f ad 94 00 37 0f 2c 13 0c ac &9531 4c fc 06 0c bc 04 0c 7c 4c bc 4c 7c 4c bc 8c 7c &9541 4c bc 04 0c bc 08 0c fc 8c bc 4c 6c 0d 0c 04 3c &9551 04 0c 8e 8f bc 00 2c 0d 0c 12 1c 06 2c fc 4c 7c &9561 4c bc 4c bc 8c 7c 4c bc 4c 7c 4c bc 8c 7c 4c bc &9571 8c 7c 8c bc cc 7c cc fc ac bc 07 2c 06 1c 04 0c &9581 04 3c 05 0c 8e ac 94 00 32 0d 2c 15 0c ac 4c fc &9591 4c 6c 4c bc 4c ac 8c 7c 4c bc 4c 7c 4c bc 8c 7c &95a1 4c bc 8c 6c 8c bc cc 6c cc fc 8c bc 4c 6c 0d 0c &95b1 04 3c 07 0c bc 00 ae ; scenery_sprite_21 (SCENERY_RED_TOWER) &95b8 00 14 00 bc b9 54 25 00 94 bc 05 39 bc 94 00 0f &95c8 14 00 bc 73 bc 40 bc b9 54 1d 00 94 fc 05 33 bc &95d8 b3 b9 94 00 15 14 14 bc 73 7c 94 bc 73 bc 40 bc &95e8 b9 54 15 00 94 79 fc 73 76 a3 bc f3 b9 94 00 1b &95f8 10 33 b9 04 3c 73 04 3c 73 7c 94 bc 73 bc 14 00 &9608 bc 73 a3 a9 7c a3 83 7c 83 bc 83 a3 f3 b9 94 00 &9618 21 b3 63 56 08 03 56 83 63 fc a3 83 bc b3 7c 73 &9628 04 3c 73 bc 94 12 00 94 bc b3 c3 7c 05 03 bc c3 &9638 a3 f3 b9 94 00 25 c3 7c 04 03 69 43 7c c3 fc 43 &9648 bc 83 7c a3 83 bc 83 7c b3 a3 bc b3 79 d4 08 00 &9658 d4 04 3c a3 69 83 7c 43 56 83 bc 05 03 a3 f3 b9 &9668 94 00 2d 07 16 0c 03 7c 43 bc 83 7c 43 bc 83 7c &9678 43 bc 06 33 08 39 73 b9 04 3c 04 03 7c 43 7c 83 &9688 bc 07 03 a3 f3 b9 94 00 26 07 3c 43 56 43 7c 04 &9698 03 7c 43 bc 83 7c 43 bc 83 7c 43 bc a3 43 e3 08 &96a8 33 a3 b6 a3 83 fc 04 03 7c 05 03 bc 09 03 a3 73 &96b8 b9 94 00 2b c3 56 08 03 69 04 03 7c 43 bc 83 7c &96c8 43 bc 83 7c 43 bc 0f 03 bc 43 a9 7c 83 69 83 7c &96d8 43 56 83 bc 0b 03 a3 b3 b9 94 00 28 c3 7c 08 03 &96e8 56 04 03 7c 43 bc 83 7c 43 bc 83 7c 43 bc 13 03 &96f8 7c 04 03 7c 43 7c 83 bc 0c 03 a3 b3 b9 94 00 24 &9708 09 03 69 43 7c 04 03 7c 43 bc 83 7c 43 bc 83 7c &9718 43 bc 0f 03 bc c3 7c 04 03 7c 05 03 bc 0d 03 a3 &9728 b3 bc 00 24 13 03 7c 43 bc 83 7c 43 bc 83 7c 43 &9738 bc 0f 03 a9 c3 7c 83 69 83 7c 05 03 bc 10 03 bc &9748 00 9e ; scenery_sprite_22 (SCENERY_RED_TOWER_BRIDGE) &974a 00 c3 7c 08 03 7c 04 03 7c 43 bc b3 7c b3 93 bc &975a b6 7c 73 bc 0f 36 bc 09 03 7c 05 03 bc c3 bc 0c &976a 03 bc 00 23 c3 69 08 03 69 c3 96 7c 43 04 3c 73 &977a 7c a8 bc b6 68 0f 00 bc 93 09 03 a9 05 03 bc c3 &978a bc 0b 29 bc a9 94 00 24 b3 53 0a 03 05 13 fc 93 &979a 83 bc 68 bc b3 b6 bc 15 00 bc b3 d3 56 c3 56 c3 &97aa 56 04 03 bc 04 03 bc 43 7c 43 bc 43 b9 94 00 28 &97ba 11 33 04 3c 73 bc 40 68 17 00 bc 06 36 04 33 d3 &97ca 07 03 bc 04 13 b9 53 79 53 bc 93 b3 b6 a8 00 20 &97da 14 28 bc 73 bc 22 00 04 28 f6 73 93 04 03 bc 0b &97ea 36 bc b6 a8 00 16 14 00 bc b6 68 29 00 68 b6 b3 &97fa 93 43 a9 06 03 bc 00 12 3f 00 05 00 bc b3 43 56 &980a 83 7c 43 bc 00 0e 3f 00 06 00 bc 05 03 69 43 bc &981a 00 0c 3f 00 06 00 bc 09 03 bc 00 0a 3f 00 06 00 &982a bc 43 56 83 7c 43 bc 00 0d 3f 00 06 00 bc 05 03 &983a 69 43 bc 00 0c 3f 00 06 00 bc 09 03 bc 00 8a ; scenery_sprite_23 (SCENERY_SLIM_RED_TOWER) &9849 00 79 54 09 00 54 04 00 54 0e 00 bc b9 bc 94 0a &9859 00 94 06 00 54 bc b9 04 14 c0 bc 10 39 bc d4 00 &9869 20 04 33 f9 d4 c0 bc 83 a9 bc 40 bc 83 a9 bc 0c &9879 14 bc 73 bc 54 40 bc b9 bc 94 40 bc b9 bc 54 b9 &9889 04 3c b3 bc f3 79 94 bc 07 33 b6 73 63 76 a3 b3 &9899 bc f3 79 94 00 35 43 e3 b6 f3 b9 04 3c 43 04 3c &98a9 43 bc 83 07 33 b9 04 3c 73 bc b3 04 3c 73 bc b9 &98b9 7c b3 bc 04 33 fc 83 bc b3 a3 bc f3 bc a3 43 a3 &98c9 73 a3 a9 04 03 7c 43 bc b3 63 f3 b9 94 00 39 05 &98d9 03 a9 43 e3 fc 43 bc a9 7c 43 bc c3 7c 04 03 a9 &98e9 fc a3 b3 bc b3 a3 fc 73 bc a3 7c 83 bc a3 c3 a9 &98f9 7c 83 bc 43 a9 83 a3 b3 bc 07 03 96 0d 03 a3 73 &9909 b9 94 00 35 05 03 96 05 03 a9 7c 43 bc 83 7c 43 &9919 bc c3 69 05 03 fc 43 bc 43 a9 7c 83 a3 bc 83 7c &9929 83 bc 05 03 7c 83 bc 43 96 c3 bc 07 03 a9 04 03 &9939 7c 09 03 a3 b3 b9 94 00 35 05 03 a9 06 03 7c 43 &9949 bc 83 7c 43 bc c3 56 06 03 7c 43 bc 83 96 83 7c &9959 43 bc 83 7c 83 bc 05 03 7c 83 bc 43 a9 c3 bc 07 &9969 03 96 04 03 69 0a 03 a3 b3 bc 00 33 05 03 96 06 &9979 03 7c 43 bc 83 7c 43 bc c3 69 06 03 7c 43 bc 83 &9989 a9 83 7c 43 bc 83 7c 83 bc 05 03 7c 83 bc 43 96 &9999 c3 bc 07 03 a9 04 03 56 0a 03 93 b3 bc 00 33 05 &99a9 03 a9 05 03 96 7c 43 bc 83 7c 43 bc c3 56 05 03 &99b9 fc 43 bc 43 96 7c 83 93 bc 83 7c 83 bc 05 03 7c &99c9 83 bc 43 a9 c3 bc 07 03 96 04 03 7c 09 03 93 b3 &99d9 b6 a8 00 35 05 03 96 43 53 96 fc 43 bc 96 7c 43 &99e9 bc c3 7c 04 03 96 fc 93 b3 bc b3 93 fc 73 bc 93 &99f9 7c 83 bc 93 c3 96 7c 83 bc 43 96 83 93 b3 bc 07 &9a09 03 a9 08 03 96 04 03 93 73 b6 a8 00 39 43 d3 b9 &9a19 f3 b6 04 3c 43 04 3c 43 bc 83 07 33 b6 04 3c 73 &9a29 bc b3 04 3c 73 bc b6 7c b3 bc 04 33 fc 83 bc b3 &9a39 93 bc f3 bc 93 43 93 73 93 96 04 03 7c 43 bc b3 &9a49 53 f3 b6 a8 00 39 04 33 f6 e8 c0 bc 83 96 bc 40 &9a59 bc 83 96 bc 0c 28 bc 73 bc 68 40 bc b6 bc a8 40 &9a69 bc b6 bc 68 b6 04 3c b3 bc f3 76 a8 bc 07 33 b9 &9a79 73 53 79 93 b3 bc f3 76 a8 00 35 76 68 09 00 68 &9a89 04 00 68 0e 00 bc b6 bc a8 0a 00 a8 06 00 68 bc &9a99 b6 04 28 c0 bc 10 36 bc e8 00 a0 ; scenery_sprite_24 (SCENERY_JEEP) &9aa4 00 40 05 14 40 fc 94 00 08 94 7c 6c ad 7c 94 80 &9ab4 bc 9e ec 94 00 0d 7c 9e cd 9e 7c ad bc 8c bc ac &9ac4 bc 00 0d 80 a8 05 3c a8 94 ad bc 8d bc 8c ac 94 &9ad4 00 0f 05 00 54 ac bc 9c bc ad bc ed bc 54 00 0e &9ae4 04 00 bc 8f bc 9e bc 8c bc 8c bc 8e 4f bc 60 68 &9af4 54 00 13 04 00 bc 8c bc 8e bc 8f bc 8d bc 8c bc &9b04 8e bc 04 00 bc 83 bc 00 16 04 00 bc 8f bc 9c bc &9b14 9c bc 9c bc dc bc 04 00 bc 83 bc 00 14 04 00 a8 &9b24 9e bc 8d bc 8c bc 8f bc 8d 4c bc 54 69 43 bc 00 &9b34 14 40 05 14 a8 bc 8c bc 8c bc 8e 4f bc 06 03 bc &9b44 00 11 94 7c ec 7c 94 ad bc 8c bc 4c 8e bc 06 03 &9b54 bc 00 11 7c 9c cc 9c 7c a8 bc 8d bc 04 0c ac d6 &9b64 68 00 10 80 a8 05 3c a8 80 94 ad 8f bc 9e 6d bc &9b74 68 00 10 08 00 68 7c 05 28 00 88 ; scenery_sprite_25 (SCENERY_STATUE) &9b7f 00 8c bc 04 14 40 07 14 ad bc 94 33 00 94 bc 6d &9b8f 7c 04 2d 54 00 15 ac bc cf ad 94 a9 96 a9 9e 8f &9b9f ad 7c 8f bc 8f ad 94 09 00 94 16 00 54 0e 00 a8 &9baf bc 5e bc ad 8f ad 4f 9e 4f bc 00 26 8c 6c 9e cf &9bbf ad 56 ad cf bc 8f 7c 9e 8f ad d4 6d 94 6d 8f bc &9bcf d4 04 2d 54 08 2d d4 bc 9e 8f 04 2d 94 0b 00 54 &9bdf bc 05 2d 5e 4f bc 00 2c ac 9c bc ad 04 0f ad 8f &9bef ad 9e 8f 7c 8f bc ad 8f 9e ad 8f 9e 8f 9e ad 4f &9bff 9e bc cf ad 04 0f ad 0e 0f 6d 5e bc 8f 7c c0 d4 &9c0f 6d 7c 09 0f ad 8f bc 94 00 32 9c bc 9e 04 0f ad &9c1f 9e 4f 9e 8f 7c 8f bc 04 1e a8 5e a8 5e ad 8f ad &9c2f 04 1e a8 06 1e 10 0f 9e 7c 04 2d 05 0f 7c 0c 0f &9c3f 7c 94 c0 09 14 bc ad 54 00 30 9c 4c bc cf ad 8f &9c4f ad bc 8f ad 7c 8f bc 0a 00 e8 0b 00 e8 05 1e 4f &9c5f de ad 8f 9e 7c ed 9e 04 2d 9e 8f ad bc 0d 0f 6d &9c6f bc 6d 4f ad 4f 9e bc 4f 7c 4f ad 94 00 34 8c bc &9c7f ad cf 9e cf 9e ad 9e 7c 8f bc 1f 00 a8 04 3c cf &9c8f bc 8f bc 8f 9e 8f bc 04 0f bc cf ad 9e 06 0f 9e &9c9f ad 04 0f bc 8f 9e 8f bc 4f 9e 8f 6d 8f 7c 8f 9e &9caf bc 8f bc 00 37 9c 8c ac 5e ad 07 0f 7c 8f bc d4 &9cbf 80 05 14 6d bc d4 06 00 06 14 08 2d bc 9e 4f ad &9ccf 7c cf bc cf 9e bc 8f 9e bc 09 0f ad 04 0f ad 9e &9cdf 4f ad 04 0f 7c 9e bc ad 4f ad 9e bc 00 39 8c 6c &9cef 9c ad 06 0f bc 4f bc 8f 7c ad 8f ad 4f ad bc 8f &9cff 9e ad bc cf 06 2d 10 0f ad 4f fc 6d 4f ed 4f 7c &9d0f 0d 0f 7c e8 5e bc de 7c cf 9e bc a8 00 30 bc 9c &9d1f ad 05 0f ad 9e ad 8f ad 8f bc 8f bc 9e 05 2d 5e &9d2f bc 5e ad bc cf bc 04 0f 9e 0f 0f 04 1e bc 05 28 &9d3f 04 1e 8f 7c 9e 0b 0f bc a8 0c 00 e8 00 30 5c ad &9d4f 8f ad 9e ad cf ad 5e 7c 8f bc 8f ad bc e8 05 1e &9d5f 05 2d 94 04 3c 68 06 1e 08 28 0e 00 e8 7c 05 1e &9d6f ad 4f 9e a8 00 28 8c bc 0d 28 9e bc 68 09 00 05 &9d7f 28 05 1e 05 2d 05 14 15 00 94 ed 07 0f 9e a8 00 &9d8f 1b 26 00 05 28 05 1e 05 2d 05 14 09 00 94 bc ad &9d9f 07 0f 9e 68 00 15 30 00 05 28 05 1e 05 2d 94 ad &9daf bc ad bc ad de 8f 5e 68 00 14 3a 00 04 28 bc 8f &9dbf ad 9e ad 8f 9e ad 8f bc 6d 05 14 00 13 3f 00 a8 &9dcf 5e 8f ad 8f 9e ad 8f bc a8 05 1e 05 2d 05 14 00 &9ddf 14 3f 00 c0 07 28 06 00 05 28 05 1e 05 2d 06 14 &9def 00 11 3f 00 0e 00 d4 04 39 63 f6 05 39 06 1e 05 &9dff 2d 08 14 00 13 3f 00 07 00 d4 04 39 e3 83 56 bc &9e0f 79 a9 a3 43 93 76 b9 a9 73 76 96 05 39 05 1e ad &9e1f af bf bc 00 20 3f 00 40 d4 79 04 23 83 56 83 04 &9e2f 39 63 96 b9 43 a3 69 a3 83 93 b6 a9 b9 b3 04 23 &9e3f c3 96 f6 04 28 00 22 36 00 68 bc e9 04 3c b9 a3 &9e4f 06 03 53 b3 63 06 03 b9 b3 93 c3 53 04 36 07 16 &9e5f 04 28 00 1d 39 00 68 0d 36 56 11 28 00 8a ; scenery_sprite_26 (SCENERY_BIG_TANK_ONE) &9e6d 00 14 00 7c 6d bc 94 00 08 14 00 7c 4f bc a8 00 &9e7d 08 14 00 7c 8f 8c bc 00 08 14 00 7c 8e 8c bc 00 &9e8d 08 14 00 7c 4c bc 00 07 14 00 7c 8f 8d bc 00 08 &9e9d 14 00 7c 8f 8c bc 00 08 06 00 05 14 80 a8 54 05 &9ead 00 bc bd 5d bc 00 0f 04 00 94 a8 94 ec 94 a8 94 &9ebd ac bc ad 94 c0 bc bd 5d bc 00 14 40 94 a8 40 bc &9ecd 8c ac 8c bc a9 bc 8c bc 8f bc ad 94 80 bc bd 5d &9edd bc 09 00 54 00 1b 94 a8 80 04 14 a8 bc ec bc a9 &9eed bc 8c bc 4c ac bc 6c ad ac 94 08 00 bc ac bc a8 &9efd 00 1c bc 94 ac 04 0c ac 9c cc bc ac bc 8d bc cc &9f0d 8d ad 9e 8f 8d 8f bc 07 00 bc 8c bc 00 1c 7c 4c &9f1d 6c 4c bc 9c 4c bc 8c bc 8f bc 9e cf 4e ac 9e 8f &9f2d bc 05 00 54 bc 8c bc ac 94 00 1d bc 80 a8 04 1c &9f3d ac 96 83 a9 9c bc 9c bc 8f bc 8f 6c 5c 8c 8d 8f &9f4d ac bc 05 00 bc 8c 7c 4c bc 00 20 bc 40 d4 bc 8c &9f5d 9c a9 83 96 bc 96 bc 8e bc 4c 4d 8f 6d 5c 6c 94 &9f6d 80 94 a8 bc 8c 7c 4c bc 00 1f bc 94 ac 04 0c ac &9f7d 56 ac 8c bc 8c bc 8c bc 8d cf ce 8c bc 6c 7c 40 &9f8d 68 7c 9c bc 00 1c 7c 4c 6c 4c bc 9c 4c bc 9c ad &9f9d 8f bc 8f 8e 06 0c bc 8d 8c bc 9c bc c0 d4 bc 00 &9fad 1b bc 80 a8 04 1c ac 96 83 a9 9c ad 4f 8e bc 4c &9fbd 4d cc 8d bc 8f 8c bc 9c bc 00 1a bc 40 d4 bc 8c &9fcd 9c bc ad 4e 8c 4d bc 4f 8e 04 0c 8f bc 8f 8e bc &9fdd 9c bc 00 19 bc 94 ac 04 0c ac 9e bc 04 0c 8e 8f &9fed bc 08 0c bc 4c bc 9c a8 00 16 7c 4c 6c 4c 7c 4c &9ffd 4d 4c bc cc 8d cf 9c 04 28 00 11 bc 80 a8 04 1c &a00d a8 80 bc 4c 8e 4f 8d bc cc 8e 8c 9e a8 00 14 80 &a01d a8 94 c0 94 6c bc 04 0c 8e 8f bc 8f 8d 8c 9c bc &a02d 17 14 80 54 00 17 c0 a8 94 80 bc 8c ac 8c bc 9c &a03d cc 8e bc 8f 9e ad 8f bc 10 00 bc 05 03 bc 00 1a &a04d 05 00 a8 94 fc 94 68 dc 7c de bc 11 00 bc c3 bc &a05d 00 12 11 00 04 28 13 00 bc 83 bc 00 0b 29 00 bc &a06d 00 85 ; scenery_sprite_27 (SCENERY_MOUNT_RUSHMORE) &a06f 00 0e 00 04 14 00 06 54 08 00 54 6d 04 0f 6d 94 &a07f 00 0b 8f 6d bc 54 40 94 ad 4f 9e ed 9e 04 0f ad &a08f 94 00 11 06 0f ad bc ad 0e 0f ad 54 1e 00 d4 10 &a09f 00 05 14 00 12 ac 5e 8f 9e ad 8f bc 12 0f 6d 54 &a0af 09 00 94 ed 94 0b 00 bc a8 9e 8f ed d4 09 00 a8 &a0bf dc 4c ec d4 00 21 cc bc cf bc 16 0f 6d 54 6d bc &a0cf 94 bc ad 04 0f ed 94 bc ed 04 14 ad 08 0f ad 94 &a0df 0b 00 a8 9c cc bc 4c bc 94 00 25 4c bc 05 0f ad &a0ef 9e 16 0f bc 4f bc 4f ad de bc 06 0f 9e 05 0f ad &a0ff 9e 8f 9e 08 0f ad 94 40 04 14 6d bc ac 8c ac 06 &a10f 0c bc 00 29 8c bc 8f ad 9e cf 9e 8f ad 5e 14 0f &a11f bc 4f bc cf 9e ad cf 5e 6d bc 9e 05 0f 9e ad 08 &a12f 0f ad 9e bc 6d 07 0f bc 07 0c bc 00 29 ad cf ad &a13f 5e ad 05 0f 6d 9e 13 0f 9e ad 4f ad 04 0f bc 8f &a14f bc ad 8f bc ad bc 9e 4f bc 0d 0f bc 4f 9e 04 0f &a15f ad 9c 05 0c 9c bc c0 bc ad 54 00 2f 04 0f 9e ac &a16f 8c bc 08 0f ad 9e 1a 0f ad 9e 8f bc ad 4f bc ad &a17f 9e ad 8f bc 0b 0f bc 04 0f bc ad 9e 4f bc ac 4c &a18f 9c ac 4c bc 54 bc 4f bc 54 00 2f 04 0f bc 8c bc &a19f 0b 0f 6d 9e 0c 0f bc ad 5e 05 0f 9e ad 9e cf 9e &a1af cf bc 05 0f ad 07 0f bc ad bc cf ad cf 6d 9c 07 &a1bf 0c 04 3c 8e 8f bc 8f ad bc 00 30 05 0f bc 0f 0f &a1cf 6d 9e 08 0f bc 04 0f 05 2d 4f 04 2d 8f 05 2d 5e &a1df 0c 0f 9e bc 09 0f ad 9c ac cc ac bc 8c 7c 4c bc &a1ef 8c 8e bc 00 2a 06 0f ad 9e 10 0f 6d 07 1e bc 04 &a1ff 2d 7c 05 2d bc ad 94 7c 5e cf 04 2d 5e 06 0f bc &a20f 0a 0f bc 9c 05 0c bc 4c 7c 4c bc b9 9c bc 00 2b &a21f 9e 06 0f ad 0d 0f 9e 05 2d 8f 9e 8f ad 5e ad 06 &a22f 0f 6d 9e 4f 9e ad 9e 04 0f ad 9e 07 0f bc 04 0f &a23f 9e ad 05 0f 9e 04 0f bc cc 6c 9c ac bc 79 04 3c &a24f 73 bc 40 bc b9 54 40 d4 00 3a 8c ac 9e 0e 0f 9e &a25f 4f bc 05 0f 9e 8f 7c 4f ad 9e 4f 9e 06 0f ad 5e &a26f 7c 04 0f 9e ad 08 0f 6d 9e ad 07 0f 9e bc ad 5e &a27f ac 04 0c 9c 4c bc b3 b6 b3 fc 73 04 3c 73 bc 54 &a28f bc b3 bc b9 94 00 3d 9c 8c ac 9e 0c 0f 9e ad 4f &a29f ad 9e 8f 6d 8f bc 8f 7c 8f ad 7c 4f ad 9e 07 0f &a2af 7c ad 05 0f ad 5e 09 0f ad 9e 04 0f 9e ad 05 0f &a2bf ad 9c ac cc ac 9c a9 83 bc 83 fc a3 b3 04 3c 73 &a2cf 04 3c b3 bc 73 bc 00 41 8f bc 8c bc 0c 0f bc 04 &a2df 0f ad 9e 05 0f bc ad 4f ad 9e cf 9e ad 04 0f 9e &a2ef 6d 7c cf 9e 6d 4f 6d 9e 08 0f ad 9e 8f ad 07 0f &a2ff bc 8c bc 04 0c ac 96 04 03 7c 43 bc 83 7c 83 a3 &a30f bc a9 7c a3 bc a3 73 bc 00 42 4f ad 9e 0b 0f bc &a31f 07 0f ad 9e cf ad 04 0f 9e ed 05 0f ad 4f ad 9e &a32f bc 4f 9e ad 07 0f 6d 9e 04 0f 5e ad 09 0f bc 4c &a33f ac 8c 9c 4c bc 83 96 43 7c 43 bc 83 7c 43 bc 83 &a34f 7c 83 bc 43 b3 b9 94 00 3f 04 0f ad 9e 06 0f 5e &a35f ad 0a 0f ad 9e 4f 04 2d 8f 04 1e 06 0f 7c ad 5e &a36f ad 0c 0f ad 9e 6c 8c ac 9e cf 9e 04 0f 5e ac 04 &a37f 0c ac 9c a9 83 bc 43 7c 43 bc 83 7c 43 bc 83 7c &a38f 83 bc 43 73 bc 00 3e 06 0f 6d 5e 6c 8c ac 9e 0a &a39f 0f 5e bc 9e 8f ad 9e ad 4f 5e 8f ad 9e 04 0f 5e &a3af ad 11 0f ad 9c 8c bc 05 0f ad 5e ad 4f bc 06 0c &a3bf bc 04 03 7c 43 bc 83 7c 43 bc 83 7c 83 bc 83 93 &a3cf b3 bc 00 3d 0a 0f 6d 9c bc 0a 0f ad 04 0f 6d 8f &a3df ed 4f 08 2d 0e 0f 9e 04 0f 9e 6d 06 0f bc 4f 9e &a3ef 6c 8c ac 9c 04 0c bc 83 96 83 96 7c 83 93 bc 96 &a3ff 7c 93 b3 04 3c b3 bc 73 b6 a8 00 38 bc 0d 0f 6d &a40f 5e 09 0f 05 1e 08 0f de 05 0f de 4f 05 1e bc 8f &a41f 04 2d 9e 05 0f 9e 8f ad cf 9e ac cc ac 4c 5c ac &a42f 96 bc 93 fc 73 04 3c 73 04 3c b3 bc b3 b6 a8 00 &a43f 35 8f ad 9e 15 0f ed 05 0f ed 04 1e ad cf ad 5e &a44f 6d cf 6d 06 0f 6d 5e ac 8e bc 8f 9e 6d 9e 06 0f &a45f ad 9c 4c 9c cc 9c 8c bc b3 b6 fc 73 bc 68 bc b3 &a46f b6 bc 40 bc b6 bc a8 00 38 cf ad 3b 0f ad 5c bc &a47f cf ad 07 0f 9e 6c 05 0c bc 05 28 bc b3 b6 bc 40 &a48f 68 00 1a 08 0f de 05 0f 9e 07 0f ed 05 1e ed 9e &a49f ad 4f bc 5e 8f ed 04 1e 0f 0f bc 08 0f 6d 9e 8f &a4af bc 9c cc 9c 4c bc 05 00 68 00 28 05 0f bc 6d 07 &a4bf 0f bc 8c ac 9e 10 0f 9e ad 0b 0f 9e 8f 6d de 0b &a4cf 0f bc 04 0f 9e e8 5e bc 9c 05 0c ac bc 00 24 ed &a4df 9e ac 8c ac 9e 06 0f bc cc bc 0e 0f 9e ad 0a 0f &a4ef 9e 8f 9e 8f 7c 04 0f ad 9e 09 0f bc 5e 68 07 00 &a4ff a8 bc 9c ac 04 0c bc 00 2a 04 0f ad 9c 8c bc 05 &a50f 0f ad 9c 4c 9c ad 0b 0f 5e ad 0d 0f bc 8f 9e bc &a51f 06 0f ad 9e 07 0f bc 0c 00 94 bc ac cc 9c bc 00 &a52f 28 06 0f ad 9e 06 0f ad 5c ad 09 0f 9e 6d 07 0f &a53f ad de 06 0f 7c ad 07 0f bc 04 0f 5e a8 0c 00 7c &a54f dc bc a8 00 24 05 0f 9e bc 5e 04 0f bc 08 0f 5e &a55f ed 0d 0f 9e 6d 9e 0a 0f 5e a8 04 1e a8 00 1a 8f &a56f 9e ed 9e 06 0f bc 08 0f bc 0c 0f ed 9e 4f ad 9e &a57f 8f 9e ad 8f 9e 68 bc de a8 00 1c ad 05 0f ad 04 &a58f 0f bc 9e 08 0f bc 0e 0f 5e bc a8 9e ad 4f 9e a8 &a59f 00 17 8f 9e 08 0f bc 4c bc 05 0f de a8 9e 08 0f &a5af 5e 68 05 00 e8 00 15 ac 8c ac 9e 8f 04 1e bc 4c &a5bf bc 06 28 05 00 68 04 1e 68 00 14 4c 9c 7c a8 04 &a5cf 00 68 00 09 9c bc a8 00 85 ; scenery_sprite_28 (SCENERY_GREEN_TOWER_TWO) &a5d8 00 11 2d bc 00 05 06 0f 06 0e 05 0f bc 04 14 00 &a5e8 0b 4e 4c 5c 06 0c 9c cc 8e bc 04 0f 6d 54 40 bc &a5f8 ad 54 00 13 04 0c 7c 06 0c bc 04 0c bc 8f 4e cc &a608 8f 04 3c 4f bc c0 54 1c 00 54 ed 54 15 00 09 14 &a618 00 1e 11 0c ac 4c 5c 4c 8e ac fc 4f bc 94 40 bc &a628 8f ad bc 18 00 94 ad 07 0f ad 94 13 00 bc 4c 05 &a638 0f bc ad 94 00 24 04 0c 7c 06 0c bc 0d 0c fc 8e &a648 8f bc ad fc 4f bc 94 40 bc ad 54 0f 00 54 bc 4f &a658 8e 8c 6c 8e 4f bc 54 11 00 bc cc 7c 8e 8f bc 4f &a668 ad 94 00 2e 04 0c 6c 06 0c ac 0e 0c 7c 4c bc 8c &a678 fc 8e 8f bc ad fc 4f bc 0f 00 bc 8f bc 8f cc 5c &a688 4c 8e bc 8f bc 11 00 bc cc 6c 4c bc 8c 8e 4f ad &a698 94 00 2f 04 0c 5c 06 0c 9c 07 0c 6c 05 0c 7c 4c &a6a8 bc 8c ac 7c 4c bc 8c fc 4f bc 0b 2d 05 3c 8f bc &a6b8 09 0c bc 8e bc 04 00 bc ad 54 c0 bc ad 54 40 bc &a6c8 cc 5c 4c bc cc 8e 4f ad 94 00 38 04 0c 7c 06 0c &a6d8 bc 0e 0c 7c 4c bc 4c 7c 4c bc 8c ac 7c 8c 8e bc &a6e8 08 0e bc 4e 8f ad fc 8c bc 04 0c 6c cc bc 8c fc &a6f8 54 bc 4f bc d4 bc 4f bc 54 bc cc 7c 4c bc 05 0c &a708 8e 8f ad 94 00 3b 08 1c 0c 0c 5c 05 0c 7c 4c bc &a718 4c 7c 4c bc 4c 7c 4c bc 08 0c ac 04 0c fc 8c bc &a728 04 0c 5c cc bc 8c bc 8f 04 3c 4f 05 3c 4f 04 3c &a738 07 0c bc 07 0c 8f ad 94 00 34 08 3c 04 0c bc 0e &a748 0c 7c 4c bc 4c 7c 4c bc 4c 7c 4c bc 08 0c bc 05 &a758 0c 7c 8c bc 09 0c bc 8c bc 4c ac 7c 8c 8e bc 8c &a768 fc 8c 8e bc ac 7c cc 7c 4c bc 08 0c 8f bc 00 36 &a778 0c 0c ac 0e 0c 7c 4c bc 4c 7c 4c bc 4c 7c 4c bc &a788 08 0c ac 05 0c 7c 8c bc 04 0c 6c cc bc 8c bc cc &a798 7c 4c bc 4c 7c 4c bc 8c 7c cc 6c 4c bc 0a 0c bc &a7a8 00 b2 ; scenery_sprite_29 (SCENERY_HUGE_CRAFT_LEFT) &a7aa 00 2a 00 04 14 00 06 26 00 54 6c 4c 9c 78 94 00 &a7ba 0a 0c 00 94 bc 54 13 00 94 6c bc cc 9c b8 b0 ba &a7ca b5 b0 b8 94 00 15 0c 00 bc 8f bc 12 00 94 ac cc &a7da bc 5c b8 05 30 ba b5 b0 b8 94 00 16 0b 00 7c 8f &a7ea bc ad bc 0e 00 94 ac 05 0c bc 8c bc 08 30 ba b5 &a7fa b0 b8 94 00 19 0b 00 7c 8f bc 9e bc 07 00 06 14 &a80a ac 07 0c bc 4c bc 09 30 ba b5 b0 b8 94 00 1a 0b &a81a 00 7c 9e bc 8c ac 94 04 00 94 ac 8c bc f0 bc 8c &a82a 9c 4c 5c 4c bc cc bc 09 30 b5 ba b0 b4 b8 94 00 &a83a 22 0a 00 94 ac bc 8c bc 5c bc c0 7c 4c bc ba b5 &a84a b0 7c bf bd 9c bc be bd 9c bc 04 0c bc 06 30 b5 &a85a ba b0 b4 b8 b0 b5 b0 94 00 29 0a 00 bc 8c bc 8c &a86a bc 5c bc 80 bc 6d bc 4c bc 70 ba 7c bf fe bd be &a87a ac bc 05 0c bc 06 30 b4 b8 b0 b5 7a b5 b8 94 00 &a88a 27 0a 00 bc ad bc 8c bc 5c bc a8 bc 6d bc 4c bc &a89a f0 bc 8c ac cc ac 4c bc 06 0c bc f0 b4 b8 70 ba &a8aa f0 ba b5 b8 94 00 26 0a 00 bc 9e bc 8c bc 5c bc &a8ba 80 68 7c 4c bc ec bc 9c 06 3d 9c bc 07 0c bc b4 &a8ca b8 09 30 ba b5 b8 94 00 22 0c 00 bc 9c bc 5c a8 &a8da c0 a8 bc 4c bc cc bc 8c 06 2c 8c bc 07 0c bc ac &a8ea b4 0a 30 ba b5 b8 94 00 20 16 00 bc 4c bc cc bc &a8fa 08 0c bc 07 0c bc 4c ac b4 09 30 ba b5 b8 94 00 &a90a 18 16 00 bc 4c bc cc bc 08 0c bc 06 0c 9c bc 04 &a91a 0c ac b4 08 30 ba b5 b8 94 00 1a 16 00 bc 4c bc &a92a cc bc 08 0c bc 06 0c bc bf bd 9c 04 0c ac b4 07 &a93a 30 bf b0 bc 00 1b 16 00 bc 4c bc cc bc 08 0c bc &a94a 9c bd 9c 8c 5c bd bf be ac 06 0c ac b4 04 30 b5 &a95a ba b4 a8 00 1f 17 00 a8 9c bc cc bc 07 0c ac 7e &a96a fd 04 3f bd 5c 07 0c ac f0 b4 a8 00 18 19 00 a8 &a97a 9c 4c bc 08 0c bc 8c bc 09 3f bc 07 0c b0 b4 a8 &a98a 00 15 1b 00 a8 9c bc 08 0c bc ac be ec bc ff bd &a99a be bf bc 06 0c bc 00 16 1d 00 a8 9c cc bc cc 7c &a9aa bf bc cc ac bc 7e ec 06 0c bc 00 14 1f 00 a8 9c &a9ba 8c bc cc 7c bf bc 04 0c bc 0b 0c bc 00 12 21 00 &a9ca a8 bc cc 7c bf bc 04 0c bc 0b 0c bc 00 10 22 00 &a9da bc cc bc 8c bc 05 0c bc 0b 0c bc 00 0f 22 00 bc &a9ea cc bc ac be ac 04 0c bc 0b 0c bc 00 90 ; scenery_sprite_2a (SCENERY_HUGE_CRAFT_MIDDLE) &a9f7 00 20 00 94 bc 0c 2c bc 0c 2c bc 94 00 0d d4 1b &aa07 00 94 ac 8c bc 0c 0c bc 0c 0c bc 8c ac 94 00 12 &aa17 bc 9c 7c 10 00 04 14 80 bc 04 2c bc 5c bc 0c 1c &aa27 bc 0c 1c bc dc bc 00 18 94 bc 9c bc 04 14 bc 6c &aa37 bc 08 14 bc 5c fc 04 0c bc 4c bc 0c 0c bc 0c 0c &aa47 bc cc bc 00 1d bc 9c bc 05 1c bc 4c bc 0b 1c fc &aa57 04 0c bc 4c bc 0c 0c bc 0c 0c bc cc bc 00 1a 94 &aa67 bc 9c bc 04 00 04 28 08 00 bc 5c bc ad bc 04 0c &aa77 bc 4c bc 0c 0c bc 0c 0c bc cc bc 00 1e bc 9c bc &aa87 14 00 bc 8f bc 6d bc ad bc 4c bc 0c 0c bc 0c 0c &aa97 bc cc bc 00 18 18 00 bc ad bc ad bc 8f bc 4c bc &aaa7 0c 0c bc 0c 0c bc cc bc 00 15 17 00 94 bc ad bc &aab7 6d 8f bc 4c bc 0c 0c bc 0c 0c bc cc bc 00 15 16 &aac7 00 a8 9e bc 8f bc cf bc 4c bc 0c 0c bc 0c 0c bc &aad7 cc bc 00 15 18 00 a8 bc ad bc ad 7c 8c 9c 0d 2c &aae7 bc 0d 2c 9c 4c bc 00 14 1a 00 a8 bc 8f 7c ac 0e &aaf7 0c bc 0e 0c ac 9c bc 00 11 1b 00 94 ac 7c 0f 2c &ab07 bc 0e 2c 7c ac 94 00 0f 19 00 94 ac 4c bc 8c ac &ab17 9c 0d 0c bc 0c 0c 9c ac 8c bc 4c ac 94 00 17 17 &ab27 00 94 ac 04 0c bc cc ac 9c 0b 0c bc 0a 0c 9c ac &ab37 cc bc 04 0c ac 94 00 19 16 00 bc 9c 05 0c bc 8c &ab47 dc 8c bc 0a 2c bc 09 2c bc 8c dc 8c bc 05 0c 9c &ab57 bc 00 1b 16 00 bc 8c ac 9c cc bc 8c bc 8f bc 8c &ab67 bc 0a 0c bc 09 0c bc 8c bc 8f bc 8c bc cc 9c ac &ab77 8c bc 00 21 16 00 bc cc ac 9c 8c bc 8c ac bc ac &ab87 8c bc 4c 9c ac bc 0a 2c bc ac 9c 4c bc 8c ac bc &ab97 ac 8c bc 8c 9c ac cc bc 00 26 16 00 bc 05 0c ac &aba7 bc 8c bc ad bc 8c bc 9c ac 4c bc 0a 0c bc 4c ac &abb7 9c bc 8c bc ad bc 8c bc ac 05 0c bc 00 24 16 00 &abc7 bc 06 0c bc 8c bc 8f bc 8c bc 8c ac 9c 8c bc 0a &abd7 0c bc 8c 9c ac 8c bc 8c bc 8f bc 8c bc 06 0c bc &abe7 00 24 16 00 bc 06 0c bc ad bc 9e bc 9c bc dc ac &abf7 bc 0a 1c bc ac 8c 5c bc 9c bc 9e bc ad bc 06 0c &ac07 bc 00 21 16 00 bc 4c bc ed bc 4f bc 05 0f bc 8c &ac17 bc 0a 0c bc 4c bc 04 0f bc 4f bc ed bc 4c bc 00 &ac27 1e 16 00 bc 4c 04 2c bc 9e bc ad bc ad bc ec 8c &ac37 bc 8c 08 1c 8c bc 4c 6c bc ad bc ad bc 9e bc 04 &ac47 2c 4c bc 00 24 16 00 bc 06 0c bc 8c bc 8f bc 8f &ac57 bc 04 0c bc 8c bc 06 0f bc 8c bc 04 0c bc 8f bc &ac67 8f bc 8c bc 06 0c bc 00 a4 ; scenery_sprite_2b (SCENERY_HUGE_CRAFT_RIGHT) &ac70 00 1a 00 94 ac bc 11 0c bc 10 0c bc ac 94 00 0f &ac80 18 00 94 ac 4c bc 11 0c bc 10 0c bc 4c ac 94 00 &ac90 11 17 00 bc 04 1c bc 11 1c bc 10 1c bc dc bc 00 &aca0 10 17 00 bc 04 0c bc 4c bc ad bc 8f bc 0a 0c bc &acb0 cc bc 8f bc ad bc 06 0c 5c bc 5c 8c bc 00 1e 17 &acc0 00 bc 04 2c bc 6c bc 8f bc 8f bc 0a 2c bc ec bc &acd0 8f bc 8f bc 04 2c bc a9 bc 43 7c 8c bc 00 20 18 &ace0 00 a8 9c 4c bc 4c bc 8f bc 8f 7c a9 bc 4c bc 04 &acf0 2d bc cc bc 8f bc 8f bc 8c dc 04 3c 83 7c 9c a8 &ad00 00 23 1a 00 68 bc 69 bc 8f bc 8f 7c 83 bc ad 7c &ad10 8f bc 06 28 bc 8f bc 8f fc 83 fc 8f 04 3c 00 1e &ad20 1c 00 e8 bc 8f bc 5e bc 83 bc ad 7c 9e bc 06 00 &ad30 bc 9e bc 8f bc 9e bc 83 bc de bc 8f bc a8 00 20 &ad40 1f 00 bc 04 1e bc 96 bc a9 bc 5e bc 08 00 bc de &ad50 fc 5e bc 5e bc 00 17 20 00 94 a9 43 fc 43 a9 94 &ad60 09 00 94 a9 43 fc 43 a9 94 00 14 1f 00 94 a9 c3 &ad70 e9 c3 a9 94 07 00 94 a9 09 03 a9 94 00 13 1f 00 &ad80 bc 96 bc 96 bc 96 bc 96 bc 96 bc 96 bc 07 00 bc &ad90 96 bc 96 bc 96 bc 96 bc 96 bc 96 bc 00 a0 ; scenery_sprite_2c (SCENERY_SHARK_PLANE) &ad9e 00 80 94 ac bc 1b 00 94 6d bd ad 94 00 0d bc 8c &adae bc 18 00 54 bd bc cf bf 4f ad 94 00 0f bc 8c bc &adbe a9 94 14 00 94 a9 fe bc cc bf 4e 4f bc 00 12 bc &adce 8c bc 83 bc 11 00 94 69 83 96 7d bf bc cc bf cc &adde 4e bc 00 15 bc 8c bc 96 bc 6d 54 40 54 09 00 bc &adee 04 03 a9 bc bd bc cc bf 8c 8f 8d cc bc 00 1b e8 &adfe 80 68 9e 4f 6d bc 96 69 54 bc 04 2d bc c3 a9 fe &ae0e bc 4c 9c bd 9c 8c cf 4d bc 00 1c 54 40 94 ad 8f &ae1e 9e 68 5e 8f 6d 56 bc 8c 8e 8f ad bc ac 96 43 bd &ae2e bc ad 8f 8d 8c 7c ac 4c 8e 04 0f bc 00 23 bc 8c &ae3e bc a9 bc 9e a8 04 00 bc 69 5e 8f bc cc 8e bc 4c &ae4e 7c ad 04 0f 8d 9c bf 05 0c 8e 8f 9e 78 94 00 22 &ae5e bc 8c bc 96 a8 06 00 68 56 83 a9 bc 04 0c bc 06 &ae6e 0c 4e 9e ac bc bf 06 0c bc 70 ba b5 b8 94 00 20 &ae7e bc 9c a8 0c 00 68 bc 8d 4c 9c bc 06 0c 9c ac 4c &ae8e bc bf 8f 8d 04 0c bc 04 30 ba b5 b8 94 00 1f 11 &ae9e 00 bc 5e 5c bc 04 0c 9c ac 04 0c bc bf 8c 8e 8d &aeae 04 0c ac b4 04 30 ba b5 b8 94 00 1d 16 00 bc 4c &aebe 9c ac 06 0c bc bf 09 0c bc 05 30 ba bc 00 13 16 &aece 00 bc 4c bc 05 0c 9c ac 9c ac 9c 04 0c 8f 8d bc &aede 8d bc 00 15 16 00 bc 4c bc 8f 8d 8c 9c ac 9c bd &aeee 4c ac 9c 04 0c 8f bc 8f bc 00 17 16 00 bc 4c bc &aefe 8f 9e ac 9c ac ae bf 9d 4c ac 9c cc 8e bc 8f bc &af0e 69 94 00 19 16 00 bc 4c bc ac 9c bd bf 4c ae bf &af1e 9d 4c ac 9c cc bc 8c bc 05 38 bd b8 bc 00 1b 0a &af2e 00 94 0b 00 bc 9c ac 9c ad 8f 8d 7f 4c ae bf 9d &af3e 4c bc 8f 4c bc 8c bc 05 30 bf b0 bc 00 1f 09 00 &af4e bc bd bc 09 00 94 ac 9c ad 05 0f 7f 4c 7f 4c bc &af5e 4f 8d ac 8c ac b4 04 30 bf b4 a8 00 1f 07 00 94 &af6e 7c bf 7c 94 05 00 94 ac 9c ac 04 0c 8e cf 7f 8c &af7e 7f 4c bc 8e cf 8d 4c ac b4 b0 b4 a8 00 21 07 00 &af8e 68 bc be bc 68 80 54 6d bc ac 08 0c 4f 7f 8d 7f &af9e 4c bc 4c cf 4d 8c 8d bc 00 1c 09 00 bc 83 bc 80 &afae bc ad 04 0f bc 8f 4d 07 0c 8e 7f 8f 7f 4c bc cc &afbe 06 0f bc 00 1b 09 00 bc 83 bc a8 bc 04 0c 8e bc &afce 4e 4f 8d 06 0c 7f 8e 7f 8f 8c bc 04 0c 8e 04 0f &afde bc 00 1e 09 00 bc 83 bc 80 bc 05 0c bc cc 8e 4f &afee 8d 04 0c 7f 8c 7f 4f bc 05 0c 8e cf bc 00 1c 09 &affe 00 bc 83 bc 80 bc 05 0c bc 04 0c 8e cf 8d 4c 7f &b00e 8c 7f 8c 8e bc 07 0c 8e 8f bc 00 1d 94 ac bc 06 &b01e 00 bc 83 bc 80 bc 8f 8d cc bc 06 0c 8e 4f 8d 8c &b02e 7f 8e 7f 8f 8d bc 4c 8e 8f 4d cc bc 00 22 bc 8c &b03e bc 54 04 00 bc 83 bc 80 bc cf 4c bc 08 0c 8e 8f &b04e 8d 7f 8c 7f 4f bc 04 0c 4e 8f 8d 8c bc 00 21 bc &b05e 8c bc 83 bc 54 40 bc 83 bc 80 bc 4c 8e 8f 8d bc &b06e 0b 0c 7f 8c 7f 8c 8f bc 06 0c 8e 4f bc 00 20 bc &b07e 8c bc 83 bc 5e 6d bc 83 bc 94 bc 8f cc 8e bc 8d &b08e 09 0c 9c be ad bc be bf 4c bc 08 0c 8e bc 00 21 &b09e bc 8c bc 68 40 68 bc 83 bc 8f bc 8f 8d cc bc 06 &b0ae 0c 5c 6c 8e 4f bc 8f ad 9c 8c bc 8f 08 0c bc 00 &b0be 21 e8 04 00 94 ad bc 83 bc a8 bc cf 4d bc 4c 5c &b0ce 68 bc 05 0c 8e bc cf 6d 8f 8d 07 0c 7c 00 1e bc &b0de ac bc d4 ad 9e a8 bc 83 bc a8 bc cf 5e e8 04 00 &b0ee bc 06 0c bc 8c 8e 06 0f 06 0c bc 8f bc 00 20 bc &b0fe 8c bc 83 bc 9e a8 40 bc 83 bc 80 bc 9e 68 09 00 &b10e bc ac 9c 04 0c bc 04 0c 8e 04 0f 8d 04 0c bc 4f &b11e bc 00 24 bc 9c bc 68 40 94 7c 83 7c 94 0c 00 a8 &b12e 9c 8d ac 9c 4c bc 07 0c 4e 4f cc bc 8c 4f bc 00 &b13e 1e 06 00 09 28 0d 00 a8 9e 8f ad 9c bc 0b 0c 8e &b14e 4c bc 4c 8e 8f bc 00 17 1e 00 a8 9e 8f bc 8d 0d &b15e 0c bc 05 0c bc 00 0f 20 00 a8 bc cf 0a 0c 9c bc &b16e 06 0c bc 00 0e 22 00 a8 9e 4f 4d 05 0c 9c ac 8c &b17e bc 07 0c ac 94 00 12 24 00 a8 9e cf 4d 9c ac cc &b18e bc 09 0c ac 94 00 10 26 00 a8 9e 8f 9e ac 05 0c &b19e bc 0b 0c ac 94 00 10 27 00 94 ac 07 0c bc 8c 8e &b1ae 4d 09 0c ac 94 00 10 25 00 94 ad 09 0c bc cc 8e &b1be 4f cd 06 0c ac 94 00 11 25 00 bc 4f 08 0c bc 05 &b1ce 0c 8e 05 0f 4d 04 0c ac 94 00 13 25 00 bc cf 07 &b1de 0c bc 6c bc 6c bc 6c bc 6d bc 6d bc ad ac bc 8c &b1ee bc 00 18 25 00 bc 05 0f 4d cc bc 4c bc 4c bc 4c &b1fe bc 4f bc 4f bc 4f bc 8d bc 00 18 25 00 20 28 00 &b20e 86 ; scenery_sprite_2d (SCENERY_CONNING_TOWER_TWO) &b20f 00 3f 00 06 00 06 14 bc ad 54 00 0b 30 00 04 14 &b21f 0b 00 d4 ed 9e 06 3c 4f bc 04 00 54 00 12 30 14 &b22f bc 4f bc 06 00 54 ed de f8 75 b0 04 3c 4f fc 54 &b23f bc 8f ad bc 00 18 2c 0f ad 04 3c 4f bc d4 ed 8f &b24f 9e f8 f5 fa b0 bf b0 bc ac 7c 8e 8f bc 8f 04 3c &b25f 4f bc 00 1e cf 04 0e 05 0c 06 1c 8c 07 1c 06 1e &b26f 8f 8e 06 0c 04 0e 8f ad fc 8e 8f bc 04 0e 4c 8d &b27f bc b0 7a 09 30 bc 8c 7c 4c bc 8c ac fc 4f bc ad &b28f 94 00 2f 8e 07 0c 4d 8f bc c3 bc 96 bc 8c bc b0 &b29f 09 35 b0 bc 8e 4c 4d 08 0c 8e fc 4c bc cc 4d 4f &b2af bc 0c 30 bc 8c 7c 4c bc 8c 8d fc 8c 8e bc 4f ad &b2bf 94 00 30 06 0c 4e cf ac d6 bc 96 bc 8c bc 09 30 &b2cf ba b0 bc 4c 8d cf 8d 07 0c fc 4c bc 4e 05 0f ad &b2df 06 2c ed ec bc 8c 7c 8c 8d bc 4f fc 4c bc 8e 4f &b2ef ad 94 00 31 8d 08 0c 8e 06 0c 4d 8c bc 0b 34 bc &b2ff cc 8e 8f 8e 06 0c 4d ad 7c 8f 8d bc 07 0c 06 1c &b30f 06 1e 9c bc 8c 7c 4c bc 8e 8f 8e 7c 4c bc 4c 4f &b31f ad 94 00 30 4f 4d 0b 0c 8d 4f 8d 0a 0c 4e 4f 04 &b32f 0d cc 4d 05 0f 7c 4f bc 8f cd cc bc 70 09 35 b0 &b33f bc 8f 7c 8f 8d bc cc 7c 4c bc 8d 4c 8e 8f bc 00 &b34f 2d 06 2d 07 2c 07 2d 08 2c 05 2d 6c bc 08 0c 8e &b35f 4f 7c 4f bc 8f 8e 05 0c bc 0a 30 bf b0 bc 8f 7c &b36f 8e 8c bc cc 7c 8d 8f bc 4f 8d 8c 4f bc 00 2e 69 &b37f bc 69 bc 69 bc 69 bc 69 bc 69 bc 69 bc 69 bc 69 &b38f bc 69 bc 69 bc 4c bc 06 0c 8f 8d 4c 8e 7c 8f 8e &b39f bc 06 0c 8d bc 0c 30 bc 8c 7c 4c bc 4c 8d 7c 4c &b3af bc 8f 8e cc 8f ad 94 00 3a 43 bc 43 bc 43 bc 43 &b3bf bc 43 bc 43 bc 43 bc 43 bc 43 bc 43 bc 43 bc 4c &b3cf bc 4c cd cf 8d 4c 7c 8e 8c bc 4c 4d cf 6d 05 2c &b3df 6d 04 2c bc 8c 7c 4c bc 8d 4f 7c 8f 8d bc 8e 06 &b3ef 0c bc 00 bb ; scenery_sprite_2e (SCENERY_CLOUD_ONE) &b3f3 00 bc 7d d4 04 3d 54 00 08 bc ff 7d bc 7f bd 7f &b403 bd 94 05 00 94 00 0e bc 04 3f be bd bc be 04 3f &b413 bc 04 00 bc bf bc 00 11 bc 7f bd be ff bc 7f bd &b423 be bc c0 bc 7f bc 00 10 a8 be 7f bd 7e bd 04 3f &b433 bc 04 00 bc ff bc 00 10 bc bd be bf bc 40 bc be &b443 bd bc bf bc c0 94 bd 7f be a8 00 14 bc bf bc be &b453 7d bc be 7f bd be bc c0 bc 7f bc 00 11 bc bf bd &b463 04 3f bd be 7f be a8 94 bd 94 bc bf be a8 00 13 &b473 bc 07 3f bc bf bc 80 94 bd bf bc 80 a8 00 0f bc &b483 bf bc 04 3f bc be a8 40 bc bf be a8 00 0f bc bf &b493 bc be ff bc 04 00 bc bf bc 00 0d a8 be 68 be bc &b4a3 be a8 04 00 a8 be a8 00 8e ; scenery_sprite_2f (SCENERY_CLOUD_TWO) &b4ac 00 40 94 bd 94 40 94 04 3d 54 05 00 94 bd 94 00 &b4bc 10 80 bc 7f bc 80 bc ff be ff bd 94 c0 bc bf bd &b4cc 94 00 12 bc 04 3f bc 80 bc bf bd 05 3f bd 94 80 &b4dc bc ff bc 00 12 a8 be ff bc 80 bc ff 7e bf 7e a8 &b4ec 80 bc ff bc 00 11 80 bc 7f bc 80 bc 7f be ff bd &b4fc 54 bd 94 80 bc bf be a8 00 14 80 bc bf be a8 bc &b50c 7f bc 7f be ff bc bf bd 94 bc bf bc 00 14 80 a8 &b51c be a8 80 bc 7f bd 7f bc ff bc 7f bc a8 be a8 00 &b52c 13 40 94 c0 bc 04 3f bd be bf 7c 7f bc 00 0e 94 &b53c bd bf bc 40 bc 04 3f be a8 be bd ff bc 00 10 bc &b54c 7f bc c0 bc bf bc bf bc 80 bc 7f be a8 00 10 bc &b55c bf bc 05 00 68 be a8 80 bc 7f bc 00 0e a8 be a8 &b56c 0b 00 a8 be a8 00 0a 00 82 ; data3 ; FFFF1000 FFFF1000 3713 # Loaded into bank 6 at &8000 - &b712 ; scenery_sprite_30 (SCENERY_LOW_GREEN_TOWER) &8000 00 04 14 00 04 8f 8e bc 8f bc 00 07 4c bc 09 2d &8010 06 14 00 08 8e bc 09 0f 9e ad 05 0f 04 2d 04 14 &8020 00 0e 9c ad 4e 06 0c 8e bc cf 06 0e 05 0f 6d 54 &8030 1c 00 54 00 13 bc 09 0c bc 4e 0a 0c 07 0f 6d 94 &8040 11 00 bc ac 94 80 54 6d 8f bc a9 bc 54 00 1a bc &8050 ec 5c 04 0c bc 0d 0c 8e 04 0c ce 8f 7c 94 bc ad &8060 54 08 00 54 bc 9c 8f bc 05 0f bc 83 bc 4f 6d 94 &8070 00 23 bc 05 1c bc dc bc 07 1c 10 0c fc 4f bc 08 &8080 2d 8f ad 7c 8f bc 4f ce bc 83 bc 4f ce ad 94 00 &8090 1f bc 43 bc 5e bc 43 bc 5e bc 43 bc 5e bc e9 5c &80a0 0a 0c fc 4f bc 4f 9e 8f de 8e 9e 8c 7c 8c bc 05 &80b0 0c bc 83 bc 06 0c 8e bc 00 29 bc 56 bc 5e bc 56 &80c0 bc 5e bc 56 bc 5e bc 56 bc 5e bc a9 5c 07 0c 7c &80d0 8c 8e bc 8e 8c ac 8c ec 8c ac 4c bc 8c bc 05 0c &80e0 bc 83 bc 08 0c bc 00 2e bc b3 bc b3 bc b3 bc b3 &80f0 bc b3 bc b3 bc b3 bc b3 bc b3 bc b3 bc b3 bc b3 &8100 bc b9 bc 9e bc a9 9c 04 0c 7c 4c bc 4c bc 8c fc &8110 8c bc 4c bc 8c bc 05 0c bc 83 bc 09 0c bc 00 38 &8120 bc b3 bc b3 bc b3 bc b3 bc b3 bc b3 bc b3 bc b3 &8130 bc b3 bc b3 bc b3 bc b3 bc b3 bc b3 bc 83 bc 04 &8140 0c 7c 4c bc 4c 9c 8c dc 8c 9c 4c bc 8c bc 05 0c &8150 bc 83 bc 09 0c bc 00 b8 ; scenery_sprite_31 (SCENERY_LOW_RED_TOWER) &8158 00 1e 00 54 04 39 54 00 08 79 94 c0 54 11 00 94 &8168 40 94 b9 08 33 b9 94 00 10 f3 b9 fc 8e bc 06 14 &8178 bc ac 07 14 bc 8e bc b9 f3 a3 d6 83 e3 7c 94 ac &8188 07 14 ad d4 f9 bc ac bc 54 00 22 b3 63 73 b9 bc &8198 8e bc 04 33 b9 7c 8e bc 04 33 b9 7c 8e bc 73 a3 &81a8 83 7c 8f 7c c3 a9 7c 8f bc 04 33 7c 8f bc 05 33 &81b8 bc 8f bc 73 b9 94 00 2d d6 83 a3 b3 bc 8e bc a3 &81c8 c3 63 bc 8e bc b3 63 c3 bc 8e bc b3 a3 c3 e9 05 &81d8 03 7c 8d bc 04 29 7c 8f bc 05 33 bc 8d bc 04 33 &81e8 b9 94 00 2c e3 f9 bc 8e bc 96 bc 7d bc 96 bc 8e &81f8 bc 06 16 bc 8e bc 05 03 d6 05 03 7c 8e bc 04 16 &8208 a3 bc 8f bc f3 63 bc 8e bc 43 63 73 bc 00 2b c3 &8218 63 b3 bc 8e bc b3 04 39 b3 bc 8e bc 04 33 63 bc &8228 8e bc 04 03 7c 8f 7c 04 03 7c 8f bc 05 03 bc 8f &8238 bc b3 a3 c3 bc 8f bc 05 03 a3 b3 bc 00 2f 05 03 &8248 a3 bc 8e bc a3 04 03 b3 bc 8e bc a3 05 03 bc 8e &8258 bc 05 03 e9 05 03 7c 8d bc 04 29 83 bc 8f bc 05 &8268 03 bc 8d bc 07 03 a3 bc 00 2c 06 16 bc 9e bc 06 &8278 16 bc 9e bc 06 16 bc 9e bc 05 03 d6 05 03 7c 8e &8288 bc 04 16 83 bc 8f bc 05 03 bc 8e bc 08 03 bc 00 &8298 27 bc ad 4f bc ad 4f bc ad 4f bc ad 4f bc ad 4f &82a8 bc ad 4f bc ad 8f bc c3 7c 8f 7c 04 03 7c 8f bc &82b8 05 03 bc 8f bc 05 03 bc 8f bc 09 03 bc 00 2e bc &82c8 4f 9e bc 4f 9e bc 4f 9e bc 4f 9e bc 4f 9e bc 4f &82d8 9e bc 8f 9e bc 04 03 e9 05 03 7c 8d bc 04 29 83 &82e8 bc 8f bc 05 03 bc 8d bc 09 03 bc 00 ae ; scenery_sprite_32 (SCENERY_RED_TOWER_WITH_DOOR) &82f5 00 3a 00 05 14 06 00 54 00 09 25 00 d4 10 00 94 &8305 b9 05 33 bc 94 04 00 bc b3 b9 bc 00 13 25 14 bc &8315 73 79 bc 05 00 54 05 00 bc 73 7c f3 bc b3 bc 94 &8325 40 bc 73 bc 0b 39 bc 94 00 1d 21 33 b9 04 3c 04 &8335 33 bc 05 14 bc b3 b9 bc 40 bc 73 a3 7c 43 a3 bc &8345 73 7c 80 bc 73 bc 0b 33 bc b3 b9 94 00 24 09 33 &8355 07 23 bc 0d 29 bc a3 73 b9 fc 04 33 bc b3 b9 04 &8365 3c 73 bc b9 7c a3 43 69 c3 bc a3 73 fc 83 a3 bc &8375 73 63 05 03 63 bc f3 b9 94 00 2d b3 e3 0c 03 bc &8385 43 bc 04 38 fd bc 43 bc 04 03 fc a3 f3 bc f3 b9 &8395 7c a3 b3 bc a3 a9 bc c3 56 c3 bc 43 b3 fc 43 bc &83a5 04 03 bc 6d bc c3 bc 83 a3 73 b9 94 00 33 10 03 &83b5 bc 43 bc 06 30 ba bc 43 bc 04 03 fc 43 63 bc 83 &83c5 63 83 7c 43 bc 43 bc c3 7c c3 bc c3 fc 43 bc 83 &83d5 bc ed 4f bc c3 bc 43 a3 73 b9 94 00 2f 10 03 bc &83e5 43 09 29 43 bc 05 03 7c 04 03 bc 04 03 7c 43 bc &83f5 43 a9 c3 7c c3 bc c3 a9 7c 43 bc 83 bc ad bc de &8405 bc c3 bc 04 03 73 bc 00 2c 10 03 0f 29 05 03 7c &8415 04 03 bc 04 03 7c 43 bc 0b 03 bc 04 03 7c 43 bc &8425 83 bc 05 1e bc c3 bc 04 03 a3 73 bc 00 25 1e 29 &8435 bc 05 03 7c 04 03 bc 04 03 7c 43 bc 06 03 7c c3 &8445 bc 04 03 7c 43 bc 83 07 16 c3 bc 05 03 73 bc 00 &8455 23 ed bc ed bc ed bc ed bc ed bc ed bc ed bc 43 &8465 bc 05 03 7c 04 03 bc 04 03 7c 43 bc 06 03 7c c3 &8475 bc 04 03 7c 43 bc 83 bc 05 1e bc c3 bc 05 03 a3 &8485 73 bc 00 33 cf bc cf bc cf bc cf bc cf bc cf bc &8495 cf bc 43 bc 05 03 7c 04 03 bc 04 03 7c 43 bc 06 &84a5 03 69 c3 bc 04 03 7c 43 bc 83 bc 05 1e bc c3 bc &84b5 06 03 a3 b3 bc 00 b3 ; scenery_sprite_33 (SCENERY_BIG_TANK_TWO) &84bc 00 1c 00 7c fd bc 00 07 1c 00 7c ae 7f bc 00 08 &84cc 1c 00 7c 8c ae bf bc 00 09 1c 00 7c 4c ae bc 00 &84dc 08 1c 00 7c cc bc 00 07 1c 00 7c cc bc 00 07 1c &84ec 00 7c 7f 8c bc 00 08 1c 00 7c ff bc 00 07 1c 00 &84fc 7c ff bc 00 07 09 00 04 14 80 a8 94 c0 d4 06 00 &850c bc ac fd bc 00 11 07 00 94 a8 94 7d 94 a8 94 80 &851c bc 40 bc 8f bc 06 00 bc 6c 7d bc 00 17 05 00 94 &852c a8 80 bc 8c ae 7f 7c ac bc ac 94 bc 9e bc 06 00 &853c bc 04 2c bc 00 19 c0 94 a8 04 00 a8 9c be bc 83 &854c bc be bc 8c bc ac 9c 8c ac 94 04 00 bc 04 2c bc &855c 00 1c 80 94 a8 94 05 3d bc 4c ae bd bc 83 bc 9d &856c bc 4c ac 9c bc c0 94 07 2c 94 00 1a bc 94 ac ae &857c bf bd bf bd 7f bd 9c 4c bc bd bc bf bc 7f 5d ac &858c 94 80 94 bd 7f dd 4c ac 94 00 1f 7c 8c ac 8c ae &859c bd 7f bd bf bc 9c 8c bc ae bc bf bc 06 3f bc 7d &85ac 7e 04 3f 9d 8c ac 94 00 1e bc 80 a8 9c 8c ac 8c &85bc ac ae be bc 43 a9 bc 8c bc bf bc be 05 3f bc 04 &85cc 3f 7d 7e ff bd 94 00 1f bc c0 04 28 bc 7f bd 96 &85dc 83 bc a9 bc bf bc ae bd be ff bc 7f 9d 6e ff 7d &85ec 7e bd 94 00 1d bc 40 94 05 3d 7e a9 43 bc bd bc &85fc bf bc 4c bc ff bc ff 9d cc 6e ff 7d d4 00 1a bc &860c 94 bd 7f bd bf bd 7f bd 56 bd bc bf bc bf bc 4c &861c bc 8c ae bf bc bf bc bd bc bf 5d 05 0c 6e bc ae &862c bc 94 00 25 7c bf bd 7f bd 7f bd bf bc be bf bc &863c bf bc 8c bc 4c bc cc bc ae bc bf bc bd be ff 5d &864c cc bc 8c bc 8c bc 94 00 25 bc 80 a8 be bf bd bf &865c bd bf be bc 43 a9 bc bf bc 9d bc 9d 8c bc 8c 5d &866c bc 9d bc bf bc ac ae ff 7e 7c 9d bc 8c bc 8c 7c &867c 00 29 bc c0 04 28 bc 7f bd 96 83 bc a9 bc bf bc &868c 7f bc ff bc bf bc bf bc 4c ae be bc bd bc 7f bd &869c bc bf bc 8c 7c 00 25 bc 40 94 05 3d 7e a9 43 bc &86ac bd bc bf bc 7f bc ff bc bf bc bf bc bf 5d ac bc &86bc be bc 7f be bc ae bc bf bc a8 00 25 bc 94 ac 8c &86cc ae bd bf bd 7f bd 56 bd bc bf bc bf bc 7f bc ff &86dc bc bf bc bf bc be 7f 5d 6c 7c 8c bc 8c bc a8 00 &86ec 25 7c 8c ac 4c ac ae bf bd bf bc be bf bc bf bc &86fc bf bc 7f bc ff bc bf bc bf bc be bd ff 9d 04 0c &870c bc 8c bc 00 24 bc 80 a8 9c 8c ac 8c ac 8c 9c bc &871c 43 a9 bc bf bc bf bc 7f bc 8c ae bf bc bf fd 06 &872c 3f 9d 4c 9c bc 68 00 23 bc c0 04 28 bc 7f bd 96 &873c 83 bc a9 bc bf bc 7f bc 4c bf bc 09 3f 7e 68 00 &874c 19 bc 40 94 05 3d 7e a9 43 bc bd bc bf bc 7f bc &875c cc bc 05 3f 7e 68 00 17 bc 94 bd 7f bd bf bd 7f &876c bd 56 ac bc bf bc bf bc 7f bc 9d 4c bc 8c 7f bc &877c a8 00 1b 7c bf bd 7f bd 7f bd bf bc 4c bc bf bc &878c bf bc 7f bc 7f 8c bc 4c ae bc 00 19 a8 94 a8 be &879c bf bd bf bd bf be ac 8c 5d bc be bc bf bc be bd &87ac ff 9d bc cc bc 00 1b 40 a8 94 06 28 fe a9 bc 83 &87bc bc bf bc 06 3f bc ff bc 00 13 04 00 a8 94 40 94 &87cc ac 7f bd 96 bc bd bc 8c bc 06 3f bc 7f ae bc 00 &87dc 17 06 00 a8 94 a8 9c 8c ae be a8 bc be bc 8c bc &87ec 8c ae ff ae bc 4c 9c a8 00 19 08 00 a8 94 7c 94 &87fc a8 80 94 68 bc 04 2c bd 6c bc a8 00 13 12 00 09 &880c 28 00 86 ; scenery_sprite_34 (SCENERY_BIG_TANK_THREE) &880f 00 24 00 bc 7d bc 00 07 08 00 94 a8 7c a8 94 40 &881f 54 12 00 bc 6e bc 00 10 06 00 94 a8 94 ac 7f bd &882f 94 bc 94 bc bf bc 04 00 d4 0a 00 bc 4c bc 00 18 &883f 04 00 94 a8 40 a8 9c 8c ae be a9 bc bf bc bf bc &884f ac 94 40 bc 8f bc 0a 00 bc 8c 9d bc 00 1e 40 94 &885f a8 80 04 14 80 bc 7d 96 bc a9 bc bf bc 4c ac 94 &886f bc 9e bc 94 08 00 94 bc 7f bc 00 1e 94 a8 94 ac &887f bd 7f be bf 7d be 7f bc 96 bc bf bc cc 9d bd be &888f 6e bc 06 00 bc bf bc 7f bc 00 1f 7c 4c ac 04 3f &889f bd 7f bc bf bc bf bc bf bc 8c 9d ff 8c ac 9c bc &88af 06 00 bc bf bc 7f bc bd 94 00 20 7c 4c 9c 4c 6e &88bf be 7f bc bf bc bf bc bf bc 05 3f 8c 9d bf bd 94 &88cf 05 00 bc be bc fd be bc 00 1f bc 80 a8 5c 4c ac &88df 8c 9c be 69 be bc bf bc bf bc 6e bf ae 8c 9d ff &88ef bc bd 94 40 bc 07 3f ae ac 94 00 22 bc 04 00 68 &88ff bc bd bf bd 96 43 bc a9 bc bf bc 05 0c 04 3f bc &890f bf bc 80 94 bc ec 7e ae cc bc 00 20 bc 40 54 04 &891f 3d be bc 43 96 bc bd bc bf bc cc 9d ff ae 8c bc &892f bf 7c bf bc 8c 9d ff 7d 5c bc 00 20 bc 94 bd bf &893f be 7f bd bf be bf bd bc bf bc bf bc bf bc 8c 9d &894f ff ae cc bc bf 7c 8c bc 09 3f bd 94 00 22 7c 0a &895f 3f bc bf bc bf bc bf bc 6e 05 0c 5d bc bf 7c bf &896f bc 05 3f be bc ff bc ac 94 00 1d bc a8 be bf bd &897f 7f be bf bd bf be bc bf bc bf bc bf bc cc dd ff &898f bc bf 7c 8c bc bf 7e 04 3c 7d be bc 9d bc 00 25 &899f bc 40 68 04 3e bd bc 43 a9 bc be bc bf bc 8c 9d &89af 07 3f bc 8c 7c 8c bc bd 05 3c be 7f 7c bf bc 00 &89bf 21 bc 04 00 54 bc be bf be a9 43 bc 96 bc bf bc &89cf 08 3f ae bc 8c 7c 8c bc bf 6e 7d 7c 7d bf bc bf &89df bc 00 22 bc 80 94 bd ac 4c 9c 8c 7d 56 bd bc 8c &89ef bc bf bc 07 3f ae 8c bc 8c 7c bf bc 7f 9d 4c ae &89ff ac 6e 8c bc a8 00 24 7c 7f bd 9d cc bd 7f bc ae &8a0f bc 8c bc bf bc 06 3f cc bc bf 7c bf bc 04 3f 9d &8a1f 05 0c bc 00 1e 7c 7f be 7f 5d 9c 7f bc 8c bc 8c &8a2f bc bf bc ff ae cc 9d bf bc bf bc 80 a8 bc ae 06 &8a3f 3f 4c 9c a8 00 21 bc 80 a8 7e 7f bd bf 7e 69 9c &8a4f bc bf bc bf bc be 05 1c ff bc bf bc 40 bc 4c 6e &8a5f ff be a8 00 1f bc 04 00 68 bc bd bf bd 96 43 bc &8a6f a9 bc bf bc 7f ae 4c bc ff bc a8 c0 bc 05 0c 9c &8a7f a8 00 1e bc 40 54 ac fd be bc 43 96 bc bd bc bf &8a8f bc 04 2c bd bc bf be a8 06 00 a8 dc a8 00 1c bc &8a9f 94 ac 8c 9c 9d bf bd bf be bf bd bc bf bc bf bc &8aaf bf bc 5c fe bc bf bc 00 1a 7c 5d 08 3f bc bf bc &8abf bf bc bf bc 9d 04 3f bc bf bc 00 13 bc a8 be bf &8acf bd 7f be bf bd bf be bd bf bc be bc bf bc bd bc &8adf bd bc bd 7f bc 00 1b 80 a8 94 68 04 3e bc bd 7f &8aef be bc 83 bc bf bc bf fd bf be bc 00 16 c0 a8 94 &8aff 04 00 94 7d bc 83 bc bd bc bf bc ff be bd 8c bc &8b0f 00 15 05 00 a8 94 80 bc 8c ae 7f 7c ae bc 8c bc &8b1f bf be bc dc a8 00 15 07 00 a8 94 a8 5c a8 94 a8 &8b2f 9c bc 8c bc a8 00 10 09 00 04 28 c0 e8 00 88 ; scenery_sprite_35 (SCENERY_BIG_TANK_FOUR) &8b3e 00 0b 00 04 14 00 06 09 00 94 bd 9c 4c 9d bd bc &8b4e 54 00 0c 40 54 05 3c 7e bf bd be 7f bc ae 8c bc &8b5e 00 0f 94 fc ac 4c 9d bd fc be bf bc ae ac 9c 9d &8b6e bd 94 00 12 fc 9c 8c 9d ff be fc bf bc 8c 9d bc &8b7e 7f bc 00 10 80 a8 fc fe fc bd bf ae bc 7f bc 7f &8b8e ae bc 00 10 04 00 04 28 bc 6e 8c 5c bd 7f bc bf &8b9e ae 8c ac 94 00 12 08 00 bc 9c 7d bc 04 3f bc ae &8bae cc bc 00 0e 07 00 bc 04 3f bc ff ae bc cc 5d bc &8bbe 00 0e 07 00 a8 7e 7f bc bf ae 4c bc 9d 04 3f bd &8bce 94 00 11 06 00 54 bc be 7d bc 4c 9d bf bc 06 3f &8bde bc 00 10 04 00 94 a8 94 7d 94 a8 be bf bc ff bc &8bee 04 3f ae 4c bc 00 14 40 94 a8 40 bc 7e bc a9 bc &8bfe bf bc ad be 7f bd be ae cc bf bc bd 94 05 00 bc &8c0e ac 7c 00 1d 94 a8 94 04 3d 9c 4c bd bc a9 bc 8f &8c1e bc 7f ae bc 8c 5d 7f bc 7f bd bc c0 bc 9d bc 00 &8c2e 1d 7c bf bd 7f bd bf bc 7f bc bd bc 8f bc ae 4c &8c3e bc ff ae bf bc ff bc ac 94 80 bc bf bc 94 00 1f &8c4e bc a8 be bd 7f bd be 69 be bc bf bc 8f bc 9d 7f &8c5e bc ae 4c 9d bf bc 7f ae bc 4c 7c be bc bf bc 00 &8c6e 21 bc 40 68 bc bd bf bd 96 83 bc a9 bc 8f bc 6e &8c7e 8c bc 8c 9d ff bc bf 4c bc 4c bc 7f bd ac bc 94 &8c8e 00 21 bc 40 54 bc be bf be a9 83 bc 96 bc 8f bc &8c9e cc bc 05 3f bc cc bc 4c bc bf ae dc bc 00 1d bc &8cae 94 ac 9c 8c 9d be bd 56 bd bc bf bc 8f bc 4c bf &8cbe bc ff 4c bc cc bc 9d bf bc be ad bc bf bc 00 21 &8cce 7c 8c 9c 7f be bf bc 7f bc be bc 8f bc 8c 7f bc &8cde 7f cc bc 8c 5d bc 7f bc 5e bc ae bc 00 1e a8 94 &8cee a8 04 3e bd 7f be bc 96 bc 8f bc ff bc bf 04 0c &8cfe bc cc bc ae bf bc 40 a8 bc a8 00 1e 40 a8 94 40 &8d0e bc 7d bc 96 bc bf bc 8f bc ff bc 05 0c bc cc bc &8d1e 8c ae bc 80 e8 00 1b 04 00 a8 94 a8 7e bd be bd &8d2e bf bc bd ff ae bc 8c 9d ff bc bf 9d 8c bc 4c bc &8d3e 00 1b 06 00 68 bc bd bf be bd 04 3f 4c bc 05 3f &8d4e bc ff bc 4c bc 00 15 08 00 bc be bd bc 07 3f bc &8d5e 04 3f 8c bc 6e bf bc bf be a8 00 15 09 00 68 bc &8d6e be cc 6e bf bc 05 3f bc cc bc a8 00 11 0d 00 68 &8d7e 5c 4c bc 6e ff bc bf 9c a8 00 0e 11 00 68 bc 04 &8d8e 1c be bc a8 00 8b ; scenery_sprite_36 (SCENERY_BIG_HELICOPTER) &8d94 00 08 00 bc ad bc 00 07 08 00 bc 8f bc 80 94 ad &8da4 bc ad 94 00 0d 07 00 94 ec bc ad 8f bc 8f ad 94 &8db4 00 0d 06 00 bc cc 9c ac 4c bc 4f ad 94 1a 00 d4 &8dc4 00 10 06 00 bc 8c 8d 9c ad 8f 8d 8c bc 8c 8e 8f &8dd4 ad 94 19 00 bc be bc 00 17 06 00 a8 5e ad 04 0f &8de4 bc 8d 4c 9c bc 94 18 00 bc 8c bc 00 14 07 00 94 &8df4 ac 8e 4f 9e ad bc 4f 9c b8 ba b5 b8 94 16 00 bc &8e04 8c bc 00 17 06 00 bc ac 4c 9c ac 8e 8f bc cf bc &8e14 70 ba b5 b8 94 14 00 bc 8d bc 00 18 06 00 bc 8c &8e24 9c ac 04 0c bc 8c 4e 8f bc f0 ba b5 b8 94 12 00 &8e34 bc 8f bc 00 19 80 94 a8 c0 bc ac 06 0c bc cc 8e &8e44 8f bc 04 30 ba b5 b8 94 10 00 bc 8f bc 00 1a bc &8e54 04 00 bc 08 0c bc 06 0c bc 05 30 ba b0 bc 0f 00 &8e64 bc 8f bc 00 16 bc 04 00 bc 8f 8d 06 0c bc 07 0c &8e74 bc 07 30 bc 0e 00 bc 8e bc 00 16 bc 04 00 bc cf &8e84 9c 8d cc bc 08 0c bc 07 30 bc 0d 00 bc 8c bc 00 &8e94 16 bc 04 00 bc 4f bc bf bc 8f 8d 8c bc 09 0c bc &8ea4 07 30 bc 0c 00 bc 8c bc 00 19 bc 6c 6d 8f 4e bc &8eb4 a9 bc 4f 9e ac 9c 09 0c bc 07 30 bc 0b 00 bc 8d &8ec4 bc 00 19 bc 04 28 9e 4c bc 83 bc 9c bc cc bc 09 &8ed4 0c bc 07 30 bc 0a 00 bc 8f bc 00 19 bc 04 00 bc &8ee4 4c bc 83 bc 8c bc cc bc 8f 8d 08 0c ac 05 34 ac &8ef4 bc 6c 54 06 00 bc 8f bc 00 1e bc 04 00 bc 4c bc &8f04 83 bc ac bc cc bc 8e 8f 8d 4c 06 1c 4c 8e 8f 4d &8f14 bc 04 0c 6c 94 c0 bc 8f bc 00 21 bc 04 00 bc 4c &8f24 bc 83 bc 4c bc 8c bc 04 0c 9c bc 06 1e bc 9c 4c &8f34 9e ac 4f 8d 04 0c bc ac 94 80 bc 8c bc 00 24 bc &8f44 04 00 bc 8f 9c bc 83 bc 9c 4c bc 04 0c bc 09 0c &8f54 ac 9c 8c bc 8c 8e 05 0f 8d bc 8c bc 80 bc 8c bc &8f64 00 23 bc 04 00 bc 8f 7c 96 7c 4c bc 4c 9c ad bc &8f74 0b 0c ac bc cc 05 0f bc 8d bc ec bc 00 1c bc 04 &8f84 00 bc 04 0f 4d 4c bc 4c bc 8f bc 8f 4d 0a 0c ac &8f94 9c 4c 4e 4f bc 8f bc ac bc ad bc 00 1f bc 04 00 &8fa4 bc 8f ce cf 8d bc 4c bc 8c bc 04 0f 0a 0c bc 05 &8fb4 0c 8e bc 8f bc 8f bc 8f bc 00 1e bc 04 2c 07 0c &8fc4 8e 8f bc 8d 8c bc 8c bc 06 0f 8d 07 0c bc 06 0c &8fd4 bc 8e bc ac bc ad bc 00 1e bc 04 28 9c 08 0c bc &8fe4 4c bc 8c bc 8e 07 0f 8d 05 0c bc 06 0c bc 8c bc &8ff4 a8 bc ac bc 00 1d bc 04 00 bc 8c 8e 4d 04 0c bc &9004 4c bc 8c bc 4c 0a 0f 4c bc 06 0c bc 8c bc 80 bc &9014 8c bc 00 1e bc 04 00 bc 4c 8e 4f 8d 4c bc 4c ac &9024 9c bc 04 0c 4e 8c 4e 04 0f 8d bc 06 0c bc a8 40 &9034 bc 8c bc 00 21 05 00 bc 04 0c 8e cf bc 04 0c ac &9044 9c 09 0c 4e 4f bc 8d cc 9c a8 04 00 bc 8c bc 00 &9054 1c 06 00 bc 04 0c 8d 4f bc 8f 8d cc ac 9c 0c 0c &9064 bc 8f 8d 9c a8 06 00 bc 8c bc 00 1b 07 00 bc 05 &9074 0c 8e bc cf 4d 8f ad 9c 0a 0c 9c e8 08 00 bc 8c &9084 bc 00 17 08 00 bc 05 0c bc 8c 8e 05 0f 9e ac 08 &9094 1c a8 0c 00 bc 8c bc 00 16 09 00 a8 9c cc bc cc &90a4 8e 4f bc 4f 8c 9c a8 12 00 bc 8c bc 00 15 0b 00 &90b4 a8 9c 8c bc 05 0c 8f bc 8f 9e a8 14 00 bc 8c bc &90c4 00 14 0d 00 a8 bc 05 0c 8f bc a8 16 00 bc 8c bc &90d4 00 10 0e 00 bc 8d 05 0c bc 17 00 bc 8c bc 00 0e &90e4 0e 00 bc 4f 8d cc bc 17 00 bc 8c bc 00 0e 0e 00 &90f4 bc 04 0f 8d 8c bc 17 00 bc 8c bc 00 0f 0e 00 bc &9104 06 0f bc 17 00 bc 8c bc 00 0d 0e 00 bc cc 8e 4f &9114 bc 17 00 bc 8c bc 00 0e 0e 00 bc 04 0c 8e 8f bc &9124 17 00 bc 8f bc 00 0f 0e 00 bc 06 0c bc 17 00 bc &9134 8f bc 00 0d 0e 00 bc 06 0c bc 17 00 bc bd bc 00 &9144 0d 0e 00 bc 8d 05 0c ac 94 16 00 e8 00 0d 0e 00 &9154 bc 4f 8d 05 0c ac 94 00 0b 0e 00 68 5e 8f 8d 05 &9164 0c ac 94 00 0c 12 00 68 5c 05 0c ac 94 00 0a 16 &9174 00 68 5e 8f 4d ad 94 00 0a 1a 00 68 5e bc 00 87 ; scenery_sprite_37 (SCENERY_HUGE_GUN_EMPLACEMENT_LEFT) &9184 00 ac bd 54 1b 00 7c fd 7c 00 0a 5c ae bf bc 80 &9194 54 17 00 7c ae 7f bc a8 00 0f 9d 8c ac 7c ac ae &91a4 bf bc 16 00 7c 4c bf bc 00 10 7e bd 8c bc cc bc &91b4 16 00 7c cc bc 00 0d 7c 7f bc 8c 9c 68 16 00 7c &91c4 cc bc 00 0d 7d be bf bc bd bc 54 16 00 7c 9d bf &91d4 9d bc 00 10 7f be bc bd 7f 8c bc 16 00 7c ff bc &91e4 94 00 0f 7d 06 3f bc 54 14 00 7c fe bc bf bc 00 &91f4 0e 8c ae 06 3f bc 7f 7d 54 10 00 7c fe bc bf bc &9204 00 11 6c 9c be ff bd be 05 3f bd bc 0f 00 7c fe &9214 bc ae bc 00 13 4c 9c ac be ae 7f bc 05 3f be a8 &9224 80 54 7d 54 08 00 7c 5c be bc 8c bc 00 19 7c 4c &9234 bc cc bc 05 3f bc 7d 06 3f bc 07 00 7c bd ff bd &9244 bc 00 15 7c 7f bc 7f 9d bc 04 0c ae 09 3f bc 40 &9254 bc ec bc 7e 06 3f bd 94 00 17 7f bd be bc ff bc &9264 7f 5d 4c ae 07 3f bc 54 bc cc bc 7f 7d 7e 04 3f &9274 bc 00 19 7e 7d ff bd be 0d 3f bd be fc cc bc 8c &9284 ae ff fc 7e bc 00 14 08 3f bc 9d ae 0c 3f 04 3c &9294 cc bc 4c ae bf be 7d ff 7d 94 00 15 08 3f bc bf &92a4 9d 8c 6e 08 3f ae 04 3c 9d 7f bc 9d cc ae 7f be &92b4 bc ff bc 94 00 1a 08 3f bc 7f 9d 04 0c 04 2e cc &92c4 04 3c ff bc ff 5c 04 3c 7d be bc bf bc 00 19 08 &92d4 3f bc 04 3f 08 0c 5c 04 3c ff bc bf 06 3c 7f bc &92e4 bf 7c bf bc 00 17 7e 06 3f bc 07 3f 9d 04 0c 7c &92f4 7f 7c be 7f bc ff bd ac 04 3c 7e bd bc bf bc 00 &9304 1b 4c bc 05 3f bc 08 3f 5d 4c 7c 7f fc ad be bc &9314 04 3f 9d 4c ac bc ff 7c 00 19 cc bc bf be 7d bc &9324 be 0a 3f 8c 7c 7f bc a8 bc 4f bc 69 7e 7f 9d cc &9334 ae ac bc bf bc 00 1d 8c 9d 7c bd 05 3f 7d 7e 07 &9344 3f 7c 7f bc 80 bc 4f bc c3 bc 04 3f 04 0c bc 8c &9354 bc 00 1c 9d be bd 0b 3f 7d 7e ff 7c 7f bc 80 bc &9364 4f bc c3 96 bd 04 3f 9d 4c bc 9c a8 00 1b 6c 7e &9374 0e 3f 7d be 7c 8c bf bc 40 bc 8f bc c3 bc 4c ae &9384 05 3f bc 0e 00 04 14 00 1b 04 0c 6c 7e 0d 3f 7c &9394 7d bc 40 e8 d6 bc 04 0c 6e be a8 0f 00 bc bf bc &93a4 00 19 08 0c 6c be 0a 3f 7c 7d bc 7d 54 04 00 bc &93b4 9c a8 dc a8 11 00 bc bf bc 40 94 00 1b 05 0c 5d &93c4 ff bd be bc bd 7e 04 3f be 06 3d be 7f 7d 54 17 &93d4 00 bc ad bc ac bc a8 bc 00 1d 4c 5d 06 3f be bd &93e4 ff bc ff bc bf be 7d bc 7d be bc 05 3f 7d 7c 04 &93f4 2c bc 94 40 94 06 3d bc ac bc 94 bc 8f bc 8c bc &9404 80 bc 1a 00 7c 7d bc 00 2f 9d 0e 3f bc 7f be bd &9414 bc ff bc 04 3f bd be 07 3f 7d 5c 9d bd 7c 06 3f &9424 ae bc 8c bc 80 a8 bc bd bf bc 94 bc 1a 00 7c 7f &9434 bc 00 2a 0c 3f 6e bf bc 7e bc bf bc ff bc 06 3f &9444 bc 0a 3f 7d be bc ff ae cc bc 8c bc c0 a8 bc 40 &9454 a8 1a 00 7c 7f bc 00 25 ae 06 3f 6e cc 5d bf 04 &9464 3c be bc ff bc 06 3f bc bd be 0c 3f 7d 5c cc bc &9474 8c bc 40 e8 1d 00 7c 7f bc 00 23 0a 0c 9d be bd &9484 7f 04 3c bd bc ac ae 8c bc 06 3f bc bf bc 10 3f &9494 7d be bc bf bc 22 00 7c 7f bc 00 21 07 0c 9d bd &94a4 7e bd ff 04 3c ae bc cc bc ae 05 3f bc bd be 14 &94b4 3f 7d 54 20 00 7c 7f bc 00 1e 05 0c 9d bd be fc &94c4 04 3f 04 3c 8c bc 4c 9d bc cc ee bc 8c bc 18 3f &94d4 7d 54 1c 00 7c 7f bc 00 1f 4c 9d ff bd 04 3f bd &94e4 ff 04 3c 8c bc ff bc 06 0c bc 8c bc bf be 08 3d &94f4 be 08 3d bc bd bc 04 3f ae 8c 6c 54 18 00 7c 7f &9504 bc 00 2a 4c 6e 0b 3f 04 3c bf bc ff bc 9d 05 0c &9514 bc ae bc bf bc 11 3f bc bf bc bf ae 08 0c bc 09 &9524 3d bc 54 05 2c bc 94 04 00 7c 7f bc 04 00 94 bc &9534 05 3d 94 80 94 05 2c bc 94 00 38 04 0c ee 08 3f &9544 bc ff bd bc 8c 6e bc 04 3f 9d 8c bc 8c bc 8c bc &9554 11 3f bc bf bc 05 0c 04 1d bf bc 08 3f be 7d 7f &9564 5d 4c bc 8c bc c0 7c 7d bc 40 94 ac 8c bc 06 3f &9574 bd bc ff 4c bc 8c ac 94 00 3f 08 0c 6e 05 3f bc &9584 04 3f bc ad 9c 8c bc 06 3f bc ac 4c bc 4c ae 0e &9594 3f bc bf bc cc 9d 06 3f bc 0f 3f 5d bc 8c bc 6c &95a4 94 7c 7d bc 94 ac cc bc 8c ae 05 3f bd be 04 3f &95b4 bc 9d 4c ac 94 00 3d 5d 09 0c 6e 7f bc 04 3f bc &95c4 9e bc a9 bc 05 3f be bd bf 5d bc 06 0c ae 0a 3f &95d4 bc 8c bc 8c 9d 07 3f bd be 0d 3f be ff bc bf 9d &95e4 4c fc 7d 7c 5d 4c bc cc ae 09 3f bc 7f 8c 9c a8 &95f4 00 3b 08 3f 04 1d cc bc 06 3f bc 83 bc ee 9c bd &9604 05 3f bc 5d 05 0c ae 08 3f 8c bc 8c bc 0a 3f bc &9614 09 3f 7e 7c 04 3f bc 7f be 7d 06 2c be ff bc 9d &9624 04 0c ae 07 3f bc be 7c 94 00 39 0e 3f 9d bc 9d &9634 06 3f bd bc 5c bd 07 3f bc 04 3f 05 0c 6e bf 6e &9644 cc bc ae bc 0a 3f bc 0b 3d bc 05 3d bc be bf bd &9654 04 3e 04 1c bd 7f be bc 06 3d ec 04 3d bc be ff &9664 bc 00 38 0f 3f bc 13 3f bc 06 3f 5d cc ae 05 0c &9674 bc 8c bc 8c 09 3f bc 11 3f bc bf bd be bf 07 3c &9684 bf be bd bf bc 07 3f dd ae 7f bc bf bd be bf bc &9694 00 2f 0f 3f bc 13 3f bc 08 3f 5d 07 0c bc 8c bc &96a4 04 0c ae ff be 7c 11 3f bc ff 08 3c bd ff bc 0d &96b4 3f bc ff bd bc 00 25 0f 3f bc 13 3f bc 0a 3f 07 &96c4 0c bc 8c bc 06 0c 6c be 13 3f bc bf be 09 3c ee &96d4 bf bc 0d 3f bc 04 3f bc 00 23 0f 3f bc 6c bc 10 &96e4 3f bc 0c 3f dd 4c bc 8c bc 09 0c ac bc 11 3f bc &96f4 bf bd bf be 07 3c bf 9d 4c bc 6e 0b 3f bc ff be &9704 a8 00 29 0f 3f bc 9d 8c bc fe 0d 3f bc 0f 3f 5d &9714 bc bf bc dd bf 06 0c bc 8c ae 0f 3f bc 7f bc ff &9724 fe 7f bc 7f 9d bc 05 0c ee 05 3f bc 04 3f bc 00 &9734 2e 0f 3f bc 05 3f bc 0d 3f bc 11 3f bc bf bc 04 &9744 3f 5d 04 0c bc 04 0c ae 0c 3f bc ff bd 07 3c 04 &9754 3f bc bf 9d 09 0c 6e bc ee bf bc 00 2c 4c ae 0c &9764 3f bc 06 3f fd bc 09 3f bc ae 10 3f bc bf bc 07 &9774 3f 9d 4c bc 08 0c ae 08 3f bc 6e 8c 9c 07 3c 04 &9784 3f bc 09 3f dd 8c bc 04 0c bc 00 2f 04 0c ae 0a &9794 3f bc 8c ae 07 3f bc fe 06 3f bc 4c 6e 0d 3f bc &97a4 bf bc 09 3f 9d bc 9d 09 0c 07 2e bc 4c bc 04 1d &97b4 04 3f bc ff bc 05 3f ee 05 3f bc 5d 4c bc 00 34 &97c4 06 0c ae 08 3f bc 4c ae 08 3f be bd 06 3f bd 05 &97d4 1c 0c 3e bc be bc 0a 3f bc ff 9d 0d 0c bc 8c 9d &97e4 bf bd 07 3c 04 3f bc 06 3f 9d 4c 6e 7f bc 04 3f &97f4 bc 00 33 5d 06 0c ae 06 3f bc 04 0c ae 07 3f fd &9804 bc 22 3f bc 05 3f 9d 0b 0c bc 04 3f 07 3c 04 3f &9814 7c be 05 3f 9d 04 0c ae bc 7f be bc 00 2b 04 3f &9824 be 5d cc ae be bd 7f bc 07 1c 04 3e 7f 7e bc fe &9834 1f 3f bc 07 3f 9d 06 0c 9d 7f bc ff be 07 3c be &9844 ff bc 09 3f 04 0c bc 8c 6e be bc 00 2f 05 3f 7c &9854 7e 9c bc 8c ae 7f bc 0a 3f bd be bc bd 04 3f bc &9864 19 3e 06 3f bc 08 3f 9d 04 0c 04 3f bc bf be bd &9874 bf 07 3c bf bd be bf bc 0b 3f 9d 8c bc 8c 9c ac &9884 8c bc 00 37 8c ff be fd 7c 7f 5d bf bc 0b 3f bd &9894 be 05 3f bc 0e 3f 7e bc 05 3f bc 83 bc 06 3f bc &98a4 09 3d 04 2c 04 3d bc bd bf be 08 3d be 7f bd bc &98b4 0c 3e 9c bc ac cc bc 00 35 8c 7f bd 05 3f bd be &98c4 04 3f bc 12 3f bc 0a 3f 7e 04 3c fd be 7f bc 83 &98d4 bc 06 3f bc 09 3f 9d 04 0c ae 7f bc 7f bd 08 3e &98e4 ac 6e bf bc 0d 3f bc 9d cc bc 00 33 8c 6e 0a 3f &98f4 be bd bc 12 3f bc 8c ae 06 3f 7d 05 3c be ff bc &9904 7f bc 83 bc 04 3f 7e bd 0b 3f 9d 05 0c bc ae ff &9914 07 3c 4c 9c ae bc 0a 3f be bc be bc bf 9d 4c bc &9924 00 36 04 0c 6e ff 7e 7c be 14 3f bc cc 6e 07 3f &9934 7d fc 7d ff bc 83 bc bf 7e bd bc 7e 07 3f be 06 &9944 3f 9d 4c bc 4c ae be 07 28 5c bc 8c bc 8c ae 0a &9954 3f bd 94 a8 be a8 9c a8 00 38 06 0c ae 07 3f bd &9964 bc 12 3f bc 06 1c 0a 3e bc 05 3e bc 96 bc 06 3f &9974 bc 08 3f bc be 06 3f 9d bc 8c 9c a8 0a 00 bc 8c &9984 bc cc ee 07 3f bc bd 94 00 30 09 0c ae 05 3f bc &9994 12 3f bc 09 0c 6e 14 3f bc 08 3e a8 80 bc 06 3e &99a4 bc a8 0d 00 a8 bc 08 1c 05 3e bc a8 00 a4 ; scenery_sprite_38 (SCENERY_LOW_WHITE_TOWER) &99b2 00 04 14 1a 00 54 06 00 04 14 00 0b be bc be bc &99c2 ad bc 06 3d bc ad 0f 14 bc 8f bc 05 14 bd 7f 7e &99d2 a8 c0 05 14 00 1a bd be bd bc 9e bc 7f 7c 7f bc &99e2 9e bc be bc be bc be bc be bc be bc be bc be 7c &99f2 ad 7c be 7c be 7f bc 04 14 69 83 bc ff fd 54 00 &9a02 2b bd 7f bc 8f bc 06 3f bc 8f bc be bd be bd bf &9a12 bd bf bd be bd be bd bc bd bc 8f fc bd bc bd bc &9a22 bd 7c 8f bc 83 56 bd 04 3c fe 7f bd 94 00 2e ff &9a32 bc 8f bc 7f 7c 7f bc 8f bc bf bd 7f be 7c be bf &9a42 bd bf bd be bd bc 9e bc bd bf bd bf be bf bd be &9a52 bc 9e bc bd 7f be 09 3c be bf bd 94 00 2f ff bc &9a62 ad bc 06 3f bc ad bc 04 3f 04 3c 05 3f bd bc 8f &9a72 bc bd 7f fc 7f bc 8f bc be 69 83 7c bd bc bd 06 &9a82 3c bf bd 94 00 28 ff bc 8f bc 7f 7c 7f bc 8f bc &9a92 05 3f 7d 07 3f bc 8f bc ff bd bc bd 7f bc 8f bc &9aa2 56 7d bc be bd be bd be bd be bd fc bf bc 00 2a &9ab2 fe bc 9e bc 06 3e bc 9e bc 0e 3e bc ad bc 08 3f &9ac2 bc ad bc 7f 7e bc be bd be bd be bd be bd be bd &9ad2 7c bf bc 00 25 1c 16 83 bc 8f bc ff be bc be 7f &9ae2 bc 8f bc 69 43 bc be bd bf bd bf bd bf bd be bd &9af2 be bc bf bc 00 21 bc 4f bc 4f bc 4f bc 4f bc 4f &9b02 bc 4f bc 4f bc 4f bc 4f bc 83 bc 9e bc ff fc 7f &9b12 bc 9e bc 56 7d bc 09 3f bd be bc 7f bc 00 29 bc &9b22 4f bc 4f bc 4f bc 4f bc 4f bc 4f bc 4f bc 4f bc &9b32 4f bc 83 bc 8f bc 04 3f bd ff bc 8f bc 7e 69 bc &9b42 0e 3f bc 00 a6 ; scenery_sprite_39 (SCENERY_WOOD_LEFT) &9b47 00 94 00 03 8c bc 09 00 bc 7d 94 07 00 94 00 0c &9b57 ac 9c a8 08 00 a8 be bd be bd 94 c0 94 fc a8 00 &9b67 11 ac 94 0b 00 a8 be bf be bd 94 fc a8 11 00 54 &9b77 ac bc ac 94 00 15 ac bc 0e 3d be bd be bd bc 04 &9b87 3d bc 0b 00 94 ac bc ac 9c ac 9c ac 9c bc 80 94 &9b97 80 94 00 1e 9c bc 0d 28 fc be bd bf bd bc e8 04 &9ba7 00 94 ac 94 40 94 ac 9c ac 9c ac 9c ac 8c ac 9c &9bb7 6c 9c bc 9c ac 54 00 24 9c 8c bc 0a 00 94 fc a8 &9bc7 80 a8 be bd be bc c0 94 6c 9c ac 9c ac bc ac 5c &9bd7 ac 9c 8c 9c 8c ac 8c 5c 7c ac 8c ac 8c bc 94 00 &9be7 29 9c ac 9c bc 09 00 e8 05 00 a8 c0 94 bc ac 9c &9bf7 ac 8c bc 9c bc 9c ac 8c 9c ac 8c 9c 8c 9c ec 8c &9c07 5c 8c ac 8c ac 4c bc 94 00 29 9c ac 9c bc 15 00 &9c17 a8 9c ac 9c 7c a9 9c ac 9c 8c ac 8c ac 8c 9c cc &9c27 ac 4c 9c 8c ac 8c ac 8c ac 9c 8c bc 00 24 8c 9c &9c37 a9 83 bc a9 54 07 00 94 e9 94 04 00 d4 bc 69 83 &9c47 96 bc 9c ac 8c 9c 8c ac 8c 9c 4c ac 8c ac 4c ac &9c57 8c 9c 8c ac 4c 9c ac bc 94 00 2d ac 9c bc 96 83 &9c67 96 a9 96 a9 bc a9 bc a9 bc a9 96 83 a9 83 96 a9 &9c77 bc a9 bc 96 a9 96 a9 43 bc ac 9c ac bc 8c 9c 8c &9c87 ac cc 9c 4c ac 4c ac cc 9c 8c ac 8c ac 9c ac bc &9c97 94 00 38 ac 9c fc 96 a9 83 a9 83 a9 14 03 bc 9c &9ca7 ac 5c 8c ac 9c ac 8c 9c 8c ac 8c 9c 8c ac 8c ac &9cb7 8c 9c 4c ac 9c ac 9c ac 9c ac bc 00 aa ; scenery_sprite_3a (SCENERY_WOOD_MIDDLE_ONE) &9cc4 00 ac 9c bc 96 83 96 83 96 83 96 83 96 83 96 a9 &9cd4 96 05 03 96 83 96 83 96 83 96 83 96 43 96 a9 96 &9ce4 a9 96 bc ac 9c ac 9c ac 9c bc 9c ac 8c ac 4c ac &9cf4 8c 9c ac 8c 6c bc 9c ac 9c ac 9c ac 9c ac 94 00 &9d04 40 ac 9c a9 83 56 e8 7c 04 28 80 05 28 80 e8 96 &9d14 bc 96 bc 96 bc 43 a9 96 7c 9c ac 9c ac 9c ac bc &9d24 8c 9c ac 4c ac 8c 9c 04 0c 9c 6c 9c bc 9c ac 5c &9d34 ac 9c a8 00 34 93 9c ac bc 05 00 94 a8 05 00 a8 &9d44 94 80 94 a8 0a 00 68 56 bc ac 9c ac 9c a9 bc 8c &9d54 9c 8c 9c 8c ac 9c 04 0c ac 4c 9c 8c ac 9c 6c bc &9d64 5c a8 00 2f ac 8c bc 94 04 00 a8 80 a8 06 00 a8 &9d74 bc 08 00 94 c0 bc 40 bc 9c ac 9c a9 bc ac 9c ac &9d84 8c ac 4c ac cc ac cc ac 4c ac 8c 9c ac 7c 00 2c &9d94 ac bc a9 83 69 94 0b 00 a8 bc 54 06 00 e8 bc a9 &9da4 94 a9 bc a9 96 bc ac bc 8c bc ac 9c ac cc ac 4c &9db4 ac 8c ac 8c ac 4c ac 9c bc 8c bc 00 2d 8c 9c ac &9dc4 96 c3 69 09 14 a9 83 a9 83 a9 7c a9 05 14 a9 43 &9dd4 96 7c ac 9c ac 9c ac 9c 4c ac 4c ac 4c ac 8c 9c &9de4 ac 8c ac 8c ac 8c 9c ac bc 94 00 2f ac 8c bc d6 &9df4 a9 c3 a9 83 a9 83 a9 83 a9 83 a9 c3 a9 43 a9 83 &9e04 a9 83 a9 83 a9 83 a9 96 bc 9c ac 9c ac 9c 8c 9c &9e14 4c ac 8c ac 9c 8c ac cc 9c 8c ac 8c ac 8c 9c ac &9e24 9c ac bc 94 00 3a 9c 7c 69 c3 96 83 96 43 96 43 &9e34 96 83 96 83 96 0b 03 a9 bc 9c ac 9c ac 9c ac 8c &9e44 ac 8c 9c 4c 9c cc 9c 04 0c 9c 8c ac 4c 9c ac 9c &9e54 ac bc 00 2e 8c ac 05 16 0e 28 96 83 56 bc 96 bc &9e64 c3 a9 bc 96 bc 5c ac 9c bc 8c 9c 4c 9c 8c 9c 8c &9e74 9c cc ac 05 0c 9c 8c 5c bc a8 00 28 ac 9c ac 9c &9e84 ac 94 10 00 bc a8 04 00 a8 bc 56 83 a9 7c 9c bc &9e94 9c bc ac 9c 8c 9c cc 9c cc ac 4c ac 8c 9c 8c 9c &9ea4 8c 9c ac bc 00 2a bc 8c 5c 69 94 05 00 04 14 05 &9eb4 00 a8 08 00 94 69 bc 56 fc 9c ac 9c ac 9c 8c bc &9ec4 8c 9c ac 8c 9c 4c ac 9c ac 9c ac 9c bc 9c bc 00 &9ed4 2b 8c ac 96 43 96 69 bc a9 bc a9 96 43 0f 29 83 &9ee4 96 ac 9c 7c ac bc 9c ac 5c ac 9c bc 9c ac 5c 8c &9ef4 9c ac 9c ac 9c 8c 9c bc ac 9c ac 9c bc 00 ae ; scenery_sprite_3b (SCENERY_WOOD_MIDDLE_TWO) &9f03 00 8c 9c ac bc c3 08 16 c3 bc 96 bc 96 bc 83 bc &9f13 96 a9 83 bc 96 bc 96 ac bc 8c 9c ac 9c ac 9c ac &9f23 8c ac dc ac 9c cc ac 8c ac 9c ac bc 9c ac 9c ac &9f33 9c bc 00 33 ac 9c ac 8c bc 96 a8 06 00 a8 56 68 &9f43 80 94 c0 a8 80 a8 96 83 a9 bc ac 9c ac 9c ac 9c &9f53 ac 9c ac 9c 8c 7c 6c 4c 9c 8c ac 8c ac 8c ac 8c &9f63 bc 9c ac bc 9c ac bc 00 35 9c 8c 9c ac 9c a8 07 &9f73 00 94 a8 04 00 94 bc 06 00 a8 96 ac 9c ac 9c 8c &9f83 ac 9c ac 8c bc 9c bc ac 9c 4c ac 4c 9c 8c ac 4c &9f93 ac 4c 9c 8c 6c bc 94 00 30 9c ac 9c a9 94 0d 00 &9fa3 a8 40 bc 05 00 bc 9c ac 9c ac 9c 6c 9c ac bc 9c &9fb3 ac 9c ac 8c 9c 8c ac 8c ac 8c 9c 4c 9c 8c ac 8c &9fc3 9c 8c ac 9c 8c bc a8 00 30 8c ac 96 43 a9 05 14 &9fd3 08 00 54 bc a9 04 14 05 3c 9c bc 9c bc ac bc 9c &9fe3 ac 9c ac 4c 9c 8c 9c ac 4c 9c 4c 9c 8c 9c 4c 5c &9ff3 ac bc ac 94 00 2d 6c 56 a9 83 96 c3 96 08 29 96 &a003 04 03 a9 83 a9 83 a9 83 a9 83 a9 7c ac 7c 9c ac &a013 9c 8c ac 04 0c 9c 09 0c 9c 8c 9c 8c 9c ac 9c bc &a023 00 2c ac 9c 8c fc 43 96 43 a9 0c 03 96 06 03 96 &a033 bc ac 9c ac 9c bc ac bc 9c bc 8c ac 8c ac 4c ac &a043 4c ac 4c ac cc 9c 8c ac 9c bc a8 00 2b 4c bc a9 &a053 43 96 bc 96 bc 96 bc 96 bc 96 bc 96 a9 04 03 a9 &a063 56 bc 96 43 bc 56 bc ac 9c bc 9c bc ac 9c ac bc &a073 ac 5c ac 8c ac 04 0c ac 4c ac 4c 9c ac 9c 8c bc &a083 94 00 36 ac 5c ac bc a8 0b 00 06 28 c0 a8 bc 83 &a093 bc a8 7c a8 7c ac 9c ac 9c ac 8c ac 9c 8c ac 8c &a0a3 ac 4c ac 4c 9c 4c ac 8c 9c ac 9c bc ac 94 00 2d &a0b3 9c ac 9c bc 8c bc 0d 00 a8 94 07 00 bc 96 bc 80 &a0c3 a8 bc ac 9c ac bc 9c ac 8c ac 8c 9c 8c ac 4c ac &a0d3 4c 9c cc ac 8c ac 5c bc 9c ac 9c ac 94 00 2f 9c &a0e3 ac 5c ac 9c ac 06 14 06 00 94 69 94 07 00 a8 94 &a0f3 80 a8 bc 9c bc 9c ac 9c ac 8c 9c 8c 9c 8c ac 4c &a103 ac 4c 9c 8c 9c 8c ac 9c bc ac 9c 6c 9c ac bc 94 &a113 00 33 8c ac 9c 8c ac 9c 69 96 a9 96 a9 96 e9 bc &a123 69 96 a9 83 a9 7c a9 94 a9 bc a9 bc a9 bc a9 96 &a133 a9 96 a9 bc ac 9c ac 9c 8c 9c bc 8c ac 8c 9c 8c &a143 9c 8c dc bc ac 9c ac 9c 6c 9c ac 9c bc 00 bd ; scenery_sprite_3c (SCENERY_WOOD_RIGHT) &a152 00 ac 9c ac 9c a9 17 03 96 83 96 05 03 a9 96 ac &a162 9c ac 8c 9c 8c ac 8c 9c 4c ac dc ac bc 9c 8c ac &a172 4c ac 8c 9c 8c ac 9c ac 94 00 2a ac 9c bc 43 bc &a182 96 bc 96 bc 96 a9 43 96 a9 96 a9 96 bc 96 bc 43 &a192 a9 96 83 bc 96 bc 96 a9 96 83 96 a9 96 a9 bc 9c &a1a2 ac 8c 9c 8c ac 4c 9c bc ac 9c ac 9c ac 9c 8c ac &a1b2 4c ac 8c 9c 8c 9c ac 9c bc 00 40 ac 9c ac 96 a8 &a1c2 06 00 68 96 83 bc 68 04 00 05 28 c0 a8 bc c3 7c &a1d2 ac bc 9c ac 9c 4c 9c 8c 9c 8c 9c ac 8c ac 8c 9c &a1e2 4c 9c 8c ac 8c 9c 8c ac 9c ac 9c ac 94 00 34 ac &a1f2 8c ac 9c ac 94 08 00 a8 bc 94 0f 00 a8 d6 ac bc &a202 9c ac 9c 4c ac 9c 4c 5c ac 8c ac 4c 9c 8c 9c 8c &a212 ac 8c 9c ac 9c ac bc 68 00 2b ac 9c bc 83 bc 0a &a222 00 94 a8 bc 0e 00 94 ac 9c ac 9c ac 9c ac 9c 8c &a232 ac 8c 9c 05 0c 9c 8c ac 4c 5c ac 9c ac 9c ac 9c &a242 bc a8 00 2a ac 96 83 96 83 69 d4 04 00 a8 c0 a8 &a252 0d 00 bc ac 9c ac 9c ac 9c ac 9c 8c ac 5c ac 8c &a262 ac 9c 4c 9c 8c 9c bc ac 9c ac 9c 7c 68 00 2b ac &a272 9c a9 43 a9 56 ad 9e ad 94 15 00 bc 9c bc 8c bc &a282 8c bc 9c ac bc 9c 6c 9c ac 9c ac 4c 9c 4c ac 8c &a292 9c 8c 5c a8 00 27 8c 9c a9 56 43 bc 9e 8f 9e bc &a2a2 17 00 68 80 a8 5c ac 9c ac 9c ac 9c ac 9c ac 9c &a2b2 ac 9c 8c ac 8c 9c 8c ac bc 00 25 bc 83 96 c3 96 &a2c2 bc 8f 9e 8f bc 1b 00 a8 9c ac 9c ac 9c ac 9c a8 &a2d2 9c a8 bc 8c 9c 8c ac 8c 9c 8c bc a8 00 23 9c ac &a2e2 96 43 a9 56 bc 9e a8 1c 00 a8 80 a8 9c a8 9c a8 &a2f2 05 00 a8 5c 68 80 a8 00 1b 9c bc 96 e8 00 06 9c &a302 a8 00 84 ; scenery_sprite_3d (SCENERY_HUGE_GUN_EMPLACEMENT_MIDDLE) &a305 00 5d 09 0c ee bf bc 0e 3f bc 04 3d 9d 0a 0c 6e &a315 06 3f be 7f be bd 05 3f bc 94 00 1b 7f 5d 0b 0c &a325 bc 0a 3f 04 3e bc 08 3f dd 06 0c 06 3f be fc 06 &a335 3f bc bf ac 94 00 1b 07 3f 5d 06 0c bc 0a 3f bc &a345 04 0c 0d 3f 04 1d 05 3f be 7d bc bd be 05 3f bc &a355 cc ac 94 00 1e 0d 3f 5d bc ae 05 3f bc bd ec 05 &a365 0c ae 1a 3f bd 04 3f bc 05 0c ac 94 00 19 0e 3f &a375 be ac 4c 04 3e bc 7f 9d 07 0c ae 1e 3f bc cc 5d &a385 bf bc 7d 54 00 18 0c 3f be bd 9d cc bc 0a 3f 5d &a395 05 0c 6e 0a 3f be 05 3f be 04 3f be bd ff bc 4c &a3a5 04 3f bc 04 3f 7d 54 00 23 0a 3f be bd 7f 7e 5c &a3b5 bc 0c 3f dd 05 0c 0a 3f 7c be 7c fe bc bd 05 3f &a3c5 bc 9d 05 3f bc 06 3f bd bc c0 94 00 24 08 3f be &a3d5 bd 04 3f bc 0d 3f be 07 3f 9d 04 0c ae 08 3f bd &a3e5 06 3c 07 3f bc 06 3f bc 06 3f bd 94 40 94 bc 7d &a3f5 04 14 c0 04 14 05 00 d4 80 d4 00 2f 06 3f be bd &a405 7f 04 3e bc 0e 3f be bd 08 3f 5d 4c ae 07 3f 7c &a415 7d bc bd bc 06 3f bc 06 3f bc bf bc bd bc be 7f &a425 7c bd 04 3f bc ff bc 54 ac 4c bc bd d4 ac bc 4c &a435 ac 4c bc ac 94 00 3b 04 3f be bd 04 3f bc 10 3f &a445 be 7c bd 13 3f bc bd 06 3f 7d 04 3f bc 06 3f bc &a455 bf bc bf 7c bf 7d 06 3f bc 04 3f bc 7f 9d 8c bc &a465 bf fc bf bc dd 4c bc 4c ac 94 00 35 7f be bd 7f &a475 04 3e bc 0f 3f bd ff bd 12 3f bd 0e 3f bc 06 3f &a485 bc bf bc bf 7c be 08 3f bc 09 3f bd be fc be bd &a495 05 3f bc 5d bc a8 80 94 00 2e be bd 04 3f bc 39 &a4a5 3f bc 06 3f bc bf bc bf fc bd 07 3f bc 0b 3f fd &a4b5 07 3f bc 7f bc 7d 9d bd 94 00 21 4c 04 3e bc 09 &a4c5 3f 5d 04 0c ae 27 3f be a9 bc 06 3f bc bf bc bf &a4d5 7c 09 3f bc 15 3f bc 07 3f bc 94 00 22 4c bc 10 &a4e5 3f 9d 04 0c ae 23 3f be a9 43 bc 8c 05 3f bc bf &a4f5 bc be bc bd 09 3f bc 15 3f bc 07 3f bc bf bc 00 &a505 24 6c 13 3d 05 2c 25 3d 7c 4c ae ff bc bf fe 0a &a515 3f bc 15 3d bc be 06 3f bc bf bc 00 1c 4c ae 09 &a525 3f bc bd bc bd bc bd bc bd bc bd bc 04 0c bc bd &a535 bc bd bc bd bc bd bc bd bc 17 3f be bd bf bc cc &a545 ae 7f bc bf bc bf 7c 09 3f bc be 14 3f bc bf bd &a555 be 04 3f bc bf bc 00 3b 05 0c ee 04 3f bc be bc &a565 be bc be bc be bc be bc 04 0c bc be bc be bc be &a575 bc be bc be bc 15 3f be bd 7f be bc 8c 9d 4c ae &a585 bf bc bf bc bf 7c 09 3f bc bf bd be 07 3f 7c bd &a595 ac 7c 05 3f bc ff bd be 7f bc bf bc 00 46 0b 1c &a5a5 0d 3e 09 1c 19 3e bd bf bd 7c be 04 3f 9d 8c be &a5b5 bd bf bc bf 7c 09 3f bc ff bd 7e 04 3f bc bf 7c &a5c5 8c bc ae 04 3f bc 05 3f bd be bc be bc 00 31 20 &a5d5 00 a8 be ff bc 13 3f bc 04 3f bd bc 06 3f 9d bc &a5e5 bf bc bf 7c 09 3f bc 04 3f bc bf bc ff bc bf 7c &a5f5 8c bc 4c ff bc 07 3f bc bf bc 00 2d 22 00 a8 be &a605 bf bc 13 3f bc 06 3f bc 06 3f bc bf bc bf 7c 09 &a615 3f bc 04 3f bc bf bc ff bc bf 7c bf bc cc ae bf &a625 bc 07 3f bc bf bc 00 2c 23 00 bc 8c bc ae 0c 3f &a635 be 7c ff bc 7f 7e 7f bc 4c 04 3f bc bf fd 0a 3f &a645 bc 04 3f bc bf bc ff bc bf 7c bf bc bf 9d cc bc &a655 ae 06 3f bc bf bc 00 30 23 00 bc 8c bc 4c ee ff &a665 fe 05 3c ff bc be bd be bd 7f bc cc ae 7f bc bf &a675 bc bd bc be 09 3f bc 04 3f bc bf bc ff bc bf 7c &a685 bf bc 04 3f 9d bc 4c ee 7f bc bf bc 00 36 23 00 &a695 bc 8c bc 04 0c 5c 08 3c fd be 7d be bd 04 3f bc &a6a5 05 0c bf bc bf bc bf 7c 09 3f bc 04 3f bc bf bc &a6b5 ff bc bf 7c bf bc 05 3f bc 07 0c bc 8c bc 00 32 &a6c5 23 00 bc 8c 0b 3c fd bf be bd ff bc 06 3f bc 06 &a6d5 0c bc bf bc bf 7c 09 3f bc 04 3f bc bf bc ff bc &a6e5 bf 7c bf bc ff 6e bc 07 0c bc 8c bc 00 2e 23 00 &a6f5 bc bf 0b 3c fe bf bd be ff bc 8c ae 04 3f bc 06 &a705 0c bc 8c bc bf 7c 09 3f bc 04 3f bc bf bc ff bc &a715 bf 7c bf bc 7f ae 4c bc 07 0c bc 8c bc 00 31 23 &a725 00 bc bf bc 04 3f 7d 08 3c fe ac 7e bd 9c 8c ff &a735 bc be bf 9d cc bc 8c bc bf 7c 8c 07 3f bc bd 04 &a745 3f bc bf bc ff bc bf 7c ae bc 05 0c bc cc 5d 7f &a755 bc bf bc 00 36 23 00 bc bf bc 08 3f fd 05 3c cc &a765 bc ac be bd 9c 7f bc bd bc be bc bd 8c bc 8c bc &a775 be bc ac 8c ae ff be bc 7d be 04 3f bc bf bc ae &a785 7f bc bf 7c 8c bc 05 0c bc 07 3f bc bf bc 00 3b &a795 23 00 bc bf bc 0d 3f bd 7c 7f 9d bc 4c 6c ae bf &a7a5 bc bf bd 7c 7f bc bf dc cc ae bf bd 04 3f bc 04 &a7b5 3f bc be ac 8c ae 8c bc bf 7c 9c bc 4c 5d bf bc &a7c5 07 3f bc bf bc 00 37 21 00 94 bd 7f bc 13 3f bc &a7d5 bf 9d cc ae bc bf bd bf bd be bf bc bf bc bf 7c &a7e5 9d cc 6e ff bc 04 3f bc bf bc cc bc be 05 3c 9c &a7f5 bf be bf bc 4c 6e ff bc bd 94 00 35 20 14 bc 04 &a805 3e bc 13 3e bc ff 9d 4c bc ae 05 3f bc bf bc bf &a815 7c ff 5d 4c ae bf bc 04 3f bc bf bc cc bc bd 7c &a825 ac bc 7d bc 7f bc bf 9d 05 0c bc ae bc 00 33 0c &a835 3f 0b 3e 04 3f 0b 3e 14 3f bd be ff 9d bc 4c 04 &a845 3f bc bf bc bf 7c 07 3f 9d bf bc bf bc 7e 6c 04 &a855 0c bc bf 7c 9d bc ff bd bf bc 04 3f 9d 9c bd bc &a865 8c bc 00 35 0c 3f bc bf bc bf bc bf bc bf bc bf &a875 bc 04 3f bc bf bc bf bc bf bc bf bc bf bc 16 3f &a885 bd be 7f bc bf 9d 8c ff bc bf bc bf 7c 09 3f bc &a895 bf bc 05 3f 9d 4c 7c 7e 7c 05 3f bc ff be bd 7f &a8a5 bc 8c bc 00 41 0c 3f 0b 3d 04 3f 0b 3d 18 3f bd &a8b5 be bc 06 3f bc bf bc bf 7c 09 3f bc bd 08 3f 5d &a8c5 04 0c bf be bf bd 7f bc bf be bd 04 3f bc 9d bc &a8d5 00 2d 3c 3d bc e9 bc 06 3f bc bf fd 0a 3f bc 0c &a8e5 3e dc bc 5c fe bc bd 06 3f 7c 00 1a 3d 3f bd 96 &a8f5 83 bc 06 3f bc bf bc bd bc be 09 3f bc 0b 3f be &a905 bc 7d bf dd 4c bc ae 05 3f bd bc bd 94 00 23 3f &a915 3f bd bc 06 3f bc bf bc bf 7c 09 3f bc 0b 3f bd &a925 09 3f bc 5d 05 3f bc bf bc 00 9c ; scenery_sprite_3e (SCENERY_HUGE_GUN_EMPLACEMENT_RIGHT) &a930 00 7d bc 3d 3f bc 06 3f bc bf bc ae 7c 09 3f bc &a940 0c 3f bc 06 3f be a8 00 18 bf ae bc fe 08 3f bd &a950 be ff be bd 2b 3f bc 06 3f bc bf bc 9d 7c ae 08 &a960 3f bc 0c 3f bc 04 3f be a8 00 22 05 0c bc 07 3f &a970 be bf be fc bd 04 3f 8c ae 26 3f bc 06 3f bc bf &a980 bc bf 7c cc 6e 04 3f bc 0c 3f bc 7f be a8 00 25 &a990 05 0c ec bc 05 3f be bd ff bd 04 3f 04 0c ae 23 &a9a0 3f bc 06 3f bc bf bc be bc bd bf 06 0c ae bf bc &a9b0 0c 3f bc be a8 00 27 08 0c bc fe bd 0c 3f 9d 05 &a9c0 0c ee 1e 3f bc 06 3f bc 08 3f 06 0c bc 8c ae 09 &a9d0 3f be bc 00 1e 07 0c 9d ff bc 0e 3e 0a 1c 1c 3e &a9e0 bc 06 3e bc 09 3e 05 1c bc 04 1c 06 3e ac 8c bc &a9f0 00 1d cc 5d 05 3f be bd 10 3f 9d 08 0c bc 10 00 &aa00 a8 07 16 a8 80 bc ff bc 07 3f bc 04 3f bc 06 3f &aa10 be bf fe bf be bf bc 4c bc 00 29 4c 09 3f bc 13 &aa20 3f 05 0c 9c a8 14 00 a8 be 7f bd 94 bc ff bc 07 &aa30 3f bc 04 3f bc 06 3f bd bf fd bf bd bf bc bf 9d &aa40 bc 00 28 8c 9d 09 3f bc 15 3d ac bc a8 18 00 a8 &aa50 be 7f bd be 7f bc 07 3f bc 04 3f bc 0e 3f bc 7f &aa60 bc 00 20 0b 3f bc 14 3d bc a8 1c 00 a8 be 7f bd &aa70 be bc 07 3f bc 04 3f bc 06 3f bc bf fc bf bc bf &aa80 bc 7f bc 00 22 0b 3f bc 14 3f bc 1f 00 bc be 7f &aa90 bc 07 3f bc 04 3f bc 06 3f bd bf fd bf bd bf bc &aaa0 7f bc 00 1f 0b 3f bc 14 3f bc 1f 00 bc bf bd be &aab0 bc 07 3f bc 04 3f bc 0e 3f bc 7f bc 00 1a 0b 3f &aac0 bc 14 3f bc 1f 00 bc 8c 9c bd bc 07 3f bc 04 3f &aad0 bc 0e 3f bc bf be a8 00 1b 8c ae 08 3f be bd 08 &aae0 3f 6e 0a 3f bc 1f 00 bc bd 7f bc 8c ae 05 3f bc &aaf0 04 3f bc 06 3f bc bf fc bf bc bf 7c 00 25 4c ae &ab00 05 3f be bc bd 09 3f 9d 4c ae 8c ae 05 3f 8c bc &ab10 1d 00 94 bd 7f be ac bc cc ae ff bc 04 3f bc 06 &ab20 3f bd bf fd bf bd bf bc bf bd bc 00 2f 9d 04 0c &ab30 7f bd 7f bd be 09 3f 9d 05 0c ee 4c bc 1b 00 94 &ab40 bd 7f be ac 4c bc 05 0c 6e bc 04 3f bc 0e 3f bc &ab50 7f bc bd 94 00 29 7f 05 0c 6e 7f bc be 09 3f 5d &ab60 08 0c bc 19 00 94 bd 7f be a8 bc 9d 4c bc 07 0c &ab70 bc 8c ae 7f bc 06 3f bc bf fc bf bc bf bc 7f bc &ab80 bf bc 54 00 2f 04 3f 9d 05 0c ae bc bf bd be 0a &ab90 3f 9d 06 0c bc 15 00 94 07 29 94 80 bc 7f 9d bc &aba0 07 0c bc cc ae bc 0e 3f bc 7f bc bd ff bd 94 00 &abb0 2c 06 3f 05 0c bc 7f bc 7d bc be bf be 09 3d bc &abc0 9c bc 04 00 94 bc 09 3d ec 19 3d 06 2c 17 3d bc &abd0 c0 7c 94 00 24 06 3f 5d cc bc 8c bf bc ff 7c 0a &abe0 3f bc bf bd d4 bd bf bc 09 3f cc 6e 19 3f 5d cc &abf0 04 2e 12 3f bc bd 94 bc ac bc 8c ac 94 00 2a 08 &ac00 3f 9d 4c bc 4c bc 05 3f bd 09 3f bc 7f fc 7f bc &ac10 8c 08 3f 9d 07 0c 6e 17 3f dd 06 0c ee 0b 3f bd &ac20 7f bd be 9d bc cc ac 94 00 2b 0a 3f 8c bc 4c bc &ac30 0f 3f bc 7f fc 7f bc cc ae 07 3e 0a 1c 08 3e 08 &ac40 3f 0a 3e 09 1c fe a8 7e 09 3f bc bf 9d cc bc 94 &ac50 00 28 0b 3f bc 4c bc 0f 3f bc 7f fc 7f bc 9d cc &ac60 bc 11 00 bc 4c bc c0 a8 be 06 3f bc 18 00 a8 be &ac70 07 3f bc ff 4c bc 8c bc 00 28 0b 3f bc 4c bc 0f &ac80 3f bc 7f fc 7f bc 7f 9d 8c bc 0f 00 94 ac bc 4c &ac90 ac 94 c0 bc ac be 04 3f bc 1a 00 a8 be 05 3f bc &aca0 04 3f 9d bc 8c bc 00 2e 0b 3f bc 7f bc 0f 3f bc &acb0 7f fc 7f bc 04 3f 7c 54 40 94 bc a9 fc ac fd 7f &acc0 bc 9d 4c fc 94 bc bf 7c ff bc 1b 00 bc 05 3f bc &acd0 05 3f bc bf bc 00 2f 8c ae 09 3f bc 7f bc 0f 3f &ace0 bc 7f fc ae bf bc 04 3f 7c 40 a8 bc bf bc 83 bc &acf0 9c bc 6d bc ff bc 7e 9c bc a8 40 bc bf 7c ff bc &ad00 1b 00 bc 8c 04 3f bc 05 3f bc bf bc 00 37 cc 08 &ad10 3f bc 7f bc 09 3f 8c ae 04 3f bc 7f fc 4c bc ae &ad20 ff 7c c0 bc bf bc 83 bc bf bc 4f bc 6e be b8 b0 &ad30 b5 ba bc c0 bc bf 7c ff bc 1b 00 bc 4c ff bc 05 &ad40 3f bc bf bc 00 38 04 0c ae 06 3f bc 7f bc 09 3f &ad50 9d 4c 6e bf bc 7f fc bf 8c bc 8c 6e bf 7c 40 94 &ad60 bc ae bc 83 bc be bc ad bc f8 70 b5 ba bc 04 00 &ad70 bc bf 7c ff bc 1b 00 bc 04 0c ae bc 05 3f bc a8 &ad80 00 3c ff 5d 8c ae 04 3f bc 7f bc 0b 3f 04 0c bc &ad90 7f fc 7f bc 04 0c 7c 68 80 bc 8c bc 96 bc ae bc &ada0 9e b8 04 30 b5 ba bc 05 00 bc bf 7c ff bc 1b 00 &adb0 bc bf 04 0c bc ae 04 3f bc 54 00 3a 06 3f 5d ae &adc0 7f bc 7f bc ae 0c 3f 4c bc 4c fc 7f bc bf cc 7c &add0 04 00 7c be bc 8c 7c 04 30 b5 ba bc 06 00 bc ae &ade0 7c ff bc 1b 00 7c dc 8c bc 8c 04 3f bc bf bc 00 &adf0 35 ae 0a 3f bc 7f bc 8c ae 0c 3f 8c bc 4c fc 7f &ae00 bc 7f 4c 7c c0 94 bc ad 9c 5d bc b8 f0 b5 ba bc &ae10 07 00 bc 8c 7c ff bc 1d 00 bc bd 4c bc ac 9c be &ae20 bd bf bc a8 00 35 4c 09 3f bc 7f bc cc 0c 3f bc &ae30 4c fc 7f bc ff 8c 7c 80 94 a8 80 bc 9e bc be bf &ae40 bc f0 b5 ba bc 08 00 e8 bc ff bc 1b 00 94 bd 7f &ae50 4c bc 8c bc 80 68 00 32 9d 4c 6e 06 3f bc 7f bc &ae60 9d cc ae 0a 3f bc bf 9d fc 7f bc ff 9d 7c a8 c0 &ae70 bc 8f fc bf bd b4 b5 ba bc 0c 00 bc ff bc 1b 00 &ae80 bc 05 3f bc 8c bc a8 00 31 bf dd 04 0c ee bc ae &ae90 bf bc ff cc ae 08 3f bc be a8 c0 a8 be bc 04 3f &aea0 7c 04 00 bc 8f bc 80 a8 bc be bd bc a8 0d 00 bc &aeb0 fe bc 1b 00 bc 05 3e bc a8 00 32 04 3f 04 1d cc &aec0 bc 8c 9c 08 28 05 3c 04 28 07 00 06 28 80 a8 94 &aed0 40 e8 c0 68 00 1b 08 3f 5d 8c bc a8 09 00 bc ff &aee0 bc 00 0d 0b 3f bc 07 00 bc e9 bc bf bc bd bc 40 &aef0 d4 00 10 0a 3f be bc bd 94 c0 54 bc c3 bc be bc &af00 be ec 4c bc 00 13 09 3f be bc bd bf bc c0 bc be &af10 bc 96 fd 04 3f 9d 4c ae bc 00 15 09 3f 7c 7f bc &af20 94 bc 7d 0c 3f 9d 8c bc 00 0f 09 3f 7c 7f bc bf &af30 bc ae 0d 3f 7e bc 00 0e 09 3f 7c 7f bc be bc 4c &af40 6e 04 3f fe e8 00 0f 8c ae 07 3f 7c 7f bc 80 bc &af50 4c dc ac 7c 7e bc 00 11 ac 5c ee ff bd bc be bf &af60 bc 80 e8 40 bc bf 7c 7e bc 00 13 8c ac bc 68 5c &af70 be 6e ac bc be a8 06 00 68 7c 7e bc 00 13 cc bc &af80 c0 bc 5c 68 0a 00 7c 7f bc 00 0d 04 0c bc 94 10 &af90 00 7c 7f bc 94 00 0c 5c 68 12 00 7c 7e 7c 00 89 ; scenery_sprite_3f (SCENERY_CINEMA_RUINS) &afa0 00 2b 00 07 14 00 06 2b 00 bc 4f bc 4f bc 6d bc &afb0 6d bc 6d bc 00 0f 04 14 80 d4 c0 05 14 80 0f 14 &afc0 80 0a 14 bc 4f bc 5e bc 5e bc 5e bc 9e 8f 7c bd &afd0 bc a9 bc a9 94 00 21 fd 96 bc 43 bc 69 bc 43 bc &afe0 83 96 bc bd 0d 3f be bd be 05 3f bd 04 3c 4f 7c &aff0 d6 83 d6 83 bc 8f 7c bf bc 83 bc 96 bc a9 bc 00 &b000 2a bf be 04 3d 96 bc 56 bc 96 fd be 0d 3f be bc &b010 ff bc 05 3f bd fc 4f 7c 9e bc a9 83 bc 9e bc 83 &b020 bc 8f 7c 7f bd bc 83 bc 68 00 2a 05 3f be bd 09 &b030 3f bc be 0a 3f bd 06 3f bd 05 3f bd 7c 4f 7c 56 &b040 bc 05 16 bc 8f 7c bf bd be bc 96 bc 00 23 04 3e &b050 bf bd 09 3f 7d bf bd 17 3f 7c 4f 7c 83 06 16 83 &b060 bc 8f 7c be bc 83 bc 00 1b cf bc ed bc 12 3d bc &b070 0f 3d 7c 4f 7c 83 bc 5e bc 9e bc 83 bc 8f 7c 83 &b080 bc 96 bc 00 1c 4f 9e ad 8f 9e 8f bc 6d bc 1f 3e &b090 7c 4f 7c 08 16 bc 8f 7c 96 bc 83 bc 06 14 00 1b &b0a0 4f ad 9e 4f ad bc 4f bc 9e bc 1c 1c 8c 7c 4f 7c &b0b0 83 06 16 83 bc 8f 7c 83 bc 96 bc 83 bc 96 bc 83 &b0c0 bc 00 23 cf bc 4f 9e bc 4f bc 8f 1d 3c 8c 7c 4f &b0d0 7c 83 bc 4f bc 8f bc 83 bc 8f 7c 96 bd bf bc 96 &b0e0 bc 83 bc 96 bc 68 00 25 cf bc 8f ad 5e 4f bc 8f &b0f0 1d 3c 8c 7c 4f 7c 08 29 bc 8f 7c bf be bd be bf &b100 bc 96 bc 00 1d cf bc cf bc 4f bc 8f 1d 3c 8c 7c &b110 4f 04 3c a9 56 a9 fc 8f 7c ff 7e bd 7f bd 94 00 &b120 1c cf bc 4f 9e bc 4f bc 8f 1d 3c 8c 7c 4f 7c 56 &b130 ad 8f 7c 56 bc 8f 7c bd be bd 7f bd 04 3f bd bc &b140 94 00 22 8f 9e 8f bc 8f ad 8f bc 8f 9e ad 8f 1d &b150 3c 8c 7c 4f bc 5e bc 9e bc 69 56 bc 8f 7c bf bd &b160 be bf 08 3e 94 bc 94 00 26 ad 8f ad bc cf bc 4f &b170 bc 8f bc 1d 1c 7c 4f 7c 04 16 69 9e bc 9e 8f 7c &b180 04 3f bc 04 1c 4c 5c 8c 7c 04 14 00 24 cf bc cf &b190 bc 4f bc 8f bc 83 bc 83 bc 83 bc 83 7c bd 05 3f &b1a0 be bd 06 3f bc 05 3f 7c 4f bc 4f bc 8f ad 7c 56 &b1b0 bc 8f 7c 04 3f 04 3e bc 4c 7c 8c 7c a9 bc 83 bc &b1c0 00 35 cf bc cf bc 4f bc 8f bc a9 bc 96 bc a9 bc &b1d0 96 bc 05 3f 7d bf bd be 7f fe bf bc 7e 7f 7c 4f &b1e0 7c a9 bc 4f bc 69 bc 4f 7c be bd bf be bc 09 1c &b1f0 7c 83 bc 96 bc 54 80 d4 00 38 cf bc 8f 9e 8f bc &b200 4f bc 9e bc 83 bc 83 bc 83 bc 7f bd 7e 07 3f bc &b210 a9 bc 83 bc a9 bc 83 bc 7e 7c 4f 7c 43 a9 9e 7c &b220 96 83 bc 8f 7c 7f be ac 8c 6c 7e 05 3f be 7d bc &b230 83 bc 83 bc a9 bc 83 bc 00 40 cf bc 4f ad bc 4f &b240 bc 8f bc bd bc 96 7d bf bc 07 3f 05 3c 83 bc 96 &b250 bc 96 bc 96 bc 83 fc 4f 7c 83 bc ad 56 a9 83 96 &b260 ad 8f 7c bf bc 8c 9c 7d bc 4c 6c 7e 04 3f bc 96 &b270 bc a9 bc 83 bc 96 bc 00 3f 4f 9e ad cf bc 4f bc &b280 8f bc 05 3e bc 05 3e 10 3c 96 fc 4f fc 06 29 bc &b290 4f 7c bf bd 9c ec 4c 7c ac 9c bc bf bd be ff bc &b2a0 04 28 00 2b 8f 9e ad 04 0f bc 4f bc 8f bc 04 1c &b2b0 7c 05 1c 14 3c 4f 7c 83 bc 6d bc ad bc 83 bc 8f &b2c0 7c ff 04 3d 04 1c bd bf 7d bf bd be bc a8 00 2c &b2d0 4f bc 04 0f bc 8f bc 4f 1d 3c ac 7c 4f 7c 96 06 &b2e0 29 96 ad 8f 7c 04 3f bc 09 2c bc 7f bc 00 1f cf &b2f0 bc cf bc 4f bc 8f 1d 3c 8c 7c 4f bc 4f bc 6d bc &b300 6d bc 4f 7c 04 3f bc 4c bc 04 3d bc 8c bc 7f bc &b310 00 23 cf bc cf bc 8f 9e ad 8f 1d 3c 8c 7c 4f bc &b320 4f bc 4f bc 4f bc 4f bc 04 3f be bc 4c bc bf bd &b330 7e bc 8c bc bf be a8 00 27 cf bc 8f 6d bc 8f ad &b340 9e 8f 1d 3c 8c 7c 4f bc 8f 7c 06 29 bc 8f bc be &b350 bf be bd be bc 7d bc be a8 40 bc e8 00 25 cf bc &b360 cf bc 4f bc ad 1d 3c 8c 7c 4f bc 8f 7c a9 7c e9 &b370 bc 8f bc 83 bc be ff 7e a8 00 1d 4f bc cf ad bc &b380 4f bc 8f bc 0a 1c 8c 12 1c 7c 4f bc 8f 7c 83 69 &b390 83 bc 83 bc 8f bc 96 bc 83 bc 68 00 22 cf bc cf &b3a0 bc 5e fd 1d 3f 7c 4f bc 8f ad bc 6d bc 6d bc ad &b3b0 8f bc 83 bc 96 bc 00 1b de bc 0f 3d bc 0a 3d bc &b3c0 0b 3d 7c 4f bc 4f bc 4f bc 4f bc 4f bc 96 bc 80 &b3d0 bc 40 94 00 1d ff be 05 3f bd be bf be 07 3f bd &b3e0 08 3f bc 07 3f be 04 3f 7c 4f bc 4f bc 4f bc 4f &b3f0 bc 4f bc a8 40 bc 40 bc 00 25 bc be bd bf fe 7f &b400 be 7d 0f 3f 7d bf bd ff bc bf bc 04 3f fc 4f bc &b410 4f bc 4f bc 4f bc 4f bc d4 bc 54 bc 04 14 00 26 &b420 bc 83 bc a9 bc 83 bc be bd 05 3f be 12 3f be 7d &b430 04 3f 04 3c 4f bc 4f bc 4f bc 4f bc 4f bc 94 05 &b440 00 bc 00 24 bc 96 bc 96 bc 96 bc 96 bc 04 3e bc &b450 12 3e bc 06 3e 05 3c 4f bc 4f bc 4f bc 4f bc 4f &b460 bc 83 bc a9 bc 40 bc 00 25 2b 00 bc 4f bc 4f bc &b470 4f bc 4f bc 4f bc 96 bc 96 bc 00 13 2b 00 bc 5e &b480 bc 5e bc 09 28 00 8b ; scenery_sprite_40 (SCENERY_WATER_TANK) &b487 00 54 00 03 5e 6d bc d4 13 00 bc ad bc d4 0b 00 &b497 d4 bc ad bc d4 0b 00 d4 bc ad bc d4 0b 00 d4 bc &b4a7 6d bc 00 20 40 e8 de ed d4 0d 00 bc 8f bc cf 0b &b4b7 2d 04 3c 8f bc cf 0b 2d 04 3c 8f bc cf 0a 2d 05 &b4c7 3c 4f bc 00 21 07 00 bc 8f bc a8 de ed d4 07 00 &b4d7 bc 8f bc 04 0f 08 0e cf fc 8f bc 4f 0a 0e cf fc &b4e7 8f bc 8f 8e 4f 07 0e cf 04 3c 4f 7c 00 29 04 2d &b4f7 d4 bc 8f bc 04 00 bc 8f bc de ed 04 14 bc 8f bc &b507 8e 0d 0c 8e fc 8f bc 0f 0c ac 7c 8f bc 0f 0c fc &b517 4f 7c 00 26 e8 bc 04 1e 8f ed 54 bc 8f bc c0 68 &b527 bc 8f ad fc 8c bc 10 0c 7c 8c bc 10 0c 7c 8c bc &b537 0f 0c ac 7c 8c 8e bc 00 25 07 00 bc 8f bc a8 bc &b547 de 8f 04 2d 54 bc 4f fc 8c bc 10 0c 7c 8c bc 10 &b557 0c 7c 8c bc 10 0c 7c 4c 7c 00 22 07 00 bc 8f bc &b567 04 00 bc 8f bc e8 de 4f fc 8c bc 10 0c 7c 8c bc &b577 10 0c 7c 8c bc 10 0c 7c 4c bc 00 21 08 2d 8f bc &b587 04 14 bc 8f bc 05 00 bc cf 7c 8c bc 10 0c 7c 8c &b597 bc 10 0c 7c 8c bc 10 0c 7c 4c bc 54 00 22 07 28 &b5a7 bc 8f 06 1e 8f 07 2d cf 7c 8c bc 10 0c 7c 8c bc &b5b7 10 0c 7c 8c bc 10 0c 7c 4c bc bf bc 00 20 07 00 &b5c7 bc 8f bc 04 00 bc 8f bc 05 28 bc cf 7c 8c bc 10 &b5d7 0c 7c 8c bc 10 0c 7c 8c bc 10 0c 7c 4c bc bf bc &b5e7 00 a4 ; scenery_sprite_41 (SCENERY_JAZZ_RUINS) &b5e9 00 bc a9 bc a9 04 14 05 2d 07 14 07 00 05 14 00 &b5f9 10 bc 83 bc 96 bc 83 bc 0d 0f 05 2d bc a9 bc 83 &b609 bc 83 bc ed bc 00 16 6d cf 6d 9e 11 0f bc 96 bc &b619 96 bc 6d 9e 8f 9e ad bc 94 00 14 08 0f bc 07 0f &b629 11 1e ad 5e 8f bc a9 94 a9 bc a9 bc 00 13 08 0f &b639 ad 9e ad cf 9e bd bc 08 3f be ff be bf bc be bc &b649 9e 4f bc 83 bc a9 bc 96 bc 00 1d 9e 08 0f ad 9e &b659 4f bc fd 83 bf 83 ba b5 ba b5 bf 04 3d bc 04 3f &b669 bc 4f 6d bc 83 bc 83 bc 00 1f 8f 6d 9e 6d 07 0f &b679 bc ff 83 bf 83 ba b5 ba b5 bf 7d bc bd bc 04 3f &b689 bc 04 0f bc a9 bc 96 bc 00 20 04 0f ad 08 0f bc &b699 ff 83 bf 83 bf 83 bf 83 bf 7c 7d bc 04 3f bc 4f &b6a9 bc a9 bc 83 bc 00 1d 09 0f 9e cf bc ff 83 bf 83 &b6b9 bf 83 bf 83 bf bc bf bd be bc 04 3f bc 4f bc 83 &b6c9 bc a8 00 1d 8f 9e bc de 4f bc 04 0f ad 7e 09 3f &b6d9 bc bd be bf bc 04 3f bc 4f bc 68 00 19 a9 bc 83 &b6e9 bc 83 bc a9 bc 08 0f ad be ff 04 3e bc 7e 7c 04 &b6f9 3e bc 8f ad bc 00 1a 96 bc 96 bc a8 bc 96 bc 04 &b709 28 06 1e fc 0f 1e bc a8 00 93 ; data4 ; FFFF1000 FFFF1000 1FFA # Loaded into bank 5 at &8400 - &a3f9 ; title_screen_font_data &8400 00 fe f2 c2 c2 fe ; &00 : "0" &8406 00 00 fe f0 00 00 ; &01 : "1" &840c 00 f2 f2 d2 d2 de ; &02 : "2" &8412 00 c0 d2 d2 d2 fe ; &03 : "3" &8418 00 1e 10 fc f0 10 ; &04 : "4" &841e 00 de d2 d2 d2 f2 ; &05 : "5" &8424 00 fe e8 c8 c8 f8 ; &06 : "6" &842a 00 02 c2 f2 3e 0e ; &07 : "7" &8430 00 fe f2 d2 d2 fe ; &08 : "8" &8436 00 1e 12 12 f2 fe ; &09 : "9" &843c 00 ff f9 19 19 ff ; &0a : "A" &8442 00 ff f9 c9 cf f8 ; &0b : "B" &8448 00 ff f1 c1 c1 c0 ; &0c : "C" &844e 00 ff f1 c1 c3 fe ; &0d : "D" &8454 00 ff f9 c9 c9 c0 ; &0e : "E" &845a 00 ff f9 09 09 01 ; &0f : "F" &8460 00 ff f1 c1 cb fa ; &10 : "G" &8466 00 ff f8 08 08 ff ; &11 : "H" &846c 00 c1 ff f9 c1 00 ; &12 : "I" &8472 00 e0 c0 c0 f8 ff ; &13 : "J" &8478 00 ff f8 34 62 c1 ; &14 : "K" &847e 00 ff f8 c0 c0 c0 ; &15 : "L" &8484 00 ff f3 06 03 ff ; &16 : "M" &848a 00 ff f9 01 01 ff ; &17 : "N" &8490 00 ff f9 c1 c1 ff ; &18 : "O" &8496 00 ff f9 09 09 0f ; &19 : "P" &849c 00 ff f9 c1 61 bf ; &1a : "Q" &84a2 00 ff f9 09 39 cf ; &1b : "R" &84a8 00 cf c9 c9 c9 f9 ; &1c : "S" &84ae 00 03 f3 ff 03 03 ; &1d : "T" &84b4 00 ff f8 c0 c0 ff ; &1e : "U" &84ba 00 3f 78 e0 60 3f ; &1f : "V" &84c0 00 7f f8 20 e0 7f ; &20 : "W" &84c6 00 e7 3c 18 3c e7 ; &21 : "X" &84cc 00 3f 3c f0 30 3f ; &22 : "Y" &84d2 00 f1 d9 cd c7 c3 ; &23 : "Z" &84d8 34 34 34 34 34 34 ; &24 : "=" &84de 00 00 00 00 00 00 ; &25 : " " &84e4 7e c3 bd a5 c3 7e ; &26 : "(c)" &84ea 00 00 c0 c0 00 00 ; &27 : "." &84f0 00 18 18 18 18 18 ; &28 : "-" &84f6 00 30 18 0c 18 30 ; &29 : "^" &84fc 00 06 0c 18 30 60 ; &2a : "\" &8502 00 6e f3 d9 cd 7e ; &2b : "@" &8508 00 ff c1 c1 c1 c1 ; &2c : "[" &850e c0 c0 c0 c0 c0 c0 ; &2d : "_" &8514 00 00 36 76 00 00 ; &2e : ";" &851a 00 00 34 34 00 00 ; &2f : ":" &8520 00 c1 c1 c1 c1 ff ; &30 : "]" &8526 00 00 30 70 00 00 ; &31 : "," &852c 00 60 30 18 0c 06 ; &32 : "/" ; plot_title_screen_character # Called with X = character &8532 85 cd STA &cd ; text_pixel &8534 a9 06 LDA #&06 &8536 20 ef 85 JSR &85ef ; multiply_A_by_X &8539 a5 c5 LDA &c5 ; result_low &853b a4 c6 LDY &c6 ; result_high &853d 18 CLC &853e 69 00 ADC #&00 ; &8400 = title_screen_font_data &8540 90 01 BCC &8543 ; skip_page &8542 c8 INY ; skip_page &8543 8d 50 85 STA &8550 ; font_address_low &8546 98 TYA &8547 18 CLC &8548 69 84 ADC #&84 &854a 8d 51 85 STA &8551 ; font_address_high &854d a2 00 LDX #&00 ; plot_title_screen_character_column_loop &854f bd b9 16 LDA &16b9,X # actually LDA font_address,X &8552 85 cb STA &cb ; font_byte &8554 a0 07 LDY #&07 ; plot_title_screen_character_row_loop &8556 a9 00 LDA #&00 &8558 26 cb ROL &cb ; font_byte &855a 90 04 BCC &8560 ; set_pixel_value &855c a9 03 LDA #&03 # actually LDA text_colour &855e 25 cd AND &cd ; text_pixel ; set_pixel_value &8560 85 ca STA &ca ; pixel_value &8562 a5 cd LDA &cd ; text_pixel &8564 49 ff EOR #&ff &8566 31 ce AND (&ce),Y ; text_screen_address &8568 45 ca EOR &ca ; pixel_value &856a 91 ce STA (&ce),Y ; text_screen_address &856c 88 DEY &856d 10 e7 BPL &8556 ; plot_title_screen_character_row_loop &856f a5 cd LDA &cd ; text_pixel &8571 49 ff EOR #&ff &8573 85 cd STA &cd ; text_pixel &8575 10 0b BPL &8582 ; not_next_byte &8577 a5 ce LDA &ce ; text_screen_address_low &8579 18 CLC &857a 69 08 ADC #&08 &857c 85 ce STA &ce ; text_screen_address_low &857e 90 02 BCC &8582 ; skip_page &8580 e6 cf INC &cf ; text_screen_address_high ; skip_page ; not_next_byte &8582 e8 INX &8583 e0 06 CPX #&06 &8585 d0 c8 BNE &854f ; plot_title_screen_character_column_loop &8587 60 RTS ; clear_title_screen &8588 a9 13 LDA #&13 ; Wait for vertical retrace &858a 20 f4 ff JSR &fff4 ; OSBYTE &858d a9 40 LDA #&40 &858f 8d 96 85 STA &8596 ; wipe_address_high &8592 a2 00 LDX #&00 ; clear_title_screen_loop # Wipe &4000 - &7fff &8594 9e 00 40 STZ &4000,X *** # 65C02 opcode # actually STZ wipe_address,X &8597 e8 INX &8598 d0 fa BNE &8594 ; clear_title_screen_loop &859a ee 96 85 INC &8596 wipe_address_high &859d 10 f5 BPL &8594 ; clear_title_screen_loop &859f 60 RTS ; clear_part_of_title_screen &85a0 a9 40 LDA #&40 *** &85a2 85 cf STA &cf ; screen_address_high *** &85a4 64 ce STZ &ce ; screen_address_low *** # 65C02 opcode &85a6 a0 00 LDY #&00 *** &85a8 a9 00 LDA #&00 *** ; clear_part_of_display_title_screen *** &85aa 91 ce STA (&ce),Y ; screen_address *** # Wipe &4000 - &71ff &85ac c8 INY *** &85ad d0 fb BNE &85aa ; clear_part_of_display_title_screen *** &85af e6 cf INC &cf ; screen_address_high *** &85b1 a6 cf LDX &cf ; screen_address_high *** &85b3 e0 72 CPX #&72 *** &85b5 90 f3 BCC &85aa ; clear_part_of_display_title_screen *** &85b7 60 RTS *** ; plot_title_screen_text &85b8 86 c3 STX &c3 ; text_address_high &85ba 84 c2 STY &c2 ; text_address_low &85bc 20 a0 85 JSR &85a0 ; clear_part_of_title_screen *** &85bf a0 00 LDY #&00 ; plot_title_screen_text_loop &85c1 b1 c2 LDA (&c2),Y ; text_address # Get two bytes for screen address &85c3 85 ce STA &ce ; text_screen_address_low &85c5 c8 INY &85c6 b1 c2 LDA (&c2),Y ; text_address &85c8 85 cf STA &cf ; text_screen_address_high &85ca c8 INY &85cb b1 c2 LDA (&c2),Y ; text_address # Get byte for colour &85cd 8d 5d 85 STA &855d ; text_colour &85d0 a9 aa LDA #&aa &85d2 85 cd STA &cd ; text_pixel &85d4 20 dd 85 JSR &85dd; plot_title_screen_text_string_loop &85d7 c8 INY &85d8 c9 ff CMP #&ff # &ff indicates end of text &85da d0 e5 BNE &85c1 ; plot_title_screen_text_loop &85dc 60 RTS ; plot_title_screen_text_string_loop &85dd c8 INY &85de b1 c2 LDA (&c2),Y ; text_screen_address_high # Get byte for character &85e0 10 01 BPL &85e3 ; not_end_of_string # &fe indicates end of string, &ff end of text &85e2 60 RTS ; not_end_of_string &85e3 84 c1 STY &c1 ; text_offset &85e5 aa TAX &85e6 a5 cd LDA &cd ; text_pixel &85e8 20 32 85 JSR &8532 ; plot_title_screen_character &85eb a4 c1 LDY &c1 ; text_offset &85ed d0 ee BNE &85dd ; plot_title_screen_text_string_loop # Always branches ; multiply_A_by_X &85ef 85 c7 STA &c7 ; multiplicand &85f1 86 c8 STX &c8 ; multiplier_low &85f3 a9 00 LDA #&00 &85f5 85 c5 STA &c5 ; result_low &85f7 85 c6 STA &c6 ; result_high &85f9 85 c9 STA &c9 ; multiplier_high &85fb a0 08 LDY #&08 ; multiply_A_by_X_loop &85fd 46 c7 LSR &c7 ; multiplicand &85ff 90 0d BCC &860e ; consider_next_bit &8601 18 CLC &8602 a5 c8 LDA &c8 ; multiplier_low &8604 65 c5 ADC &c5 ; result_low &8606 85 c5 STA &c5 ; result_low &8608 a5 c9 LDA &c9 ; multiplier_high &860a 65 c6 ADC &c6 ; result_high &860c 85 c6 STA &c6 ; result_high ; consider_next_bit &860e 06 c8 ASL &c8 ; multiplier_low &8610 26 c9 ROL &c9 ; multiplier_high &8612 88 DEY &8613 d0 e8 BNE &85fd ; multiply_A_by_X_loop &8615 60 RTS ; define_controls &8616 a2 00 LDX #&00 &8618 86 c0 STX &c0 ; key_offset &861a e8 INX &861b 86 03 STX &03 ; unused # Unused variable &861d a2 8b LDX #&8b ; &8b91 = = define_controls_text &861f a0 91 LDY #&91 &8621 20 b8 85 JSR &85b8 ; plot_title_screen_text # Write "DEFINE CONTROLS" &8624 84 c1 STY &c1 ; text_offset ; define_controls_loop &8626 a4 c1 LDY &c1 ; text_offset &8628 20 c1 85 JSR &85c1 ; plot_title_screen_text_loop # Write next control &862b 84 c1 STY &c1 ; text_offset &862d 20 94 86 JSR &8694 ; get_keypress &8630 a4 c0 LDY &c0 ; key_offset &8632 c9 70 CMP #&70 ; ESCAPE &8634 d0 03 BNE &8639 ; not_escape &8636 4c 84 8c JMP &8c84 ; display_title_screen ; not_escape &8639 85 cc STA &cc ; keycode &863b aa TAX &863c 49 ff EOR #&ff &863e 99 5d 2f STA &2f5d,Y ; keys &8641 8a TXA ; keycode &8642 4a LSR A &8643 4a LSR A &8644 4a LSR A &8645 4a LSR A &8646 a2 06 LDX #&06 &8648 20 ef 85 JSR &85ef ; multiply_A_by_X &864b a5 cc LDA &cc ; keycode &864d 38 SEC &864e e5 c5 SBC &c5 ; result_low &8650 aa TAX # X = keycode - ((keycode DIV 16) * 6) &8651 bd 41 8b LDA &8b41,X ; key_translation_table &8654 30 20 BMI &8676 ; is_long_name &8656 aa TAX &8657 0a ASL A &8658 30 07 BMI &8661 ; is_function_key ; is_character # &00 - &32 writes character &865a a5 cd LDA &cd ; text_pixel &865c 20 32 85 JSR &8532 ; plot_title_screen_character &865f f0 29 BEQ &868a ; finished_writing_key # Always branches ; is_function_key # &40 - &49 writes F followed by number &8661 86 cc STX &cc ; keycode &8663 a2 0f LDX #&0f ; "F" &8665 a5 cd LDA &cd ; text_pixel &8667 20 32 85 JSR &8532 ; plot_title_screen_character &866a a5 cc LDA &cc ; keycode &866c 29 3f AND #&3f &866e aa TAX &866f a5 cd LDA &cd ; text_pixel &8671 20 32 85 JSR &8532 ; plot_title_screen_character &8674 f0 14 BEQ &868a ; finished_writing_key # Always branches ; is_long_name # &80 - &ff writes long character name &8676 29 7f AND #&7f &8678 85 cc STA &cc ; keycode ; write_key_loop &867a a4 cc LDY &cc ; keycode &867c be ce 8a LDX &8ace,Y ; key_names &867f 30 09 BMI &868a ; finished_writing_key &8681 a5 cd LDA &cd ; text_pixel &8683 20 32 85 JSR &8532 ; plot_title_screen_character &8686 e6 cc INC &cc ; keycode &8688 d0 f0 BNE &867a ; write_key_loop ; finished_writing_key &868a a4 c1 LDY &c1 ; text_offset &868c e6 c0 INC &c0 ; key_offset &868e a5 c0 LDA &c0 ; key_offset &8690 c9 08 CMP #&08 &8692 90 92 BCC &8626 ; define_controls_loop ; get_keypress &8694 a2 ff LDX #&ff ; SHIFT # Wait for SHIFT, CTRL and other keys to be released &8696 20 c1 86 JSR &86c1 ; check_for_title_screen_keypress &8699 f0 f9 BEQ &8694 ; get_keypress &869b a2 fe LDX #&fe ; CTRL &869d 20 c1 86 JSR &86c1 ; check_for_title_screen_keypress &86a0 f0 f2 BEQ &8694 ; get_keypress &86a2 a5 ec LDA &ec ; os_most_recently_pressed_key &86a4 d0 ee BNE &8694 ; get_keypress ; get_keypress_loop &86a6 a2 ff LDX #&ff ; SHIFT &86a8 20 c1 86 JSR &86c1 ; check_for_title_screen_keypress &86ab d0 03 BNE &86b0 ; not_shift &86ad a9 00 LDA #&00 # Return zero to indicate SHIFT pressed &86af 60 RTS ; not_shift &86b0 a2 fe LDX #&fe ; CTRL &86b2 20 c1 86 JSR &86c1 ; check_for_title_screen_keypress &86b5 d0 03 BNE &86ba ; not_ctrl &86b7 a9 01 LDA #&01 # Return one to indicate CTRL pressed &86b9 60 RTS ; not_ctrl &86ba a5 ec LDA &ec ; os_most_recently_pressed_key &86bc f0 e8 BEQ &86a6 ; get_keypress_loop &86be 29 7f AND #&7f # Return key pressed &86c0 60 RTS ; check_for_title_screen_keypress &86c1 a0 ff LDY #&ff &86c3 a9 81 LDA #&81 ; Scan for a particular key &86c5 20 f4 ff JSR &fff4 ; OSBYTE &86c8 e0 ff CPX #&ff &86ca 60 RTS ; check_for_high_score *** # &86cb - &a3f7 is extra code and data &86cb 64 7e STZ &7e ; rank # 65C02 opcode ; check_for_high_score_rank_loop &86cd a5 7e LDA &7e ; rank &86cf a2 06 LDX #&06 &86d1 20 ef 85 JSR &85ef ; multiply_A_by_X &86d4 a6 c5 LDX &c5 ; result_low &86d6 a0 00 LDY #&00 ; check_for_high_score_digit_loop &86d8 bd 2c 89 LDA &892c,X ; high_scores &86db d9 6d 33 CMP &336d,Y ; game_over_text + &14 &86de 90 0a BCC &86ea ; new_high_score &86e0 d0 43 BNE &8725 ; consider_next_rank &86e2 c8 INY &86e3 e8 INX &86e4 c0 06 CPY #&06 &86e6 90 f0 BCC &86d8 ; check_for_high_score_digit_loop &86e8 80 3b BRA &8725 ; consider_next_rank # 65C02 opcode ; new_high_score &86ea a5 7e LDA &7e ; rank &86ec c9 07 CMP #&07 &86ee f0 0f BEQ &86ff ; finished_shuffling_scores &86f0 a2 29 LDX #&29 ; (6 * 7) - 1 ; shuffle_scores_loop &86f2 bd 2c 89 LDA &892c,X ; high_scores &86f5 9d 32 89 STA &8932,X ; high_scores + 6 &86f8 e4 c5 CPX &c5 ; result_low &86fa f0 03 BEQ &86ff ; finished_shuffling_scores &86fc ca DEX &86fd 80 f3 BRA &86f2 ; shuffle_scores_loop # 65C02 opcode ; finished_shuffling_scores &86ff a6 c5 LDX &c5 ; result_low &8701 a0 00 LDY #&00 ; insert_score_loop &8703 b9 6d 33 LDA &336d,Y ; game_over_text + &14 &8706 9d 2c 89 STA &892c,X ; high_scores &8709 e8 INX &870a c8 INY &870b c0 06 CPY #&06 &870d 90 f4 BCC &8703 ; insert_score_loop &870f a9 12 LDA #&12 &8711 a6 7e LDX &7e ; rank &8713 20 ef 85 JSR &85ef ; multiply_A_by_X &8716 a9 5c LDA #&5c ; &895c = high_score_names &8718 18 CLC &8719 65 c5 ADC &c5 ; result_low &871b 85 80 STA &80 ; name_address_low &871d a9 89 LDA #&89 &871f 65 c6 ADC &c6 ; result_high &8721 85 81 STA &81 ; name_address_high &8723 80 10 BRA &8735 ; well_done_screen # 65C02 opcode ; consider_next_rank &8725 e6 7e INC &7e ; rank &8727 a5 7e LDA &7e ; rank &8729 c9 08 CMP #&08 &872b 90 a0 BCC &86cd ; check_for_high_score_rank_loop &872d 4c bd a2 JMP &a2bd ; start_title_screen_music # Leave with carry set to indicate score didn't rank ; leave_with_carry_clear &8730 20 bd a2 JSR &a2bd ; start_title_screen_music &8733 18 CLC # Leave with carry clear to indicate score ranked &8734 60 RTS ; well_done_screen &8735 20 e8 a2 JSR &a2e8 ; start_high_score_music &8738 a5 7e LDA &7e ; rank &873a c9 07 CMP #&07 &873c f0 0f BEQ &874d ; finished_shuffling_names &873e a2 7d LDX #&7d ; (18 * 7) - 1 ; shuffle_names_loop &8740 bd 5c 89 LDA &895c,X ; high_score_names &8743 9d 6e 89 STA &896e,X ; high_score_names + 18 &8746 e4 c5 CPX &c5 ; result_low &8748 f0 03 BEQ &874d ; finished_shuffling_names &874a ca DEX &874b 80 f3 BRA &8740 ; shuffle_names_loop # 65C02 opcode ; finished_shuffling_names &874d a0 11 LDY #&11 &874f a9 25 LDA #&25 ; " " ; wipe_name_loop &8751 91 80 STA (&80),Y ; name_address &8753 88 DEY &8754 10 fb BPL &8751 ; wipe_name_loop &8756 a2 8a LDX #&8a ; &8a06 = well_done_text &8758 a0 06 LDY #&06 &875a 20 b8 85 JSR &85b8 ; plot_title_screen_text &875d a9 ff LDA #&ff &875f 85 7f STA &7f ; name_offset ; enter_name_loop &8761 20 94 86 JSR &8694 ; get_keypress &8764 c9 49 CMP #&49 ; ENTER &8766 f0 c8 BEQ &8730 ; leave_with_carry_clear &8768 c9 59 CMP #&59 ; DELETE &876a d0 14 BNE &8780 ; not_delete ; delete_pressed &876c a9 25 LDA #&25 &876e a6 7f LDX &7f ; name_offset &8770 30 ef BMI &8761 ; enter_name_loop &8772 20 b1 87 JSR &87b1 ; add_character_to_name &8775 a6 7f LDX &7f ; name_offset &8777 ca DEX &8778 e0 fe CPX #&fe &877a f0 e5 BEQ &8761 ; enter_name_loop &877c 86 7f STX &7f ; name_offset &877e 80 e1 BRA &8761 ; enter_name_loop # 65C02 opcode ; not_delete &8780 85 cc STA &7f ; name_offset &8782 4a LSR A &8783 4a LSR A &8784 4a LSR A &8785 4a LSR A &8786 a2 06 LDX #&06 &8788 20 ef 85 JSR &85ef ; multiply_A_by_X &878b a5 cc LDA &cc ; keycode &878d c9 62 CMP #&62 ; SPACE &878f d0 04 BNE &8795 ; not_space &8791 a9 25 LDA #&25 ; " " &8793 80 0e BRA &87a3 ; consider_adding_character # 65C02 opcode ; not_space &8795 38 SEC &8796 e5 c5 SBC &c5 ; result_low &8798 aa TAX &8799 bd 41 8b LDA &8b41,X ; key_translation_table &879c 30 c3 BMI &8761 ; enter_name_loop &879e aa TAX &879f 0a ASL A &87a0 30 bf BMI &8761 ; enter_name_loop &87a2 8a TXA ; consider_adding_character &87a3 a6 7f LDX &7f ; name_offset &87a5 e8 INX &87a6 e0 12 CPX #&12 &87a8 b0 b7 BCS &8761 ; enter_name_loop &87aa 86 7f STX &7f ; name_offset &87ac 20 b1 87 JSR &87b1 ; add_character_to_name &87af 80 b0 BRA &8761 ; enter_name_loop # 65C02 opcode ; add_character_to_name &87b1 48 PHA ; character &87b2 a4 7f LDY &7f ; name_offset &87b4 91 80 STA (&80),Y ; name_address &87b6 a9 18 LDA #&18 &87b8 20 ef 85 JSR &85ef ; multiply_A_by_X &87bb a5 c5 LDA &c5 ; result_low &87bd 18 CLC &87be 69 e0 ADC #&e0 &87c0 85 ce STA &ce ; text_screen_address_low &87c2 a5 c6 LDA &c6 ; result_high &87c4 69 60 ADC #&60 &87c6 85 cf STA &cf ; text_screen_address_high &87c8 a9 aa LDA #&aa &87ca fa PLX ; character # 65C02 opcode &87cb 4c 32 85 JMP &8532 ; plot_title_screen_character ; display_high_scores &87ce 20 a0 85 JSR &85a0 ; clear_part_of_title_screen &87d1 a9 42 LDA #&42 &87d3 85 cf STA &cf ; text_screen_address_high &87d5 85 7b STA &7b ; row_screen_address_high &87d7 a9 90 LDA #&90 &87d9 85 ce STA &ce ; text_screen_address_low &87db 85 7a STA &7a ; row_screen_address_low &87dd 64 7e STZ &7e ; score_offset # 65C02 opcode &87df 64 7d STZ &7d ; name_offset # 65C02 opcode &87e1 a9 07 LDA #&07 &87e3 85 78 STA &78 ; ranks_remaining ; display_high_scores_rank_loop &87e5 a9 3c LDA #&3c ; CC &87e7 8d 5d 85 STA &855d ; text_colour &87ea a9 05 LDA #&05 &87ec 85 77 STA &77 ; characters_remaining ; write_high_score_loop &87ee a4 7e LDY &7e ; score_offset &87f0 b9 2c 89 LDA &892c,Y ; high_scores &87f3 e6 7e INC &7e ; score_offset &87f5 aa TAX &87f6 a9 aa LDA #&aa &87f8 20 32 85 JSR &8532 ; plot_title_screen_character &87fb c6 77 DEC &77 ; characters_remaining &87fd 10 ef BPL &87ee ; write_high_score_loop &87ff a2 27 LDX #&27 ; "." &8801 a9 aa LDA #&aa &8803 20 32 85 JSR &8532 ; plot_title_screen_character &8806 a2 27 LDX #&27 ; "." &8808 a9 aa LDA #&aa &880a 20 32 85 JSR &8532 ; plot_title_screen_character &880d a9 11 LDA #&11 &880f 85 77 STA &77 ; characters_remaining &8811 a9 03 LDA #&03 &8813 8d 5d 85 STA &855d ; text_colour ; write_high_score_name_loop &8816 a4 7d LDY &7d ; name_offset &8818 b9 5c 89 LDA &895c,Y ; high_score_names &881b e6 7d INC &7d ; name_offset &881d aa TAX &881e a9 aa LDA #&aa &8820 20 32 85 JSR &8532 ; plot_title_screen_character &8823 c6 77 DEC &77 ; characters_remaining &8825 10 ef BPL &8816 ; write_high_score_name_loop &8827 a5 7b LDA &7b ; row_screen_address_high &8829 18 CLC &882a 69 05 ADC #&05 &882c 85 cf STA &cf ; text_screen_address_high &882e 85 7b STA &7b ; row_screen_address_high &8830 a5 7a LDA &7a ; row_screen_address_low &8832 85 ce STA &ce ; text_screen_address_low &8834 c6 78 DEC &78 ; ranks_remaining &8836 10 ad BPL &87e5 ; display_high_scores_rank_loop &8838 60 RTS ; scroll_scrolltext &8839 a9 74 LDA #&74 &883b 85 c6 STA &c6 ; source_address_high &883d 85 c8 STA &c8 ; target_address_high &883f a9 88 LDA #&88 ; &7488 &8841 85 c5 STA &c5 ; source_address_low &8843 a9 80 LDA #&80 ; &7480 &8845 85 c7 STA &c7 ; target_address_low &8847 a2 4e LDX #&4e ; scroll_scrolltext_column_loop &8849 a0 07 LDY #&07 ; scroll_scrolltext_byte_loop &884b b1 c5 LDA (&c5),Y ; source_address &884d 91 c7 STA (&c7),Y ; target_address &884f 88 DEY &8850 10 f9 BPL &884b ; scroll_scrolltext_byte_loop &8852 a5 c5 LDA &c5 ; source_address_low &8854 18 CLC &8855 69 08 ADC #&08 &8857 85 c5 STA &c5 ; source_address_low &8859 90 02 BCC &885d ; skip_page_source &885b e6 c6 INC &c6 ; source_address_high ; skip_page_source &885d a5 c7 LDA &c7 ; target_address_low &885f 18 CLC &8860 69 08 ADC #&08 &8862 85 c7 STA &c7 ; target_address_low &8864 90 02 BCC &8868 ; skip_page_target &8866 e6 c8 INC &c8 ; target_address_high ; skip_page_targeth &8868 ca DEX &8869 10 de BPL &8849 ; scroll_scrolltext_column_loop &886b 60 RTS ; update_scrolltext &886c 20 39 88 JSR &8839 ; scroll_scrolltext &886f a4 8b LDY &8b ; scrolltext_buffer_offset &8871 a2 00 LDX #&00 ; copy_column_of_buffer_to_screen_loop &8873 b9 ee 89 LDA &89ee,Y ; scrolltext_buffer &8876 9d f8 76 STA &76f8,X &8879 c8 INY &887a e8 INX &887b e0 08 CPX #&08 &887d 90 f4 BCC &8873 ; copy_column_of_buffer_to_screen_loop &887f 84 8b STY &8b ; scrolltext_buffer_offset &8881 c0 18 CPY #&18 &8883 90 2f BCC &88b4 ; leave ; initialise_scrolltext_buffer &8885 64 8b STZ &8b ; scrolltext_buffer_offset # 65C02 opcode &8887 a9 ee LDA #&ee ; &89ee = scrolltext_buffer &8889 85 ce STA &ce ; text_screen_address_low &888b a9 89 LDA #&89 &888d 85 cf STA &cf ; text_screen_address_high &888f a9 3c LDA #&3c ; CC &8891 8d 5d 85 STA &855d ; text_colour &8894 b2 89 LDA (&89) ; scrolltext_address # 65C02 opcode &8896 aa TAX &8897 a9 aa LDA #&aa &8899 20 32 85 JSR &8532 ; plot_title_screen_character &889c a5 89 LDA &89 ; scrolltext_address_low &889e a6 8a LDX &8a ; scrolltext_address_low &88a0 1a INC A # 65C02 opcode &88a1 d0 01 BNE &88a4 ; skip_page &88a3 e8 INX ; skip_page &88a4 e0 92 CPX #&92 ; &925e = end_of_scrolltext &88a6 d0 08 BNE &88b0 ; not_end_of_scrolltext &88a8 c9 5e CMP #&5e &88aa d0 04 BNE &88b0 ; not_end_of_scrolltext &88ac a2 8f LDX #&8f ; &8fc1 = scrolltext_text &88ae a9 c1 LDA #&c1 ; not_end_of_scrolltext &88b0 86 8a STX &8a ; scrolltext_address_low &88b2 85 89 STA &89 ; scrolltext_address_low ; leave &88b4 60 RTS ; title_screen_irq1_handler &88b5 da PHX # 65C02 opcode &88b6 5a PHY # 65C02 opcode &88b7 a5 fc LDA &fc ; irq_accumulator &88b9 48 PHA &88ba ad 4d fe LDA &fe4d ; System VIA interrupt flag register &88bd 29 82 AND #&82 &88bf c9 82 CMP #&82 # &80 set if an interrupt occurred, &02 if v-sync &88c1 d0 61 BNE &8924 ; leave_title_screen_irq1_handler ; is_vsync &88c3 c6 8c DEC &8c ; scrolltext_cooldown &88c5 10 5d BPL &8924 ; leave_title_screen_irq1_handler &88c7 a5 c5 LDA &c5 ; result_low # Also used for source_address_low &88c9 48 PHA &88ca a5 c6 LDA &c6 ; result_high # Also used for source_address_high &88cc 48 PHA &88cd a5 c7 LDA &c7 ; multiplicand # Also used for target_address_low &88cf 48 PHA &88d0 a5 c8 LDA &c8 ; multiplier_low # Also used for target_address_high &88d2 48 PHA &88d3 a5 cd LDA &cd ; text_pixel &88d5 48 PHA &88d6 a5 cb LDA &cb ; font_byte &88d8 48 PHA &88d9 a5 ca LDA &ca ; pixel_value &88db 48 PHA &88dc a5 ce LDA &ce ; text_screen_address_low # Also used for screen_address_low &88de 48 PHA &88df a5 cf LDA &cf ; text_screen_address_high # Also used for screen_address_high &88e1 48 PHA &88e2 a5 c9 LDA &c9 ; multiplier_high &88e4 48 PHA &88e5 ad 50 85 LDA &8550 ; font_address_low &88e8 48 PHA &88e9 ad 51 85 LDA &8551 ; font_address_high &88ec 48 PHA &88ed ad 5d 85 LDA &855d ; text_colour &88f0 48 PHA &88f1 a9 03 LDA #&03 &88f3 85 8c STA &8c ; scrolltext_cooldown &88f5 20 6c 88 JSR &886c ; update_scrolltext &88f8 c6 79 DEC &79 ; title_screen_cooldown &88fa 68 PLA &88fb 8d 5d 85 STA &855d ; text_colour &88fe 68 PLA &88ff 8d 51 85 STA &8551 ; font_address_high &8902 68 PLA &8903 8d 50 85 STA &8550 ; font_address_low &8906 68 PLA &8907 85 c9 STA &c9 ; multiplier_high &8909 68 PLA &890a 85 cf STA &cf ; text_screen_address_high &890c 68 PLA &890d 85 ce STA &ce ; text_screen_address_low &890f 68 PLA &8910 85 ca STA &ca ; pixel_value &8912 68 PLA &8913 85 cb STA &cb ; font_byte &8915 68 PLA &8916 85 cd STA &cd ; text_pixel &8918 68 PLA &8919 85 c8 STA &c8 ; multiplier_low &891b 68 PLA &891c 85 c7 STA &c7 ; multiplicand &891e 68 PLA &891f 85 c6 STA &c6 ; result_high &8921 68 PLA &8922 85 c5 STA &c5 ; result_low ; leave_title_screen_irq1_handler &8924 68 PLA &8925 85 fc STA &fc ; irq_accumulator &8927 7a PLY # 65C02 opcode &8928 fa PLX # 65C02 opcode &8929 6c ec 89 JMP (&89ec) ; previous_irq1_vector_for_title_screeen ; high_scores &892c 00 01 00 00 00 00 ; 010000 &8932 00 00 09 00 00 00 ; 009000 &8938 00 00 08 00 00 00 ; 008000 &893e 00 00 07 00 00 00 ; 007000 &8944 00 00 06 00 00 00 ; 006000 &894a 00 00 05 00 00 00 ; 005000 &8950 00 00 04 00 00 00 ; 004000 &8956 00 00 03 00 00 00 ; 003000 ; high_score_names &895c 1c 1e 19 0e 1b 12 18 1b 25 25 1c 18 0f 1d 20 0a 1b 0e ; "SUPERIOR SOFTWARE" &896e 1c 1e 19 0e 1b 12 18 1b 25 25 1c 18 0f 1d 20 0a 1b 0e ; "SUPERIOR SOFTWARE" &8980 1c 1e 19 0e 1b 12 18 1b 25 25 1c 18 0f 1d 20 0a 1b 0e ; "SUPERIOR SOFTWARE" &8992 1c 1e 19 0e 1b 12 18 1b 25 25 1c 18 0f 1d 20 0a 1b 0e ; "SUPERIOR SOFTWARE" &89a4 1c 1e 19 0e 1b 12 18 1b 25 25 1c 18 0f 1d 20 0a 1b 0e ; "SUPERIOR SOFTWARE" &89b6 1c 1e 19 0e 1b 12 18 1b 25 25 1c 18 0f 1d 20 0a 1b 0e ; "SUPERIOR SOFTWARE" &89c8 1c 1e 19 0e 1b 12 18 1b 25 25 1c 18 0f 1d 20 0a 1b 0e ; "SUPERIOR SOFTWARE" &89da 1c 1e 19 0e 1b 12 18 1b 25 25 1c 18 0f 1d 20 0a 1b 0e ; "SUPERIOR SOFTWARE" ; previous_irq1_vector_for_title_screen_low &89ec 00 ; previous_irq1_vector_for_title_screen_high &89ed 00 ; scrolltext_buffer &89ee 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &89fe 00 00 00 00 00 00 00 00 ; well_done_text &8a06 50 4d 03 ; at &4d50, colour &03 (RR) &8a09 20 0e 15 15 25 0d 18 17 0e ; "WELL DONE" &8a12 fe ; end of string &8a13 c0 51 33 ; at &51c0, colour &33 (MM) &8a16 19 15 0e 0a 1c 0e 25 0e 17 1d 0e 1b 25 22 18 1e ; "PLEASE ENTER YOUR NAME" &8a26 1b 25 17 0a 16 0e &8a2c ff ; end of text ; title_screen_text &8a2d 28 43 3e ; at &4328, colour &3e (WC) &8a30 1c 1d 1b 22 14 0e 1b 1c 25 1b 1e 17 ; "STRYKERS RUN" &8a3c fe ; end of string &8a3d a8 45 0c ; at &45a8, colour &0c (GG) &8a40 24 24 24 24 24 24 24 24 24 24 24 24 ; "============" &8a4c fe ; end of string &8a4d e0 4a 0f ; at &4ae0, colour &0f (YY) &8a50 18 19 1d 12 18 17 1c ; "OPTIONS" &8a57 fe ; end of string &8a58 90 4f 03 ; at &4f90, colour &03 (RR) &8a5b 01 25 1c 1d 0a 1b 1d 25 10 0a 16 0e ; "1 START GAME" &8a67 fe ; end of string &8a68 70 54 33 ; at &5470, colour &33 (MM) &8a6b 02 25 0d 0e 0f 12 17 0e 25 0c 18 17 1d 1b 18 15 ; "2 DEFINE CONTROLS" &8a7b 1c &8a7c fe ; end of string &8a7d 50 59 30 ; at &5950, colour &30 (BB) &8a80 03 25 1b 0e 0a 0d 25 12 17 1c 1d 1b 1e 0c 1d 12 ; "3 READ INSTRUCTIONS" &8a90 18 17 1c &8a93 fe ; end of string &8a94 c0 5e 3c ; at &5ec0, colour &3c (CC) &8a97 04 25 16 1e 1c 12 0c 25 18 0f 0f ; "4 MUSIC OFF" &8aa2 fe ; end of string &8aa3 c0 63 03 ; at &63c0, colour &03 (RR) &8aa6 05 25 1c 18 1e 17 0d 25 18 0f 0f ; "5 SOUND OFF" &8ab1 fe ; end of string &8ab2 20 7c 3e ; at &7c20, colour &3e (WC) &8ab5 26 25 1c 1e 19 0e 1b 12 18 1b 25 1c 18 0f 1d 20 ; "(c) SUPERIOR SOFTWARE 1986" &8ac5 0a 1b 0e 25 01 09 08 06 &8acd ff ; end of text ; key_names &8ace 1c 11 12 0f 1d fe ; &80 : "SHIFT" &8ad4 0c 1d 1b 15 fe ; &86 : "CTRL" &8ad9 15 0e 0f 1d 25 0c 1e 1b 1c 18 1b fe ; &8b : "LEFT CURSOR" &8ae5 0c 0a 19 1c 25 15 18 0c 14 fe ; &97 : "CAPS LOCK" &8aef 1b 0e 1d 1e 1b 17 fe ; &a1 : "RETURN" &8af6 1c 11 12 0f 1d 25 15 18 0c 14 fe ; &a8 : "SHIFT LOCK" &8b01 0d 0e 15 0e 1d 0e fe ; &b3 : "DELETE" &8b08 0d 18 20 17 25 0c 1e 1b 1c 18 1b fe ; &ba : "DOWN CURSOR" &8b14 1e 19 25 0c 1e 1b 1c 18 1b fe ; &c6 : "UP CURSOR" &8b1e 1d 0a 0b fe ; &d0 : "TAB" &8b22 1c 19 0a 0c 0e fe ; &d4 : "SPACE" &8b28 0c 18 19 22 fe ; &da : "COPY" &8b2d 0e 1c 0c 0a 19 0e fe ; &df : "ESCAPE" &8b34 1b 12 10 11 1d 25 0c 1e 1b 1c 18 1b fe ; &e6 : "RIGHT CURSOR" ; key_translation_table ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &8b41 80 86 00 00 00 00 00 00 00 00 1a 03 04 05 44 08 ; &00 &8b51 47 28 29 8b 40 20 0e 1d 07 12 09 00 2d ba 01 02 ; &10 &8b61 0d 1b 06 1e 18 19 2c c6 97 0a 21 0f 22 13 14 2b ; &20 &8b71 2f a1 a8 1c 0c 10 11 17 15 2e 30 b3 d0 23 d4 1f ; &30 &8b81 0b 16 31 27 32 da df 41 42 43 45 46 48 49 2a e6 ; &40 ; define_controls_text &8b91 e0 42 03 ; at &42e0, colour &03 (RR) &8b94 0d 0e 0f 12 17 0e 25 0c 18 17 1d 1b 18 15 1c ; "DEFINE CONTROLS" &8ba3 ff ; end of text &8ba4 80 47 0f ; at &4780, colour &0f (YY) &8ba7 13 1e 16 19 32 16 18 1f 0e 25 1e 19 2f 25 ; "JUMP/MOVE UP: " &8bb5 ff ; end of text &8bb6 80 4c 0c ; at &4c80, colour &0c (GG) &8bb9 0d 1e 0c 14 2f 25 ; "DUCK: " &8bbf ff ; end of text &8bc0 80 51 33 ; at &5180, colour &33 (MM) &8bc3 16 18 1f 0e 25 1b 12 10 11 1d 2f 25 ; "MOVE RIGHT: " &8bcf ff ; end of text &8bd0 80 56 03 ; at &5680, colour &03 (RR) &8bd3 16 18 1f 0e 25 15 0e 0f 1d 2f 25 ; "MOVE LEFT: " &8bde ff ; end of text &8bdf 80 5b 3f ; at &5b80, colour &3f (WW) &8be2 0f 12 1b 0e 25 15 0a 1c 0e 1b 2f 25 ; "FIRE LASER: " &8bee ff ; end of text &8bef 80 60 03 ; at &6080, colour &03 (RR) &8bf2 10 1b 0e 17 0a 0d 0e 32 0b 18 16 0b 2f 25 ; "GRENADE/BOMB: " &8c00 ff ; end of text &8c01 80 65 0c ; at &6580, colour &0c (GG) &8c04 0e 17 1d 0e 1b 32 15 0e 0a 1f 0e 2f 25 ; "ENTER/LEAVE: " &8c11 ff ; end of text &8c12 80 6a 3e ; at &6a80, colour &3e (WC) &8c15 19 0a 1e 1c 0e 25 10 0a 16 0e 2f 25 ; "PAUSE GAME: " &8c21 ff ; end of text ; title_screen &8c22 20 88 85 JSR &8588 ; clear_title_screen &8c25 a9 0c LDA #&0c ; R12: Displayed screen start address register (high) &8c27 8d 00 fe STA &fe00 ; video register number &8c2a a9 08 LDA #&08 &8c2c 8d 01 fe STA &fe01 ; video register value &8c2f a9 07 LDA #&07 ; R7: Vertical sync position &8c31 8d 00 fe STA &fe00 ; video register number &8c34 a9 20 LDA #&20 &8c36 8d 01 fe STA &fe01 ; video register value &8c39 a9 06 LDA #&06 ; R6: Vertical displayed register &8c3b 8d 00 fe STA &fe00 ; video register number &8c3e a9 19 LDA #&19 &8c40 8d 01 fe STA &fe01 ; video register value &8c43 a9 06 LDA #&06 ; MOVER_TYPE_HELICOPTER &8c45 85 a1 STA &a1 ; firing_mover_type &8c47 a9 08 LDA #&08 &8c49 85 8c STA &8c ; scrolltext_cooldown &8c4b a9 07 LDA #&07 # Set colour 0 to black &8c4d 8d 21 fe STA &fe21 ; video ULA palette register &8c50 a9 61 LDA #&61 # Set colour 6 to cyan &8c52 8d 21 fe STA &fe21 ; video ULA palette register &8c55 a9 c1 LDA #&c1 ; &8fc1 = scrolltext_text &8c57 85 89 STA &89 ; scrolltext_address_low &8c59 a9 8f LDA #&8f &8c5b 85 8a STA &8a ; scrolltext_address_high &8c5d 20 85 88 JSR &8885 ; initialise_scrolltext_buffer &8c60 20 6c 88 JSR &886c ; update_scrolltext &8c63 ad 04 02 LDA &0204 ; irq1_vector_low &8c66 8d ec 89 STA &89ec ; previous_irq1_vector_for_title_screen_low &8c69 ad 05 02 LDA &0205 ; irq1_vector_high &8c6c 8d ed 89 STA &89ed ; previous_irq1_vector_for_title_screen_high &8c6f 78 SEI &8c70 a9 b5 LDA #&b5 ; &88b5 = title_screen_irq1_handler &8c72 8d 04 02 STA &0204 ; irq1_vector_low &8c75 a9 88 LDA #&88 &8c77 8d 05 02 STA &0205 ; irq1_vector_high &8c7a 58 CLI &8c7b 20 cb 86 JSR &86cb ; check_for_high_score # Returns carry clear if score ranked &8c7e a9 7f LDA #&7f &8c80 85 79 STA &79 ; title_screen_cooldown &8c82 90 52 BCC &8cd6 ; high_score_screen ; display_title_screen &8c84 a9 7f LDA #&7f &8c86 85 79 STA &79 ; title_screen_cooldown &8c88 a2 8a LDX #&8a ; &8a2d = title_screen_text &8c8a a0 2d LDY #&2d &8c8c 20 b8 85 JSR &85b8 ; plot_title_screen_text ; title_screen_loop &8c8f a2 ad LDX #&ad ; C # If the C, H, R, I and S keys are pressed, &8c91 20 c1 86 JSR &86c1 ; check_for_title_screen_keypress &8c94 d0 21 BNE &8cb7 ; enable_observer_mode &8c96 a2 ab LDX #&ab ; H &8c98 20 c1 86 JSR &86c1 ; check_for_title_screen_keypress &8c9b d0 1a BNE &8cb7 ; enable_observer_mode &8c9d a2 cc LDX #&cc ; R &8c9f 20 c1 86 JSR &86c1 ; check_for_title_screen_keypress &8ca2 d0 13 BNE &8cb7 ; enable_observer_mode &8ca4 a2 da LDX #&da ; I &8ca6 20 c1 86 JSR &86c1 ; check_for_title_screen_keypress &8ca9 d0 0c BNE &8cb7 ; enable_observer_mode &8cab a2 ae LDX #&ae ; S &8cad 20 c1 86 JSR &86c1 ; check_for_title_screen_keypress &8cb0 d0 05 BNE &8cb7 ; enable_observer_mode ; enable_observer_mode &8cb2 a9 05 LDA #&05 &8cb4 8d b1 21 STA &21b1 ; observer_mode # Set to non-zero to enable observer mode ; skip_observer_mode &8cb7 a5 79 LDA &79 ; title_screen_cooldown &8cb9 30 17 BMI &8cd2 ; to_high_score_screen &8cbb a5 ec LDA &ec ; os_most_recently_pressed_key &8cbd c9 30 CMP #&30 ; "1" &8cbf 90 1e BCC &8cdf ; not_one_or_two &8cc1 38 SEC &8cc2 e9 30 SBC #&30 ; "1" &8cc4 d0 03 BNE &8cc9 ; not_one &8cc6 4c 67 8d JMP &8d67 ; prepare_to_start_game ; not_one &8cc9 c9 02 CMP #&02 ; "2" &8ccb b0 c2 BCS &8c8f ; title_screen_loop &8ccd 20 16 86 JSR &8616 ; define_controls &8cd0 80 b2 BRA &8c84 ; display_title_screen # 65C02 opcode ; to_high_score_screen &8cd2 a9 50 LDA #&50 &8cd4 85 79 STA &79 ; title_screen_cooldown ; high_score_screen &8cd6 20 ce 87 JSR &87ce ; display_high_scores ; high_score_screen_loop &8cd9 a5 79 LDA &79 ; title_screen_cooldown &8cdb 10 fc BPL &8cd9 ; high_score_screen_loop &8cdd 80 a5 BRA &8c84 ; display_title_screen # 65C02 opcode ; not_one_or_two &8cdf c9 11 CMP #&11 ; "3" &8ce1 f0 63 BEQ &8d46 ; read_instructions &8ce3 c9 13 CMP #&13 ; "5" &8ce5 f0 3a BEQ &8d21 ; toggle_sound &8ce7 c9 12 CMP #&12 ; "4" &8ce9 d0 a4 BNE &8c8f ; title_screen_loop ; toggle_music &8ceb ad a0 8a LDA &8aa0 ; title_screen_text + &73 &8cee c9 17 CMP #&17 ; "F" &8cf0 f0 1e BEQ &8d10 ; enable_music ; disable_music &8cf2 a9 17 LDA #&17 ; "N" &8cf4 8d a0 8a STA &8aa0 ; title_screen_text + &73 &8cf7 a9 25 LDA #&25 ; " " &8cf9 8d a1 8a STA &8aa1 ; title_screen_text + &74 &8cfc 8d 99 2f STA &2f99 ; music_muted &8cff a9 0d LDA #&0d ; Disable event &8d01 a2 05 LDX #&05 ; interval timer crossing zero &8d03 20 f4 ff JSR &fff4 ; OSBYTE &8d06 a9 0f LDA #&0f ; Flush buffers &8d08 a2 00 LDX #&00 ; flush all buffers &8d0a 20 f4 ff JSR &fff4 ; OSBYTE &8d0d 4c 84 8c JMP &8c84 ; display_title_screen ; enable_music &8d10 a9 0f LDA #&0f ; "F" &8d12 8d a0 8a STA &8aa0 ; title_screen_text + &73 &8d15 8d a1 8a STA &8aa1 ; title_screen_text + &74 &8d18 9c 99 2f STZ &2f99 ; music_muted &8d1b 20 bd a2 JSR &a2bd ; start_title_screen_music &8d1e 4c 84 8c JMP &8c84 ; display_title_screen ; toggle_sound &8d21 ad af 8a LDA &8aaf ; title_screen_text + &82 &8d24 c9 17 CMP #&17 &8d26 d0 0e BNE &8d36 ; disable_sound ; enable_sound &8d28 a9 0f LDA #&0f ; "F" &8d2a 8d af 8a STA &8aaf ; title_screen_text + &82 &8d2d 8d b0 8a STA &8ab0 ; title_screen_text + &83 &8d30 9c 9a 2f STZ &2f9a ; sound_muted # 65C02 opcode &8d33 4c 84 8c JMP &8c84 ; display_title_screen ; disable_sound &8d36 a9 17 LDA #&17 ; "N" &8d38 8d af 8a STA &8aaf ; title_screen_text + &82 &8d3b a9 25 LDA #&25 ; "O" &8d3d 8d b0 8a STA &8ab0 ; title_screen_text + &83 &8d40 8d 9a 2f STA &2f9a ; sound_muted &8d43 4c 84 8c JMP &8c84 ; display_title_screen ; read_instructions &8d46 a2 8d LDX #&8d ; &8d90 = instructions_text_one &8d48 a0 90 LDY #&90 &8d4a 20 b8 85 JSR &85b8 ; plot_title_screen_text &8d4d 20 94 86 JSR &8694 ; get_keypress &8d50 a2 8e LDX #&8e ; &8e80 = instructions_text_two &8d52 a0 80 LDY #&80 &8d54 20 b8 85 JSR &85b8 ; plot_title_screen_text &8d57 20 94 86 JSR &8694 ; get_keypress &8d5a a2 8f LDX #&8f ; &8f68 = instructions_text_three &8d5c a0 68 LDY #&68 &8d5e 20 b8 85 JSR &85b8 ; plot_title_screen_text &8d61 20 94 86 JSR &8694 ; get_keypress &8d64 4c 84 8c JMP &8c84 ; display_title_screen ; prepare_to_start_game &8d67 78 SEI &8d68 ad ec 89 LDA &89ec ; previous_irq1_vector_for_title_screen_low &8d6b 8d 04 02 STA &0204 ; irq1_vector_low &8d6e ad ed 89 LDA &89ed ; previous_irq1_vector_for_title_screen_high &8d71 8d 05 02 STA &0205 ; irq1_vector_high &8d74 58 CLI &8d75 a9 0d LDA #&0d ; Disable event &8d77 a2 05 LDX #&05 ; interval timer crossing zero &8d79 20 f4 ff JSR &fff4 ; OSBYTE &8d7c a9 0f LDA #&0f ; Flush buffers &8d7e a2 00 LDX #&00 ; flush all buffers &8d80 20 f4 ff JSR &fff4 ; OSBYTE &8d83 a9 01 LDA #&01 # Set colour 0 to cyan &8d85 8d 21 fe STA &fe21 ; video ULA palette register &8d88 a9 67 LDA #&67 # Set colour 6 to black &8d8a 8d 21 fe STA &fe21 ; video ULA palette register &8d8d 4c d8 20 JMP &20d8 ; start_game ; instructions_text_one &8d90 00 43 03 ; at &4300, colour &03 (RR) &8d93 1d 11 0e 25 16 12 1c 1c 12 18 17 2f ; "THE MISSION:" &8d9f fe ; end of string &8da0 80 47 3c ; at &4780, colour &3c (CC) &8da3 0a 25 20 0e 0a 14 17 0e 1c 1c 25 11 0a 1c 25 0b ; "A WEAKNESS HAS BEEN FOUND" &8db3 0e 0e 17 25 0f 18 1e 17 0d &8dbc fe ; end of string &8dbd 80 4c 3c ; at &4c80, colour &3c (CC) &8dc0 12 17 25 1d 11 0e 25 0e 17 0e 16 22 25 0d 0e 0f ; "IN THE ENEMY DEFENCES." &8dd0 0e 17 0c 0e 1c 27 &8dd6 fe ; end of string &8dd7 80 51 3c ; at &5180, colour &3c (CC) &8dda 1d 11 12 1c 25 12 17 1d 0e 15 15 12 10 0e 17 0c ; "THIS INTELLIGENCE MUST BE" &8dea 0e 25 16 1e 1c 1d 25 0b 0e &8df3 fe ; end of string &8df4 80 56 3c ; at &5680, colour &3c (CC) &8df7 0c 18 17 1f 0e 22 0e 0d 25 1d 18 25 16 0a 12 17 ; "CONVEYED TO THE MAIN H.Q." &8e07 25 11 27 1a 27 &8e0c fe ; end of string &8e0d 80 5b 3c ; at &5b80, colour &3c (CC) &8e10 12 16 16 0e 0d 12 0a 1d 0e 15 22 27 25 0b 0e 0c ; "IMMEDIATELY. BECAUSE OF" &8e20 0a 1e 1c 0e 25 18 0f &8e27 fe ; end of string &8e28 80 60 3c ; at &6080, colour &3c (CC) &8e2b 1d 11 0e 25 17 0a 1d 1e 1b 0e 25 18 0f 25 1d 11 ; "THE NATURE OF THE" &8e3b 0e &8e3c fe ; end of string &8e3d 80 65 3c ; at &6580, colour &3c (CC) &8e40 12 17 0f 18 1b 16 0a 1d 12 18 17 31 25 12 1d 25 ; "INFORMATION, IT CAN NOT" &8e50 0c 0a 17 17 18 1d 25 &8e57 fe ; end of string &8e58 80 6a 3c ; at &6a80, colour &3c (CC) &8e5b 0b 0e 25 1d 1b 0a 17 1c 16 12 1d 1d 0e 0d 25 18 ; "BE TRANSMITTED OVER THE" &8e6b 1f 0e 1b 25 1d 11 0e &8e72 fe ; end of string &8e73 80 6f 3c ; at &6f80, colour &3c (CC) &8e76 0a 12 1b 20 0a 1f 0e 1c 27 ; "AIRWAVES." &8e7f ff ; end of text ; instructions_text_two &8e80 80 42 3c ; at &4280, colour &3c (CC) &8e83 22 18 1e 31 25 0c 18 16 16 0a 17 0d 0e 1b 25 13; "YOU, COMMANDER JOHN" &8e93 18 11 17 &8e96 fe ; end of string &8e97 80 47 3c ; at &4780, colour &3c (CC) &8e9a 1c 1d 1b 22 14 0e 1b 31 25 11 0a 1f 0e 25 0b 0e ; "STRYKER, HAVE BEEN CHOSEN" &8eaa 0e 17 25 0c 11 18 1c 0e 17 &8eb3 fe ; end of string &8eb4 80 4c 3c ; at &4c80, colour &3c (CC) &8eb7 0f 18 1b 25 1d 11 12 1c 25 16 12 1c 1c 12 18 17 ; "FOR THIS MISSION. THE MAIN" &8ec7 27 25 1d 11 0e 25 16 0a 12 17 &8ed1 fe ; end of string &8ed2 80 51 3c ; at &5180, colour &3c (CC) &8ed5 11 27 1a 27 25 11 18 20 0e 1f 0e 1b 25 12 1c 25 ; "H.Q. HOWEVER IS SEVERAL" &8ee5 1c 0e 1f 0e 1b 0a 15 &8eec fe ; end of string &8eed 80 56 3c ; at &5680, colour &3c (CC) &8ef0 16 12 15 0e 1c 25 0a 20 0a 22 25 18 1f 0e 1b 25 ; "MILES AWAY OVER ENEMY" &8f00 0e 17 0e 16 22 &8f05 fe ; end of string &8f06 80 5b 3c ; at &5b80, colour &3c (CC) &8f09 1d 0e 1b 1b 12 1d 18 1b 22 27 ; "TERRITORY." &8f13 fe ; end of string &8f14 80 60 3c ; at &6080, colour &3c (CC) &8f17 18 17 25 22 18 1e 1b 25 13 18 1e 1b 17 0e 22 25 ; "ON YOUR JOURNEY YOU CAN" &8f27 22 18 1e 25 0c 0a 17 &8f2e fe ; end of string &8f2f 80 65 3c ; at &6580, colour &3c (CC) &8f32 0c 18 16 16 0a 17 0d 0e 0e 1b 25 0a 17 22 25 0a ; "COMMANDEER ANY AIRCRAFT" &8f42 12 1b 0c 1b 0a 0f 1d &8f49 fe ; end of string &8f4a 80 6a 3c ; at &6a80, colour &3c (CC) &8f4d 22 18 1e 25 16 0a 22 25 0f 12 17 0d 25 0a 17 0d ; "YOU MAY FIND AND USE THEIR" &8f5d 25 1e 1c 0e 25 1d 11 0e 12 1b &8f67 ff ; end of text ; instructions_text_three &8f68 80 42 3c ; at &4280, colour &3c (CC) &8f6b 16 18 1b 0e 25 19 18 20 0e 1b 0f 1e 15 25 20 0e ; "MORE POWERFUL WEAPONRY TO" &8f7b 0a 19 18 17 1b 22 25 1d 18 &8f84 fe ; end of string &8f85 80 47 3c ; at &4780, colour &3c (CC) &8f88 0a 12 0d 25 22 18 1e 25 12 17 25 22 18 1e 1b 25 ; "AID YOU IN YOUR QUEST." &8f98 1a 1e 0e 1c 1d 27 &8f9e fe ; end of string &8f9f 40 52 0c ; at &5240, colour &0c (GG) &8fa2 10 18 18 0d 25 15 1e 0c 14 ; "GOOD LUCK" &8fab fe ; end of string &8fac e0 56 03 ; at &56e0, colour &03 (RR) &8faf 0c 18 16 16 0a 17 0d 0e 1b 25 1c 1d 1b 22 14 0e ; "COMMANDER STRYKER" &8fbf 1b &8fc0 ff ; end of text ; scrolltext_text &8fc1 10 0a 16 0e 25 0d 0e 1c 12 10 17 25 0a 17 0d 25 ; "GAME DESIGN AND " &8fd1 18 1b 12 10 12 17 0a 15 25 12 0d 0e 0a 1c 25 0b ; "ORIGINAL IDEAS B" &8fe1 22 25 0c 27 1b 18 0b 0e 1b 1d 1c 25 0a 17 0d 25 ; "Y C.ROBERTS AND " &8ff1 19 27 16 0e 15 15 0e 1b 27 25 0c 18 0d 12 17 10 ; "P.MELLER. CODING" &9001 25 0b 22 25 0c 27 1b 18 0b 0e 1b 1d 1c 27 25 10 ; " BY C.ROBERTS. G" &9011 1b 0a 19 11 12 0c 1c 25 0d 0e 1c 12 10 17 0e 0d ; "RAPHICS DESIGNED" &9021 25 0b 22 25 19 27 16 0e 15 15 0e 1b 31 25 0c 27 ; " BY P.MELLER, C." &9031 1b 18 0b 0e 1b 1d 1c 25 0a 17 0d 25 17 27 0e 15 ; "ROBERTS AND N.EL" &9041 16 1c 27 25 1c 18 1e 17 0d 25 0e 0f 0f 0e 0c 1d ; "MS. SOUND EFFECT" &9051 1c 25 0a 17 0d 25 16 1e 1c 12 0c 25 0b 22 25 16 ; "S AND MUSIC BY M" &9061 1b 25 16 22 1c 1d 0e 1b 22 27 25 10 0e 17 0e 1b ; "R MYSTERY. GENER" &9071 0a 15 25 0d 18 10 1c 0b 18 0d 22 25 1c 27 0e 15 ; "AL DOGSBODY S.EL" &9081 16 1c 31 25 0a 1c 1c 12 1c 1d 0a 17 1d 25 0d 18 ; "MS, ASSISTANT DO" &9091 10 1c 0b 18 0d 22 25 1d 27 0b 18 1e 0c 11 0e 1b ; "GSBODY T.BOUCHER" &90a1 27 25 10 0e 17 0e 1b 0a 15 25 12 17 1c 19 12 1b ; ". GENERAL INSPIR" &90b1 0a 1d 12 18 17 25 0e 27 1b 18 0b 0e 1b 1d 1c 27 ; "ATION E.ROBERTS." &90c1 25 1d 11 12 1c 25 10 0a 16 0e 25 1d 18 18 14 25 ; " THIS GAME TOOK " &90d1 1d 0e 17 25 16 18 17 1d 11 1c 25 1d 18 25 20 1b ; "TEN MONTHS TO WR" &90e1 12 1d 0e 25 0a 17 0d 25 20 0a 1c 25 0c 1b 0e 0a ; "ITE AND WAS CREA" &90f1 1d 0e 0d 25 1d 18 25 0f 1e 15 0f 12 15 25 0a 17 ; "TED TO FULFIL AN" &9101 25 1e 17 1b 0e 16 12 1d 1d 12 17 10 25 1e 1b 10 ; " UNREMITTING URG" &9111 0e 25 1d 18 25 16 0a 12 16 25 0a 17 0d 25 14 12 ; "E TO MAIM AND KI" &9121 15 15 25 1d 11 12 17 10 1c 25 18 17 25 0a 25 0c ; "LL THINGS ON A C" &9131 18 16 19 1e 1d 0e 1b 25 1c 0c 1b 0e 0e 17 27 25 ; "OMPUTER SCREEN. " &9141 0d 1e 1b 12 17 10 25 1d 11 0e 25 0d 0e 1f 0e 15 ; "DURING THE DEVEL" &9151 18 19 16 0e 17 1d 25 18 0f 25 1d 11 12 1c 25 10 ; "OPMENT OF THIS G" &9161 0a 16 0e 25 06 00 25 0d 12 1c 14 1c 31 25 01 02 ; "AME 60 DISKS, 12" &9171 05 04 25 1c 11 0e 0e 1d 1c 25 18 0f 25 19 0a 19 ; "54 SHEETS OF PAP" &9181 0e 1b 31 25 01 02 04 25 19 0e 17 1c 31 25 02 03 ; "ER, 124 PENS, 23" &9191 25 1b 1e 0b 0b 0e 1b 1c 31 25 02 01 03 25 19 12 ; " RUBBERS, 213 PI" &91a1 23 23 0a 1c 31 25 02 03 04 09 25 0c 0a 17 1c 25 ; "ZZAS, 2349 CANS " &91b1 18 0f 25 0c 18 14 0e 31 25 08 09 01 25 0b 12 10 ; "OF COKE, 891 BIG" &91c1 25 16 0a 0c 1c 31 25 08 06 25 19 0a 0c 14 0e 1d ; " MACS, 86 PACKET" &91d1 1c 25 18 0f 25 0a 17 0a 0d 12 17 31 25 03 07 02 ; "S OF ANADIN, 372" &91e1 01 25 19 12 17 1d 1c 25 18 0f 25 15 0a 10 0e 1b ; "1 PINTS OF LAGER" &91f1 31 25 02 25 0c 18 16 19 1e 1d 0e 1b 1c 31 25 03 ; ", 2 COMPUTERS, 3" &9201 25 16 18 17 12 1d 18 1b 1c 31 25 08 06 02 25 14 ; " MONITORS, 862 K" &9211 0e 0b 0a 0b 1c 31 25 03 04 09 01 25 19 18 1b 1d ; "EBABS, 3491 PORT" &9221 12 18 17 1c 25 18 0f 25 0c 11 12 19 1c 25 0a 17 ; "IONS OF CHIPS AN" &9231 0d 25 02 05 06 09 25 19 0a 0c 14 0e 1d 1c 25 18 ; "D 2569 PACKETS O" &9241 0f 25 0c 1b 12 1c 19 1c 25 20 0e 1b 0e 25 0d 0e ; "F CRISPS WERE DE" &9251 16 18 15 12 1c 11 0e 0d 27 25 25 25 25 ff ; "MOLISHED. " ; unused # &925f - &92ff is a copy of &1f5f - &1fff &925f b2 60 a9 04 85 f4 8d 30 fe a9 a9 8d e2 1c a9 ff &926f 8d e3 1c a0 01 84 03 a4 03 20 48 1e 20 ec 1f 90 &927f 4d a5 f9 20 b4 1c 20 da 1f a6 7a bd 83 16 c9 02 &928f b0 3c a5 f9 b9 65 15 29 3f 7d 14 17 aa a5 f9 7d &929f 9f 18 85 78 a5 7a 18 69 1c aa 20 14 20 a5 78 20 &92af b4 1c 20 da 1f a6 7a bd 83 16 d0 12 bd 0f 17 aa &92bf b9 65 15 20 17 20 a5 78 18 69 08 20 b4 1c a9 40 &92cf 85 b8 e6 03 a4 03 c0 22 90 9d 60 a4 03 b9 cb 15 &92df 85 f9 b9 87 15 85 f8 b9 a9 15 85 c5 60 20 da 1f &92ef a6 7a a4 c5 c4 b4 90 0a f0 02 18 60 a5 b5 c5 f8 &92ff 90 ; title_screen_music_data ; c0 c2 c3 c1 # &00 = no sound, &ff = silence, otherwise pitch &9300 06 3d 3d 79 &9304 00 00 3d 00 &9308 00 00 3d 00 &930c 00 00 3d 00 &9310 04 00 3d 00 &9314 00 00 6d 00 &9318 00 45 59 00 &931c 00 00 49 00 &9320 06 00 3d 00 &9324 00 00 3d 00 &9328 06 00 3d 00 &932c 00 00 3d 00 &9330 04 49 3d 00 &9334 00 00 6d 00 &9338 00 00 59 00 &933c 00 00 49 00 &9340 06 00 3d 00 &9344 00 00 3d ff &9348 00 3d 3d 79 &934c 00 00 3d 00 &9350 04 00 3d 81 &9354 00 00 6d 00 &9358 00 00 59 79 &935c 00 00 49 00 &9360 06 35 3d 75 &9364 00 00 3d ff &9368 06 00 3d 75 &936c 00 00 3d 6d &9370 04 49 3d 65 &9374 00 00 6d 00 &9378 00 00 59 59 &937c 00 00 29 00 &9380 06 2d 2d 6d &9384 00 00 2d 00 &9388 00 00 2d 00 &938c 00 00 2d 00 &9390 04 00 2d 00 &9394 00 00 5d 00 &9398 00 00 49 00 &939c 00 00 3d 00 &93a0 06 00 2d 00 &93a4 00 00 2d 00 &93a8 06 29 2d 00 &93ac 00 00 2d 00 &93b0 04 00 2d 00 &93b4 00 00 5d 00 &93b8 00 21 49 00 &93bc 00 00 3d 00 &93c0 06 00 2d 00 &93c4 00 00 2d 00 &93c8 00 00 2d 00 &93cc 00 00 2d 00 &93d0 04 00 2d 00 &93d4 00 00 5d 00 &93d8 00 00 49 00 &93dc 00 00 3d ff &93e0 06 2d 2d 6d &93e4 00 00 2d 00 &93e8 06 00 2d 00 &93ec 00 00 2d ff &93f0 04 29 2d 75 &93f4 00 00 5d 00 &93f8 00 00 59 00 &93fc 00 00 39 ff &9400 06 3d 3d 79 &9404 00 00 3d 00 &9408 00 00 3d 00 &940c 00 00 3d 00 &9410 04 00 3d 00 &9414 00 00 6d 00 &9418 00 45 59 00 &941c 00 00 49 00 &9420 06 00 3d 00 &9424 00 00 3d 00 &9428 06 00 3d 00 &942c 00 00 3d 00 &9430 04 49 3d 00 &9434 00 00 6d 00 &9438 00 00 59 00 &943c 00 00 49 00 &9440 06 00 3d 00 &9444 00 00 3d ff &9448 00 3d 3d 79 &944c 00 00 3d 00 &9450 04 00 3d 81 &9454 00 00 6d 00 &9458 00 00 59 79 &945c 00 00 49 00 &9460 06 35 3d 75 &9464 00 00 3d ff &9468 06 00 3d 75 &946c 00 00 3d 6d &9470 04 49 3d 65 &9474 00 00 6d 00 &9478 00 00 59 6d &947c 00 00 29 00 &9480 06 2d 2d 89 &9484 00 00 2d 00 &9488 00 00 2d 00 &948c 00 00 2d 00 &9490 04 00 2d 00 &9494 00 00 5d 00 &9498 00 00 49 00 &949c 00 00 3d 00 &94a0 06 35 2d 00 &94a4 00 00 2d 00 &94a8 06 00 2d 00 &94ac 00 00 2d 00 &94b0 04 00 2d 00 &94b4 00 00 5d 00 &94b8 00 00 49 00 &94bc 00 00 3d 00 &94c0 06 49 2d 00 &94c4 00 00 2d 00 &94c8 00 00 2d 00 &94cc 00 00 2d 00 &94d0 04 00 2d 00 &94d4 00 00 5d 00 &94d8 00 00 49 00 &94dc 00 00 3d 00 &94e0 04 59 2d 00 &94e4 04 00 2d 00 &94e8 04 00 2d 00 &94ec 04 00 2d 00 &94f0 04 51 2d 00 &94f4 04 00 5d 00 &94f8 04 00 49 00 &94fc 00 00 3d 00 &9500 06 21 5d 6d &9504 00 00 3d 00 &9508 00 19 5d 00 &950c 00 00 5d 00 &9510 04 21 5d 5d &9514 00 00 3d 00 &9518 00 00 3d 65 &951c 00 00 5d 00 &9520 06 00 3d 6d &9524 00 00 5d 00 &9528 06 2d 3d 79 &952c 00 00 5d 00 &9530 04 00 5d 00 &9534 00 00 3d ff &9538 00 35 3d 81 &953c 00 00 3d 00 &9540 06 3d 59 65 &9544 00 00 3d 00 &9548 00 00 59 6d &954c 00 00 59 00 &9550 04 00 59 65 &9554 00 ff 3d 6d &9558 00 3d 3d 59 &955c 00 00 59 00 &9560 06 00 3d 65 &9564 00 00 59 00 &9568 06 35 3d 6d &956c 00 00 59 00 &9570 04 29 59 00 &9574 00 00 3d 00 &9578 00 21 3d 00 &957c 00 00 3d ff &9580 06 21 5d 6d &9584 00 00 3d 00 &9588 00 19 5d 00 &958c 00 00 5d 00 &9590 04 21 5d 5d &9594 00 00 3d 00 &9598 00 00 3d 65 &959c 00 00 5d 00 &95a0 06 00 3d 6d &95a4 00 00 5d 00 &95a8 06 2d 3d 79 &95ac 00 00 5d 00 &95b0 04 00 5d 00 &95b4 00 00 3d 00 &95b8 00 35 3d 81 &95bc 00 00 3d 00 &95c0 06 3d 59 89 &95c4 00 00 3d ff &95c8 00 00 59 89 &95cc 00 00 59 81 &95d0 04 00 59 79 &95d4 00 00 3d 00 &95d8 00 00 3d 6d &95dc 00 ff 59 00 &95e0 06 3d 3d 79 &95e4 00 00 59 00 &95e8 06 00 3d 00 &95ec 00 ff 59 ff &95f0 04 35 59 6d &95f4 00 00 3d 00 &95f8 00 00 3d 79 &95fc 00 ff 3d 00 &9600 06 2d 6d 89 &9604 00 00 3d 00 &9608 00 00 6d 00 &960c 00 00 6d 00 &9610 04 00 6d 00 &9614 00 00 3d 00 &9618 00 21 3d 00 &961c 00 00 6d 00 &9620 06 00 3d 00 &9624 00 00 6d 00 &9628 06 00 3d 9d &962c 00 00 6d 95 &9630 04 29 6d 89 &9634 00 00 3d ff &9638 00 00 3d 81 &963c 00 00 3d ff &9640 06 00 6d 89 &9644 00 00 3d 00 &9648 00 2d 6d 00 &964c 00 00 6d 00 &9650 04 00 6d 00 &9654 00 00 3d 00 &9658 00 00 3d 00 &965c 00 00 6d 00 &9660 06 31 3d 6d &9664 00 00 6d 00 &9668 06 00 3d 00 &966c 00 ff 6d ff &9670 04 31 6d 79 &9674 00 00 3d 00 &9678 00 00 3d 00 &967c 00 ff 3d ff &9680 06 35 65 89 &9684 00 00 35 00 &9688 00 00 65 00 &968c 00 00 65 00 &9690 04 00 65 00 &9694 00 00 35 00 &9698 00 00 35 00 &969c 00 00 65 00 &96a0 06 00 35 00 &96a4 00 00 65 ff &96a8 06 00 35 81 &96ac 00 00 65 00 &96b0 04 00 65 00 &96b4 00 00 35 ff &96b8 00 00 35 89 &96bc 00 ff 35 ff &96c0 06 05 75 81 &96c4 00 00 65 00 &96c8 00 00 75 00 &96cc 00 00 75 00 &96d0 04 00 75 00 &96d4 00 00 65 00 &96d8 00 00 65 00 &96dc 00 00 75 00 &96e0 06 00 65 65 &96e4 00 00 75 00 &96e8 04 00 65 00 &96ec 04 00 75 00 &96f0 04 00 75 00 &96f4 04 00 65 00 &96f8 04 00 65 00 &96fc 04 00 65 00 &9700 06 41 5d 8d &9704 00 00 2d 00 &9708 06 00 5d 00 &970c 00 00 5d 00 &9710 04 00 5d 79 &9714 00 00 2d 00 &9718 06 00 2d 85 &971c 00 00 5d 00 &9720 06 00 2d 8d &9724 00 00 5d 00 &9728 06 00 2d 00 &972c 00 00 5d 00 &9730 04 00 5d 00 &9734 00 00 2d 00 &9738 06 3d 2d 00 &973c 00 00 2d 00 &9740 06 00 5d 00 &9744 00 00 2d 00 &9748 06 00 5d 00 &974c 00 00 5d ff &9750 04 00 5d 79 &9754 00 00 2d 00 &9758 06 00 2d 85 &975c 00 00 5d 00 &9760 06 00 2d 8d &9764 00 00 5d 00 &9768 06 00 2d 00 &976c 00 00 5d 00 &9770 04 00 5d 00 &9774 00 00 2d ff &9778 06 00 5d 85 &977c 00 ff 5d 00 &9780 06 39 55 00 &9784 00 00 25 00 &9788 06 00 55 00 &978c 00 00 55 00 &9790 04 00 55 71 &9794 00 00 25 00 &9798 06 00 25 7d &979c 00 00 55 00 &97a0 06 35 25 85 &97a4 00 00 55 00 &97a8 06 00 25 00 &97ac 00 00 55 00 &97b0 04 00 55 00 &97b4 00 00 25 ff &97b8 06 00 25 81 &97bc 00 00 25 00 &97c0 06 00 51 00 &97c4 00 00 21 00 &97c8 06 00 51 00 &97cc 00 00 51 00 &97d0 04 00 51 6d &97d4 00 00 21 00 &97d8 06 00 21 79 &97dc 00 00 51 00 &97e0 06 31 21 81 &97e4 00 00 51 00 &97e8 06 35 55 85 &97ec 00 00 55 00 &97f0 04 39 59 89 &97f4 00 00 59 00 &97f8 06 3d 5d 00 &97fc 00 00 5d 00 &9800 06 41 5d 8d &9804 00 00 2d 00 &9808 06 00 5d 00 &980c 00 00 5d 00 &9810 04 00 5d 79 &9814 00 00 2d 00 &9818 06 00 2d 85 &981c 00 00 5d 00 &9820 06 00 2d 8d &9824 00 00 5d 00 &9828 06 00 2d 00 &982c 00 00 5d 00 &9830 04 00 5d 00 &9834 00 00 2d 00 &9838 06 3d 2d 00 &983c 00 00 2d 00 &9840 06 00 5d 00 &9844 00 00 2d 00 &9848 06 00 5d 00 &984c 00 00 5d 00 &9850 04 00 5d 79 &9854 00 00 2d 00 &9858 06 00 2d 85 &985c 00 00 5d 00 &9860 06 00 2d 8d &9864 00 00 5d 00 &9868 06 00 2d 00 &986c 00 00 5d 00 &9870 04 00 5d 00 &9874 00 00 2d 00 &9878 06 00 2d 85 &987c 00 00 2d 00 &9880 06 39 55 00 &9884 00 00 25 00 &9888 06 00 55 00 &988c 00 00 55 00 &9890 04 00 55 71 &9894 00 00 25 00 &9898 06 00 25 7d &989c 00 00 55 00 &98a0 06 00 25 85 &98a4 00 00 55 00 &98a8 06 00 25 00 &98ac 00 00 55 00 &98b0 04 00 55 00 &98b4 00 00 25 00 &98b8 06 00 25 00 &98bc 00 00 25 00 &98c0 06 00 55 00 &98c4 00 00 25 00 &98c8 06 00 55 00 &98cc 00 00 55 00 &98d0 04 00 55 71 &98d4 00 00 25 00 &98d8 06 00 25 7d &98dc 00 00 55 00 &98e0 06 00 25 85 &98e4 00 00 55 00 &98e8 06 00 25 00 &98ec 00 00 55 00 &98f0 04 00 55 00 &98f4 00 00 25 00 &98f8 06 00 25 81 &98fc 00 00 25 00 &9900 06 35 51 00 &9904 00 00 21 00 &9908 06 00 51 00 &990c 00 00 51 00 &9910 04 00 51 6d &9914 00 00 21 00 &9918 06 00 21 79 &991c 00 00 51 00 &9920 06 00 21 81 &9924 00 00 51 00 &9928 06 00 21 00 &992c 00 00 51 00 &9930 04 00 51 00 &9934 00 00 21 00 &9938 06 31 21 00 &993c 00 00 21 00 &9940 06 00 51 00 &9944 00 00 21 00 &9948 06 00 51 00 &994c 00 00 51 00 &9950 04 00 51 6d &9954 00 00 21 00 &9958 06 00 21 79 &995c 00 00 51 00 &9960 06 00 21 81 &9964 00 00 51 00 &9968 06 35 59 89 &996c 00 00 59 00 &9970 04 3d 61 91 &9974 00 00 61 00 &9978 06 31 51 81 &997c 00 00 51 00 &9980 06 35 65 95 &9984 00 00 65 00 &9988 06 00 65 00 &998c 00 00 65 00 &9990 04 2d 5d 8d &9994 00 00 5d 00 &9998 06 00 5d 00 &999c 00 00 5d 00 &99a0 06 21 65 95 &99a4 00 00 65 00 &99a8 06 00 65 00 &99ac 00 00 65 00 &99b0 04 15 75 a5 &99b4 00 00 75 00 &99b8 06 00 75 00 &99bc 00 00 75 00 &99c0 06 05 35 79 &99c4 00 00 00 00 &99c8 06 00 00 00 &99cc 00 00 00 00 &99d0 04 ff 00 ff &99d4 00 00 00 00 &99d8 06 00 00 00 &99dc 00 00 00 00 &99e0 06 2d 49 6d &99e4 00 00 00 00 &99e8 06 00 00 00 &99ec 00 00 00 00 &99f0 04 29 45 75 &99f4 00 00 00 00 &99f8 06 00 00 00 &99fc 00 00 00 00 &9a00 06 3d 00 a0 &9a04 00 ff 00 a0 &9a08 05 3d 00 a0 &9a0c 05 ff 00 a0 &9a10 04 00 00 a0 &9a14 00 00 00 a0 &9a18 05 00 00 a0 &9a1c 05 00 00 a0 &9a20 06 00 00 96 &9a24 00 00 00 00 &9a28 05 00 00 a0 &9a2c 05 00 00 a0 &9a30 04 00 00 96 &9a34 00 00 00 a0 &9a38 05 29 00 8c &9a3c 05 ff 00 8c &9a40 06 3d 00 96 &9a44 00 ff 00 96 &9a48 05 3d 00 96 &9a4c 05 ff 00 8c &9a50 04 00 00 8c &9a54 00 00 00 8c &9a58 05 00 00 82 &9a5c 05 00 00 82 &9a60 06 00 00 6e &9a64 00 00 00 00 &9a68 05 00 00 8c &9a6c 05 00 00 82 &9a70 04 00 00 a0 &9a74 00 00 00 a0 &9a78 05 00 00 a0 &9a7c 05 00 00 00 &9a80 06 2d 00 a0 &9a84 00 ff 00 96 &9a88 05 2d 00 8c &9a8c 05 ff 00 82 &9a90 04 00 00 a0 &9a94 00 00 00 96 &9a98 05 00 00 8c &9a9c 05 00 00 82 &9aa0 06 00 00 78 &9aa4 00 00 00 78 &9aa8 05 00 00 82 &9aac 05 00 00 82 &9ab0 04 00 00 8c &9ab4 00 00 00 8c &9ab8 05 19 00 96 &9abc 05 ff 00 96 &9ac0 06 2d 00 a0 &9ac4 00 ff 00 00 &9ac8 05 2d 00 a0 &9acc 05 ff 00 00 &9ad0 04 00 00 a0 &9ad4 00 00 00 a0 &9ad8 05 00 00 8c &9adc 05 00 00 00 &9ae0 06 00 00 a0 &9ae4 00 00 00 a0 &9ae8 05 00 00 96 &9aec 05 00 00 96 &9af0 04 00 00 78 &9af4 00 00 00 82 &9af8 05 00 00 8c &9afc 05 00 00 96 &9b00 06 3d 6d a0 &9b04 00 ff 00 a0 &9b08 05 3d 6d a0 &9b0c 05 ff 00 a0 &9b10 04 00 6d a0 &9b14 00 00 00 a0 &9b18 05 00 6d a0 &9b1c 05 00 6d a0 &9b20 06 00 00 96 &9b24 00 00 6d 00 &9b28 05 00 00 a0 &9b2c 05 00 6d a0 &9b30 04 00 6d 96 &9b34 00 00 00 a0 &9b38 05 29 6d 8c &9b3c 05 ff 6d 00 &9b40 06 3d 6d 96 &9b44 00 ff 00 96 &9b48 05 3d 6d 96 &9b4c 05 ff 00 8c &9b50 04 00 6d 8c &9b54 00 00 00 8c &9b58 05 00 6d 82 &9b5c 05 00 6d 82 &9b60 06 00 00 6e &9b64 00 00 6d 00 &9b68 05 00 00 8c &9b6c 05 00 6d 82 &9b70 04 00 6d a0 &9b74 00 00 00 a0 &9b78 05 00 6d a0 &9b7c 05 00 6d 00 &9b80 06 2d 79 a0 &9b84 00 ff 00 96 &9b88 05 2d 79 8c &9b8c 05 ff 00 82 &9b90 04 00 79 a0 &9b94 00 00 00 96 &9b98 05 00 79 8c &9b9c 05 00 79 82 &9ba0 06 00 00 78 &9ba4 00 00 79 78 &9ba8 05 00 00 82 &9bac 05 00 79 82 &9bb0 04 00 79 8c &9bb4 00 00 00 8c &9bb8 05 19 79 96 &9bbc 05 ff 79 96 &9bc0 06 2d 79 a0 &9bc4 00 ff 00 00 &9bc8 05 2d 79 a0 &9bcc 05 ff 00 00 &9bd0 04 00 79 a0 &9bd4 00 00 00 a0 &9bd8 05 00 79 8c &9bdc 05 00 79 00 &9be0 06 00 00 a0 &9be4 00 00 79 a0 &9be8 05 00 00 96 &9bec 05 00 79 96 &9bf0 04 00 79 78 &9bf4 00 00 00 82 &9bf8 05 00 79 8c &9bfc 05 00 79 00 &9c00 06 21 6d ff &9c04 00 ff 00 00 &9c08 05 21 6d 00 &9c0c 05 ff 00 00 &9c10 04 00 6d 00 &9c14 00 00 00 00 &9c18 05 00 6d 00 &9c1c 05 00 6d 00 &9c20 06 00 00 00 &9c24 00 00 6d 00 &9c28 05 2d 00 00 &9c2c 05 ff 6d 00 &9c30 04 00 6d 00 &9c34 00 00 00 00 &9c38 05 35 6d 00 &9c3c 05 ff 6d 00 &9c40 06 3d 6d 00 &9c44 00 ff 00 00 &9c48 05 3d 6d 00 &9c4c 05 ff 00 00 &9c50 04 00 6d 00 &9c54 00 00 00 00 &9c58 05 00 6d 00 &9c5c 05 00 6d 00 &9c60 06 00 00 00 &9c64 00 00 6d 00 &9c68 05 35 00 00 &9c6c 05 ff 6d 00 &9c70 04 00 6d 00 &9c74 00 00 00 00 &9c78 05 29 6d 00 &9c7c 05 ff 6d 00 &9c80 06 21 6d 00 &9c84 00 ff 00 00 &9c88 05 21 6d 00 &9c8c 05 ff 00 00 &9c90 04 00 6d 00 &9c94 00 00 00 00 &9c98 05 00 6d 00 &9c9c 05 00 6d 00 &9ca0 06 00 00 00 &9ca4 00 00 6d 00 &9ca8 05 2d 00 00 &9cac 05 ff 6d 00 &9cb0 04 00 6d 00 &9cb4 00 00 00 00 &9cb8 05 35 6d 00 &9cbc 05 ff 6d 00 &9cc0 06 3d 6d 00 &9cc4 00 ff 00 00 &9cc8 05 3d 6d 00 &9ccc 05 ff 00 00 &9cd0 04 00 6d 00 &9cd4 00 00 00 00 &9cd8 05 00 6d 00 &9cdc 05 00 6d 00 &9ce0 06 35 00 00 &9ce4 00 ff 6d 00 &9ce8 05 00 00 00 &9cec 05 00 6d 00 &9cf0 04 00 6d 00 &9cf4 00 00 00 00 &9cf8 05 00 6d 00 &9cfc 05 00 6d 00 &9d00 06 2d 6d 00 &9d04 00 ff 00 00 &9d08 05 00 6d 00 &9d0c 05 00 00 00 &9d10 04 00 6d 00 &9d14 00 00 00 00 &9d18 05 21 6d 00 &9d1c 05 ff 6d 00 &9d20 06 00 00 00 &9d24 00 00 6d 00 &9d28 05 00 00 00 &9d2c 05 00 6d 00 &9d30 04 29 6d 00 &9d34 00 ff 00 00 &9d38 05 00 6d 00 &9d3c 05 00 6d 00 &9d40 06 00 6d 00 &9d44 00 00 00 00 &9d48 05 2d 6d 00 &9d4c 05 ff 00 00 &9d50 04 00 6d 00 &9d54 00 00 00 00 &9d58 05 00 6d 00 &9d5c 05 00 6d 00 &9d60 06 31 00 00 &9d64 00 ff 6d 00 &9d68 05 00 00 00 &9d6c 05 00 6d 00 &9d70 04 31 6d 00 &9d74 00 ff 00 00 &9d78 05 00 6d 00 &9d7c 05 00 6d 00 &9d80 06 35 65 00 &9d84 00 ff 00 00 &9d88 05 00 65 00 &9d8c 05 00 00 00 &9d90 04 00 65 00 &9d94 00 00 00 00 &9d98 05 00 65 00 &9d9c 05 00 65 00 &9da0 06 35 00 00 &9da4 00 ff 65 00 &9da8 05 00 00 00 &9dac 05 00 65 00 &9db0 04 00 65 00 &9db4 00 00 00 00 &9db8 05 00 65 00 &9dbc 05 00 65 00 &9dc0 06 35 75 00 &9dc4 00 ff 00 00 &9dc8 05 00 75 00 &9dcc 05 00 00 00 &9dd0 04 35 75 00 &9dd4 00 ff 00 00 &9dd8 05 00 75 00 &9ddc 05 00 75 00 &9de0 06 35 00 00 &9de4 00 ff 75 00 &9de8 05 35 75 00 &9dec 05 ff 75 00 &9df0 04 35 75 00 &9df4 00 ff 75 00 &9df8 05 35 75 00 &9dfc 05 ff 75 00 &9e00 06 3d 3d 00 &9e04 00 00 3d 00 &9e08 00 00 3d 00 &9e0c 00 00 3d 00 &9e10 04 00 3d 00 &9e14 00 00 6d 00 &9e18 00 45 59 00 &9e1c 00 00 49 00 &9e20 06 00 3d 00 &9e24 00 00 3d 00 &9e28 06 00 3d 00 &9e2c 00 00 3d 00 &9e30 04 49 3d 00 &9e34 00 00 6d 00 &9e38 00 00 59 00 &9e3c 00 00 49 00 &9e40 06 00 3d 00 &9e44 00 00 3d 00 &9e48 00 3d 3d 00 &9e4c 00 00 3d 00 &9e50 04 00 3d 00 &9e54 00 00 6d 00 &9e58 00 00 59 00 &9e5c 00 00 49 00 &9e60 06 35 3d 00 &9e64 00 00 3d 00 &9e68 06 00 3d 00 &9e6c 00 00 3d 00 &9e70 04 49 3d 00 &9e74 00 00 6d 00 &9e78 00 00 59 00 &9e7c 00 00 29 00 &9e80 06 2d 2d 00 &9e84 00 00 2d 00 &9e88 00 00 2d 00 &9e8c 00 00 2d 00 &9e90 04 00 2d 00 &9e94 00 00 5d 00 &9e98 00 00 49 00 &9e9c 00 00 3d 00 &9ea0 06 00 2d 00 &9ea4 00 00 2d 00 &9ea8 06 29 2d 00 &9eac 00 00 2d 00 &9eb0 04 00 2d 00 &9eb4 00 00 5d 00 &9eb8 00 21 49 00 &9ebc 00 00 3d 00 &9ec0 06 00 2d 00 &9ec4 00 00 2d 00 &9ec8 00 00 2d 00 &9ecc 00 00 2d 00 &9ed0 04 00 2d 00 &9ed4 00 00 5d 00 &9ed8 00 00 49 00 &9edc 00 00 3d 00 &9ee0 06 35 2d 6d &9ee4 00 00 2d 5d &9ee8 06 00 2d 6d &9eec 00 00 2d 79 &9ef0 04 39 2d 75 &9ef4 00 00 5d 71 &9ef8 00 00 59 75 &9efc 00 00 39 81 &9f00 06 3d 3d 79 &9f04 00 00 3d 00 &9f08 00 00 3d 00 &9f0c 00 00 3d 00 &9f10 04 00 3d 00 &9f14 00 00 6d 00 &9f18 00 45 59 00 &9f1c 00 00 49 00 &9f20 06 00 3d 00 &9f24 00 00 3d 00 &9f28 06 00 3d 00 &9f2c 00 00 3d 00 &9f30 04 49 3d 00 &9f34 00 00 6d 00 &9f38 00 00 59 00 &9f3c 00 00 49 00 &9f40 06 00 3d 00 &9f44 00 00 3d ff &9f48 00 3d 3d 79 &9f4c 00 00 3d 00 &9f50 04 00 3d 81 &9f54 00 00 6d 00 &9f58 00 00 59 79 &9f5c 00 00 49 00 &9f60 06 35 3d 75 &9f64 00 00 3d ff &9f68 06 00 3d 75 &9f6c 00 00 3d 6d &9f70 04 49 3d 65 &9f74 00 00 6d 00 &9f78 00 00 59 59 &9f7c 00 00 29 00 &9f80 06 2d 2d 6d &9f84 00 00 2d 00 &9f88 00 00 2d 00 &9f8c 00 00 2d 00 &9f90 04 00 2d 00 &9f94 00 00 5d 00 &9f98 00 00 49 00 &9f9c 00 00 3d 00 &9fa0 06 00 2d 00 &9fa4 00 00 2d 00 &9fa8 06 29 2d 00 &9fac 00 00 2d 00 &9fb0 04 00 2d 00 &9fb4 00 00 5d 00 &9fb8 00 21 49 00 &9fbc 00 00 3d 00 &9fc0 06 00 2d 00 &9fc4 00 00 2d 00 &9fc8 00 00 2d 00 &9fcc 00 00 2d 00 &9fd0 04 00 2d 00 &9fd4 00 00 5d 00 &9fd8 00 00 49 00 &9fdc 00 00 3d ff &9fe0 06 2d 2d 6d &9fe4 00 00 2d 00 &9fe8 06 00 2d 00 &9fec 00 00 2d ff &9ff0 04 29 2d 75 &9ff4 00 00 5d 00 &9ff8 00 00 59 00 &9ffc 00 00 39 ff &a000 06 3d 3d 79 &a004 00 00 3d 00 &a008 00 00 3d 00 &a00c 00 00 3d 00 &a010 04 00 3d 00 &a014 00 00 6d 00 &a018 00 45 59 00 &a01c 00 00 49 00 &a020 06 00 3d 00 &a024 00 00 3d 00 &a028 06 00 3d 00 &a02c 00 00 3d 00 &a030 04 49 3d 00 &a034 00 00 6d 00 &a038 00 00 59 00 &a03c 00 00 49 00 &a040 06 00 3d 00 &a044 00 00 3d ff &a048 00 3d 3d 79 &a04c 00 00 3d 00 &a050 04 00 3d 81 &a054 00 00 6d 00 &a058 00 00 59 79 &a05c 00 00 49 00 &a060 06 35 3d 75 &a064 00 00 3d ff &a068 06 00 3d 75 &a06c 00 00 3d 6d &a070 04 49 3d 65 &a074 00 00 6d 00 &a078 00 00 59 6d &a07c 00 00 29 00 &a080 06 2d 2d 89 &a084 00 00 2d 00 &a088 00 00 2d 00 &a08c 00 00 2d 00 &a090 04 00 2d 00 &a094 00 00 5d 00 &a098 00 00 49 00 &a09c 00 00 3d 00 &a0a0 06 35 2d 00 &a0a4 00 00 2d 00 &a0a8 06 00 2d 00 &a0ac 00 00 2d 00 &a0b0 04 00 2d 00 &a0b4 00 00 5d 00 &a0b8 00 00 49 00 &a0bc 00 00 3d 00 &a0c0 06 49 2d 00 &a0c4 00 00 2d 00 &a0c8 00 00 2d 00 &a0cc 00 00 2d 00 &a0d0 04 00 2d 00 &a0d4 00 00 5d 00 &a0d8 00 00 49 00 &a0dc 00 00 3d ff &a0e0 04 59 2d 79 &a0e4 00 00 2d 00 &a0e8 04 00 2d 00 &a0ec 00 00 2d ff &a0f0 04 51 2d 75 &a0f4 04 00 5d 00 &a0f8 04 00 49 00 &a0fc 04 00 3d ff ; high_score_music_data ; c1 c2 # &00 = silence, otherwise pitch &a100 81 21 &a102 75 51 &a104 6d 21 &a106 81 51 &a108 00 21 &a10a 00 51 &a10c 00 21 &a10e 00 51 &a110 81 21 &a112 75 51 &a114 6d 21 &a116 81 51 &a118 00 21 &a11a 00 51 &a11c 00 21 &a11e 00 51 &a120 81 19 &a122 75 49 &a124 6d 19 &a126 79 49 &a128 00 19 &a12a 00 49 &a12c 00 19 &a12e 00 49 &a130 81 19 &a132 75 49 &a134 6d 19 &a136 79 49 &a138 00 19 &a13a 00 49 &a13c 00 19 &a13e 00 49 &a140 81 15 &a142 75 45 &a144 6d 15 &a146 75 45 &a148 00 15 &a14a 00 45 &a14c 00 15 &a14e 00 45 &a150 81 15 &a152 75 45 &a154 6d 15 &a156 75 45 &a158 00 15 &a15a 00 45 &a15c 00 15 &a15e 00 45 &a160 71 11 &a162 71 41 &a164 71 11 &a166 71 41 &a168 71 11 &a16a 71 41 &a16c 71 11 &a16e 71 41 &a170 6d 0d &a172 6d 3d &a174 6d 0d &a176 6d 3d &a178 6d 0d &a17a 6d 3d &a17c 6d 0d &a17e 6d 3d &a180 81 21 &a182 75 51 &a184 6d 21 &a186 81 51 &a188 75 21 &a18a 6d 51 &a18c 81 21 &a18e 75 51 &a190 6d 21 &a192 81 51 &a194 75 21 &a196 6d 51 &a198 81 21 &a19a 75 51 &a19c 6d 21 &a19e 81 51 &a1a0 75 21 &a1a2 6d 51 &a1a4 8d 21 &a1a6 00 51 &a1a8 8d 21 &a1aa 00 51 &a1ac 00 21 &a1ae 00 51 &a1b0 89 0d &a1b2 00 3d &a1b4 89 0d &a1b6 00 3d &a1b8 00 0d &a1ba 00 3d &a1bc 00 0d &a1be 00 3d &a1c0 81 0d &a1c2 75 3d &a1c4 6d 0d &a1c6 81 3d &a1c8 75 0d &a1ca 6d 3d &a1cc 81 0d &a1ce 00 3d &a1d0 00 21 &a1d2 00 51 &a1d4 00 21 &a1d6 00 51 &a1d8 81 21 &a1da 81 51 &a1dc 81 21 &a1de 81 51 &a1e0 71 11 &a1e2 71 41 &a1e4 71 11 &a1e6 71 41 &a1e8 71 11 &a1ea 71 41 &a1ec 71 11 &a1ee 71 41 &a1f0 6d 0d &a1f2 6d 3d &a1f4 6d 0d &a1f6 6d 3d &a1f8 6d 0d &a1fa 6d 3d &a1fc 6d 0d &a1fe 6d 3d &a200 61 01 &a202 6d 31 &a204 61 01 &a206 6d 31 &a208 61 01 &a20a 6d 31 &a20c 61 01 &a20e 6d 31 &a210 65 05 &a212 75 35 &a214 65 05 &a216 75 35 &a218 65 05 &a21a 75 35 &a21c 65 05 &a21e 75 35 &a220 6d 15 &a222 81 45 &a224 6d 15 &a226 81 45 &a228 6d 15 &a22a 81 45 &a22c 6d 15 &a22e 81 45 &a230 7d 0d &a232 89 3d &a234 7d 0d &a236 89 3d &a238 7d 0d &a23a 89 3d &a23c 7d 0d &a23e 89 3d &a240 61 01 &a242 6d 31 &a244 61 01 &a246 6d 31 &a248 61 01 &a24a 6d 31 &a24c 61 01 &a24e 6d 31 &a250 65 05 &a252 75 35 &a254 65 05 &a256 75 35 &a258 65 05 &a25a 75 35 &a25c 65 05 &a25e 75 35 &a260 6d 15 &a262 81 45 &a264 6d 15 &a266 81 45 &a268 6d 15 &a26a 81 45 &a26c 6d 15 &a26e 81 45 &a270 7d 0d &a272 89 3d &a274 7d 0d &a276 89 3d &a278 7d 0d &a27a 89 3d &a27c 7d 0d &a27e 89 3d ; sound_data ; chan vol pitch dur &a280 10 00 02 00 00 00 02 00 ; &00 # Title screen channel 0 &a288 12 00 03 00 00 00 02 00 ; &08 # Title screen channel 2 &a290 13 00 04 00 00 00 02 00 ; &10 # Title screen channel 3 &a298 11 00 01 00 00 00 02 00 ; &18 # Title screen channel 1 &a2a0 13 00 0a 00 00 00 05 00 ; &20 # High score channel 3 &a2a8 11 00 00 00 00 00 05 00 ; &28 # High score channel 1 &a2b0 12 00 00 00 00 00 05 00 ; &30 # High score channel 2 ; timer_block &a2b8 ff ff ff ff ff ; start_title_screen_music &a2bd ad 99 2f LDA &2f99 ; music_muted &a2c0 d0 25 BNE &a2e7 ; leave &a2c2 a2 01 LDX #&01 &a2c4 86 99 STX &99 ; channel_one_envelope &a2c6 ca DEX ; 0 &a2c7 86 97 STX &97 ; music_address_low &a2c9 a9 93 LDA #&93 ; &9300 = title_screen_music_data &a2cb 85 98 STA &98 ; music_address_high &a2cd a9 05 LDA #&05 ; &a305 = title_screen_music_event_handler &a2cf 8d 20 02 STA &0220 ; event_vector_low &a2d2 a9 a3 LDA #&a3 &a2d4 8d 21 02 STA &0221 ; event_vector_high ; enable_interval_timer_events &a2d7 a9 0e LDA #&0e ; Enable event &a2d9 a2 05 LDX #&05 ; interval timer crossing zero &a2db 20 f4 ff JSR &fff4 ; OSBYTE ; write_timer_block &a2de a2 b8 LDX #&b8 ; &a2b8 = timer_block &a2e0 a0 a2 LDY #&a2 &a2e2 a9 04 LDA #&04 ; Write interval timer &a2e4 6c 0c 02 JMP (&020c) ; osword_vector ; leave &a2e7 60 RTS ; start_high_score_music &a2e8 ad 99 2f LDA &2f99 ; music_muted &a2eb d0 fa BNE &a2e7 ; leave &a2ed a9 00 LDA #&00 &a2ef 85 97 STA &97 ; music_address_low &a2f1 a9 a1 LDA #&a1 ; &a100 = high_score_music_data &a2f3 85 98 STA &98 ; music_address_high &a2f5 a9 c0 LDA #&c0 &a2f7 85 99 STA &99 ; high_score_music_notes_remaining &a2f9 a9 93 LDA #&93 ; &a393 = high_score_music_event_handler &a2fb 8d 20 02 STA &0220 ; event_vector_low &a2fe a9 a3 LDA #&a3 &a300 8d 21 02 STA &0221 ; event_vector_high &a303 d0 d2 BNE &a2d7 ; enable_interval_timer_events # Always branches ; title_screen_music_event_handler &a305 08 PHP &a306 8a TXA &a307 48 PHA ; tmp_x &a308 98 TYA &a309 48 PHA ; tmp_y &a30a a9 f6 LDA #&f6 &a30c 8d b8 a2 STA &a2b8 ; timer_block &a30f a6 98 LDX &98 ; music_address_high &a311 e0 9a CPX #&9a &a313 d0 04 BNE &a319 ; not_envelope_five &a315 a9 05 LDA #&05 &a317 85 99 STA &99 ; channel_one_envelope ; not_envelope_five &a319 e0 9c CPX #&9c &a31b d0 04 BNE &a321 ; not_envelope_one &a31d a9 01 LDA #&01 &a31f 85 99 STA &99 ; channel_one_envelope ; not_envelope_one &a321 a0 00 LDY #&00 &a323 b1 97 LDA (&97),Y ; music_address &a325 f0 06 BEQ &a32d ; skip_channel_zero &a327 8d 84 a2 STA &a284 ; sound_data + &00 + 4 (pitch) &a32a 20 ec a3 JSR &a3ec ; title_screen_play_sound ; skip_channel_zero &a32d a9 03 LDA #&03 &a32f 8d 8a a2 STA &a28a ; sound_data + &08 + 2 (volume) &a332 a0 01 LDY #&01 &a334 b1 97 LDA (&97),Y ; music_address &a336 aa TAX &a337 f0 0c BEQ &a345 ; skip_channel_two &a339 e8 INX &a33a d0 03 BNE &a33f ; not_silent_channel_two &a33c 8e 8a a2 STX &a28a ; sound_data + &08 + 2 (volume) ; not_silent_channel_two &a33f 8d 8c a2 STA &a28c ; sound_data + &08 + 4 (pitch) &a342 20 ec a3 JSR &a3ec ; title_screen_play_sound ; skip_channel_two &a345 a9 04 LDA #&04 &a347 8d 92 a2 STA &a292 ; sound_data + &10 + 2 (volume) &a34a a0 02 LDY #&02 &a34c b1 97 LDA (&97),Y ; music_address &a34e aa TAX &a34f f0 0c BEQ &a35d ; skip_channel_three &a351 e8 INX &a352 d0 03 BNE &a357 ; not_silent_channel_three &a354 8e 92 a2 STX &a292 ; sound_data + &10 + 2 (volume) ; not_silent_channel_three &a357 8d 94 a2 STA &a294 ; sound_data + &10 + 4 (pitch) &a35a 20 ec a3 JSR &a3ec ; title_screen_play_sound ; skip_channel_three &a35d a5 99 LDA &99 ; channel_one_envelope &a35f 8d 9a a2 STA &a29a ; sound_data + &18 + 2 (volume) &a362 a0 03 LDY #&03 &a364 b1 97 LDA (&97),Y ; music_address &a366 aa TAX &a367 f0 0c BEQ &a375 ; skip_channel_one &a369 e8 INX &a36a d0 03 BNE &a36f ; not_silent_channel_one &a36c 8e 9a a2 STX &a29a ; sound_data + &18 + 2 (volume) ; not_silent_channel_one &a36f 8d 9c a2 STA &a29c ; sound_data + &18 + 4 (pitch) &a372 20 ec a3 JSR &a3ec ; title_screen_play_sound ; skip_channel_one &a375 20 de a2 JSR &a2de ; write_timer_block &a378 a5 97 LDA &97 ; music_address &a37a 18 CLC &a37b 69 04 ADC #&04 &a37d 85 97 STA &97 ; music_address &a37f 90 0c BCC &a38d ; not_end_of_title_screen_music &a381 e6 98 INC &98 ; music_address_high &a383 a5 98 LDA &98 ; music_address_high &a385 c9 a1 CMP #&a1 &a387 d0 04 BNE &a38d ; not_end_of_title_screen_music &a389 a9 95 LDA #&95 &a38b 85 98 STA &98 ; music_address_high ; not_end_of_title_screen_music &a38d 68 PLA ; tmp_y &a38e a8 TAY &a38f 68 PLA ; tmp_x &a390 aa TAX &a391 28 PLP &a392 60 RTS ; high_score_music_event_handler &a393 08 PHP &a394 8a TXA &a395 48 PHA ; tmp_x &a396 98 TYA &a397 48 PHA ; tmp_y &a398 a9 f0 LDA #&f0 &a39a 8d b8 a2 STA &a2b8 ; timer_block &a39d a0 00 LDY #&00 &a39f b1 97 LDA (&97),Y ; music_address &a3a1 f0 02 BEQ &a3a5 ; set_channel_one_envelope &a3a3 a9 0a LDA #&0a ; set_channel_one_envelope &a3a5 8d aa a2 STA &a2aa ; sound_data + &28 + 2 (volume) &a3a8 8d b2 a2 STA &a2b2 ; sound_data + &30 + 2 (volume) &a3ab b1 97 LDA (&97),Y ; music_address &a3ad 8d ac a2 STA &a2ac ; sound_data + &28 + 4 (pitch) &a3b0 18 CLC &a3b1 69 30 ADC #&30 &a3b3 8d b4 a2 STA &a2b4 ; sound_data + &30 + 4 (pitch) &a3b6 a2 a8 LDX #&a8 &a3b8 20 f3 a3 JSR &a3f3 ; high_score_play_sound &a3bb a2 b0 LDX #&b0 &a3bd 20 f3 a3 JSR &a3f3 ; high_score_play_sound &a3c0 a0 01 LDY #&01 &a3c2 b1 97 LDA (&97),Y ; music_address &a3c4 8d a4 a2 STA &a2a4 ; sound_data + &20 + 4 (pitch) &a3c7 a2 a0 LDX #&a0 &a3c9 20 f3 a3 JSR &a3f3 ; high_score_play_sound &a3cc 20 de a2 JSR &a2de ; write_timer_block &a3cf a5 97 LDA &97 ; music_address_low &a3d1 18 CLC &a3d2 69 02 ADC #&02 &a3d4 85 97 STA &97 ; music_address_low &a3d6 90 02 BCC &a3da ; skip_page &a3d8 e6 98 INC &98 ; music_address_high ; skip_page &a3da c6 99 DEC &99 ; high_score_music_notes_remaining &a3dc d0 08 BNE &a3e6 ; not_end_of_high_score_music &a3de a9 00 LDA #&00 &a3e0 85 97 STA &97 ; music_address_low &a3e2 a9 a1 LDA #&a1 ; &a100 = high_score_music_data &a3e4 85 98 STA &98 ; music_address_high ; not_end_of_high_score_music &a3e6 68 PLA ; tmp_y &a3e7 a8 TAY &a3e8 68 PLA ; tmp_x &a3e9 aa TAX &a3ea 28 PLP &a3eb 60 RTS ; title_screen_play_sound &a3ec 98 TYA &a3ed 0a ASL A &a3ee 0a ASL A &a3ef 0a ASL A &a3f0 09 80 ORA #&80 &a3f2 aa TAX ; high_score_play_sound &a3f3 a9 07 LDA #&07 &a3f5 a0 a2 LDY #&a2 ; &a280 = sound_data &a3f7 6c 0c 02 JMP (&020c) ; osword_vector