Compare commits

...

436 Commits

Author SHA1 Message Date
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
Pecusx d4e616abbb Batter manuals 2022-09-04 20:28:50 +02: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
Pirx acd3a6abe6 Merge pull request #101 from pkali/develop
build 146
2022-07-03 23:36:12 -04:00
Pirx bb70b2495a buld 146 2022-07-03 23:35:06 -04:00
Pirx 39433a8cf4 tosser upgr and deathshead fix 2022-07-03 22:35:47 -04:00
Pirx 1765489474 weapon price balance 2022-07-03 14:36:16 -04:00
Pirx 97c01d2c61 Shooter fix 2022-07-03 14:01:51 -04:00
Pirx 3fb83583c3 AI fix and optimization 2022-07-03 13:22:44 -04:00
Pecusx 2a5595f3c9 New AI tank - Toosser and angle bugfixex 2022-07-03 16:43:43 +02:00
Pecusx a860c4dfa1 AI decreases defensive weapon used 2022-07-03 15:34:23 +02:00
Pecusx 7bd7105374 AI uses defensives 2022-07-03 15:16:58 +02:00
Pirx 00099f4c27 tank font fix 2022-07-03 00:09:23 -04:00
Pirx 4caed19cd1 new angles #87 2022-07-03 00:05:03 -04:00
Pirx e9a59b1475 sensible angles work! 2022-07-03 00:02:06 -04:00
Pecusx 011364cbeb Parachute is only shown if tank is really falling 2022-07-02 15:07:01 +02:00
Pecusx 279a47b29f Dead tanks don't fall :)
Lonely parachute bug.
2022-07-02 14:47:27 +02:00
Pirx 6ece26237c laser update 2022-07-02 08:20:32 -04:00
Pecusx 3d159f8439 Small parachute bug in falling procedure 2022-07-02 11:34:53 +02:00
Pecusx 6ac4bbe0cd Falling sfx only if Tank really falls 2022-07-02 11:29:18 +02:00
Pecusx 4583641207 Completly new tank falling procedure (70bytes saved!)
And now the tank loses 2 units of energy per pixel (vertical only)
2022-07-02 00:47:56 +02:00
Pecusx 4a32abdc83 New method of checking the tank falling direction.
New table "SlideLeftTable" (8 bytes) instead "WhereToSlideTable" (256 bytes)
But procedure is not optimal - we need to write a new version.

And now, falling diagonally doesn't take any more energy.
2022-06-28 20:01:24 +02:00
Pecusx d5c1e1e397 Battery activation bug
If you had a different defensive weapon, its energy was gone.
2022-06-28 09:02:58 +02:00
Pirx 4fe360d63c Merge pull request #100 from pkali/develop
build 145
2022-06-26 22:19:22 -04:00
Pirx c9ceb58117 build 145 2022-06-26 22:18:16 -04:00
Pirx e10514debd forgot about rounds... #76 2022-06-26 21:48:46 -04:00
Pirx 2907fe7a91 whiter color of pale #76 2022-06-26 21:26:22 -04:00
Pirx a0d5d22e74 small musique fixum-dyrdum 2022-06-26 11:21:35 -04:00
Pirx 1ea62798c8 sonico a musica nueva 2022-06-25 18:02:50 -04:00
Pirx 42facad64e wrong inventory position fix 2022-06-25 10:29:12 -04:00
Pecusx 2c98d73877 Nuclear Winter optimization - we save 4 bytes
:)
2022-06-22 17:28:31 +02:00
Pecusx 4ae4403448 Battery added! 2022-06-21 13:11:07 +02:00
Pecusx 242bc4586c Optimization - we save 15 bytes 2022-06-21 12:51:49 +02:00
Pecusx eda0e65189 Small bugfix 2022-06-21 12:38:17 +02:00
Pecusx 8613854f80 cosmetics 2022-06-21 11:34:05 +02:00
Pecusx 1c277b0e6f Nuclear Winter added. 2022-06-21 11:25:45 +02:00
Pecusx 623c9c9583 White Flag works! 2022-06-20 21:01:01 +02:00
Pecusx ce55bf0d97 Wrong parachute symbol :) 2022-06-20 14:34:36 +02:00
Pecusx 537f88e4c6 Deactivate defensive weapon now possible.
If you activate previously activated White Flag, you deactivate defensive weapons.
2022-06-20 14:07:53 +02:00
Pecusx 9aaa4fec69 Displaying White Flag and inverse reaction to fire button. 2022-06-20 13:23:36 +02:00
Pecusx 67b5dfb110 Strong Parachute (with energy) added!
and defensive (really all) weapons indexes (numbers) as constans.
2022-06-20 10:43:16 +02:00
Pirx 4200e60d47 Merge pull request #96 from pkali/develop
Develop
2022-06-19 20:23:25 -04:00
Pirx 7324203925 README 2022-06-19 20:23:05 -04:00
Pirx 634c2f83e9 README 2022-06-19 20:21:14 -04:00
Pirx 18f88705e5 Merge pull request #95 from pkali/develop
new xex
2022-06-19 20:05:32 -04:00
Pirx fe6bd17a66 new xex 2022-06-19 20:04:08 -04:00
Pirx 1d8f26d562 Merge pull request #94 from pkali/develop
inflation and supply chains distuption causes weapon price increase
2022-06-19 20:01:20 -04:00
Pirx 2bb8a743e1 inflation and supply chains distuption causes weapon price increase 2022-06-19 20:00:54 -04:00
Pirx 708a7b4aa9 Merge pull request #93 from pkali/develop
Develop
2022-06-19 14:43:03 -04:00
Pirx 8153670711 build 144 2022-06-19 14:42:24 -04:00
Pirx ab140ed5ca short fire - inventory, long fire - fire #75 2022-06-19 14:22:54 -04:00
Pirx cc3e2d1845 power timer 1/2s to speed up #75 2022-06-19 12:02:48 -04:00
Pirx 98e866abdd elaborate fix of a simple issue... #92 2022-06-18 20:17:16 -04:00
Pirx ffa748fb68 font update #26 2022-06-18 11:22:04 -04:00
Pirx de047779ce looks like inventory works... #26 2022-06-18 10:40:00 -04:00
Pirx 3c685b2811 infinite money when purchasing Baby Missile fix #26 2022-06-18 07:07:24 -04:00
Pecusx c86dcd7c59 cosmetics 2022-06-16 18:34:00 +02:00
Pecusx f924868459 Better (not best) collision with tank check
.... and corrected two defensive weapon numbers - Mag Deflector and Auto Defence are working.
2022-06-16 17:52:34 +02:00
Pirx 2992bd40b3 no shoot after inventory select #26 2022-06-15 07:48:57 -04:00
Pirx b19d218670 decrease activated defensives #26 2022-06-15 00:11:01 -04:00
Pirx 8ab450ff48 WIP: almost working... #26 2022-06-14 10:33:01 -04:00
Pirx 5e2ab7f206 defensives activate #26 2022-06-14 09:26:38 -04:00
Pecusx cd69bf22db Shield energy table added.
... for easier activation.
Defensive weapon numbering revised.
2022-06-13 09:18:05 +02:00
Pirx ff8c4d9329 number of shells in inventory #26 2022-06-13 01:35:57 -04:00
Pirx 83e128a1b5 no prices in inventory #26 2022-06-13 01:21:27 -04:00
Pirx cc8688263a Purchase/Activate texts in shop #26 2022-06-12 10:18:13 -04:00
Pirx b5bf6ecc30 joy left change offensive/deffensive #26 2022-06-12 09:48:10 -04:00
Pirx e2c85c98c2 inventory offensive weapons selection #26 2022-06-12 00:39:19 -04:00
Pirx c47a22a833 wip: purchase does not show active weapon #26 2022-06-11 20:08:25 -04:00
Pirx cd4275226a wip: inventory shows active weapon #26 2022-06-11 18:08:25 -04:00
Pirx cb270be865 wip: inventory shows weapons #26 2022-06-11 14:53:28 -04:00
Pirx 7df1d5eff9 isInventory var 2022-06-11 13:08:49 -04:00
Pirx c3f6e2399d to be as it was 2022-06-11 10:04:29 -04:00
Pirx 598860b7d0 infinite purchases fix #26 2022-06-11 09:43:08 -04:00
Pirx c1aa177767 WIP: press I for inventory #26 2022-06-11 05:51:13 -04:00
Pecusx eb7f6369de Collision with tank now checks the shield
We must rewvite CheckCollisionWithTank procedure !!!!
In future :)
2022-06-10 19:37:52 +02:00
Pecusx 41900d7671 Mag Deflector added
Only for test.
Now all players has active Mag Deflector with energy (99) before game.
2022-06-10 18:48:19 +02:00
Pecusx 6a6689b9b7 Auto Defence added
Only for test.
Now all players has active Auto Defence with energy (99) before game.
2022-06-10 11:13:20 +02:00
Pecusx 836c67afcf cosmetics 2022-06-09 20:32:37 +02:00
Pecusx 1b983b8d92 Index of hit tank in HitFlag
For future use.
Easier to check whether the hit tank or ground.
2022-06-09 18:06:31 +02:00
Pecusx 53e9f89012 Shield "horns" drawing.
For future use (defensive but aggressive :) ) weapons.
2022-06-09 14:40:48 +02:00
Pecusx cf40bf905d Slight change. 2022-06-09 12:57:50 +02:00
Pecusx 91b613f166 Shield witch parachute added
Only for test.
Now all players has active Shield with energy (99) and witch parachute before game.
Alo added display name of active defensive weapon on statusbar, and some fixes.
2022-06-09 09:46:09 +02:00
Pecusx eace9eb5cf Shield with energy added
Only for test.
Now all players has active Shield with energy (99) before game.
2022-06-08 21:52:19 +02:00
Pecusx 4c6b56a1e2 Now shield is displayed on a tank without PM
Small bugfix.
2022-06-08 14:40:29 +02:00
Pecusx 7b86fc98cd Simple shield added
Only for test.
Now all players has active Shield before game.
2022-06-08 11:14:03 +02:00
Pecusx 186cacf5ba The first attempt at handling defensive weapons
Only for test.
Now all players has active Parachute berore round.
2022-06-07 10:25:23 +02:00
Pecusx 031416b8e6 "Underground" shot fixed. 2022-06-06 17:59:43 +02:00
Pecusx 1394524a26 FunkyBomb and LeapFrog bugfix #89
Problem was due to the better accuracy of the collision with tank check procedure.
2022-06-06 09:42:22 +02:00
Pirx ea6c621d79 Merge pull request #90 from pkali/develop
build 143
2022-06-06 00:23:46 -04:00
Pirx afd81c08c3 build 143 2022-06-06 00:23:02 -04:00
Pirx a9703609b6 bad tanksequence fix #47 2022-06-06 00:01:02 -04:00
Pirx d8bfda28a0 code size opts 2022-06-05 21:36:38 -04:00
Pirx 743114fd0d some code size optimizations 2022-06-05 09:33:28 -04:00
Pirx 079abc062f done for now #74 2022-06-05 03:17:34 -04:00
Pirx 853a597daf almost done #74 2022-06-05 02:40:07 -04:00
Pirx 1eadc7f63e minor edits 2022-06-04 17:54:15 -04:00
Pirx 081cf282c8 forgot about MIRV #82 2022-06-04 16:15:43 -04:00
Pirx 4c3203854c letting winds #82 2022-06-04 16:07:01 -04:00
Pecusx bf11a9967f Atract mode only for human players 2022-06-03 21:46:04 +02:00
Pecusx 0d7403d1c0 Laser is working properly.
But why!!!
Where do xdraw and ydraw come from in laser procedure!
2022-06-03 11:59:11 +02:00
Pecusx 777f5c341a Additional check for 0 bullets in DecreaseWeapon proc #56 2022-06-03 10:48:08 +02:00
Pecusx 8f0bd8ca81 Liquid Dirt bug and little optimization 2022-06-03 10:30:02 +02:00
Pecusx c12049d0d7 Sometimes no explosion - solved!
A small change after a long analysis of the procedures "Fly" and "draw" - very hard work :)
2022-06-02 23:38:52 +02:00
Pecusx 6013986e51 Minor changes 2022-06-02 21:40:09 +02:00
Pecusx 0fbe3de569 Improved checking collision with the tank.
And other optimizations.
2022-06-02 15:01:49 +02:00
Pecusx 9569b3365a First attempt to 2 bytes Y
Not everywhere yet, but in the most important procedures.
2022-06-02 10:01:06 +02:00
Pecusx 6d9b2907c5 Flight procedure optimization
3 bytes variable (Result) now is unnecessary.
The code is a bit shorter.
2022-06-02 09:12:00 +02:00
Pecusx 94e6caebed MIRV bullets over the screen now are visible 2022-06-01 11:44:53 +02:00
Pecusx 532ee7dc88 MIRV hit procedure completely rewritten.
Now wthout bugs :) and much clearer.
2022-06-01 11:19:14 +02:00
Pecusx 17e653b37d Flashing before tank explodes #84 2022-05-31 10:44:47 +02:00
Pecusx bef3c0f080 MIRV bugfix #66
I think so.
2022-05-30 22:41:45 +02:00
Pirx 7ff3858433 Merge pull request #83 from pkali/develop
build 142
2022-05-30 09:05:04 -04:00
Pirx eae8cb08d8 build 142 2022-05-30 09:04:09 -04:00
Pirx f13d7ac801 death weapons fix 2022-05-30 08:36:30 -04:00
Pecusx 0ddbe41005 Hit one pixel over ground 2022-05-30 14:34:58 +02:00
Pecusx 7cd31450c7 Better ground hit handling and small bugfix
But.... no effect in #66 :(
2022-05-30 14:17:46 +02:00
Pirx a556e50e53 seppuku fix 2022-05-30 07:12:10 -04:00
Pirx 9f1720e970 work in progress... 2022-05-30 05:54:00 -04:00
Pirx 2df28af79c WIP: hunting for #47 2022-05-29 08:00:23 -04:00
Pirx defbde5b87 cosmetics 2022-05-29 00:25:19 -04:00
Pirx 0820124f9f LimitForce added #70 2022-05-28 21:43:55 -04:00
Pirx aa74cf133b draw jmp(indirect) ellimination 2022-05-28 13:42:42 -04:00
Pirx 2c640c370a Shooter shooting too strong #70 2022-05-28 09:42:38 -04:00
Pirx 636e121bf7 funkybomb traces deleted #5 2022-05-28 08:38:46 -04:00
Pirx 3c1b0a02aa cosmetic edits 2022-05-28 01:50:59 -04:00
Pirx be5652074a font4x4 xy check removed 2022-05-27 21:40:15 -04:00
Pirx a425500d4e seppuku turbo mode 2022-05-27 21:26:18 -04:00
Pirx a721b82944 chmod fix 2022-05-27 21:12:46 -04:00
Pirx 762b56567b chmod fix 2022-05-27 21:10:35 -04:00
Pecusx b11d22d1bb Correct x position of 4x4 characters 2022-05-26 09:43:12 +02:00
Pirx c68ba09103 blinking seppuku 2022-05-25 20:47:09 -04:00
Pecusx e399754e0c One unified procedure for 4x4 fonts 2022-05-25 20:36:15 +02:00
Pecusx 381495fb5a Sepuku error :)
4x4 texts were drawn 4 pixels too high
2022-05-25 19:31:09 +02:00
Pecusx 17b57d1ed2 Better (and faster!) 4x4 char handling.
New PutChar4x4FULL proc.
2022-05-25 12:05:24 +02:00
Pecusx 2fb04cabff Description of the EndOfTheBarrel arrays.
Description only. No code changes.
2022-05-23 08:59:45 +02:00
Pirx 457af6d6b9 Merge pull request #78 from pkali/develop
README updt
2022-05-22 22:01:11 -04:00
Pirx bdf0f10cc0 README updt 2022-05-22 22:00:24 -04:00
Pirx 347e59d5a2 Merge pull request #77 from pkali/develop
build 141
2022-05-22 21:55:20 -04:00
Pirx 61ff5e47e1 build 141 2022-05-22 21:54:34 -04:00
Pirx 2d8c71e9ff smalls and #13 2022-05-22 21:23:56 -04:00
Pirx fd1a61c1f9 display fix 2022-05-22 14:14:23 -04:00
Pecusx 571b3c137e Revert "First attempt to 2 bytes Y"
This reverts commit 7e24e44f1b.
2022-05-22 19:17:17 +02:00
Pecusx bd8ecad2dd Merge branch 'develop' of https://github.com/pkali/scorch_src into develop 2022-05-22 19:11:19 +02:00
Pecusx 7e24e44f1b First attempt to 2 bytes Y 2022-05-22 19:10:52 +02:00
Pirx eb8360dcd0 Merge branch 'develop' of github.com:pkali/scorch_src into develop 2022-05-22 13:09:04 -04:00
Pirx 3d8ec72da0 glich #55 2022-05-22 13:08:42 -04:00
Pecusx 2f099897c7 Cleanup 2022-05-22 18:25:31 +02:00
Pirx 26f82b59c1 code cleanup 2022-05-22 11:25:40 -04:00
Pirx 9a3cf1251f ESC updt #74 2022-05-22 10:59:06 -04:00
Pirx ec5838ebaf ESCape from menus #74 2022-05-22 10:12:52 -04:00
Pirx 491dc2861c speed up when [START] #73 2022-05-22 09:39:17 -04:00
Pirx 5e476eb742 [SHIFT] bug #61 2022-05-21 19:21:42 -04:00
Pirx 661d4776c7 cosinus angle fix #65 2022-05-21 18:50:13 -04:00
Pirx 3701accfc9 glitches when switches #72 2022-05-21 18:29:56 -04:00
Pirx fb54230ea7 white flag #62 2022-05-21 13:19:55 -04:00
Pirx fb86876d9f cos table removed #65 2022-05-21 13:12:54 -04:00
Pirx 80bc302689 too much force for AI #70 2022-05-21 11:20:16 -04:00
Pirx d9645b9c37 post intro glitch fix #67 2022-05-21 08:45:26 -04:00
Pecusx 620bcf5aa8 Small bugfix and optymalisation
Bugfix in drawnountains (now ground 0 is possible: ) )
Otymized flight proc - explosions no wrap around screen - why? :)
2022-05-18 20:00:27 +02:00
Pirx d0a9fb0fbe Merge pull request #60 from pkali/develop
build 140
2022-05-15 23:22:19 -04:00
Pirx 68bf4a9541 build 140 2022-05-15 23:21:47 -04:00
Pecusx 7dd3ecd2bf Merge pull request #59 from pkali/develop
Colors on tanks names screen
2022-05-14 20:33:59 +02:00
Pecusx 08f7680563 Colors on tanks names screen 2022-05-14 20:28:14 +02:00
Pirx d9322221a3 Merge pull request #58 from pkali/develop
master reconciliation
2022-05-14 08:14:25 -04:00
Pirx d766088b66 colors upd+weapon change sfx 2022-05-14 08:13:32 -04:00
Pecusx de5bfab2a8 Tank colors bugfix & new DLI for purchase screen
He, he.
The tank colors were not taken from the table :)
2022-05-13 09:18:50 +02:00
Pecusx 91b39e736b Minor optimizations
LiquidDirt and TypeChar (8x8 on graphics screen - like tanks) are little faster now.
2022-05-12 19:45:42 +02:00
Pecusx 572bee982a Test
I'am in develop branch :)
2022-05-12 19:02:26 +02:00
Pirx b37dc73f52 WIP: colors test 2022-05-12 09:53:56 -04:00
Pecusx 11ddf69de9 Merge branch 'master' of https://github.com/pkali/scorch_src 2022-05-11 19:03:42 +02:00
Pecusx 0ba4594712 Playfield in niverse
Playfield is now drawn in inverse for better color control (in future ;) )
Problems in DLI!
2022-05-11 19:03:35 +02:00
Pirx 8556dfe0d7 joytest for real hardware 2022-05-11 10:51:22 -04:00
Pecusx 860d0917ad Fixed bugs in LiqudDirt and Roller
Correct operation of dirt at the edges of the screen, and now dirt counter is two bytes (more and more dirt is possible).
Correction of the roller's (and LiquidDirtoperation on the right side of the screen. (old stiupid error)
2022-05-09 17:58:07 +02:00
Pecusx 2de2c24373 Very old bug fixed!
In the second (and next) round, the ground was drawn one pixel lower than it should have been.
2022-05-09 11:20:42 +02:00
Pirx a6382c5dc0 README UPDT 2022-05-09 01:32:02 -04:00
46 changed files with 9312 additions and 5061 deletions
+6
View File
@@ -0,0 +1,6 @@
.project
*.bak
scorch.lab
scorch.lst
textproc.lab
textproc.lst
Executable → Regular
View File
+233
View File
@@ -0,0 +1,233 @@
# 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, here you 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
* wrap - the screen "wraps" and projectiles that flew to the right appear on the left side (and vice versa)
* bump - the right and left walls deflect projectiles that want to fly through them
* boxy - just like bump, except that the "ceiling" also reflects projectiles
* 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 - blue, boxy - green.
Select options with cursor keys or a joystick.
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). 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,
* 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,
* 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.
* [SPACE] or joystick button pressed briefly - firing a shot.
* [TAB] or [SELECT] - selection of offensive weapons (this option is not available directly with the joystick - you need to select Inventory).
* [I] 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] - go directly to the defensive weapons activation.
* [M] key - disable/enable background music.
* [S] key - disable/enable effect sounds.
* [START] - speed up some game animations.
* [O] - 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] - immediately force the end of the game (Game Over), just like [O] but without confirmation.
* [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).
## 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 120 104 |
| 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 Dirt 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) and at the same time is the only defensive weapon 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).
Due to the different operations of **MIRV**, defensive weapons **Bouncy Castle** and **Mag Deflector** only use the shielding function when hit by these weapons. In addition, **MIRV** heads do not bounce or fly through sidewalls during descent!
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:
* **Buy me!** - 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 **Buy Me!** price) but also gain. You can get a weapon otherwise not affordable at all!
## 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 |
+234
View File
@@ -0,0 +1,234 @@
# 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 rozgrywwki:
* 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, jecz przy krótkich rozgrywkach warto wybrać większą wartość)
* grawitacja
* maksymalna siła wiatru (wiatr jest losowany na początku każdej z rund, 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ą
* wrap - ekran "zawija się" i pociski, które wyleciały w prawo pojawiają się z lewej strony (i odwrotnie)
* bump - prawa i lewa ściana odbijają pociski, które chcą przez nie przelecieć
* boxy - tak jak bump, tyle że "sufit" także odbija pociski
* 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 - niebieski, boxy - zielony.
Wybór opcji klawiszami kursora lub joystickiem.
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 joysticjiem wybrać czy danym czołgiem będzie kierował człowiek (opcja HUMAN) czy też kompute (pozostałe opcje). 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 każdego z nich.
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
* 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
* w nawiasie nazwę aktywnej broni defensywnej - jeśli jest jakaś aktywowana przez gracz
Tutaj klawiszologia jest prosta, klawisze kursora lub joystick: lewo/prawo - zmiana kąta nachylenia lufy, góra/dół - zmiana ustawienia siły strzału.
* [SPACJA] lub przycisk joysticka naciśnięte krótko - oddanie strzału
* [TAB] lub [SELECT]- wybór broni ofensywnej (ta opcja nie jest dostępna bezpośrednio joystickiem - trzeba wybrać Inventory)
* Klawisz [I] 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ą.
* Klawisz [A] lub [OPTION]- bezpośrednie przejście na ekran Inventory aktywacji broni defensywnych.
* Klawisz [M] - wyłączenie/włączenie muzyki w tle
* Klawisz [S] - wyłączenie/włączenie dźwięków efektów.
* [START] - przyspiesza/pomimja niektóre animacje w grze
* Klawisz [O] - 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] - natychmiastowe wymuszenie zakończenia gry (Game Over), tak jak [O] ale bez potwierdzenia.
* [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).
## 5. Zasady gry - bronie ofensywne
### Energia czołgów
- Na początku każdej rundy każdy czołg ma 99 jesnostek 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)`
`if money <0 then 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 jst dokładnie w centralny punkt czołgu `EnergyDecrease` otrzymuje maksymalną wartość dla danej broni, a za każdym pikselem odległości od centrum czołgu wartość ta jest zmniejszana o 8.
Przykładowo jeśli strał oddany za pomocą broni Baby Missile trafi idelanie w centum czołgu to straci on dokładnie 88 jednostek energii (plus to co straci spadając po eksplozji).
W przypadku tafienia tą samą bronią w odległości 10ciu pikseli od centrum czołgu strata ta będzie wynośił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 120 104 |
| 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 Dirt 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 deaktywować. 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) i jednocześnie jest to jedyna broń defensywna, która nie deaktywuje 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 deaktywuje 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 deaktywuje się i dalej zmniejszana jest energia czołgu (tutaj już standardowo - 2 jednoski 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 deaktywuje 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 deaktywuje 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 deaktywuje 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 fanie 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 deaktywować).
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**. **Auto Defense** 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' :) :
* **Buy me!** - tej 'broni' nie można używać w rozgrywce. Jej zakup powoduje wylosowanie jesdnej z broni ofensywnych lub (żadziej) 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 **Buy Me!** 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ć!
## 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 spadniej 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 |
Executable → Regular
+250 -17
View File
@@ -8,16 +8,18 @@ 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:
Kaz - splash screen, ideas - Kaz - splash screen, ideas
Adam - font, ideas - Miker (@mikerro) - game sfx, ideas, QA
Emkay - splash screen music - Adam (@6502adam) - font, ideas, QA
Miker - game sfx, ideas - Bocianu (@bocianu) - important ideas, FujiNet implementation, QA
Bocianu - important ideas, FujiNet implementation - Emkay - splash screen music
- Fox (@pfusik) - plot and point optimization
You can contact us at pecus@poczta.fm or pirx@5oft.pl QA: Probabilitydragon, KrzysRog, Beeblebrox, EnderDude, lopezpb, Dracon, brad-colbert, archon800, Shaggy the Atarian
home page of this project is https://github.com/pkali/scorch_src
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`
@@ -31,25 +33,256 @@ Game source code is split into 5+4 parts:
- 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. - definitions.asm - label definitions, moved to make it work better with Altirra debug (it doesn't).
We were trying to use as much macros and pseudo-ops as possible. We were trying to use macros, pseudo-ops and simple graphics primitives as much as possible.
They are defined in atari.hea and macro.hea files together with many atari constants. This way it should be relatively easy to port this code to e.g. C64 This way it should be relatively easy to port this code to e.g. C64
After those N years of working on this piece of code we are sure it would be much wiser to write it in C, Action! or MadPascal but on the other hand it is so much fun to type 150 chars where all you want to have y=ax+b :) After those N years of working on this piece of code we are sure it would be much wiser to write it in C, Action! or MadPascal but on the other hand it is so much fun to type 150 chars where all you want to have y=a*x+b :)
Originally most variables were in Polish, comments were sparse, but we wanted to release this piece of code to public. Originally most variables were in Polish, comments were sparse, but we wanted to release this piece of code to public.
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: ## Changes:
###### Build 138 ###### 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.
###### 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
2022-07-03
Super heavy rewrite build.
Not much changed visually since the last build, but really large parts of the code were rewritten, optimized and improved. A fresh swath of buggies certainly introduced, too.
- completely new tank falling routine by @Pecusx - over 300 bytes saved, complexity reduced, more just energy deduction when falling.
- 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.
- New AI opponent - Tosser! Not much better than Poolshark, but still beats sharks most of the time.
- 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 :]
- Few small parachute-related bugs fixed
- Death's Head bug fix
Issues closed:
- https://github.com/pkali/scorch_src/issues/87 Angles are reasonable now. PROFIT!!!
###### Build 145
2022-06-26
Possibly last round of weapon additions!
@Pecusx added
- working White Flag -- it is a way to give up while not making opponents richer!
- Battery - a must for every tank with low energy.
- Strong Parachute - like a normal parachute, but stronger (it has energy and can work more than once)
- Nuclear Winter - a quick and efficient solution to global worming, err, warning, WARMING!
@mikerro added new SFX and in-game-tunes.
- Pressing [S] turns on/off SFX (when aiming). Pressing [M] turns on/off in-game tunes.
Tickets closed:
- https://github.com/pkali/scorch_src/issues/54 - holding a joystick up or down speeds up force change. It makes playing with a joystick much nicer.
- https://github.com/pkali/scorch_src/issues/76 - a beginning of visual tweaks by @6502adam
- infinite defensive weapons purchase bug fixed, to the chagrin of some...
###### Build 144
2022-06-19
Father's day release comes with the most anticipated new feature: defensive weapons. Thanks to @Pecus we have 5 completely new weapons and a more reasonably working parachute. The stub of the instruction manual describing these weapons is available here: https://github.com/pkali/scorch_src/wiki/Instruction-manual.
The new inventory system has been added. Call it by pressing the "I" key or short-pressing fire. Select the weapon to use by moving the joystick or cursor keys right. Switch between offensive and defensive weapons by moving the joystick left. Fire/escape to quit inventory.
Another significant playability change is #54 - it is not finished yet, but keeping the joystick up or down makes force increase/decrease faster. Also - short press of fire calls Inventory, long press fires the shell. The timings are experimental, please let me know if this needs a modification/improvement.
Tickets closed:
* https://github.com/pkali/scorch_src/issues/92 - less unnecessary cleaning of the offensive texts
* https://github.com/pkali/scorch_src/issues/89 - improved collisions with tank
* https://github.com/pkali/scorch_src/issues/71 - ditto
* https://github.com/pkali/scorch_src/issues/11, https://github.com/pkali/scorch_src/issues/26, https://github.com/pkali/scorch_src/issues/8, https://github.com/pkali/scorch_src/issues/20 - new inventory system
###### Build 143
2022-06-05
Rewrite build. We redone several important parts of the game to allow for bug fixes and requested features. Generally it was a great success, but some new bugs appeared. This build is nice for the eye, but beware, no mercy for testers again :)
Only visible changes listed, because you are possibly not as excited as we are for the new Flight routine and ground collisions by @Pecusx.
- https://github.com/pkali/scorch_src/issues/84, https://github.com/pkali/scorch_src/issues/63 - tanks now say good bye properly!
- https://github.com/pkali/scorch_src/issues/74 - Press [ESC] to quit the game at any point, with a confirmation when the round has already started. Please note the keyboard is not checked all the time, so press it for a while, especially when AI tanks are ru(i/n)ning the show.
- https://github.com/pkali/scorch_src/issues/56 - there should be no occurrences of frivolous weapon purchases. Please report all tanks getting their munitions from uncertified sources!
- https://github.com/pkali/scorch_src/issues/47 - It seems that the bad sequence of turns has been ameliorated. Fix is trivial, finding the culprit - far from it. Please pay special attention to fairness of shooting in case the fix is still longing for the fjords.
- ATTRACT mode works how it should - screensaver saves screen only when HUMAN should input something.
###### Build 142
2022-05-30
Late build. The bugs we tried to squelch turned out to be more difficult than usual. Some progress has been made though even if it is not yet visible.
- 4x4 font rewritten by @Pecusx as a prep for Y standarization. It makes the messages to appear faster. This is a good change.
- https://github.com/pkali/scorch_src/issues/5 and #80 fixed (again) - no funkybomb traces staying on the screen
- https://github.com/pkali/scorch_src/issues/70 too strong Shooters fixed
- https://github.com/pkali/scorch_src/issues/63 - tank say goodbye when (mostly) visible
- several other small changes and improvements that will pay off in the following releases.
###### Build 141
2022-05-22
Debug build. Thanks to all testers for finding numerous bugs. We tried to fix some of them and we have introduced some new for your enjoyment.
- https://github.com/pkali/scorch_src/issues/73 Fast forward. Press [START] to speed up the game where it can be sped up. Not in many places, mind you.
- https://github.com/pkali/scorch_src/issues/72 Screen glitches improved
- https://github.com/pkali/scorch_src/issues/70 AI shoot with more force than their energy allows. We might still have to revise this one
- https://github.com/pkali/scorch_src/issues/69 Explosions wrapping around the screen
- https://github.com/pkali/scorch_src/issues/67 Screen glitches after intro
- https://github.com/pkali/scorch_src/issues/65 Saved ~90 bytes by removing cosinus table
- https://github.com/pkali/scorch_src/issues/62 Empty list of defensive weapons gets corrupted. Plunged it with a new defensive weapon - "White Flag". Honor of the tank crew prohibits them from buying it (yet)
- https://github.com/pkali/scorch_src/issues/61 [SHIFT] was repeating the last key
- https://github.com/pkali/scorch_src/issues/57 Fire too sensitive on a real machine. Switched to shadow registers. First recorded use of Atari OS :O
- https://github.com/pkali/scorch_src/issues/55 Glitches in the status bar. This one was surprisingly tough.
###### Build 140
2022-05-15
Huge internal changes by @Pecusx. The whole game screen has been inverted - ground is now background color, "sky" and empty areas are in fact pixels. This allowed for introducing better tank colorization, fully devised and lead by Adam. The process started and results are already promising - the colors of tanks and the status bar are closer. We might get even better ones in the next builds.
- few new sfx added (end of round, weapon change, soil eating weapons)
- added colors to tank name and level selection screen
- Bug https://github.com/pkali/scorch_src/issues/57 possibly alleviated by using TRIG0S instead of TRIG0. Please test - it did not show for me.
Other unlisted minor bugs and typos fixed.
"Nightly" version moved to `develop` branch. `master` will be updated with stablish and playablish builds only.
###### Build 139
2022-05-09 2022-05-09
The post midnight release with great, heavy new features: The post midnight release with great, heavy new features:
- https://github.com/pkali/scorch_src/issues/48, https://github.com/pkali/scorch_src/issues/10 - thanks to Miker we have a bunch of fresh sound effects. Not everything is perfectly implemented, but the game definitely got nicer! Thank you again Miker! - https://github.com/pkali/scorch_src/issues/48, https://github.com/pkali/scorch_src/issues/10 - thanks to @mikerro we have a bunch of fresh sound effects. Not everything is perfectly implemented, but the game definitely got nicer! Thank you again Miker!
- https://github.com/pkali/scorch_src/issues/42 New weapon - Liquid Dirt by Pecus. Try it from directly from the weapon store! - https://github.com/pkali/scorch_src/issues/42 New weapon - Liquid Dirt by Pecus. Try it from directly from the weapon store!
- (fix) https://github.com/pkali/scorch_src/issues/53 - non-existing weapons are not displayed. This makes the defense menu empty when you are poor, but it is still better than the old way with "$0" prices - (fix) https://github.com/pkali/scorch_src/issues/53 - non-existing weapons are not displayed. This makes the defense menu empty when you are poor, but it is still better than the old way with "$0" prices
- (fix) https://github.com/pkali/scorch_src/issues/49 - seppuku should always kill now - (fix) https://github.com/pkali/scorch_src/issues/49 - seppuku should always kill now
@@ -91,7 +324,7 @@ Other small fixes:
2022-04-10 2022-04-10
- https://github.com/pkali/scorch_src/issues/34 - plot pointer visible only when missile is out of the screen - https://github.com/pkali/scorch_src/issues/34 - plot pointer visible only when missile is out of the screen
- https://github.com/pkali/scorch_src/issues/33 - Poor AIs do not purchase non-working weapons - https://github.com/pkali/scorch_src/issues/33 - Poor AIs do not purchase non-working weapons
- https://github.com/pkali/scorch_src/issues/32 - Basic is turned off right on the beginning of loading. Dracon reported problems with running the game in Altirra, this was the best idea I had about it. Maybe next will be removing from zero page LZSS routine by @dmsc - https://github.com/pkali/scorch_src/issues/32 - Basic is turned off right on the beginning of loading. Dracon reported problems with running the game in Altirra, this was the best idea I had about it. Maybe next will be removing LZSS routine by @dmsc from zero page
- https://github.com/pkali/scorch_src/issues/31 - STA WSYNC removed from missile flight delay - https://github.com/pkali/scorch_src/issues/31 - STA WSYNC removed from missile flight delay
- https://github.com/pkali/scorch_src/issues/30 - player level remembered between rounds, thx @KrzysRog - https://github.com/pkali/scorch_src/issues/30 - player level remembered between rounds, thx @KrzysRog
- https://github.com/pkali/scorch_src/issues/5 - funkybomb smoke stays on the edges of the screen - https://github.com/pkali/scorch_src/issues/5 - funkybomb smoke stays on the edges of the screen
@@ -102,7 +335,7 @@ Other small fixes:
- enhancement: https://github.com/pkali/scorch_src/issues/15 Add player colors to purchase screen. Still room to improvement! - enhancement: https://github.com/pkali/scorch_src/issues/15 Add player colors to purchase screen. Still room to improvement!
- enhancement: https://github.com/pkali/scorch_src/issues/22 Redesign information panel (top 2 lines of the game screen). Now game might make some sense for a newcomer :) - enhancement: https://github.com/pkali/scorch_src/issues/22 Redesign information panel (top 2 lines of the game screen). Now game might make some sense for a newcomer :)
- change: https://github.com/pkali/scorch_src/issues/28 remove white lines around out-of-the-screen point tracker. Now it is visible and looks better! - change: https://github.com/pkali/scorch_src/issues/28 remove white lines around out-of-the-screen point tracker. Now it is visible and looks better!
- enhancement: https://github.com/pkali/scorch_src/issues/25 Missiles are too fast. Thanks @bocianu and @miker for the hint. Speed of the shell is configurable now, 5 speeds available. - enhancement: https://github.com/pkali/scorch_src/issues/25 Missiles are too fast. Thanks @bocianu and @mikerro for the hint. Speed of the shell is configurable now, 5 speeds available.
- enhancement: https://github.com/pkali/scorch_src/issues/27 Remember game settings between games. - enhancement: https://github.com/pkali/scorch_src/issues/27 Remember game settings between games.
- enhancement: https://github.com/pkali/scorch_src/issues/24 Remember player names between games. Thanks @bocianu - enhancement: https://github.com/pkali/scorch_src/issues/24 Remember player names between games. Thanks @bocianu
-90
View File
@@ -1,90 +0,0 @@
MOVED TO: https://github.com/pkali/scorch_src/issues
TODO and BUGS file
---------------------------------------------------------
Known bugs (+ means bug is fixed)
004. when parachute is on and the tank dies (e.g. hit by a powerful
weapon) the dead (invisible) tank falls on parachute
(and uses one parachute more than necessary)
005. tank stands still on a one pixel spike - it should fall
(possibly all that is necessary is adjust of WhereToSlideTable)
017: Observed MIRV loops - it shoots and shoots MIRV all over the screen. Very rare.
020: sometimes leftmost or rightmost remains of the funkybomb smoke do not get cleared
I think it happens when one of the bombs goes out of the screen
023: NEW BUG. After the last change (bug 007) now the last shell of any weapon gets removed and
the game switches to Baby missile.
Fixed:
+001. when bullet goes straight down very fast it misses the tank
it happens only when tank is standing on the bottom of
the screen (no ground below)
+002. points after the round are not calculated correctly
+003. if death's head explodes low, the lowest explosion wraps
and appears on the top of the screen
+006. After some attacks (like MIRV and leapfrog the OffensiveText
stays on the screen (and becomes a static decoration)
It possibly happens when a tank kills itself with mirv or leapfrog.
+008. After a round the last tank sprite stays on the screen.
This hurts only when the last tank is under the table with results!
+010. Even MORONS shoot their feet too often - increase min. randomised energy.
+011. High flying bullets sometimes cause brief screen garbage - like a DL damaged
for a fraction of a frame.
Update - these are NOT high flying bullets - it just happens during bullet flight
+012. (newly introduced) Death explosions are offset right and possibly up.
+013. sometimes demo mode does not work (it stops on results display)
+014: FunkyBomb shoots with too high angle
+015: Only first shoot of FunkyBomb is correct (with smoke and fast),
the next are like missiles
+016: Additional explosions after Frogger do not have falling soil (?)
-018: MINOR: ydraw, yhit, ybyte variable is sometimes treated as WORD, sometimes as BYTE.
Making it consistent would save both time and space (not much)
REJECTED: too much work - different routines depend on checking high byte.
+019: AI menu does not recognize keyboard up (prints "-" in tank name)
+021: check MWA, ADW, SBW macros - bad modifications of bytes found!!!
+009. When result in points is >99 then only 2 first digits are displayed
-022: shooting funkybomb decreases number of bombs too much! (2 instead of 1?)
+007. Decreasing of number of bullets after a shoot does not work correctly
(e.g. 2 bullets are deducted instead of 1) FUNKYBOMB!!!
it looks like it is fixed, although what I did was moving decreasing before jsr shoot
+000, Game crashes from time to time, code and/or screen gets corrupted
---------------------------------------------------------
To do
*004. The game has no end!!! Add ending!!!
A good idea for an ending - a TIP pic - Red Army taking Berlin :)
Another - vector tanks like in BattleZone
Another - stickman tankmen
006. Add sound effects (maybe sampled? or mp0 (sound based on fft))
007. There is no defensive weapon handling (only parachute works,
but also provisionally
009. Make AI in the existing framework (ongoing)
010. It is impossible to look up a number of parachutes left.
018. Speed up soil down after soil eating weapons - correctly calculate
ranges as now range is very broad even when very little soil is eaten.
019. Purchase impossible with joystick only. Add buy on e.g. joystick right.
020. Not a bug per se, but ydraw variable is word, possibly it can be switched to byte
021. Add player colors to purchase screen
022. Make colors more contrasting
024. no visual indication of using defensive weapons
Done:
+001. Start each round with a)worst tank or b)random tank
(Worst tank starts first)
+002. Start each round with random angles (not always 45 degrees left)
+003. Add colour of the given tank to the screen
E.g. when a given tank is shooting it's colour could be behind
tank name on the text screen
+005. Add number of rounds to the options menu
+008. No computer operated opponents - make a framework for AI!!!
+011. Colouring the top status lines in a colour of the active tank.
+014. Demo mode - when all tanks are CPUs let them play non-stop!
(replace waiting for a key-press after a round with a small delay)
+015. Switch to mads for easier development (mads speeds it up, no doubt)
+016. Speed up death's head (e.g.: draw each second circle)
-017. Wide screen mode (with scroll?)
+012. Decreased number of bullets should be displayed just after the shoot.
+013. Check LineTable - possibly it is unnecessarily long. Checked. It is OK
+023. Make not implemented weapons raise NotImplementedError :] Done by making it impossible to purchase free weapons (price == $0)
Executable → Regular
+853 -150
View File
File diff suppressed because it is too large Load Diff
-473
View File
@@ -1,473 +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 $F0
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,$70
dta $41,a(ant)
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
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 @-
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 #$01
sta wsync ;line=232
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-
.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.
Executable → Regular
View File

Before

Width:  |  Height:  |  Size: 190 B

After

Width:  |  Height:  |  Size: 190 B

+20
View File
@@ -0,0 +1,20 @@
icl '../lib/atari.hea'
org $2000
joytest
mva #0 dmactls
@
lda trig0
beq pressed
mva #0 colbak
beq @-
pressed
lda #$0f
;ora jstick0
sta colbak
jmp @-
run joytest
Binary file not shown.
+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
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Executable → Regular
+126 -118
View File
@@ -1,125 +1,133 @@
.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"IN TIMES OF TROUBLE, GO WITH WHAT YOU KNOW."
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"SAY ARRGGHHHHH...."
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 c"PARTING IS SUCH SWEET SORROW... NOT!" L53 dta d"PARTING IS SUCH SWEET SORROW... NOT!"
L54 dta c"UGH!" L54 dta d"UGH!"
L55 dta c"AARGH!" L55 dta d"AARGH!"
L56 dta c"AAAGGHHH!" L56 dta d"AAAGGHHH!"
L57 dta c"I'M MELTING!" L57 dta d"I'M MELTING!"
L58 dta c"OOF.." L58 dta d"OOF.."
L59 dta c"OH!" L59 dta d"OH!"
L60 dta c"EEEK!" L60 dta d"EEEK!"
L61 dta c"AACCH!" L61 dta d"AACCH!"
L62 dta c"I HATE IT WHEN THAT HAPPENS." L62 dta d"I HATE IT WHEN THAT HAPPENS."
L63 dta c"ONE DIRECT HIT CAN RUIN YOUR WHOLE DAY." L63 dta d"ONE DIRECT HIT CAN RUIN YOUR WHOLE DAY."
L64 dta c"OH NO!" L64 dta d"OH NO!"
L65 dta c"NOT ME!" L65 dta d"NOT ME!"
L66 dta c"OUCH." L66 dta d"OUCH."
L67 dta c"OH NO, NOT AGAIN." L67 dta d"OH NO, NOT AGAIN."
L68 dta c"ANOTHER ONE BITES THE DUST." L68 dta d"ANOTHER ONE BITES THE DUST."
L69 dta c"GOODBYE." L69 dta d"GOODBYE."
L70 dta c"HELP ME!" L70 dta d"HELP ME!"
L71 dta c"FAREWELL, CRUEL WORLD." L71 dta d"FAREWELL, CRUEL WORLD."
L72 dta c"REMEMBER THE ALAMO!" L72 dta d"REMEMBER THE ALAMO!"
L73 dta c"OH MAN!" L73 dta d"OH MAN!"
L74 dta c"DOOUGH!" L74 dta d"DOOUGH!"
L75 dta c"ANOTHER DAY, ANOTHER BOMB." L75 dta d"ANOTHER DAY, ANOTHER BOMB."
L76 dta c"THIS IS THE END, MY ONLY FRIEND." L76 dta d"THIS IS THE END, MY ONLY FRIEND."
L77 dta c"IT'S ALL OVER." L77 dta d"IT'S ALL OVER."
L78 dta c"THE FAT LADY SANG." L78 dta d"THE FAT LADY SANG."
L79 dta c"WHY DOES EVERYTHING HAPPEN TO ME?" L79 dta d"WHY DOES EVERYTHING HAPPEN TO ME?"
L80 dta c"I'M GOING DOWN." L80 dta d"I'M GOING DOWN."
L81 dta c"I'VE GOT A BAD FEELING ABOUT THIS." L81 dta d"I'VE GOT A BAD FEELING ABOUT THIS."
L82 dta c"CRAPOLA." L82 dta d"CRAPOLA."
L83 dta c"POW!" L83 dta d"POW!"
L84 dta c"BIF!" L84 dta d"BIF!"
L85 dta c"BAM!" L85 dta d"BAM!"
L86 dta c"ZONK!" L86 dta d"ZONK!"
L87 dta c"I SHOULD'VE LISTENED TO MY MOTHER..." L87 dta d"I SHOULD'VE LISTENED TO MY MOTHER..."
L88 dta c"NO... A BUD LIGHT!" L88 dta d"NO... A BUD LIGHT!"
L89 dta c"WHAT WAS THAT NOISE?" L89 dta d"WHAT WAS THAT NOISE?"
L90 dta c"MAMA SAID THERE'D BE DAYS LIKE THIS." L90 dta d"MAMA SAID THERE'D BE DAYS LIKE THIS."
L91 dta c"ITS JUST ONE OF THOSE DAYS..." L91 dta d"ITS JUST ONE OF THOSE DAYS..."
L92 dta c"I SEE A BRIGHT LIGHT..." L92 dta d"I SEE A BRIGHT LIGHT..."
L93 dta c"MOMMY? IS THAT YOU?" L93 dta d"MOMMY? IS THAT YOU?"
L94 dta c"I LET YOU HIT ME!" L94 dta d"I LET YOU HIT ME!"
L95 dta c"SUCKER SHOT!" L95 dta d"SUCKER SHOT!"
L96 dta c"I DIDN'T WANT TO LIVE ANYWAY." L96 dta d"I DIDN'T WANT TO LIVE ANYWAY."
L97 dta c"-<SOB>-" L97 dta d"-<SOB>-"
L98 dta c"WAS THAT AS CLOSE AS I THINK IT WAS?" L98 dta d"WAS THAT AS CLOSE AS I THINK IT WAS?"
L99 dta c"JOIN THE ARMY, SEE THE WORLD THEY SAID." L99 dta d"JOIN THE ARMY, SEE THE WORLD THEY SAID."
L100 dta c"IT WASN'T JUST A JOB IT WAS AN ADVENTURE!" L100 dta d"IT WASN'T JUST A JOB IT WAS AN ADVENTURE!"
L101 dta c"I DIDN'T LIKE VIOLENCE ANYWAY!" L101 dta d"I DIDN'T LIKE VIOLENCE ANYWAY!"
L102 dta c"I THOUGHT YOU LIKED ME?" L102 dta d"I THOUGHT YOU LIKED ME?"
L103 dta c"SUCH SENSELESS VIOLENCE! I DON'T UNDERSTAND IT." L103 dta d"SUCH SENSELESS VIOLENCE! I DON'T UNDERSTAND IT."
L104 dta c"I THINK THIS GUY'S A LITTLE CRAZY." L104 dta d"I THINK THIS GUY'S A LITTLE CRAZY."
L105 dta c"SOMEHOW I DON'T FEEL LIKE KILLING ANYMORE." L105 dta d"SOMEHOW I DON'T FEEL LIKE KILLING ANYMORE."
L106 dta c"HEY! KILLIN' AIN'T COOL." L106 dta d"HEY! KILLIN' AIN'T COOL."
L107 dta c"GEE... THANKS." L107 dta d"GEE... THANKS."
L108 dta c"I'VE FALLEN AND I CAN'T GET UP!" L108 dta d"I'VE FALLEN AND I CAN'T GET UP!"
L109 dta c"911?" L109 dta d"911?"
L110 dta c"OH NO! HERE I BLOW AGAIN!" L110 dta d"OH NO! HERE I BLOW AGAIN!"
L111 dta c"I'LL BE BACK..." L111 dta d"I'LL BE BACK..."
L112 dta c"HEY - I'VE GOT LAWYERS." L112 dta d"HEY - I'VE GOT LAWYERS."
L113 dta c"TIME TO CALL 1-900-SUE-TANK." L113 dta d"TIME TO CALL 1-900-SUE-TANK."
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
dta <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 <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
OffensiveTextLengths dta >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 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=60
.endp .endp
hoverFull dta d"MY HOVERCRAFT IS FULL OF EELS!", $ff
hoverFullEnd
hoverEmpty dta d"RUNNING OUT OF EELS", $ff
hoverEmptyEnd
BIN
View File
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.
+284 -685
View File
File diff suppressed because it is too large Load Diff
+173 -97
View File
@@ -3,106 +3,182 @@
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 = $0800 ; real PM start = $0b00
; Generated tables
linetableL = $0b00 - (screenHeight+1)*2
linetableH = $0b00 - (screenHeight+1)
display = $1010 ;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 = $23 ; 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
;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___________ = $28
;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____ = 689 ;_12 price_Baby_Roller____ = 211 ;_12
price_Roller_________ = 600 ;_13 price_Roller_________ = 244 ;_13
price_Heavy_Roller___ = 592 ;_14 price_Heavy_Roller___ = 326 ;_14
price_Riot_Charge____ = 330 ;_15 price_Riot_Charge____ = 230 ;_15
price_Riot_Blast_____ = 341 ;_16 price_Riot_Blast_____ = 241 ;_16
price_Riot_Bomb______ = 369 ;_17 price_Riot_Bomb______ = 259 ;_17
price_Heavy_Riot_Bomb = 322 ;_18 price_Heavy_Riot_Bomb = 272 ;_18
price_Baby_Digger____ = 336 ;_19 price_Baby_Digger____ = 136 ;_19
price_Digger_________ = 276 ;_20 price_Digger_________ = 176 ;_20
price_Heavy_Digger___ = 253 ;_21 price_Heavy_Digger___ = 207 ;_21
price_Baby_Sandhog___ = 218 ;_22 price_Baby_Sandhog___ = 158 ;_22
price_Sandhog________ = 191 ;_23 price_Sandhog________ = 191 ;_23
price_Heavy_Sandhog__ = 305 ;_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____ = 530 ;_28 price_Liquid_Dirt____ = 330 ;_28
price_Dirt_Charge____ = 581 ;_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__________ = 577 ;_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 ;Weapon indexes (numbers)
price______________45 = 0 ind_Baby_Missile___ = 0
price______________46 = 0 first_offensive____ = ind_Baby_Missile___
price______________47 = 0 ind_Missile________ = 1
price_Heat_Guidance__ = $ffff ;_48_($30) ind_Baby_Nuke______ = 2
price_Bal_Guidance___ = $ffff ;_49 ind_Nuke___________ = 3
price_Horz_Guidance__ = $ffff ;_50 ind_LeapFrog_______ = 4
price_Vert_Guidance__ = $ffff ;_51 ind_Funky_Bomb_____ = 5
price_Lazy_Boy_______ = $ffff ;_52 ind_MIRV___________ = 6
price_Parachute______ = 1100 ;_53 ind_Death_s_Head___ = 7
price_Battery________ = $ffff ;_54 ind_Napalm_________ = 8
price_Mag_Deflector__ = $ffff ;_55 ind_Hot_Napalm_____ = 9
price_Shield_________ = $ffff ;_56 ind_Tracer_________ = 10
price_Force_Shield___ = $ffff ;_57 ind_Smoke_Tracer___ = 11
price_Heavy_Shield___ = $ffff ;_58 ind_Baby_Roller____ = 12
price_Super_Mag______ = $ffff ;_59 ind_Roller_________ = 13
price_Auto_Defense___ = $ffff ;_60 ind_Heavy_Roller___ = 14
price_Fuel_Tank______ = $ffff ;_61 ind_Riot_Charge____ = 15
price_Contact_Trigger = $ffff ;_62 ind_Riot_Blast_____ = 16
price______________63 = $ffff ind_Riot_Bomb______ = 17
ind_Heavy_Riot_Bomb = 18
ind_Baby_Digger____ = 19
ind_Digger_________ = 20
ind_Heavy_Digger___ = 21
ind_Baby_Sandhog___ = 22
ind_Sandhog________ = 23
ind_Heavy_Sandhog__ = 24
ind_Dirt_Clod______ = 25
ind_Dirt_Ball______ = 26
ind_Ton_of_Dirt____ = 27
ind_Liquid_Dirt____ = 28
ind_Dirt_Charge____ = 29
ind_Buy_me_________ = 30
ind_Laser__________ = 31
last_offensive_____ = ind_Laser__________
ind_White_Flag_____ = 32
first_defensive____ = ind_White_Flag_____
ind_Battery________ = 33
ind_Hovercraft_____ = 34
ind_Parachute______ = 35
ind_StrongParachute = 36
ind_Mag_Deflector__ = 37
ind_Shield_________ = 38
ind_Heavy_Shield___ = 39
ind_Force_Shield___ = 40
ind_Bouncy_Castle__ = 41
ind_Long_Barrel____ = 42
ind_Nuclear_Winter_ = 43
last_defensive_____ = ind_Nuclear_Winter_
number_of_offensives = last_offensive_____ - first_offensive____+1
number_of_defensives = (last_defensive_____ - first_defensive____+1)
;-------------------------------- ;--------------------------------
; names of RMT instruments (sfx) ; names of RMT instruments (sfx)
;-------------------------------- ;--------------------------------
sfx_set_power_1 = $00 sfx_set_power_1 = $00 ;A
sfx_set_power_2 = $01 sfx_set_power_2 = $01 ;b
sfx_lightning = $02 sfx_lightning = $02 ;c
sfx_dunno = $03 sfx_dunno = $03 ;d
sfx_nuke = $04 sfx_nuke = $04 ;e
sfx_baby_missile= $05 sfx_baby_missile= $05 ;f
sfx_death_begin = $06 sfx_death_begin = $06 ;g
sfx_plasma_1_2 = $07 sfx_plasma_1_2 = $07 ;h
sfx_plasma_2_2 = $08 sfx_plasma_2_2 = $08 ;i
sfx_napalm = $09 sfx_napalm = $09 ;j
sfx_dirt_charge = $0a sfx_dirt_charge = $0a ;k
sfx_missile_hit = $0b sfx_missile_hit = $0b ;l
sfx_funky_hit = $0c sfx_funky_hit = $0c ;m
sfx_shield_on = $0d sfx_shield_on = $0d ;n
sfx_shield_off = $0e sfx_shield_off = $0e ;o
sfx_parachute = $0f sfx_parachute = $0f ;p
sfx_smoke_cloud = $10 sfx_smoke_cloud = $10 ;q
sfx_riot_blast = $11 sfx_riot_blast = $11 ;r
sfx_sandhog = $12 sfx_sandhog = $12 ;s
sfx_dirt_chrg_s = $13 sfx_dirt_chrg_s = $13 ;t
sfx_digger = $14 sfx_digger = $14 ;u
sfx_silencer = $15 sfx_silencer = $15 ;v
sfx_next_player = $16 sfx_next_player = $16 ;w
sfx_purchase = $17 sfx_purchase = $17 ;x
sfx_keyclick = $18 sfx_keyclick = $18 ;y
sfx_shoot = $19 sfx_shoot = $19 ;z
sfx_seppuku = $1a sfx_seppuku = $1a ;1
sfx_liquid_dirt = $1b sfx_liquid_dirt = $1b ;2
sfx_battery = $1c ;3
sfx_white_flag = $1d ;4
sfx_long_barrel = $1e
sfx_tank_move = $1f
;--------------------------------
; RMT songs (lines)
;--------------------------------
song_silencio = $00
song_main_menu = $02
song_ingame = $06
song_round_over = $0b
song_ending_looped = $0e
song_supermarket = $1b
song_inventory = $1d
Executable → Regular
+233 -134
View File
@@ -1,150 +1,42 @@
; @com.wudsn.ide.asm.mainsourcefile=scorch.asm ; @com.wudsn.ide.asm.mainsourcefile=scorch.asm
.IF *>0 ;this is a trick that prevents compiling this file alone .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,$2
.byte $10,2,2,2,$30,2,2
.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 ; start of "variables" (RAM)
;----------------------------------------------- ;-----------------------------------------------
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 OptionsHere
; 0123456789012345678901234567890123456789 ; 0123456789012345678901234567890123456789
dta d"Players : 2 3 4 5 6 " dta d"Players : 2 3 4 5 6 "
dta d"Cash : none 2K 5K 8K 10K " dta d"Cash : none 2K 8K 12K 20K "
dta d"Gravity : 0.2G 0.5G 1G 2G 4G " dta d"Gravity : 0.2G 0.5G 1G 2G 4G "
dta d"Wind : 1B 3B 5B 7B 9B " dta d"Wind : 1B 3B 5B 7B 9B "
dta d"Rounds : 10 20 30 40 50 " dta d"Rounds : 10 20 30 40 50 "
dta d"Missiles : slug slow norm fast hare " dta d"Missiles : slug slow norm fast hare "
dta d"Seppuku : nevr rare norm oftn alws " 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 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 ListOfWeapons
:36 dta d" " ; 0123456789012345678901234567890123456789
; :number_of_offensives dta d" "
:32 dta d" "
ListOfWeapons1End ListOfWeapons1End
ListOfDefensiveWeapons ListOfDefensiveWeapons
:16 dta d" " ; :number_of_defensives dta d" "
:16 dta d" "
ListOfDefensiveWeaponsEnd ;constant useful when clearing ListOfDefensiveWeaponsEnd ;constant useful when clearing
WeaponsDescription
dta d" "
dta d"Tab"*
dta d" - Defensive/Offensive weapon "
dta d" "
dta d"Space"*
dta d" - Purchase "
dta d"Return"*
dta d" - Finish "
EmptyLine
dta d" "
LastLine
:40 dta $ff
; -------------------------------------------------
.ALIGN $1000 ; WARNING!!!! 4KiB barrier crossing here, might need reassignment!!!
NameScreen NameScreen
dta d" Enter names of players " dta d" Enter names of players "
dta d" Tank 01 Name:" dta d" Tank 01 Name:"
@@ -154,7 +46,7 @@ NameAdr
dta d" " dta d" "
NamesOfLevels NamesOfLevels
dta d" HUMAN Moron Shooter " dta d" HUMAN Moron Shooter "
dta d" Poolshark Toosser Chooser " dta d" Poolshark Tosser Chooser "
dta d" Spoiler Cyborg Unknown " dta d" Spoiler Cyborg Unknown "
dta d" " dta d" "
dta d"Tab"* dta d"Tab"*
@@ -166,11 +58,218 @@ NamesOfLevels
textbuffer textbuffer
; 0123456789012345678901234567890123456789 ; 0123456789012345678901234567890123456789
dta d"Player: " dta d"Player: "
dta d"Energy: 99 Angle: <99> Force: 9999 " dta d"Energy: Angle: Force: "
dta d" Round: 99 Wind: <99> " dta d"Round: Wind: "
textbuffer2 textbuffer2
dta d"Player: ******** Cash: 99990 " dta d"Player: Cash: 0" ; ZERO TO MAKE YOU RICHER ON THE SCREEN
dta d"----------------------------------------"
; DLs fragments (modified by game code)
; all Purchase DL :)
PurchaseDL
.byte $70
.byte $47
DLPurTitleAddr
.word PurchaseTitle
.byte $50
.byte $42+$80
.word textbuffer2
.byte $60,$42
MoreUpdl
.word EmptyLine
.byte 0,$42
WeaponsListDL
.word ListOfWeapons
:15 .byte 0,2
.byte 0, $42
MoreDownDL
.word EmptyLine
.byte $40,$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
;------------------------
; end of "variables" (RAM)
;------------------------
; 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-2022"
dta d" Please select option with cursor keys "
dta d" and press (Return) to proceed "
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
dta d"Tab"*
dta d ": Defensive/Offensive weapon "
PurchaseDescription
; 0123456789012345678901234567890123456789
dta d"Space"*
dta d": Purchase "
dta d"Return"*
dta d": Finish "
ActivateDescription
; 0123456789012345678901234567890123456789
dta d"Space"*
dta d": Activate "
dta d"Return"*
dta d": Finish "
EmptyLine
dta d" "
;---------------------------------------------------
OptionsTitle
dta d" scorch "*
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 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 EmptyLine ; additional line of ground
.byte $41
.word dl
;-----------------------------------------------
.ALIGN $1000 ; WARNING!!!! 4KiB barrier crossing here, might need reassignment!!!
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 $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
.byte $42
.word NameScreen
.byte $30
.byte $02,$30+$80,$02
.byte $10,$02,$02,$02,$30,$02,$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 $4f ; 1 line
.word display+(40*72)
:28 .byte $0f ; 28 lines
.byte $0f+$80
.byte $4f ; 1 line
.word display+(40*32)
: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 .endif
Executable → Regular
+1088 -371
View File
File diff suppressed because it is too large Load Diff
+654
View File
@@ -0,0 +1,654 @@
;****************************************************************************
;* 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
-513
View File
@@ -1,513 +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
;-------------------------------------
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
*/
+14 -7
View File
@@ -76,13 +76,17 @@
.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 VCOUNT ?zero LDA VCOUNT
ldy vcount beq ?zero
?WA cpy VCOUNT bpl ?WA
BEQ ?WA sbc #10 ; last lines correction
?wframe ?WA cmp VCOUNT
cmp vcount beq ?WA
bne ?wframe bcc ?WA
?WFRAME cmp VCOUNT
beq ?nowait
bcs ?WFRAME
?nowait
.ENDM .ENDM
;------------------------------------- ;-------------------------------------
.macro negw .macro negw
@@ -100,6 +104,9 @@
.macro randomize .macro randomize
;usage: randomize floor ceiling ;usage: randomize floor ceiling
;returns (in A) a random .byte between "floor" and "ceiling" ;returns (in A) a random .byte between "floor" and "ceiling"
.if :2 < :1
.error "floor higher than ceiling"
.endif
?rand ?rand
lda random lda random
cmp #:1 ;floor cmp #:1 ;floor
+904 -441
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
Executable → Regular
+1468 -681
View File
File diff suppressed because it is too large Load Diff
Executable → Regular
+184 -145
View File
@@ -8,66 +8,82 @@
; 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
;===================================================== ;=====================================================
;-------------------------------------------------- OneTimeZeroVariables
;Variables OneTimeZeroVariablesCount = variablesToInitialize-OneTimeZeroVariables ; MAX 128 bytes !
;-------------- .if OneTimeZeroVariablesCount > 127
TanksNames ; DO NOT ZERO - ticket #24 .error "OneTimeZeroVariablesCount too large, ",OneTimeZeroVariablesCount
.endif
noMusic .by 0 ; 0 - play music, $ff - do not play music
noSfx .by 0 ; 0 - play SFX, $ff - do not play SFX
;----------------------------------------------------
; Color table for Game Over Screen (created in a gameover routine)
.by $00 ; labels line color
GameOverColoursTable .BYTE $80,$40,$c4,$20,$c0,$e4
;----------------------------------------------------
TanksNames ; DO NOT ZERO ON GAME RESTART - ticket #24
:6 dta d" " :6 dta d" "
;---------------------------- ;----------------------------------------------------
;Options DO NOT ZERO - ticket #27
OptionsTable .by 0,0,2,2,0,1,4
RoundsInTheGame .by 10 ;how many rounds in the current game
seppukuVal .by 75
;--------------------------------------------------
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]
;----------------------------------- ;----------------------------------------------------
; 4x4 text buffer variablesToInitialize
ResultLineBuffer ;Options DO NOT ZERO ON RESTART GAME - ticket #27
dta d" " OptionsTable .by 0,1,2,2,0,1,3,2,0
.byte $ff RoundsInTheGame .by 10 ;how many rounds in the current game
seppukuVal .by 75
mountainDeltaH .by 3
mountainDeltaL .by $ff
;----------------------------------------------------
LineHeader1 LineHeader1
dta d"# ROUND: " dta d"# ROUND: "
RoundNrDisplay RoundNrDisplay
dta d" #" dta d" #", $ff
.byte $ff ; 4x4 text buffer
ResultLineBuffer
dta d" ", $ff
;=====================================================
variablesStart ; zeroing starts here variablesStart ; zeroing starts here
;=====================================================
;isInventory .ds 1 ; 0 - purchase, $ff - inventory
;-------------- ;--------------
sfx_effect .ds 1 drawFunction .ds 1 ; 0 - plot, %10000000 - LineLength (N), %01000000 - DrawCheck (V)
;-------------- ;--------------
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 - 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
.DS [MaxPlayers]
EnergyDecrease .DS 1 EnergyDecrease .DS 1
eXistenZ eXistenZ
.DS [MaxPlayers] .DS [MaxPlayers]
@@ -78,72 +94,83 @@ ResultsTable ;the results in the gameeeeee
.DS [MaxPlayers] .DS [MaxPlayers]
TempResults TempResults
.DS [MaxPlayers] .DS [MaxPlayers]
CurrentResult DirectHitsH
.DS 1
;-----------------------------------
EnergyTableL ;shooting Force of the tank during the round
.DS [MaxPlayers] .DS [MaxPlayers]
EnergyTableH DirectHitsL
.DS [MaxPlayers]
EarnedMoneyH
.DS [MaxPlayers]
EarnedMoneyL
.DS [MaxPlayers]
;----------------------------------------------------
ForceTableL ;shooting Force of the tank during the round
.DS [MaxPlayers]
ForceTableH
.DS [MaxPlayers] ;maxplayers=6 .DS [MaxPlayers] ;maxplayers=6
MaxEnergyTableL ;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
MaxEnergyTableH 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
.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
;----------------------------------- ;----------------------------------------------------
;format of the 3-byte static point number used in the game ;format of the 3-byte static point number used in the game
; 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 2 ;walue displayed on the screen ;Wind .ds 4 ;format: 0000.hhll
;multiplied by 16 (decimal part only) ;walue displayed on the screen is
;----------------------------------- ;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 ;1 when missile hit anything ;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 stank 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]
;----------------------------------- ;----------------------------------------------------
Erase .DS 1 ; if 1 only mask of the character is printed TargetTankNr ; Target tank index (for AI routines)
; on the graphics screen. if 0 character is printed normally .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
;----------------------------------- ;----------------------------------------------------
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]
@@ -152,63 +179,64 @@ digtabyL .DS [8]
digtabyH .DS [8] digtabyH .DS [8]
; liquiddirt ; liquiddirt
TempXfill .ds 2 TempXfill .ds 2
FillCounter .ds 1 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
DrawJumpAddr .DS 2 ;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 1 ;ycircle .DS 2
tempcir .DS 2 tempcir .DS 2
;TankFalls ;TankFalls
IfFallDown .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)
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
Result .ds 3 ; 0,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
; max 5 concurrent unPlots ; max 5 concurrent unPlots
@@ -221,18 +249,18 @@ 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]
mask2 .DS [8] 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
@@ -240,27 +268,25 @@ UpNdown .DS 1
temptankX .DS 2 temptankX .DS 2
temptankNr .DS 1 temptankNr .DS 1
; ------------------------------------------------- ;----------------------------------------------------
;Variables from textproc.s65 ;Variables from textproc.s65
; tables with numbers of weapons on the right lists ; tables with indexes of weapons on the right lists
; to be honest - I do not know at the moment what the above
; comment was supposed to mean...
; OK (2022) so, L1 is list of offensive weapons, L2 - defensive ; OK (2022) so, L1 is list of offensive weapons, L2 - defensive
NubersOfWeaponsL1 IndexesOfWeaponsL1
.ds 8*5 ; :(8*5) .by $ff .ds (last_offensive_____ - first_offensive____+1)
NubersOfWeaponsL2 IndexesOfWeaponsL2
.ds 8*2 ; :(8*2) .by $ff .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
; list and pointer position ; list and pointer position
HowManyOnTheList1 HowManyOnTheListOff
.DS 1 .DS 1
HowManyOnTheList2 HowManyOnTheListDef
.DS 1
PositionOnTheList ; pointer position on the list being displayed
.DS 1 .DS 1
;PositionOnTheList ; pointer position on the list being displayed
; .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
@@ -268,34 +294,33 @@ 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
LaserCoordinate .DS 8 ; 2,2,2,2 LaserCoordinate .DS 8 ; 2,2,2,2
; ------------------------------------------------- ;----------------------------------------------------
; Here go tables with weapons possesed by a given tank ; Here go tables with weapons possesed by a given tank
; Index in the table means weapon type ; Index in the table means weapon type
; number entered means ammo for given weapon possessed (max 99) ; number entered means ammo for given weapon possessed (max 99)
@@ -303,17 +328,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]
@@ -322,7 +347,7 @@ mountaintable2 ;table of mountains (size=screenwidth)
.DS [screenwidth] .DS [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 TextPositionX .DS 2
TextPositionY .DS 1 TextPositionY .DS 1
TextAddress .DS 2 TextAddress .DS 2
@@ -331,7 +356,27 @@ TextNumberOff .DS 1
;-------------- ;--------------
TankTempY TankTempY
.DS 1 .DS 1
;----------------------------------------------------
;-------------- single round variables -------------- ;-------------- single round variables --------------
;----------------------------------------------------
singleRoundVars
;--------------
;escFlag .ds 1 ; 0 - Esc or O not pressed, $80 - Esc pressed, $40 - O pressed
;--------------
CurrentResult
.DS 1
;--------------
AngleTable ;Angle of the barrel of each tank during the round
.DS [MaxPlayers]
;NewAngle ; used in AI
.DS 1
;previousBarrelAngle
; .DS [MaxPlayers]
EndOfTheBarrelX
.ds 2
EndOfTheBarrelY
.ds 1
;----------------------------------------------------
previousAngle previousAngle
.DS [MaxPlayers] .DS [MaxPlayers]
previousEnergyL previousEnergyL
@@ -340,8 +385,6 @@ previousLeftRange
.DS [MaxPlayers] .DS [MaxPlayers]
previousEnergyH previousEnergyH
.DS [MaxPlayers] .DS [MaxPlayers]
previousRightAngle
.DS [MaxPlayers]
RandBoundaryLow RandBoundaryLow
.ds 2 .ds 2
RandBoundaryHigh RandBoundaryHigh
@@ -349,39 +392,35 @@ RandBoundaryHigh
AngleTablePointer AngleTablePointer
.DS 1 .DS 1
singleRoundVarsEnd 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 ResultX
.DS 2 .DS 2
ResultY ;ResultY .DS 1
.DS 1
ResultOfTankNr ResultOfTankNr
.DS 1 .DS 1
;---------------------------- ;----------------------------------------------------
;PutChar4x4 ;PutChar4x4
;----------------------------------------------------
LoopCounter4x4 .DS 1 LoopCounter4x4 .DS 1
y4x4 .DS 1 y4x4 .DS 1
StoreA4x4 .DS 1 StoreA4x4 .DS 1
Xcounter4x4 .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
variablesEnd variablesEnd
;---------------------------- ;----------------------------------------------------
.endif .endif
Executable → Regular
+1566 -896
View File
File diff suppressed because it is too large Load Diff