Compare commits

..

487 Commits

Author SHA1 Message Date
Pirx 9251db8f3a Merge pull request #155 from pkali/develop
Develop
2023-02-07 02:27:00 -05:00
Pirx f15e815c1a readme updt 2023-02-07 02:26:03 -05:00
Pirx 746026ae4f rainbow colors on start 2023-02-07 01:59:12 -05:00
Pecusx fd67dc0bb1 Improved tank shapes.
Better appearance with disabled tank X-coordinate correction..
2023-02-04 21:15:59 +01:00
Pecusx c1ee40fa59 No X-tank position correction (PM graphics). 2023-02-02 18:29:34 +01:00
Pirx a64d01067d vdl macro 2023-01-31 16:35:21 -05:00
Pecusx f703316128 Optimizations - full colortable for PAL mode 2023-01-31 20:22:47 +01:00
Pecusx 98565d490f Deactivation of "Lazy..." is now working properly. 2023-01-31 10:57:58 +01:00
Pecusx fcbd0bc34a The G key works properly even if the wind options were last selected. 2023-01-30 22:33:36 +01:00
Pecusx e50bc8669e Code cleanup. 2023-01-27 09:30:27 +01:00
Pecusx bbded45200 Mere memory and 2 new talk texts (RB5200). And... no memory :) 2023-01-25 18:28:36 +01:00
Pecusx 00d386e73f ... and more (memory) ... 2023-01-25 15:13:57 +01:00
Pecusx 70788e772e More optimizarions 2023-01-25 14:44:55 +01:00
Pecusx 793d494fc5 Minor optimization 2023-01-25 14:10:50 +01:00
Pecusx 6b2eabd1ca Nicer Lazy targeting amd "visual Debug" for Lazy Boys 2023-01-24 14:20:29 +01:00
Pecusx 0832d841f4 Small talk - small fix. 2023-01-24 09:00:43 +01:00
Pirx c41c01cee0 readme updt 2023-01-23 08:36:19 -05:00
Pecusx 6b68066c94 Visible targeting bug 2023-01-23 14:21:02 +01:00
Pirx 31c181ce89 Merge pull request #154 from pkali/develop
Develop
2023-01-23 05:41:41 -05:00
Pirx 33d8303270 readme updt 2023-01-23 05:41:05 -05:00
Pecusx f9fad89d7c Revert "wait by atariki"
This reverts commit 41094db7dd.
2023-01-23 08:50:03 +01:00
Pecusx e9ff60210e Revert "minor fixes"
This reverts commit b7560ab6d9.
2023-01-23 08:49:58 +01:00
Pirx b7560ab6d9 minor fixes 2023-01-22 23:03:10 -05:00
Pirx 41094db7dd wait by atariki 2023-01-22 22:46:47 -05:00
Pecusx ab30227843 Ctrl+HELP - new "debug" switch 2023-01-22 23:17:26 +01:00
Pecusx 5d619c80f8 "Debug" for Laser 2023-01-22 19:46:37 +01:00
Pecusx e842d455e6 Visual Debug :) added 2023-01-21 22:48:46 +01:00
Pecusx da4d82cca4 All the splash text is swapped. 2023-01-21 13:51:26 +01:00
Pecusx f7931afbb4 Second fire (shift) on 5200
Thanks RB5200!
2023-01-20 21:26:39 +01:00
Pecusx b18793014d Very rare distance measuring bug fixed.
Sometimes a perfectly hit tank still lived.
2023-01-20 14:40:54 +01:00
Pecusx ef1c0dc62c Binary files upd. 2023-01-20 11:05:12 +01:00
Pecusx bc338198a0 Merge branch 'develop' of https://github.com/pkali/scorch_src into develop 2023-01-20 11:01:36 +01:00
Pecusx 2a08447b9c The tanks talk to each other again. 2023-01-20 11:00:46 +01:00
Pecusx 4088e5f8fa Macro "wait" optimization, and better credits 2023-01-19 19:46:06 +01:00
Pirx 79b5bc3290 readme updt 2023-01-17 10:04:09 -05:00
Pirx 3b80de7def readme updt 2023-01-17 09:25:01 -05:00
Pirx 922c7d15cb Merge pull request #153 from pkali/develop
readme updt
2023-01-17 09:11:44 -05:00
Pirx 4edf032d77 readme updt 2023-01-17 09:10:43 -05:00
Pirx 23ab8cb4d5 Merge pull request #152 from pkali/develop
1.25
2023-01-17 08:59:49 -05:00
Pirx 84fdef7cbf eng manual updt 2023-01-17 08:56:50 -05:00
Pecusx 9b8f345cb2 New tester in credits 2023-01-17 14:39:16 +01:00
Pecusx c0af7b2e6c Two minor glitches when switching screens. (very rare) 2023-01-16 20:33:38 +01:00
Pecusx d9b92eba07 Manuals update. 2023-01-16 10:29:15 +01:00
Pecusx 33b962725d Selectable change of wind power (once per turn or round). 2023-01-16 09:53:29 +01:00
Pecusx 9ec78928f1 Minor optimization and new macro: waitRTC (not used yet) 2023-01-15 20:47:10 +01:00
Pecusx e9ec39005f A800 binary update. 2023-01-14 14:06:01 +01:00
Pirx b3234a7077 version no. updt 2023-01-14 07:46:46 -05:00
Pirx 735316cdab splash working on all systems 2023-01-13 20:57:15 -05:00
Pirx d20a9a94d2 splash works with 4joy and 2joy kernels, still not working with Altirra kernel 2023-01-13 20:50:06 -05:00
Pirx a88f471a3c unnecessary 6502 init removed 2023-01-12 23:20:39 -05:00
Pirx def57f03ca comment fix 2023-01-12 20:41:42 -05:00
Pirx 8ac3c22fe7 custom 5200 splash screen year 2023 2023-01-12 20:34:04 -05:00
Pirx c7b5a07c62 custom 5200 splash screen 1st attempt 2023-01-12 20:12:24 -05:00
Pecusx ed126c454a Optimizations - 69 bytes saved! 2023-01-12 21:53:42 +01:00
Pecusx 066e248350 Better colors of mountains in PAL system. 2023-01-09 15:03:05 +01:00
Pecusx 9b05cf0220 Minor optimization 2 2023-01-09 14:43:42 +01:00
Pecusx 872d564846 Minor optimization 2023-01-06 20:54:09 +01:00
Pecusx fb0de84c01 Happy New Year! 2023-01-05 20:49:04 +01:00
Pecusx c151940735 Change colors during the game with the G key (a800 only) 2023-01-05 09:58:36 +01:00
Pirx d66e588203 readme and year change 2022-12-31 19:10:03 -05:00
Pecusx 3b53968fe3 Small gradient optimization (one variable gone). 2022-12-28 14:43:41 +01:00
Pecusx a45a892dc7 Merge branch 'develop' of https://github.com/pkali/scorch_src into develop 2022-12-25 12:41:48 +01:00
Pecusx 6f1e28298d Indicator of the selected color set. 2022-12-25 12:41:36 +01:00
Pirx 871f33f3bf Merge pull request #151 from pkali/develop
Develop
2022-12-24 10:31:30 -05:00
Pirx ffd5e558ff README updt 2022-12-24 10:31:04 -05:00
Pirx 82f26310da README updt 2022-12-24 10:29:51 -05:00
Pecusx 5d935c4379 Manuals update 2022-12-24 13:12:57 +01:00
Pecusx 4a9d8da441 New best colors by Adam :) 2022-12-24 12:40:11 +01:00
Pecusx 25490f76a3 Best colors by Adam 2022-12-24 10:55:59 +01:00
Pecusx 7b77d9714e Even better (other) colors :) 2022-12-23 19:46:20 +01:00
Pecusx 3fdc8600c6 Better second set of colors 2022-12-23 14:38:36 +01:00
Pecusx 3936b2bf8c Two sets of "gradient" selectable. 2022-12-23 14:07:22 +01:00
Pecusx d420ce06ca Smoke Tracer does not smoke when targeting by Lazy Darwin 2022-12-17 20:05:33 +01:00
Pecusx 6ec02ab3fc Lazy Boy works well with joystick (more testing needed) 2022-12-16 18:11:35 +01:00
Pecusx cf61f5075f New Lazy Darwin (with problems on 5200) 2022-12-16 15:20:10 +01:00
Pecusx 87f7e7eafa Dot does not fire MIRV :) 2022-12-16 13:41:52 +01:00
Pecusx 328a147225 Magic of the "." key :) 2022-12-16 12:39:52 +01:00
Pecusx 54a4dcf7d8 Options screen is now separate from setting the game's initial variables.
For easier porting to the C64 or others.
2022-12-14 13:11:40 +01:00
Pecusx b7a5e7c9b5 Self-destruction of shielded tank at angle 0-4. fixed! - again! 2022-12-13 17:47:42 +01:00
Pecusx 54f04ed962 Barrel start point correction 2022-12-13 09:30:11 +01:00
Pecusx 588040d9e6 Soildown after Hovercraft optimization. 2022-12-13 09:15:39 +01:00
Pecusx 2b88517167 New tanks shapes by Adam. But we maust correct start point of barrel 2022-12-12 20:42:17 +01:00
Pecusx ffcf44cabb Better Soildown after Hovercraft. 2022-12-12 14:11:09 +01:00
Pirx d0049826f5 Merge pull request #150 from pkali/develop
Develop
2022-12-10 15:59:25 -05:00
Pirx 5a6b5f7dc4 README and MANUAL updt 2022-12-10 15:58:09 -05:00
Pecusx f485d120c8 Moroon at very specific settings kills everyone :) - check it out! 2022-12-02 18:14:16 +01:00
Pecusx c6264013d9 RoboTanks do not use Laser and BFG (in extremely rare case) 2022-12-02 15:05:07 +01:00
Pecusx b4af765f4f New (better?) layout of shades of gray. 2022-12-01 20:35:51 +01:00
Pirx 9cdb9fe18c SUPERSYSTEM everywhere + one space more 2022-12-01 11:31:35 -05:00
Pecusx 788b5db180 New name of game :) 2022-12-01 15:35:30 +01:00
Pecusx c7e65f1d61 Display active joystick on weapon purchase/activation screens and game screen. 2022-12-01 15:23:39 +01:00
Pecusx 8c6fee0631 Different game title for A5200 2022-12-01 08:49:02 +01:00
Pecusx 403288548c Minor manuals update 2022-11-30 19:15:44 +01:00
Pecusx 166d05c0e6 One NOP more and manuals update 2022-11-30 18:47:30 +01:00
Pecusx 38ba45001a Mountains avialiable in shadows of GREY. 2022-11-30 18:40:06 +01:00
Pecusx 05f3f32f00 Minor memory tricks 2022-11-30 14:45:26 +01:00
Pecusx d14f9a2999 Prepare for mountains colors (test)
But no memory for one "NOP" (a800) and colors array :)
2022-11-30 09:58:48 +01:00
Pecusx 18cce6377e Fix for lonely pixel in Liquid Dirt. 2022-11-29 11:21:35 +01:00
Pecusx ee9d6b7ce9 New tank shape (only for robotanks),. 2022-11-26 20:41:50 +01:00
Pecusx 42cc896ec5 Weird optimization :) 2022-11-26 18:45:03 +01:00
Pecusx 091335dbc9 Tank shapes selection added.
Better appearance of tanks on title screen.
2022-11-26 14:57:54 +01:00
Pecusx 9c912d4cc7 Initial support for tank shapes selection. 2022-11-25 20:48:20 +01:00
Pecusx e7a35087bd Merge pull request #149 from pkali/develop
Manuals update
2022-11-24 21:41:53 +01:00
Pecusx 8013246d3b Manuals update 2022-11-24 21:40:52 +01:00
Pirx d0ac15f27b Merge pull request #148 from pkali/develop
Develop
2022-11-23 10:31:18 -05:00
Pirx 1dc680f5e2 README updt 2022-11-23 10:30:44 -05:00
Pecusx 0a82a9a96b Minor physics corrections after bouncing off walls. 2022-11-22 21:12:02 +01:00
Pecusx d9da258735 Self-destruction of shielded tank at angle 0. fixed! 2022-11-22 19:38:25 +01:00
Pecusx 05a289ffea Bouncing Kastel bounces Laser - fixed 2022-11-22 14:58:07 +01:00
Pecusx ba780df597 ExplosionRange variable is now really one byte long. :) 2022-11-21 20:37:00 +01:00
Pecusx 7d9e6d2045 Minor weapons list bug fixed 2022-11-21 09:40:13 +01:00
Pecusx b60efd0bbb 5200 binary update 2022-11-21 08:28:40 +01:00
Pirx f6157ea548 full number of defensive texts 2022-11-20 14:58:21 -05:00
Pirx 3bbd5838ec 2 bytes less 2022-11-20 12:44:57 -05:00
Pirx b101bbbce1 optimizations finished 2022-11-20 12:37:03 -05:00
Pirx 38b6af6720 text4x4 optimised 2022-11-20 12:29:59 -05:00
Pecusx 6313ef2b77 Minor optimization. 2022-11-19 22:47:25 +01:00
Pecusx a154966e93 Rare PMG glitches fixed 2022-11-19 22:32:22 +01:00
Pecusx f4213a7cf4 SELECT key selects joystick port just like TAB key.
Manuals update.
2022-11-19 12:30:37 +01:00
Pecusx 2fb40c444f Multiple joysticks support added. #142
And small barrel rotate bug fixed.
2022-11-18 23:55:14 +01:00
Pecusx dedfd7a248 Initial support for multiple joysticks (A800 only) 2022-11-18 21:54:07 +01:00
Pecusx ccd3fa5224 5200 binary updated. 2022-11-18 15:51:01 +01:00
Pecusx 89b3834dc8 Prepare for more joysticks (test only) 2022-11-18 15:45:17 +01:00
Pecusx 7a97ff622d Lazy Boy and Darwin now remembers the last weapon used 2022-11-17 12:23:42 +01:00
Pecusx 1bc3b3b72f Corrected offset at the long list of weapons. 2022-11-16 22:38:54 +01:00
Pecusx b6dd5a9902 Memory optimization. 2022-11-16 21:01:01 +01:00
Pecusx 6f62d49407 Gift now blinking. 2022-11-16 18:33:53 +01:00
Pecusx cc41bcd323 Manuals update. 2022-11-15 22:48:03 +01:00
Pecusx 8086a78d79 Minor change in point counting. 2022-11-15 17:05:37 +01:00
Pecusx 22fc555f8e Better gifts (Buy me!) 2022-11-15 16:37:00 +01:00
Pecusx a33d7d541d Better and faster Laser 2022-11-15 11:02:11 +01:00
Pecusx fbcbab2eec Battery performance in AI and Auto Defense fixed. 2022-11-15 08:46:38 +01:00
Pecusx 43ae88673c Memory layout 2022-11-14 19:31:49 +01:00
Pecusx 927163f41d Better Auto Defense symbol on status line. 2022-11-14 19:13:21 +01:00
Pirx cdd1b83367 smal readme updt 2022-11-14 09:11:15 -05:00
Pirx 5ba4ecd802 smal readme updt 2022-11-14 09:08:40 -05:00
Pirx 2e89c97c23 Merge pull request #147 from pkali/develop
Develop
2022-11-14 09:04:37 -05:00
Pirx d07c455b38 readme updt 2022-11-14 09:03:44 -05:00
Pecusx cd1518de6e Fix for lonely pixel #103
Pozor! It's not real fix, it's workaround!
2022-11-14 10:12:57 +01:00
Pirx 8603308693 no r+ opty, no bad seppuku frame 2022-11-13 23:57:09 -05:00
Pirx 7cbd5ad77e bytes left message 2022-11-13 08:29:48 -05:00
Pirx ce6ca29479 inventory ESC does not end the game, more dirt in liquid dirt 2022-11-12 20:08:15 -05:00
Pecusx 327b78a105 Better, longer, faster... Funky Bomb. 2022-11-12 21:41:50 +01:00
Pecusx bbedaee3ac Faster soildown after Funky Bomb. 2022-11-12 21:05:57 +01:00
Pecusx b8e3f16d23 Funky Bomb soildown fix. 2022-11-12 20:51:05 +01:00
Pawel Kalinowski 01629b219f bad pixel when measuring distance with draw 2022-11-12 14:15:23 -05:00
Pecusx 42f3e1c889 Liquid Dirt bug fixed! 2022-11-12 19:42:11 +01:00
Pirx 9f4b721e3f angle 0 is great again and again 2022-11-12 11:04:58 -05:00
Pirx 56f33a0ee9 angle 0 is great again 2022-11-12 10:58:37 -05:00
Pecusx 36fc60d5af SFX otimizations. Thanks @mikerro 2022-11-12 12:59:09 +01:00
Pecusx 3dd58736d7 Rounding proposal. 2022-11-12 12:18:07 +01:00
Pecusx c19befe31a Barrel drawing bug (lone pixels on left edge of screen) fixed! 2022-11-12 11:23:28 +01:00
Pecusx d0e682f0a3 New SFX and manuals update. 2022-11-11 21:39:45 +01:00
Pecusx 50cc7f16df New weapon (I promise - last one :) ) - Spy Hard! 2022-11-11 13:27:20 +01:00
Pirx ac1c501fa4 angle 0 elliminated 2022-11-11 01:26:11 -05:00
Pecusx f67656c5aa Update MANUAL_EN.md 2022-11-10 11:41:27 +01:00
Pecusx c419eac3de Improvements in "AutoDefense" - now works great! 2022-11-09 14:14:20 +01:00
Pecusx 3f74494bed New weapon - Auto Defense! And AI bugfixes 2022-11-09 10:32:50 +01:00
Pecusx a7493e1dcb Another new weapon! - Lazy Darwin :) 2022-11-08 19:31:12 +01:00
Pecusx b3b8633574 New weapon! - "Lazy Boy" 2022-11-08 18:45:06 +01:00
Pirx 06981a23fb Merge pull request #146 from pkali/develop
Develop
2022-11-07 02:00:43 -05:00
Pirx 4bd58b40fd README updt, bin added 2022-11-07 02:00:15 -05:00
Pirx 096bce6e88 main menu does not blink 2022-11-07 01:13:37 -05:00
Pecusx ef4612f3a4 Hovercraft is hovering too high bug - fixed! 2022-11-05 23:26:33 +01:00
Pecusx 1eae4054ed Minimally different menu layout. 2022-11-05 22:50:35 +01:00
Pecusx 9575dcee11 Minor graphic improvements.
Background color of "more" up/down lines (purchase screen). Color of purchase screen header.
2022-11-05 21:01:20 +01:00
Pecusx 2d1cecfb10 Wrap up and down inventory and shop scrolling #111 2022-11-05 18:10:42 +01:00
Pecusx e717306400 End of keyboard support in 5200 and improved music in NTSC.
Keypad on the 5200 works, of course. And it works very well.
2022-11-03 19:30:02 +01:00
Pecusx 1a1761bc4c Randomize macro reverted to old version - no Nuclear Winter :) 2022-11-03 18:43:02 +01:00
Pecusx 97d0862a72 5200 keypad works like the A800 keyboard - Great! 2022-11-02 20:22:56 +01:00
Pecusx 6e036b732e Zeroing variables in RAM (zero page) added. 2022-10-31 20:25:12 +01:00
Pecusx 8b0ab13c30 Variable declared as byte but used as word - bug 2022-10-31 20:13:30 +01:00
Pecusx 88e8108ee1 Manuals update 2022-10-31 16:33:11 +01:00
Pirx 8c61ce7e4d Merge pull request #145 from pkali/develop
Develop
2022-10-31 01:54:02 -04:00
Pirx eb38407868 manual_en update 2022-10-31 01:52:56 -04:00
Pirx 7d7da78fd6 manual_en update 2022-10-31 01:52:06 -04:00
Pirx 148c64f158 version, README and manual_en update 2022-10-31 01:51:20 -04:00
Pecusx 4bf6b33528 Keyboard autorepeat added #141 2022-10-30 12:51:38 +01:00
Pecusx cd70e8c1ec New (faster) ingame DLI 2022-10-29 17:40:00 +02:00
Pecusx c7aea8e3ab DLI optimization
No more WSYNC :)
2022-10-29 16:22:53 +02:00
Pecusx fe990a6668 WaitOneFrame procedure sometimes hung in NTSC
And manuals update.
2022-10-29 11:36:33 +02:00
Pecusx 6f369735c3 Final (or not :) ) PAL and NTSC music by @mikerro 2022-10-28 21:27:06 +02:00
Pecusx d462c84577 Bouncy Castle bounces Funky Bomb bug fixed #129 2022-10-27 20:33:54 +02:00
Pecusx 3ed648b01f Better music in NTSC 2022-10-26 19:15:37 +02:00
Pecusx 2aca68c41c ATRACT mode fixed. 2022-10-25 19:47:15 +02:00
Pecusx 5f5ea0a752 Credits flickering fixed! 2022-10-25 19:15:50 +02:00
Pirx 1891bcc7f1 5200 ingame dli fix 2022-10-25 09:38:01 -04:00
Pecusx 11592414a8 GameOver screen optimization and return of Tab in weapon selection :) 2022-10-25 10:03:04 +02:00
Pirx 89d6f4834b README updt 2022-10-16 23:51:42 -04:00
Pirx 6377e9a936 Merge pull request #144 from pkali/develop
Develop
2022-10-16 23:31:02 -04:00
Pirx 3654743456 5200 keyboard OK-ish 2022-10-16 23:29:04 -04:00
Pirx 378ac8b0f6 5200 bin 2022-10-08 09:17:12 -04:00
Pirx 76a20e26fb 800 recompile 2022-10-08 02:05:11 -04:00
Pirx 443b62e9e6 a bit better 5200 keyboard but still not good... 2022-10-08 02:04:20 -04:00
Pirx ecc8e11d13 minor style improv 2022-10-08 01:18:10 -04:00
Pirx da2c027fee WIP: 5200 keyboard revert 2022-10-05 11:21:49 -04:00
Pirx 6425431496 WIP: more keyboard shenanigans 2022-10-03 22:54:20 -04:00
Pirx f3b9092777 wip: screen lowered, 5200 game over does not flicker 2022-10-01 11:54:52 -04:00
Pirx 8d188f4497 5200 works 2022-09-27 19:18:26 -04:00
Pirx f9092110ac 5200 works 2022-09-27 19:17:31 -04:00
Pirx 0968613b02 WIP: 5200 works on atari800 emu, still fails in Altirra 2022-09-27 08:30:49 -04:00
Pirx 95303380e7 WIP: 5200 runs on a800 (fire to skip menu) 2022-09-26 11:37:42 -04:00
Pirx 174dbe0bed WIP: 5200 starts 2022-09-19 09:01:56 -04:00
Pirx d72ca57181 5200 compiles 2022-09-19 08:02:27 -04:00
Pirx 01160ff4b9 5200 POKEY addr fix 2022-09-18 10:57:20 -04:00
Pirx 6fc2882a6e WIP: 5200 port (not yet working) 2022-09-17 23:31:12 -04:00
Pirx c15a80443c moving finished 2022-09-17 15:35:24 -04:00
Pirx 415bfbba2b WIP: moving displays part 3 2022-09-17 14:36:36 -04:00
Pirx 2addb0905e WIP: moving displays part 2 2022-09-17 14:16:02 -04:00
Pirx fe55f94702 moving displays + opty part 1 2022-09-17 09:59:56 -04:00
Pecusx 0693e5d20e Tank No fix and optimizations 2022-09-16 18:48:58 +02:00
Pecusx 9c5c701ca1 Display dynamic->static optimizations 2022-09-16 17:54:56 +02:00
Pirx 2a83fa962d memory map settled (most .IFs removed) 2022-09-14 06:30:50 -04:00
Pirx 2c01691bf5 ver bump 2022-09-12 01:01:51 -04:00
Pirx fad8c2c06a merge conflict fix 2022-09-12 00:57:05 -04:00
Pirx 58eec3dc9c ver bump 2022-09-12 00:53:45 -04:00
Pirx a98c0b81b9 merge conflict reslv 2022-09-12 00:44:19 -04:00
Pirx 2471ca7282 a800 version for merge with develop 2022-09-12 00:41:17 -04:00
Pirx 4078722b29 5200 cart size full music, a 4KiB glitch to be fixed still 2022-09-12 00:21:23 -04:00
Pirx e782e101f5 rmtplyr de-self-modified 2022-09-11 21:32:31 -04:00
Pirx 8a73202fa3 rmtplayr_modified.asm <-- simplified and working RMT player 2022-09-11 20:32:16 -04:00
Pirx 0ad513d5cb shortened version 2022-09-10 16:17:09 -04:00
Pirx 87bc3bfd1e Merge pull request #130 from pkali/develop
v1.14
2022-09-05 23:05:53 -04:00
Pirx 82b4337a1b v1.14 2022-09-05 23:00:18 -04:00
Pirx c9855b66ba typos, not important 2022-09-05 22:29:16 -04:00
Pecusx d4e616abbb Batter manuals 2022-09-04 20:28:50 +02:00
Pirx cad3a0cf38 WIP: conditional compilation, the beginnings 2022-09-03 23:33:12 -04:00
Pecusx 13e15426fc Tank Hit fix
And TankWidth as variable (definition).
2022-09-02 23:38:56 +02:00
Pecusx dc9c724521 Bouncy Castle and Tracers fixes 2022-09-02 18:00:10 +02:00
Pecusx 216d9f9ca8 Small DrawTanks fix 2022-09-02 14:50:20 +02:00
Pecusx a441357948 More optimizations (158b saved) - please test! 2022-09-02 13:54:57 +02:00
Pecusx aa02b10bda Optimization (10b saved :) ) 2022-09-01 15:06:57 +02:00
Pecusx c4543208bf Minor otimizations (32b saved) 2022-09-01 14:31:58 +02:00
Pecusx 73db3edb45 More AI optimization (59b saved :) ) 2022-08-31 21:09:26 +02:00
Pecusx aa6c37eb61 AI optimizations and more (81b loss :( ) 2022-08-31 20:35:20 +02:00
Pecusx f45cbde341 AI optimization (50b saved) 2022-08-31 17:14:35 +02:00
Pirx c8eb7601c2 align align 2022-08-31 08:43:35 -04:00
Pecusx 3bd870e245 Minor optimizations (9b :) ) 2022-08-31 14:23:16 +02:00
Pecusx dc896f81b0 SoilDown optimization - 63 bytes saved 2022-08-31 10:26:00 +02:00
Pirx 667a0d4f20 Merge pull request #128 from pkali/develop
Develop
2022-08-30 00:21:48 -04:00
Pirx dbfae96022 readme updt 2022-08-30 00:21:13 -04:00
Pecusx 1a83611f22 Manuals update 2022-08-29 20:59:02 +02:00
Pecusx 9f454d2eff Added joystick repetition for name entry. 2022-08-29 20:25:10 +02:00
Pecusx 9b8476f9c1 Better music by Miker 2022-08-29 19:56:34 +02:00
Pecusx da52beb2bb Tank dropping error at the right edge definitely corrected! 2022-08-29 18:55:20 +02:00
Pecusx ddc8c5b414 AI fine tune 2022-08-29 15:22:10 +02:00
Pecusx b219c23a96 AI tuning and manuals update 2022-08-29 14:53:31 +02:00
Pecusx 19820d7bf9 Optimizations and fix for lonely weapon pointer 2022-08-29 14:20:30 +02:00
Pecusx 4a1c8aacda ListOfWeapons is now 32 and it works 2022-08-29 12:05:51 +02:00
Pecusx cc07bd52f2 WIP: Proper selection of weapons with Tab key 2022-08-29 09:42:05 +02:00
Pirx 39835d5f50 WIP: unfinished weapons optimization 2022-08-29 00:31:24 -04:00
Pirx ef361d044e opty + purchaseTable fix 2022-08-28 11:46:55 -04:00
Pirx 57844f2df0 schlongus disappearus 2022-08-28 10:53:10 -04:00
Pecusx dcdf5e6fc2 Entering names by joy! 2022-08-28 13:23:00 +02:00
Pirx 374df312fe intro like it was 2022-08-28 01:04:43 -04:00
Pirx 068e5af36b weapons optimization 2022-08-28 01:01:36 -04:00
Pecusx 851e8dd5af Proper cursor operation in tank names. 2022-08-27 16:12:03 +02:00
Pecusx d0ceb2ec0d Second young tester in creduts :) 2022-08-27 14:22:36 +02:00
Pecusx 69548da681 Manuals.... 2022-08-26 17:00:53 +02:00
Pecusx b57af2f9b2 Manuals update 2022-08-26 16:57:21 +02:00
Pecusx 6cb9e4fa1a Manuals describes AI tactics. 2022-08-26 10:53:48 +02:00
Pecusx cee668d756 Little visual improvement 2022-08-25 22:44:33 +02:00
Pecusx 9fbc1c9c65 Preparing to enter name of tank with joystick. 2022-08-25 20:52:03 +02:00
Pecusx 09651f163a Memory optimizations 2022-08-25 13:54:15 +02:00
Pecusx e70752c12d Cyborgs prefer to kill humans :) 2022-08-25 13:18:29 +02:00
Pecusx 07a2585147 Much better aiming for Cyborg, Spoiler and Chooser 2022-08-25 09:35:30 +02:00
Pirx 1a19d3069d manual and readme updt 2022-08-25 00:36:35 -04:00
Pirx 0b62cd9945 Merge pull request #127 from pkali/develop
Develop
2022-08-25 00:23:32 -04:00
Pirx 139499689d readme updt 2022-08-25 00:23:05 -04:00
Pecusx eeee624fe8 Esc correctly exits purchase screen. 2022-08-24 21:21:10 +02:00
Pecusx 8aa83f937f Small memory optimization 2022-08-24 21:07:19 +02:00
Pecusx 378fae3361 First letter in name bugfix and better Start+Option :) 2022-08-24 20:55:17 +02:00
Pecusx abb0bc52fb Better Start+Option handling 2022-08-24 17:25:44 +02:00
Pecusx 77317f263a Start + Option - Game Over 2022-08-24 12:44:33 +02:00
Pecusx 6f2e102c6a Manuals update 2022-08-24 09:11:58 +02:00
Pecusx 86ae6d55b9 Background color indicates type of walls. 2022-08-24 08:56:36 +02:00
Pecusx d2b412e860 Funky bomb bounces off the walls!
And optimizations.
2022-08-23 17:55:26 +02:00
Pecusx 492b662252 Boxy walls problem fix
Sometimes the bullet "bounced" off the ceiling indefinitely (above the screen).
2022-08-23 10:51:55 +02:00
Pecusx bfe777c4c6 Fix for silly "big mountains" bug.
It's not a real fix, but rather a workaround.
The putchar4x4 routine now checks for writing off-screen.
2022-08-23 10:13:22 +02:00
Pecusx 36d029bb87 Battery power fix 2022-08-22 23:58:02 +02:00
Pecusx c413deacb1 Merge branch 'develop' of https://github.com/pkali/scorch_src into develop 2022-08-22 21:39:20 +02:00
Pecusx 701aff0435 Select and Option keys works in game 2022-08-22 21:39:16 +02:00
Pirx 8b29184886 Merge pull request #126 from pkali/develop
Develop
2022-08-22 15:05:42 -04:00
Pirx 4218791068 readme updt 2022-08-22 15:05:21 -04:00
Pecusx 90eff39dda Manuals update 2022-08-22 20:30:24 +02:00
Pecusx 662bc1304a v 1.11
Manuals update
2022-08-22 20:25:41 +02:00
Pecusx 8052add0ab Veeeeeery long tank names fix 2022-08-22 19:48:46 +02:00
Pecusx 7f85a7ed6a Walls added! #50
And Battery activation fix :)
2022-08-22 19:27:02 +02:00
Pirx 99a0fde92a Merge pull request #125 from pkali/develop
ver fix
2022-08-22 01:13:02 -04:00
Pirx 18dfe4a725 ver fix 2022-08-22 01:12:16 -04:00
Pirx b5bf94b7e6 Merge pull request #124 from pkali/develop
ver fix
2022-08-22 01:11:17 -04:00
Pirx 3c841e409b ver fix 2022-08-22 01:09:59 -04:00
Pirx ea5098e274 Merge pull request #123 from pkali/develop
Develop
2022-08-22 01:09:04 -04:00
Pirx 64a7650992 v1.10 2022-08-22 01:08:31 -04:00
Pirx 2b38f64d17 manual pl 2022-08-21 22:16:07 -04:00
Pirx cd57bc3522 manual.md 2022-08-21 21:33:19 -04:00
Pecusx 1dce1f1777 PL manual update 2022-08-21 23:09:49 +02:00
Pecusx f2ec211b52 Press A to defensives activate 2022-08-21 23:05:45 +02:00
Pecusx bd2239e434 Defenses first to be activated after purchase 2022-08-21 22:23:46 +02:00
Pecusx 514638e1ca Hovercraft fix for buried tank 2022-08-21 21:13:43 +02:00
Pirx 8f9e5d018b randomizeforce fix 2022-08-21 14:04:20 -04:00
Pecusx fa5451e646 Fix for underground falling 2022-08-21 19:35:48 +02:00
Pecusx a609a1b331 Better Hovercraft text and good price :) 2022-08-21 17:32:26 +02:00
Pecusx b67c3230be Hovercraft fly high and low 2022-08-21 16:53:07 +02:00
Pecusx 1c55872935 Fix for very high Hovercraft fly 2022-08-21 15:26:06 +02:00
Pecusx bc01eec78e Small fixes and explosion range corrections 2022-08-21 13:39:04 +02:00
Pecusx de7bea2fa7 Hovercraft works fine at all #52 2022-08-21 11:35:18 +02:00
Pirx 132f2afd67 WIP: my hovercraft is full of eels 2022-08-21 01:11:58 -04:00
Pirx ed3952e89e narrow purchase screen #118 2022-08-21 00:13:22 -04:00
Pirx 1dc5a40633 zpage var opt #3 2022-08-20 18:37:10 -04:00
Pirx b4f1e42f78 zpage opt part 2 2022-08-20 16:51:25 -04:00
Pirx 0967ffbe19 text overflow fix 2022-08-20 16:28:39 -04:00
Pirx 9108c7c857 hovercraft erase optymiz 2022-08-20 12:22:49 -04:00
Pecusx 1ad9b6760d Small Hovercraft animation fix and updated PL manual 2022-08-20 16:58:37 +02:00
Pecusx c7e87c67ec Hovercraft animations and Tank falls bugfix 2022-08-20 15:18:57 +02:00
Pirx fb4585fbb5 git ignore updt. 2022-08-20 02:46:59 -04:00
Pirx 3e78ed016b eels talking texts 2022-08-20 02:46:11 -04:00
Pirx 0219fe8d14 linetable ellimination 2022-08-20 02:33:24 -04:00
Pirx a4d4e5f466 repo cleanup 2022-08-20 02:10:54 -04:00
Pirx 5a7e9bd769 library switch 2022-08-20 01:56:28 -04:00
Pecusx 1215065fbe Hovercraft SFX 2022-08-19 20:06:57 +02:00
Pecusx 5e558235c8 Flying tank bypasses the others 2022-08-19 18:53:56 +02:00
Pecusx 827658ab42 I forgot about the xex 2022-08-19 14:24:42 +02:00
Pecusx 338a4a0eaf Carrect tank fuel :) (for P/M "problems") 2022-08-19 14:22:46 +02:00
Pecusx 2e62350165 Mobile tank use fuel - test build 2022-08-19 14:08:52 +02:00
Pecusx e18c9714fd First attempt at mobile tanks 2022-08-19 13:17:14 +02:00
Pirx 38345c3359 check all chars for non-default tank name 2022-08-18 08:58:29 -04:00
Pirx ff1965a402 spaces in 4x4 text fix 2022-08-18 08:43:05 -04:00
Pecusx 39463ed0bb Spaces in tank names #120 2022-08-18 13:48:36 +02:00
Pecusx 316cf9569f "Buy me!" icon 2022-08-18 09:53:46 +02:00
Pecusx 8a3d3ae0a9 New offensive(defensive) weapon - "Buy me!" #97 2022-08-18 09:36:41 +02:00
Pecusx 63adc066da Tanks colors mapping and order from Adam 2022-08-17 20:14:11 +02:00
Pecusx 347635ff99 Real tanks colors from Adam (but order still not) 2022-08-17 19:46:40 +02:00
Pecusx 863d77d872 Correct number of lines in credits 2022-08-17 09:06:56 +02:00
Pecusx 0e9914316b New tester in credits :) 2022-08-16 23:17:51 +02:00
Pecusx a4b3a403b5 0 weapon bug fixed!
It allowed for multiple firing of weapons despite the lack of missiles
2022-08-16 22:53:29 +02:00
Pecusx 069fd55c28 More labels for understanding 2022-08-16 13:42:26 +02:00
Pecusx 1e3cfcf5a1 Funky Bomb fix after Smoke Tracer fix :) 2022-08-16 13:31:59 +02:00
Pecusx 84c4e0dcdd Smoke Tracer fixed! 2022-08-16 11:57:00 +02:00
Pecusx 185ca5db05 Rearranging display.asm and fix for Long Schlong activation :) 2022-08-16 11:29:41 +02:00
Pecusx 86c810d030 Merge branch 'develop' of https://github.com/pkali/scorch_src into develop 2022-08-15 14:34:18 +02:00
Pecusx bccb931433 Purchase/Activate description as constant text
Prepare to new DL (with jumps :) )
2022-08-15 14:33:51 +02:00
Pirx 255c240d7a minor label changes 2022-08-14 23:38:20 -04:00
Pecusx b5ea72ac93 Rest of the screen titles 2022-08-14 17:59:04 +02:00
Pecusx b6bf1532d7 Purchase/Inventory titles added 2022-08-14 17:37:06 +02:00
Pirx 045bdacf65 zpage opt 2022-08-14 11:03:45 -04:00
Pecusx b46b275b66 Inventory song added 2022-08-14 16:44:04 +02:00
Pecusx c413837ffd Activate defensives before round 2022-08-14 15:06:54 +02:00
Pirx d474ba7af8 README updt 2022-08-13 17:47:49 -04:00
Pirx 802b67673b Merge pull request #116 from pkali/developXL
Develop xl
2022-08-13 17:34:35 -04:00
Pecusx 5070b11be3 Battery lottery 2022-08-12 22:34:56 +02:00
Pirx 0d210b8d88 basic off 2022-08-12 10:59:15 -04:00
Pirx 171f37c73f intro colors fix 2022-08-12 09:52:51 -04:00
Pecusx cee53fd257 Now splash screen works on classic Atari 800 :) 2022-08-12 15:23:23 +02:00
Pecusx 224588eaa9 Manual PL fix :) 2022-08-12 13:49:25 +02:00
Pecusx 4cd864e47e Polish manual update 2022-08-12 13:44:05 +02:00
Pecusx 710570ae8a Press O to Game Over and small bugfix 2022-08-12 13:40:04 +02:00
Pirx 2820f66467 credits updt 2022-08-11 22:28:23 -04:00
Pecusx c84aecc886 Polish instruction 2022-08-11 22:52:16 +02:00
Pecusx 25ed106e02 Financial bonus for the winner 2022-08-11 21:23:34 +02:00
Pecusx bc65dafdac Long Schlong new price and SFX and minor fix 2022-08-11 18:21:45 +02:00
Pirx fd15ed9bb6 correct song during gameplay and version 1.00 2022-08-11 10:57:30 -04:00
Pirx 028c34bf31 cleanup 2022-08-11 10:43:45 -04:00
Pirx 3b0388fdaf Scorch50 splash 2022-08-11 10:15:38 -04:00
Pecusx 9d14950ef9 AI selected weapons on statusbar 2022-08-11 14:31:33 +02:00
Pecusx a205c37dc0 Atract and next player SFX fix 2022-08-11 11:10:23 +02:00
Pecusx 950d6922b4 New funky defensive weapon - Long Barrel 2022-08-11 10:46:23 +02:00
Pirx 22785ecdd5 kolorki Adama, 2022-07-21 2022-08-11 01:20:45 -04:00
Pirx 268d99ffaf Boucy Castle sfx 2022-08-11 00:54:00 -04:00
Pirx bb826b680d Auto Defense -> Bouncy Castle 2022-08-11 00:34:21 -04:00
Pecusx f45d2c8446 Better SFX, music for purchase and Credits fix 2022-08-10 20:52:26 +02:00
Pecusx 1f576a0c49 Preventing compilation of unused procedures. 2022-08-10 19:58:07 +02:00
Pecusx 054c5df5d7 New music file and Song change fixed! 2022-08-10 18:39:37 +02:00
Pecusx 1b4a73c362 RMT Player bug fix !!! 2022-08-10 13:30:30 +02:00
Pecusx f807fe8876 WaitOneFrame fixed 2022-08-10 00:56:56 +02:00
Pecusx f14b64a7f6 SFX audio channel corrected 2022-08-09 23:40:56 +02:00
Pecusx e45cc3e609 Preventing double RTM calls - but still hangs 2022-08-09 23:28:46 +02:00
Pecusx 192b1b01dc New old RMT player and bugfix 2022-08-09 22:32:16 +02:00
Pecusx 664dc1568d Variables initialization on strart 2022-08-09 13:30:21 +02:00
Pecusx 234fbc5a4a Tanks and mountains on Oprions screen but RMT still hangs 2022-08-09 10:10:44 +02:00
Pecusx 2f57c1f774 Game Over and Credits - but RTM problems 2022-08-08 21:18:47 +02:00
Pecusx 2d274b05d0 Clear variables optimisation and better text screen init 2022-08-07 16:01:09 +02:00
Pecusx 5b90bc571e Purchase AI uses bit tables instead bytes 2022-08-07 13:50:38 +02:00
Pirx c1b16cd1d1 missing MSX file added 2022-08-07 07:47:37 -04:00
Pirx cf08093cee FEAT update 2022-08-06 16:31:51 -04:00
Pirx e6d37e8410 song 0h1 2022-08-06 16:24:18 -04:00
Pirx 56ed83fbac PAUSE ellimintation 2022-08-06 16:16:47 -04:00
Pirx 2cda0bfb12 music v0g 2022-08-06 14:06:09 -04:00
Pirx e5ce864254 new song, VBL fix 2022-08-06 01:03:01 -04:00
Pirx 312bca4866 shorter ClearScreen 2022-08-05 23:56:27 -04:00
Pecusx 2bec64c38e Macro "wait" as procedure. 2022-08-05 17:13:13 +02:00
Pecusx d448eb2e1e Better? AI purchases and new WAIT macro 2022-08-05 12:04:14 +02:00
Pecusx 05409fa301 Diferent Cyborg purchase strategy 2022-08-05 10:12:44 +02:00
Pecusx e60776fd57 New optimized DisplayDec5 proc 2022-08-03 18:13:07 +02:00
Pecusx eed446545e 5 digits decimal display added 2022-08-03 15:00:07 +02:00
Pecusx 54cc76464e DirectHits and EarnedMoney counters added (for summary) 2022-08-03 14:36:03 +02:00
Pecusx 3ac678e68b Game Over screen exit 2022-08-03 00:17:11 +02:00
Pecusx 823be97490 Tank names and points on Game Over screen 2022-08-02 20:52:22 +02:00
Pecusx 8775e0b42e Colored lines on Game Over screen 2022-08-02 19:49:51 +02:00
Pecusx cd41f59175 Better set PM width (prepare to new Game Over screen) 2022-08-02 14:40:12 +02:00
Pecusx 91d5172fe2 To high parachute bug fixed! 2022-08-02 11:20:51 +02:00
Pecusx 3a836fa072 Better aiming (lower tank position - more force) 2022-08-01 23:26:06 +02:00
Pecusx 84da6fb7a0 Cyborg aiming fix 2022-08-01 23:12:48 +02:00
Pecusx 9eb0f8adff Faster AI (and fixed)
Correcion for barrel wider tjan tank (2 pixels)
2022-08-01 21:54:41 +02:00
Pecusx 2f1f016ce0 Fix for Blue Zombie tank :) 2022-08-01 10:12:23 +02:00
Pecusx 8e0aa974e7 Small loop ptimisation 2022-07-31 23:56:47 +02:00
Pecusx 6a0c3a91e9 AI optimisations 2022-07-31 22:49:34 +02:00
Pecusx 025afbce91 MagDeflector disappears properly 2022-07-31 21:29:03 +02:00
Pecusx edbfddf090 MagDeflector is working properly
And an attempt to repair the blue zombie tank.
2022-07-31 20:34:44 +02:00
Pecusx d7501b5c7c All AI tanks works but... 2022-07-31 18:35:51 +02:00
Pecusx 1945dd5e88 AI optimisations 2022-07-31 16:44:18 +02:00
Pecusx c725fd3827 New Cyborg AI 2022-07-31 16:14:01 +02:00
Pecusx c8ffba4603 AI internals 2022-07-29 13:27:59 +02:00
Pecusx 16f24793f6 Small memory optimisations 2022-07-28 22:08:43 +02:00
Pecusx f9fc25ec0f Preparing for better AI (invisible shot) 2022-07-28 21:38:38 +02:00
Pecusx 4d090f1766 All 3 tank shapes visible 2022-07-28 17:54:38 +02:00
Pecusx 9df4a49abe 3 tank shapes 2022-07-28 17:42:49 +02:00
Pecusx 0a68184f7c New (smaller) 8x8 font file and optimisations.
Second tank shape added.
2022-07-28 09:53:01 +02:00
Pecusx 807da90fda AI ​​uses White Flag 2022-07-27 22:40:53 +02:00
Pecusx 3855b0e2cf Robotanks barrel angle sound 2022-07-27 21:46:35 +02:00
Pecusx a01af2a608 New (drawto) barrels finished 2022-07-27 20:55:14 +02:00
Pecusx 47dcfa1af4 Final Shields fix
Now shields are draw ONLY in DrawTankNr proc.
2022-07-27 18:01:33 +02:00
Pecusx 02ff63d524 Game Over animation fix 2022-07-27 14:00:34 +02:00
Pecusx 9b42e79b61 Shields fix 2022-07-27 13:44:20 +02:00
Pecusx 2c3b4d148e Barrels optimisation and more 2022-07-27 13:03:10 +02:00
Pirx 513f13c5fc broken inventory rollback 2022-07-25 09:50:49 -04:00
Pirx 27bc443581 WIP: broken inventory 2022-07-25 00:50:16 -04:00
Pirx 992130f267 WIP: barrels anew 2022-07-24 09:19:03 -04:00
Pirx 1de19dfd26 WIP: drawto barrels 2022-07-23 15:42:22 -04:00
Pirx 960675d4ac WIP: drawto barrels 2022-07-23 15:20:19 -04:00
Pirx dc9e2de8df WIP: drawto barrels 2022-07-23 15:14:47 -04:00
Pirx a7e1bd519e WIP: drawto barrels 2022-07-23 15:14:00 -04:00
Pecusx 616452a01e Texts and more colours on Game Over screen 2022-07-19 10:37:09 +02:00
Pirx f20ce14dc3 moving GameoverDL to stop shaking 2022-07-18 23:51:05 -04:00
Pecusx d9012f4485 Good Game Over animation 2022-07-18 16:37:56 +02:00
Pecusx 5c38b7b12a Game Over animation - still not good. 2022-07-18 13:47:57 +02:00
Pirx 6cb817d463 sprites down the memory lane 2022-07-18 07:02:09 -04:00
Pecusx 19200be905 Game Over "animation" - TEST ONLY! 2022-07-18 12:44:33 +02:00
Pirx 34f0bb9d49 Merge pull request #113 from pkali/develop
build 148
2022-07-17 22:05:47 -04:00
Pirx f05af218f4 build 148 2022-07-17 22:04:58 -04:00
Pecusx 00b9575bcb Besto of the best laser
And code ordering.
2022-07-17 12:42:54 +02:00
Pecusx 738faec7e2 Better laser timing 2022-07-16 21:10:45 +02:00
Pecusx 6b0d8aa287 Great Laser. #110 2022-07-16 20:15:18 +02:00
Pecusx bc0148eb0f Fix for last fix :) 2022-07-16 14:52:45 +02:00
Pecusx 25dfe09a9d Real fix for rollers bug. 2022-07-16 14:44:12 +02:00
Pecusx 9e695f8fcd Rollers bug (blast radius at right edge of the screen) 2022-07-16 00:40:41 +02:00
Pecusx 12150a47c1 Slight graphic glitches when switching screens. 2022-07-15 10:18:57 +02:00
Pirx b12ad5efed new colors try 2022-07-14 20:35:30 -04:00
Pirx 1b2988069f results sprite fix 2022-07-13 22:59:58 -04:00
Pecusx 99d08367c4 PM code optimisation 2022-07-14 00:13:36 +02:00
Pirx 9acada4e9f FOX PLOTS FASTER 2022-07-13 17:18:34 -04:00
Pirx 85fac6e6cf Merge pull request #109 from pfusik/opt-plot
Optimize plot and point
2022-07-13 17:07:04 -04:00
Pecusx 9806613f2f New PMG for 6 colored tanks
but colors not set to new scheme.
2022-07-13 22:53:54 +02:00
Piotr Fusik af797029f9 Optimize plot and point 2022-07-13 17:58:04 +02:00
Pecusx 9ece051472 IA code optimisation
and "better" shields shapes.
2022-07-13 09:06:37 +02:00
Pecusx 6868eb8626 Better Shooter strategy
Poolshark and Tosser no longer cheat :)
2022-07-11 21:43:07 +02:00
Pecusx e94a356e6d Auto Defence angle fix 2022-07-11 18:26:59 +02:00
Pirx 93b16bd55a Merge pull request #108 from pkali/develop
build 147
2022-07-10 21:14:18 -04:00
Pirx 752b84ae2e version updt 2022-07-10 21:13:18 -04:00
Pirx d751379361 README updt 2022-07-10 21:12:00 -04:00
Pirx 01d941b013 dynamic angle #75 2022-07-10 20:45:08 -04:00
Pirx b63b7a3fb1 tank names for robots #107 2022-07-10 13:17:56 -04:00
Pirx c28d243719 improved mountains heights #86 2022-07-10 12:00:53 -04:00
Pirx 51975ccfbf first cheap attempt mountains heights #86 2022-07-09 22:35:12 -04:00
Pirx 541a7566cb tank names on gfx screen when aiming #107 2022-07-09 21:42:30 -04:00
Pirx 48bfd3824d zero page loading elimination 2022-07-09 08:31:48 -04:00
Pecusx e307f1a14a "New" shape of Force Shield 2022-07-07 20:04:32 +02:00
Pecusx 2fecc8d630 Different shape of Heavy Shield 2022-07-07 19:52:30 +02:00
Pecusx 1998c98784 Leap Frog and Funky Bobmb explosion range 2022-07-07 18:32:31 +02:00
Pecusx 4dc9b4ebb0 Havy and Force Shields swap (for better AI) 2022-07-06 20:55:22 +02:00
Pecusx 8e60cfa723 Better Napalms range calculation 2022-07-06 20:43:24 +02:00
Pecusx 9ee021b1f5 Small Soildown oprimization 2022-07-06 18:21:52 +02:00
Pecusx d738e6a6e8 Small optimisation 2022-07-05 21:16:22 +02:00
Pecusx d0838fa163 Statusbar display improvements - robo-tanks. 2022-07-05 15:02:52 +02:00
Pecusx a353e3bdb9 Better display of robo-tanks names 2022-07-05 14:30:40 +02:00
Pecusx 5933b00153 AI tanks display live angle changes. 2022-07-05 13:26:10 +02:00
Pecusx a5add9d9c4 Old way of displaying angle #105 2022-07-05 13:09:29 +02:00
Pecusx f2c7b9c5a5 Napalm for AI
now with xex :)
2022-07-05 10:22:59 +02:00
Pecusx e87d875467 Revert "Napalm for AI"
This reverts commit 876ea45eaf.
2022-07-05 10:21:19 +02:00
Pecusx 876ea45eaf Napalm for AI 2022-07-05 10:20:25 +02:00
Pecusx b164a79fd4 Napalm and Hot Napalm are working!
And they have new prices.
2022-07-05 09:36:50 +02:00
Pecusx 0984aee64f Napalm and Hot Napalm added
... but something is wrong
2022-07-04 21:25:57 +02:00
Pecusx 51c257c8e8 Better Napalm flames (test)
And AI cosmetics
2022-07-04 14:49:44 +02:00
Pecusx af4eb201b2 Second Napalm test
Only display and clear from screen.
2022-07-04 14:14:23 +02:00
Pecusx 85d0fb4778 First Napalm test
Display test only!
2022-07-04 13:09:07 +02:00
Pecusx 0a7c76f74a Napalm characters (test) 2022-07-04 08:36:45 +02:00
Pirx 6d5f83195f typo 2022-07-03 23:45:40 -04:00
55 changed files with 10399 additions and 4648 deletions
+6 -1
View File
@@ -1,2 +1,7 @@
.project
*.bak *.bak
scorch.lab
scorch.lst
textproc.lab
textproc.lst
artwork/talk.as_
+249
View File
@@ -0,0 +1,249 @@
# Basic instruction manual:
You can play using the keyboard (all functionality) or the joystick in the first port (all functionality necessary for gameplay).
## 1. Game Option Selection.
On the first screen, you can configure gameplay options:
* number of players (2 - 6) includes both human and computer-controlled players
* the initial amount of cash of each player (2K is the optimal value we chose, but for short games, it is worth choosing a higher value)
* gravity
* maximum wind strength (wind is drawn at the beginning of each round or during the round between turns, here we can choose how strong it can be)
* number of rounds in a game
* missile speed (does not affect the flight path - only changes the apparent missile speed - does not change anything in the gameplay itself)
* frequency of suicides :) - if for a number of turns the game has not recorded hits (tanks are constantly shooting inaccurately), after one of such misses a tank commits suicide - here you determine how long they can "shooting for the stars" :) - if only people play the optimal setting is "norm", in the case of computer-controlled players ... you choose.
* The height (and undulation) of the mountains from almost flat (NL - Kingdom of the Netherlands), to soaring and high (NP - Federal Democratic Republic of Nepal)
* the way the walls (edges of the screen) work:
* none - projectiles that flew off the screen do not return (black color of the screen frame)
* wrap - the screen "wraps" and projectiles that flew to the right appear on the left side and vice versa (purple color of the screen frame)
* bump - the right and left walls deflect projectiles that want to fly through them (dark blue color of the screen frame)
* boxy - just like bump, except that the "ceiling" also reflects projectiles (green color of the screen frame)
* rand - at the beginning of each round, one of the above 4 ways the walls work is drawn.
During gameplay, the current mode of the walls is represented by the color of the screen frame: none - black, wrap - purple, bump - dark blue, boxy - green.
Select options with cursor keys or a joystick.
The [TAB] or [SELECT] key, and on the Atari 5200 console, the [5] controller key change the color of the mountains (3 versions to choose from) or (if the cursor indicates the wind strength selection option "Wind") change the way the wind strength is drawn from "every round" to "every turn" and vice versa. Drawing every turn is indicated by the "?" sign next to the word "Wind".
The [RETURN] key or a joystick button moves to the next screen.
## 2. Entering the name of players and selecting the level of computer-controlled players
The second screen is shown for each player. Here you can use the cursor keys or joystick to select whether the tank will be driven by a human (HUMAN option) or a computer (other options).
The [TAB] or [SELECT] key, and on the Atari 5200 console the [5] controller key allow you to choose which joystick port the player will use.
The [INVERSE] or [OPTION] key allows you to select one of the 3 available tank shapes. On the Atari 5200 console, this is achieved by cycling through joystick ports with the [5] key.
At the same time, you can enter the name of the selected player from the keyboard.
When the [RETURN] key is pressed or the Joystick button is pressed briefly, the screen switches to the next player until the difficulty levels for each player are selected.
The player's name can also be entered with the joystick. After pressing and holding the button for more than 1s. you can use up/down movements to change the letter being entered, and left/right movements to change its position in the name. Releasing the button ends the name entry and returns to the level selection.
If the name is not entered, it will be supplemented with the default name.
## 3. Shopping screen (before each round)
On this screen, you can make purchases of offensive and defensive weapons. Only those weapons that the player can afford are visible, along with information about the price and the number of units of a given weapon that will be obtained for that price. The information on the screen probably needs no more description. You move through the lists with the cursor keys (up and down) or with the joystick, the [TAB] key or the left arrow or the left joystick tilt change the screen to defensive or offensive weapons, the [SPACE] key or the right arrow and also the joystick to the right does the purchase of the indicated weapon.
The [RETURN] key or the joystick button press switches to the defensive weapon activation screen. Here you can activate previously bought defensive (or offensive after switching with [TAB], etc) weapons. This makes it possible to activate shields and others before the round starts.
Another [RETURN] key or joystick button press switches to the next player's shopping screen.
(For computer players this screen is not shown.)
## 4. The main screen of the game
The status line shows which player is currently allowed to take a shot and a set of other information:
* player's tank name,
* active joystick number
* currently selected offensive weapon,
* the player's remaining energy points and if he has an active defensive weapon that has its energy - in parentheses the energy level,
* the angle and the direction of the barrel set by the player,
* the shot strength set by the player (the maximum shot strength is limited by the player's energy - it can not exceed the energy * 10 . This means that you can fire weaker shots only when having a small amount of energy,
* the current round number,
* wind speed and direction,
* "computer" symbol if **Auto Defense** is active,
* in parentheses is the name of the active defensive weapon - if there is any activated by the player.
The keyboard controls here are simple, cursor keys or joystick: left/right - change the angle of the barrel, up/down - change the the force of the shot.
| A800 | 5200 | function |
| --- | --- | --- |
| [SPACE] | [0] | or joystick button pressed briefly - firing a shot. |
| [TAB] or [SELECT] | [5] | selection of offensive weapons (this option is not available directly with the joystick - you need to select Inventory). In the main menu it changes the mountain shading, indicated by the hill color change at the bottom of the screen. |
| [I] | [9] | or longer holding the joystick button - go to Inventory. It is a screen (actually two) with the same layout as the shopping menu, it also works similarly except that here you don't buy weapons, but choose one of the offensive ones to shoot or activate a defensive weapon. |
| [A] or [OPTION] | [7] | go directly to the defensive weapons activation.
| [M] | [PAUSE] | disable/enable background music. |
| [S] | [RESET] | disable/enable effect sounds. |
| [START] | N/A | speed up some game animations. |
| [O] | [3] | end the current game and jump to the Game Over screen with a summary. The summary of the results does not take into account the current round of the game, but only the rounds completed earlier. This corresponds to pressing the [ESC] key with the difference that the summary and credits are displayed. |
| [START] + [OPTION] | N/A | immediately force the end of the game (Game Over), just like [O] but without confirmation.
| [G] | N/A | changes the mountain shading |
| [ESC] | [*] | during the entire game at any time (unless the computer is playing, then sometimes you have to wait a while) you can press the [ESC] key, which allows you to abort the game and return to the beginning (of course, there is protection against accidental pressing). |
| [Y] | [1] | when asked to abort or terminate the game - confirmation |
## 5. Game mechanics - offensive weapons
### Energy of tanks.
- At the beginning of each round, each tank has 99 ash units of energy.
- Tanks' energy is depleted in 3 ways:
* one unit after each shot is fired
* while falling (one pixel down - 2 units).
* when a projectile hits the tank or next to it - and here the amount of energy subtracted depends on the distance from the center of the explosion and the type/power of the projectile.
### How energy subtraction works (and earning money!).
After each round the amount of money gained/lost is calculated, this is done on the basis of two variables accumulated by each tank during the round. These variables are:
`gain` - energy "captured" from tanks hit (also if you hit yourself :) and here's the catch, if you have very little energy left it can be profitable to hit yourself with a powerful weapon!
`lose` - energy lost due to explosion/fall (and here it is important - to count the total loss of energy even if the tank has less at the moment of hit).
In addition, the tank that won the round has a parameter gain (captured from hit tanks energy) increased by the remaining energy at the end of the round (because it did not die and should have it - although it also happens otherwise :) )
Specifically:
### After each round:
`money = money + (20 * (gain+energy))`.
`money = money - (10 * lose)`.
`if money <0 then money=0`.
(at the start of each round `gain` and `lose` have a value of 0).
During a round, if another tank is hit as a result of a shot fired by a tank, the tank firing the shot "gets the energy" taken away from the hit tank.
### tank taking a shot:
`gain = gain + EnergyDecrease`.
### tank hit:
`lose = lose + EnergyDecrease`.
Where `EnergyDecrease` is the loss of energy due to the hit.
Of course, at the same time the hit tank loses the amount of energy stored in `EnergyDecrease`, except that here the loss cannot exceed the energy you have.
## How a hit works.
Each weapon that results in an explosion has its own blast radius.
After the explosion, every tank in its range loses energy.
It works in such a way that if the hit is exactly on the center point of the tank `EnergyDecrease` receives the maximum value for the weapon, and for each pixel of distance from the center of the tank this value is reduced by 8.
For example, if a hit with the Baby Missile weapon hits the center of the tank perfectly, it will lose exactly 88 units of energy (plus what it loses falling after the explosion).
If you hit with the same weapon at a distance of 10 pixels from the center of the tank, the loss will be only 8 units.
And here are the values of maximum energy loss for individual weapons. If a weapon explodes several times, each explosion is calculated independently (additional values in the table):
| Offensive weapons | maximum energy loss |
| --- | --- |
| Baby Missile | 88 |
| Missile | 136 |
| Baby Nuke | 200 |
| Nuke | 240 |
| LeapFrog| 136 112 112 |
| Funky Bomb | 168 88 (* 5) |
| MIRV | 136 (* 5) |
| Death's Head | 240 (* 5) |
| Napalm | 40 (this weapon is different and the distance from the center is not determined, simply any tank in range of the flames loses 40 units of energy) |
| Hot Napalm | 80 (the rule is the same as in Napalm) |
| Baby Roller | 88 |
| Roller | 168 |
| Heavy Roller | 240 |
| Riot Charge | 0 (no energy is subtracted, but a portion of the ground upward from the hit point in a 31-pixel radius is removed) |
| Riot Blast | 0 (as in Riot Charge, but in a radius of 61 pixels) |
| Riot Bomb | 0 (no energy is subtracted, but the ground in a radius of 17 pixels from the hit point is destroyed - as in the case of Missile. The weapon is useful for digging out after being buried, or for undermining an opponent) |
| Heavy Riot Bomb | 0 (as in Riot Bomb, but the explosion radius is 29 pixels from the point of impact - as in the case of Nuke) |
| Baby Digger | 0 (no energy is subtracted, but a portion of the ground is undermined in a radius of 60 pixels from the point of impact) |
| Digger | 0 (as above - greater undermining) |
| Heavy Digger | 0 (as above - greatest undermining) |
| Baby Sandhog | (as above - another way of undermining) |
| Sandhog | 0 (as above - larger dig) |
| Heavy Sandhog | 0 (as above - largest dig) |
| Dirt Clod | 0 (no energy is subtracted, but a ground ball with a radius of 12 pixels from the hit point is created. The weapon is useful for burying the opponent) |
| Dirt Ball | 0 (as above, but the radius of the ball is 22 pixels) |
| Ton of Dirt | 0 (as above, but the radius of the ball is 31 pixels) |
| Liquid Dirt | 0 (floods the ground at the point of hit with liquid soil, filling in the depressions) |
| Laser | x 100 (but here it is also different - equally 100 only in the case of a direct hit simply subtract 100 units of energy - that is, the tank always dies) |
Large points received by the player is the number of tanks that died earlier than him. If any of the other tanks capitulated earlier (**White Flag**) is not added to those that died and does not give points.
Only these points determine the order in the summary
## 6. And now for defensive weapons:
* **White Flag** - causes the surrender of the player (can sometimes be useful in a hopeless situation). The advantage is that by surrendering you don't give a big point to your opponents and don't cause one of them to gain by killing us, you also limit the loss of your energy and also cash. An important note - this is the only defensive weapon that can be deactivated. All you have to do is re-enter inventory and once again select its activation.
* **Battery** - when activated, it recharges the tank's energy to full (99 units). It is one of three defensive weapons that does not deactivate other defensive weapons when used.
* **Hovercraft** - a weapon that allows the tank to move. It has its own fuel supply in form of electric eels and in addition, it can be activated multiple times during the same turn, and after using it, you can activate another defensive weapon and fire a shot in the same turn. After using it, the tank rises above the mountains and using the cursor keys or a joystick you can move the tank to a new position. [SPACE] or the joystick button cause the tank to land in a new place. You can fly until the tank runs out of eels (presented on the status bar like the energy of a defensive weapon), if the eel fuel runs out the tank will fall down on its own. It is not possible to land on other tanks.
* **Parachute** - does not protect against loss of energy due to a neighboring explosion, makes you not lose energy during ONE fall. After such a fall, it deactivates and a new parachute must be activated.
* **Shield** - the simplest shield works exactly the opposite of **Parachute**, it does not protect against energy loss while falling, instead it protects against energy loss caused by ONE adjacent explosion. It protects once, no matter how strong the explosion is (whether tis but a scratch or a direct hit with a nuke), and deactivates immediately afterward.
* **Heavy Shield** - a shield with its own energy (at the start of 99 units), it works the same as **Shield** (does not protect against falling) with the exception that it has its own energy resource. When exploding, the energy of this shield is reduced first, and if it reaches 0, the shield deactivates and further reduces the tank's energy. Due to this action, a tank with this type of shield can be "killed" by undermining it, because falling reduces the energy of the tank and not the shield.
* **Force Shield** - the strongest shield - works just like Heavy Shield only that it is combined with **Parachute**. What is important in this case, falling does not take energy away from the shield or the tank. It is only taken away by hits.
* **Bouncy Castle** - a passive-aggressive weapon :). It works as follows - in a case of a direct tank hit (and shield), it causes the projectile to "bounce" in the opposite direction with the same force with which it was fired. In the absence of wind and a difference in level, the weapon then hits the tank that fired it. After such a bounce, it deactivates. As the weapon reacts in this way only to precise hits, it is also works like **Heavy Shield** and has 99 units at the start (we will probably have to rethink this value and give a smaller one here).
* **Mag Deflector** - the second passive-aggressive weapon :) . In case of a direct hit on a tank (and shield), it causes the hit point to move randomly to the left or right side of the protected tank, but not very far, so you can get "shrapnel" with stronger weapons. As in the case of **Bouncy Castle**, it is also a shield that corresponds to the action of **Heavy Shield** and has 99 units at the start (probably here we will have also to rethink this value and give a smaller one).
* **Nuclear Winter** - adds nothing, takes nothing away :) - in fact, it is not so much a defensive weapon as a double-edged one. It floods the area with "radioactive" fallout, which is ordinary soil. If you do not have at hand any weapon that digs up the terrain, and for that a shield (preferably disposable), then after such "fallout" you will have to shoot yourself - because being underground is otherwise impossible. Alternatively, **White Flag** always remains.
* **Long Schlong** - a special weapon :) - Costs a lot, doesn't really help with anything (except possibly digging yourself out but only when slightly buried but it has a cool name and looks cool :) - It can be activated independently of other defensive weapons and remains active until the end of the round (it cannot be deactivated).
* **Lazy Boy** - it is not actually a defensive weapon. It is an aiming aid. When it is activated, the tank tries to aim at the nearest enemy and automatically adjusts the power of the shot and angle. If it has too little energy, it can sometimes aim wrong (it uses a method like **Cyborg** to aim). Like **Battery**, it does not deactivate other defensive weapons when used. Note: There is no point in activating this weapon before the round, targeting will not take place because there is nothing to target yet.
* **Lazy Darwin** - works just like **Lazy Boy** but targets the weakest opponent. In this weapon, after automatic targeting, "visual targeting" remains active, so you can easily change the target and independently select another opponent by seeing if you hit him.
* **Auto Defense** - activates the mode of automatic activation of defensive weapons. After its activation, the tank automatically activates the strongest shield it has (consuming it, of course) at any time when there is no shield (also between shots of other players). At the same time, if the tank's energy level drops below 30 units, it automatically activates **Battery** if it has it. This weapon remains active until the end of the round and is indicated by the "computer" symbol before the name of the active defensive weapon in the status line. It is the second defensive weapon that does not deactivate other defensive weapons when used.
* **Spy Hard** - Help for the forgetful :) . When activated, it shows a preview of information about the next opponents one by one. Left/Right - changes the "spied" tank. Fire/Space/Return/Esc - ends the "spying". This is the last defensive weapon, which does not deactivate other defensive weapons when used.
Due to the different warhead tracking system of **MIRV** weapons, the **Bouncy Castle** and **Mag Deflector** defensive weapons only use the shielding function when hit by these weapons. In addition, **MIRV** warheads do not bounce or fly through sidewalls when falling!
None of the shields protect against **Napalm**. **Bouncy Castle** or **Mag Deflector** on a direct hit will deflect it or carry it past, but just hit very close to a tank and its shield will not save it.
**White Flag**, **Hovercraft** and **Nuclear Winter** weapons, when selected, require activation, this is accomplished by "firing a shot" after the selection of that weapon. Of course, the shot of the offensive weapon is then not fired, but only the selected defensive weapon is activated.
You can only have one defensive weapon active at a time (except **Long Schlong** of course :) ). You can always change the decision and activate another defensive weapon or deactivate **White Flag** before firing.
And of course, activating a weapon when you already have some other weapon activated causes the loss of the previous one (no returns :) ).
## 7. "Other" weapons:
* **Best F...g Gifts** - this is a 'loot box', not a weapon per se. Buying it draws one of the offensive or (rarely) defensive weapons and adds it to the player's arsenal. It is a lottery in which you can lose (if you draw a weapon cheaper than the **Best F...g Gifts** price) but also gain. You can get a weapon otherwise not affordable at all! There is a small probability of drawing by **Best F...g Gifts** itself :). You can then try to use it in battle.
## 8. difficulty levels of computer-controlled opponents:
The game has 8 difficulty levels of computer-controlled opponents. Or actually 7 different ones and one "surprise". Each has its own way of buying defensive and offensive weapons and a different method of target selection and targeting itself, as well as weapon selection. They are arranged in the list according to increasing "skills":
* **Moron** - the dumbest of opponents (which does not mean the safest). Shoots completely at random using only one weapon - **Baby Missile**. He doesn't buy anything and doesn't know how to use defensive weapons.
* **Shooter** - This opponent does not shoot blindly. He chooses one direction for himself. Based on his own position - he shoots in the direction from which there is more space assuming that this is where the other tanks are. He starts firing from a high angle and shot after shot changes this angle to a lower and lower angle trying to fire the entire area on the chosen side. He always fires with the best weapon he has (the highest on the list of weapons he has - that is, not necessarily the best). He does not use defensive weapons even though he buys them! At the beginning of the round, he makes 1 attempt to buy defensive weapons (only from the **Battery** - **Strong Parachute** range) and 4 offensive weapons (from the **Missile** - **Heavy Roller** range).
* **Poolshark** - When attacking, he sets the nearest tank as his target, then selects the angle of the shot, and tries to select its strength by drawing it from the selected range. He always shoots with the best weapon he has. He uses defensive weapons. With a probability of 1:3, he activates the best defensive weapon he owns (the highest on the list of weapons he owns - that is, not necessarily the best) before firing. If his energy level drops below 30 units - he uses **Battery** (of course, if he bought it before), if the energy drops below 5 and he has no **Battery** he surrenders - **White Flag**. At the beginning of the round he makes 1 attemp to buy defensive weapons and 6 offensive weapons.
** **Tosser** - When attacking, he acts exactly like **Poolshark** however, he may have a "better" weapon inventory due to a different purchase tactic. He always activates the best defensive weapon he has before shooting. And just like **Poolshark** he uses **Battery** and **White Flag**. At the beginning of the round, he assesses how much money he has and depending on that, he makes (money/5100) attempts to buy defensive weapons and then checks again how much money he has left and makes (money/1250) attempts to buy offensive weapons.
** **Chooser** - Takes as a target the weakest opponent (with the least amount of energy) and aims very precisely, but before the shot the energy of the shot is modified by the parameter of luck :) , that is, despite the precise aiming it does not always hit. He shoots with the best weapon he has unless the target is close. Then he changes his weapon to **Baby Missile** to avoid hitting himself. He always activates the best defensive weapon he has before shooting and, like **Poolshark**, uses **Battery** and **White Flag**. He purchases just like **Tosser**.
* **Spoiler** - He shoots exactly like **Chooser** except that he has more luck :) , which means that even if he doesn't hit the target of his choice, it can be a more precise shot than **Chooser**. He uses defensive weapons exactly like **Chooser**. At the beginning of the round, he assesses how much money he has and depending on that, he makes (money/5100) attempts to buy defensive weapons and then checks again how much money he has left and makes (money/320) attempts to buy offensive weapons. When buying defensive weapons, he buys only strong and precise weapons - that is, weapons that won't accidentally hurt him.
** **Cyborg** - Takes aim at the weakest opponent (with the least amount of energy) but prefers human-controlled opponents. Aims very accurately and in the vast majority of cases hits on the first shot. He fires the shot with the best weapon he has unless the target is close. Then he changes his weapon to **Baby Missile** to avoid hitting himself. He uses defensive weapons exactly like **Chooser**. He shops exactly like **Spoiler**.
* **Unknown** - Before firing each shot, he randomly chooses a course of action from **Poolshark** to **Cyborg** and applies his tactics. However, the tactics of weapon purchases are always identical to **Tosser**.
Trying to buy a weapon (offensive or defensive) is as follows:
First, one of the weapons is drawn (among all possible offensive or defensive weapons). Then a check is performed to see if the drawn weapon is in the list of weapons possible for purchase by the tank. If not, no weapon is bought in this trial, and if so, its price is checked. If the tank has that much money, the weapon is bought, otherwise the trial ends without making a purchase.
Table of weapons purchased by: **Shooter**, **Poolshark**, **Tosser** and **Chooser**.
| Offensive weapons | Defensive weapons |
| --- | --- |
| Missile | Battery |
| Baby Nuke | Parachute |
| Nuke | Strong Parachute |
| LeapFrog | Mag Deflector |
| Funky Bomb | Shield |
| MIRV | Heavy Shield |
| Death's Head | Force Shield |
| Napalm | Bouncy Castle |
| Hot Napalm | |
| Baby Roller | |
| Roller | |
| Heavy Roller | |
Table of weapons purchased by: **Spoiler** and **Cyborg**.
| Offensive weapons | Defensive weapons |
| --- | --- |
| Missile | Battery |
| Baby Nuke | Strong Parachute |
| Nuke | Mag Deflector |
| Hot Napalm | Heavy Shield |
| | Force Shield |
| | Bouncy Castle |
+249
View File
@@ -0,0 +1,249 @@
# Podstawowa instrukcja:
Grać można przy użyciu klawiatury (wszystkie funkcjonalności) lub joysticka (wszystkie funkcjonalności niezbędne w rozgrywce).
## 1. Wybór opcji gry.
Na pierwszym ekranie możemy skonfigurować opcje rozgrywki:
* ilość graczy (2 - 6) obejmuje tak ludzi jak graczy sterowanych przez komputer
* początkową ilość gotówki każdego z graczy (8k to wybrana przez nas wartość optymalna, lecz przy krótkich rozgrywkach warto wybrać większą wartość)
* grawitacja
* maksymalna siła wiatru (wiatr jest losowany na początku każdej z rund lub w czasie rundy pomiędzy turami, tu możemy wybrać jak silny może być)
* liczba rozgrywanych rund
* szybkość lotu pocisków (nie ma wpływu na tor lotu - zmienia jedynie widoczną prędkość rysowania - nie zmienia nic w samej rozgrywce)
* częstotliwość samobójstw :) - jeśli przez ileś tur gra nie odnotowała trafień (czołgi ciągle strzelają niecelnie) jeden z takich pudłujących czołgów popełnia samobójstwo - tu określamy jak długo mogą “strzelać w próżnię” :) - jeśli grają tylko ludzie optymalne ustawienie to “norm”, w przypadku graczy sterowanych przez komputer… wedle uznania.
* wysokość (i pofałdowanie) gór od prawie płaskich (NL - Królestwo Niderlandów), do strzelistych i wysokich (NP - Federalna Demokratyczna Republika Nepalu)
* sposób działania ścian (krawędzi ekranu):
* none - pociski, które wyleciały poza ekran nie wracają (czarny kolor ramki ekranu)
* wrap - ekran "zawija się" i pociski, które wyleciały w prawo pojawiają się z lewej strony i odwrotnie (fioletowy kolor ramki ekranu)
* bump - prawa i lewa ściana odbijają pociski, które chcą przez nie przelecieć (granatowy kolor ramki ekranu)
* boxy - tak jak bump, tyle że "sufit" także odbija pociski (zielony kolor ramki ekranu)
* rand - na początku każdej rundy losowany jest jeden z 4 powyższych sposobów działania ścian
W trakcie rozgrywki aktualny sposób działania ścian reprezentowany jest przez kolor ramki ekranu: none - czarny, wrap - fioletowy, bump - granatowy, boxy - zielony.
Wybór opcji klawiszami kursora lub joystickiem.
Klawisz [TAB] lub [SELECT], a na konsoli Atari 5200 klawisz [5] kontrolera zmieniają kolor gór (3 wersje do wyboru) lub (leśli kursor wskazuje opcję wyboru siły wiatru "Wind") zmieniają sposób losowania siły wiatru z "co rundę" na "co turę" i odwrotnie. Losowanie co turę jest sygnalizowane znakiem "?" przy słowie "Wind".
Klawisz [RETURN] lub przycisk Joysticka przechodzi do następnego ekranu.
## 2. Wprowadzanie nazwy graczy i wybór poziomu graczy sterowanych przez komputer
Drugi ekran powtarza się dla każdego z graczy można na nim klawiszami kursora lub joystickiem wybrać czy danym czołgiem będzie kierował człowiek (opcja HUMAN) czy też komputer (pozostałe opcje).
Klawisz [TAB] lub [SELECT], a na konsoli Atari 5200 klawisz [5] kontrolera pozwalają wybrać z którego portu joysticka będzie korzystał gracz.
Klawisz [INVERSE] lub [OPTION] umożliwiają wybór jednego z 3 dostępnych kształtów czołgów. Na konsoli Atari 5200 uzyskuje się to poprzez cykliczne wybieranie kolejnych portów joysticka klawiszem [5].
Jednocześnie z klawiatury można wprowadzić nazwę wybranego gracza.
Po naciśnięciu klawisza [RETURN] lub krótkim naciśnięciu przycisku Joysticka ekran przechodzi na następnego gracza aż zostaną wybrane poziomy trudności dla wszystkich.
Nazwę gracza można wprowadzać także przy pomocy joysticka. Po wciśnięciu i przytrzymaniu przycisku ponad 1s. za pomocą ruchów góra/dół można zmienić wprowadzaną literę, a lewo/prawo jej pozycję w nazwie. Puszczenie przycisku kończy wprowadzanie nazwy i wraca do wyboru poziomu.
Jeśli nazwa nie zostanie wpisana, to zostanie uzupełniona nazwą domyślną.
## 3. Ekran zakupów (przed każdą rundą)
Na tym ekranie można dokonywać zakupów broni ofensywnych i defensywnych. Widoczne są tylko te bronie na które gracza stać wraz z informacją o cenie i ilości jednostek danej broni, którą za ten cenę otrzymamy. Informacje na ekranie nie wymagają chyba więcej opisu. Po listach poruszamy się klawiszami kursora (góra i dół) lub joystickiem, klawisz [TAB] lub strzałka w lewo czy też ruch joystickiem w lewo zmieniają ekran na bronie defensywne lub ofensywne, klawisz [SPACJA] lub strzałka w prawo a także joystick w prawo realizują zakup wskazanej broni.
Klawisz [RETURN] lub przycisk joysticka przechodzi do ekranu aktywacji broni defensywnych.
Na ekranie tym można aktywować zakupione wcześniej bronie defensywne czy też ofensywne. Obsługiwany jest identycznie jak ekran zakupów, jednak [SPACJA] lub strzałka w prawo a także joystick w prawo realizują aktywacje wskazanej broni. Umożliwia to aktywowanie osłon jeszcze przed rozpoczęciem rundy.
Klawisz [RETURN] lub przycisk joysticka przechodzi do ekranu zakupów następnego gracza.
(oczywiście dla graczy komputerowych ten ekran się nie pojawia)
## 4. Główny ekran gry
W linii statusowej widoczna jest informacja o tym który z graczy aktualnie może oddać strzał oraz zestaw innych informacji:
* nazwa czołgu gracza
* numer aktywnego joysticka
* wybrana aktualnie broń ofensywna
* pozostała ilość punktów energii gracza i jeśli ma on aktywną broń defensywną posiadającą swój zasób energii - w nawiasie ten zasób
* ustawiony przez gracza kąt nachylenia lufy i kierunek jej nachylenia
* ustawiona przez gracza siła strzału (maksymalna siła strzału jest ograniczana przez energię gracza - nie może przekroczyć energii * 10 . Oznacza to, że mając małą ilość energii możemy oddać słabsze strzały
* numer aktualnej rundy rozgrywki
* prędkość i kierunek wiatru
* symbol "komputera" jeśli aktywna jest **Auto Defense**
* w nawiasie nazwę aktywnej broni defensywnej - jeśli jest jakaś aktywowana przez gracza
Tutaj klawiszologia jest prosta, klawisze kursora lub joystick: lewo/prawo - zmiana kąta nachylenia lufy, góra/dół - zmiana ustawienia siły strzału.
| A800 | 5200 | funkcja |
| --- | --- | --- |
| [SPACJA] | [0] | lub przycisk joysticka naciśnięte krótko - oddanie strzału |
| [TAB] lub [SELECT] | [5] | wybór broni ofensywnej (ta opcja nie jest dostępna bezpośrednio joystickiem - trzeba wybrać Inventory). W głównym menu zmienia cieniowanie gór, widoczne w kolorze górek na dole ekranu. |
| [I] | [9] | lub dłuższe przytrzymanie przycisku joysticka - przejście do Inventory (aktywacji broni). Inventory to ekran (a w zasadzie dwa) bliźniaczo podobny do ekranu zakupów. Zasady poruszania się są identyczne z tym, że tu nie kupujemy broni, ale wybieramy jedną z ofensywnych, którą będziemy strzelać lub aktywujemy broń defensywną. |
| [A] lub [OPTION] | [7] | bezpośrednie przejście na ekran Inventory aktywacji broni defensywnych. |
| [M] | [PAUSE] | wyłączenie/włączenie muzyki w tle |
| [S] | [RESET] | wyłączenie/włączenie dźwięków efektów. |
| [START] | brak | przyspiesza/pomija niektóre animacje w grze |
| [O] | [3] | wymuszenie zakończenia gry (Game Over). W podsumowaniu wyników nie jest brana pod uwagę przerwana właśnie runda rozgrywki, a wyłącznie rundy zakończone wcześniej. Odpowiada to wciśnięciu klawisza [ESC] z tą różnicą, że wyświetlane jest podsumowanie oraz creditsy. |
| [START] + [OPTION] | brak | natychmiastowe wymuszenie zakończenia gry (Game Over), tak jak [O] ale bez potwierdzenia. |
| [G] | brak | zmienia cieniowanie gór |
| [ESC] | [*] | w czasie całej gry w dowolnym momencie (chyba że akurat gra komputer, wtedy czasem trzeba chwilę poczekać) można nacisnąć klawisz [ESC], który umożliwia przerwanie gry i powrót na początek (oczywiście jest zabezpieczenie przed przypadkowym naciśnięciem). |
| [Y] | [1] | w przypadku pytania o przerwanie lub zakończenie gry - potwierdzenie decyzji |
## 5. Zasady gry - bronie ofensywne
### Energia czołgów
- Na początku każdej rundy każdy czołg ma 99 jednostek energii.
- Energii czołgom ubywa na 3 sposoby:
* jedna jednostka po oddaniu każdego strzału
* w czasie spadania (jeden piksel w dół - 2 jednostki)
* w chwili trafienia w czołg lub obok niego jakiegoś pocisku - i tu ilość odejmowanej energii zależy od odległości od centrum eksplozji i typu/siły rażenia pocisku.
### Jak działa odejmowanie energii (i zarabianie kasy!)
Po każdej rundzie wyliczana jest ilość zdobytych/straconych pieniędzy, robione jest to na podstawie dwóch zmiennych gromadzonych przez każdy z czołgów w trakcie rundy. Te zmienne to:
`gain` - energia "przechwycona" od trafionych czołgów (także jeśli trafimy w samego siebie :) i tu haczyk, jeśli pozostało nam bardzo mało energii opłacalne może być trafienie w siebie mocną bronią!
`lose` - energia stracona w wyniku eksplozji/upadku (i tu ważne - liczona jest całkowita utrata energii nawet jeśli czołg ma w chwili trafienia mniej).
Dodatkowo czołg który wygrał rundę ma parametr gain (przechwyconej od trafionych czołgów energii) zwiększany o pozostałą mu na koniec rundy energię (bo nie zginął i powinien ją mieć - choć bywa też inaczej :) )
Konkretnie:
### Po każdej rundzie:
`money = money + (20 * (gain+energy))`
`money = money - (10 * lose)`
`jeśli money <0 to money=0`
(na starcie każdej rundy `gain` i `lose` mają wartość 0)
W czasie rundy, jeśli w wyniku strzału oddanego przez czołg inny czołg zostanie trafiony, czołg oddający strzał "dostaje energię" zabraną czołgowi trafionemu.
### czołg oddający strzał:
`gain = gain + EnergyDecrease`
### czołg trafiony:
`lose = lose + EnergyDecrease`
gdzie `EnergyDecrease` to utrata energii w wyniku trafienia.
Oczywiście jednocześnie trafiony czołg traci ilość energii zapisaną w `EnergyDecrease`, z tym że tutaj strata nie może przekroczyć posiadanej energii.
## Jak działa trafienie.
Każda broń, która skutkuje eksplozją, ma swój promień rażenia.
Po eksplozji każdy czołg w jej zasięgu traci energię.
Działa to tak, że jeśli trafienie jest dokładnie w centralny punkt czołgu `EnergyDecrease` otrzymuje maksymalną wartość dla danej broni, a z każdym pikselem odległości od centrum czołgu wartość ta jest zmniejszana o 8.
Przykładowo jeśli strzał oddany za pomocą broni Baby Missile trafi idealnie w centum czołgu to straci on dokładnie 88 jednostek energii (plus to co straci spadając po eksplozji).
W przypadku trafienia tą samą bronią w odległości 10ciu pikseli od centrum czołgu strata ta będzie wynosiła już tyko 8 jednostek.
A oto wartości maksymalnego ubytku energii dla poszczególnych broni. Jeśli broń eksploduje kilka razy, każda z eksplozji jest obliczana niezależnie (dodatkowe wartości w tabeli):
| Broń ofensywna | maksymalna wartość ubytku energii |
| --- | --- |
| Baby Missile | 88 |
| Missile | 136 |
| Baby Nuke | 200 |
| Nuke | 240 |
| LeapFrog| 136 112 112 |
| Funky Bomb | 168 88 (* 5) |
| MIRV | 136 (* 5) |
| Death's Head | 240 (* 5) |
| Napalm | 40 (ta broń jest inna i nie jest wyznaczana odległość od centrum, po prostu każdy czołg znajdujący się w zasięgu płomieni traci 40 jednostek energii) |
| Hot Napalm | 80 (zasada taka jak w Napalm) |
| Baby Roller | 88 |
| Roller | 168 |
| Heavy Roller | 240 |
| Riot Charge | 0 (nie jest odejmowana energia, ale usuwana jest część gruntu w górę od punktu trafienia w promieniu 31 pikseli) |
| Riot Blast | 0 (jak w Riot Charge, tyle że w promieniu 61 pikseli) |
| Riot Bomb | 0 (nie jest odejmowana energia, ale niszczony jest grunt w promieniu 17 pikseli od punktu trafienia - tak jak w wypadku Missile. Broń przydatna do odkopywania się po zasypaniu, bądź podkopywania przeciwnika) |
| Heavy Riot Bomb | 0 (jak w Riot Bomb, ale promień eksplozji to 29 pikseli od punktu trafienia - tak jak w wypadku Nuke) |
| Baby Digger | 0 (nie jest odejmowana energia, ale podkopywana jest część gruntu promieniu 60 pikseli od punktu trafienia) |
| Digger | 0 (jak wyżej - większy podkop) |
| Heavy Digger | 0 (jak wyżej - największy podkop) |
| Baby Sandhog | 0 (jak wyżej - inny sposób podkopywania) |
| Sandhog | 0 (jak wyżej - większy podkop) |
| Heavy Sandhog | 0 (jak wyżej - największy podkop) |
| Dirt Clod | 0 (nie jest odejmowana energia, ale tworzona jest kula gruntu o promieniu 12 pikseli od punktu trafienia. Broń przydatna do zakopywania przeciwnika) |
| Dirt Ball | 0 (jak wyżej, ale promień kuli to 22 piksele) |
| Ton of Dirt | 0 (jak wyżej, ale promień kuli to 31 pikseli) |
| Liquid Dirt | 0 (zalewa grunt w punkcie trafienia płynną glebą wypełniając zagłębienia) |
| Dirt Charge | 0 (nie jest odejmowana energia, ale usypywany jest dodatkowy grunt w górę od punktu trafienia w promieniu 61 pikseli. Broń przydatna do zakopywania przeciwnika) |
| Laser | x 100 (ale tu także jest inaczej - równo 100 tylko w przypadku bezpośredniego trafienia po prostu odejmujemy 100 jednostek energii - czyli czołg zawsze ginie).|
Duże punkty otrzymane przez gracza to ilość czołgów, które zginęły wcześniej niż on. Jeśli któryś z innych czołgów skapitulował wcześniej (Biała Flaga) nie jest doliczany do tych które zginęły i nie daje punktów.
Tylko te punkty decydują o kolejności w podsumowaniu
## 6. A teraz bronie defensywne:
* **White Flag** - powoduje poddanie gracza (może czasem przydać się w sytuacji beznadziejnej). Zaletą jest to, że poddając się nie dajemy dużego punktu przeciwnikom i nie powodujemy, że któryś zyska na tym, że nas zgładzi, ograniczamy też stratę swojej energii czyli także kasy. I tu także ważna uwaga - to jedyna broń defensywna, którą można dezaktywować. Wystarczy ponownie wejść do inventory i jeszcze raz wybrać jej aktywację.
* **Battery** - w momencie aktywacji doładowuje energię czołgu do pełna (99 jednostek). Jest to jedna z trzech broni defensywnych, która nie dezaktywuje innych broni defensywnych w przypadku jej użycia.
* **Hovercraft** - broń umożliwiająca przemieszczanie się czołgu. Posiada własny zasób paliwa a dodatkowo może być aktywowana wielokrotnie w czasie tej samej tury, a po jej użyciu możemy w tej samej turze aktywować inną broń defensywną i oddać strzał. Po jej użyciu czołg uniesie się ponad góry i za pomocą klawiszy kursora lub joysticka: lewo/prawo możemy przemieścić czołg na nową pozycję a [SPACJA] lub przycisk joysticka powodują wylądowanie czołgu w nowym miejscu. Latać można do chwili skończenia się "paliwa" (prezentowanego na pasku statusu tak jak energia broni defensywnej), jeśli paliwo się skończy czołg opadnie samodzielnie. Nie da się lądować na innych czołgach.
* **Parachute** - nie chroni przed ubytkiem energii z powodu sąsiedniej eksplozji, powoduje że nie ubywa energii w czasie JEDNEGO spadania. Po takim upadku dezaktywuje się i trzeba aktywować nowy spadochron.
* **Strong Parachute** - spadochron z własną energią (na starcie 99 jednostek), działa tak samo jak Parachute (nie chroni przed eksplozjami) ma za to swój własny zasób energii przy spadaniu w pierwszej kolejności zmniejszana jest energia tego spadochronu (1 jednostka na jeden pixel opadania - inaczej niż czołg!) i jeśli dojdzie ona do 0 to spadochron dezaktywuje się i dalej zmniejszana jest energia czołgu (tutaj już standardowo - 2 jednostki na jeden pikxel).
* **Shield** - najprostsza osłona działa dokładnie przeciwnie niż Parachute, nie chroni przed ubytkiem energii w czasie spadania, chroni za to przed ubytkiem energii spowodowanym JEDNĄ sąsiednią eksplozją. Chroni jednorazowo, bez znaczenia jak silna jest eksplozja (czy jest to tylko "draśnięcie", czy też bezpośrednie trafienie atomówką) i od razu po niej dezaktywuje się.
* **Heavy Shield** - osłona z własną energią (na starcie 99 jednostek), działa tak samo jak Shield (nie chroni przed upadkiem) z tym wyjątkiem, że ma własny zasób energii. Przy eksplozji w pierwszej kolejności zmniejszana jest energia tej osłony i jeśli dojdzie ona do 0 to osłona dezaktywuje się i dalej zmniejszana jest energia czołgu. W związku z takim działaniem, czołg z tym typem osłony można "zabić" podkopując go, bo spadanie zmniejsza energię czołgu a nie osłony.
* **Force Shield** - najmocniejsza osłona - działa tak jak Heavy Shield tyle że połączona z Parachute. Co ważne w jej przypadku upadek nie zabiera energii osłonie ani czołgowi. Zabierają ją tylko trafienia.
* **Bouncy Castle** - broń agresywna :) . Działa następująco. W przypadku bezpośredniego trafienia w czołg (i osłonę) powoduje "odbicie" pocisku w przeciwnym kierunku z tą samą siłą z jaką był wystrzelony. W przypadku braku wiatru i różnicy poziomów broń trafia wtedy w czołg, który ją wystrzelił. Po takim odbiciu dezaktywuje się. W związku z tym, że broń ta reaguje w ten sposób tylko na precyzyjne trafienia, jest także osłoną odpowiadającą działaniu Heavy Shield i ma na starcie 99 jednostek (prawdopodobnie trzeba będzie przemyśleć tę wartość i dać tu mniejszą).
* **Mag Deflector** - druga broń agresywna :) . W przypadku bezpośredniego trafienia w czołg (i osłonę) powoduje przesunięcie punktu trafienia losowo w lewo lub prawą stronę chronionego czołgu, ale niezbyt daleko, więc można dostać "odłamkiem" przy silniejszej broni. Tak jak w przypadku Bouncy Castle jest także osłoną odpowiadającą działaniu Heavy Shield i ma na starcie 99 jednostek (prawdopodobnie i tutaj trzeba będzie przemyśleć tę wartość i dać mniejszą).
* **Nuclear Winter** - nic nie dodaje, nic nie zabiera :) - w zasadzie to broń nie tyle defensywna co obosieczna. Zasypuje teren opadem "radioaktywnym", który jest zwyczajną glebą. Jeśli nie mamy pod ręką żadnej broni odkopującej teren i do tego osłony (najlepiej jednorazowej), to po takim "opadzie" będzie trzeba strzelić do siebie - bo będąc pod ziemią inaczej się nie da. Ewentualnie pozostaje zawsze White Flag.
* **Long Schlong** - broń specjalna :) - kosztuje dużo, nie bardzo w czymkolwiek pomaga (poza ewentualnym odkopaniem się ale tylko przy niewielkim przysypaniu ale fajnie się nazywa i wygląda :) - Można ją aktywować niezależnie od innych broni defensywnych i pozostaje aktywna do końca rundy (nie da się jej dezaktywować).
* **Lazy Boy** - nie jest to właściwie broń defensywna. Jest to wspomaganie celowania. Po jej aktywacji czołg stara się wycelować w najbliższego przeciwnika i automatycznie ustawia siłę strzału oraz kąt. W przypadku posiadania zbyt małej ilości energii może czasem wycelować źle (do celowania stosuje metodę taką jak **Cyborg**). Tak jak **Battery** nie dezaktywuje innych broni defensywnych w przypadku jej użycia. Uwaga! Nie ma sensu aktywacja tej broni przed rundą, celowanie nie odbędzie się bo nie ma jeszcze do czego celować.
* **Lazy Darwin** - działa tak jak **Lazy Boy** ale celuje w najsłabszego przeciwnika. W tej broni po automatycznym celowaniu pozostaje aktywne "celowanie wizualne" można więc łątwo zmienić cel i samodzielnie wybrać innego przeciwnika widząc czy w niego trafimy.
* **Auto Defense** - włącza tryb automatycznej aktywacji broni defensywnych. Po jej aktywowaniu czołg automatycznie aktywuje najmocniejszą posiadaną osłonę (zużywając ją oczywiście) w każdej chwili, kiedy nie ma żadnej osłony (także pomiędzy strzałami innych graczy). Jednocześnie jeżeli poziom energii czołgu spadnie poniżej 30 jednostek, automatycznie aktywuje **Battery** jeżeli ją posiada. Ta broń pozostaje aktywna do końca rundy i jest sygnalizowana symbolem "komputera" przed nazwą aktywnej broni defensywnej w linii statusowej. Jest to druga broń defensywna, która nie dezaktywuje innych broni defensywnych w przypadku jej użycia.
* **Spy Hard** - Pomoc dla zapominalskich :) . Po aktywacji pokazuje kolejno podgląd informacji o kolejnych przeciwnikach. Lewo/Prawo - zmienia "szpiegowany" czołg. Fire/Space/Return/Esc - kończy "szpiegowanie". Jest to ostatnia broń defensywna, która nie dezaktywuje innych broni defensywnych w przypadku jej użycia.
W związku z odmiennym działaniem broni **MIRV**, bronie defensywne **Bouncy Castle** i **Mag Deflector** wykorzystują tylko funkcję osłony przy trafieniu tą bronią. Dodatkowo głowice **MIRV** w czasie opadania nie odbijają się i nie przelatują przez ściany boczne!
Żadna z osłon nie chroni przed **Napalm**. **Bouncy Castle** czy **Mag Deflector** przy bezpośrednim trafieniu odbije je lub przeniesie obok, ale wystarczy trafić bardzo blisko czołgu i nie zadziała jego osłona.
Bronie **White Flag**, **Hovercraft** i **Nuclear Winter** po aktywacji wymagają uruchomienia, jest to realizowanie przez "oddanie strzału" po aktywacji tej broni. Oczywiście strzał bronią ofensywną nie jest wtedy oddawany, a jedynie uruchamiana jest wybrana broń defensywna.
Można mieć aktywną tylko jedną broń defensywną w danej chwili (za wyjątkiem **Long Schlong** oczywiście :) ). Zawsze przed oddaniem strzału możemy zmienić decyzję i aktywować inną broni defensywną czy też dezaktywować **White Flag**.
Oczywiście aktywacja broni w momencie kiedy mamy już aktywowaną jakąś inną powoduje utratę tej poprzedniej (nie ma zwrotów :) ).
## 7. Bronie 'inne' :) :
* **Best F...g Gifts** - tej 'broni' nie używa śię w rozgrywce. Jej zakup powoduje wylosowanie jednej z broni ofensywnych lub (rzadziej) defensywnych i dodanie jej do arsenału gracza. Jest to loteria w której można stracić (jeśli wylosuje się broń tańsza niż cena **Best F...g Gifts** ale też zyskać. Jeśli wylosuje się broń dużo droższa możemy otrzymać do dyspozycji broń, na którą nie było nas stać! Istnieje niewielkie prawdopodobieństwo wylosowania przez **Best F...g Gifts** samej siebie :). Można wtedy spróbować użyć jej w walce.
## 8. Poziomy trudności przeciwników sterowanych przez komputer:
Gra posiada 8 poziomów trudności przeciwników sterowanych przez komputer. A właściwie 7 różnych i jeden "niespodziankę". Każdy z nich ma swój sposób kupowania broni defensywnych i ofensywnych oraz inną metodę wyboru celu i samego celowania, oraz wyboru broni. Ułożone są one na liście według wzrastających "umiejętności":
* **Moron** - najgłupszy z przeciwników (co nie znaczy że najbezpieczniejszy). Strzela całkowicie przypadkowo używając wyłącznie jednej broni - **Baby Missile**. Nie kupuje nic, nie umie stosować broni defensywnych.
* **Shooter** - Ten przeciwnik nie strzela na oślep. Wybiera sobie jeden kierunek. Na podstawie własnej pozycji - strzela w stronę z której jest więcej przestrzeni zakładając, że to tam są inne czołgi. Ostrzeliwanie zaczyna od wysokiego kąta i strzał po strzale zmienia ten kąt na coraz niższy starając się ostrzelać cały obszar po wybranej stronie. Strzał oddaje zawsze najlepszą posiadaną bronią (najwyższą na liście posiadanych broni - czyli nie koniecznie najlepszą). Nie używa broni defensywnych mimo, że je kupuje! Na początku rundy podejmuje 1 próbę zakupu broni defensywnych (tylko z zakresu **Battery** - **Strong Parachute**) i 4 ofensywnych (z zakresu **Missile** - **Heavy Roller**).
* **Poolshark** - Atakując wyznacza sobie za cel najbliższy czołg, następnie dobiera kąt strzału, a jego siłę stara się dobrać losując ją z wybranego przedziału. Strzał oddaje zawsze najlepszą posiadaną bronią. Używa broni defensywnych. Z prawdopodobieństwem 1:3 aktywuje przed oddaniem strzału najlepszą posiadaną broń defensywną (najwyższą na liście posiadanych broni - czyli nie koniecznie najlepszą). Jeżeli poziom jego energii spadnie poniżej 30 jednostek - używa **Battery** (oczywiście jeśli wcześniej ją kupił), jeżeli energia spadnie poniżej 5 i nie ma **Battery** poddaje się - **White Flag**. Na początku rundy podejmuje 1 próbę zakupu broni defensywnych i 6 ofensywnych.
* **Tosser** - Atakując działa dokładnie tak jak **Poolshark** jednak może posiadać "lepszy" zasób broni dzięki innej taktyce zakupów. Zawsze przed strzałem aktywuje najlepszą posiadaną broń defensywną. i tak jak **Poolshark** stosuje **Battery** i **White Flag**. Na początku rundy ocenia ile ma pieniędzy i w zależności od tego podejmuje (pieniądze/5100) prób zakupu broni defensywnych a następnie jeszcze raz sprawdza ile pieniędzy mu zostało i podejmuje (pieniądze/1250) prób zakupu broni ofensywnych.
* **Chooser** - Obiera sobie za cel najsłabszego przeciwnika (o najmniejszym zasobie energii) i celuje bardzo dokładnie, jednak przed samym strzałem energia strzału modyfikowana jest o parametr szczęścia :) , czyli mimo precyzyjnego wycelowania nie zawsze trafia. Strzał oddaje najlepszą posiadaną bronią chyba że cel jest blisko. Wtedy zmienia broń na **Baby Missile** by unikać trafienia samego siebie. Zawsze przed strzałem aktywuje najlepszą posiadaną broń defensywną i tak jak **Poolshark** stosuje **Battery** i **White Flag**. Zakupów dokonuje tak samo jak **Tosser**.
* **Spoiler** - Strzela dokładnie tak jak **Chooser** tyle, że ma więcej szczęścia :) , co oznacza że nawet jeśli nie trafi w wybrany cel, to może być to strzał precyzyjniejszy niż **Chooser**. Broni defensywnych używa dokładnie tak jak **Chooser**. Na początku rundy ocenia ile ma pieniędzy i w zależności od tego podejmuje (pieniądze/5100) prób zakupu broni defensywnych a następnie jeszcze raz sprawdza ile pieniędzy mu zostało i podejmuje (pieniądze/320) prób zakupu broni ofensywnych. Przy zakupie broni defensywnych kupuje tylko bronie silne i precyzyjne - czyli takie, które nie zrobią mu przypadkiem krzywdy.
* **Cyborg** - Obiera sobie za cel najsłabszego przeciwnika (o najmniejszym zasobie energii) lecz preferuje przeciwników sterowanych przez człowieka. Celuje bardzo dokładnie i w zdecydowanej większości przypadków trafia za pierwszym strzałem. Strzał oddaje najlepszą posiadaną bronią chyba że cel jest blisko. Wtedy zmienia broń na **Baby Missile** by unikać trafienia samego siebie. Broni defensywnych używa dokładnie tak jak **Chooser**. Zakupy robi dokładnie tak jak **Spoiler**
* **Unknown** - Przed oddaniem każdego strzału losowo wybiera sposób działania od **Poolsharka** do **Cyborga** i stosuje jego taktykę. Taktyka zakupów broni jest jednak zawsze identyczna jak **Tosser**
Próba zakupu broni (ofensywnej lub defensywnej) wygląda następująco:
Na początku losowana jest jedna z broni (wśród wszystkich możliwych ofensywnych lub defensywnych). Następnie wykonywane jest sprawdzenie czy wylosowana broń jest na liście broni możliwych do zakupu przez czołg. Jeśli nie to w tej próbie żadna broń nie jest kupowana, a jeśli tak, to sprawdzana jest jej cena. Jeśli czołg ma tyle pieniędzy, broń jest kupowana, w przeciwnym wypadku próba kończy się bez dokonania zakupu.
Tabela broni kupowanych przez: **Shooter**, **Poolshark**, **Tosser** i **Chooser**
| bronie ofensywne | bronie defensywne |
| --- | --- |
| Missile | Battery |
| Baby Nuke | Parachute |
| Nuke | Strong Parachute |
| LeapFrog | Mag Deflector |
| Funky Bomb | Shield |
| MIRV | Heavy Shield |
| Death's Head | Force Shield |
| Napalm | Bouncy Castle |
| Hot Napalm | |
| Baby Roller | |
| Roller | |
| Heavy Roller | |
Tabela broni kupowanych przez: **Spoiler** i **Cyborg**
| bronie ofensywne | bronie defensywne |
| --- | --- |
| Missile | Battery |
| Baby Nuke | Strong Parachute |
| Nuke | Mag Deflector |
| Hot Napalm | Heavy Shield |
| | Force Shield |
| | Bouncy Castle |
+318 -11
View File
@@ -8,17 +8,21 @@ by Tomasz 'Pecus' Pecko and Pawel 'pirx' Kalinowski
Warsaw, Miami 2000, 2001, 2002, 2003, 2009, 2012, 2013, 2022 Warsaw, Miami 2000, 2001, 2002, 2003, 2009, 2012, 2013, 2022
Contributors: Contributors:
- Miker (@mikerro) - in-game music and sfx, ideas, QA
- Kaz - splash screen, ideas - Kaz - splash screen, ideas
- Miker (@mikerro) - game sfx, ideas, QA - Adam (@6502adam) - font, design, QA
- Adam (@6502adam) - font, ideas, QA
- Bocianu (@bocianu) - important ideas, FujiNet implementation, QA - Bocianu (@bocianu) - important ideas, FujiNet implementation, QA
- Emkay - splash screen music - Emkay - splash screen music
- Fox (@pfusik) - plot and point optimization
QA: Probabilitydragon, KrzysRog, Beeblebrox, EnderDude, lopezpb, Dracon, brad-colbert QA: Probabilitydragon, KrzysRog, Beeblebrox, EnderDude, lopezpb, Dracon, brad-colbert, archon800,
Shaggy the Atarian, x=usr(1536), Aking, Kenshi
You can contact us at pecus@poczta.fm or pirx@5oft.pl Special thanks to tebe (@tebe6502), JAC! (@peterdell) and phaeron for their fantastic tools and support.
This source code was originally compiled under [OMC65 crossassembler](https://github.com/pkali/omc65) and on 2012-06-21 translated to [mads](https://github.com/tebe6502/Mad-Assembler). You can contact us via [AtariAge](https://atariage.com) or [AtariOnLine](https://atarionline.pl) forums.
This source code was originally compiled with [OMC65 crossassembler](https://github.com/pkali/omc65) and on 2012-06-21 translated to [mads](https://github.com/tebe6502/Mad-Assembler).
Compilation: `mads scorch.asm -o:scorch.xex` Compilation: `mads scorch.asm -o:scorch.xex`
@@ -29,7 +33,7 @@ Game source code is split into 5+4 parts:
- textproc.asm - text routines like list of weapons and shop - textproc.asm - text routines like list of weapons and shop
- variables.asm - all non-zero page variables - variables.asm - all non-zero page variables
- constants.asm - various tables of constants - constants.asm - various tables of constants
- display.asm - display lists and text screen definitions - display_*.asm - display lists and text screen definitions
- ai.asm - artificial stupidity of computer opponents - ai.asm - artificial stupidity of computer opponents
- weapons.asm - general arsenal of tankies - weapons.asm - general arsenal of tankies
- definitions.asm - label definitions, moved to make it work better with Altirra debug (it doesn't). - definitions.asm - label definitions, moved to make it work better with Altirra debug (it doesn't).
@@ -43,9 +47,311 @@ Originally most variables were in Polish, comments were sparse, but we wanted to
Because of being always short of time/energy (to finish the game) we decided it must go in 'English' to let other people work on it. Because of being always short of time/energy (to finish the game) we decided it must go in 'English' to let other people work on it.
It never happened, but we got some encouraging comments and we are still trying to do something from time to time. It never happened, but we got some encouraging comments and we are still trying to do something from time to time.
With the advent of fujinet (https://fujinet.online/) we are thinking about making the game interplanetary, err, with multiplayer over the net. We'll see. With the advent of [fujinet](https://fujinet.online/) we are thinking about making the game interplanetary, err, with multiplayer over the net. We'll see.
## Changes: ## Changelog:
###### Version 1.27
2023-02-07
Late evening edition. It is 2:11 am and I am writing this instead of dreaming of electric sheep.
Our Senior Executive Art Director @+Adam+ ordered us to stop procrastinating and finally release the version with colorized mountains. So here it is. Enjoy :)
Please note you can still press [Tab] or [5] in the main menu and revert to the classic or classy look of the "Polish rainbow" (it's a reference to a strangely accurate Wulffmorgenthaler comic strip: https://i.imgur.com/HMctP.jpg)
Other changes:
- nicer Lazy targeting and "visual Debug" for Lazy Boys
- extreme memory optimizations to fit 2 new texts from @RB5200 based on "Sandford and Son"
- fix for [G] key bug when turn wind changes were selected
- fix for Lazy Boys deactivation bug
- PAL mode now has got the full-color table, so it is possible to adjust colors better
- the x-position of tanks was always adjusted to even X values, this is no more, which saves some hassle and unnecessary tank shakes left and right. As tanks are painted with sprites of a lower resolution, a rare artifact might appear here and there.
- improved tank shapes
###### Version 1.26
2023-01-23
Early morning edition. It is 5:11 am and I am writing this instead of dreaming of electric sheep.
For the last 6 weeks, the versions we released had an awful bug - the conversations of tanks were completely invisible. Thanks for pointing this out, RB5200.
- tanks talk to each other again
- better stochastic non-blocking wait one frame
- rare distance measurement bug fixed (rarely a tank survived a direct hit)
- 5200: second fire (by RB5200)
- "visual debug" mode in A800 version, triggered by pressing [CTRL]+[HELP]. It displays distances measured, laser aiming, and aiming technique. It leaves a mess on the screen, but it does not impair the game, just makes it a bit harder.
###### Version 1.25
2023-01-17
Y2K Compliance Edition
This version is 5200 SuperSystem focused.
- the correct production year in the splash screens!!!
- very rare hangups when accessing the inventory seemingly eliminated, thanks @RB5200 for testing!
- a new feature - pressing [Tab] (atari800) or [5] (5200) when selecting the wind power switches wind mode to changing with each turn, which makes aiming arguably more challenging! It is indicated by "?" next to the "Wind" in the main menu.
- pressing [G] during the game changes the color scheme (classic, Polish rainbow, Xmas).
- all these changes were made possible thanks to the extensive code size optimization by @Pecus
###### Version 1.23
2023-01-01
New year edition! Who could imagine?
The new feature is that pressing [Tab] in the main menu now changes colors of the small tank area down the screen and makes it clear what color version you are going to run (classic/ Polish rainbow/ Christmas colors).
Also a small gradient optimization.
###### Version 1.22
2022-12-24
Christmas colors edition! Can you carve a quarter of a page of memory from two decades old code? Sure @Pecusx can! So finally we have the most requested feature - C0L0RS on the game screen, adjusted with Adam's help.
Press [TAB] twice in the main menu to switch to a screen with colors.
Other (dubious) improvements:
- New Lazy Darwin, it is spectacular, check it out!!!
- Smoke Tracer does not smoke when targeting with Lazy Darwin
- Lazy Boy works well with joystick
- Another fix for self-destructing tanks shooting low angles (0-4 degrees)
- New, better tank shapes by Adam
- Barrel start point correction fixes very rare aiming issues
- Soil slide after Hovercraft usage optimized
###### Version 1.21
2022-12-10
We couldn't resist! This is the Senior Executive Director's Cut.
By virtue of byte misering we squeezed in a few new features:
* new selectable tank shapes - change the controller enough times to get a different tank model
* lonely bad pixel after Liquid Dirt fixed
* mountain colors (or shades) possible, switch with [Tab] in the main menu
* active controller number display in the game, store, and inventory screens
* a very special terminator mode for Moron
###### Version 1.20
2022-11-23
It's the final cut. Director's Cut.
We squeezed the code and saved some bytes to add the joystick/controller selection. No more fights for the stick, up to 4 players can have fun with their own manipulators. And the fifth one can still use the keyboard :).
Our most prolific testers Arek and Alex called for a number of fixes. Thank you, guys!
* Players can select their controllers.
* Better Auto Defense symbol in the status line.
* Battery performance in AI and Auto Defense fixed.
* More accurate and faster Laser.
* Boost For Gifts includes a secret, quite powerful weapon.
* Points counting fix-up (edge cases eliminated).
* Long lists in inventory and shop were pointing to a weapon outside the screen. Fixed.
* Lazy Boys now remember the last weapon used.
* Especially for XEGS - SELECT key changes the joystick similarly to TAB.
* Rare P/M glitches fixed.
* ExplosionRange variable glitched (rarely) due to byte/word mix-up. Fixed.
* Bouncy Castle was bouncing the laser from inside. Fixed.
* Shielded tanks were autodestructing when shooting with angle 0. Fixed.
* Physics of bouncing off the walls was incorrect for some weapons. Fixed.
###### Version 1.19
2022-11-04
This is the final round of weapon additions! Also. our beloved testers and players found a number of issues and we were extremely happy to address them.
* New defensive weapon "Lazy Boy" - aims at the closest enemy.
* New defensive weapon "Lazy Darwin" - aims at the weakest link, an enemy I mean.
* New defensive weapon "Auto Defense" - activate it to be automatically protected by shields and stuff (where available)
* New defensive weapon "Spy Hard" - quickly view energies, weapons and shields of your opponents.
* New SFXes, improvements in SFX, and music by @mikerro
* Shooting with angle 0 caused the sudden death of the operator. Fixed.
* Angles were asymmetrical, now you can go from 0 to 90 and to 0 again (181 degrees of freedom). Fixed with an improved arithmetic rounding of our sub-pixel accuracy.
* Drawing a barrel when a tank was on the edge of X==256 pixels caused a lonely pixel to appear randomly. Fixed.
* Liquid Dirt was overflowing from the right edge of the screen to the left. Fixed.
* Liquid Dirt volume increased significantly, it is now a formidable attack!
* A single pixel was erroneously plotted when measuring distance (was visible in e.g., Death's Head). Fixed.
* Not all traces were correctly erased after Funky Bomb, fixed again (for the 3rt time I guess).
* Soil sedimentation speed after Funky Bomb improved.
* Pressing [ESC] when in inventory/store was quitting the game, now it quits the menu only.
* A bug in MADS optimization was causing parts of SEPPUKU message to stay on screen.
* BIGGEST OF ALL: the lonely pixel after Nuclear Winter was eliminated. https://github.com/pkali/scorch_src/issues/103 We have spent a disproportionately large amount of time trying to slap this bug. It is still there, but is not manifesting itself ;)
###### Version 1.18
2022-11-07
Possibly the final single-player version of the game, unless our dear players find another breaking issue!
* 5200 keypad works as it should. You can now press these finicky foils to your heart's desire.
* "Unknown" type Robotanks were attacking with Nuclear Winter every time. Fixed!
* One of the variables was declared as a byte but used as a word that might cause some rare instabilities.
* Page zero variables are cleared prior to the game start to eliminate rare issues in some software/hardware configurations.
* The new version of music in NTSC eliminates issues with tempo (not that anyone but the artist noticed that, but still it is an improvement!)
* You can now wrap around inventory and shop to faster access these options far down below.
* Visual improvement of the main menu and fixed some color issues with the title headers.
* Hovercraft was always flying to the top of the screen, it was not intended, it is now hovering just above the mountains!
* The main menu does not blink now when changing options. This was a very minor thing but it bothered me to some extent. Fixing it required a complete rewrite of this portion of the menu.
###### Version 1.17
2022-10-31
Mostly 5200 console port and NTSC improvements.
* Updated songs from Miker do not require skipping frames on NTSC machines. Crucial for the next point.
* Bouncy Castle bouncing of Funky Bomb fixed https://github.com/pkali/scorch_src/issues/129
* 5200 version had various graphical and sound glitches. Although mostly harmless, it hurt our sense of aesthetics. First of all the flickering credits roll is all good now.
* Rare hang-ups on NTSC machines fixed
* Screen lowered down by 7 scan lines to help top status line on NTSC CRTs.
* 5200 ATTRACT mode not going away fixed
* Autorepeat added to menus what should help 5200 users with their non-centering abomination of a controller.
* DLI interrupts optimized, few cycles saved.
* 5200 keypad sort-of-works. Please refer to manual for key bindings.
###### Version 1.16
2022-10-16
The official release of our game for the Atari 5200 SuperSystem. Grab the `scorch.bin` file and burn a cart!
This is all thanks to @miker who supported us all this time of uncertainty and despair.
Cramming the game into a 32KiB cart and 16KiB RAM was a big task - it required a rewrite of the RMT player, a crazy number of size optimizations, and counting each byte.
The release is not perfect - we have a number of glitches and improvements to the 5200 controller procedures to work on, but the game is playable.
Changes:
* numerous, but not very visible
###### Version 1.14
2022-09-05
Minor bugfixes and optimizations.
Just a small update to allow for more testing and having fun before the bigger release.
Changes:
* Numerous optimizations that require a solid test. Please have fun and report issues!
* Small DrawTanks fix.
* Bouncy Castle bounces like it should.
* Tracer and Smoke Tracer are not causing defense weapons to trigger anymore.
* In rare cases direct hit was not accounted for correctly.
* Manuals updated. https://github.com/pkali/scorch_src/releases/tag/v1.16
###### Version 1.13
2022-08-30
Getting ready for porting the game!
Several heavy optimizations and code cleanups in preparation for an unexpected port.
Changes:
* Overhaul of AI - Cyborgs, Spoilers, and Choosers aim much better.
* Cyborgs prefer to kill humans.
* Fine tuning of AI purchases makes the difficulty level aligned with the robot level.
* Fixed a very difficult and elusive bug that was causing tanks to freeze when falling close to the right edge of the screen fixed.
* Updated music by @Miker
* It is now possible to enter tank names with a joystick - all essential game functions are available without touching the keyboard!
* Manuals updated with AI strategy information and more.
###### Version 1.12
2022-08-24
What is going on? Are we getting crazy or what?
Changes:
* Background color indicates the type of walls. This is very useful when the rand option is selected.
* XEGS users requested that console keys are used when no keyboard is attached! We delivered! [SELECT] to select an offensive weapon, [OPTION] to jump into inventory, defensive section, [START] + [OPTION] - immediate Game Over (no confirmation for you keyboardless folks)
* A very silly bug detected by our young testers fixed - the game crashed when you built a very high mountain using Dirt Balls :)
* Boxy infinite bounce bug fixed.
* Funky bombs bounce off the walls!
* The first letter entered for a tank name was inserted in the wrong spot. How did it work at all? Magic.
[ESC] now correctly exits the purchase screen.
###### Version 1.11
2022-08-22
A release lollapalooza.
The silliness indicator crashed. What are we doing?
Changes:
* A very silly buffer overflow bug fixed - it allowed for infinite (well... to the point) lengths of tank names, or rather for overwriting code with arbitrary values.
* Gamefield walls added https://github.com/pkali/scorch_src/issues/50. Choosing a different wall effect from the main options menu allows for a sophisticated tactics change.
###### Version 1.10
2022-08-21
My hovercraft is full of eels.
This release brings a swath of gameplay updates and a generous dose of a new silliness.
[English](https://github.com/pkali/scorch_src/blob/master/MANUAL_EN.md) and [Polish](https://github.com/pkali/scorch_src/blob/master/MANUAL_PL.md) language manual drafts are available in the repository. Please help us with the English one as we are not native speakers.
Version number bump reflects number of unreleased versions and amount of changes.
Changes:
* Defensive weapons can be activated before the round to make for the unbeatable aiming precision of the robotanks.
* Fixed bug with Long Schlong activation taking one Schlong too many.
* Smoke Tracer not disappearing smoke fixed.
* Bug allowing for infinite shooting outside the screen fixed.
* Tank colors and P/M sequence as devised by Adam, the gfx artist. Tanks differ more and look better. https://github.com/pkali/scorch_src/issues/119
* New item in the shop - loot box "Buy me!" with a surprise inside. https://github.com/pkali/scorch_src/issues/97
* Tank names can have s p a c e s now! https://github.com/pkali/scorch_src/issues/120
* Tanks are mobile now thanks to the new defensive option - Hovercraft https://github.com/pkali/scorch_src/issues/52
* Main atari library switched to a more standard version based on Mapping the Atari
* Huge memory optimizations to allow for the new features.
* Narrow screen in shop / inventory (many bytes saved).
* Explosion range corrections for a rare event of non-lethal Nuke explosions.
* Pressing [A] jumps into defensive weapons activation directly.
* Elusive randomize force error causing rare hangups for Tosser fixed.
* Activation of defensive weapons moved to front.
* Additional SFX for new weapons.
###### Version 1.00
2022-08-13
Silly Version 1.00
This is an official Silly Venture Summer Edition Atari 50 release. The game reached version 1.00.
The game manual is available at https://github.com/pkali/scorch_src/wiki
All 48KB+ 8-bit Atari computers are supported.
Thank you @Pecusx and @Miker for your hard work over the last few weeks - I was almost entirely absent because of the real-world attack.
Most important changes:
* New Game Over screen with a summary of wins, direct hits and earned cash. https://github.com/pkali/scorch_src/issues/9
* Tank barrels are drawn procedurally to make aiming easier..
* Various SFX and music updates with new tunes for all parts of the game. https://github.com/pkali/scorch_src/issues/112
* AI can use White Flag.
* 3 different tank shapes https://github.com/pkali/scorch_src/issues/64.
* All AI levels are programmed. Cyborg is tough! https://github.com/pkali/scorch_src/issues/40
* New weapon - Long Schlong!
* New splash screen.
* Game mechanics improved.
* [O] key skips to the Game Over screen.
* The game works on Atari 800.
* Huge amount of optimizations to squeeze the game into 48K.
And now the new adventure begins!
###### Build 148
2022-07-17
WHAT DOES THE FOX SAY?
Fox (x0f, @pfusik) says plots and points can be optimized by 18 clock cycles each and thanks to his 6502 wizardry the game is noticeably nicer. Thank you!
Other changes:
- https://github.com/pkali/scorch_src/issues/99, https://github.com/pkali/scorch_src/issues/98 - tank number 6 has got a color now! No one is monochrome now!
- https://github.com/pkali/scorch_src/issues/110 much improved laser - previously it was almost useless, now it looks and works much better
- fixed an interesting roller bug
- Auto Defense angle fix
- multiple improvements in AI routines, preparation for the final opponents.
###### Build 147
2022-07-10
LOST build. We were watching [LOST party](https://www.lostparty.pl/2022/) streams so maybe a little less done, but still some nice improvements.
- new weapons by @Pecusx - Napalm and Hot Napalm. Fire penetrates all shields, so beware!
- status bar showing outdated info on the beginning of the round fix
- various small optimizations incl. memory usage, soildown, weapon ranges
- improved shapes of Heavy and Force Shields
Issues closed:
- revert to the old but slightly improved version of showing angles (#105)
- zero page loading eliminated (#106)
- active player name appear over his tank when aiming (#107)
- configurable mountain heights (The Netherlands, Belgium, Czechia, Switzerland, Nepal) (#86)
- angle speeds up when joystick / keyboard are pressed (#75)
###### Build 146 ###### Build 146
2022-07-03 2022-07-03
@@ -55,9 +361,9 @@ Not much changed visually since the last build, but really large parts of the co
- silly angle system rewritten to a proper, primary school angling. BTW - I had to dig into 8th grade trig to make it work. About 200 bytes saved, complexity reduced. Next build will have improved angle speed UI. I will also allow for an easier improvement of tank visuals. - silly angle system rewritten to a proper, primary school angling. BTW - I had to dig into 8th grade trig to make it work. About 200 bytes saved, complexity reduced. Next build will have improved angle speed UI. I will also allow for an easier improvement of tank visuals.
- Weapon price and quantity balance - this is our honest attempt to make game more fun. We'll accept any critique and improvement proposals. - Weapon price and quantity balance - this is our honest attempt to make game more fun. We'll accept any critique and improvement proposals.
- New AI opponent - Tosser! Not much better than Poolshark, but still beats sharks most of the time. - New AI opponent - Tosser! Not much better than Poolshark, but still beats sharks most of the time.
- AI opponents can purchase defensive weapons what makes playing against AI somewhat more challenging. - AI opponents can purchase defensive weapons which make playing against AI somewhat more challenging.
- Improved Laser. It is still not ideal, but better. Still hard to aim :] - Improved Laser. It is still not ideal, but better. Still hard to aim :]
- Few small parachute related bugs fixed - Few small parachute-related bugs fixed
- Death's Head bug fix - Death's Head bug fix
Issues closed: Issues closed:
@@ -380,4 +686,5 @@ For the first time Scorched Earth for Atari XL/XE (build 103) published.
Together with Pecus we were working on this piece of code for four years and it does not look like it is accelerating so we decided to publish what we have. Last few weeks I was translating source code comments and labels to English to let other people work on this project with us. In other words Scorched Earth becomes an open source project :) Together with Pecus we were working on this piece of code for four years and it does not look like it is accelerating so we decided to publish what we have. Last few weeks I was translating source code comments and labels to English to let other people work on this project with us. In other words Scorched Earth becomes an open source project :)
Now it's your turn to help this idea happen! Now it's your turn to help this idea happen!
...transmission error...former history missing... ...transmission error...former history missing...
+669 -133
View File
@@ -8,43 +8,44 @@
; - shoots random direction and force ; - shoots random direction and force
; greeeting to myself 10 years older in 2013-11-09... still no idea ; greeeting to myself 10 years older in 2013-11-09... still no idea
;---------------------------------------------- ;----------------------------------------------
.proc MakeLowResDistances .proc ArtificialIntelligence ;
; A - skill of the TankNr (in X)
; returns shoot energy and angle in
; ForceTable/L/H and AngleTable
;----------------------------------------------
asl
tay
:2 dey ;credit KK
lda AIRoutines+1,y
pha
lda AIRoutines,y
pha
; it's no necessary - PrepareAIShoot is next proc :)
; jsr PrepareAIShoot
; rts
.endp
;----------------------------------------------
.proc PrepareAIShoot
; create low precision table of positions ; create low precision table of positions
; by dividing positions by 4 ; by dividing positions by 4
ldy #MaxPlayers-1 ldy #MaxPlayers-1
loop loop
lda xtankstableL,y lda xtankstableL,y
sta temp sta temp
lda xtankstableH,y lda xtankstableH,y
sta temp+1 sta temp+1
;= /4 ;= /4
:2 lsrw temp :2 lsrw temp
lda temp lda temp
sta LowResDistances,y sta LowResDistances,y
dey dey
bpl loop bpl loop
rts
.endp
;---------------------------------------------- ; common values used in AI routines
.proc ArtificialIntelligence ;
; A - skill of the TankNr
; returns shoot energy and angle in
; ForceTable/L/H and AngleTable
;----------------------------------------------
asl
tax
:2 dex ;credit KK
lda AIRoutines+1,x
pha
lda AIRoutines,x
pha
ldx TankNr ; common values used in AI routines
; address of weapons table (for future use) ; address of weapons table (for future use)
WepTableToTemp
lda TanksWeaponsTableL,x lda TanksWeaponsTableL,x
sta temp sta temp
lda TanksWeaponsTableH,x lda TanksWeaponsTableH,x
@@ -57,11 +58,23 @@ AIRoutines
.word Shooter-1 ;Shooter .word Shooter-1 ;Shooter
.word Poolshark-1 ;Poolshark .word Poolshark-1 ;Poolshark
.word Tosser-1 ;Tosser .word Tosser-1 ;Tosser
.word Poolshark-1 ;Chooser .word Chooser-1 ;Chooser
.word Poolshark-1 ;Spoiler .word Spoiler-1 ;Spoiler
.word Poolshark-1 ;Cyborg .word Cyborg-1 ;Cyborg
.word Poolshark-1 ;Unknown .word Unknown-1 ;Unknown
;----------------------------------------------
.proc Unknown
; random robotank (from Poolshark to Cyborg)
randomize 4 13
and #%11111110
tay
lda AIRoutines+1,y
pha
lda AIRoutines,y
pha
rts
.endp
;---------------------------------------------- ;----------------------------------------------
.proc Moron .proc Moron
jsr RandomizeAngle jsr RandomizeAngle
@@ -69,7 +82,10 @@ AIRoutines
mwa #80 RandBoundaryLow mwa #80 RandBoundaryLow
mwa #800 RandBoundaryHigh mwa #800 RandBoundaryHigh
jsr RandomizeForce jsr RandomizeForce
rts ; choose the best weapon
ldy #ind_Buy_me_________+1 ; if the cheat is active it will fire the BFG :)
jmp ChooseBestOffensive.NotFromAll
;rts
.endp .endp
;---------------------------------------------- ;----------------------------------------------
.proc Shooter .proc Shooter
@@ -143,18 +159,73 @@ endo
; choose the best weapon ; choose the best weapon
ldy #32 ;the last weapon jmp ChooseBestOffensive
loop ;rts
dey
lda (temp),y ; this is set up before calling the routine, has address of TanksWeaponsTable
beq loop
tya
sta ActiveWeapon,x
rts
.endp .endp
;---------------------------------------------- ;----------------------------------------------
.proc Poolshark .proc Poolshark
jsr UseBatteryOrFlag
; defensives ; defensives
jsr PoolsharkDefensives
firstShoot
;find nearest tank neighbour
jsr FindBestTarget2
beq EnemyOnLeft
; calculate index to shotangle table
; in temp2 we have x distance divided by 8
lda temp2
:3 lsr @
and #%00000111
clc
adc #8
sta AngleTablePointer
bne AngleIsSet
EnemyOnLeft
lda temp2
:3 lsr @
and #%00000111
eor #%00000111
sta AngleTablePointer
AngleIsSet
randomize 0 8
ldy AngleTablePointer
clc
adc AngleTable,y
sta NewAngle
forceNow
mwa #300 RandBoundaryLow
mwa #700 RandBoundaryHigh
ldx TankNr
jsr RandomizeForce
endo
; choose the best weapon
jsr ChooseBestOffensive
rts
;----------------------------------------------
AngleTable ; 16 bytes ;ba w $348b L$3350
.by 106,114,122,130,138,146,154,162
.by 18,26,34,43,50,58,66,74
.endp
;----------------------------------------------
.proc UseBatteryOrFlag
jsr UseBattery ; as subroutine for reuse in AutoDefense
; if very low energy and no battery then use White Flag
lda Energy,x
cmp #5
bcs EnoughEnergy
; lower than 5 units - white flag
lda #ind_White_Flag_____
sta ActiveDefenceWeapon,x
EnoughEnergy
rts
.endp
;
.proc UseBattery
; if low energy ten use battery ; if low energy ten use battery
lda Energy,x lda Energy,x
cmp #30 cmp #30
@@ -164,13 +235,18 @@ loop
lda (temp),y ; has address of TanksWeaponsTable lda (temp),y ; has address of TanksWeaponsTable
beq NoBatteries beq NoBatteries
; we have batteries - use one ; we have batteries - use one
clc sec
sbc #1 sbc #1
sta (temp),y sta (temp),y
lda #99 lda #99
sta Energy,x sta Energy,x
NoBatteries jsr MaxForceCalculate
EnoughEnergy EnoughEnergy
NoBatteries
rts
.endp
;----------------------------------------------
.proc PoolsharkDefensives
; use best defensive :) ; use best defensive :)
; but not allways ; but not allways
randomize 1 3 randomize 1 3
@@ -179,28 +255,219 @@ EnoughEnergy
; first check check if any is in use ; first check check if any is in use
lda ActiveDefenceWeapon,x lda ActiveDefenceWeapon,x
bne DefensiveInUse bne DefensiveInUse
ldy #ind_Nuclear_Winter_+1 ;the last defensive weapon ldy #last_real_defensive+1 ;the last defensive weapon
@ @
dey dey
cpy #ind_Battery________ ;first defensive weapon (White Flag nad Battery - never use) cpy #ind_Hovercraft_____ ;first defensive weapon (White Flag, Battery and Hovercraft - never use)
beq NoUseDefensive beq NoUseDefensive
lda (temp),y ; has address of TanksWeaponsTable lda (temp),y ; has address of TanksWeaponsTable
beq @- beq @-
tya ; decrease in inventory
sec
sbc #1
sta (temp),y ; has address of TanksWeaponsTable
; activate defensive weapon ; activate defensive weapon
tya ; number of selectet defensive weapon
sta ActiveDefenceWeapon,x sta ActiveDefenceWeapon,x
lda DefensiveEnergy,y lda DefensiveEnergy,y
sta ShieldEnergy,x sta ShieldEnergy,x
; decrease in inventory
clc
sbc #1
sta (temp),y ; has address of TanksWeaponsTable
NoUseDefensive NoUseDefensive
DefensiveInUse DefensiveInUse
firstShoot rts
;find nearest tank neighbour .endp
jsr MakeLowResDistances ;----------------------------------------------
.proc Tosser
jsr UseBatteryOrFlag
; use best defensive :)
jsr TosserDefensives
; Toosser is like Poolshark but allways uses defensives
jmp Poolshark.firstShoot
.endp
;----------------------------------------------
.proc TosserDefensives
; use best defensive :)
; allways
; first check check if any is in use
lda ActiveDefenceWeapon,x
bne DefensiveInUse
ldy #last_real_defensive+1 ;the last defensive weapon
@
dey
cpy #ind_Hovercraft_____ ;first defensive weapon (White Flag, Battery and Hovercraft - never use)
beq NoUseDefensive
lda (temp),y ; has address of TanksWeaponsTable
beq @-
; decrease in inventory
sec
sbc #1
sta (temp),y ; has address of TanksWeaponsTable
; activate defensive weapon
tya ; number of selectet defensive weapon
sta ActiveDefenceWeapon,x
lda DefensiveEnergy,y
sta ShieldEnergy,x
DefensiveInUse
NoUseDefensive
rts
.endp
;----------------------------------------------
.proc Chooser
; like cyborg but more randomizing force
jsr UseBatteryOrFlag
; use defensives like Tosser
jsr TosserDefensives
; now select best target
lda #$00 ; no prefer humans
jsr FindBestTarget3
sty TargetTankNr
; aiming
jsr TakeAim ; direction still in A (0 - left, >0 - right)
; choose the best weapon
jsr ChooseBestOffensive
; randomizing force +-100
sbw Force #100 RandBoundaryLow
bpl NotNegativeEnergy
mwa #1 RandBoundaryLow
NotNegativeEnergy
adw Force #100 RandBoundaryHigh
jsr RandomizeForce
; if target distance lower than 24 - set weapon to Baby Missile (for security :)
jsr GetDistance
cmp #6 ; 24/4
bcs HighForce
lda #ind_Baby_Missile___
sta ActiveWeapon,x
HighForce
rts
.endp
;----------------------------------------------
.proc Spoiler
; like cyborg but little randomizing force
jsr UseBatteryOrFlag
; use defensives like Tosser
jsr TosserDefensives
; now select best target
lda #$00 ; no prefer humans
jsr FindBestTarget3
sty TargetTankNr
; aiming
jsr TakeAim ; direction still in A (0 - left, >0 - right)
; choose the best weapon
jsr ChooseBestOffensive
; randomizing force +-50
sbw Force #50 RandBoundaryLow
bpl NotNegativeEnergy
mwa #1 RandBoundaryLow
NotNegativeEnergy
adw Force #50 RandBoundaryHigh
jsr RandomizeForce
; if target distance lower than 24 - set weapon to Baby Missile (for security :)
jsr GetDistance
cmp #6 ; 24/4
bcs HighForce
lda #ind_Baby_Missile___
sta ActiveWeapon,x
HighForce
rts
.endp
;----------------------------------------------
.proc Cyborg
jsr UseBatteryOrFlag
; use defensives like Tosser
jsr TosserDefensives
; now select best target
lda #100 ; prefer humans
jsr FindBestTarget3
sty TargetTankNr
; aiming
jsr TakeAim ; direction still in A (0 - left, >0 - right)
; choose the best weapon
ldy #ind_Nuke___________+1
jsr ChooseBestOffensive.NotFromAll
lda Force
sta ForceTableL,x
lda Force+1
sta ForceTableH,x
; if target distance lower than 32 - set weapon to Baby Missile (for security :)
jsr GetDistance
cmp #8 ;32/4
bcs HighForce
lda #ind_Baby_Missile___
sta ActiveWeapon,x
HighForce
rts
.endp
;----------------------------------------------
.proc FindBestTarget3
; find target with lowest energy
; X - shooting tank number
; A - 100 - prefer humans , 0 - equality :)
; returns target tank number in Y and
; direcion of shoot in A (0 - left, >0 - right)
;----------------------------------------------
sta PreferHumansFlag
; jsr MakeLowResDistances
lda #202
sta temp2 ; max possible energy
lda #0
sta tempor2 ; direction of shoot
;ldx TankNr
ldy NumberOfPlayers
dey
loop01
cpy TankNr
beq skipThisPlayer
lda eXistenZ,y
beq skipThisPlayer
lda skilltable,y
beq ItIsHuman
lda PreferHumansFlag
ItIsHuman
clc
adc Energy,y ; if robotank energy=energy+100 (100 or 0 from PreferHumansFlag)
cmp temp2 ; lowest
bcs lowestIsLower
sta temp2
sty temp2+1 ; number of the closest tank
mva #0 tempor2
lda LowResDistances,x
cmp LowResDistances,y
bcs EnemyOnTheLeft
; enemy on right
inc tempor2 ; set direction to right
EnemyOnTheLeft
lowestIsLower
skipThisPlayer
dey
bpl loop01
; now we have number of the farthest tank in temp2+1
; and direction (0 - left, >0 - right) in tempor2
; let's move them to registers
; in temp2 we have energy of target
ldy temp2+1
lda tempor2
rts
.endp
;----------------------------------------------
.proc FindBestTarget2
; find nearest tank neighbour
; X - shooting tank number
; returns target tank number in Y and
; direcion of shoot in A (0 - left, >0 - right)
;----------------------------------------------
; jsr MakeLowResDistances
mva #$ff temp2 ; min possible distance mva #$ff temp2 ; min possible distance
mva #0 tempor2 ; direction of shoot
;ldx TankNr ;ldx TankNr
ldy NumberOfPlayers ldy NumberOfPlayers
@@ -223,13 +490,8 @@ loop01
bcs lowestIsLower bcs lowestIsLower
sta temp2 sta temp2
sty temp2+1 ; number of the closest tank sty temp2+1 ; number of the closest tank
; calculate index to shotangle table inc tempor2 ; set direction to right
:3 lsr @ bne lowestIsLower
and #%00000111
clc
adc #8
sta AngleTablePointer
jmp lowestIsLower
EnemyOnTheLeft EnemyOnTheLeft
sec sec
@@ -239,79 +501,258 @@ EnemyOnTheLeft
bcs lowestIsLower bcs lowestIsLower
sta temp2 sta temp2
sty temp2+1 ; number of the closest tank sty temp2+1 ; number of the closest tank
; calculate index to shotangle table
:3 lsr @
and #%00000111
eor #%00000111
sta AngleTablePointer
lowestIsLower lowestIsLower
skipThisPlayer skipThisPlayer
dey dey
bpl loop01 bpl loop01
; now we have number of the closest tank in temp2+1
randomize 0 8 ; and direction (0 - left, >0 - right) in tempor2
ldy AngleTablePointer ; let's move them to registers
clc ; in temp2 we have x distance divided by 8
adc AngleTable,y ldy temp2+1
sta NewAngle lda tempor2
rts
forceNow
mwa #300 RandBoundaryLow
mwa #700 RandBoundaryHigh
ldx TankNr
jsr RandomizeForce
endo
;ldx TankNr ;this is possibly not necessary
; choose the best weapon
lda TanksWeaponsTableL,x
sta temp
lda TanksWeaponsTableH,x
sta temp+1
ldy #ind_Laser__________ ;the last offensive weapon
loop
dey
lda (temp),y
beq loop
tya
sta ActiveWeapon,x
rts
;----------------------------------------------
AngleTable ; 16 bytes ;ba w $348b L$3350
.by 106,114,122,130,138,146,154,162
.by 18,26,34,43,50,58,66,74
.endp .endp
;---------------------------------------------- ;----------------------------------------------
.proc Tosser .proc TakeAim
; use best defensive :) ; targeting the tank number TargetTankNr (and Y)
; allways ; A (and tempor2) - direction from shooting tank (0 - left, >0 - right)
; first check check if any is in use ; returns angle and power of shoot tank X (TankNr)
lda ActiveDefenceWeapon,x ; in the appropriate variables (Angle and Force)
bne DefensiveInUse ;----------------------------------------------
ldy #ind_Nuclear_Winter_+1 ;the last defensive weapon lda ActiveWeapon,x
@ pha ; store active weapon
dey mva #$ff SecondTryFlag
cpy #ind_Battery________ ;first defensive weapon (White Flag nad Battery - never use) ; set initial Angle and Force values
beq NoUseDefensive lda OptionsTable+2 ; selected gravity
lda (temp),y ; has address of TanksWeaponsTable asl
beq @- tay
tya ; force correction - lower tank Y position - higher possible force
; activate defensive weapon sec
sta ActiveDefenceWeapon,x lda #screenheight
lda DefensiveEnergy,y sbc Ytankstable,x
sta ShieldEnergy,x sta temp2
; decrease in inventory
clc clc
sbc #1 lda AIForceTable,y
sta (temp),y sta RandBoundaryLow
DefensiveInUse adc temp2
NoUseDefensive sta RandBoundaryHigh
; Toosser is like Poolshark but allways uses defensives lda AIForceTable+1,y
jmp Poolshark sta RandBoundaryLow+1
adc #0
sta RandBoundaryHigh+1
jsr RandomizeForce
RepeatAim
jsr Table2Force
; wind correction 90+(wind/8)
mwa Wind temp2
:7 lsrw temp2
clc
lda #90
adc temp2
sta NewAngle
; set virtual weapon :)
lda #ind_Baby_Missile___
sta ActiveWeapon,x
; now we have initial valuses
mva #%11000000 TestFlightFlag
; check targeting direction
lda tempor2
jne AimingLeft
AimingRight
; make test Shoot (Flight)
jsr SetStartAndFlight
lda HitFlag
beq NoHitInFirstLoopR ; impossible :)
bmi GroundHitInFirstLoopR
TankHitInFirstLoopR
; tank hit, but which tank?
; it's our target or not?
ldy HitFlag
dey
cpy TargetTankNr
beq EndOfFirstLoopR ; it's our target!
; if it's another tank then check position like ground hit
GroundHitInFirstLoopR
; checking only x position of hit
ldy TargetTankNr
lda xTanksTableH,y
cmp XHit+1
bne @+
lda xTanksTableL,y
cmp XHit
@
bcs HitOnRightSideOfTargetR
; continue targeting
clc
lda NewAngle
adc #5 ; 5 deg to right
cmp #(180-20)
; bcs EndOfFirstLoopR ; if angle 180-20 or higher
bcs AimSecondTry
sta NewAngle
jmp AimingRight
NoHitInFirstLoopR
; Angle 5 deg to left and end loop
sec
lda NewAngle
sbc #5
sta NewAngle
HitOnRightSideOfTargetR
EndOfFirstLoopR
mva #5 modify ; set counter (5 turns)
SecondLoopR
; make test Shoot (Flight)
jsr SetStartAndFlight
lda HitFlag
beq NoHitInSecondLoopR ; impossible :)
bmi GroundHitInSecondLoopR
TankHitInSecondLoopR
; tank hit, but which tank?
; it's our target or not?
ldy HitFlag
dey
cpy TargetTankNr
beq EndOfSecondLoopR ; it's our target!
; if it's another tank then check position like ground hit
GroundHitInSecondLoopR
; checking only x position of hit
ldy TargetTankNr
lda xTanksTableH,y
cmp XHit+1
bne @+
lda xTanksTableL,y
cmp XHit
@
bcc HitOnLeftSideOfTargetR
; continue targeting
dec NewAngle ; 1 deg to left
dec modify ; max 5 turns
beq EndOfSecondLoopR
jmp SecondLoopR
HitOnLeftSideOfTargetR
; decrease energy (a little)
sbw Force #5
NoHitInSecondLoopR
; Angle 1 deg to right and end loop
inc NewAngle
EndOfSecondLoopR
EndOfAim
pla ; and restore active weapon
sta ActiveWeapon,x
rts
AimSecondTry
bit SecondTryFlag
bpl EndOfAim ; closest RTS
inc SecondTryFlag
lda #<1000
sta ForceTableL,x
lda #>1000
sta ForceTableH,x
jsr RandomizeForce.LimitForce
jmp RepeatAim
AimingLeft
; make test Shoot (Flight)
jsr SetStartAndFlight
lda HitFlag
beq NoHitInFirstLoopL ; impossible :)
bmi GroundHitInFirstLoopL
TankHitInFirstLoopL
; tank hit, but which tank?
; it's our target or not?
ldy HitFlag
dey
cpy TargetTankNr
beq EndOfFirstLoopL ; it's our target!
; if it's another tank then check position like ground hit
GroundHitInFirstLoopL
; checking only x position of hit
ldy TargetTankNr
lda xTanksTableH,y
cmp XHit+1
bne @+
lda xTanksTableL,y
cmp XHit
@
bcc HitOnLeftSideOfTargetL
; continue targeting
sec
lda NewAngle
sbc #5 ; 5 deg to left
cmp #21
; bcc EndOfFirstLoopL ; if angle 20 or lower
bcc AimSecondTry
sta NewAngle
jmp AimingLeft
NoHitInFirstLoopL
; Angle 5 deg to right and end loop
clc
lda NewAngle
adc #5
sta NewAngle
HitOnLeftSideOfTargetL
EndOfFirstLoopL
mva #5 modify ; set counter (5 turns)
SecondLoopL
; make test Shoot (Flight)
jsr SetStartAndFlight
lda HitFlag
beq NoHitInSecondLoopL ; impossible :)
bmi GroundHitInSecondLoopL
TankHitInSecondLoopL
; tank hit, but which tank?
; it's our target or not?
ldy HitFlag
dey
cpy TargetTankNr
beq EndOfSecondLoopL ; it's our target!
; if it's another tank then check position like ground hit
GroundHitInSecondLoopL
; checking only x position of hit
ldy TargetTankNr
lda xTanksTableH,y
cmp XHit+1
bne @+
lda xTanksTableL,y
cmp XHit
@
bcs HitOnRightSideOfTargetL
; continue targeting
inc NewAngle ; 1 deg to right
dec modify ; max 5 turns
beq EndOfSecondLoopL
jmp SecondLoopL
HitOnRightSideOfTargetL
; decrease energy (a little)
sbw Force #5
NoHitInSecondLoopL
; Angle 1 deg to left and end loop
dec NewAngle
EndOfSecondLoopL
jmp EndOfAim
SetStartAndFlight ; set start point (virtual barrel end :) ) and make test flight
; xtraj+1 and ytraj+1 set
clc
lda xTanksTableL,x
adc #4
sta xtraj+1
lda xTanksTableH,x
adc #0
sta xtraj+2
sec
lda yTanksTable,x
sbc #4
sta ytraj+1
mva #0 ytraj+2
mva NewAngle Angle
jsr Flight
ldx TankNr
rts
.endp .endp
;---------------------------------------------- ;----------------------------------------------
.proc PurchaseAI ; .proc PurchaseAI ;
@@ -335,10 +776,10 @@ PurchaseAIRoutines
.word ShooterPurchase-1 ;ShooterPurchase .word ShooterPurchase-1 ;ShooterPurchase
.word PoolsharkPurchase-1 ;PoolsharkPurchase .word PoolsharkPurchase-1 ;PoolsharkPurchase
.word TosserPurchase-1 ;TosserPurchase .word TosserPurchase-1 ;TosserPurchase
.word PoolsharkPurchase-1 ;ChooserPurchase .word TosserPurchase-1 ;ChooserPurchase
.word PoolsharkPurchase-1 ;SpoilerPurchase .word CyborgPurchase-1 ;SpoilerPurchase
.word PoolsharkPurchase-1 ;CyborgPurchase .word CyborgPurchase-1 ;CyborgPurchase
.word PoolsharkPurchase-1 ;UnknownPurchase .word TosserPurchase-1 ;UnknownPurchase
;---------------------------------------------- ;----------------------------------------------
.proc MoronPurchase .proc MoronPurchase
@@ -346,13 +787,41 @@ PurchaseAIRoutines
rts rts
.endp .endp
;------- ;-------
.proc TryToPurchaseOnePiece2 ; for Cyborg
; A - weapon number, better it will be in range(1,32)
; TankNr in X
; DOES NOT CHANGE X
tay
sta temp+1
:3 lsr ; A=A/8
sta temp
tya
and #%00000111
tay
lda bittable,y
ldy temp
and PurchaseMeTable2,y
beq TryToPurchaseOnePiece.SorryNoPurchase
jmp TryToPurchaseOnePiece.PurchaseIt
.endp
;-------
.proc TryToPurchaseOnePiece .proc TryToPurchaseOnePiece
; A - weapon number, better it will be in range(1,32) ; A - weapon number, better it will be in range(1,32)
; TankNr in X ; TankNr in X
; DOES NOT CHANGE X ; DOES NOT CHANGE X
tay tay
lda PurchaseMeTable,y sta temp+1
:3 lsr ; A=A/8
sta temp
tya
and #%00000111
tay
lda bittable,y
ldy temp
and PurchaseMeTable,y
beq SorryNoPurchase beq SorryNoPurchase
PurchaseIt
ldy temp+1
lda WeaponPriceL,y lda WeaponPriceL,y
sta temp sta temp
lda WeaponPriceH,y lda WeaponPriceH,y
@@ -397,13 +866,13 @@ SorryNoPurchase
;---------------------------------------------- ;----------------------------------------------
.proc ShooterPurchase .proc ShooterPurchase
; first try to buy defensives ; first try to buy defensives
mva #2 tempXroller; number of offensive purchases to perform ; mva #2 tempXroller; number of offensive purchases to perform
ldx TankNr ldx TankNr
@ @
randomize ind_Battery________ ind_StrongParachute randomize ind_Battery________ ind_StrongParachute
jsr TryToPurchaseOnePiece jsr TryToPurchaseOnePiece
dec tempXroller ; dec tempXroller
bne @- ; bne @-
; and now offensives ; and now offensives
mva #4 tempXroller; number of offensive purchases to perform mva #4 tempXroller; number of offensive purchases to perform
@@ -419,16 +888,16 @@ SorryNoPurchase
;---------------------------------------------- ;----------------------------------------------
.proc PoolsharkPurchase .proc PoolsharkPurchase
; first try to buy defensives ; first try to buy defensives
mva #3 tempXroller; number of offensive purchases to perform ; mva #2 tempXroller; number of offensive purchases to perform
ldx TankNr ldx TankNr
@ @
randomize ind_Battery________ ind_Auto_Defense___ randomize ind_Battery________ ind_Bouncy_Castle__
jsr TryToPurchaseOnePiece jsr TryToPurchaseOnePiece
dec tempXroller dec tempXroller
bne @- ; bpl @-
; and now offensives ; and now offensives
mva #8 tempXroller; number of purchases to perform mva #6 tempXroller; number of purchases to perform
;ldx TankNr ;ldx TankNr
@ @
randomize ind_Missile________ ind_Dirt_Charge____ randomize ind_Missile________ ind_Dirt_Charge____
@@ -444,14 +913,15 @@ SorryNoPurchase
; what is my money level ; what is my money level
ldx TankNr ldx TankNr
lda MoneyH,x ; money / 256 lda MoneyH,x ; money / 256
lsr ; /2
sta tempXroller ; perform this many purchase attempts sta tempXroller ; perform this many purchase attempts
; first try to buy defensives ; first try to buy defensives
mva #3 tempXroller; number of defensive purchases to perform ; mva #1 tempXroller; number of defensive purchases to perform
@ @
randomize ind_Battery________ ind_Auto_Defense___ randomize ind_Battery________ ind_Bouncy_Castle__
jsr TryToPurchaseOnePiece jsr TryToPurchaseOnePiece
dec tempXroller dec tempXroller
bne @- bpl @-
; and now offensives ; and now offensives
lda MoneyH,x ; money / 256 lda MoneyH,x ; money / 256
@@ -461,7 +931,73 @@ SorryNoPurchase
randomize ind_Missile________ ind_Dirt_Charge____ randomize ind_Missile________ ind_Dirt_Charge____
jsr TryToPurchaseOnePiece jsr TryToPurchaseOnePiece
dec tempXroller dec tempXroller
bne @- bpl @-
rts rts
.endp .endp
;----------------------------------------------
.proc CyborgPurchase
; what is my money level
ldx TankNr
lda MoneyH,x ; money / 256
lsr ; /2
sta tempXroller ; perform this many purchase attempts
; first try to buy defensives
; mva #1 tempXroller; number of defensive purchases to perform
@
randomize ind_Battery________ ind_Bouncy_Castle__
jsr TryToPurchaseOnePiece2
dec tempXroller
bpl @-
; and now offensives
lda MoneyH,x ; money / 256
:3 asl ;*8
sta tempXroller ; perform this many purchase attempts
@
randomize first_offensive____ last_offensive_____
jsr TryToPurchaseOnePiece2
dec tempXroller
bpl @-
rts
.endp
;----------------------------------------------
.proc ChooseBestOffensive
; choose the best weapon
; X - TankNr
;----------------------------------------------
ldy #ind_Dirt_Charge____+1 ;the last weapon to choose +1 (not BFG or Laser :) )
NotFromAll
; Y - the last offensive weapon to use + 1
lda TanksWeaponsTableL,x
sta temp
lda TanksWeaponsTableH,x
sta temp+1
loop
dey
lda (temp),y
beq loop
tya
sta ActiveWeapon,x
rts
.endp
;----------------------------------------------
.proc GetDistance
; calculates lores ( /4 ) distance from tank X to TargetTankNr(Y)
; result in A
;----------------------------------------------
ldy TargetTankNr
lda LowResDistances,x
cmp LowResDistances,y
@ bcs YisLower
sec
lda LowResDistances,y
sbc LowResDistances,x
rts
YisLower
lda LowResDistances,x
sbc LowResDistances,y
rts
.endp
-498
View File
@@ -1,498 +0,0 @@
; @com.wudsn.ide.asm.mainsourcefile=../scorch.asm
/***************************************/
/* Use MADS http://mads.atari8.info/ */
/* Mode: DLI (char mode) */
/***************************************/
;icl "HIMARS14.h"
;ICL '../lib/atari.hea'
WIDTH = 40
HEIGHT = 30
; --- BASIC switch OFF
org $2000\ mva #$ff portb\ rts\ ini $2000
; --- dmsc LZSS player routine on zero page
org $80
chn_copy .ds 9
chn_pos .ds 9
bptr .ds 2
cur_pos .ds 1
chn_bits .ds 1
bit_data .byte 1
.proc get_byte
lda song_data+1
inc song_ptr
bne skip
inc song_ptr+1
skip
rts
.endp
song_ptr = get_byte + 1
fcnt .ds 2
fadr .ds 2
fhlp .ds 2
cloc .ds 1
regA .ds 1
regX .ds 1
regY .ds 1
; --- MAIN PROGRAM
org $2000
ant dta $80
dta $42,a(scr),$02,$02,$02,$02,$02,$02,$02,$02,$02,$82,$02,$02,$02,$02,$82
dta $02,$02,$02,$82,$82,$82,$02,$82,$02,$02,$02,$82
dta $42,a(verline)
dta $41,a(ant)
verline
:37 dta d" "
build
scr ins "HIMARS14.scr"
.ds 2*40
.ALIGN $0400
fnt ins "HIMARS14.fnt"
ift USESPRITES
.ALIGN $0800
pmg .ds $0300
ift FADECHR = 0
SPRITES
els
.ds $500
eif
eif
song_data
ins 'mmm_16.lzs'
song_end
POKEY = $D200
buffers
.ds 256 * 9
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Song Initialization - this runs in the first tick:
;
.proc init_song
; Example: here initializes song pointer:
;mwa #song_data song_ptr
; Init all channels:
ldx #8
ldy #0
clear
; Read just init value and store into buffer and POKEY
jsr get_byte
sta POKEY, x
sty chn_copy, x
cbuf
sta buffers + 255
inc cbuf + 2
dex
bpl clear
; Initialize buffer pointer:
sty bptr
sty cur_pos
rts
.endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Wait for next frame
;
.proc wait_frame
lda 20
delay
cmp 20
beq delay
.endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Play one frame of the song
;
.proc play_frame
lda #>buffers
sta bptr+1
lda song_data
sta chn_bits
ldx #8
; Loop through all "channels", one for each POKEY register
chn_loop:
lsr chn_bits
bcs skip_chn ; C=1 : skip this channel
lda chn_copy, x ; Get status of this stream
bne do_copy_byte ; If > 0 we are copying bytes
; We are decoding a new match/literal
lsr bit_data ; Get next bit
bne got_bit
jsr get_byte ; Not enough bits, refill!
ror ; Extract a new bit and add a 1 at the high bit (from C set above)
sta bit_data ;
got_bit:
jsr get_byte ; Always read a byte, it could mean "match size/offset" or "literal byte"
bcs store ; Bit = 1 is "literal", bit = 0 is "match"
sta chn_pos, x ; Store in "copy pos"
jsr get_byte
sta chn_copy, x ; Store in "copy length"
; And start copying first byte
do_copy_byte:
dec chn_copy, x ; Decrease match length, increase match position
inc chn_pos, x
ldy chn_pos, x
; Now, read old data, jump to data store
lda (bptr), y
store:
ldy cur_pos
sta POKEY, x ; Store to output and buffer
sta (bptr), y
skip_chn:
; Increment channel buffer pointer
inc bptr+1
dex
bpl chn_loop ; Next channel
inc cur_pos
.endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Check for ending of song and jump to the next frame
;
.proc check_end_song
lda song_ptr + 1
cmp #>song_end
;bne wait_frame
lda song_ptr
cmp #<song_end
;bne wait_frame
.endp
end_loop
rts
main
jsr init_song
; --- init PMG
ift USESPRITES
mva >pmg pmbase ;missiles and players data address
mva #$03 pmcntl ;enable players and missiles
eif
lda:cmp:req $14 ;wait 1 frame
; copy system font to $a000
ldx #0
@ lda $e000,x
sta $a000,x
;lda $e100,x ; i need digits only :]
;sta $a100,x
;lda $e200,x
;sta $a200,x
;lda $e300,x
;sta $a300,x
inx
bne @-
sei ;stop IRQ interrupts
mva #$00 nmien ;stop NMI interrupts
sta dmactl
mva #$fe portb ;switch off ROM to get 16k more ram
mwa #NMI $fffa ;new NMI handler
mva #$c0 nmien ;switch on NMI+DLI again
ift CHANGES ;if label CHANGES defined
_lp lda trig0 ; FIRE #0
beq stop
lda trig1 ; FIRE #1
beq stop
lda consol ; START
and #1
beq stop
lda skctl
and #$04
bne _lp ;wait to press any key; here you can put any own routine
els
null jmp DLI.dli1 ;CPU is busy here, so no more routines allowed
eif
stop
mva #$00 pmcntl ;PMG disabled
tax
sta:rne hposp0,x+
mva #$ff portb ;ROM switch on
mva #$40 nmien ;only NMI interrupts, DLI disabled
cli ;IRQ enabled
lda #0
ldx #8
@ sta POKEY,x
dex
bpl @-
;no glitching please (issue #67)
lda #0
sta $D400 ;dmactl
sta $022F ;dmactls
rts ;return to ... DOS
; --- DLI PROGRAM
.local DLI
?old_dli = *
ift !CHANGES
dli1 lda trig0 ; FIRE #0
beq stop
lda trig1 ; FIRE #1
beq stop
lda consol ; START
and #1
beq stop
lda skctl
and #$04
beq stop
lda vcount
cmp #$02
bne dli1
:3 sta wsync
DLINEW dli10
eif
dli_start
dli10
sta regA
c4 lda #$04
sta wsync ;line=8
sta color0
sta gtictl
DLINEW DLI.dli2 1 0 0
dli2
sta regA
lda >fnt+$400*$01
sta wsync ;line=96
sta chbase
DLINEW dli3 1 0 0
dli3
sta regA
lda >fnt+$400*$02
sta wsync ;line=136
sta chbase
DLINEW dli4 1 0 0
dli4
sta regA
lda >fnt+$400*$01
sta wsync ;line=168
sta chbase
DLINEW dli5 1 0 0
dli5
sta regA
lda >fnt+$400*$02
sta wsync ;line=176
sta chbase
DLINEW dli6 1 0 0
dli6
sta regA
lda >fnt+$400*$03
sta wsync ;line=184
sta chbase
DLINEW dli7 1 0 0
dli7
sta regA
lda >fnt+$400*$00
sta wsync ;line=200
sta chbase
DLINEW dli11 1 0 0
dli11
sta regA
lda #>$a000 ; system font
sta wsync ;line=232
sta chbase
lda #$01
sta gtictl
lda regA
rti
.endl
; ---
CHANGES = 1
FADECHR = 0
SCHR = 127
; ---
.proc NMI
bit nmist
bpl VBL
jmp DLI.dli_start
dliv equ *-2
VBL
sta regA
stx regX
sty regY
sta nmist ;reset NMI flag
mwa #ant dlptr ;ANTIC address program
mva #@dmactl(standard|dma|lineX1) dmactl ;set new screen width
inc cloc ;little timer
; Initial values
lda >fnt+$400*$00
sta chbase
c0 lda #$00
sta colbak
lda #$02
sta chrctl
lda #$01
sta gtictl
c1 lda #$0C
sta color1
c2 lda #$02
sta color2
c3 lda #$0E
sta color3
x0 lda #$00
sta hposp0
sta hposp1
sta hposp2
sta hposp3
sta hposm0
sta hposm1
sta hposm2
sta hposm3
sta sizep0
sta sizep1
sta sizep2
sta sizep3
sta sizem
sta colpm0
sta colpm1
sta colpm2
sta colpm3
sta color0
mwa #DLI.dli_start dliv ;set the first address of DLI interrupt
;this area is for yours routines
jsr play_frame
quit
lda regA
ldx regX
ldy regY
rti
.endp
; ---
ini main
; ---
;opt l-
.MACRO SPRITES
missiles
.ds $100
player0
.ds $100
player1
.ds $100
player2
.ds $100
player3
.ds $100
.ENDM
USESPRITES = 0
.MACRO DLINEW
mva <:1 NMI.dliv
ift [>?old_dli]<>[>:1]
mva >:1 NMI.dliv+1
eif
ift :2
lda regA
eif
ift :3
ldx regX
eif
ift :4
ldy regY
eif
rti
.def ?old_dli = *
.ENDM
Binary file not shown.
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.
+877
View File
@@ -0,0 +1,877 @@
/***************************************/
/* Use MADS http://mads.atari8.info/ */
/* Mode: DLI (char mode) */
/***************************************/
;icl "Scorch50.h"
;icl "../lib/ATARISYS.ASM"
;icl "../lib/macro.hea"
; --- dmsc LZSS player routine on zero page
org $80
chn_copy .ds 9
chn_pos .ds 9
bptr .ds 2
cur_pos .ds 1
chn_bits .ds 1
bit_data .ds 1
fcnt .ds 2
fadr .ds 2
fhlp .ds 2
cloc .ds 1
regA .ds 1
regX .ds 1
regY .ds 1
WIDTH = 40
HEIGHT = 30
; --- BASIC switch OFF
org $2000\ mva #$ff portb\ rts\ ini $2000
; --- MAIN PROGRAM
org $2000
ant dta $C2,a(scr)
dta $02,$82,$02,$02,$82,$02,$82,$02,$82,$02,$02,$02,$82,$02,$82,$82
dta $02,$02,$82,$02,$02,$82,$02,$02,$82,$82,$02,$82,$22
;dta $42,a(verline)
dta $41,a(ant)
;verline
; :37 dta d" "
; dta build
scr ins "Scorch50.scr"
.ds 0*40
.ALIGN $0400
fnt ins "Scorch50.fnt"
ift USESPRITES
.ALIGN $0800
pmg .ds $0300
ift FADECHR = 0
SPRITES
els
.ds $500
eif
eif
song_data
ins 'mmm_16.lzs'
song_end
buffers
.ds 256 * 9
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Song Initialization - this runs in the first tick:
;
.proc init_song
mva #1 bit_data
; Example: here initializes song pointer:
;mwa #song_data song_ptr
; Init all channels:
ldx #8
ldy #0
clear
; Read just init value and store into buffer and POKEY
jsr get_byte
sta POKEY, x
sty chn_copy, x
cbuf
sta buffers + 255
inc cbuf + 2
dex
bpl clear
; Initialize buffer pointer:
sty bptr
sty cur_pos
rts
.endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Wait for next frame
;
.proc wait_frame
lda 20
delay
cmp 20
beq delay
.endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Play one frame of the song
;
.proc play_frame
lda #>buffers
sta bptr+1
lda song_data
sta chn_bits
ldx #8
; Loop through all "channels", one for each POKEY register
chn_loop:
lsr chn_bits
bcs skip_chn ; C=1 : skip this channel
lda chn_copy, x ; Get status of this stream
bne do_copy_byte ; If > 0 we are copying bytes
; We are decoding a new match/literal
lsr bit_data ; Get next bit
bne got_bit
jsr get_byte ; Not enough bits, refill!
ror ; Extract a new bit and add a 1 at the high bit (from C set above)
sta bit_data ;
got_bit:
jsr get_byte ; Always read a byte, it could mean "match size/offset" or "literal byte"
bcs store ; Bit = 1 is "literal", bit = 0 is "match"
sta chn_pos, x ; Store in "copy pos"
jsr get_byte
sta chn_copy, x ; Store in "copy length"
; And start copying first byte
do_copy_byte:
dec chn_copy, x ; Decrease match length, increase match position
inc chn_pos, x
ldy chn_pos, x
; Now, read old data, jump to data store
lda (bptr), y
store:
ldy cur_pos
sta POKEY, x ; Store to output and buffer
sta (bptr), y
skip_chn:
; Increment channel buffer pointer
inc bptr+1
dex
bpl chn_loop ; Next channel
inc cur_pos
.endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Check for ending of song and jump to the next frame
;
; not checking really so the tune gets funky :)))
;lda song_ptr + 1
;cmp #>song_end
;bne wait_frame
;lda song_ptr
;cmp #<song_end
;bne wait_frame
end_loop
rts
song_ptr = get_byte + 1
.proc get_byte
lda song_data+1
inc song_ptr
bne skip
inc song_ptr+1
skip
rts
.endp
main
jsr init_song
; ; copy system font to $a000
; ldx #0
;@ lda $e000,x
; sta $a000,x
; ;lda $e100,x ; i need digits only :]
; ;sta $a100,x
; ;lda $e200,x
; ;sta $a200,x
; ;lda $e300,x
; ;sta $a300,x
; inx
; bne @-
; --- init PMG
ift USESPRITES
mva >pmg pmbase ;missiles and players data address
mva #$03 GRACTL ;enable players and missiles
eif
lda:cmp:req $14 ;wait 1 frame
sei ;stop IRQ interrupts
mva #$00 nmien ;stop NMI interrupts
sta dmactl
;mva #$fe portb ;switch off ROM to get 16k more ram
;mwa #NMI $fffa ;new NMI handler
sta COLOR4
lda #$0E
sta COLOR1
lda #$84
sta COLOR2
lda #$0E
sta COLOR3
lda #$02
VMAIN NMI.vbl,6 ;jsr SetVBL
VDLI DLI.dli_start
mva #1 vscrol
mva #$c0 nmien ;switch on NMI+DLI again
_lp lda trig0 ; FIRE #0
beq stop
lda trig1 ; FIRE #1
beq stop
lda consol ; START
and #1
beq stop
lda skctl
and #$04
bne _lp ;wait to press any key; here you can put any own routine
stop
cli
vmain sysvbv,6
mva #$00 GRACTL ;PMG disabled
tax
sta:rne hposp0,x+
;mva #$ff portb ;ROM switch on
mva #$40 nmien ;only NMI interrupts, DLI disabled
;cli ;IRQ enabled
lda #0
ldx #8
@ sta POKEY,x
dex
bpl @-
;no glitching please (issue #67)
lda #0
sta $D400 ;dmactl
sta $022F ;dmactls
rts ;return to ... DOS
; --- DLI PROGRAM
.local DLI
?old_dli = *
dli_start
dli13
sta regA
sta wsync ;line=8
sta wsync ;line=9
sta wsync ;line=10
sta wsync ;line=11
sta wsync ;line=12
sta wsync ;line=13
c9 lda #$14
sta wsync ;line=14
sta colpm3
DLINEW DLI.dli2 1 0 0
dli2
sta regA
lda >fnt+$400*$01
sta wsync ;line=24
sta chbase
DLINEW dli3 1 0 0
dli3
sta regA
lda >fnt+$400*$02
sta wsync ;line=48
sta chbase
sta wsync ;line=49
sta wsync ;line=50
sta wsync ;line=51
s3 lda #$07
sta wsync ;line=52
sta sizem
DLINEW dli14 1 0 0
dli14
sta regA
stx regX
sty regY
x8 lda #$A3
sta wsync ;line=64
sta hposp3
x9 lda #$AB
sta wsync ;line=65
sta hposm3
sta wsync ;line=66
sta wsync ;line=67
sta wsync ;line=68
sta wsync ;line=69
sta wsync ;line=70
s4 lda #$13
x10 ldx #$A6
sta wsync ;line=71
sta sizem
stx hposm2
s5 lda #$01
x11 ldx #$72
x12 ldy #$62
sta wsync ;line=72
sta sizep2
sta sizep3
stx hposp2
sty hposp3
x13 lda #$A9
sta wsync ;line=73
sta hposp1
DLINEW dli4 1 1 1
dli4
sta regA
lda >fnt+$400*$03
sta wsync ;line=80
sta chbase
DLINEW dli5 1 0 0
dli5
sta regA
stx regX
lda >fnt+$400*$04
sta wsync ;line=112
sta chbase
sta wsync ;line=113
sta wsync ;line=114
sta wsync ;line=115
sta wsync ;line=116
sta wsync ;line=117
sta wsync ;line=118
s6 lda #$07
x14 ldx #$A3
sta wsync ;line=119
sta sizem
stx hposm1
s7 lda #$01
x15 ldx #$93
sta wsync ;line=120
sta sizep1
stx hposp1
DLINEW dli15 1 1 0
dli15
sta regA
stx regX
sta wsync ;line=128
sta wsync ;line=129
sta wsync ;line=130
sta wsync ;line=131
x16 lda #$4A
sta wsync ;line=132
sta hposp1
c10 lda #$D4
sta wsync ;line=133
sta colpf2
s8 lda #$C3
x17 ldx #$5A
sta wsync ;line=134
sta sizem
stx hposm3
DLINEW dli6 1 1 0
dli6
sta regA
stx regX
sty regY
lda >fnt+$400*$05
sta wsync ;line=136
sta chbase
sta wsync ;line=137
sta wsync ;line=138
sta wsync ;line=139
sta wsync ;line=140
sta wsync ;line=141
sta wsync ;line=142
s9 lda #$C7
x18 ldx #$A9
sta wsync ;line=143
sta sizem
stx hposm1
s10 lda #$D7
x19 ldx #$9E
c11 ldy #$02
sta wsync ;line=144
sta sizem
stx hposm2
sty colpm2
sta wsync ;line=145
c12 lda #$04
sta wsync ;line=146
sta colpm1
sta wsync ;line=147
sta wsync ;line=148
sta wsync ;line=149
s11 lda #$00
x20 ldx #$74
c13 ldy #$02
sta wsync ;line=150
sta sizep3
stx hposp3
sty colpm3
sta wsync ;line=151
sta wsync ;line=152
sta wsync ;line=153
sta wsync ;line=154
sta wsync ;line=155
sta wsync ;line=156
sta wsync ;line=157
c14 lda #$04
sta wsync ;line=158
sta colpf0
DLINEW dli7 1 1 1
dli7
sta regA
lda >fnt+$400*$06
sta wsync ;line=160
sta chbase
DLINEW dli8 1 0 0
dli8
sta regA
stx regX
sty regY
lda >fnt+$400*$07
sta wsync ;line=184
sta chbase
sta wsync ;line=185
s12 lda #$00
x21 ldx #$8E
c15 ldy #$08
sta wsync ;line=186
sta sizep2
stx hposp2
sty colpm2
x22 lda #$4C
c16 ldx #$0E
sta wsync ;line=187
sta hposp3
stx colpm3
c17 lda #$0A
c18 ldx #$34
sta wsync ;line=188
sta colpf1
stx colpm3
s13 lda #$43
x23 ldx #$49
sta wsync ;line=189
sta sizem
stx hposm3
c19 lda #$08
c20 ldx #$34
sta wsync ;line=190
sta colpf1
stx colpm2
sta wsync ;line=191
c21 lda #$0A
sta wsync ;line=192
sta colpf1
c22 lda #$08
sta wsync ;line=193
sta colpf1
c23 lda #$0A
sta wsync ;line=194
sta colpf1
c24 lda #$34
sta wsync ;line=195
sta colpf2
c25 lda #$0C
sta wsync ;line=196
sta colpf1
c26 lda #$0A
sta wsync ;line=197
sta colpf1
c27 lda #$0C
sta wsync ;line=198
sta colpf1
sta wsync ;line=199
sta wsync ;line=200
c28 lda #$0E
sta wsync ;line=201
sta colpf1
c29 lda #$0C
sta wsync ;line=202
sta colpf1
c30 lda #$0E
sta wsync ;line=203
sta colpf1
c31 lda #$0C
sta wsync ;line=204
sta colpf1
c32 lda #$0E
sta wsync ;line=205
sta colpf1
DLINEW dli16 1 1 1
dli16
sta regA
sta wsync ;line=208
sta wsync ;line=209
c33 lda #$0C
sta wsync ;line=210
sta colpf1
c34 lda #$0E
sta wsync ;line=211
sta colpf1
c35 lda #$0C
sta wsync ;line=212
sta colpf1
DLINEW dli9 1 0 0
dli9
sta regA
stx regX
sty regY
lda >fnt+$400*$08
c36 ldx #$0A
sta wsync ;line=216
sta chbase
stx colpf1
c37 lda #$0C
sta wsync ;line=217
sta colpf1
c38 lda #$0A
x24 ldx #$9D
c39 ldy #$34
sta wsync ;line=218
sta colpf1
stx hposm1
sty colpm1
s14 lda #$03
x25 ldx #$7D
sta wsync ;line=219
sta sizep3
stx hposp3
c40 lda #$08
s15 ldx #$13
x26 ldy #$45
sta wsync ;line=220
sta colpf1
stx sizem
sty hposm2
s16 lda #$03
x27 ldx #$59
sta wsync ;line=221
sta sizep2
stx hposp2
s17 lda #$53
x28 ldx #$49
x29 ldy #$79
sta wsync ;line=222
sta sizem
stx hposp1
sty hposm3
c41 lda #$06
c42 ldx #$00
sta wsync ;line=223
sta colpf1
stx colpf2
lda >fnt+$400*$01
s18 ldx #$50
x30 ldy #$44
sta wsync ;line=224
sta chbase
stx sizem
sty hposm0
sta wsync ;line=225
c43 lda #$08
sta wsync ;line=226
sta colpf1
c44 lda #$0C
sta wsync ;line=227
sta colpf1
sta wsync ;line=228
sta wsync ;line=229
c45 lda #$0E
sta wsync ;line=230
sta colpf1
DLINEW dli10 1 1 1
dli10
sta regA
lda >fnt+$400*$00
sta wsync ;line=232
sta chbase
;DLINEW dli11 1 0 0
lda regA
rti
;dli11
; sta regA
;
; lda #>$a000 ; system font
; sta wsync ;line=232
; sta chbase
; lda #$01
; sta gtictl
;
; lda regA
; rti
.endl
; ---
CHANGES = 1
FADECHR = 0
SCHR = 127
dliv = $0200
; ---
.proc NMI
bit nmist
bpl VBL
jmp DLI.dli_start
VBL
sta regA
stx regX
sty regY
;sta nmist ;reset NMI flag
mwa #ant dlptr ;ANTIC address program
mva #@dmactl(standard|dma|lineX1|players|missiles) dmactl ;set new screen width
inc cloc ;little timer
; Initial values
lda >fnt+$400*$00
sta chbase
c0 lda #$00
sta colbak
c1 lda #$0E
sta colpf1
c2 lda #$84
sta colpf2
c3 lda #$0E
sta colpf3
lda #$02
sta CHACTL
lda #$01
sta PRIOR
sta sizep0
s0 lda #$03
sta sizem
x0 lda #$D0
sta hposp0
x1 lda #$28
sta hposm0
c4 lda #$00
sta colpm0
x2 lda #$A2
sta hposm3
c5 lda #$0E
sta colpm3
s1 lda #$00
sta sizep2
sta sizep3
x3 lda #$92
sta hposp2
x4 lda #$8A
sta hposp3
c6 lda #$14
sta colpm2
s2 lda #$00
sta sizep1
x5 lda #$9A
sta hposp1
c7 lda #$14
sta colpm1
x6 lda #$A4
sta hposm2
x7 lda #$A6
sta hposm1
c8 lda #$00
sta colpf0
mwa #DLI.dli_start dliv ;set the first address of DLI interrupt
;this area is for yours routines
jsr play_frame
quit
lda regA
ldx regX
ldy regY
jmp sysvbv
.endp
; ---
ini main
; ---
;opt l- ; this stops the listing
.MACRO SPRITES
missiles
.he 00 00 00 00 00 00 00 00 03 03 C3 03 03 03 03 03
.he 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03
.he 03 03 03 03 03 03 03 03 03 83 83 83 C3 C3 C3 C3
.he C3 C3 C3 C3 C3 E3 E3 E3 E3 E3 E3 F3 F3 F3 F3 FB
.he FB FB FB FB FF FF FF FF F3 33 83 83 83 83 C3 D3
.he D3 D3 13 03 03 03 03 03 03 03 03 03 03 03 03 03
.he 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03
.he 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 0F
.he 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 03 03 03 03 C3 C3
.he C3 C3 C3 C3 C3 C3 C3 C3 C3 D3 FF FF 3F 3F 3F 3F
.he 3F 3F 33 13 03 03 03 03 03 03 03 03 03 03 03 03
.he 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03
.he 03 03 03 03 03 03 03 43 43 C3 C3 C3 C3 03 03 03
.he 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03
.he 03 03 0F 0F 3F 3F FF FC FE FE FF DB 03 03 03 03
.he 03 03 03 03 03 03 03 03 00 00 00 00 00 00 00 00
player0
.he 00 00 00 00 00 00 00 00 FF FF FF FF FF FF FF FF
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
.he FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00 00
player1
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
.he 00 00 00 00 00 00 00 00 F0 FC FE FE FF FF FF FF
.he FF 0F 0F 0F 0F 0F 0F 0F 0F 0F 07 07 07 07 07 07
.he 03 03 03 FF FF FF FF FF CF CF FF FF FF FF FF 9F
.he 9F FF FF FF FF FF FF FF 00 00 00 00 00 00 00 00
.he 00 F0 F0 F0 F0 78 F8 78 78 78 78 38 78 38 3C 3C
.he 3C 3C 1C 3C 1C 1C 1C 1C 1E 1E 1E 1E 0E 1E 0E 0E
.he 0E 0F 07 0F 07 0F 07 07 07 07 07 07 06 06 06 06
.he FF FF FF FF FF FF FF FF FF FF FF 00 00 3E 3F 7F
.he 7F 7F 7F 7F 7F 7F 7F 3F 3F 3F 00 00 00 00 00 00
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
.he 00 00 00 00 00 00 FF FF FF FF FF FF 00 00 00 00
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
player2
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
.he 00 00 00 00 00 00 00 00 FF FF FF FF FF FF FF FF
.he FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
.he 00 00 00 FF FF FF FF FF 99 99 FF FF FF FF FF 33
.he 33 FF FF FF FF FF FF FF 00 00 00 00 00 00 00 00
.he 00 00 80 F0 F8 F8 F8 FC FC FC FC FC FC FC FC FC
.he FC FE FE FE FE FE FE FF FF FF FF FF FF FF FE FC
.he F8 F8 F8 F8 F0 F0 F0 F0 F0 F0 F0 F0 E0 E0 E0 E0
.he E0 E0 E0 FC FE FE FF FF 8F 87 87 87 07 07 07 07
.he 07 07 07 07 07 07 07 03 00 00 00 00 00 00 00 00
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
.he 00 00 00 00 00 00 F8 FC FC FE FE FF FF 00 00 00
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
.he 00 00 00 00 00 00 FF FF FF FF FF FF 00 00 00 00
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
player3
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
.he 00 00 00 00 00 00 00 00 01 07 0F 1F 1F 3F 3F 7F
.he 7F 78 78 F0 F0 F0 F0 F8 F8 F8 78 7C 7C 7C 3C 3E
.he 3E 3E 1E 1F 1F 1F 0F 0F 0F 0F 0F 1F 1F 1F 1F 1F
.he 1F 3F 3F 3F 3F 3F 3F 3F FF 7F 7F 3F 3F 1F 1F 0F
.he 1F 1F 1F 3F 3F 3F 3F 3F 3F 3B 30 30 30 30 30 30
.he 30 30 30 30 38 3E 7F 7F 7F 7F 7F 7F 7F 7F 7F 7F
.he 7F 7F 7F 7F 7F 7F 7F FF FF FF FF FF FF FF FF FF
.he FF FF FF FF FF FF FF FF 7F 7F 7F 7F 7F 7F FF FF
.he FF FF FF FF FE FE FE FE FE FE FE FE FC 1C FF 7E
.he 7E FE FE FE FE FF FF FF 7F 7E 7E 3C 00 00 00 00
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
.he 00 00 00 00 00 7C FE FE FF FF FF 00 00 00 00 00
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
.he 00 00 00 FF FF FF FF FF FF FF FF FF 00 00 00 00
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
.ENDM
USESPRITES = 1
.MACRO DLINEW
mva <:1 dliv
ift [>?old_dli]<>[>:1]
mva >:1 dliv+1
eif
ift :2
lda regA
eif
ift :3
ldx regX
eif
ift :4
ldy regY
eif
rti
.def ?old_dli = *
.ENDM
Binary file not shown.
Binary file not shown.
-54
View File
@@ -1,54 +0,0 @@
IN TIMES OF TROUBLE, GO WITH WHAT YOU KNOW.
DIE!
EAT MY SHORTS!
YOU'RE TOAST!
BANZAI!
FROM HELL'S HEART I STAB AT THEE...
I DIDN'T DO IT. NOBODY SAW ME DO IT.
TAKE A HIKE!
YOU'RE DEAD MEAT.
MAKE MY DAY.
CHARGE!
ATTACK!
YOU'RE OUTTA HERE.
WATTSA MATTA YOU?
FREEZE, OR I'LL SHOOT!
HA HA HA.
WE COME IN PEACE - SHOOT TO KILL!
IN YOUR FACE!
DIE COMMIE PIG!
I LOVE THE SMELL OF NAPALM IN THE MORNING.
VICTORY!
SHOW SOME RESPECT.
JUST WHO DO YOU THINK YOU ARE?
LOOK OUT BELOW!
KNOCK, KNOCK.
LOOK OVER THERE.
GUESS WHAT'S COMING FOR DINNER?
MERRY CHRISTMAS.
OPEN WIDE!
HERE GOES NOTHING...
DON'T WORRY, IT ISN'T A LIVE ROUND.
BLOOD, PAIN, VIOLENCE!
TAKE THIS, SISSY!
I SHALL FLATTEN YOU!
I SHALL SMASH YOUR UGLY TANK!
I WONDER WHAT THIS BUTTON DOES?
DON'T TAKE THIS PERSONALLY.
WOULD THIS MAKE YOU MAD?
I TOLD YOU TO LEAVE MY SISTER ALONE!
I COULD SPARE YOU, BUT WHY?
MY BOMB IS BIGGER THAN YOURS.
DON'T FORGET ABOUT ME!
HASTA LA VISTA, BABY!
THIS IS YOUR BRAIN ON SCORCH.
TAKE THIS!
THIS SCREEN AIN'T BIG ENOUGH FOR THE BOTH OF US.
DIE, ALIEN SWINE!
SAY 'ARRGGHHHHH....'
I SHALL OIL MY TURRET WITH YOUR BLOOD.
DIE, TANK-SCUM!
I'M GONNA BREAK YOUR FACE!
MAMA SAID KNOCK YOU OUT!
I HOPE YOU ENJOY PAIN!
PARTING IS SUCH SWEET SORROW... NOT!
-60
View File
@@ -1,60 +0,0 @@
UGH!
AARGH!
AAAGGHHH!
I'M MELTING!
OOF..
OH!
EEEK!
AACCH!
I HATE IT WHEN THAT HAPPENS.
ONE DIRECT HIT CAN RUIN YOUR WHOLE DAY.
OH NO!
NOT ME!
OUCH.
OH NO, NOT AGAIN.
ANOTHER ONE BITES THE DUST.
GOODBYE.
HELP ME!
FAREWELL, CRUEL WORLD.
REMEMBER THE ALAMO!
OH MAN!
DOOUGH!
ANOTHER DAY, ANOTHER BOMB.
THIS IS THE END, MY ONLY FRIEND.
IT'S ALL OVER.
THE FAT LADY SANG.
WHY DOES EVERYTHING HAPPEN TO ME?
I'M GOING DOWN.
I'VE GOT A BAD FEELING ABOUT THIS.
CRAPOLA.
POW!
BIF!
BAM!
ZONK!
I SHOULD'VE LISTENED TO MY MOTHER...
NO... A BUD LIGHT!
WHAT WAS THAT NOISE?
MAMA SAID THERE'D BE DAYS LIKE THIS.
ITS JUST ONE OF THOSE DAYS...
I SEE A BRIGHT LIGHT...
MOMMY? IS THAT YOU?
I LET YOU HIT ME!
SUCKER SHOT!
I DIDN'T WANT TO LIVE ANYWAY.
-<SOB>-
WAS THAT AS CLOSE AS I THINK IT WAS?
JOIN THE ARMY, SEE THE WORLD THEY SAID.
IT WASN'T JUST A JOB IT WAS AN ADVENTURE!
I DIDN'T LIKE VIOLENCE ANYWAY!
I THOUGHT YOU LIKED ME?
SUCH SENSELESS VIOLENCE! I DON'T UNDERSTAND IT.
I THINK THIS GUY'S A LITTLE CRAZY.
SOMEHOW I DON'T FEEL LIKE KILLING ANYMORE.
HEY! KILLIN' AIN'T COOL.
GEE... THANKS.
I'VE FALLEN AND I CAN'T GET UP!
911?
OH NO! HERE I BLOW AGAIN!
I'LL BE BACK...
HEY - I'VE GOT LAWYERS.
TIME TO CALL 1-900-SUE-TANK.
+41
View File
@@ -0,0 +1,41 @@
STEREOMODE equ 0
;* --------BEGIN--------
;* C:\Atari\rmt\rmt128\schorch_str.rmt
FEAT_SFX equ 1
FEAT_GLOBALVOLUMEFADE equ 0 ;RMTGLOBALVOLUMEFADE variable
FEAT_NOSTARTINGSONGLINE equ 0
FEAT_INSTRSPEED equ 1
FEAT_CONSTANTSPEED equ 0 ;(19 times)
FEAT_COMMAND1 equ 1 ;(18 times)
FEAT_COMMAND2 equ 0 ;(0 times)
FEAT_COMMAND3 equ 0 ;(0 times)
FEAT_COMMAND4 equ 0 ;(0 times)
FEAT_COMMAND5 equ 0 ;(0 times)
FEAT_COMMAND6 equ 0 ;(0 times)
FEAT_COMMAND7SETNOTE equ 0 ;(0 times)
FEAT_COMMAND7VOLUMEONLY equ 0 ;(0 times)
FEAT_PORTAMENTO equ 0 ;(0 times)
FEAT_FILTER equ 1 ;(44 times)
FEAT_FILTERG0L equ 1 ;(13 times)
FEAT_FILTERG1L equ 1 ;(22 times)
FEAT_FILTERG0R equ 0 ;(0 times)
FEAT_FILTERG1R equ 0 ;(0 times)
FEAT_BASS16 equ 0 ;(0 times)
FEAT_BASS16G1L equ 0 ;(0 times)
FEAT_BASS16G3L equ 0 ;(0 times)
FEAT_BASS16G1R equ 0 ;(0 times)
FEAT_BASS16G3R equ 0 ;(0 times)
FEAT_VOLUMEONLYG0L equ 0 ;(0 times)
FEAT_VOLUMEONLYG2L equ 0 ;(0 times)
FEAT_VOLUMEONLYG3L equ 0 ;(0 times)
FEAT_VOLUMEONLYG0R equ 0 ;(0 times)
FEAT_VOLUMEONLYG2R equ 0 ;(0 times)
FEAT_VOLUMEONLYG3R equ 0 ;(0 times)
FEAT_TABLETYPE equ 0 ;(0 times)
FEAT_TABLEMODE equ 0 ;(0 times)
FEAT_TABLEGO equ 1 ;(1 times)
FEAT_AUDCTLMANUALSET equ 1 ;(6 times)
FEAT_VOLUMEMIN equ 0 ;(0 times)
FEAT_EFFECTVIBRATO equ 1 ;(3 times)
FEAT_EFFECTFSHIFT equ 1 ;(11 times)
;* --------END--------
+41
View File
@@ -0,0 +1,41 @@
STEREOMODE equ 0
;* --------BEGIN--------
;* C:\Atari\rmt\rmt128\scorch_str6.rmt
FEAT_SFX equ 1
FEAT_GLOBALVOLUMEFADE equ 0 ;RMTGLOBALVOLUMEFADE variable
FEAT_NOSTARTINGSONGLINE equ 0
FEAT_INSTRSPEED equ 1
FEAT_CONSTANTSPEED equ 0 ;(21 times)
FEAT_COMMAND1 equ 1 ;(18 times)
FEAT_COMMAND2 equ 0 ;(0 times)
FEAT_COMMAND3 equ 0 ;(0 times)
FEAT_COMMAND4 equ 0 ;(0 times)
FEAT_COMMAND5 equ 0 ;(0 times)
FEAT_COMMAND6 equ 0 ;(0 times)
FEAT_COMMAND7SETNOTE equ 0 ;(0 times)
FEAT_COMMAND7VOLUMEONLY equ 0 ;(0 times)
FEAT_PORTAMENTO equ 0 ;(0 times)
FEAT_FILTER equ 1 ;(44 times)
FEAT_FILTERG0L equ 1 ;(13 times)
FEAT_FILTERG1L equ 1 ;(22 times)
FEAT_FILTERG0R equ 0 ;(0 times)
FEAT_FILTERG1R equ 0 ;(0 times)
FEAT_BASS16 equ 0 ;(0 times)
FEAT_BASS16G1L equ 0 ;(0 times)
FEAT_BASS16G3L equ 0 ;(0 times)
FEAT_BASS16G1R equ 0 ;(0 times)
FEAT_BASS16G3R equ 0 ;(0 times)
FEAT_VOLUMEONLYG0L equ 0 ;(0 times)
FEAT_VOLUMEONLYG2L equ 0 ;(0 times)
FEAT_VOLUMEONLYG3L equ 0 ;(0 times)
FEAT_VOLUMEONLYG0R equ 0 ;(0 times)
FEAT_VOLUMEONLYG2R equ 0 ;(0 times)
FEAT_VOLUMEONLYG3R equ 0 ;(0 times)
FEAT_TABLETYPE equ 0 ;(0 times)
FEAT_TABLEMODE equ 0 ;(0 times)
FEAT_TABLEGO equ 1 ;(2 times)
FEAT_AUDCTLMANUALSET equ 1 ;(6 times)
FEAT_VOLUMEMIN equ 0 ;(0 times)
FEAT_EFFECTVIBRATO equ 1 ;(3 times)
FEAT_EFFECTFSHIFT equ 1 ;(11 times)
;* --------END--------
-40
View File
@@ -1,40 +0,0 @@
;* --------BEGIN--------
;* Z:\home\pkalinowski\Seafile\atari\projects\scorch_src\artwork\sfx\scorch_trial07_stripped.rmt
FEAT_SFX equ 1
FEAT_GLOBALVOLUMEFADE equ 0 ;RMTGLOBALVOLUMEFADE variable
FEAT_NOSTARTINGSONGLINE equ 0
FEAT_INSTRSPEED equ 1
FEAT_CONSTANTSPEED equ 16 ;(0 times)
FEAT_COMMAND1 equ 1 ;(4 times)
FEAT_COMMAND2 equ 0 ;(0 times)
FEAT_COMMAND3 equ 0 ;(0 times)
FEAT_COMMAND4 equ 0 ;(0 times)
FEAT_COMMAND5 equ 0 ;(0 times)
FEAT_COMMAND6 equ 0 ;(0 times)
FEAT_COMMAND7SETNOTE equ 0 ;(0 times)
FEAT_COMMAND7VOLUMEONLY equ 0 ;(0 times)
FEAT_PORTAMENTO equ 0 ;(0 times)
FEAT_FILTER equ 1 ;(22 times)
FEAT_FILTERG0L equ 0 ;(0 times)
FEAT_FILTERG1L equ 0 ;(0 times)
FEAT_FILTERG0R equ 0 ;(0 times)
FEAT_FILTERG1R equ 0 ;(0 times)
FEAT_BASS16 equ 0 ;(0 times)
FEAT_BASS16G1L equ 0 ;(0 times)
FEAT_BASS16G3L equ 0 ;(0 times)
FEAT_BASS16G1R equ 0 ;(0 times)
FEAT_BASS16G3R equ 0 ;(0 times)
FEAT_VOLUMEONLYG0L equ 0 ;(0 times)
FEAT_VOLUMEONLYG2L equ 0 ;(0 times)
FEAT_VOLUMEONLYG3L equ 0 ;(0 times)
FEAT_VOLUMEONLYG0R equ 0 ;(0 times)
FEAT_VOLUMEONLYG2R equ 0 ;(0 times)
FEAT_VOLUMEONLYG3R equ 0 ;(0 times)
FEAT_TABLETYPE equ 0 ;(0 times)
FEAT_TABLEMODE equ 0 ;(0 times)
FEAT_TABLEGO equ 1 ;(1 times)
FEAT_AUDCTLMANUALSET equ 1 ;(4 times)
FEAT_VOLUMEMIN equ 0 ;(0 times)
FEAT_EFFECTVIBRATO equ 0 ;(0 times)
FEAT_EFFECTFSHIFT equ 1 ;(7 times)
;* --------END--------
@@ -1,4 +1,3 @@
.echo *
;* ;*
;* Raster Music Tracker, RMT Atari routine version 1.20090108 ;* Raster Music Tracker, RMT Atari routine version 1.20090108
;* (c) Radek Sterba, Raster/C.P.U., 2002 - 2009 ;* (c) Radek Sterba, Raster/C.P.U., 2002 - 2009
@@ -17,18 +16,40 @@
;* ;*
;* 3. Because of RMTplayer provides a lot of effects, it spent a lot of CPU time. ;* 3. Because of RMTplayer provides a lot of effects, it spent a lot of CPU time.
;* ;*
STEREOMODE equ 0 ;0 => compile RMTplayer for 4 tracks mono ;* STEREOMODE equ 0..3 ;0 => compile RMTplayer for 4 tracks mono
;* ;1 => compile RMTplayer for 8 tracks stereo ;* ;1 => compile RMTplayer for 8 tracks stereo
;* ;2 => compile RMTplayer for 4 tracks stereo L1 R2 R3 L4 ;* ;2 => compile RMTplayer for 4 tracks stereo L1 R2 R3 L4
;* ;3 => compile RMTplayer for 4 tracks stereo L1 L2 R3 R4 ;* ;3 => compile RMTplayer for 4 tracks stereo L1 L2 R3 R4
;* ;*
; IFT STEREOMODE==1 IFT STEREOMODE==1
;TRACKS equ 8 TRACKS equ 8
; ELS ELS
TRACKS equ 4 TRACKS equ 4
; EIF EIF
;* ;*
PLAYER = * ;*PLAYER equ $3400
;*
;* RMT FEATures definitions file
;* For optimizations of RMT player routine to concrete RMT modul only!
icl "feat.txt"
;*
;* RMT ZeroPage addresses
org RMT_Zero_Page_V
p_tis
p_instrstable org *+2
p_trackslbstable org *+2
p_trackshbstable org *+2
p_song org *+2
ns org *+2
nr org *+2
nt org *+2
reg1 org *+1
reg2 org *+1
reg3 org *+1
tmp org *+1
IFT FEAT_COMMAND2
frqaddcmd2 org *+1
EIF
IFT TRACKS>4 IFT TRACKS>4
org PLAYER-$400+$40 org PLAYER-$400+$40
ELS ELS
@@ -745,8 +766,9 @@ ei4
IFT 1==[FEAT_COMMAND1+FEAT_COMMAND2+FEAT_COMMAND3+FEAT_COMMAND4+FEAT_COMMAND5+FEAT_COMMAND6+[FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY]] IFT 1==[FEAT_COMMAND1+FEAT_COMMAND2+FEAT_COMMAND3+FEAT_COMMAND4+FEAT_COMMAND5+FEAT_COMMAND6+[FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY]]
beq cmd0 beq cmd0
ELS ELS
lsr @ ; lsr @
lsr @ ; lsr @
lda #0 ; my fix :)
sta jmx+1 sta jmx+1
jmx bcc * jmx bcc *
jmp cmd0 jmp cmd0
+643
View File
@@ -0,0 +1,643 @@
;
; Raster Music Tracker, RMT Atari routine version 1.20090108
; (c) Radek Sterba, Raster/C.P.U., 2002 - 2009
; http://raster.atari.org
;
; Warnings:
;
; 1. RMT player routine needs 19 itself reserved bytes in zero page (no accessed
; from any other routines) as well as cca 1KB of memory before the "PLAYER"
; address for frequency tables and functionary variables. It's:
; a) from PLAYER-$03c0 to PLAYER for stereo RMTplayer
; b) from PLAYER-$0320 to PLAYER for mono RMTplayer
;
; 2. RMT player routine MUST (!!!) be compiled from the begin of the memory page.
; i.e. "PLAYER" address can be $..00 only!
;
; 3. Because of RMTplayer provides a lot of effects, it spent a lot of CPU time.
;
; STEREOMODE equ 0..3 ;0 => compile RMTplayer for 4 tracks mono
; ;1 => compile RMTplayer for 8 tracks stereo
; ;2 => compile RMTplayer for 4 tracks stereo L1 R2 R3 L4
; ;3 => compile RMTplayer for 4 tracks stereo L1 L2 R3 R4
TRACKS equ 4
; RMT FEATures definitions file
; For optimizations of RMT player routine to concrete RMT modul only!
icl "feat.txt"
;FEAT_EFFECTS equ FEAT_EFFECTVIBRATO||FEAT_EFFECTFSHIFT
;
; RMT ZeroPage addresses
.zpvar p_tis .word
p_instrstable = p_tis
.zpvar p_trackslbstable .word
.zpvar p_trackshbstable .word
.zpvar p_song .word
.zpvar ns .word
.zpvar nr .word
.zpvar nt .byte
.zpvar reg1 .byte
.zpvar reg2 .byte
.zpvar reg3 .byte
.zpvar tmp .byte
.zpvar v_audctl .byte ; de-self-modification vars
.zpvar v_ainstrspeed .byte
.zpvar v_maxtracklen .byte
.zpvar v_abeat .byte
.zpvar v_bspeed .byte
.zpvar v_speed .byte
.zpvar RMTSFXVOLUME .byte
; MOVED TO variables.asm
; org PLAYER-$400+$e0
;track_variables
;trackn_db .ds TRACKS
;trackn_hb .ds TRACKS
;trackn_idx .ds TRACKS
;trackn_pause .ds TRACKS
;trackn_note .ds TRACKS
;trackn_volume .ds TRACKS
;trackn_distor .ds TRACKS
;trackn_shiftfrq .ds TRACKS
;trackn_instrx2 .ds TRACKS
;trackn_instrdb .ds TRACKS
;trackn_instrhb .ds TRACKS
;trackn_instridx .ds TRACKS
;trackn_instrlen .ds TRACKS
;trackn_instrlop .ds TRACKS
;trackn_instrreachend .ds TRACKS
;trackn_volumeslidedepth .ds TRACKS
;trackn_volumeslidevalue .ds TRACKS
;trackn_effdelay .ds TRACKS
;trackn_effvibratoa .ds TRACKS
;trackn_effshift .ds TRACKS
;trackn_tabletypespeed .ds TRACKS
;trackn_tablenote .ds TRACKS
;trackn_tablea .ds TRACKS
;trackn_tableend .ds TRACKS
;trackn_tablelop .ds TRACKS
;trackn_tablespeeda .ds TRACKS
;trackn_command .ds TRACKS
;trackn_filter .ds TRACKS
;trackn_audf .ds TRACKS
;trackn_audc .ds TRACKS
;trackn_audctl .ds TRACKS
;v_aspeed .ds 1
;track_endvariables
INSTRPAR equ 12
tabbeganddistor
dta frqtabpure-frqtab,$00
dta frqtabpure-frqtab,$20
dta frqtabpure-frqtab,$40
dta frqtabbass1-frqtab,$c0
dta frqtabpure-frqtab,$80
dta frqtabpure-frqtab,$a0
dta frqtabbass1-frqtab,$c0
dta frqtabbass2-frqtab,$c0
vibtabbeg dta 0,vib1-vib0,vib2-vib0,vib3-vib0
vib0 dta 0
vib1 dta 1,-1,-1,1
vib2 dta 1,0,-1,-1,0,1
vib3 dta 1,1,0,-1,-1,-1,-1,0,1,1
vibtabnext
dta vib0-vib0+0
dta vib1-vib0+1,vib1-vib0+2,vib1-vib0+3,vib1-vib0+0
dta vib2-vib0+1,vib2-vib0+2,vib2-vib0+3,vib2-vib0+4,vib2-vib0+5,vib2-vib0+0
dta vib3-vib0+1,vib3-vib0+2,vib3-vib0+3,vib3-vib0+4,vib3-vib0+5,vib3-vib0+6,vib3-vib0+7,vib3-vib0+8,vib3-vib0+9,vib3-vib0+0
.align $100
frqtab
ERT [<frqtab]!=0 ;* frqtab must begin at the memory page bound! (i.e. $..00 address)
frqtabbass1
dta $BF,$B6,$AA,$A1,$98,$8F,$89,$80,$F2,$E6,$DA,$CE,$BF,$B6,$AA,$A1
dta $98,$8F,$89,$80,$7A,$71,$6B,$65,$5F,$5C,$56,$50,$4D,$47,$44,$3E
dta $3C,$38,$35,$32,$2F,$2D,$2A,$28,$25,$23,$21,$1F,$1D,$1C,$1A,$18
dta $17,$16,$14,$13,$12,$11,$10,$0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07
frqtabbass2
dta $FF,$F1,$E4,$D8,$CA,$C0,$B5,$AB,$A2,$99,$8E,$87,$7F,$79,$73,$70
dta $66,$61,$5A,$55,$52,$4B,$48,$43,$3F,$3C,$39,$37,$33,$30,$2D,$2A
dta $28,$25,$24,$21,$1F,$1E,$1C,$1B,$19,$17,$16,$15,$13,$12,$11,$10
dta $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
frqtabpure
dta $F3,$E6,$D9,$CC,$C1,$B5,$AD,$A2,$99,$90,$88,$80,$79,$72,$6C,$66
dta $60,$5B,$55,$51,$4C,$48,$44,$40,$3C,$39,$35,$32,$2F,$2D,$2A,$28
dta $25,$23,$21,$1F,$1D,$1C,$1A,$18,$17,$16,$14,$13,$12,$11,$10,$0F
dta $0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00,$00
.align $100
volumetab
dta $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
dta $00,$00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01
dta $00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$02,$02,$02,$02
dta $00,$00,$00,$01,$01,$01,$01,$01,$02,$02,$02,$02,$02,$03,$03,$03
dta $00,$00,$01,$01,$01,$01,$02,$02,$02,$02,$03,$03,$03,$03,$04,$04
dta $00,$00,$01,$01,$01,$02,$02,$02,$03,$03,$03,$04,$04,$04,$05,$05
dta $00,$00,$01,$01,$02,$02,$02,$03,$03,$04,$04,$04,$05,$05,$06,$06
dta $00,$00,$01,$01,$02,$02,$03,$03,$04,$04,$05,$05,$06,$06,$07,$07
dta $00,$01,$01,$02,$02,$03,$03,$04,$04,$05,$05,$06,$06,$07,$07,$08
dta $00,$01,$01,$02,$02,$03,$04,$04,$05,$05,$06,$07,$07,$08,$08,$09
dta $00,$01,$01,$02,$03,$03,$04,$05,$05,$06,$07,$07,$08,$09,$09,$0A
dta $00,$01,$01,$02,$03,$04,$04,$05,$06,$07,$07,$08,$09,$0A,$0A,$0B
dta $00,$01,$02,$02,$03,$04,$05,$06,$06,$07,$08,$09,$0A,$0A,$0B,$0C
dta $00,$01,$02,$03,$03,$04,$05,$06,$07,$08,$09,$0A,$0A,$0B,$0C,$0D
dta $00,$01,$02,$03,$04,$05,$06,$07,$07,$08,$09,$0A,$0B,$0C,$0D,$0E
dta $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
;*
;* Set of RMT main vectors:
;*
RASTERMUSICTRACKER
jmp rmt_init
jmp rmt_play
jmp rmt_p3
jmp rmt_silence
jmp SetPokey
jmp rmt_sfx ;* A=note(0,..,60),X=channel(0,..,3 or 0,..,7),Y=instrument*2(0,2,4,..,126)
rmt_init
stx ns
sty ns+1
pha
; IFT track_endvariables-track_variables>255
; ldy #0
; tya
;ri0 sta track_variables,y
; sta track_endvariables-$100,y
; iny
; bne ri0
; ELS
ldy #track_endvariables-track_variables
lda #0
ri0 sta track_variables-1,y
dey
bne ri0
; EIF
ldy #4
lda (ns),y
sta v_maxtracklen
iny
lda (ns),y
sta v_speed
ldy #8
ri1 lda (ns),y
sta p_tis-8,y
iny
cpy #8+8
bne ri1
pla
pha
asl @
asl @
clc
adc p_song
sta p_song
pla
php
and #$c0
asl @
rol @
rol @
plp
adc p_song+1
sta p_song+1
jsr GetSongLineTrackLineInitOfNewSetInstrumentsOnlyRmtp3
rmt_silence
lda #0
sta $d208
ldy #3
sty $d20f
ldy #8
si1 sta $d200,y
dey
bpl si1
lda #FEAT_INSTRSPEED
rts
GetSongLineTrackLineInitOfNewSetInstrumentsOnlyRmtp3
GetSongLine
ldx #0
stx v_abeat
nn0
nn1 txa
tay
lda (p_song),y
cmp #$fe
bcs nn2
tay
lda (p_trackslbstable),y
sta trackn_db,x
lda (p_trackshbstable),y
nn1a sta trackn_hb,x
lda #0
sta trackn_idx,x
lda #1
nn1a2 sta trackn_pause,x
lda #$80
sta trackn_instrx2,x
inx
xtracks01 cpx #TRACKS
bne nn1
lda p_song
clc
xtracks02 adc #TRACKS
sta p_song
bcc GetTrackLine
inc p_song+1
nn1b
jmp GetTrackLine
nn2
beq nn3
nn2a
lda #0
beq nn1a2
nn3
ldy #2
lda (p_song),y
tax
iny
lda (p_song),y
sta p_song+1
stx p_song
ldx #0
beq nn0
GetTrackLine
oo0
oo0a
lda v_speed
sta v_bspeed
ldx #-1
oo1
inx
dec trackn_pause,x
bne oo1x
oo1b
lda trackn_db,x
sta ns
lda trackn_hb,x
sta ns+1
oo1i
ldy trackn_idx,x
inc trackn_idx,x
lda (ns),y
sta reg1
and #$3f
cmp #61
beq oo1a
bcs oo2
sta trackn_note,x
iny
lda (ns),y
lsr @
and #$3f*2
sta trackn_instrx2,x
oo1a
lda #1
sta trackn_pause,x
ldy trackn_idx,x
inc trackn_idx,x
lda (ns),y
lsr @
ror reg1
lsr @
ror reg1
lda reg1
and #$f0
sta trackn_volume,x
oo1x
xtracks03sub1 cpx #TRACKS-1
bne oo1
lda v_bspeed
sta v_speed
sta v_aspeed
jmp InitOfNewSetInstrumentsOnly
oo2
cmp #63
beq oo63
lda reg1
and #$c0
beq oo62_b
asl @
rol @
rol @
sta trackn_pause,x
jmp oo1x
oo62_b
iny
lda (ns),y
sta trackn_pause,x
inc trackn_idx,x
jmp oo1x
oo63
lda reg1
bmi oo63_1X
iny
lda (ns),y
sta v_bspeed
inc trackn_idx,x
jmp oo1i
oo63_1X
cmp #255
beq oo63_11
iny
lda (ns),y
sta trackn_idx,x
jmp oo1i
oo63_11
jmp GetSongLine
p2xrmtp3 jmp rmt_p3
p2x0 dex
bmi p2xrmtp3
InitOfNewSetInstrumentsOnly
p2x1 ldy trackn_instrx2,x
bmi p2x0
jsr SetUpInstrumentY2
jmp p2x0
rmt_sfx
sta trackn_note,x
lda RMTSFXVOLUME ;* sfx note volume*16
;* label for sfx note volume parameter overwriting
sta trackn_volume,x
SetUpInstrumentY2
lda (p_instrstable),y
sta trackn_instrdb,x
sta nt
iny
lda (p_instrstable),y
sta trackn_instrhb,x
sta nt+1
lda #1
sta trackn_filter,x
tay
lda (nt),y
sta trackn_tablelop,x
iny
lda (nt),y
sta trackn_instrlen,x
iny
lda (nt),y
sta trackn_instrlop,x
iny
lda (nt),y
sta trackn_tabletypespeed,x
sta trackn_tablespeeda,x
iny
lda (nt),y
sta trackn_audctl,x
iny
lda (nt),y
sta trackn_volumeslidedepth,x
ldy #8
lda (nt),y
sta trackn_effdelay,x
iny
lda (nt),y
tay
lda vibtabbeg,y
sta trackn_effvibratoa,x
ldy #10
lda (nt),y
sta trackn_effshift,x
lda #128
sta trackn_volumeslidevalue,x
sta trackn_instrx2,x
asl @
sta trackn_instrreachend,x
sta trackn_shiftfrq,x
tay
lda (nt),y
sta trackn_tableend,x
adc #0
sta trackn_instridx,x
lda #INSTRPAR
sta trackn_tablea,x
tay
lda (nt),y
sta trackn_tablenote,x
xata_rtshere
rts
rmt_play
rmt_p0
jsr SetPokey
rmt_p1
rmt_p2
dec v_aspeed
bne rmt_p3
inc v_abeat
lda v_abeat
cmp v_maxtracklen
beq p2o3
jmp GetTrackLine
p2o3
jmp GetSongLineTrackLineInitOfNewSetInstrumentsOnlyRmtp3
go_ppnext jmp ppnext
rmt_p3
lda #>frqtab
sta nr+1
xtracks05sub1 ldx #TRACKS-1
pp1
lda trackn_instrhb,x
beq go_ppnext
sta ns+1
lda trackn_instrdb,x
sta ns
ldy trackn_instridx,x
lda (ns),y
sta reg1
iny
lda (ns),y
sta reg2
iny
lda (ns),y
sta reg3
iny
tya
cmp trackn_instrlen,x
bcc pp2
beq pp2
lda #$80
sta trackn_instrreachend,x
pp1b
lda trackn_instrlop,x
pp2 sta trackn_instridx,x
lda reg1
and #$0f
ora trackn_volume,x
tay
lda volumetab,y
sta tmp
lda reg2
and #$0e
tay
lda tabbeganddistor,y
sta nr
lda tmp
ora tabbeganddistor+1,y
sta trackn_audc,x
InstrumentsEffects
lda trackn_effdelay,x
beq ei2
cmp #1
bne ei1
lda trackn_shiftfrq,x
clc
adc trackn_effshift,x
clc
ldy trackn_effvibratoa,x
adc vib0,y
sta trackn_shiftfrq,x
lda vibtabnext,y
sta trackn_effvibratoa,x
jmp ei2
ei1
dec trackn_effdelay,x
ei2
ldy trackn_tableend,x
cpy #INSTRPAR+1
bcc ei3
lda trackn_tablespeeda,x
bpl ei2f
ei2c
tya
cmp trackn_tablea,x
bne ei2c2
lda trackn_tablelop,x
sta trackn_tablea,x
bne ei2a
ei2c2
inc trackn_tablea,x
ei2a
lda trackn_instrdb,x
sta nt
lda trackn_instrhb,x
sta nt+1
ldy trackn_tablea,x
lda (nt),y
sta trackn_tablenote,x
lda trackn_tabletypespeed,x
ei2f
sec
sbc #1
sta trackn_tablespeeda,x
ei3
lda trackn_instrreachend,x
bpl ei4
lda trackn_volume,x
beq ei4
tay
lda trackn_volumeslidevalue,x
clc
adc trackn_volumeslidedepth,x
sta trackn_volumeslidevalue,x
bcc ei4
tya
sbc #16
sta trackn_volume,x
ei4
lda reg2
sta trackn_command,x
and #$70
beq cmd0
cmd1
lda reg3
jmp cmd0c
cmd2
cmd3
cmd4
cmd5
cmd6
cmd7
cmd0
lda trackn_note,x
clc
adc reg3
cmd0a
clc
adc trackn_tablenote,x
cmp #61
bcc cmd0a1
lda #0
sta trackn_audc,x
lda #63
cmd0a1
tay
lda (nr),y
clc
adc trackn_shiftfrq,x
cmd0c
sta trackn_audf,x
pp9
ppnext
dex
bmi rmt_p4
jmp pp1
rmt_p4
lda trackn_audctl+0
ora trackn_audctl+1
ora trackn_audctl+2
ora trackn_audctl+3
tax
qq1
stx v_audctl
lda trackn_command+0
bpl qq2
lda trackn_audc+0
and #$0f
beq qq2
lda trackn_audf+0
clc
adc trackn_filter+0
sta trackn_audf+2
lda #0
sta trackn_audc+2
qq1a
txa
ora #4
tax
qq2
lda trackn_command+1
bpl qq3
lda trackn_audc+1
and #$0f
beq qq3
lda trackn_audf+1
clc
adc trackn_filter+1
sta trackn_audf+3
lda #0
sta trackn_audc+3
qq2a
txa
ora #2
tax
qq3
cpx v_audctl
bne qq5
qq5
stx v_audctl
rmt_p5
lda v_ainstrspeed
rts
SetPokey
ldy v_audctl
lda trackn_audf+0
ldx trackn_audc+0
sta AUDF1
stx AUDC1
lda trackn_audf+1
ldx trackn_audc+1
sta AUDF2
stx AUDC2
lda trackn_audf+2
ldx trackn_audc+2
sta AUDF3
stx AUDC3
lda trackn_audf+3
ldx trackn_audc+3
sta AUDF4
stx AUDC4
sty AUDCTL
rts
RMTPLAYEREND
+40
View File
@@ -0,0 +1,40 @@
;* --------BEGIN--------
;* C:\Atari\rmt\rmt128\scorch_SFX-only-str.rmt
FEAT_SFX equ 1
FEAT_GLOBALVOLUMEFADE equ 0 ;RMTGLOBALVOLUMEFADE variable
FEAT_NOSTARTINGSONGLINE equ 0
FEAT_INSTRSPEED equ 1
FEAT_CONSTANTSPEED equ 16 ;(0 times)
FEAT_COMMAND1 equ 1 ;(8 times)
FEAT_COMMAND2 equ 0 ;(0 times)
FEAT_COMMAND3 equ 0 ;(0 times)
FEAT_COMMAND4 equ 0 ;(0 times)
FEAT_COMMAND5 equ 0 ;(0 times)
FEAT_COMMAND6 equ 0 ;(0 times)
FEAT_COMMAND7SETNOTE equ 0 ;(0 times)
FEAT_COMMAND7VOLUMEONLY equ 0 ;(0 times)
FEAT_PORTAMENTO equ 0 ;(0 times)
FEAT_FILTER equ 1 ;(22 times)
FEAT_FILTERG0L equ 0 ;(0 times)
FEAT_FILTERG1L equ 0 ;(0 times)
FEAT_FILTERG0R equ 0 ;(0 times)
FEAT_FILTERG1R equ 0 ;(0 times)
FEAT_BASS16 equ 0 ;(0 times)
FEAT_BASS16G1L equ 0 ;(0 times)
FEAT_BASS16G3L equ 0 ;(0 times)
FEAT_BASS16G1R equ 0 ;(0 times)
FEAT_BASS16G3R equ 0 ;(0 times)
FEAT_VOLUMEONLYG0L equ 0 ;(0 times)
FEAT_VOLUMEONLYG2L equ 0 ;(0 times)
FEAT_VOLUMEONLYG3L equ 0 ;(0 times)
FEAT_VOLUMEONLYG0R equ 0 ;(0 times)
FEAT_VOLUMEONLYG2R equ 0 ;(0 times)
FEAT_VOLUMEONLYG3R equ 0 ;(0 times)
FEAT_TABLETYPE equ 0 ;(0 times)
FEAT_TABLEMODE equ 0 ;(0 times)
FEAT_TABLEGO equ 1 ;(2 times)
FEAT_AUDCTLMANUALSET equ 1 ;(6 times)
FEAT_VOLUMEMIN equ 0 ;(0 times)
FEAT_EFFECTVIBRATO equ 1 ;(1 times)
FEAT_EFFECTFSHIFT equ 1 ;(11 times)
;* --------END--------
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+129 -119
View File
@@ -1,125 +1,135 @@
.proc talk .proc talk
L0 dta c"IN TIMES OF TROUBLE, GO WITH WHAT YOU KNOW." ; Maximum text length is 63 characters!!!
L1 dta c"DIE!" L0 dta d"CYKA BLAT"
L2 dta c"EAT MY SHORTS!" L1 dta d"DIE!"
L3 dta c"YOU'RE TOAST!" L2 dta d"EAT MY SHORTS!"
L4 dta c"BANZAI!" L3 dta d"YOU'RE TOAST!"
L5 dta c"FROM HELL'S HEART I STAB AT THEE..." L4 dta d"BANZAI!"
L6 dta c"I DIDN'T DO IT. NOBODY SAW ME DO IT." L5 dta d"FROM HELL'S HEART I STAB AT THEE..."
L7 dta c"TAKE A HIKE!" L6 dta d"I DIDN'T DO IT. NOBODY SAW ME DO IT."
L8 dta c"YOU'RE DEAD MEAT." L7 dta d"TAKE A HIKE!"
L9 dta c"MAKE MY DAY." L8 dta d"YOU'RE DEAD MEAT."
L10 dta c"CHARGE!" L9 dta d"MAKE MY DAY."
L11 dta c"ATTACK!" L10 dta d"CHARGE!"
L12 dta c"YOU'RE OUTTA HERE." L11 dta d"ATTACK!"
L13 dta c"WATTSA MATTA YOU?" L12 dta d"YOU'RE OUTTA HERE."
L14 dta c"FREEZE, OR I'LL SHOOT!" L13 dta d"WATTSA MATTA YOU?"
L15 dta c"HA HA HA." L14 dta d"FREEZE, OR I'LL SHOOT!"
L16 dta c"WE COME IN PEACE - SHOOT TO KILL!" L15 dta d"HA HA HA."
L17 dta c"IN YOUR FACE!" L16 dta d"WE COME IN PEACE - SHOOT TO KILL!"
L18 dta c"DIE COMMIE PIG!" L17 dta d"IN YOUR FACE!"
L19 dta c"I LOVE THE SMELL OF NAPALM IN THE MORNING." L18 dta d"DIE COMMIE PIG!"
L20 dta c"VICTORY!" L19 dta d"I LOVE THE SMELL OF NAPALM IN THE MORNING."
L21 dta c"SHOW SOME RESPECT." L20 dta d"VICTORY!"
L22 dta c"JUST WHO DO YOU THINK YOU ARE?" L21 dta d"SHOW SOME RESPECT."
L23 dta c"LOOK OUT BELOW!" L22 dta d"JUST WHO DO YOU THINK YOU ARE?"
L24 dta c"KNOCK, KNOCK." L23 dta d"LOOK OUT BELOW!"
L25 dta c"LOOK OVER THERE." L24 dta d"KNOCK, KNOCK."
L26 dta c"GUESS WHAT'S COMING FOR DINNER?" L25 dta d"LOOK OVER THERE."
L27 dta c"MERRY CHRISTMAS." L26 dta d"GUESS WHAT'S COMING FOR DINNER?"
L28 dta c"OPEN WIDE!" L27 dta d"MERRY CHRISTMAS."
L29 dta c"HERE GOES NOTHING..." L28 dta d"OPEN WIDE!"
L30 dta c"DON'T WORRY, IT ISN'T A LIVE ROUND." L29 dta d"HERE GOES NOTHING..."
L31 dta c"BLOOD, PAIN, VIOLENCE!" L30 dta d"DON'T WORRY, IT ISN'T A LIVE ROUND."
L32 dta c"TAKE THIS, SISSY!" L31 dta d"BLOOD, PAIN, VIOLENCE!"
L33 dta c"I SHALL FLATTEN YOU!" L32 dta d"TAKE THIS, SISSY!"
L34 dta c"I SHALL SMASH YOUR UGLY TANK!" L33 dta d"I SHALL FLATTEN YOU!"
L35 dta c"I WONDER WHAT THIS BUTTON DOES?" L34 dta d"I SHALL SMASH YOUR UGLY TANK!"
L36 dta c"DON'T TAKE THIS PERSONALLY." L35 dta d"I WONDER WHAT THIS BUTTON DOES?"
L37 dta c"WOULD THIS MAKE YOU MAD?" L36 dta d"DON'T TAKE THIS PERSONALLY."
L38 dta c"I TOLD YOU TO LEAVE MY SISTER ALONE!" L37 dta d"WOULD THIS MAKE YOU MAD?"
L39 dta c"I COULD SPARE YOU, BUT WHY?" L38 dta d"I TOLD YOU TO LEAVE MY SISTER ALONE!"
L40 dta c"MY BOMB IS BIGGER THAN YOURS." L39 dta d"I COULD SPARE YOU, BUT WHY?"
L41 dta c"DON'T FORGET ABOUT ME!" L40 dta d"MY BOMB IS BIGGER THAN YOURS."
L42 dta c"HASTA LA VISTA, BABY!" L41 dta d"DON'T FORGET ABOUT ME!"
L43 dta c"THIS IS YOUR BRAIN ON SCORCH." L42 dta d"HASTA LA VISTA, BABY!"
L44 dta c"TAKE THIS!" L43 dta d"THIS IS YOUR BRAIN ON SCORCH."
L45 dta c"THIS SCREEN AIN'T BIG ENOUGH FOR THE BOTH OF US." L44 dta d"TAKE THIS!"
L46 dta c"DIE, ALIEN SWINE!" L45 dta d"THIS SCREEN AIN'T BIG ENOUGH FOR THE BOTH OF US."
L47 dta c"SAY ARRGGHHHHH...." L46 dta d"DIE, ALIEN SWINE!"
L48 dta c"I SHALL OIL MY TURRET WITH YOUR BLOOD." L47 dta d"AWRUK!!!"
L49 dta c"DIE, TANK-SCUM!" L48 dta d"I SHALL OIL MY TURRET WITH YOUR BLOOD."
L50 dta c"I'M GONNA BREAK YOUR FACE!" L49 dta d"DIE, TANK-SCUM!"
L51 dta c"MAMA SAID KNOCK YOU OUT!" L50 dta d"I'M GONNA BREAK YOUR FACE!"
L52 dta c"I HOPE YOU ENJOY PAIN!" L51 dta d"MAMA SAID KNOCK YOU OUT!"
L52 dta d"I HOPE YOU ENJOY PAIN!"
L53 dta d"HOW'D YOU LIKE ONE ACROSS YOUR LIPS?" ;(sanford and son)
;-------------------------------- ;--------------------------------
L53 dta c"PARTING IS SUCH SWEET SORROW... NOT!" L54 dta d"PARTING IS SUCH SWEET SORROW... NOT!"
L54 dta c"UGH!" L55 dta d"UGH!"
L55 dta c"AARGH!" L56 dta d"AARGH!"
L56 dta c"AAAGGHHH!" L57 dta d"AAAGGHHH!"
L57 dta c"I'M MELTING!" L58 dta d"I'M MELTING!"
L58 dta c"OOF.." L59 dta d"OOF.."
L59 dta c"OH!" L60 dta d"OH!"
L60 dta c"EEEK!" L61 dta d"EEEK!"
L61 dta c"AACCH!" L62 dta d"AACCH!"
L62 dta c"I HATE IT WHEN THAT HAPPENS." L63 dta d"I HATE IT WHEN THAT HAPPENS."
L63 dta c"ONE DIRECT HIT CAN RUIN YOUR WHOLE DAY." L64 dta d"ONE DIRECT HIT CAN RUIN YOUR WHOLE DAY."
L64 dta c"OH NO!" L65 dta d"OH NO!"
L65 dta c"NOT ME!" L66 dta d"NOT ME!"
L66 dta c"OUCH." L67 dta d"OUCH."
L67 dta c"OH NO, NOT AGAIN." L68 dta d"OH NO, NOT AGAIN."
L68 dta c"ANOTHER ONE BITES THE DUST." L69 dta d"ANOTHER ONE BITES THE DUST."
L69 dta c"GOODBYE." L70 dta d"GOODBYE."
L70 dta c"HELP ME!" L71 dta d"HELP ME!"
L71 dta c"FAREWELL, CRUEL WORLD." L72 dta d"FAREWELL, CRUEL WORLD."
L72 dta c"REMEMBER THE ALAMO!" L73 dta d"REMEMBER THE ALAMO!"
L73 dta c"OH MAN!" L74 dta d"OH MAN!"
L74 dta c"DOOUGH!" L75 dta d"DOOUGH!"
L75 dta c"ANOTHER DAY, ANOTHER BOMB." L76 dta d"ANOTHER DAY, ANOTHER BOMB."
L76 dta c"THIS IS THE END, MY ONLY FRIEND." L77 dta d"THIS IS THE END, MY ONLY FRIEND."
L77 dta c"IT'S ALL OVER." L78 dta d"VERY FUNNY."
L78 dta c"THE FAT LADY SANG." L79 dta d"THE FAT LADY SANG."
L79 dta c"WHY DOES EVERYTHING HAPPEN TO ME?" L80 dta d"WHY DOES EVERYTHING HAPPEN TO ME?"
L80 dta c"I'M GOING DOWN." L81 dta d"I'M GOING DOWN."
L81 dta c"I'VE GOT A BAD FEELING ABOUT THIS." L82 dta d"I'VE GOT A BAD FEELING ABOUT THIS."
L82 dta c"CRAPOLA." L83 dta d"CRAPOLA."
L83 dta c"POW!" L84 dta d"POW!"
L84 dta c"BIF!" L85 dta d"BIF!"
L85 dta c"BAM!" L86 dta d"BAM!"
L86 dta c"ZONK!" L87 dta d"ZONK!"
L87 dta c"I SHOULD'VE LISTENED TO MY MOTHER..." L88 dta d"I SHOULD'VE LISTENED TO MY MOTHER..."
L88 dta c"NO... A BUD LIGHT!" L89 dta d"I WALK THROUGH THE VALLEY OF THE SHADOW..."
L89 dta c"WHAT WAS THAT NOISE?" L90 dta d"WHAT WAS THAT NOISE?"
L90 dta c"MAMA SAID THERE'D BE DAYS LIKE THIS." L91 dta d"MAMA SAID THERE'D BE DAYS LIKE THIS."
L91 dta c"ITS JUST ONE OF THOSE DAYS..." L92 dta d"ITS JUST ONE OF THOSE DAYS..."
L92 dta c"I SEE A BRIGHT LIGHT..." L93 dta d"I SEE A BRIGHT LIGHT..."
L93 dta c"MOMMY? IS THAT YOU?" L94 dta d"MOMMY? IS THAT YOU?"
L94 dta c"I LET YOU HIT ME!" L95 dta d"I LET YOU HIT ME!"
L95 dta c"SUCKER SHOT!" L96 dta d"SUCKER SHOT!"
L96 dta c"I DIDN'T WANT TO LIVE ANYWAY." L97 dta d"I DIDN'T WANT TO LIVE ANYWAY."
L97 dta c"-<SOB>-" L98 dta d"-<SOB>-"
L98 dta c"WAS THAT AS CLOSE AS I THINK IT WAS?" L99 dta d"WAS THAT AS CLOSE AS I THINK IT WAS?"
L99 dta c"JOIN THE ARMY, SEE THE WORLD THEY SAID." L100 dta d"JOIN THE ARMY, SEE THE WORLD THEY SAID."
L100 dta c"IT WASN'T JUST A JOB IT WAS AN ADVENTURE!" L101 dta d"IT WASN'T JUST A JOB IT WAS AN ADVENTURE!"
L101 dta c"I DIDN'T LIKE VIOLENCE ANYWAY!" L102 dta d"I DIDN'T LIKE VIOLENCE ANYWAY!"
L102 dta c"I THOUGHT YOU LIKED ME?" L103 dta d"I THOUGHT YOU LIKED ME?"
L103 dta c"SUCH SENSELESS VIOLENCE! I DON'T UNDERSTAND IT." L104 dta d"CTO XYEB"
L104 dta c"I THINK THIS GUY'S A LITTLE CRAZY." L105 dta d"I THINK THIS GUY'S A LITTLE CRAZY."
L105 dta c"SOMEHOW I DON'T FEEL LIKE KILLING ANYMORE." L106 dta d"SOMEHOW I DON'T FEEL LIKE KILLING ANYMORE."
L106 dta c"HEY! KILLIN' AIN'T COOL." L107 dta d"HEY! KILLIN' AIN'T COOL."
L107 dta c"GEE... THANKS." L108 dta d"GEE... THANKS."
L108 dta c"I'VE FALLEN AND I CAN'T GET UP!" L109 dta d"I'VE FALLEN AND I CAN'T GET UP!"
L109 dta c"911?" L110 dta d"911?"
L110 dta c"OH NO! HERE I BLOW AGAIN!" L111 dta d"OH NO! HERE I BLOW AGAIN!"
L111 dta c"I'LL BE BACK..." L112 dta d"I'LL BE BACK..."
L112 dta c"HEY - I'VE GOT LAWYERS." L113 dta d"HEY - I'VE GOT LAWYERS."
L113 dta c"TIME TO CALL 1-900-SUE-TANK." L114 dta d"TIME TO CALL 1-900-SUE-TANK."
L115 dta d"YOU BIG DUMMY!" ;(sanford and son)
LEND
OffensiveTextTableL OffensiveTextTableL
dta <L0,<L1,<L2,<L3,<L4,<L5,<L6,<L7,<L8,<L9,<L10,<L11,<L12,<L13,<L14,<L15,<L16,<L17,<L18,<L19,<L20,<L21,<L22,<L23,<L24,<L25,<L26,<L27,<L28,<L29,<L30,<L31,<L32,<L33,<L34,<L35,<L36,<L37,<L38,<L39,<L40,<L41,<L42,<L43,<L44,<L45,<L46,<L47,<L48,<L49,<L50,<L51,<L52,<L53,<L54,<L55,<L56,<L57,<L58,<L59,<L60,<L61,<L62,<L63,<L64,<L65,<L66,<L67,<L68,<L69,<L70,<L71,<L72,<L73,<L74,<L75,<L76,<L77,<L78,<L79,<L80,<L81,<L82,<L83,<L84,<L85,<L86,<L87,<L88,<L89,<L90,<L91,<L92,<L93,<L94,<L95,<L96,<L97,<L98,<L99,<L100,<L101,<L102,<L103,<L104,<L105,<L106,<L107,<L108,<L109,<L110,<L111,<L112,<L113 dta <L0,<L1,<L2,<L3,<L4,<L5,<L6,<L7,<L8,<L9,<L10,<L11,<L12,<L13,<L14,<L15,<L16,<L17,<L18,<L19,<L20,<L21,<L22,<L23,<L24,<L25,<L26,<L27,<L28,<L29,<L30,<L31,<L32,<L33,<L34,<L35,<L36,<L37,<L38,<L39,<L40,<L41,<L42,<L43,<L44,<L45,<L46,<L47,<L48,<L49,<L50,<L51,<L52,<L53
dta <L54,<L55,<L56,<L57,<L58,<L59,<L60,<L61,<L62,<L63,<L64,<L65,<L66,<L67,<L68,<L69,<L70,<L71,<L72,<L73,<L74,<L75,<L76,<L77,<L78,<L79,<L80,<L81,<L82,<L83,<L84,<L85,<L86,<L87,<L88,<L89,<L90,<L91,<L92,<L93,<L94,<L95,<L96,<L97,<L98,<L99,<L100,<L101,<L102,<L103,<L104,<L105,<L106,<L107,<L108,<L109,<L110,<L111,<L112,<L113,<L114,<L115
dta <LEND
OffensiveTextTableH OffensiveTextTableH
dta >L0,>L1,>L2,>L3,>L4,>L5,>L6,>L7,>L8,>L9,>L10,>L11,>L12,>L13,>L14,>L15,>L16,>L17,>L18,>L19,>L20,>L21,>L22,>L23,>L24,>L25,>L26,>L27,>L28,>L29,>L30,>L31,>L32,>L33,>L34,>L35,>L36,>L37,>L38,>L39,>L40,>L41,>L42,>L43,>L44,>L45,>L46,>L47,>L48,>L49,>L50,>L51,>L52,>L53,>L54,>L55,>L56,>L57,>L58,>L59,>L60,>L61,>L62,>L63,>L64,>L65,>L66,>L67,>L68,>L69,>L70,>L71,>L72,>L73,>L74,>L75,>L76,>L77,>L78,>L79,>L80,>L81,>L82,>L83,>L84,>L85,>L86,>L87,>L88,>L89,>L90,>L91,>L92,>L93,>L94,>L95,>L96,>L97,>L98,>L99,>L100,>L101,>L102,>L103,>L104,>L105,>L106,>L107,>L108,>L109,>L110,>L111,>L112,>L113 dta >L0,>L1,>L2,>L3,>L4,>L5,>L6,>L7,>L8,>L9,>L10,>L11,>L12,>L13,>L14,>L15,>L16,>L17,>L18,>L19,>L20,>L21,>L22,>L23,>L24,>L25,>L26,>L27,>L28,>L29,>L30,>L31,>L32,>L33,>L34,>L35,>L36,>L37,>L38,>L39,>L40,>L41,>L42,>L43,>L44,>L45,>L46,>L47,>L48,>L49,>L50,>L51,>L52,>L53
OffensiveTextLengths dta >L54,>L55,>L56,>L57,>L58,>L59,>L60,>L61,>L62,>L63,>L64,>L65,>L66,>L67,>L68,>L69,>L70,>L71,>L72,>L73,>L74,>L75,>L76,>L77,>L78,>L79,>L80,>L81,>L82,>L83,>L84,>L85,>L86,>L87,>L88,>L89,>L90,>L91,>L92,>L93,>L94,>L95,>L96,>L97,>L98,>L99,>L100,>L101,>L102,>L103,>L104,>L105,>L106,>L107,>L108,>L109,>L110,>L111,>L112,>L113,>L114,>L115
dta 43,4,14,13,7,35,37,12,17,12,7,7,18,17,22,9,33,13,15,42,8,18,30,15,13,16,31,16,10,20,35,22,17,20,29,31,27,24,36,27,29,22,21,29,10,48,17,20,38,15,26,24,22,36,4,6,9,12,5,3,5,6,28,39,6,7,5,17,27,8,8,22,19,7,7,26,32,14,18,33,15,34,8,4,4,4,5,36,18,20,36,29,23,19,17,12,29,7,36,39,41,30,23,48,34,42,25,14,31,4,26,15,23,28 dta >LEND
NumberOfOffensiveTexts=54 NumberOfOffensiveTexts=54
NumberOfDeffensiveTexts=60 NumberOfDeffensiveTexts=62
.endp .endp
hoverFull dta d"MY HOVERCRAFT IS FULL OF EELS!"
hoverFullEnd
hoverEmpty dta d"RUNNING OUT OF EELS"
hoverEmptyEnd
Binary file not shown.
Binary file not shown.
Binary file not shown.
-48
View File
@@ -1,48 +0,0 @@
import sys
from string import strip
lineCount = 0
lengths = []
alltexts = []
for line in open("TALK1.txt"):
lineCount+=1
line = strip(line)
lengths.append(len(line))
alltexts.append(line)
off = lineCount
for line in open("TALK2.txt"):
lineCount+=1
line = strip(line)
lengths.append(len(line))
alltexts.append(line)
tmpNo = 0
for line in alltexts:
print ("L"+str(tmpNo)+' dta "'+line+'"')
tmpNo+= 1
l=""
for i in range(0,lineCount):
l+="<L"+str(i)+","
l=l[:-1]
print ("OffensiveTextTableL")
print (" dta "+l)
l=""
for i in range(0,lineCount):
l+=">L"+str(i)+","
l=l[:-1]
print ("OffensiveTextTableH")
print (" dta "+l)
l=""
for i in range(0,lineCount):
l+=str(lengths[i])+","
l=l[:-1]
print ("OffensiveTextLengths")
print (" dta "+l)
deff = lineCount-off
print ("NumberOfOffensiveTexts="+str(off))
print ("NumberOfDeffensiveTexts="+str(deff))
Binary file not shown.
+331 -357
View File
@@ -2,26 +2,25 @@
.IF *>0 ;this is a trick that prevents compiling this file alone .IF *>0 ;this is a trick that prevents compiling this file alone
; initial values for some variables
initialvaluesStart
I_OptionsTable .by 0,1,2,2,0,1,3,2,0
I_RoundsInTheGame .by 10 ;how many rounds in the current game
I_seppukuVal .by 75
I_mountainDeltaH .by 3
I_mountainDeltaL .by $ff
;----------------------------------------------------
I_LineHeader1
dta d"# ROUND: "
I_RoundNrDisplay
dta d" #", $ff
initialvaluesCount = *-initialvaluesstart ; MAX 128 bytes !
;=================================================================================== ;===================================================================================
;==========================CONSTANT TABLES, do not erase!=========================== ;==========================CONSTANT TABLES, do not erase!===========================
;=================================================================================== ;===================================================================================
TankColoursTable .BYTE $88,$cc,$38,$1c,$6a,$02
TankStatusColoursTable .BYTE $80,$c0,$30,$10,$60,$00 mountainsDeltaTableH .by 0,1,3,5,7
dliColorsBack mountainsDeltaTableL .by $1f, $7f, $ff, $7f, $ff
:10 .by $02,$00
dliColorsFore
.by $0a
TextBackgroundColor = $02 ; REAL constans - use: LDA #TextBackgroundColor
TextForegroundColor = $0c
CashOptionL ;(one zero less than on the screen)
.by 0,<200,<800,<1200,<2000
CashOptionH
.by 0,>200,>800,>1200,>2000
GravityTable .by 10,20,25,30,40
MaxWindTable .by 5,20,40,70,99
RoundsTable .by 10,20,30,40,50
flyDelayTable .by 255,150,75,35,1
seppukuTable .by 255, 45,25,15,9
;------------------------------------------------ ;------------------------------------------------
LevelNameBeginL ; begins of level names LevelNameBeginL ; begins of level names
.by <NamesOfLevels,<(NamesOfLevels+10),<(NamesOfLevels+20) .by <NamesOfLevels,<(NamesOfLevels+10),<(NamesOfLevels+20)
@@ -36,42 +35,65 @@ TanksWeaponsTableL
.by <TanksWeapon1,<TanksWeapon2,<TanksWeapon3,<TanksWeapon4,<TanksWeapon5,<TanksWeapon6 .by <TanksWeapon1,<TanksWeapon2,<TanksWeapon3,<TanksWeapon4,<TanksWeapon5,<TanksWeapon6
TanksWeaponsTableH TanksWeaponsTableH
.by >TanksWeapon1,>TanksWeapon2,>TanksWeapon3,>TanksWeapon4,>TanksWeapon5,>TanksWeapon6 .by >TanksWeapon1,>TanksWeapon2,>TanksWeapon3,>TanksWeapon4,>TanksWeapon5,>TanksWeapon6
;--------------
XtankOffsetGO_L
.by 6,56,106,156,206,0
XtankOffsetGO_H
.by 0,0,0,0,0,1
;-----4x4 texts----- ;-----4x4 texts-----
LineTop LineTop
dta d"(%%%%%%%%%%%%)", $ff dta d"(%%%%%%%%%%%%)"
;# - vertical, () * +, % - horizontal ;# - vertical, () * +, % - horizontal
LineBottom LineBottom
dta d"*%%%%%%%%%%%%+", $ff dta d"*%%%%%%%%%%%%+"
LineEmpty LineEmpty
dta d"# #", $ff dta d"# #"
LineHeader2 LineHeader2
dta d"# RESULTS #", $ff dta d"# RESULTS #"
LineGameOver LineGameOver
dta d"# GAME OVER #", $ff dta d"# GAME OVER #"
seppukuText seppukuText
dta d"# SEPPUKU! #", $ff dta d"# SEPPUKU! #"
areYouSureText areYouSureText
dta d"# SURE? Y/N #", $ff dta d"# SURE? Y/N #"
lineClear lineClear
dta d" ", $ff dta d" "
TankColoursTable .BYTE $58,$2a,$96,$ca,$7a,$ed
;TankStatusColoursTable .BYTE $54,$24,$92,$c4,$74,$e4 ; standard order
TankStatusColoursTable .BYTE $74,$c4,$24,$e4,$54,$94 ; Adam's order
;-----------
GradientAddrL
.by <dliColorsFore, <dliColorsFore, <dliColorsFore2
GradientAddrH
.by >dliColorsFore, >dliColorsFore, >dliColorsFore2
dliColorsFore2 ; colors for NTSC
.by $0a ; one mountains color
.by $7e,$7a,$7c,$6a,$6c,$58,$5a,$48,$4a,$38
.by $3a,$16,$18,$e6,$e8,$d4,$d6,$b4,$b6,$b6
dliColorsFore2PAL ; colors for PAL
.by $0a ; one mountains color
.by $7e,$7a,$7c,$6a,$6c,$58,$5a,$48,$4a,$38
.by $3a,$16,$18,$e6,$e8,$c4,$c6,$a4,$a6,$a6
;----------- ;-----------
pmtableL ; addressess of the P/M memory for 5 tanks (6th is without P/M background) pmtableL ; addressess of the P/M memory for 6 tanks
.by <(pmgraph+$400) .by <(pmgraph+$400)
.by <(pmgraph+$500) .by <(pmgraph+$500)
.by <(pmgraph+$600) .by <(pmgraph+$600)
.by <(pmgraph+$700) .by <(pmgraph+$700)
.by <(pmgraph+$300) ; this is a missile background .by <(pmgraph+$300) ; this is a missile background
.by <(pmgraph+$300) ; this is a missile background
pmtableH pmtableH
.by >(pmgraph+$400) .by >(pmgraph+$400)
.by >(pmgraph+$500) .by >(pmgraph+$500)
.by >(pmgraph+$600) .by >(pmgraph+$600)
.by >(pmgraph+$700) .by >(pmgraph+$700)
.by >(pmgraph+$300) .by >(pmgraph+$300)
.by >(pmgraph+$300)
;----------- ;-----------
sintable sintable
.by 0 .by 1
.by 4 .by 4
.by 8 .by 8
.by 13 .by 13
@@ -163,10 +185,10 @@ sintable
.by 255 .by 255
.by 255 ;anti self destruction byte .by 255 ;anti self destruction byte
linetableL ;linetableL
:screenheight+1 .by <(display+screenBytes*#) ; :screenheight+1 .by <(display+screenBytes*#)
linetableH ;linetableH
:screenheight+1 .by >(display+screenBytes*#) ; :screenheight+1 .by >(display+screenBytes*#)
;---------------------------- ;----------------------------
bittable bittable
.by $80,$40,$20,$10,$08,$04,$02,$01 .by $80,$40,$20,$10,$08,$04,$02,$01
@@ -195,90 +217,6 @@ SlideLeftTable
.BY %00000111 .BY %00000111
.BY %00001100 .BY %00001100
;-----------------------------------------------------------
; this table changes Angle to the appropriate tank character
BarrelTable
.by $2C,$2C,$2C,$2C,$2C,$2C,$2C,$2C,$2A,$2A,
.by $2A,$2A,$2A,$2A,$2A,$2A,$28,$28,$28,$28,
.by $28,$28,$28,$28,$28,$26,$26,$26,$26,$26,
.by $26,$26,$26,$24,$24,$24,$24,$24,$24,$24,
.by $24,$22,$22,$22,$22,$22,$22,$22,$22,$22,
.by $20,$20,$20,$20,$20,$20,$20,$20,$1E,$1E,
.by $1E,$1E,$1E,$1E,$1E,$1E,$1C,$1C,$1C,$1C,
.by $1C,$1C,$1C,$1C,$1C,$1A,$1A,$1A,$1A,$1A,
.by $1A,$1A,$1A,$18,$18,$18,$18,$18,$18,$18,
;.by $18,
.by $16,$16,$16,$16,$16,$16,$16,$16,$14,$14,
.by $14,$14,$14,$14,$14,$14,$12,$12,$12,$12,
.by $12,$12,$12,$12,$12,$10,$10,$10,$10,$10,
.by $10,$10,$10,$0E,$0E,$0E,$0E,$0E,$0E,$0E,
.by $0E,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,
.by $0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$08,$08,
.by $08,$08,$08,$08,$08,$08,$06,$06,$06,$06,
.by $06,$06,$06,$06,$06,$04,$04,$04,$04,$04,
.by $04,$04,$04,$02,$02,$02,$02,$02,$02,$02,
.by $02,
EndOfTheBarrelX
; right angles from 0 (horizontally right) to 90 (up)
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,6,6,6,6,6,6,6,6,6,
.by 5,5,5,5,5,5,5,5,5,5,
.by 4,4,4,4,4,4,4,4,4,4,
;.by 4,
; left angles from 90 (vertical) to 180 (horizontally left)
.by 3,3,3,3,3,3,3,3,3,3,
.by 3,2,2,2,2,2,2,2,2,2,
.by 2,1,1,1,1,1,1,1,1,1,
.by 0,0,0,0,0,0,0,0,0,0,
.by 0,0,0,0,0,0,0,0,0,0,
.by 0,0,0,0,0,0,0,0,0,0,
.by 0,0,0,0,0,0,0,0,0,0,
.by 0,0,0,0,0,0,0,0,0,0,
.by 0,0,0,0,0,0,0,0,0,0,
.by 0
EndOfTheBarrelY
; right angles from 0 (horizontally right) to 90 (up)
; one pixel Up for fix problems with colision check
;.by 3,3,3,3,3,3,3,3,3,3,3,3,3,3
.by 4,4,4,4,4,4,4,4,4,4,
.by 4,4,4,4,4,4,4,4,4,4,
.by 4,4,4,4,4,4,4,5,5,5,
.by 5,5,5,5,5,5,5,6,6,6,
.by 6,6,6,6,6,6,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
;.by 7,
; left angles from 90 (vertical) to 180 (horizontally left)
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,6,6,6,6,6,
.by 6,6,6,6,5,5,5,5,5,5,
.by 5,5,5,5,4,4,4,4,4,4,
.by 4,4,4,4,4,4,4,4,4,4,
.by 4,4,4,4,4,4,4,4,4,4,
.by 4,
; one pixel Up for fix problems with colision check
;.by 3,3,3,3,3,3,3,3,3,3,3,3,3,3
;------------------------------------------------- ;-------------------------------------------------
TanksNamesDefault TanksNamesDefault
dta d"1st.Tank" dta d"1st.Tank"
@@ -287,7 +225,12 @@ TanksNamesDefault
dta d"4th.Tank" dta d"4th.Tank"
dta d"5th.Tank" dta d"5th.Tank"
dta d"6th.Tank" dta d"6th.Tank"
;-------------------------------------------------
TankShapesTable .BYTE char_tank1___________
.BYTE char_tank2___________
.BYTE char_tank3___________
.BYTE char_tank4___________
;-------------------------------------------------
WeaponPriceH ; weapons prices (tables with prices of weapons) WeaponPriceH ; weapons prices (tables with prices of weapons)
.by >price_Baby_Missile___ .by >price_Baby_Missile___
.by >price_Missile________ .by >price_Missile________
@@ -319,41 +262,24 @@ WeaponPriceH ; weapons prices (tables with prices of weapons)
.by >price_Ton_of_Dirt____ .by >price_Ton_of_Dirt____
.by >price_Liquid_Dirt____ .by >price_Liquid_Dirt____
.by >price_Dirt_Charge____ .by >price_Dirt_Charge____
.by >price_Earth_Disrupter .by >price_Buy_me_________
.by >price_Plasma_Blast___
.by >price_Laser__________ .by >price_Laser__________
.by >price______________33
.by >price______________34
.by >price______________35
.by >price______________36
.by >price______________37
.by >price______________38
.by >price______________39
.by >price______________40
.by >price______________41
.by >price______________42
.by >price______________43
.by >price______________44
.by >price______________45
.by >price______________46
.by >price______________47
.by >price_White_Flag_____ .by >price_White_Flag_____
.by >price_Battery________ .by >price_Battery________
.by >price_Bal_Guidance___ .by >price_Hovercraft_____
.by >price_Horz_Guidance__
.by >price_Vert_Guidance__
.by >price_Lazy_Boy_______
.by >price_Parachute______ .by >price_Parachute______
.by >price_StrongParachute .by >price_StrongParachute
.by >price_Mag_Deflector__ .by >price_Mag_Deflector__
.by >price_Shield_________ .by >price_Shield_________
.by >price_Force_Shield___
.by >price_Heavy_Shield___ .by >price_Heavy_Shield___
.by >price_Super_Mag______ .by >price_Force_Shield___
.by >price_Auto_Defense___ .by >price_Bouncy_Castle__
.by >price_Fuel_Tank______ .by >price_Long_Barrel____
.by >price_Nuclear_Winter_ .by >price_Nuclear_Winter_
.by >price_Lazy_Boy_______
.by >price_Lazy_Darwin____
.by >price_Auto_Defense___
.by >price_Spy_Hard_______
WeaponPriceL WeaponPriceL
.by <price_Baby_Missile___ .by <price_Baby_Missile___
.by <price_Missile________ .by <price_Missile________
@@ -385,40 +311,24 @@ WeaponPriceL
.by <price_Ton_of_Dirt____ .by <price_Ton_of_Dirt____
.by <price_Liquid_Dirt____ .by <price_Liquid_Dirt____
.by <price_Dirt_Charge____ .by <price_Dirt_Charge____
.by <price_Earth_Disrupter .by <price_Buy_me_________
.by <price_Plasma_Blast___
.by <price_Laser__________ .by <price_Laser__________
.by <price______________33
.by <price______________34
.by <price______________35
.by <price______________36
.by <price______________37
.by <price______________38
.by <price______________39
.by <price______________40
.by <price______________41
.by <price______________42
.by <price______________43
.by <price______________44
.by <price______________45
.by <price______________46
.by <price______________47
.by <price_White_Flag_____ .by <price_White_Flag_____
.by <price_Battery________ .by <price_Battery________
.by <price_Bal_Guidance___ .by <price_Hovercraft_____
.by <price_Horz_Guidance__
.by <price_Vert_Guidance__
.by <price_Lazy_Boy_______
.by <price_Parachute______ .by <price_Parachute______
.by <price_StrongParachute .by <price_StrongParachute
.by <price_Mag_Deflector__ .by <price_Mag_Deflector__
.by <price_Shield_________ .by <price_Shield_________
.by <price_Force_Shield___
.by <price_Heavy_Shield___ .by <price_Heavy_Shield___
.by <price_Super_Mag______ .by <price_Force_Shield___
.by <price_Auto_Defense___ .by <price_Bouncy_Castle__
.by <price_Fuel_Tank______ .by <price_Long_Barrel____
.by <price_Nuclear_Winter_ .by <price_Nuclear_Winter_
.by <price_Lazy_Boy_______
.by <price_Lazy_Darwin____
.by <price_Auto_Defense___
.by <price_Spy_Hard_______
;------------------------------------------------- ;-------------------------------------------------
; how many units (bulletd) of a given weapon we get for a given price ; how many units (bulletd) of a given weapon we get for a given price
@@ -427,150 +337,148 @@ WeaponPriceL
; is not present in the game. ; is not present in the game.
; This is the slot for adding new weapons. ; This is the slot for adding new weapons.
WeaponUnits WeaponUnits
.by 10 ;Baby_Missile___ .by 10 ;Baby_Missile___;_00
.by 5 ;Missile________ .by 5 ;Missile________;_01
.by 2 ;Baby_Nuke______ .by 2 ;Baby_Nuke______;_02
.by 1 ;Nuke___________ .by 1 ;Nuke___________;_03
.by 2 ;LeapFrog_______ .by 2 ;LeapFrog_______;_04
.by 3 ;Funky_Bomb_____ .by 3 ;Funky_Bomb_____;_05
.by 2 ;MIRV___________ .by 2 ;MIRV___________;_06
.by 1 ;Death_s_Head___ .by 1 ;Death_s_Head___;_07
.by 10 ;Napalm_________ .by 4 ;Napalm_________;_08
.by 2 ;Hot_Napalm_____ .by 2 ;Hot_Napalm_____;_09
.by 20 ;Tracer_________ .by 20 ;Tracer_________;_10
.by 10 ;Smoke_Tracer___ .by 10 ;Smoke_Tracer___;_11
.by 5 ;Baby_Roller____ .by 5 ;Baby_Roller____;_12
.by 3 ;Roller_________ .by 3 ;Roller_________;_13
.by 2 ;Heavy_Roller___ .by 2 ;Heavy_Roller___;_14
.by 5 ;Riot_Charge____ .by 5 ;Riot_Charge____;_15
.by 2 ;Riot_Blast_____ .by 2 ;Riot_Blast_____;_16
.by 5 ;Riot_Bomb______ .by 5 ;Riot_Bomb______;_17
.by 2 ;Heavy_Riot_Bomb .by 2 ;Heavy_Riot_Bomb;_18
.by 10 ;Baby_Digger____ .by 10 ;Baby_Digger____;_19
.by 5 ;Digger_________ .by 5 ;Digger_________;_20
.by 2 ;Heavy_Digger___ .by 2 ;Heavy_Digger___;_21
.by 10 ;Baby_Sandhog___ .by 10 ;Baby_Sandhog___;_22
.by 5 ;Sandhog________ .by 5 ;Sandhog________;_23
.by 2 ;Heavy_Sandhog__ .by 2 ;Heavy_Sandhog__;_24
.by 5 ;Dirt_Clod______ .by 5 ;Dirt_Clod______;_25
.by 3 ;Dirt_Ball______ .by 3 ;Dirt_Ball______;_26
.by 1 ;Ton_of_Dirt____ .by 1 ;Ton_of_Dirt____;_27
.by 4 ;Liquid_Dirt____ .by 4 ;Liquid_Dirt____;_28
.by 2 ;Dirt_Charge____ .by 2 ;Dirt_Charge____;_29
.by 10 ;Earth_Disrupter .by 1 ;Buy_me_________;_30
.by 5 ;Plasma_Blast___ .by 5 ;Laser__________;_31
.by 5 ;Laser__________ .by 1 ;White_Flag_____;_32
.by 0 ;_____________33 .by 3 ;Battery________;_33
.by 0 ;_____________34 .by 2 ;Floating_Tank__;_34
.by 0 ;_____________35 .by 3 ;Parachute______;_35
.by 0 ;_____________36 .by 2 ;StrongParachute;_36
.by 0 ;_____________37 .by 2 ;Mag_Deflector__;_37
.by 0 ;_____________38 .by 3 ;Shield_________;_38
.by 0 ;_____________39 .by 2 ;Heavy_Shield___;_39
.by 0 ;_____________40 .by 3 ;Force_Shield___;_40
.by 0 ;_____________41 .by 1 ;Auto_Defense___;_41
.by 0 ;_____________42 .by 2 ;Long_Barrel____;_42
.by 0 ;_____________43 .by 1 ;Nuclear_Winter_;_43
.by 0 ;_____________44 .by 2 ;Lazy_Boy_______;_44
.by 0 ;_____________45 .by 2 ;Lazy_Darwin____;_45
.by 0 ;_____________46 .by 2 ;Auto_Defense___;_46
.by 0 ;_____________47 .by 4 ;Spy_Hard_______;_47
.by 1 ;White_Flag___48
.by 3 ;Battery________
.by 2 ;Bal_Guidance___
.by 5 ;Horz_Guidance__
.by 5 ;Vert_Guidance__
.by 2 ;Lazy_Boy_______
.by 3 ;Parachute______
.by 2 ;StrongParachute
.by 2 ;Mag_Deflector__
.by 3 ;Shield_________
.by 3 ;Force_Shield___
.by 2 ;Heavy_Shield___
.by 2 ;Super_Mag______
.by 1 ;Auto_Defense___
.by 10 ;Fuel_Tank______
.by 1 ;Nuclear_Winter_
PurchaseMeTable ;weapons good to be purchased by the robot PurchaseMeTable ;weapons good to be purchased by the robot
;the comment is an index in the tables ;the comment is an index in the tables
dta 1 ;"Baby Missile " ; 0 ; "Baby Missile ","Missile ","Baby Nuke ","Nuke "
dta 1 ;"Missile " ; 1 ; "LeapFrog ","Funky Bomb ","MIRV ","Death's Head "
dta 1 ;"Baby Nuke " ; 2 .by %01111111
dta 1 ;"Nuke " ; 3 ; "Napalm ","Hot Napalm ","Tracer ","Smoke Tracer "
dta 1 ;"LeapFrog " ; 4 ; "Baby Roller ","Roller ","Heavy Roller ","Riot Charge "
dta 1 ;"Funky Bomb " ; 5 .by %11001110
dta 1 ;"MIRV " ; 6 ; "Riot Blast ","Riot Bomb ","Heavy Riot Bomb ","Baby Digger "
dta 1 ;"Death's Head " ; 7 ; "Digger ","Heavy Digger ","Baby Sandhog ","Sandhog "
dta 0 ;"Napalm " ; 8 .by %00000000
dta 0 ;"Hot Napalm " ; 9 ; "Heavy Sandhog ","Dirt Clod ","Dirt Ball ","Ton of Dirt "
dta 0 ;"Tracer " ; 10 ; "Liquid Dirt ","Dirt Charge ","Buy me! ","Laser "
dta 0 ;"Smoke Tracer " ; 11 .by %00000000
dta 1 ;"Baby Roller " ; 12 ; "White Flag ","Battery ","Hovercraft ","Parachute "
dta 1 ;"Roller " ; 13 ; "Strong Parachute","Mag Deflector ","Shield ","Heavy Shield "
dta 1 ;"Heavy Roller " ; 14 .by %01011111
dta 0 ;"Riot Charge " ; 15 ; "Force Shield ","Bouncy Castle ","Long Barrel ","Nuclear Winter "
dta 0 ;"Riot Blast " ; 16 ; "Lazy Boy ","Lazy Darwin ","Auto Defense ","Spy Hard "
dta 0 ;"Riot Bomb " ; 17 .by %11000000
dta 0 ;"Heavy Riot Bomb " ; 18
dta 0 ;"Baby Digger " ; 19 PurchaseMeTable2 ;weapons good to be purchased by the robot (Cyborg)
dta 0 ;"Digger " ; 20 ;the comment is an index in the tables
dta 0 ;"Heavy Digger " ; 21 ; "Baby Missile ","Missile ","Baby Nuke ","Nuke "
dta 0 ;"Baby Sandhog " ; 22 ; "LeapFrog ","Funky Bomb ","MIRV ","Death's Head "
dta 0 ;"Sandhog " ; 23 .by %01110000
dta 0 ;"Heavy Sandhog " ; 24 ; "Napalm ","Hot Napalm ","Tracer ","Smoke Tracer "
dta 0 ;"Dirt Clod " ; 25 ; "Baby Roller ","Roller ","Heavy Roller ","Riot Charge "
dta 0 ;"Dirt Ball " ; 26 .by %01000000
dta 0 ;"Ton of Dirt " ; 27 ; "Riot Blast ","Riot Bomb ","Heavy Riot Bomb ","Baby Digger "
dta 0 ;"Liquid Dirt " ; 28 ; "Digger ","Heavy Digger ","Baby Sandhog ","Sandhog "
dta 0 ;"Dirt Charge " ; 29 .by %00000000
dta 0 ;"Earth Disrupter " ; 30 ; "Heavy Sandhog ","Dirt Clod ","Dirt Ball ","Ton of Dirt "
dta 0 ;"Plasma Blast " ; 31 ; "Liquid Dirt ","Dirt Charge ","Buy me! ","Laser "
dta 1 ;"Laser " ; 32 .by %00000000
dta 0 ;"----------------" ; 33 ; "White Flag ","Battery ","Hovercraft ","Parachute "
dta 0 ;"----------------" ; 34 ; "Strong Parachute","Mag Deflector ","Shield ","Heavy Shield "
dta 0 ;"----------------" ; 35 .by %01001101
dta 0 ;"----------------" ; 36 ; "Force Shield ","Bouncy Castle ","Long Barrel ","Nuclear Winter "
dta 0 ;"----------------" ; 37 ; "Lazy Boy ","Lazy Darwin ","Auto Defense ","Spy Hard "
dta 0 ;"----------------" ; 38 .by %11000000
dta 0 ;"----------------" ; 39
dta 0 ;"----------------" ; 40
dta 0 ;"----------------" ; 41
dta 0 ;"----------------" ; 42
dta 0 ;"----------------" ; 43
dta 0 ;"----------------" ; 44
dta 0 ;"----------------" ; 45
dta 0 ;"----------------" ; 46
dta 0 ;"----------------" ; 47
dta 0 ;"White Flag " ; 48
dta 1 ;"Battery " ; 49
dta 0 ;"Bal Guidance " ; 50
dta 0 ;"Horz Guidance " ; 51
dta 0 ;"Vert Guidance " ; 52
dta 0 ;"Lazy Boy " ; 53
dta 1 ;"Parachute " ; 54
dta 1 ;"Strong Parachute" ; 55
dta 1 ;"Mag Deflector " ; 56
dta 1 ;"Shield " ; 57
dta 1 ;"Force Shield " ; 58
dta 1 ;"Heavy Shield " ; 59
dta 0 ;"Super Mag " ; 60
dta 1 ;"Auto Defense " ; 61
dta 0 ;"Fuel Tank " ; 62
dta 0 ;"Nuclear Winter " ; 63
;------------------------------------------------- ;-------------------------------------------------
; Screen codes of icons (chars) representing a given weapon ; Screen codes of icons (chars) representing a given weapon
WeaponSymbols WeaponSymbols
.by $40,$41,$42,$43,$44,$45,$46,$47 .by $40 ;ind_Baby_Missile___ ;_00
.by $48,$49,$4a,$4b,$4c,$4d,$4e,$4f .by $41 ;ind_Missile________ ;_01
.by $50,$51,$52,$53,$54,$55,$56,$57 .by $42 ;ind_Baby_Nuke______ ;_02
.by $58,$59,$5a,$5b,$60,$7b,$7c,$7d .by $43 ;ind_Nuke___________ ;_03
.by $20,$00,$00,$00,$00,$00,$00,$00 .by $44 ;ind_LeapFrog_______ ;_04
.by $00,$00,$00,$00,$00,$00,$00,$00 .by $45 ;ind_Funky_Bomb_____ ;_05
.by $5f,$1c,$03,$06,$1d,$0a,$1b,$1b ; defensives .by $46 ;ind_MIRV___________ ;_06
.by $1e,$3b,$3c,$3d,$3e,$3f,$5e,$7d .by $47 ;ind_Death_s_Head___ ;_07
.by $48 ;ind_Napalm_________ ;_08
.by $49 ;ind_Hot_Napalm_____ ;_09
.by $4a ;ind_Tracer_________ ;_10
.by $4b ;ind_Smoke_Tracer___ ;_11
.by $4c ;ind_Baby_Roller____ ;_12
.by $4d ;ind_Roller_________ ;_13
.by $4e ;ind_Heavy_Roller___ ;_14
.by $4f ;ind_Riot_Charge____ ;_15
.by $50 ;ind_Riot_Blast_____ ;_16
.by $51 ;ind_Riot_Bomb______ ;_17
.by $52 ;ind_Heavy_Riot_Bomb ;_18
.by $53 ;ind_Baby_Digger____ ;_19
.by $54 ;ind_Digger_________ ;_20
.by $55 ;ind_Heavy_Digger___ ;_21
.by $56 ;ind_Baby_Sandhog___ ;_22
.by $57 ;ind_Sandhog________ ;_23
.by $58 ;ind_Heavy_Sandhog__ ;_24
.by $59 ;ind_Dirt_Clod______ ;_25
.by $5a ;ind_Dirt_Ball______ ;_26
.by $5b ;ind_Ton_of_Dirt____ ;_27
.by $60 ;ind_Liquid_Dirt____ ;_28
.by $7b ;ind_Dirt_Charge____ ;_29
.by $1f ;ind_Buy_me_________ ;_30
.by $20 ;ind_Laser__________ ;_31
.by $5f ;ind_White_Flag_____ ;_32
.by $1c ;ind_Battery________ ;_33
.by $06 ;ind_Floating_Tank__ ;_34
.by $1b ;ind_Parachute______ ;_35
.by $1b ;ind_StrongParachute ;_36
.by $1e ;ind_Mag_Deflector__ ;_37
.by $3b ;ind_Shield_________ ;_38
.by $3d ;ind_Heavy_Shield___ ;_39
.by $3c ;ind_Force_Shield___ ;_40
.by $3f ;ind_Bouncy_Castle__ ;_41
.by $1d ;ind_Long_Barrel____ ;_42
.by $7d ;ind_Nuclear_Winter_ ;_43
.by $02 ;ind_Lazy_Boy_______ ;_44
.by $03 ;ind_Lazy_Darwin____ ;_45
.by $5e ;ind_Auto_Defense___ ;_46
.by $7c ;ind_Spy_Hard_______ ;_47
; Names of weapons (16 chars long) ; Names of weapons (16 chars long)
NamesOfWeapons ;the comment is an index in the tables NamesOfWeapons ;the comment is an index in the tables
@@ -604,83 +512,149 @@ NamesOfWeapons ;the comment is an index in the tables
dta d"Ton of Dirt " ; 27 dta d"Ton of Dirt " ; 27
dta d"Liquid Dirt " ; 28 dta d"Liquid Dirt " ; 28
dta d"Dirt Charge " ; 29 dta d"Dirt Charge " ; 29
dta d"Earth Disrupter " ; 30 dta d"Best F...g Gifts" ; 30
dta d"Plasma Blast " ; 31 dta d"Laser " ; 31
dta d"Laser " ; 32 ;------defensives
dta d"----------------" ; 33 dta d"White Flag " ; 32
dta d"----------------" ; 34 dta d"Battery " ; 33
dta d"----------------" ; 35 dta d"Hovercraft " ; 34
dta d"----------------" ; 36 dta d"Parachute " ; 35 - no energy
dta d"----------------" ; 37 dta d"Strong Parachute" ; 36 - with energy (earlier Battery)
dta d"----------------" ; 38 dta d"Mag Deflector " ; 37 - with shield and energy
dta d"----------------" ; 39 dta d"Shield " ; 38 - shield for one shot - no energy
dta d"----------------" ; 40 dta d"Heavy Shield " ; 39 - shield with energy
dta d"----------------" ; 41 dta d"Force Shield " ; 40 - shield with energy and parachute
dta d"----------------" ; 42 dta d"Bouncy Castle " ; 41 - with shield and energy
dta d"----------------" ; 43 dta d"Long Schlong " ; 42
dta d"----------------" ; 44 dta d"Nuclear Winter " ; 43
dta d"----------------" ; 45 dta d"Lazy Boy " ; 44
dta d"----------------" ; 46 dta d"Lazy Darwin " ; 45
dta d" " ; 47 ; special (no weapon) name to simplify display dta d"Auto Defense " ; 46
dta d"Spy Hard " ; 47
dta d"White Flag " ; 48 ($30) DefensiveEnergy = *-(last_offensive_____ - first_offensive____ +1) ; to fake the table for ALL weapons
dta d"Battery " ; 49
dta d"Bal Guidance " ; 50
dta d"Horz Guidance " ; 51
dta d"Vert Guidance " ; 52
dta d"Lazy Boy " ; 53
dta d"Parachute " ; 54 - no energy
dta d"Strong Parachute" ; 55 - with energy (earlier Battery)
dta d"Mag Deflector " ; 56 - with shield and energy
dta d"Shield " ; 57 - shield for one shot - no energy
dta d"Force Shield " ; 58 - shield with energy and parachute
dta d"Heavy Shield " ; 59 - shield with energy
dta d"Super Mag " ; 60
dta d"Auto Defense " ; 61 - with shield and energy
dta d"Fuel Tank " ; 62
dta d"Nuclear Winter " ; 63
DefensiveEnergy = * - 48
.by 00 ; White Flag .by 00 ; White Flag
.by 00 ; Heat Guidance .by 00 ; Heat Guidance
.by 00 ; Bal Guidance .by 98 ; Let's go!
.by 00 ; Horz Guidance
.by 00 ; Vert Guidance
.by 00 ; Lazy Boy
.by 00 ; Parachute .by 00 ; Parachute
.by 99 ; Strong Parachute .by 99 ; Strong Parachute
.by 99 ; Mag Deflector .by 99 ; Mag Deflector
.by 00 ; Shield .by 00 ; Shield
.by 99 ; Force Shield
.by 99 ; Heavy Shield .by 99 ; Heavy Shield
.by 00 ; Super Mag .by 99 ; Force Shield
.by 99 ; Auto Defense .by 99 ; Bouncy Castle
.by 00 ; Fuel Tank .by 00 ; Long Barrel
.by 00 ; Nuclear Winter .by 00 ; Nuclear Winter
weaponsOfDeath .by 00 ; Lazy Boy
.by 00 ; Lazy Darwin
.by 00 ; Auto Defense
.by 00 ; Spy Hard
weaponsOfDeath ; weapons used in tank death animations
dta 1,2,3,7,17,18,19,20,21,22,23,24,25,26,27 dta 1,2,3,7,17,18,19,20,21,22,23,24,25,26,27
weaponsOfDeathEnd weaponsOfDeathEnd
joyToKeyTable joyToKeyTable
; .by 00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15 .by $ff ;00
.by $ff,$ff,$ff,$ff,$ff,$ff,$ff,$07,$ff,$ff,$ff,$06,$ff,$0f,$0e,$ff .by $ff ;01
.by $ff ;02
.by $ff ;03
.by $ff ;04
.by $ff ;05
.by $ff ;06
.by @kbcode._right ;07
.by $ff ;08
.by $ff ;09
.by $ff ;0a
.by @kbcode._left ;0b
.by $ff ;0c
.by @kbcode._down ;0d
.by @kbcode._up ;0e
.by $ff ;0f
;----------------------------------- ;-----------------------------------
keycodes ;tables for converting KeyCode to Screen Code (38 -1 characters) keycodes ;tables for converting KeyCode to Screen Code (38 -1 characters)
.by $3f,$15,$12,$3a,$2a,$38,$3d,$39 .by $3f,$15,$12,$3a,$2a,$38,$3d,$39
.by $0d,$01,$05,$00,$25,$23,$08,$0a .by $0d,$01,$05,$00,$25,$23,$08,$0a
.by $2f,$28,$3e,$2d,$0b,$10,$2e,$16 .by $2f,$28,$3e,$2d,$0b,$10,$2e,$16
.by $2b,$17,$1f,$1e,$1a,$18,$1d,$1b .by $2b,$17
.by $33,$35,$30,$32,$22 ;,$0e <-- hyphen removed from the table, sorry hyphen lovers .by $32,$1f,$1e,$1a,$18,$1d,$1b
.by $33,$35,$30,$22,$21 ;,$0e <-- hyphen removed from the table, sorry hyphen lovers
keycodesEnd keycodesEnd
scrcodes scrcodes
dta d"abcdefgh" dta d"abcdefgh"
dta d"ijklmnop" dta d"ijklmnop"
dta d"qrstuvwx" dta d"qrstuvwx"
dta d"yz123456" dta d"yz"
dta d"7890." ; "-" zero
digits ; decimal constans
dta d"0123456"
dta d"789. " ; "-"
;-------decimal constans
;zero
;digits dta d"0123456789"
;----------------------------------- ;-----------------------------------
gameOverSpritesTop gameOverSpritesTop
; end of the Gover sprites by number of players ; end of the Gover sprites by number of players
; 1 2 3 4 5 6 ; 1 2 3 4 5 6
.by 130,130,136,142,148,154 .by 130+7,130+7,136+7,142+7,148+7,154+7
;------credits
CreditsStart
dta d" "*
dta d"You were playin",d"g"*
dta d"Scorc",d"h"*
dta d"Warsaw, Miam",d"i"*
dta d"2000-202",d"3"*
dta d" "*
dta d"Programmin",d"g"*
dta d"Tomasz 'Pecus' Peck",d"o"*
dta d"Pawel 'pirx' Kalinowsk",d"i"*
dta d" "*
dta d"SFX, Music and Suppor",d"t"*
dta d"Michal 'Miker' Szpilowsk",d"i"*
dta d" "*
.IF target != 5200
dta d"Additional Musi",d"c"*
dta d"Mario 'Emkay' Kri",d"x"*
dta d" "*
.ENDIF
dta d"Code Optimizatio",d"n"*
dta d"Piotr '0xF' Fusi",d"k"*
dta d" "*
dta d"Ar",d"t"*
dta d"Adam Wachowsk",d"i"*
.IF target != 5200
dta d"Krzysztof 'Kaz' Ziembi",d"k"*
.ENDIF
dta d" "*
dta d"Ideas, help and Q",d"A"*
dta d"Bocianu, Probabilitydragon, EnderDude",d","*
dta d"Beeblebrox, KrzysRog, lopezpb, Dracon",d","*
dta d"brad-colbert, archon800, nowy80",d","*
dta d"Shaggy the Atarian, RetroBorsuk, ZPH"
.IF target = 5200
dta d","*
dta d"x-usr(1536), Aking, JAC!, phaeron",d","*
dta d"RB520",d"0"*
.ELSE
dta d" "*
.ENDIF
dta d" "*
dta d"Additional testin",d"g"*
dta d"Arek and Alex Peck",d"o"*
.IF target != 5200
dta d" "*
dta d"Stay tuned for the FujiNet version",d"!"*
.ENDIF
dta d" "*
CreditsEnd
.IF target = 5200
CreditsLines=38
.ELSE
CreditsLines=42 ; 34 in reality. add 7?
.ENDIF
.IF target = 5200
; Atari 5200 splash
NewSplashText=*
dta d"copyright 2023 atari"
.ENDIF
.endif .endif
+25
View File
@@ -0,0 +1,25 @@
; @com.wudsn.ide.asm.mainsourcefile=scorch.asm
.IF *>0 ;this is a trick that prevents compiling this file alone
;TanksPMOrder .BYTE 4,3,1,5,0,2 ; 0-3 = P0-P3 , 4 = M0+M1 , 5 = M2+M3
TanksPMOrder .BYTE 4,3,1,5,0,2 ; 0-3 = P0-P3 , 4 = M0+M1 , 5 = M2+M3
dliColorsBack
:10 .by $02,$00
dliColorsFore
.by $0a ; one mountains color
; .by $0e,$0c,$0c,$0b,$0b,$0a,$0a,$09,$09,$08 ; mountains colors array
; .by $08,$08,$07,$07,$07,$06,$06,$06,$06,$05
.by $0e,$0c,$0c,$0c,$0c,$0a,$0a,$0a,$0a,$08 ; mountains colors array new
.by $08,$08,$08,$06,$06,$06,$06,$06,$06,$04
CashOptionL ;(one zero less than on the screen)
.by 0,<200,<800,<1200,<2000
CashOptionH
.by 0,>200,>800,>1200,>2000
GravityTable .by 10,20,25,30,40
MaxWindTable .by 5,20,40,70,99
RoundsTable .by 10,20,30,40,50
AIForceTable .wo 375,470,630,720,820 ; starting shoot forces for different gravity
flyDelayTable .by 255,150,75,35,1
seppukuTable .by 255, 45,25,15,9
.endif
+117 -105
View File
@@ -3,80 +3,95 @@
screenheight = 200 screenheight = 200
screenBytes = 40 screenBytes = 40
screenwidth = screenBytes*8 ; Max screenwidth = 512!!! screenwidth = screenBytes*8 ; Max screenwidth = 512!!!
margin = 48 ;mountain drawing Y variable margin
display = $1010 ;screen takes $2K due to clearing routine
MaxPlayers = 6
maxOptions = 7 ;number of all options
PMOffset = $23 ; P/M to graphics offset
TankWidth = 8
;----------------------------------------------
; Player/missile memory
PMGraph = $1800 ; real PM start = PMGraph + $0300
; Generated tables
display = $2010 ;screen takes $1f68 because it has screenHeight+1 lines because of out of screen tracer(?)
;----------------------------------------------
margin = 40 ;mountain drawing Y variable margin
MaxPlayers = 6
maxOptions = 9 ;number of all options
PMOffsetX = $2C ; P/M to graphics offset
PMOffsetY = $2A ; P/M to graphics offset
napalmRadius = 10
StandardBarrel = 6 ; standard tank barrel length
LongBarrel = 20 ; long barrel length
TextBackgroundColor = $02 ; REAL constans - use: LDA #TextBackgroundColor
TextForegroundColor = $0A
space = 0 ; space in screencodes
KeyRepeatSpeed = 10 ; (max 127 !!!)
;character codes for symbols (tank, parachute, etc. )
char_parachute_______ = $02
char_flag____________ = $1e
char_flame___________ = $14
char_clear_flame_____ = $1c
char_digger__________ = $04
char_sandhog_________ = $0c
char_sandhog_offset = char_sandhog_________ - char_digger__________
char_tank1___________ = $20
char_tank2___________ = $24
char_tank3___________ = $2c
char_tank4___________ = $28 ; robotank shape
;Weapon prices (*10 on screen) ;Weapon prices (*10 on screen)
price_Baby_Missile___ = 0 ;_0 price_Baby_Missile___ = 0 ;_00
price_Missile________ = 96 ;_1 price_Missile________ = 96 ;_01
price_Baby_Nuke______ = 111 ;_2 price_Baby_Nuke______ = 111 ;_02
price_Nuke___________ = 144 ;_3 price_Nuke___________ = 144 ;_03
price_LeapFrog_______ = 192 ;_4 price_LeapFrog_______ = 192 ;_04
price_Funky_Bomb_____ = 293 ;_5 price_Funky_Bomb_____ = 293 ;_05
price_MIRV___________ = 456 ;_6 price_MIRV___________ = 456 ;_06
price_Death_s_Head___ = 337 ;_7 price_Death_s_Head___ = 337 ;_07
price_Napalm_________ = $ffff ;496 ;_8 price_Napalm_________ = 125 ;_08
price_Hot_Napalm_____ = $ffff ;511 ;_9 price_Hot_Napalm_____ = 162 ;_09
price_Tracer_________ = 102 ;_10 price_Tracer_________ = 102 ;_10
price_Smoke_Tracer___ = 291 ;_11 price_Smoke_Tracer___ = 291 ;_11
price_Baby_Roller____ = 211 ;_12 price_Baby_Roller____ = 211 ;_12
price_Roller_________ = 244 ;_13 price_Roller_________ = 244 ;_13
price_Heavy_Roller___ = 326 ;_14 price_Heavy_Roller___ = 326 ;_14
price_Riot_Charge____ = 230 ;_15 price_Riot_Charge____ = 230 ;_15
price_Riot_Blast_____ = 241 ;_16 price_Riot_Blast_____ = 241 ;_16
price_Riot_Bomb______ = 259 ;_17 price_Riot_Bomb______ = 259 ;_17
price_Heavy_Riot_Bomb = 272 ;_18 price_Heavy_Riot_Bomb = 272 ;_18
price_Baby_Digger____ = 136 ;_19 price_Baby_Digger____ = 136 ;_19
price_Digger_________ = 176 ;_20 price_Digger_________ = 176 ;_20
price_Heavy_Digger___ = 207 ;_21 price_Heavy_Digger___ = 207 ;_21
price_Baby_Sandhog___ = 158 ;_22 price_Baby_Sandhog___ = 158 ;_22
price_Sandhog________ = 191 ;_23 price_Sandhog________ = 191 ;_23
price_Heavy_Sandhog__ = 223 ;_24 price_Heavy_Sandhog__ = 223 ;_24
price_Dirt_Clod______ = 104 ;_25 price_Dirt_Clod______ = 104 ;_25
price_Dirt_Ball______ = 130 ;_26 price_Dirt_Ball______ = 130 ;_26
price_Ton_of_Dirt____ = 171 ;_27 price_Ton_of_Dirt____ = 171 ;_27
price_Liquid_Dirt____ = 330 ;_28 price_Liquid_Dirt____ = 330 ;_28
price_Dirt_Charge____ = 343 ;_29 price_Dirt_Charge____ = 343 ;_29
price_Earth_Disrupter = $ffff ;430 ;_30 price_Buy_me_________ = 170 ;_30
price_Plasma_Blast___ = $ffff ;274 ;_31 price_Laser__________ = 277 ;_31
price_Laser__________ = 277 ;_32 price_White_Flag_____ = $0 ;_32
price______________33 = 0 price_Battery________ = 300 ;_33
price______________34 = 0 price_Hovercraft_____ = 352 ;_34
price______________35 = 0 price_Parachute______ = 234 ;_35
price______________36 = 0 price_StrongParachute = 1000 ;_36
price______________37 = 0 price_Mag_Deflector__ = 745 ;_37
price______________38 = 0 price_Shield_________ = 224 ;_38
price______________39 = 0 price_Heavy_Shield___ = 628 ;_39
price______________40 = 0 price_Force_Shield___ = 1100 ;_40
price______________41 = 0 price_Bouncy_Castle__ = 512 ;_41
price______________42 = 0 price_Long_Barrel____ = 2100 ;_42
price______________43 = 0 price_Nuclear_Winter_ = 1000 ;_43
price______________44 = 0 price_Lazy_Boy_______ = 500 ;_44
price______________45 = 0 price_Lazy_Darwin____ = 730 ;_45
price______________46 = 0 price_Auto_Defense___ = 250 ;_46
price______________47 = 0 price_Spy_Hard_______ = 83 ;_47
price_White_Flag_____ = $0 ;_48_($30)
price_Battery________ = 300 ;_49
price_Bal_Guidance___ = $ffff ;_50
price_Horz_Guidance__ = $ffff ;_51
price_Vert_Guidance__ = $ffff ;_52
price_Lazy_Boy_______ = $ffff ;_53
price_Parachute______ = 234 ;_54
price_StrongParachute = 1000 ;_55
price_Mag_Deflector__ = 745 ;_56
price_Shield_________ = 224 ;_57
price_Force_Shield___ = 1100 ;_58
price_Heavy_Shield___ = 628 ;_59
price_Super_Mag______ = $ffff ;_60
price_Auto_Defense___ = 512 ;_61
price_Fuel_Tank______ = $ffff ;_62
price_Nuclear_Winter_ = 1000 ;_63
;Weapon indexes (numbers) ;Weapon indexes (numbers)
ind_Baby_Missile___ = 0 ind_Baby_Missile___ = 0
first_offensive____ = ind_Baby_Missile___
ind_Missile________ = 1 ind_Missile________ = 1
ind_Baby_Nuke______ = 2 ind_Baby_Nuke______ = 2
ind_Nuke___________ = 3 ind_Nuke___________ = 3
@@ -106,40 +121,30 @@ ind_Dirt_Ball______ = 26
ind_Ton_of_Dirt____ = 27 ind_Ton_of_Dirt____ = 27
ind_Liquid_Dirt____ = 28 ind_Liquid_Dirt____ = 28
ind_Dirt_Charge____ = 29 ind_Dirt_Charge____ = 29
ind_Earth_Disrupter = 30 ind_Buy_me_________ = 30
ind_Plasma_Blast___ = 31 ind_Laser__________ = 31
ind_Laser__________ = 32 last_offensive_____ = ind_Laser__________
ind______________33 = 0 ind_White_Flag_____ = 32
ind______________34 = 0 first_defensive____ = ind_White_Flag_____
ind______________35 = 0 ind_Battery________ = 33
ind______________36 = 0 ind_Hovercraft_____ = 34
ind______________37 = 0 ind_Parachute______ = 35
ind______________38 = 0 ind_StrongParachute = 36
ind______________39 = 0 ind_Mag_Deflector__ = 37
ind______________40 = 0 ind_Shield_________ = 38
ind______________41 = 0 ind_Heavy_Shield___ = 39
ind______________42 = 0 ind_Force_Shield___ = 40
ind______________43 = 0 ind_Bouncy_Castle__ = 41
ind______________44 = 0 ind_Long_Barrel____ = 42
ind______________45 = 0 ind_Nuclear_Winter_ = 43
ind______________46 = 0 ind_Lazy_Boy_______ = 44
ind______________47 = 0 ind_Lazy_Darwin____ = 45
ind_White_Flag_____ = 48 ind_Auto_Defense___ = 46
ind_Battery________ = 49 ind_Spy_Hard_______ = 47
ind_Bal_Guidance___ = 50 last_defensive_____ = ind_Spy_Hard_______
ind_Horz_Guidance__ = 51 last_real_defensive = ind_Bouncy_Castle__
ind_Vert_Guidance__ = 52 number_of_offensives = last_offensive_____ - first_offensive____+1
ind_Lazy_Boy_______ = 53 number_of_defensives = (last_defensive_____ - first_defensive____+1)
ind_Parachute______ = 54
ind_StrongParachute = 55
ind_Mag_Deflector__ = 56
ind_Shield_________ = 57
ind_Force_Shield___ = 58
ind_Heavy_Shield___ = 59
ind_Super_Mag______ = 60
ind_Auto_Defense___ = 61
ind_Fuel_Tank______ = 62
ind_Nuclear_Winter_ = 63
;-------------------------------- ;--------------------------------
; names of RMT instruments (sfx) ; names of RMT instruments (sfx)
;-------------------------------- ;--------------------------------
@@ -173,10 +178,17 @@ sfx_seppuku = $1a ;1
sfx_liquid_dirt = $1b ;2 sfx_liquid_dirt = $1b ;2
sfx_battery = $1c ;3 sfx_battery = $1c ;3
sfx_white_flag = $1d ;4 sfx_white_flag = $1d ;4
sfx_long_barrel = $1e
sfx_tank_move = $1f
sfx_auto_defense= $2b
sfx_lazy_boys = $2c
;-------------------------------- ;--------------------------------
; RMT songs (lines) ; RMT songs (lines)
;-------------------------------- ;--------------------------------
song_silencio = $00 song_silencio = $00
song_end_round = $02 song_main_menu = $02
song_ingame = $06 song_ingame = $06
song_game_over = $0b song_round_over = $0b
song_ending_looped = $0e
song_supermarket = $1b
song_inventory = $1d
-184
View File
@@ -1,184 +0,0 @@
; @com.wudsn.ide.asm.mainsourcefile=scorch.asm
.IF *>0 ;this is a trick that prevents compiling this file alone
;-----------------------------------------------------
;-------------display-lists---------------------------
;-----------------------------------------------------
PurchaseDL
.byte $70,$70,$20
.byte $42+$80
.word textbuffer2
.byte $02,$10,$42
MoreUpdl
.word EmptyLine
.byte 0,$42
WeaponsListDL
.word ListOfWeapons
:15 .byte 0,2
.byte 0, $42
MoreDownDL
.word EmptyLine
.byte $10,$42
.word WeaponsDescription
.byte 2
.byte $41
.word PurchaseDL
;------------------------
OptionsDL
:5 .byte $70
.byte $42
.word OptionsScreen
.byte $30,$02,$02,$70
:maxOptions .by $02,$10
.byte $41
.word OptionsDL
;------------------------
;Enter names of tanks DL
NameDL
:5 .byte $70
.byte $42
.word NameScreen
.byte $30
.byte $02,$30+$80,$02
.byte $10,$02,$02,$02,$30,$02,$02
.byte $41
.word NameDL
; -------------------------------------------------
dl ; MAIN game display list
.byte 0
.byte $42
.word textbuffer
.byte $02, $02 +$80 ;DLI
.byte $10 ; 2 blank lines
.byte $4f
.word display ; 1 line
:76 .by $0f ;76
.by $0f+$80 ; DLI (black bar) ;2
.by $0f+$80 ; DLI
:13 .by $0f ;13
.by $0f+$80 ; DLI (black bar) ;2
.by $0f+$80 ; DLI
:8 .by $0f ;8
.by $4f ;1
.wo display+$0ff0
:2 .by $0f ;2
.by $0f+$80 ; DLI (black bar) ;2
.by $0f+$80 ; DLI
:9 .by $0f ;9
.by $0f+$80 ; DLI (black bar) ;2
.by $0f+$80 ; DLI
:8 .by $0f ;8
.by $0f+$80 ; DLI (black bar) ;2
.by $0f+$80 ; DLI
:7 .by $0f ;7
.by $0f+$80 ; DLI (black bar) ;2
.by $0f+$80 ; DLI
:6 .by $0f ;6
.by $0f+$80 ; DLI (black bar) ;2
.by $0f+$80 ; DLI
:5 .by $0f ;5
.by $0f+$80 ; DLI (black bar) ;2
.by $0f+$80 ; DLI
:4 .by $0f ;4
.by $0f+$80 ; DLI (black bar) ;2
.by $0f+$80 ; DLI
:3 .by $0f ;3
.by $0f+$80 ; DLI (black to end);1
:38 .byte $0f ;35 ..... = 200
.by $4f
.wo LastLine ; additional line of ground
.byte $41
.word dl
;-----------------------------------------------
;Screen displays go first to avoid crossing 4kb barrier
;-----------------------------------------------
OptionsScreen
dta d"Welcome to Scorch ver. "
build ; 3 bytes from scorch.asm (fancy method) :)
dta d" (un)2000-2022"
dta d" Please select option with cursor keys "
dta d" and press (Return) to proceed "
OptionsHere
; 0123456789012345678901234567890123456789
dta d"Players : 2 3 4 5 6 "
dta d"Cash : none 2K 8K 12K 20K "
dta d"Gravity : 0.2G 0.5G 1G 2G 4G "
dta d"Wind : 1B 3B 5B 7B 9B "
dta d"Rounds : 10 20 30 40 50 "
dta d"Missiles : slug slow norm fast hare "
dta d"Seppuku : nevr rare norm oftn alws "
OptionsScreenEnd
;-----------------------------------------------
MoreUp
dta d" "
dta 92,92,92
dta d" more "
dta 92,92,92
dta d" "
MoreDown
dta d" "
dta 93,93,93
dta d" more "
dta 93,93,93
dta d" "
ListOfWeapons
:36 dta d" "
ListOfWeapons1End
ListOfDefensiveWeapons
:16 dta d" "
ListOfDefensiveWeaponsEnd ;constant useful when clearing
WeaponsDescription
dta d" "
dta d"Tab"*
dta d" - Defensive/Offensive weapon "
dta d" "
dta d"Space"*
dta d" - "
purchaseActivate
dta d"Purchase "
dta d"Return"*
dta d" - Finish "
EmptyLine
dta d" "
LastLine
:40 dta $00
; -------------------------------------------------
.ALIGN $1000 ; WARNING!!!! 4KiB barrier crossing here, might need reassignment!!!
NameScreen
dta d" Enter names of players "
dta d" Tank 01 Name:"
NameAdr
dta d" "
dta d" Human/Atari (difficulty level) "
dta d" "
NamesOfLevels
dta d" HUMAN Moron Shooter "
dta d" Poolshark Tosser Chooser "
dta d" Spoiler Cyborg Unknown "
dta d" "
dta d"Tab"*
dta d" - Player/Difficulty level "
dta d" "
dta d"Return"*
dta d" - Proceed "
;---------------------------------------------------
textbuffer
; 0123456789012345678901234567890123456789
dta d"Player: "
dta d"Energy: Angle: Force: "
dta d"Round: Wind: "
textbuffer2
dta d"Player: Cash: 0 " ; ZERO TO MAKE YOU RICHER ON THE SCREEN
dta d"----------------------------------------"
;---------------------------------------------------
activateText
dta d"Activate"
activateTextEnd
purchaseText
dta d"Purchase"
purchaseTextEnd
.endif
+45
View File
@@ -0,0 +1,45 @@
; @com.wudsn.ide.asm.mainsourcefile=scorch.asm
.IF *>0 ;this is a trick that prevents compiling this file alone
;-----------------------------------------------
; start of "variables" (RAM)
;-----------------------------------------------
OptionsHere
; 0123456789012345678901234567890123456789
dta d"Players : 2 3 4 5 6 "
dta d"Cash : none 2K 8K 12K 20K "
dta d"Gravity : 0.2G 0.5G 1G 2G 4G "
dta d"Wind : 1B 3B 5B 7B 9B "
dta d"Rounds : 10 20 30 40 50 "
dta d"Missiles : slug slow norm fast hare "
dta d"Seppuku : nevr rare norm oftn alws "
dta d"Mountains: NL BE CZ CH NP "
dta d"Walls : none wrap bump boxy rand "
;; 01234567890123456789012345678901
; dta d"Players: 2 3 4 5 6 "
; dta d"Cash :none 2K 8K 12K 20K"
; dta d"Gravity:0.2G 0.5G 1G 2G 4G "
; dta d"Wind : 1B 3B 5B 7B 9B "
; dta d"Rounds : 10 20 30 40 50 "
; dta d"Missile:slug slow norm fast hare"
; dta d"Seppuku:nevr rare norm oftn alws"
; dta d"Hills : NL BE CZ CH NP "
; dta d"Walls :none wrap bump boxy rand"
OptionsScreenEnd
;-----------------------------------------------
NameScreen2
dta d" Tank 1 *1 +1 Name:"
NameAdr
dta d" "
NameScreen4
dta d" "
NamesOfLevels
dta d" HUMAN Moron Shooter "
dta d" Poolshark Tosser Chooser "
dta d" Spoiler Cyborg Unknown "
;------------------------
; end of "variables" (RAM)
;------------------------
.endif
+46
View File
@@ -0,0 +1,46 @@
; @com.wudsn.ide.asm.mainsourcefile=scorch.asm
.IF *>0 ;this is a trick that prevents compiling this file alone
;---------------------------------------------------
purchaseTextBuffer
dta d"Player: * Cash: 0" ; ZERO TO MAKE YOU RICHER ON THE SCREEN
; DLs fragments (modified by game code)
; all Purchase DL :)
PurchaseDL
.byte $70
.byte $47
DLPurTitleAddr
.word PurchaseTitle
.byte $50
.byte $42
.word purchaseTextBuffer
.byte $00+$80
.byte $20+$80,$10+$80,$42
MoreUpdl
.word EmptyLine
.byte $10+$80,$42
WeaponsListDL
.word ListOfWeapons
:15 .byte 0,2
.byte $10+$80, $42
MoreDownDL
.word EmptyLine
.byte $40+$80,$42
.word WeaponsDescription
.byte $0,$42
PurActDescAddr
.word PurchaseDescription
.byte $41
.word PurchaseDL
;------------------------
DLCreditsFragm
.byte $60+$80
.byte $42+$20 ; VSCRL
DLCreditsAddr
.word Credits
:6 .byte $02+$20
.byte $02
.byte $41
.word GameOverDL
.endif
+253
View File
@@ -0,0 +1,253 @@
; @com.wudsn.ide.asm.mainsourcefile=scorch.asm
.IF *>0 ;this is a trick that prevents compiling this file alone
;------------------------
; start of "constants" (ROM)
;-----------------------------------------------
;Screen displays go first to avoid crossing 4kb barrier
;-----------------------------------------------
OptionsScreen
dta d"Welcome to Scorch v. "
build ; 4 bytes from scorch.asm (fancy method) :)
dta d" (un)2000-2023"
.IF TARGET = 800
dta d" Please select option with cursor keys "
dta d" and press (Return) to proceed "
.ELIF TARGET = 5200
dta d" Please select option with joystick one "
dta d" and press FIRE to proceed "
.ENDIF
; 0123456789012345678901234567890123456789
;-----------------------------------------------
NameScreen
.IF TARGET = 800
dta d" Enter names of players "
.ELIF TARGET = 5200
dta d"Hold "
dta d "FIRE"*
dta d " to enter player names "
.ENDIF
NameScreen3
dta d" Human/Atari (difficulty level) "
NameScreen5
.IF TARGET = 800
dta d" "
dta d"TAB"*
dta d" - Port nr "
dta d"Joy"*
dta d" - Difficulty "
dta d" "
dta d"Return"*
dta d" - Proceed "
.ELIF TARGET = 5200
dta d" "
dta d"(5)"*
dta d" - Port nr "
dta d"Joy"*
dta d" - Difficulty "
dta d" "
dta d"FIRE"*
dta d" - Proceed "
.ENDIF
;-----------------------------------------------
MoreUp
dta d" "
dta 92,92,92
dta d" more "
dta 92,92,92
dta d" "
MoreDown
dta d" "
dta 93,93,93
dta d" more "
dta 93,93,93
dta d" "
WeaponsDescription
; 0123456789012345678901234567890123456789
.IF TARGET = 800
dta d"Tab"*
dta d ": Defensive/Offensive weapon "
.ELIF TARGET = 5200
dta d"Left"*
dta d ": Defensive/Offensive weapon"
.ENDIF
PurchaseDescription
; 0123456789012345678901234567890123456789
.IF TARGET = 800
dta d"Space"*
dta d": Purchase "
dta d"Return"*
dta d": Finish "
.ELIF TARGET = 5200
dta d"Right"*
dta d": Purchase "
dta d"FIRE"*
dta d": Finish "
.ENDIF
ActivateDescription
; 0123456789012345678901234567890123456789
.IF TARGET = 800
dta d"Space"*
dta d": Activate "
dta d"Return"*
dta d": Finish "
.ELIF TARGET = 5200
dta d"Right"*
dta d": Activate "
dta d"FIRE"*
dta d": Finish "
.ENDIF
EmptyLine
dta d" "
;---------------------------------------------------
OptionsTitle
.IF TARGET = 800
dta d" scorch "*
.ELIF TARGET = 5200
dta d" scorch supersystem "*
; dta d" scorch "*
; dta d"5"
; dta d"k"*
; dta d"2"
; dta d" "*
.ENDIF
DifficultyTitle
dta d" difficulty "*
PurchaseTitle
dta d"purchase weapons"
InventoryTitle
dta d"activate weapons"*
GameOverTitle
dta d" game over "*
GameOverTitle2
dta d" Player Points Hits Earned Money "
;-----------------------------------------------------
;-------------display-lists---------------------------
;-----------------------------------------------------
dl ; MAIN game display list
.byte $70
.byte $42
.word statusBuffer
.byte $02, $02
.byte $10+$80 ; 2 blank lines + DLI
.byte $4f
.word display ; 1 line
:76 .by $0f ;76
.by $0f+$80,$0f ; DLI (black bar) ;3
.by $0f+$80 ; DLI
:12 .by $0f ;12
.by $0f+$80,$0f ; DLI (black bar) ;3
.by $0f+$80 ; DLI
:7 .by $0f ;7
.by $4f ;1
.wo display+$0ff0
:2 .by $0f ;2
.by $0f+$80,$0f ; DLI (black bar) ;3
.by $0f+$80 ; DLI
:8 .by $0f ;8
.by $0f+$80,$0f ; DLI (black bar) ;3
.by $0f+$80 ; DLI
:7 .by $0f ;7
.by $0f+$80,$0f ; DLI (black bar) ;3
.by $0f+$80 ; DLI
:6 .by $0f ;6
.by $0f+$80,$0f ; DLI (black bar) ;3
.by $0f+$80 ; DLI
:5 .by $0f ;5
.by $0f+$80,$0f ; DLI (black bar) ;3
.by $0f+$80 ; DLI
:4 .by $0f ;4
.by $0f+$80,$0f ; DLI (black bar) ;3
.by $0f+$80 ; DLI
:3 .by $0f ;3
.by $0f+$80,$0f ; DLI (black bar) ;3
.by $0f+$80 ; DLI
:2 .by $0f ;2
.by $0f+$80 ; DLI (black to end);1
:38 .byte $0f ;35 ..... = 200
.by $4f
.wo EmptyLine ; additional line of ground
.byte $41
.word dl
;-----------------------------------------------
OptionsDL
.byte $70
.byte $47
.word OptionsTitle
.byte $70,$70
.byte $42
.word OptionsScreen
.byte $30,$02,$02,$70
.byte $42
.word OptionsHere
.byte $10
:maxOptions-1 .by $02,$10
:(9-maxOptions) .by $70,$10
.byte $80
.byte $60 ; to match moved sprites
.byte $4f
.word (display+140*40)
:21 .by $0f ;76
.byte $41
.word OptionsDL
;------------------------
;Enter names of tanks DL
NameDL
.byte $70
.byte $47
.word DifficultyTitle
.byte $70,$70 ; 16 empty lines
.byte $42
.word NameScreen
.byte $30 ; 4 empty lines
.byte $42
.word NameScreen2
.byte $30+$80 ; 4 empty lines + DLI
.byte $42
.word NameScreen3
.byte $10 ; 2 empty lines
.byte $42
.word NameScreen4
.byte $02,$02
.byte $30 ; 4 empty lines
.byte $42
.word NameScreen5
.byte $02
.byte $41
.word NameDL
; -------------------------------------------------
GameOverResults = display+$0ff0 ; reuse after game
Credits = GameOverResults +(6*40)
CreditsLastLine = Credits + (CreditsLines*40)
GameOverDL
.byte $70,$40
.byte $47 ; 16 gr8 lines
.word GameOverTitle
; .byte $60 ; 7 lines down to match new sprite position
.byte $4f ; 1 line
.word display+(40*72)
:28 .byte $0f ; 28 lines
.byte $0f+$80
.byte $4f ; 1 line
.word display+(40*(32-7)) ;7 lines up to match new sprite position
:30 .byte $0f ; 30 lines
.byte $0f+$80 ; 1 line
.byte $4f ; 1 line
.word display+(40*72)
:7 .byte $0f ; 7 lines
.byte $00+$80 ; 1 line
.byte $42 ; 7 tekst lines
.word GameOverTitle2
.byte $00+$80
.byte $42
.word GameOverResults
:5 .byte $00+$80,$02
.byte $01
.word DLCreditsFragm
; ---------------
; end of "constants" (ROM)
;-----------------------------------------------
.endif
+11
View File
@@ -0,0 +1,11 @@
; @com.wudsn.ide.asm.mainsourcefile=scorch.asm
.IF *>0 ;this is a trick that prevents compiling this file alone
statusBuffer
; 0123456789012345678901234567890123456789
dta d"Player: * "
dta d"Energy: Angle: Force: "
dta d"Round: Wind: "
.ENDIF
+1138 -178
View File
File diff suppressed because it is too large Load Diff
+267
View File
@@ -0,0 +1,267 @@
; @com.wudsn.ide.asm.mainsourcefile=scorch.asm
.IF *>0 ;this is a trick that prevents compiling this file alone
;--------------------------------------------------
.proc DLIinterruptGraph
pha
phy
ldy dliCounter
lda dliColorsBack,y
.IF TARGET = 800
nop ; necessary on 800 because DLIs take less time, jitter visible without it
nop
nop
.ENDIF
nop
nop
sta COLPF1
lda GradientNr
bne GoGradient
ldy #$ff ; one mauntain color
GoGradient
iny
lda (GradientColors),y ; mountains colors array
sta COLPF2
inc dliCounter
ply
pla
rti
.endp
;--------------------------------------------------
.proc DLIinterruptOptions
pha
phy
lda #0 ; background color
sta COLPF1
ldy GradientNr
beq @+
ldy #1
@ lda (GradientColors),y ; mountains colors array
sta COLPF2
ply
pla
rti
.endp
;--------------------------------------------------
.proc DLIinterruptGameOver
pha
phy
lda dliCounter
bne EndofPMG
lda #%00100001 ; playfield after P/M - prior=1
;STA WSYNC
sta PRIOR
bne EndOfDLI_GO
EndofPMG
cmp #1
bne ColoredLines
lda #%00100100 ; playfield before P/M
;STA WSYNC
sta PRIOR
bne EndOfDLI_GO
ColoredLines
cmp #9
beq CreditsScroll
tay
lda GameOverColoursTable-3,y ; -2 because this is DLI nr 2 and -1 (labels line)
ldy #$0a ; text colour (brightnes)
;STA WSYNC
sta COLPF2
sty COLPF1
bne EndOfDLI_GO
CreditsScroll
lda #$00
sta COLPF2
EndOfDLI_GO
inc dliCounter
ply
pla
rti
.endp
;--------------------------------------------------
.proc DLIinterruptText
pha
lda dliCounter
bne MoreBarsColorChange
lda #TextBackgroundColor
;sta WSYNC
sta COLPF2
mva #TextForegroundColor COLPF3
bne EndOfDLI_Text
MoreBarsColorChange
and #%00000001
rol
sta COLPF2
EndOfDLI_Text
inc dliCounter
pla
DLIinterruptNone
rti
.endp
;--------------------------------------------------
.proc VBLinterrupt
mva #0 dliCounter
mva #$02 DliColorBack
lda PAL
and #%00001110
beq itsPAL
;it is NTSC here
dec NTSCcounter
bne itsPAL
mva #6 NTSCcounter
bne SkippedIfNTSC ; skip doing VBL things each 6 frames in Amerika, Amerika
; We're all living in Amerika, Coca Cola, Wonderbra
itsPAL
; pressTimer is trigger tick counter. always 50 ticks / s
bit:smi:inc pressTimer ; timer halted if >127. max time measured 2.5 s
SkippedIfNTSC
bit RMT_blocked
bmi SkipRMTVBL
; ------- RMT -------
lda sfx_effect
bmi lab2
asl @ ; * 2
tay ;Y = 2,4,..,16 instrument number * 2 (0,2,4,..,126)
ldx #0 ;X = 0 channel (0..3 or 0..7 for stereo module)
lda #0 ;A = 0 note (0..60)
bit noSfx
smi:jsr RASTERMUSICTRACKER+15 ;RMT_SFX start tone (It works only if FEAT_SFX is enabled !!!)
lda #$ff
sta sfx_effect ;reinit value
lab2
jsr RASTERMUSICTRACKER+3 ;1 play
; ------- RMT -------
SkipRMTVBL
bit ScrollFlag
bpl EndOfCreditsVBI
CreditsVBI
inc CreditsVScrol
lda CreditsVScrol
cmp #32 ;not too fast
beq nextlinedisplay
:2 lsr ;not too fast
sta VSCROL
jmp EndOfCreditsVBI
nextlinedisplay
lda #0
sta CreditsVScrol
sta VSCROL
clc
lda DLCreditsAddr
adc #40
sta DLCreditsAddr
bcc @+
inc DLCreditsAddr+1
@
cmp #<CreditsLastLine
bne EndOfCreditsVBI
lda DLCreditsAddr+1
cmp #>CreditsLastLine
bne EndOfCreditsVBI
; adw DLCreditsAddr #40
; cpw DLCreditsAddr #CreditsLastLine
; bne EndOfCreditsVBI
mwa #Credits DLCreditsAddr
EndOfCreditsVBI
.IF TARGET = 5200
lda SkStatSimulator
bmi @+
inc SkStatSimulator
@
lda JoystickNumber ; select port
ora #%00000100 ; Speaker off, Pots enabled
sta CONSOL5200
center = 114 ;Read analog stick and make it look like a digital stick
threshold = 60
lda JoystickNumber
asl
tax
lda paddl0,x ;Read POT0 value (horizontal position)
cmp #center+threshold ;Compare with right threshold
rol stick0 ;Feed carry into digital stick value
cmp #center-threshold ;Compare with left threshold
rol stick0 ;Feed carry into digital stick value
lda paddl1,x ;Read POT1 value (vertical position)
cmp #center+threshold ;Compare with down threshold
rol stick0 ;Feed carry into digital stick value
cmp #center-threshold ;Compare with down threshold
rol stick0 ;Feed carry into digital stick value
lda stick0 ;0 indicates a press so the right/down values need to be inverted
eor #2+8
and #$0f
sta stick0
ldx JoystickNumber
; check shift key (5200 second fire button)
lda SKSTAT
:3 lsr ; third bit
and trig0,x ; and first button
;lda trig0,x
sta strig0 ;Move hardware to shadow
mva chbas chbase
lda skstat ;Reset consol key shadow is no key is pressed anymore
and #4
beq @+
mva #consol_reset consol
mva #@kbcode._none kbcode
@
pla
tay
pla
tax
pla
rti
.ELSE
; support for joysticks :)
ldx JoystickNumber
lda STICK0,x
sta STICK0
lda STRIG0,x
sta STRIG0
jmp XITVBV
.ENDIF
.endp
.IF TARGET = 5200
.proc kb_continue
sta kbcode ;Store key code in shadow.
mva #0 SkStatSimulator
exit pla
tay
pla
tax
pla
rti
.endp
.ENDIF
;--------------------------------------------------
.macro SetDLI
; SetDLI #WORD
; Initialises Display List Interrupts
LDY # <:1
LDX # >:1
jsr _SetDLIproc
.endm
.proc _SetDLIproc
LDA #$C0
STY VDSLST
STX VDSLST+1
STA NMIEN
rts
.endp
.ENDIF
+35 -31
View File
@@ -35,21 +35,29 @@
; 9 - TIMVEC2 ; 9 - TIMVEC2
; Initialises Vertical Blank Interrupts ; Initialises Vertical Blank Interrupts
; (works only with system interrupts ON) ; (works only with system interrupts ON)
LDY # <:1 ;----------
LDX # >:1 ; on 5200 it sets up deferred VBL ONLY for now
LDA #:2 sei
JSR SETVBV lda #$00 ;Disable all interruptes
sta nmien
sta irqen
@ lda vcount
bne @-
mwa #:1 VVBLKD
mva #$40 nmien
;Enable IRQ interrupts
sta pokmsk
sta irqen
cli
.ENDM .ENDM
;------------------------------------- ;-------------------------------------
.MACRO VDLI .MACRO VDLI
; VDLI #WORD ; VDLI #WORD
; Initialises Display List Interrupts ; Initialises Display List Interrupts
LDY # <:1 mwa #:1 VDSLST
LDX # >:1 mva #$C0 NMIEN
LDA #$C0
STY $0200
STX $0201
STA NMIEN
.ENDM .ENDM
;------------------------------------- ;-------------------------------------
.MACRO halt .MACRO halt
@@ -63,31 +71,27 @@
.MACRO KEY .MACRO KEY
; KEY ; KEY
; waits for releasing and pressing "any key" ; waits for releasing and pressing "any key"
PHA
?CK1 LDA SKSTAT
AND #$04
BEQ ?CK1
?CK LDA SKSTAT
AND #$04
BNE ?CK
PLA
.ENDM .ENDM
;------------------------------------- ;-------------------------------------
.MACRO WAIT .MACRO WAIT
; WAIT ; WAIT
; waits one frame (1/50 s(PAL) or 1/60s(NTSC)) ; waits one frame (1/50 s(PAL) or 1/60s(NTSC))
lda CONSOL ?ze LDA VCOUNT
cmp #6 ; START KEY cmp #16 ; if line<16 then wait for line>15 (long VBI protection)
beq ?nowait bcc ?ze
LDA VCOUNT sbc #10 ; last lines correction
ldy vcount ?wa cmp VCOUNT
?WA cpy VCOUNT bcc ?wa
BEQ ?WA ?wf cmp VCOUNT
?wframe bcs ?wf
cmp vcount .ENDM
bne ?wframe ;-------------------------------------
?nowait .macro waitRTC
.ENDM lda RTCLOK+1
?wa cmp RTCLOK+1
beq ?wa
.endm
;------------------------------------- ;-------------------------------------
.macro negw .macro negw
; negate the given word (0-a) ; negate the given word (0-a)
+272
View File
@@ -0,0 +1,272 @@
;****************************************************************************
;* ATARI 5200 CONSOLE *
;* SYSTEM EQUATES *
;****************************************************************************
; based on https://web.archive.org/web/20200831200348/http://www.atarimuseum.com/videogames/consoles/5200/conv_to_5200.html
;
; OS VARIABLES FOR 5200
;
; PAGE 0
POKMSK = $00 ;pokmsk at $00 on Atari 5200 instead of $10 on Atari XL
RTCLOK = $01 ;Actually $01/$02
CRITIC = $03
ATRACT = $04 ;attact at $04 on Atari 5200 instead of $4D on Atari XL
DLPTRS = $05 ;DLPTRS at $05/$06 on Atari 5200 instead of $230 on Atari XL
DMACTLS = $07 ;DMACTLS at $07 on Atari 5200 instead of $22f on Atari XL
SSKCTL = skctl ;There is no shadow on Atari 5200
PCOLR0 EQU $08 ;P0 COLOR
PCOLR1 EQU $09 ;P1 COLOR
PCOLR2 EQU $0a ;P2 COLOR
PCOLR3 EQU $0b ;P3 COLOR
COLOR0 EQU $0c ;COLOR 0
COLOR1 EQU $0d
COLOR2 EQU $0e
COLOR3 EQU $0f
COLOR4 EQU $10
COLBAKS EQU COLOR4
PADDL0 EQU $11
PADDL1 EQU $12
PADDL2 EQU $13
PADDL3 EQU $14
PADDL4 EQU $15
PADDL5 EQU $16
PADDL6 EQU $17
PADDL7 EQU $18
STICK0 = $19 ;There is no stick0 but we will make the analog stick look like a digital one and store it here
STRIG0 = $1a ;There is no strig0 but we will make this the shadow of the TRIG0 ($c010) of GTIA
chbas = $1b ;There is no CHBAS but we will make this the shadow of the CHBASE
CONSOL = $1c ;There are no console keys on Atari 5200, so we replace console h/w reads with a new shadow based on the keypad keys
consol_reset = $07;The constant value representing that no consol key is pressed
kbcode = $1d ;There is no keyboard on the Atari 5200, so replace kbcode h/w reads with a byte variable read based on the keypad keys
; PAGE 2
VIMIRQ EQU $0200 ;IMMED IRQ VECTOR
VVBLKI EQU $0202 ;IMM VBLK NMI VECTOR
VVBLKD EQU $0204 ;DEF VBLK NMI VECTOR
VDSLST EQU $0206 ;DSP LIST NMI VECTOR
VKEYBD EQU $0208 ;POKEY KB IRQ VECTOR
VKEYCNT EQU $020A ;Keypad routine continuation vector
BRKKY EQU $023C ;BREAK KEY VECTOR
VBREAK EQU $020E ;BRK INST IRQ VECTOR
VSERIN EQU $0210 ;POKEY INPUT RDY IRQ
VSEROR EQU $0212 ;POKEY OUTPUT RDY
VSEROC EQU $0214 ;POKEY OUTPUT DONE
VTIMR1 EQU $0216 ;POKEY TIMER 1 IRQ
VTIMR2 EQU $0218 ;POKEY TIMER 2 IRQ
VTIMR4 EQU $021A ;POKEY TIMER 4 IRQ
ROM_SETTINGS = $bfe8 ; game ROM info start (24 bytes total, 20b title, 2b year, 2b start vector)
; HARDWARE REGISTERS
; ---------------------------------------------------------------------------
POKEY EQU $EB00
; ---------------------------------------------------------------------------
;
; READ
;
POT0 EQU POKEY+$00
POT1 EQU POKEY+$01
POT2 EQU POKEY+$02
POT3 EQU POKEY+$03
POT4 EQU POKEY+$04
POT5 EQU POKEY+$05
POT6 EQU POKEY+$06
POT7 EQU POKEY+$07
ALLPOT EQU POKEY+$08
KBCODE_5200 EQU POKEY+$09
RANDOM EQU POKEY+$0a
POTGO EQU POKEY+$0b
SERIN EQU POKEY+$0d
IRQST EQU POKEY+$0e
SKSTAT EQU POKEY+$0f
;
; WRITE
;
AUDF1 EQU POKEY+$00
AUDC1 EQU POKEY+$01
AUDF2 EQU POKEY+$02
AUDC2 EQU POKEY+$03
AUDF3 EQU POKEY+$04
AUDC3 EQU POKEY+$05
AUDF4 EQU POKEY+$06
AUDC4 EQU POKEY+$07
AUDCTL EQU POKEY+$08
STIMER EQU POKEY+$09
SKRES EQU POKEY+$0a
SEROUT EQU POKEY+$0d
IRQEN EQU POKEY+$0e
SKCTL EQU POKEY+$0f
;
;
;
; ---------------------------------------------------------------------------
GTIA EQU $C000
; ---------------------------------------------------------------------------
;
; WRITE
;
HPOSP0 EQU GTIA+$00
HPOSP1 EQU GTIA+$01
HPOSP2 EQU GTIA+$02
HPOSP3 EQU GTIA+$03
HPOSM0 EQU GTIA+$04
HPOSM1 EQU GTIA+$05
HPOSM2 EQU GTIA+$06
HPOSM3 EQU GTIA+$07
SIZEP0 EQU GTIA+$08
SIZEP1 EQU GTIA+$09
SIZEP2 EQU GTIA+$0a
SIZEP3 EQU GTIA+$0b
SIZEM EQU GTIA+$0c
GRAFP0 EQU GTIA+$0d
GRAFP1 EQU GTIA+$0e
GRAFP2 EQU GTIA+$0f
GRAFP3 EQU GTIA+$10
GRAFM EQU GTIA+$11
COLPM0 EQU GTIA+$12
COLPM1 EQU GTIA+$13
COLPM2 EQU GTIA+$14
COLPM3 EQU GTIA+$15
COLPF0 EQU GTIA+$16
COLPF1 EQU GTIA+$17
COLPF2 EQU GTIA+$18
COLPF3 EQU GTIA+$19
COLBAK EQU GTIA+$1a
PRIOR EQU GTIA+$1b
GPRIOR = PRIOR ; no PRIOR shadow (GPRIOR)
VDELAY EQU GTIA+$1c
GRACTL EQU GTIA+$1d
HITCLR EQU GTIA+$1e
CONSOL5200 EQU GTIA+$1f ; no CONSOL in 5200
;
; READ
;
M0PF EQU GTIA+$00
M1PF EQU GTIA+$01
M2PF EQU GTIA+$02
M3PF EQU GTIA+$03
P0PF EQU GTIA+$04
P1PF EQU GTIA+$05
P2PF EQU GTIA+$06
P3PF EQU GTIA+$07
M0PL EQU GTIA+$08
M1PL EQU GTIA+$09
M2PL EQU GTIA+$0a
M3PL EQU GTIA+$0b
P0PL EQU GTIA+$0c
P1PL EQU GTIA+$0d
P2PL EQU GTIA+$0e
P3PL EQU GTIA+$0f
TRIG0 EQU GTIA+$10
TRIG1 EQU GTIA+$11
TRIG2 EQU GTIA+$12
TRIG3 EQU GTIA+$13
PAL EQU GTIA+$14
;
;
; ---------------------------------------------------------------------------
ANTIC EQU $D400
; ---------------------------------------------------------------------------
;
DMACTL EQU ANTIC+$00
CHACTL EQU ANTIC+$01
DLPTR EQU ANTIC+$02
;DLISTH EQU ANTIC+$03
HSCROL EQU ANTIC+$04
VSCROL EQU ANTIC+$05
PMBASE EQU ANTIC+$07
CHBASE EQU ANTIC+$09
WSYNC EQU ANTIC+$0a
VCOUNT EQU ANTIC+$0b
PENH EQU ANTIC+$0c
PENV EQU ANTIC+$0d
NMIEN EQU ANTIC+$0e
NMIRES EQU ANTIC+$0f
NMIST EQU ANTIC+$0f
;
; ---------------------------------------------------------------------------
; Atari ANTIC chip display list equates
; ---------------------------------------------------------------------------
;
JUMP EQU $01 ; display list jump instruction (3 byte)
JVB EQU $41 ; display list jump and wait for vblank instruction (3)
;
SCH EQU $10 ; display list horizontal scrolling
SCV EQU $20 ; display list vertical scrolling
LMS EQU $40 ; display list load memory scan instruction (3 byte)
DLII EQU $80 ; display list interrupt instruction
;
SKIP1 EQU $00 ; display list skip 1 scan line instruction
SKIP2 EQU $10 ; display list skip 2 scan lines instruction
SKIP3 EQU $20 ; display list skip 3 scan lines instruction
SKIP4 EQU $30 ; display list skip 4 scan lines instruction
SKIP5 EQU $40 ; display list skip 5 scan lines instruction
SKIP6 EQU $50 ; display list skip 6 scan lines instruction
SKIP7 EQU $60 ; display list skip 7 scan lines instruction
SKIP8 EQU $70 ; display list skip 8 scan lines instruction
;
MODE2 EQU $02 ; display list mode 2
MODE4 EQU $04 ; display list mode 4
MODE8 EQU $08 ; display list mode 8
MODEE EQU $0E ; display list mode E
MODEF EQU $0F ; display list mode F
; ---------------------------------------------------------------------------
; ENUMS
; ---------------------------------------------------------------------------
.enum @dmactl
blank = %00
narrow = %01
standard= %10
wide = %11
missiles= %100
players = %1000
lineX1 = %10000
lineX2 = %00000
dma = %100000
.ende
scr48 = @dmactl(wide|dma|players|missiles|lineX1)
scr40 = @dmactl(standard|dma|players|missiles|lineX1)
scr32 = @dmactl(narrow|dma|players|missiles|lineX1)
.enum @pmcntl
missiles= %1
players = %10
trigs = %100
.ende
.enum @gtictl
prior0 = %0
prior1 = %1
prior2 = %10
prior4 = %100
prior8 = %1000
ply5 = %10000 ; Fifth Player Enable
mlc = %100000 ; Multiple Color Player Enable
mode9 = %01000000
mode10 = %10000000
mode11 = %11000000
.ende
/*
; commented out to be replaced by the application specific A800 --> 5200 keypad translation
.enum @kbcode
_0
_1
_2
_3
_4
_5
_6
_7
_8
_9
_asterisk = $0a
_hash = $0b
_start = $0c
_pause = $0d
_reset = $0e
.ende
*/
+722
View File
@@ -0,0 +1,722 @@
;****************************************************************************
;* ATARI PERSONAL COMPUTER *
;* SYSTEM EQUATES *
;****************************************************************************
;
; OPERATING SYSTEM EQUATE FILE
;
; MODULE ORIGIN TABLE
;
; VECTOR TABLE
;
; HANDLER ENTRY POINTS ARE CALL-
; ED OUT IN THE FOLLOWING VECTOR
; TABLE. THESE ARE THE ADDRESSES
; MINUS ONE.
;
; EXAMPLE FOR EDITOR
;
; E400 OPEN
; 2 CLOSE
; 4 GET
; 6 PUT
; 8 STATUS
; A SPECIAL
; C JUMP TO POWER ON INIT
; F NOT USED
;
EDITRV EQU $E400 ;EDITOR
SCRENV EQU $E410 ;TV SCREEN
KEYBDV EQU $E420 ;KEYBOARD
PRINTV EQU $E430 ;PRINTER
CASETV EQU $E440 ;CASSETTE
;
; JUMP VECTOR TABLE
;
; THE FOLLOWING IS A TABLE OF
; JUMP INSTRUCTIONS TO VARIOUS
; ENTRY POINTS IN THE OPERATING
; SYSTEM
;
DISKIV EQU $E450 ;DISK INITIALIZATION
DSKINV EQU $E453 ;DISK INTERFACE
CIOV EQU $E456 ;CENTRAL I/O ROUTINE
SIOV EQU $E459 ;SERIAL I/O ROUTINE
SETVBV EQU $E45C ;SET SYSTEM TIMERS
SYSVBV EQU $E45F ;VBLANK CALCULATIONS
XITVBV EQU $E462 ;EXIT VBLANK
SIOINV EQU $E465 ;SIO INITIALIZATION
SENDEV EQU $E468 ;SEND ENABLE ROUTINE
INTINV EQU $E46B ;INTRPT HANDLER INIT
CIOINV EQU $E46E ;CIO INITIALIZATION
BLKBDV EQU $E471 ;BLACKBOARD MODE
WARMSV EQU $E474 ;WARM START VECTOR
COLDSV EQU $E477 ;COLD START VECTOR
RBLOKV EQU $E47A ;CASSETTE READ BLOCK
CSOPIV EQU $E47D ;CASSETTE INPUT OPEN
;
; VECTORS ADDED FOR 800XL
;
PUPDIV EQU $E480 ;POWER UP DISPLAY
SLFTSV EQU $E483 ;SELF TEST PROGRAM
PHENTV EQU $E486 ;UPLOADED HANDLER ENTER
PHULNV EQU $E489 ;UPLOADED HANDLER UNLINK
PHINIV EQU $E48C ;UPLOADED HANDLER INIT
;
; OPERATING SYSTEM EQUATES
;
; COMMAND CODES FOR IOCBS
;
OPEN EQU $03 ;OPEN FOR I/O
GETREC EQU $05 ;GET RECORD (TEXT)
GETCHR EQU $07 ;GET CHARACTER(S)
PUTREC EQU $09 ;PUT RECORD (TEXT)
PUTCHR EQU $0B ;PUT CHARACTER(S)
CLOSE EQU $0C ;CLOSE DEVICE
STATIS EQU $0D ;STATUS REQUEST
SPECIL EQU $0E ;SPECIAL ENTRY COMMAND
;
; SPECIAL ENTRY COMMANDS
;
DRAWLN EQU $11 ;DRAW LINE
FILLIN EQU $12 ;FILL
RENAME EQU $20 ;RENAME DISK FILE
DELETE EQU $21 ;DELETE DISK FILE
FORMAT EQU $22 ;FORMAT DISK
LOCKFL EQU $23 ;LOCK FILE
UNLOCK EQU $24 ;UNLOCK FILE
POINT EQU $25 ;POINT SECTOR
NOTE EQU $26 ;NOTE SECTOR
IOCFRE EQU $FF ;IOCB "FREE"
;
; AUX1 EQUATES
; () INDICATES WHICH DEVICES
;
APPEND EQU $01 ;WR APPEND(D)-SCN RD(E)
DIRECT EQU $02 ;OPEN DIRECTORY(D)
OPNIN EQU $04 ;OPEN FOR INPUT(ALL)
OPNOT EQU $08 ;OPEN FOR OUTPUT(ALL)
OPNINO EQU $0C ;OPEN INPUT&OUTPUT(ALL)
MXDMOD EQU $10 ;OPEN MIXED MODE(E,S)
INSCLR EQU $20 ;OPEN W/O CLEAR(E,S)
;
; DEVICE NAMES
;
SCREDT EQU 'E' ;SCREEN EDITOR (R/W)
KBD EQU 'K' ;KEYBOARD (R ONLY)
DISPLY EQU 'S' ;SCREEN DISPLAY (R/W)
PRINTR EQU 'P' ;PRINTER (W ONLY)
CASSET EQU 'C' ;CASSETTE (R/W)
RS232 EQU 'R' ;MODEM (R/W)
DISK EQU 'D' ;DISK (R/W)
;
;
;
; OPERATING SYSTEM STATUS CODES
;
SUCCES EQU $01 ;SUCCESSFUL OPERATION
BRKABT EQU $80 ;BREAK KEY ABORT
PRVOPN EQU $81 ;IOCB ALREADY OPEN
NONDEV EQU $82 ;NON-EXISTANT DEVICE
WRONLY EQU $83 ;IOCB OPEN FOR W ONLY
NVALID EQU $84 ;INVALID COMMAND
NOTOPN EQU $85 ;DEVICE/FILE NOT OPEN
BADIOC EQU $86 ;INVALID IOCB #
RDONLY EQU $87 ;IOCB OPEN FOR R ONLY
EOFERR EQU $88 ;END OF FILE
TRNRCD EQU $89 ;TRUNCATED RECORD
TIMOUT EQU $8A ;PERIPHERAL TIMEOUT
DNACK EQU $8B ;DEVICE NO ACKNOWLEDGE
FRMERR EQU $8C ;SERIAL BUS FRAME ERR
CRSROR EQU $8D ;CURSOR OVERRANGE
OVRRUN EQU $8E ;SERIAL DATA OVERRUN
CHKERR EQU $8F ;SERIAL CHECKSUM ERR
DERRER EQU $90 ;PERIPHRAL DEVICE ERR
BADMOD EQU $91 ;BAD SCREEN MODE #
FNCNOT EQU $92 ;NONEXISTANT FUNCTION
SCRMEM EQU $93 ;SCREEN MEM TOO SMALL
;
; PAGE ZERO RAM ASSIGNMENTS
;
LNFLG EQU $00 ;LINBUG RAM
NGFLAG EQU $01 ;POWER-UP SELF-TEST FLAG
;
; THESE LOCATIONS NOT CLEARED
;
CASINI EQU $02 ;CASSETTE INIT LOC
RAMLO EQU $04 ;RAM POINTER MEM TST
TRAMSZ EQU $06 ;TEMP REG RAM SIZE
TSTDAT EQU $07 ;RAM TEST DATA REG
;
;CLEARED ON COLDSTART ONLY
;
WARMST EQU $08 ;WARM START FLAG
BOOTQ EQU $09 ;SUCCESSFUL BOOT FLG
DOSVEC EQU $0A ;DOS START VECTOR
DOSINI EQU $0C ;DOS INIT ADDRESS
APPMHI EQU $0E ;APPL MEM HI LIMIT
;
;CLEARED ON COLD OR WARM START
;
POKMSK EQU $10 ;MASK POKEY IRQ
BRKKEY EQU $11 ;BREAK KEY FLAG
RTCLOK EQU $12 ;REAL TIME CLOCK
BUFADR EQU $15 ;INDIRECT BUFF ADDR
ICCOMT EQU $17 ;COMMAND FOR VECTOR
DSKFMS EQU $18 ;FMS POINTER
DSKUTL EQU $1A ;DISK UTILITIES PTR
ABUFPT EQU $1C ;RESERVED
ICHIDZ EQU $20 ;HANDLER INDEX #
ICDNOZ EQU $21 ;DEVICE NUMBER
ICCOMZ EQU $22 ;COMMAND CODE
ICSTAZ EQU $23 ;STATUS RETURN
ICBALZ EQU $24 ;BUFFER ADDRESS
ICBAHZ EQU $25
ICPTLZ EQU $26 ;PUT BYTE ROUTINE-1
ICPTHZ EQU $27
ICBLLZ EQU $28 ;BUFFER LENGTH
ICBLHZ EQU $29
ICAX1Z EQU $2A ;AUXILIARY BYTES
ICAX2Z EQU $2B
ICSPRZ EQU $2C ;SPARE BYTES
ICIDNO EQU $2E ;IOCB # X 16
CIOCHR EQU $2F ;CIO CHARACTER BYTE
STATUS EQU $30 ;INTERNAL STATUS
CHKSUM EQU $31 ;CHECKSUM
BUFRLO EQU $32 ;DATA BUFFER LO BYTE
BUFRHI EQU $33 ;DATA BUFFER HI BYTE
BFENLO EQU $34 ;NEXT BYTE PAST DATA
BFENHI EQU $35 ;BUFFER (HI & LO)
LTEMP EQU $36 ;LOADER TEMP
BUFRFL EQU $38 ;DATA BUFFR FULL FLG
RECVDN EQU $39 ;RECIEVE DONE FLAG
XMTDON EQU $3A ;XMIT DONE FLAG
CHKSNT EQU $3B ;CHECKSUM SENT FLAG
NOCKSM EQU $3C ;NO CHKSUM SENT FLAG
;BPTR EQU $3D ;CASSETTE DATA INDEX
FTYPE EQU $3E ;INTERRECORD GAP TYPE
FEOF EQU $3F ;END OF FILE FLAG
FREQ EQU $40 ;BEEP COUNT
SOUNDR EQU $41 ;NOISY I/O FLAG
CRITIC EQU $42 ;CRITICAL MODE
FMSZPG EQU $43 ;FMS ZERO PAGE
ZCHAIN EQU $4A ;HANDLER LOADER TEMP
DSTAT EQU $4C ;DISPLAY STATUS
ATRACT EQU $4D ;ATTRACT FLAG
DRKMSK EQU $4E ;DARK ATTRACT MASK
COLRSH EQU $4F ;COLOR SHIFTER
TMPCHR EQU $50 ;TEMP STORAGE
HOLD1 EQU $51 ;TEMP STORAGE
LMARGN EQU $52 ;LEFT MARGIN (1)
RMARGN EQU $53 ;RIGHT MARGIN (38)
ROWCRS EQU $54 ;CURSOR COUNTERS
COLCRS EQU $55
DINDEX EQU $57 ;DISPLAY MODE #
SAVMSC EQU $58 ;SCREEN MEM ADDR
OLDROW EQU $5A ;DRAW START POSIT
OLDCOL EQU $5B
OLDCHR EQU $5D ;DATA UNDER CURSOR
OLDADR EQU $5E ;CURSOR MEM ADDR
FKDEF EQU $60 ;FUNC KEY DEFEAT POINTER
PALNTS EQU $62 ;PAL/NTSC FLAG
LOGCOL EQU $63 ;COL IN LOGICAL LINE
ADRESS EQU $64 ;TEMP STORAGE
MLTEMP EQU $66 ;TEMP STORAGE
SAVADR EQU $68 ;TEMP STORAGE
RAMTOP EQU $6A ;AVAILABLE RAM PAGES
BUFCNT EQU $6B ;BUFFER COUNT
BUFSTR EQU $6C ;EDITOR GETCH POINTR
BITMSK EQU $6E ;BIT MASK
SHFAMT EQU $6F ;PIXEL JUSTIFICATION
ROWAC EQU $70 ;ROW ACCUMULATOR
COLAC EQU $72 ;COLUMN ACCUMULATOR
ENDPT EQU $74 ;LINE LENGTH
DELTAR EQU $76 ;DELTA ROW
DELTAC EQU $77 ;DELTA COLUMN
KEYDEF EQU $79 ;KEY DEFEAT POINTER
SWPFLG EQU $7B ;SPLIT SCN CURS CNTL
HOLDCH EQU $7C ;KB CHAR TEMP HOLD
INSDAT EQU $7D ;TEMP STORAGE
COUNTR EQU $7E ;DRAW ITERATION CNT
;
; 80-FF ARE RESERVED FOR USER
;
; NOTE: SEE FLOATING POINT
; SUBROUTINE AREA FOR ZERO
; PAGE CELLS
;
; PAGE 1 - HARDWARE STACK
;
; PAGE TWO RAM ASSIGNMENTS
;
VDSLST EQU $0200 ;DSP LIST NMI VECTOR
VPRCED EQU $0202 ;PROCEED IRQ VECTOR
VINTER EQU $0204 ;INTERUPT IRQ VECTOR
VBREAK EQU $0206 ;BRK INST IRQ VECTOR
VKEYBD EQU $0208 ;POKEY KB IRQ VECTOR
VSERIN EQU $020A ;POKEY INPUT RDY IRQ
VSEROR EQU $020C ;POKEY OUTPUT RDY
VSEROC EQU $020E ;POKEY OUTPUT DONE
VTIMR1 EQU $0210 ;POKEY TIMER 1 IRQ
VTIMR2 EQU $0212 ;POKEY TIMER 2 IRQ
VTIMR4 EQU $0214 ;POKEY TIMER 4 IRQ
VIMIRQ EQU $0216 ;IMMED IRQ VECTOR
CDTMV1 EQU $0218 ;COUNT DOWN TIMER 1
CDTMV2 EQU $021A ;COUNT DOWN TIMER 2
CDTMV3 EQU $021C ;COUNT DOWN TIMER 3
CDTMV4 EQU $021E ;COUNT DOWN TIMER 4
CDTMV5 EQU $0220 ;COUNT DOWN TIMER 5
VVBLKI EQU $0222 ;IMM VBLK NMI VECTOR
VVBLKD EQU $0224 ;DEF VBLK NMI VECTOR
CDTMA1 EQU $0226 ;CDTMV1 JSR ADDRESS
CDTMA2 EQU $0228 ;CDTMV2 JSR ADDRESS
CDTMF3 EQU $022A ;CDTMV3 FLAG
SRTIMR EQU $022B ;SOFTWARE REPEAT TMR
CDTMF4 EQU $022C ;CDTMV4 FLAG
INTEMP EQU $022D ;IAN'S TEMP
CDTMF5 EQU $022E ;CDTMV5 FLAG
DMACTLS EQU $022F ;SAVE DMACTL REG
DLPTRS EQU $0230 ;SAVE DISP LIST LO
;SDLSTH EQU $0231 ;SAVE DISP LIST HI
SSKCTL EQU $0232 ;SKCTL REGISTER RAM
LCOUNT EQU $0233 ;LOADER TEMP
LPENH EQU $0234 ;LIGHT PEN HORIZONTAL
LPENV EQU $0235 ;LIGHT PEN VERTICAL
BRKKY EQU $0236 ;BREAK KEY VECTOR
RELADR EQU $0238 ;LOADER REL ADDR
CDEVIC EQU $023A ;COMMAND BUFFER-DEV
CCOMND EQU $023B ;COMMAND BUFFER-CMND
CAUX1 EQU $023C ;COMMAND BUFFER AUX1
CAUX2 EQU $023D ;COMMAND BUFFER AUX2
;TEMP EQU $023E ;TEMPORARY RAM CELL
ERRFLG EQU $023F ;DEVICE ERROR FLAG
DFLAGS EQU $0240 ;DISK FLAGS(SECTOR1)
DBSECT EQU $0241 ;# DISK BOOT SECTORS
BOOTAD EQU $0242 ;DISK BOOT ADDRESS
COLDST EQU $0244 ;COLDSTART FLAG 1=CS
RECLEN EQU $0245 ;LOADER LENGTH
DSKTIM EQU $0246 ;DISK TIME OUT REG
VSFLAG EQU $026C ;FINE SCROLL TEMP
KEYDIS EQU $026D ;KEY DISABLE FLAG
FINE EQU $026E ;FINE SCROLL ENABLE(A1200)
GPRIOR EQU $026F ;GLOBAL PRIORITY
PADDL0 EQU $0270 ;POT 0 RAM CELL
PADDL1 EQU $0271
PADDL2 EQU $0272
PADDL3 EQU $0273
STICK0 EQU $0278 ;JOYSTICK 0 RAM CELL
STICK1 EQU $0279
PTRIG0 EQU $027C ;PADDLE TRIGGER 0
PTRIG1 EQU $027D
PTRIG2 EQU $027E
PTRIG3 EQU $027F
STRIG0 EQU $0284 ;JOYSTICK TRIGGER 0
STRIG1 EQU $0285
HIBYTE EQU $0288 ;LOADER
WMODE EQU $0289 ;CASSETTE R/W MODE
BLIM EQU $028A ;CASSETTE RECORD SIZE
IMASK EQU $028B
JVECK EQU $028C ;JUMP VECTOR
NEWADR EQU $028E ;LOADER NEW ADDRESS
TXTROW EQU $0290 ;TEXT ROWCRS
TXTCOL EQU $0291 ;TEXT COLCRS
TINDEX EQU $0293 ;TEXT INDEX
TXTMSC EQU $0294 ;TEXT WINDOW MEM ADD
TXTOLD EQU $0296 ;TEXT OLDROW & COL
CRETRY EQU $029C ;# COMMAND RETRIES
HOLD3 EQU $029D
SUBTMP EQU $029E
HOLD2 EQU $029F
DMASK EQU $02A0 ;PIXEL LOCATION MASK
TMPLBT EQU $02A1
ESCFLG EQU $02A2 ;ESCAPE FLAG
TABMAP EQU $02A3 ;TAB STOP MAP
LOGMAP EQU $02B2 ;LINE START BIT MAP
INVFLG EQU $02B6 ;INVERSE VIDEO FLAG
FILFLG EQU $02B7 ;FILL FLAG FOR DRAW
TMPROW EQU $02B8
TMPCOL EQU $02B9
SCRFLG EQU $02BB ;SET IF SCROLLING
HOLD4 EQU $02BC ;TEMP USED BY DRAW
DRETRY EQU $02BD ;# OF DEVICE RETRIES
SHFLOK EQU $02BE ;SHIFT/CTL LOCK FLAG
BOTSCR EQU $02BF ;BOTTOM OF SCREEN
PCOLR0 EQU $02C0 ;P0 COLOR
PCOLR1 EQU $02C1 ;P1 COLOR
PCOLR2 EQU $02C2 ;P2 COLOR
PCOLR3 EQU $02C3 ;P3 COLOR
COLOR0 EQU $02C4 ;COLOR 0
COLOR1 EQU $02C5
COLOR2 EQU $02C6
COLOR3 EQU $02C7
COLOR4 EQU $02C8
COLBAKS EQU COLOR4
RUNADR EQU $02C9 ;LOADER
HIUSED EQU $02CB ;LOADER
ZHIUSE EQU $02CD ;LOADER
GBYTEA EQU $02CF ;LOADER
LOADAD EQU $02D1 ;LOADER
ZLOADA EQU $02D3 ;LOADER
DSCTLN EQU $02D5 ;DISK SECTOR LENGTH
ACMISR EQU $02D7 ;RESERVED
KRPDEL EQU $02D9 ;KEY REPEAT DELAY
KEYREP EQU $02DA ;KEY REPEAT RATE(VBLANKS)
NOCLIK EQU $02DB ;CLICK ENABLE/DISABLE
HELPFG EQU $02DC ;HELP KEY FLAG
DMASAV EQU $02DD ;DMA SAVE STATE
PBPNT EQU $02DE ;PRINT BUFFER POINTER
PBUFSZ EQU $02DF ;PRINT BUFFER SIZE
DOSRUN EQU $02E0 ;DOS RUN/INIT ADDRESSES
RAMSIZ EQU $02E4 ;RAM SIZE-HIGH BYTE
MEMTOP EQU $02E5 ;TOP OF AVAIL MEMORY
MEMLO EQU $02E7 ;BOTTOM OF AVAIL MEM
HNDLOD EQU $02E9 ;POLL FLAG (1200)
DVSTAT EQU $02EA ;STATUS BUFFER
CBAUDL EQU $02EE ;CASSETTE BAUD RATE
CBAUDH EQU $02EF
CRSINH EQU $02F0 ;CURSOR INHIBIT 0=ON
KEYDEL EQU $02F1 ;KEY DELAY
CH1 EQU $02F2 ;PRIOR KB CHAR CODE
CHACT EQU $02F3 ;CHACTL REGISTER RAM
CHBAS EQU $02F4 ;CHBAS REGISTER RAM
NEWROW EQU $02F5 ;POINT DRAW GOES TO
NEWCOL EQU $02F6
ROWINC EQU $02F8 ;ROW INCREMENT VALUE
COLINC EQU $02F9 ;COL INCREMENT VALUE
CHAR EQU $02FA ;INTERNAL CHAR CODE
ATACHR EQU $02FB ;ATASCII CHARACTER
CHKEY EQU $02FC ;KB CHAR CODE (FIFO)
FILDAT EQU $02FD ;RIGHT FILL DATA
DSPFLG EQU $02FE ;DISPLAY FLAG
SSFLAG EQU $02FF ;START/STOP FLAG
;
; PAGE THREE RAM ASSIGNMENTS
;
DDEVIC EQU $0300 ;BUS I.D. NUMBER
DUNIT EQU $0301 ;UNIT NUMBER
DCOMND EQU $0302 ;BUS COMMAND
DSTATS EQU $0303 ;COMMAND TYPE/STATUS
DBUFLO EQU $0304 ;DATA BUFFER LO BYTE
DBUFHI EQU $0305 ;DATA BUFFER HI BYTE
DTIMLO EQU $0306 ;DEVICE TIMEOUT SECS
DUNUSE EQU $0307 ;UNUSED BYTE
DBYTLO EQU $0308 ;# OF BYTES XFERRED
DBYTHI EQU $0309
DAUX1 EQU $030A ;COMMAND AUX BYTE 1
DAUX2 EQU $030B ;COMMAND AUX BYTE 2
TIMER1 EQU $030C ;INITIAL TIMER VALUE
JMPERS EQU $030E ;OPTIONS (1200)
CASFLG EQU $030F ;CASSETE MODE IF SET
TIMER2 EQU $0310 ;FINAL TIMER VALUE
;TEMP1 EQU $0312 ;TEMP STORAGE
;TEMP2 EQU $0313 ;TEMP STORAGE
PTIMOT EQU $0314 ;PRINTER TIMEOUT REG
;TEMP3 EQU $0315 ;TEMP STORAGE
SAVIO EQU $0316 ;SAVE SERIAL IN DATA
TIMFLG EQU $0317 ;TIMEOUT FLAG C BAUD
STACKP EQU $0318 ;SIO STACK PTR SAVE
TSTAT EQU $0319 ;TEMP STATUS HOLDER
HATABS EQU $031A ;HANDLER ADDR TABLE
PUPBT1 EQU $033D ;POWER/UP RESET
PUPBT2 EQU $033E
PUPBT3 EQU $033F
ICHID EQU $0340 ;HANDLER INDEX #
ICDNO EQU $0341 ;DEVICE NUMBER
ICCOM EQU $0342 ;COMMAND CODE
ICSTA EQU $0343 ;STATUS
ICBAL EQU $0344 ;BUFFER ADDR LO BYTE
ICBAH EQU $0345 ;BUFFER ADDR HI BYTE
ICPTL EQU $0346 ;PUT ROUTINE ADDR-1
ICPTH EQU $0347
ICBLL EQU $0348 ;BUFFER LENGTH LO
ICBLH EQU $0349 ;BUFFER LENGTH HI
ICAX1 EQU $034A ;AUX BYTE 1
ICAX2 EQU $034B ;AUX BYTE 2
ICSPR EQU $034C ;SPARE BYTES
PRNBUF EQU $03C0 ;PRINTER BUFFER (40 BYTES)
SUPERF EQU $03E8 ;SCREEN EDITOR
CKEY EQU $03E9 ;START KEY FLAG
CASSBT EQU $03EA ;CASSETTE BOOT FLAG
CARTCK EQU $03EB ;CARTRIDGE CHECKSUM
ACMVAR EQU $03ED ;RESERVED
MINTLK EQU $03F9 ;RESERVED
GINTLK EQU $03FA ;CART INTERLOCK
CHLINK EQU $03FB ;HANDLER CHAIN
;
; PAGE FOUR RAM ASSIGNMENTS
;
CASBUF EQU $03FD ;CASSETTE BUFFER (131 BYTES)
USAREA EQU $0480 ;USER AREA
;
; PAGE FIVE AND SIX ARE RESERVED
; FOR USER WORK SPACE
;
; COLLEEN MNEMONICS
;
; ---------------------------------------------------------------------------
POKEY EQU $D200
; ---------------------------------------------------------------------------
;
; READ
;
POT0 EQU POKEY+$00
POT1 EQU POKEY+$01
POT2 EQU POKEY+$02
POT3 EQU POKEY+$03
POT4 EQU POKEY+$04
POT5 EQU POKEY+$05
POT6 EQU POKEY+$06
POT7 EQU POKEY+$07
ALLPOT EQU POKEY+$08
KBCODE EQU POKEY+$09
RANDOM EQU POKEY+$0a
POTGO EQU POKEY+$0b
SERIN EQU POKEY+$0d
IRQST EQU POKEY+$0e
SKSTAT EQU POKEY+$0f
;
; WRITE
;
AUDF1 EQU POKEY+$00
AUDC1 EQU POKEY+$01
AUDF2 EQU POKEY+$02
AUDC2 EQU POKEY+$03
AUDF3 EQU POKEY+$04
AUDC3 EQU POKEY+$05
AUDF4 EQU POKEY+$06
AUDC4 EQU POKEY+$07
AUDCTL EQU POKEY+$08
STIMER EQU POKEY+$09
SKRES EQU POKEY+$0a
SEROUT EQU POKEY+$0d
IRQEN EQU POKEY+$0e
SKCTL EQU POKEY+$0f
;
;
;
; ---------------------------------------------------------------------------
GTIA EQU $D000
; ---------------------------------------------------------------------------
;
; WRITE
;
HPOSP0 EQU GTIA+$00
HPOSP1 EQU GTIA+$01
HPOSP2 EQU GTIA+$02
HPOSP3 EQU GTIA+$03
HPOSM0 EQU GTIA+$04
HPOSM1 EQU GTIA+$05
HPOSM2 EQU GTIA+$06
HPOSM3 EQU GTIA+$07
SIZEP0 EQU GTIA+$08
SIZEP1 EQU GTIA+$09
SIZEP2 EQU GTIA+$0a
SIZEP3 EQU GTIA+$0b
SIZEM EQU GTIA+$0c
GRAFP0 EQU GTIA+$0d
GRAFP1 EQU GTIA+$0e
GRAFP2 EQU GTIA+$0f
GRAFP3 EQU GTIA+$10
GRAFM EQU GTIA+$11
COLPM0 EQU GTIA+$12
COLPM1 EQU GTIA+$13
COLPM2 EQU GTIA+$14
COLPM3 EQU GTIA+$15
COLPF0 EQU GTIA+$16
COLPF1 EQU GTIA+$17
COLPF2 EQU GTIA+$18
COLPF3 EQU GTIA+$19
COLBAK EQU GTIA+$1a
PRIOR EQU GTIA+$1b
VDELAY EQU GTIA+$1c
GRACTL EQU GTIA+$1d
HITCLR EQU GTIA+$1e
CONSOL EQU GTIA+$1f
;
; READ
;
M0PF EQU GTIA+$00
M1PF EQU GTIA+$01
M2PF EQU GTIA+$02
M3PF EQU GTIA+$03
P0PF EQU GTIA+$04
P1PF EQU GTIA+$05
P2PF EQU GTIA+$06
P3PF EQU GTIA+$07
M0PL EQU GTIA+$08
M1PL EQU GTIA+$09
M2PL EQU GTIA+$0a
M3PL EQU GTIA+$0b
P0PL EQU GTIA+$0c
P1PL EQU GTIA+$0d
P2PL EQU GTIA+$0e
P3PL EQU GTIA+$0f
TRIG0 EQU GTIA+$10
TRIG1 EQU GTIA+$11
TRIG2 EQU GTIA+$12
TRIG3 EQU GTIA+$13
PAL EQU GTIA+$14
;
;
; ---------------------------------------------------------------------------
ANTIC EQU $D400
; ---------------------------------------------------------------------------
;
DMACTL EQU ANTIC+$00
CHACTL EQU ANTIC+$01
DLPTR EQU ANTIC+$02
;DLISTH EQU ANTIC+$03
HSCROL EQU ANTIC+$04
VSCROL EQU ANTIC+$05
PMBASE EQU ANTIC+$07
CHBASE EQU ANTIC+$09
WSYNC EQU ANTIC+$0a
VCOUNT EQU ANTIC+$0b
PENH EQU ANTIC+$0c
PENV EQU ANTIC+$0d
NMIEN EQU ANTIC+$0e
NMIRES EQU ANTIC+$0f
NMIST EQU ANTIC+$0f
;
;
; ---------------------------------------------------------------------------
PIA EQU $D300
; ---------------------------------------------------------------------------
;
PORTA EQU PIA+0
PORTB EQU PIA+1
PACTL EQU PIA+2
PBCTL EQU PIA+3
;
; ---------------------------------------------------------------------------
; Atari ANTIC chip display list equates
; ---------------------------------------------------------------------------
;
JUMP EQU $01 ; display list jump instruction (3 byte)
JVB EQU $41 ; display list jump and wait for vblank instruction (3)
;
SCH EQU $10 ; display list horizontal scrolling
SCV EQU $20 ; display list vertical scrolling
LMS EQU $40 ; display list load memory scan instruction (3 byte)
DLII EQU $80 ; display list interrupt instruction
;
SKIP1 EQU $00 ; display list skip 1 scan line instruction
SKIP2 EQU $10 ; display list skip 2 scan lines instruction
SKIP3 EQU $20 ; display list skip 3 scan lines instruction
SKIP4 EQU $30 ; display list skip 4 scan lines instruction
SKIP5 EQU $40 ; display list skip 5 scan lines instruction
SKIP6 EQU $50 ; display list skip 6 scan lines instruction
SKIP7 EQU $60 ; display list skip 7 scan lines instruction
SKIP8 EQU $70 ; display list skip 8 scan lines instruction
;
MODE2 EQU $02 ; display list mode 2
MODE4 EQU $04 ; display list mode 4
MODE8 EQU $08 ; display list mode 8
MODEE EQU $0E ; display list mode E
MODEF EQU $0F ; display list mode F
; ---------------------------------------------------------------------------
; ENUMS
; ---------------------------------------------------------------------------
.enum @dmactl
blank = %00
narrow = %01
standard= %10
wide = %11
missiles= %100
players = %1000
lineX1 = %10000
lineX2 = %00000
dma = %100000
.ende
scr48 = @dmactl(wide|dma|players|missiles|lineX1)
scr40 = @dmactl(standard|dma|players|missiles|lineX1)
scr32 = @dmactl(narrow|dma|players|missiles|lineX1)
.enum @pmcntl
missiles= %1
players = %10
trigs = %100
.ende
.enum @gtictl
prior0 = %0
prior1 = %1
prior2 = %10
prior4 = %100
prior8 = %1000
ply5 = %10000 ; Fifth Player Enable
mlc = %100000 ; Multiple Color Player Enable
mode9 = %01000000
mode10 = %10000000
mode11 = %11000000
.ende
; ---------------------------------------------------------------------------
; KBCODEs
; ---------------------------------------------------------------------------
.enum @kbcode
_none = 255
_esc = 28
_1 = 31
_2 = 30
_3 = 26
_4 = 24
_5 = 29
_6 = 27
_7 = 51
_8 = 53
_9 = 48
_0 = 50
_lt = 54
_gt = 55
_del = 52
_tab = 44
_Q = 47
_W = 46
_E = 42
_R = 40
_T = 45
_Y = 43
_U = 11
_I = 13
_O = 8
_P = 10
_min = 14
_up = 14 ; cursor function
_eq = 15
_down = 15 ; cursor function
_ret = 12
_A = 63
_S = 62
_D = 58
_F = 56
_G = 61
_H = 57
_J = 1
_K = 5
_L = 0
_semicolon = 2
_plus = 6
_left = 6 ; cursor function
_asterisk = 7
_right = 7 ; cursor function
_caps = 60
_Z = 23
_X = 22
_C = 18
_V = 16
_B = 21
_N = 36
_M = 37
_comma = 32
_dot = 34
_slash = 38
_atari = 39
_help = 17
_F1 = 3
_F2 = 4
_F3 = 19
_F4 = 20
_space = 33
.ende
+171
View File
@@ -0,0 +1,171 @@
;-------------------------------------
.MACRO ROLW
ROL :1
ROL :1+1
.ENDM
;-------------------------------------
.MACRO ASLW
ASL :1
ROL :1+1
.ENDM
;-------------------------------------
.MACRO RORW
ROR :1+1
ROR :1
.ENDM
;-------------------------------------
.MACRO LSRW
LSR :1+1
ROR :1
.ENDM
;-------------------------------------
.MACRO VMAIN
; VMAIN #WORD,interrupt.vector
; interrupt.vector:
; 0 - VIMIRQ
; 1 - TIMCNT1
; 2 - TIMCNT2
; 3 - TIMCNT3
; 4 - TIMCNT4
; 5 - TIMCNT5
; 6 - VVBLKI
; 7 - VVBLKD
; 8 - TIMVEC1
; 9 - TIMVEC2
; Initialises Vertical Blank Interrupts
; (works only with system interrupts ON)
LDY # <:1
LDX # >:1
LDA #:2
JSR SETVBV
.ENDM
;-------------------------------------
.MACRO VDLI
; VDLI #WORD
; Initialises Display List Interrupts
LDY # <:1
LDX # >:1
LDA #$C0
STY $0200
STX $0201
STA NMIEN
.ENDM
;-------------------------------------
.MACRO VDL
; VDL #WORD
; Changes Display List addres
; and sets width of the screen
; vdl dl,$01 - narrow screen (32 bytes)
; vdl dl,$02 - normal screen (40 bytes)
; vdl dl,$03 - wide screen (48 bytes)
; (works only with system interrupts ON)
.if %0=2
lda dmactls
and #$fc
ora #%2
sta dmactls
.endif
LDA # <%1
STA DLPTRS
LDA # >%1
STA DLPTRS+1
.ENDM
;-------------------------------------
.MACRO halt
?stop
lda RANDOM
and #$05
sta COLBAK
jmp ?stop
.ENDM
;-------------------------------------
.MACRO KEY
; KEY
; waits for releasing and pressing "any key"
PHA
?CK1 LDA SKSTAT
AND #$04
BEQ ?CK1
?CK LDA SKSTAT
AND #$04
BNE ?CK
PLA
.ENDM
;-------------------------------------
.MACRO WAIT
; WAIT
; waits one frame (1/50 s(PAL) or 1/60s(NTSC))
?ze LDA VCOUNT
cmp #16 ; if line<16 then wait for line>15 (long VBI protection)
bcc ?ze
sbc #10 ; last lines correction
?wa cmp VCOUNT
bcc ?wa
?wf cmp VCOUNT
bcs ?wf
.ENDM
;-------------------------------------
.macro waitRTC
lda RTCLOK+2
?wa cmp RTCLOK+2
beq ?wa
.endm
;-------------------------------------
.macro negw
; negate the given word (0-a)
;-------------------------------------
sec
lda #$00
sbc :1
sta :1
lda #$00
sbc :1+1
sta :1+1
.endm
;-------------------------------------
.macro randomize
;usage: randomize floor ceiling
;returns (in A) a random .byte between "floor" and "ceiling"
.if :2 < :1
.error "floor higher than ceiling"
.endif
?rand
lda random
cmp #:1 ;floor
bcc ?rand
cmp #:2+1 ;ceiling
bcs ?rand
.endm
;-------------------------------------
.macro phx
txa
pha
.endm
;-------------------------------------
.macro phy
tya
pha
.endm
;-------------------------------------
.macro plx
pla
tax
.endm
;-------------------------------------
.macro ply
pla
tay
.endm
;-------------------------------------
.macro pause
;waits :1 number (byte) of frames
ldx #:1
?PAUSELOOP
wait
dex
bne ?PAUSELOOP
.ENDM
-514
View File
@@ -1,514 +0,0 @@
.enum @dmactl
blank = %00
narrow = %01
standard= %10
wide = %11
missiles= %100
players = %1000
lineX1 = %10000
lineX2 = %00000
dma = %100000
.ende
scr48 = @dmactl(wide|dma|players|missiles|lineX1) ;screen 48b
scr40 = @dmactl(standard|dma|players|missiles|lineX1) ;screen 40b
scr32 = @dmactl(narrow|dma|players|missiles|lineX1) ;screen 32b
.enum @pmcntl
missiles= %1
players = %10
trigs = %100
.ende
.enum @gtictl
prior0 = %0
prior1 = %1
prior2 = %10
prior4 = %100
prior8 = %1000
ply5 = %10000 ; Fifth Player Enable
mlc = %100000 ; Multiple Color Player Enable
mode9 = %01000000
mode10 = %10000000
mode11 = %11000000
.ende
* ---------------------------------------------------------------------------------------------
* --- GTIA
* ---------------------------------------------------------------------------------------------
HPOSP0 = $D000 ; pozioma pozycja gracza 0 (Z)
HPOSP1 = $D001 ; pozioma pozycja gracza 1 (Z)
HPOSP2 = $D002 ; pozioma pozycja gracza 2 (Z)
HPOSP3 = $D003 ; pozioma pozycja gracza 3 (Z)
HPOSM0 = $D004 ; pozioma pozycja pocisku 0 (Z)
HPOSM1 = $D005 ; pozioma pozycja pocisku 1 (Z)
HPOSM2 = $D006 ; pozioma pozycja pocisku 2 (Z)
HPOSM3 = $D007 ; pozioma pozycja pocisku 3 (Z)
SIZEP0 = $D008 ; poziomy rozmiar gracza 0 (Z)
SIZEP1 = $D009 ; poziomy rozmiar gracza 1 (Z)
SIZEP2 = $D00A ; poziomy rozmiar gracza 2 (Z)
SIZEP3 = $D00B ; poziomy rozmiar gracza 3 (Z)
SIZEM = $D00C ; poziomy rozmiar pociskw (Z)
GRAFP0 = $D00D ; rejestr grafiki gracza 0 (Z)
GRAFP1 = $D00E ; rejestr grafiki gracza 1 (Z)
GRAFP2 = $D00F ; rejestr grafiki gracza 2 (Z)
GRAFP3 = $D010 ; rejestr grafiki gracza 3 (Z)
GRAFM = $D011 ; rejestr grafiki pociskw (Z)
COLPM0 = $D012 ; rejestr koloru gracza i pocisku 0 (Z)
COLPM1 = $D013 ; rejestr koloru gracza i pocisku 1 (Z)
COLPM2 = $D014 ; rejestr koloru gracza i pocisku 2 (Z)
COLPM3 = $D015 ; rejestr koloru gracza i pocisku 3 (Z)
COLPF0 = $D016 ; rejestr koloru pola gry 0 (Z)
COLPF1 = $D017 ; rejestr koloru pola gry 1 (Z)
COLPF2 = $D018 ; rejestr koloru pola gry 2 (Z)
COLPF3 = $D019 ; rejestr koloru pola gry 3 (Z)
COLBAK = $D01A ; rejestr koloru ta (Z)
COLOR0 = colpf0
COLOR1 = colpf1
COLOR2 = colpf2
COLOR3 = colpf3
KOLM0PF = $D000 ; kolizja pocisku 0 z polem gry (O)
KOLM1PF = $D001 ; kolizja pocisku 1 z polem gry (O)
KOLM2PF = $D002 ; kolizja pocisku 2 z polem gry (O)
KOLM3PF = $D003 ; kolizja pocisku 3 z polem gry (O)
KOLP0PF = $D004 ; kolizja gracza 0 z polem gry (O)
KOLP1PF = $D005 ; kolizja gracza 1 z polem gry (O)
KOLP2PF = $D006 ; kolizja gracza 2 z polem gry (O)
KOLP3PF = $D007 ; kolizja gracza 3 z polem gry (O)
KOLM0P = $D008 ; kolizja pocisku 0 z graczem (O)
KOLM1P = $D009 ; kolizja pocisku 1 z graczem (O)
KOLM2P = $D00A ; kolizja pocisku 2 z graczem (O)
KOLM3P = $D00B ; kolizja pocisku 3 z graczem (O)
KOLP0P = $D00C ; kolizja gracza 0 z innym graczem (O)
KOLP1P = $D00D ; kolizja gracza 1 z innym graczem (O)
KOLP2P = $D00E ; kolizja gracza 2 z innym graczem (O)
KOLP3P = $D00F ; kolizja gracza 3 z innym graczem (O)
TRIG0 = $D010 ; stan przycisku joysticka 0 (O)
TRIG1 = $D011 ; stan przycisku joysticka 1 (O)
TRIG3 = $D013 ; znacznik doczenia cartridge-a (O)
PAL = $D014 ; znacznik systemu TV (O)
GTICTL = $D01B ; rejestr kontroli ukadu GTIA
GTIACTL = gtictl
VDELAY = $D01C ; licznik opnienia pionowego P/MG
PMCNTL = $D01D ; rejestr kontroli graczy i pociskw
HITCLR = $D01E ; rejestr kasowania rejestrw kolizji
CONSOL = $D01F ; rejestr stanu klawiszy konsoli Start (bit 0), Select (bit 1), Option (bit 2)
* ---------------------------------------------------------------------------------------------
* --- POKEY
* ---------------------------------------------------------------------------------------------
IRQENS = $0010 ; shadow register IRQEN
IRQSTAT = $0011 ; shadow register IRQST
AUDF3 = $D204 ; czstotliwo pracy generatora 3 (Z)
AUDCTL = $D208 ; rejestr kontroli generatorw dwiku (Z)
STIMER = $D209 ; rejestr zerowania licznikw (Z)
KBCODE = $D209 ; kod ostatnio nacinitego klawisza (O)
SKSTRES = $D20A ; rejestr statusu zcza szeregowego (Z)
RANDOM = $D20A ; rejestr liczby losowej (O)
SEROUT = $D20D ; szeregowy rejestr wyjciowy (Z)
SERIN = $D20D ; szeregowy rejestr wejciowy (O)
IRQEN = $D20E ; zezwolenie przerwa IRQ (Z)
IRQST = $D20E ; status przerwa IRQ (O)
SKCTL = $D20F ; rejestr kontroli zcza szeregowego (Z)
SKSTAT = $D20F ; rejestr statusu zcza szeregowego (O)
* ---------------------------------------------------------------------------------------------
* --- PIA
* ---------------------------------------------------------------------------------------------
PORTA = $D300 ; port A ukadu PIA
PORTB = $D301 ; port B ukadu PIA
PACTL = $D302 ; rejestr kontroli portu A
PBCTL = $D303 ; rejestr kontroli portu B
* ---------------------------------------------------------------------------------------------
* --- ANTIC
* ---------------------------------------------------------------------------------------------
DMACTL = $D400 ; rejestr kontroli dostpu do pamici
CHRCTL = $D401 ; rejestr kontroli wywietlania znakw
DLPTR = $D402 ; adres programu ANTIC-a
HSCROL = $D404 ; znacznik poziomego przesuwu obrazu
VSCROL = $D405 ; znacznik pionowego przesuwu obrazu
PMBASE = $D407 ; adres pamici graczy i pociskw
CHBASE = $D409 ; adres zestawu znakw
WSYNC = $D40A ; znacznik oczekiwania na synchronizacj poziom
VCOUNT = $D40B ; licznik linii obrazu
LPENH = $D40C ; poziome pooenie pira wietlengo
LPENV = $D40D ; pionowe pooenie pira wietlnego
NMIEN = $D40E ; rejestr zezwole na przerwania NMI
NMIST = $D40F ; rejestr statusu przerwa NMI
;-------------------------------------
;additional system variables
;-------------------------------------
ATRACT = $004D
COLPM0S = $02C0 ;- - shadow register COLPM0
COLPM1S = $02C1 ;- - shadow register COLPM1
COLPM2S = $02C2 ;- - shadow register COLPM2
COLPM3S = $02C3 ;- - shadow register COLPM3
COLPF0S = $02C4 ;- - shadow register COLPF0
COLPF1S = $02C5 ;- - shadow register COLPF1
COLPF2S = $02C6 ;- - shadow register COLPF2
COLPF3S = $02C7 ;- - shadow register COLPF3
COLBAKS = $02C8
GTICTLS = $026F ;- - shadow register GTIACTL
DMACTLS = $022F ;- - rejestr kontroli dostpu do pamici - cie
DLPTRS = $0230 ;- - adres programu ANTIC-a - cie
CHBAS = $02F4 ;- - shadow register CHBASE
KBCODES = $02FC ;- - shadow register KBCODE
SETVBV = $E45C
XITVBV = $E462
SYSVBV = $E45F
RTCLOK = $0012
MEMTOP = $02E5 ;- - adres grnej granicy wolnej pamici RAM
MEMLO = $02E7 ;- - adres dolnej granicy wolnej pamici RAM
JSTICK0 = $0278 ;- - pooenie joysticka 0
JSTICK1 = $0279 ;- JSTICK1 - pooenie joysticka 1
JSTICK2 = $027A ;- JSTICK2 - pooenie joysticka 0
JSTICK3 = $027B ;- JSTICK3 - pooenie joysticka 1
PTRIG0 = $027C ;- PTRIG0 - przycisk potencjometru 0
PTRIG1 = $027D ;- PTRIG1 - przycisk potencjometru 1
TRIG0S = $0284 ;- TRIG0S - przycisk joysticka 0, shadow register TRIG0
TRIG1S = $0285 ;- TRIG1S - przycisk joysticka 1, shadow register TRIG1
TRIG2S = $0286 ;- TRIG2S - shadow register TRIG0
TRIG3S = $0287 ;- TRIG3S - shadow register TRIG1
/*
Rejestry OS w pamici RAM
$08 - WARMST - znacznik gorcego startu
$0E - APPMHI - najwyszy adres RAM zajty przez program
$10 - IRQENS - shadow register IRQEN
$11 - IRQSTAT - shadow register IRQST
$12 - RTCLOK - zegar czasu rzeczywistego
$15 - BUFADR - adres bufora dla operacji dyskowych
$17 - ICCOMT - rejestr przejciowy kodu operacji I/O
$20 - ZIOCB - zerostronicowy blok kontroli I/O
$20 - ICHIDZ - indeks wpisu urzdzenia w HATABS
$21 - ICDNOZ - numer urzdzenia
$22 - ICCOMZ - kod operacji wejcia/wyjcia
$23 - ICSTZ - status operacji wejcia/wyjcia
$24 - ICBAZ - adres bufora danych dla operacji I/O
$26 - ICPTZ - adres procedury obsugi dla operacji
$28 - ICBLZ - dugo bufora danych dla operacji I/O
$2A - ICAX1Z - rejestr pomocniczy ZIOCB
$2B - ICAX2Z - rejestr pomocniczy ZIOCB
$2C - ICAX3Z - rejestr pomocniczy ZIOCB
$2D - ICAX4Z - rejestr pomocniczy ZIOCB
$2E - ICAX5Z - rejestr pomocniczy ZIOCB
$2F - ICAX6Z - rejestr pomocniczy ZIOCB
$30 - STATUS - status aktualnej operacji SIO
$31 - CHKSUM - suma kontrolna dla operacji SIO
$32 - BUFR - adres bufora danych dla SIO
$34 - BUFEN - adres koca bufora danych dla SIO
$36 - LTEMP - pomocniczy wektor odczytu listy liniowej
$38 - BUFRFL - znacznik zapenienia bufora SIO
$39 - RECVND - znacznik koca odczytu
$3A - XMTDON - znacznik koca transmisji
$3B - CHKSNT - znacznik nadania sumy kontrolnej
$3C - NOCKSM - znacznik braku sumy kontrolnej
$3D - BPTR - licznik bufora magnetofonu
$3E - GAPTYP - znacznik dugoci przerwy midzy blokami
$3F - FEOF - znacznik koca zbioru
$40 - FREQ - licznik dwiku przy otwarciu magnetofonu
$41 - IOSNDEN - znacznik dwiku przy transmisji
$42 - CRITIC - znacznik krytycznych czasowo operacji I/O
$4A - ZCHAIN - rejestr nastpstwa listy liniowej
$4C - DSTAT - status klawiatury i ekranu
$50 - TEMP - pomocniczy rejestr przejciowy
$51 - HOLD1 - pomocniczy rejestr przejciowy
$52 - LMARGIN - lewy margines obrazu
$53 - RMARGIN - prawy margines obrazu
$54 - ROWCRS - pionowa pozycja kursora
$55 - COLCRS - pozioma pozycja kursora
$57 - DINDEX - numer trybu graficznego OS
$58 - SAVMSC - adres pamici obrazu
$5A - OLDROW - poprzednia pionowa pozycja kursora
$5B - OLDCOL - poprzednia pozioma pozycja kursora
$5D - OLDCHR - poprzedni znak na ekranie
$5E - OLDADR - poprzedni adres znaku na ekranie
$60 - FKDEFP - wektor tabeli definicji klawiszy F1-F4
$62 - PALNTS - wskanik systemu TV
$63 - LOGCOL - adres kursora w wierszu logicznym
$64 - ADRESS - rejestr adresowy dla procedur edytora
$66 - MLTTMP - pomocniczy rejestr przejciowy
$68 - SAVADR - pomocniczy rejestr adresowy
$6A - RAMTOP - liczba stron pamici RAM
$6B - BUFCNT - licznik bufora edytora
$6C - BUFSTR - adres bufora dla edytora
$6E - BITMSK - maska bitowa do wywietlenia znaku
$6F - SHFAMT - liczba przesuni punktu
$70 - ROWAC - aktualny wiersz przy rysowaniu
$72 - COLAC - aktualna kolumna przy rysowaniu
$74 - ENDPT - znacznik koca rysowanej linii
$76 - DELTAR - przyrost pionowej pozycji kursora
$77 - DELTAC - przyrost poziomej pozycji kursora
$79 - KEYDEFP - wektor tabeli definicji klawiszy
$7B - SWPFLG - znacznik kursora w trybach z oknem
$7C - HOLDCH - przechowywanie wartoci znaku
$7D - INSDAT - rejestr pomocniczy edytora
$7E - COUNTR - licznik pamici obrazu dla DOSCR i DRAW
$0100 - STACK - stos mikroprocesora 6502
$0200 - DLIV - wektor przerwania programu ANTIC-a
$0210 - VTIMR1 - wektor przerwania licznika 1 POKEY-a
$0212 - VTIMR2 - wektor przerwania licznika 2 POKEY-a
$0214 - VTIMR4 - wektor przerwania licznika 4 POKEY-a
$0218 - TIMCNT1 - pierwszy licznik systemu
$0226 - TIMVEC1 - wektor przerwania licznika TIMCNT1
$022A - TIMFLG3 - znacznik wyzerowania licznika TIMCNT3
$022F - DMACTLS - shadow register DMACTL
$0230 - DLPTRS - shadow register DLPTR
$0232 - SKCTLS - shadow register SKCTL
$0233 - LCOUNT - licznik odczytu dla nowego urzdzenia
$0234 - LPENHS - shadow register LPENH
$0235 - LPENVS - shadow register LPENV
$023A - CDEVIC - kod urzdzenia dla SIO
$023B - CCMND - kod operacji dla SIO
$023C - CAUX1 - pierwszy bajt pomocniczy dla SIO
$023D - CAUX2 - drugi bajt pomocniczy dla SIO
$023E - TEMP - tymczasowy rejestr odpowiedzi urzdzenia
$023F - ERRFLG - znacznik bdu operacji SIO
$0244 - COLDST - znacznik zimnego startu systemu
$0245 - RECLEN - dugo rekordu z nowego urzdzenia
$0246 - DSKTIM - warto Timeout dla stacji dyskw
$0247 - PDVMSK - maska obecnoci nowych urzdze
$0248 - PDVRS - shadow register PDVREG
$024A - RELADR - adres procedury przemieszczalnej
$024C - PPTMPA - rejestr przechowania zawartoci akumulatora
$024D - PPTMPX - rejestr przechowania zawartoci rejestru X
$026B - CHSPTR - wektor nieuywanego zestawu znakw
$026C - VSFLAG - znacznik przesuwu pionowego obrazu
$026E - FINE - znacznik delikatnego przesuwu obrazu
$026F - GTICTLS - shadow register GTIACTL
$0270 - PADDL0 - shadow register POT0
$0278 - JSTICK0 - pooenie joysticka 0
$0279 - JSTICK1 - pooenie joysticka 1
$027A - JSTICK2 - pooenie joysticka 0
$027B - JSTICK3 - pooenie joysticka 1
$027C - PTRIG0 - przycisk potencjometru 0
$027D - PTRIG1 - przycisk potencjometru 1
$0284 - TRIG0S - przycisk joysticka 0, shadow register TRIG0
$0285 - TRIG1S - przycisk joysticka 1, shadow register TRIG1
$0286 - TRIG2S - shadow register TRIG0
$0287 - TRIG3S - shadow register TRIG1
$0288 - HIBYTE - indeks operacji nowego urzdzenia
$0289 - WMODE - znacznik sposobu dostpu do magnetofonu
$028A - BLIM - dugo bufora magnetofonu
$028E - NEWADR - adres procedury nowego urzdzenia
$0290 - TXTROW - wiersz kursora w oknie tekstowym
$0291 - TXTCOL - kolumna kursora w oknie tekstowym
$0293 - TINDEX - tryb graficzny OS w oknie tekstowym
$0294 - TXTMSC - adres pamici okna tekstowego
$029C - CRETRY - liczba powtrze rozkazu operacji
$029D - HOLD3 - pomocniczy rejestr przejciowy
$029E - SUBTMP - pomocniczy rejestr przejciowy
$02A0 - DMASK - maska punktw obrazu
$02A2 - ESCFLG - znacznik klawisza ESC
$02A3 - TABMAP - mapa pozycji tabulacji
$02B2 - LOGMAP - mapa linii logicznych
$02B6 - INVFLG - znacznik klawisza inverse video
$02B7 - FILFLG - znacznik wypeniania obrazu
$02B8 - TMPROW - tymczasowy rejestr pozycji kursora
$02B9 - TMPCOL - tymczasowy rejestr pozycji kursora
$02BB - SCRFLG - znacznik przesuwu obrazu
$02BC - HOLD4 - pomocniczy rejestr przejciowy
$02BD - DRETRY - liczba powtrze wywoa urzdzenia
$02BE - SHFLOK - znacznik klawiszy SHIFT i CONTROL
$02BF - BOTSCR - liczba wierszy tekstu
$02C0 - COLPM0S - shadow register COLPM0
$02C1 - COLPM1S - shadow register COLPM1
$02C2 - COLPM2S - shadow register COLPM2
$02C3 - COLPM3S - shadow register COLPM3
$02C4 - COLPF0S - shadow register COLPF0
$02C5 - COLPF1S - shadow register COLPF1 ;gr.8 letters
$02C6 - COLPF2S - shadow register COLPF2 ;gr.8 background
$02C7 - COLPF3S - shadow register COLPF3
$02C8 - COLBAKS - shadow register COLBAK
$02C9 - RUNADR - adres procedury nowego urzdzenia
$02CB - HIUSED - adres kocowy procedury nowego urzdzenia
$02CF - GBYTEA - adres procedury nowego urzdzenia
$02D1 - LOADAD - adres wczytywania z nowego urzdzenia
$02D3 - ZLOADA - pomocniczy rejestr adresu wczytywania
$02D5 - DSCTLN - dugo sektora dyskowego
$02DB - NOCLIK - znacznik dwiku klawiatury
$02DE - PBPNT - licznik bufora drukarki
$02DF - PBUFSZ - dugo bufora drukarki
$02E5 - MEMTOP - adres grnej granicy wolnej pamici RAM
$02E7 - MEMLO - adres dolnej granicy wolnej pamici RAM
$02E9 - HNDLOD - znacznik relokowalnej procedury obsugi I/O
$02EA - DVSTAT - dodatkowy rejestr statusu urzdzenia
$02EC - DVTMOT - dodatkowy rejestr Timeout urzdzenia
$02ED - REVNUM - numer wersji nowego urzdzenia
$02EE - CBAUD - prdko transmisji z magnetofonu
$02F0 - CRSINH - znacznik widocznoci kursora
$02F3 - CHACT - shadow register CHRCTL
$02F4 - CHBAS - shadow register CHBASE
$02F5 - NEWROW - nowa pozycja pionowa kursora
$02F6 - NEWCOL - nowa pozycja pozioma kursora
$02F8 - ROWINC - zmiana pionowej pozycji kursora
$02F9 - COLINC - zmiana poziomej pozycji kursora
$02FA - CHAR - kod wewntrzny znaku
$02FB - ATACHR - kod ATASCII znaku
$02FC - KBCODES - shadow register KBCODE
$02FD - FILDAT - numer koloru dla wypeniania
$02FE - DSPFLG - znacznik wywietlania znakw kontrolnych
$02FF - SSFLAG - znacznik start/stop dla przesuwu obrazu
$0300 - DDEVIC - kod identyfikacyjny urzdzenia
$0301 - DUNIT - numer identyfikacyjny urzdzenia
$0302 - DCMND - bajt rozkazu dla urzdzenia
$0303 - DSTATS - status urzdzenia
$0304 - DBUFA - adres bufora danych
$0306 - DTIMLO - warto Timeout dla urzdzenia
$0308 - DBYT - dugo bufora danych
$030A - DAUX1 - rejestr pomocniczy dla operacji I/O
$030B - DAUX2 - rejestr pomocniczy dla operacji I/O
$030C - INTIM1 - rejestr czasu przy odczycie z magnetofonu
$030F - CASFLG - znacznik operacji z magnetofonem
$0310 - INTIM2 - rejestr czasu przy odczycie z magnetofonu
$0312 - TEMP1 - pomocniczy rejestr przejciowy
$0313 - TEMP2 - pomocniczy rejestr przejciowy
$0314 - PTIMOT - warto Timeout dla drukarki
$0315 - TEMP3 - pomocniczy rejestr przejciowy
$0316 - SAVIO - rejestr przejciowy dla operacji SIO
$0317 - TIMFLG - znacznik upynicia czasu Timeout
$0318 - STACKP - rejestr wskanika stosu dla SIO
$0319 - TSTAT - przejciowy rejestr statusu SIO
$031A - HATABS - tabela wektorw procedur obsugi
$0340 - IOCB0 - blok kontroli I/O numer 0
$0350 - IOCB1 - blok kontroli I/O numer 1
$0360 - IOCB2 - blok kontroli I/O numer 2
$0370 - IOCB3 - blok kontroli I/O numer 3
$0380 - IOCB4 - blok kontroli I/O numer 4
$0390 - IOCB5 - blok kontroli I/O numer 5
$03A0 - IOCB6 - blok kontroli I/O numer 6
$03B0 - IOCB7 - blok kontroli I/O numer 7
$0340 - ICCHID - indeks wpisu urzdzenia w HATABS
$0341 - ICDNO - numer urzdzenia
$0342 - ICCMD - kod rozkazu operacji I/O
$0343 - ICSTAT - status operacji I/O
$0344 - ICBUFA - adres bufora danych dla operacji I/O
$0346 - ICPUTB - adres procedury przesyania danych
$0348 - ICBUFL - dugo bufora danych dla operacji I/O
$034A - ICAX1 - rejestr pomocniczy dla operacji I/O
$034B - ICAX2 - rejestr pomocniczy dla operacji I/O
$034C - ICAX3 - rejestr pomocniczy dla operacji I/O
$034D - ICAX4 - rejestr pomocniczy dla operacji I/O
$034E - ICAX5 - rejestr pomocniczy dla operacji I/O
$034F - ICAX6 - rejestr pomocniczy dla operacji I/O
$03C0 - PRNBUF - bufor drukarki
$03E8 - SUPERF - znacznik stosowany przy odczycie klawiatury
$03E9 - CKEY - znacznik klawisza START przy zimnym starcie
$03EC - DERRF - znacznik bdu przy otwieraniu edytora
$03FB - CHLINK - rejestr elementw listy liniowej
$03FD - CSCB - bajty kontroli szybkoci magnetofonu
$03FF - CRCB - bajt dugoci rekordu magnetofonowego
$0400 - CASBUF - bufor magnetofonu
$047F - CASBEN - koniec bufora magnetofonu
$D000 - HPOSP0 - pozioma pozycja gracza 0 (Z)
$D000 - KOLM0PF - kolizja pocisku 0 z polem gry (O)
$D001 - HPOSP1 - pozioma pozycja gracza 1 (Z)
$D001 - KOLM1PF - kolizja pocisku 1 z polem gry (O)
$D002 - HPOSP2 - pozioma pozycja gracza 2 (Z)
$D002 - KOLM2PF - kolizja pocisku 2 z polem gry (O)
$D003 - HPOSP3 - pozioma pozycja gracza 3 (Z)
$D003 - KOLM3PF - kolizja pocisku 3 z polem gry (O)
$D004 - HPOSM0 - pozioma pozycja pocisku 0 (Z)
$D004 - KOLP0PF - kolizja gracza 0 z polem gry (O)
$D005 - HPOSM1 - pozioma pozycja pocisku 1 (Z)
$D005 - KOLP1PF - kolizja gracza 1 z polem gry (O)
$D006 - HPOSM2 - pozioma pozycja pocisku 2 (Z)
$D006 - KOLP2PF - kolizja gracza 2 z polem gry (O)
$D007 - HPOSM3 - pozioma pozycja pocisku 3 (Z)
$D007 - KOLP3PF - kolizja gracza 3 z polem gry (O)
$D008 - SIZEP0 - poziomy rozmiar gracza 0 (Z)
$D008 - KOLM0P - kolizja pocisku 0 z graczem (O)
$D009 - SIZEP1 - poziomy rozmiar gracza 1 (Z)
$D009 - KOLM1P - kolizja pocisku 1 z graczem (O)
$D00A - SIZEP2 - poziomy rozmiar gracza 2 (Z)
$D00A - KOLM2P - kolizja pocisku 2 z graczem (O)
$D00B - SIZEP3 - poziomy rozmiar gracza 3 (Z)
$D00B - KOLM3P - kolizja pocisku 3 z graczem (O)
$D00C - SIZEM - poziomy rozmiar pociskw (Z)
$D00C - KOLP0P - kolizja gracza 0 z innym graczem (O)
$D00D - GRAFP0 - rejestr grafiki gracza 0 (Z)
$D00D - KOLP1P - kolizja gracza 1 z innym graczem (O)
$D00E - GRAFP1 - rejestr grafiki gracza 1 (Z)
$D00E - KOLP2P - kolizja gracza 2 z innym graczem (O)
$D00F - GRAFP2 - rejestr grafiki gracza 2 (Z)
$D00F - KOLP3P - kolizja gracza 3 z innym graczem (O)
$D010 - GRAFP3 - rejestr grafiki gracza 3 (Z)
$D010 - TRIG0 - stan przycisku joysticka 0 (O)
$D011 - GRAFM - rejestr grafiki pociskw (Z)
$D011 - TRIG1 - stan przycisku joysticka 1 (O)
$D012 - COLPM0 - rejestr koloru gracza i pocisku 0 (Z)
$D013 - COLPM1 - rejestr koloru gracza i pocisku 1 (Z)
$D013 - TRIG3 - znacznik doczenia cartridge'a (O)
$D014 - COLPM2 - rejestr koloru gracza i pocisku 2 (Z)
$D014 - PAL - znacznik systemu TV (O)
$D015 - COLPM3 - rejestr koloru gracza i pocisku 3 (Z)
$D016 - COLPF0 - rejestr koloru pola gry 0 (Z)
$D017 - COLPF1 - rejestr koloru pola gry 1 (Z)
$D018 - COLPF2 - rejestr koloru pola gry 2 (Z)
$D019 - COLPF3 - rejestr koloru pola gry 3 (Z)
$D01A - COLBAK - rejestr koloru ta (Z)
$D01B - GTIACTL - rejestr kontroli ukadu GTIA
$D01C - VDELAY - licznik opnienia pionowego P/MG
$D01D - PMCNTL - rejestr kontroli graczy i pociskw
$D01E - HITCLR - rejestr kasowania rejestrw kolizji
$D01F - CONSOL - rejestr stanu klawiszy konsoli
$D1FF - PDVREG - rejestr wyboru nowego urzdzenia
$D200 - AUDF1 - czstotliwo pracy generatora 1 (Z)
$D200 - POT0 - rejestr pooenia potencjometru 0 (O)
$D201 - AUDC1 - rejestr kontroli dwiku generatora 1 (Z)
$D201 - POT1 - rejestr pooenia potencjometru 1 (O)
$D202 - AUDF2 - czstotliwo pracy generatora 2 (Z)
$D202 - POT2 - rejestr pooenia potencjometru 2 (O)
$D203 - AUDC2 - rejestr kontroli dwiku generatora 2 (Z)
$D203 - POT3 - rejestr pooenia potencjometru 3 (O)
$D204 - AUDF3 - czstotliwo pracy generatora 3 (Z)
$D205 - AUDC3 - rejestr kontroli dwiku generatora 3 (Z)
$D206 - AUDF4 - czstotliwo pracy generatora 4 (Z)
$D207 - AUDC4 - rejestr kontroli dwiku generatora 4 (Z)
$D208 - AUDCTL - rejestr kontroli generatorw dwiku (Z)
$D208 - POTST - status odczytu potencjometrw (O)
$D209 - STIMER - rejestr zerowania licznikw (Z)
$D209 - KBCODE - kod ostatnio nacinitego klawisza (O)
$D20A - SKSTRES - reset statusu zcza szeregowego (Z)
$D20A - RANDOM - rejestr liczby losowej (O)
$D20B - POTG0 - znacznik przetwornika analogowo-cyfrowego (Z)
$D20D - SEROUT - szeregowy rejestr wyjciowy (Z)
$D20D - SERIN - szeregowy rejestr wejciowy (O)
$D20E - IRQEN - zezwolenia przerwa IRQ (Z)
$D20E - IRQST - status przerwa IRQ (O)
$D20F - SKCTL - rejestr kontroli zcza szeregowego (Z)
$D20F - SKSTAT - rejestr statusu zcza szeregowego (O)
$D300 - PORTA - port A ukadu PIA
$D301 - PORTB - port B ukadu PIA
$D302 - PACTL - rejestr kontroli portu A
$D303 - PBCTL - rejestr kontroli portu B
$D400 - DMACTL - rejestr kontroli dostpu do pamici
$D401 - CHRCTL - rejestr kontroli wywietlania znakw
$D402 - DLPTR - adres programu ANTIC-a
$D404 - HSCROL - znacznik poziomego przesuwu obrazu
$D405 - VSCROL - znacznik pionowego przesuwu obrazu
$D407 - PMBASE - adres pamici graczy i pociskw
$D409 - CHBASE - adres zestawu znakw
$D40A - WSYNC - znacznik oczekiwania na synchronizacj poziom
$D40B - VCOUNT - licznik linii obrazu
$D40C - LPENH - poziome pooenie pira wietlengo
$D40D - LPENV - pionowe pooenie pira wietlnego
$D40E - NMIEN - rejestr zezwole na przerwania NMI
$D40F - NMIST - rejestr statusu przerwa NMI
*/
+906 -430
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+1168 -899
View File
File diff suppressed because it is too large Load Diff
+206 -137
View File
@@ -8,101 +8,127 @@
; compilation to e.g. cartridge ; compilation to e.g. cartridge
; zero page variables are declared in program.s65 module ; zero page variables are declared in program.s65 module
;===================================================== ;=====================================================
TanksNames ; DO NOT ZERO - ticket #24 OneTimeZeroVariables
:6 dta d" " OneTimeZeroVariablesCount = variablesToInitialize-OneTimeZeroVariables ; MAX 128 bytes !
.if OneTimeZeroVariablesCount > 127
.error "OneTimeZeroVariablesCount too large, ",OneTimeZeroVariablesCount
.endif
noMusic .ds 1 ;.by 0 ; 0 - play music, $ff - do not play music
noSfx .ds 1 ;.by 0 ; 0 - play SFX, $ff - do not play SFX
;---------------------------------------------------- ;----------------------------------------------------
;Options DO NOT ZERO - ticket #27 ; Color table for Game Over Screen (created in a gameover routine)
OptionsTable .by 0,1,2,2,0,1,3 .ds 1 ;.by $00 ; labels line color
RoundsInTheGame .by 10 ;how many rounds in the current game GameOverColoursTable .ds MaxPlayers; .BYTE $80,$40,$c4,$20,$c0,$e4
seppukuVal .by 75 ;----------------------------------------------------
TanksNames ; DO NOT ZERO ON GAME RESTART - ticket #24
;:6 dta d" "
.ds 6*8
;---------------------------------------------------- ;----------------------------------------------------
skilltable ; computer controlled players' skills (1-8), 0 - human (no cleaning, ticket #30) skilltable ; computer controlled players' skills (1-8), 0 - human (no cleaning, ticket #30)
.DS [MaxPlayers] .DS MaxPlayers
;---------------------------------------------------- ;----------------------------------------------------
noMusic .by 0 ; 0 - play music, $ff - do not play music variablesToInitialize
noSfx .by 0 ; 0 - play SFX, $ff - do not play SFX ;Options DO NOT ZERO ON RESTART GAME - ticket #27
OptionsTable .ds maxOptions ;.by 0,1,2,2,0,1,3,2,0
RoundsInTheGame .ds 1 ;.by 10 ;how many rounds in the current game
seppukuVal .ds 1 ;.by 75
mountainDeltaH .ds 1 ;.by 3
mountainDeltaL .ds 1 ;.by $ff
;----------------------------------------------------
LineHeader1
.ds 9 ;dta d"# ROUND: "
RoundNrDisplay
.ds 5 ;dta d" #", $ff
; 4x4 text buffer ; 4x4 text buffer
ResultLineBuffer ResultLineBuffer
dta d" ", $ff .ds 14 ;dta d" ", $ff
LineHeader1 linetableL ; = PMGraph + $0300 - (screenHeight+1)*2
dta d"# ROUND: " .ds (screenHeight+1)
RoundNrDisplay linetableH ; = PMGraph + $0300 - (screenHeight+1)
dta d" #", $ff .ds (screenHeight+1)
DisplayCopyPurchase
.ds (DisplayCopyPurchaseEnd - DisplayCopyPurchaseStart +1)
StatusBufferCopy
.ds screenBytes*3
;===================================================== ;=====================================================
variablesStart ; zeroing starts here variablesStart ; zeroing starts here
;===================================================== ;=====================================================
isInventory .ds 1 ; 0 - purchase, $ff - inventory ;isInventory .ds 1 ; 0 - purchase, $ff - inventory
;-------------- ;--------------
drawFunction .ds 1 ; 0 - plot, %10000000 - LineLength (N), %01000000 - DrawCheck (V) drawFunction .ds 1 ; 0 - plot, %10000000 - LineLength (N), %01000000 - DrawCheck (V)
;-------------- ;--------------
sfx_effect .ds 1
;--------------
noDeathCounter .ds 1 noDeathCounter .ds 1
;-------------- ;--------------
OptionsY .ds 1 ;vertical position of cursor on Options screen OptionsY .ds 1 ;vertical position of cursor on Options screen
flyDelay .ds 1 flyDelay .ds 1
;-------------- ;--------------
NumberOfPlayers .DS 1 ;current number of players (counted from 1) ;NumberOfPlayers .DS 1 ;current number of players (counted from 1)
TankSequence .DS [MaxPlayers] ;sequence of shooting during the Round TankSequence .DS MaxPlayers ;sequence of shooting during the Round
GameIsOver .DS 1 ; 1 means it was the last round in the game GameIsOver .DS 1 ; 1 means it was the last round in the game
;---------------------------------------------------- ;----------------------------------------------------
moneyH ;we place zero at the end of prices and money moneyH ;we place zero at the end of prices and money
;and have range from 0 to 99990 (not too much) ;and have range from 0 to 99990 (not too much)
;money players have (maybe one more byte is needed?) ;money players have (maybe one more byte is needed?)
.DS [MaxPlayers] .DS MaxPlayers
moneyL moneyL
.DS [MaxPlayers] .DS MaxPlayers
;---------------------------------------------------- ;----------------------------------------------------
gainH ;how much money player gets after the round gainH ;how much money player gets after the round
;it is gathered during the round basing on energy ;it is gathered during the round basing on energy
;opponents loose after player's shoots ;opponents lose after player's shoots
.DS [MaxPlayers] .DS MaxPlayers
gainL gainL
.DS [MaxPlayers] .DS MaxPlayers
;---------------------------------------------------- ;----------------------------------------------------
looseH ;how much player looses after the round loseH ;how much player looses after the round
;calculated from REAL energy loss ;calculated from REAL energy loss
;(not only to zero energy) ;(not only to zero energy)
.DS [MaxPlayers] .DS MaxPlayers
looseL loseL
.DS [MaxPlayers] .DS MaxPlayers
;---------------------------------------------------- ;----------------------------------------------------
Energy Energy
.DS [MaxPlayers] .DS MaxPlayers
ShieldEnergy ShieldEnergy
.DS [MaxPlayers] .DS MaxPlayers
EnergyDecrease .DS 1 EnergyDecrease .DS 1
eXistenZ eXistenZ
.DS [MaxPlayers] .DS MaxPlayers
LASTeXistenZ ; eXistenZ before shoot LASTeXistenZ ; eXistenZ before shoot
.DS [MaxPlayers] .DS MaxPlayers
ResultsTable ;the results in the gameeeeee ResultsTable ;the results in the gameeeeee
.DS [MaxPlayers] .DS MaxPlayers
TempResults TempResults
.DS [MaxPlayers] .DS MaxPlayers
DirectHitsH
.DS MaxPlayers
DirectHitsL
.DS MaxPlayers
EarnedMoneyH
.DS MaxPlayers
EarnedMoneyL
.DS MaxPlayers
;---------------------------------------------------- ;----------------------------------------------------
ForceTableL ;shooting Force of the tank during the round ForceTableL ;shooting Force of the tank during the round
.DS [MaxPlayers] .DS MaxPlayers
ForceTableH ForceTableH
.DS [MaxPlayers] ;maxplayers=6 .DS MaxPlayers ;maxplayers=6
MaxForceTableL ;Energy of the tank during the round MaxForceTableL ;Energy of the tank during the round
;(limes superior force of the Shoot) ;(limes superior force of the Shoot)
.DS [MaxPlayers] ;1000 is the default .DS MaxPlayers ;1000 is the default
MaxForceTableH MaxForceTableH
.DS [MaxPlayers] .DS MaxPlayers
;---------------------------------------------------- ;----------------------------------------------------
BarrelLength ;length of the tank barrel - dont forget to set it to 6 at round start!
AngleTable ;Angle of the barrel of each tank during the round .DS MaxPlayers
.DS [MaxPlayers]
NewAngle .DS 1
;----------------------------------------------------
ActiveWeapon ;number of the selected weapon ActiveWeapon ;number of the selected weapon
.DS [MaxPlayers] .DS MaxPlayers
ActiveDefenceWeapon ;number of the activated defence weapon - 0 ActiveDefenceWeapon ;number of the activated defence weapon - 0
.DS [MaxPlayers] .DS MaxPlayers
AutoDefenseFlag ; 0 - not activated, >$7f - activated
.DS MaxPlayers
WeaponDepleted .DS 1 ; if 0 deactivate the weapon and switch to Baby Missile WeaponDepleted .DS 1 ; if 0 deactivate the weapon and switch to Baby Missile
;---------------------------------------------------- ;----------------------------------------------------
@@ -110,45 +136,55 @@ WeaponDepleted .DS 1 ; if 0 deactivate the weapon and switch to Baby Missile
; 20203.5 => 128 : <20203 : >20203 ; 20203.5 => 128 : <20203 : >20203
;---------------------------------------------------- ;----------------------------------------------------
L1 .DS 1 ; variable used in multiplications (by 10:) ;L1 .DS 1 ; variable used in multiplications (by 10:)
gravity .DS 1 ;only the decimal part (1/10 = 25) ;gravity .DS 1 ;only the decimal part (1/10 = 25)
;---------------------------------------------------- ;----------------------------------------------------
Wind .ds 4 ;format: 0000.hhll ;Wind .ds 4 ;format: 0000.hhll
;walue displayed on the screen is ;walue displayed on the screen is
;decimal portion divided by 16 (>>4) ;decimal portion divided by 16 (>>4)
;---------------------------------------------------- ;----------------------------------------------------
MaxWind .ds 1 ; MaxWind .ds 1 ;
WindOrientation .DS 1 ;(0-right,1-left) WindOrientation .DS 1 ;(0-right,1-left)
;---------------------------------------------------- ;----------------------------------------------------
Counter .DS 1 ;temporary Counter for outside loops ;Counter .DS 1 ;temporary Counter for outside loops
HitFlag .DS 1 ;$ff when missile hit ground, $00 when no hit, $01-$06 tank index+1 when hit tank ;HitFlag .DS 1 ;$ff when missile hit ground, $00 when no hit, $01-$06 tank index+1 when hit tank
WallsType .ds 1 ; bits 6 and 7: 00 - none, 01 - bump, 10 - wrap, 11 - boxy
;---------------------------------------------------- ;----------------------------------------------------
xtankstableL ;X positions of tanks (lower left point) xtankstableL ;X positions of tanks (lower left point)
.DS [MaxPlayers] .DS MaxPlayers
xtankstableH xtankstableH
.DS [MaxPlayers] .DS MaxPlayers
ytankstable ;Y positions of tanks (lower left point) ytankstable ;Y positions of tanks (lower left point)
.DS [MaxPlayers] .DS MaxPlayers
LowResDistances ; coarse tank positions divided by 4 (to be in just one byte) LowResDistances ; coarse tank positions divided by 4 (to be in just one byte)
.DS [MaxPlayers] .DS MaxPlayers
JoyNumber ; Joystick port number (from 0 to 3)
.DS MaxPlayers
TankShape ; Tank shape number (from 0 to 2)
.DS MaxPlayers
;---------------------------------------------------- ;----------------------------------------------------
Erase .DS 1 ; if 1 only mask of the character is printed TargetTankNr ; Target tank index (for AI routines)
.DS 1
SecondTryFlag ; For precise AI aiming
.DS 1
;----------------------------------------------------
;Erase .DS 1 ; if 1 only mask of the character is printed
; on the graphics screen. if 0 character is printed normally ; on the graphics screen. if 0 character is printed normally
;---------------------------------------------------- ;----------------------------------------------------
RangeLeft .DS 2 ;range of the soil to be fallen down ;RangeLeft .DS 2 ;range of the soil to be fallen down
RangeRight .DS 2 ;it is being set by all Explosions ;RangeRight .DS 2 ;it is being set by all Explosions
;---------------------------------------------------- ;----------------------------------------------------
WeaponRangeLeft .DS 2 ;Range of the Explosion of the given weapon WeaponRangeLeft .DS 2 ;Range of the Explosion of the given weapon
WeaponRangeRight .DS 2 WeaponRangeRight .DS 2
;---------------------------------------------------- ;----------------------------------------------------
;xroller ;xroller
HowMuchToFall .ds 1 ;HowMuchToFall .ds 1
HeightRol .DS 1 HeightRol .DS 1
;digger ;digger
digstartx .DS 2 ;digstartx .DS 2
digstarty .DS 2 ;digstarty .DS 2
diggery .DS 1 diggery .DS 1
DigLong .DS 1 DigLong .DS 1
digtabxL .DS [8] digtabxL .DS [8]
@@ -161,58 +197,59 @@ FillCounter .ds 2
;sandhog ;sandhog
sandhogflag .DS 1 ; (0 digger, 8 sandhog) sandhogflag .DS 1 ; (0 digger, 8 sandhog)
;ofdirt ;ofdirt
magic .DS 2 ; was tempor2, but it was not compiling!!! (bug in OMC65) ;magic .DS 2 ; was tempor2, but it was not compiling!!! (bug in OMC65)
;draw ;draw
HowToDraw .DS 1 ;HowToDraw .DS 1
; bits here mean ; bits here mean
; 0 - negative X (go up) ; 0 - negative X (go up)
; 1 - negative Y (left) ; 1 - negative Y (left)
; 2 - directional value > 1 (more than 45 degrees) ; 2 - directional value > 1 (more than 45 degrees)
; if all 0 then standart routine ; if all 0 then standart routine
XHit .DS 2 ;XHit .DS 2
YHit .DS 2 YHit .DS 2
LineLength .DS 2 ;LineLength .DS 2
;circle ;circle
radius .DS 1 ;radius .DS 1
xcircle .DS 2 ;xcircle .DS 2
ycircle .DS 2 ;ycircle .DS 2
tempcir .DS 2 tempcir .DS 2
;TankFalls ;TankFalls
FallingSoundBit .DS 1 FallingSoundBit .DS 1
PreviousFall .DS 1 PreviousFall .DS 1
EndOfTheFallFlag .DS 1 ; in case of the infinite fall EndOfTheFallFlag .DS 1 ; in case of the infinite fall
Parachute .DS 1 ; are you insured with parachute? ;Parachute .DS 1 ; are you insured with parachute?
;FloatingAlt .DS 1 ; floating tank altitude
FunkyWallFlag = FloatingAlt ; reuse this variable in different weapon (Funky Bomb)!
PreferHumansFlag = FloatingAlt ; second reuse in AI Aim proc
;---------------------------------------------------- ;----------------------------------------------------
;Flight ;Flight
;variables for 5 missiles (used for mirv) ;variables for 5 missiles (used for mirv)
xtraj00 .DS [5] ; 3 bytes of xtraj times 5. Lowest byte xtraj00 .DS [5] ; 3 bytes of xtraj times 5. Lowest byte
xtraj01 .DS [5] ; middle byte xtraj01 .DS [5] ; middle byte
xtraj02 .DS [5] ; high byte xtraj02 .DS [5] ; high byte
vx00 .DS [5] ;vx00 .DS [5] ; looks like it is not really used anywhere
vx01 .DS [5] vx01 .DS [5]
vx02 .DS [5] vx02 .DS [5]
vx03 .DS [5] vx03 .DS [5]
MirvDown .DS [5] ; is given missile down? MirvDown .DS [5] ; is given missile down?
MirvMissileCounter .DS 1 ; missile Counter (mainly for X) MirvMissileCounter .DS 1 ; missile Counter (mainly for X)
SmokeTracerFlag .DS 1 ; if Smoketracer SmokeTracerFlag .DS 1 ; if Smoketracer
LaserFlag .DS 1 ; $ff if Laser
XposFlag .DS 1 ; bullet positon X (0 - on screen , %1000000 - off-screen) XposFlag .DS 1 ; bullet positon X (0 - on screen , %1000000 - off-screen)
YposFlag .DS 1 ; bullet positon Y (0 - on screen , %1000000 - over the screen , %0100000 - under the screen) YposFlag .DS 1 ; bullet positon Y (0 - on screen , %1000000 - over the screen , %0100000 - under the screen)
;---------------------------------------------------- ;----------------------------------------------------
;CheckCollisionWithTank ;CheckCollisionWithTank
vx .ds 4 ; 0,0,0,0 ;two decimal bytes, two whole bytes (DC.BA) ;vx .ds 4 ; 0,0,0,0 ;two decimal bytes, two whole bytes (DC.BA)
vy .ds 4 ;0,0,0,0 ;vy .ds 4 ;0,0,0,0
xtraj .ds 3 ; 0,0,0 ;xtraj .ds 3 ; 0,0,0
ytraj .ds 3 ; 0,0,0 ;ytraj .ds 3 ; 0,0,0
xtrajold .ds 3 ; 0,0,0 xtrajold .ds 3 ; 0,0,0
ytrajold .ds 3 ; 0,0,0 ytrajold .ds 3 ; 0,0,0
Angle .DS 1 ;Angle .DS 1
Force .ds 3 ; 0,0,0 ;Force .ds 3 ; 0,0,0
Multiplier .ds 3 ; 0,0,0 ;Multiplier .ds 3 ; 0,0,0
Multiplee .ds 2 ; 0,0 Multiplee .ds 2 ; 0,0
goleft .DS 1 ;if 1 then flights left ;goleft .DS 1 ;if 1 then flights left
;----------------------------------------------------
;SoilDown2
IsEndOfTheFallFlag .DS 1
;---------------------------------------------------- ;----------------------------------------------------
;unPlot ;unPlot
WhichUnPlot .DS 1 WhichUnPlot .DS 1
@@ -222,11 +259,10 @@ oldplotL .DS [5]
oldora .DS [5] oldora .DS [5]
oldply .DS [5] oldply .DS [5]
OldOraTemp .DS 1 OldOraTemp .DS 1
FunkyBombCounter .DS 1
xtrajfb .DS 2 xtrajfb .DS 2
ytrajfb .DS 2 ytrajfb .DS 2
; ;
tracerflag .DS 1 ;tracerflag .DS 1
;---------------------------------------------------- ;----------------------------------------------------
;TypeChar ;TypeChar
mask1 .DS [8] mask1 .DS [8]
@@ -234,25 +270,26 @@ mask2 .DS [8]
char1 .DS [8] char1 .DS [8]
char2 .DS [8] char2 .DS [8]
color .DS 1 ;color .DS 1
ybit .DS 1 ybit .DS 1
tempbyte01 .DS 1 tempbyte01 .DS 1
delta .DS 2 ;delta .DS 2
yfloat .DS 2 yfloat .DS 2
deltaX .DS 1 deltaX .DS 1
UpNdown .DS 1 UpNdown .DS 1
temptankX .DS 2 temptankX .DS 2
temptankNr .DS 1 temptankNr .DS 1
AfterBFGflag .DS 1
;---------------------------------------------------- ;----------------------------------------------------
;Variables from textproc.s65 ;Variables from textproc.s65
; tables with indexes of weapons on the right lists ; tables with indexes of weapons on the right lists
; OK (2022) so, L1 is list of offensive weapons, L2 - defensive ; OK (2022) so, L1 is list of offensive weapons, L2 - defensive
IndexesOfWeaponsL1 IndexesOfWeaponsL1
.ds 8*5 ; max 40 offensive weapons. this is wrong, should be 48, still only 32 defined. .ds (last_offensive_____ - first_offensive____+1)
IndexesOfWeaponsL2 IndexesOfWeaponsL2
.ds 8*2 ; max 16 defensive weapons. .ds (last_defensive_____ - first_defensive____+1)
;---------------------------------------------------- ;----------------------------------------------------
; variables storing amount of weapons on the first and second ; variables storing amount of weapons on the first and second
@@ -262,8 +299,8 @@ HowManyOnTheListOff
.DS 1 .DS 1
HowManyOnTheListDef HowManyOnTheListDef
.DS 1 .DS 1
PositionOnTheList ; pointer position on the list being displayed ;PositionOnTheList ; pointer position on the list being displayed
.DS 1 ; .DS 1
LastWeapon LastWeapon
; number of the last previously purchased weapon ; number of the last previously purchased weapon
; it is necessary when after purchase some weapon ; it is necessary when after purchase some weapon
@@ -271,29 +308,28 @@ LastWeapon
; and the cursor must be placed elsewhere ; and the cursor must be placed elsewhere
.DS 1 .DS 1
WhichList ; list currently on the screen WhichList ; list currently on the screen
; (0-offensive, 1-defensive) ; (0-offensive, %10000000 - defensive (check with bit:bmi for defensives)
.DS 1
OffsetDL1 ; offset of the list screen (how many lines)....
.DS 1 .DS 1
;OffsetDL1 .DS 1 ; offset of the list screen (how many lines)....
;---------------------------------------------------- ;----------------------------------------------------
;mark the level ;mark the level
PositionInName ; cursor position in name of the player when name input PositionInName ; cursor position in name of the player when name input
.DS 1 .DS 1
DifficultyLevel ; Difficulty Level (human/cpu) ;DifficultyLevel .DS 1 ; Difficulty Level (human/cpu)
.DS 1
;---------------------------------------------------- ;----------------------------------------------------
;displaydecimal ;displaydecimal
decimal .DS 2 ;decimal .DS 2
decimalresult .DS 4 decimalresult .DS 5
;xmissile ;xmissile
ExplosionRadius .DS 2 ;because when adding in xdraw it is double byte ;ExplosionRadius .DS 2 ;because when adding in xdraw it is double byte
;round ;round
CurrentRoundNr .DS 1 CurrentRoundNr .DS 1
FallDown1 .DS 1 ;FallDown2 .DS 1
FallDown2 .DS 1
;leapfrog ;leapfrog
LeapFrogAngle .DS 1 LeapFrogAngle .DS 1
;laser ;laser
@@ -306,17 +342,17 @@ LaserCoordinate .DS 8 ; 2,2,2,2
; from $30 the defensive weapons begin ; from $30 the defensive weapons begin
TanksWeapons TanksWeapons
TanksWeapon1 TanksWeapon1
.DS [64] .DS [last_defensive_____ - first_offensive____ +1]
TanksWeapon2 TanksWeapon2
.DS [64] .DS [last_defensive_____ - first_offensive____ +1]
TanksWeapon3 TanksWeapon3
.DS [64] .DS [last_defensive_____ - first_offensive____ +1]
TanksWeapon4 TanksWeapon4
.DS [64] .DS [last_defensive_____ - first_offensive____ +1]
TanksWeapon5 TanksWeapon5
.DS [64] .DS [last_defensive_____ - first_offensive____ +1]
TanksWeapon6 TanksWeapon6
.DS [64] .DS [last_defensive_____ - first_offensive____ +1]
mountaintable ;table of mountains (size=screenwidth) mountaintable ;table of mountains (size=screenwidth)
.DS [screenwidth] .DS [screenwidth]
@@ -326,10 +362,6 @@ mountaintable2 ;table of mountains (size=screenwidth)
.DS 1 ; additional byte for fallout (sometimes 1 pixel) .DS 1 ; additional byte for fallout (sometimes 1 pixel)
MountaintableEnd ;good for table clearing MountaintableEnd ;good for table clearing
;---------------------------------------------------- ;----------------------------------------------------
TextPositionX .DS 2
TextPositionY .DS 1
TextAddress .DS 2
TextCounter .DS 1
TextNumberOff .DS 1 TextNumberOff .DS 1
;-------------- ;--------------
TankTempY TankTempY
@@ -339,21 +371,26 @@ TankTempY
;---------------------------------------------------- ;----------------------------------------------------
singleRoundVars singleRoundVars
;-------------- ;--------------
escFlag .ds 1 ;escFlag .ds 1 ; 0 - Esc or O not pressed, $80 - Esc pressed, $40 - O pressed
;-------------- ;--------------
CurrentResult CurrentResult
.DS 1 .DS 1
;-------------- ;--------------
AngleTable ;Angle of the barrel of each tank during the round
.DS MaxPlayers
EndOfTheBarrelX
.ds 2
EndOfTheBarrelY
.ds 1
;----------------------------------------------------
previousAngle previousAngle
.DS [MaxPlayers] .DS MaxPlayers
previousEnergyL previousEnergyL
.DS [MaxPlayers] .DS MaxPlayers
previousLeftRange previousLeftRange
.DS [MaxPlayers] .DS MaxPlayers
previousEnergyH previousEnergyH
.DS [MaxPlayers] .DS MaxPlayers
previousRightAngle
.DS [MaxPlayers]
RandBoundaryLow RandBoundaryLow
.ds 2 .ds 2
RandBoundaryHigh RandBoundaryHigh
@@ -364,35 +401,67 @@ singleRoundVarsEnd
;---------------------------------------------------- ;----------------------------------------------------
; 4x4 texts ; 4x4 texts
;---------------------------------------------------- ;----------------------------------------------------
LineAddress4x4 ;LineAddress4x4 .DS 2
.DS 2 LineCharNr .DS 1
LineCharNr ;LineXdraw .DS 2
.DS 1 ;LineYdraw .DS 1
LineXdraw
.DS 2
LineYdraw
.DS 1
;----------- ;-----------
ResultX
.DS 2
ResultY
.DS 1
ResultOfTankNr ResultOfTankNr
.DS 1 .DS 1
;---------------------------------------------------- ;----------------------------------------------------
;PutChar4x4 ;PutChar4x4
;---------------------------------------------------- ;----------------------------------------------------
LoopCounter4x4 .DS 1
y4x4 .DS 1
StoreA4x4 .DS 1
Xcounter4x4 .DS 1
nibbler4x4 .DS 1 nibbler4x4 .DS 1
CharCode4x4 .DS 1 CharCode4x4 .DS 1
plot4x4color .DS 1 ;1-white, 0-background ;plot4x4color .DS 1 ;1-white, 0-background
; This is moved from display.asm to be easier to relocate
ListOfWeapons
; 0123456789012345678901234567890123456789
; :number_of_offensives dta d" "
;:32 dta d" "
.ds 32*32
ListOfWeapons1End
ListOfDefensiveWeapons
; :number_of_defensives dta d" "
;:16 dta d" "
.ds 16*32
ListOfDefensiveWeaponsEnd ;constant useful when clearing
track_variables
trackn_db .ds TRACKS
trackn_hb .ds TRACKS
trackn_idx .ds TRACKS
trackn_pause .ds TRACKS
trackn_note .ds TRACKS
trackn_volume .ds TRACKS
trackn_distor .ds TRACKS
trackn_shiftfrq .ds TRACKS
trackn_instrx2 .ds TRACKS
trackn_instrdb .ds TRACKS
trackn_instrhb .ds TRACKS
trackn_instridx .ds TRACKS
trackn_instrlen .ds TRACKS
trackn_instrlop .ds TRACKS
trackn_instrreachend .ds TRACKS
trackn_volumeslidedepth .ds TRACKS
trackn_volumeslidevalue .ds TRACKS
trackn_effdelay .ds TRACKS
trackn_effvibratoa .ds TRACKS
trackn_effshift .ds TRACKS
trackn_tabletypespeed .ds TRACKS
trackn_tablenote .ds TRACKS
trackn_tablea .ds TRACKS
trackn_tableend .ds TRACKS
trackn_tablelop .ds TRACKS
trackn_tablespeeda .ds TRACKS
trackn_command .ds TRACKS
trackn_filter .ds TRACKS
trackn_audf .ds TRACKS
trackn_audc .ds TRACKS
trackn_audctl .ds TRACKS
v_aspeed .ds 1
track_endvariables
variablesEnd variablesEnd
;---------------------------------------------------- ;----------------------------------------------------
+1393 -840
View File
File diff suppressed because it is too large Load Diff