Compare commits

...

135 Commits

Author SHA1 Message Date
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
26 changed files with 2765 additions and 2044 deletions
+2
View File
@@ -0,0 +1,2 @@
*.bak
Executable → Regular
View File
Executable → Regular
+78 -10
View File
@@ -47,19 +47,87 @@ With the advent of fujinet (https://fujinet.online/) we are thinking about makin
## Changes: ## Changes:
###### 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 what makes 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 ###### Build 141
2022-05-22 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. 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.
- #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/73 Fast forward. Press [START] to speed up the game where it can be sped up. Not in many places, mind you.
- #72 Screen glitches improved - https://github.com/pkali/scorch_src/issues/72 Screen glitches improved
- #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/70 AI shoot with more force than their energy allows. We might still have to revise this one
- #69 Explosions wrapping around the screen - https://github.com/pkali/scorch_src/issues/69 Explosions wrapping around the screen
- #67 Screen glitches after intro - https://github.com/pkali/scorch_src/issues/67 Screen glitches after intro
- #65 Saved ~90 bytes by removing cosinus table - https://github.com/pkali/scorch_src/issues/65 Saved ~90 bytes by removing cosinus table
- #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/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)
- #61 [SHIFT] was repeating the last key - https://github.com/pkali/scorch_src/issues/61 [SHIFT] was repeating the last key
- #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/57 Fire too sensitive on a real machine. Switched to shadow registers. First recorded use of Atari OS :O
- #55 Glitches in the status bar. This one was surprisingly tough. - https://github.com/pkali/scorch_src/issues/55 Glitches in the status bar. This one was surprisingly tough.
###### Build 140 ###### Build 140
2022-05-15 2022-05-15
-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
+188 -69
View File
@@ -9,7 +9,7 @@
; greeeting to myself 10 years older in 2013-11-09... still no idea ; greeeting to myself 10 years older in 2013-11-09... still no idea
;---------------------------------------------- ;----------------------------------------------
MakeLowResDistances .proc .proc MakeLowResDistances
; create low precision table of positions ; create low precision table of positions
; by dividing positions by 4 ; by dividing positions by 4
@@ -30,10 +30,10 @@ loop
.endp .endp
;---------------------------------------------- ;----------------------------------------------
ArtificialIntelligence .proc ; .proc ArtificialIntelligence ;
; A - skill of the TankNr ; A - skill of the TankNr
; returns shoot energy and angle in ; returns shoot energy and angle in
; EnergyTable/L/H and AngleTable ; ForceTable/L/H and AngleTable
;---------------------------------------------- ;----------------------------------------------
asl asl
tax tax
@@ -42,6 +42,13 @@ ArtificialIntelligence .proc ;
pha pha
lda AIRoutines,x lda AIRoutines,x
pha pha
ldx TankNr ; common values used in AI routines
; address of weapons table (for future use)
lda TanksWeaponsTableL,x
sta temp
lda TanksWeaponsTableH,x
sta temp+1
rts rts
.endp .endp
;---------------- ;----------------
@@ -49,15 +56,14 @@ AIRoutines
.word Moron-1 .word Moron-1
.word Shooter-1 ;Shooter .word Shooter-1 ;Shooter
.word Poolshark-1 ;Poolshark .word Poolshark-1 ;Poolshark
.word Poolshark-1 ;Toosser .word Tosser-1 ;Tosser
.word Poolshark-1 ;Chooser .word Poolshark-1 ;Chooser
.word Poolshark-1 ;Spoiler .word Poolshark-1 ;Spoiler
.word Poolshark-1 ;Cyborg .word Poolshark-1 ;Cyborg
.word Poolshark-1 ;Unknown .word Poolshark-1 ;Unknown
;---------------------------------------------- ;----------------------------------------------
Moron .proc .proc Moron
ldx TankNr
jsr RandomizeAngle jsr RandomizeAngle
sta NewAngle sta NewAngle
mwa #80 RandBoundaryLow mwa #80 RandBoundaryLow
@@ -66,98 +72,137 @@ Moron .proc
rts rts
.endp .endp
;---------------------------------------------- ;----------------------------------------------
Shooter .proc .proc Shooter
ldx TankNr
lda PreviousAngle,x lda PreviousAngle,x
ora PreviousEnergyL,x ora PreviousEnergyL,x
ora PreviousEnergyH,x ora PreviousEnergyH,x
beq firstShoot beq firstShoot
lda PreviousAngle,x lda PreviousAngle,x
cmp #90
bcs shootingLeftAtThisMomentOfTime
; shooting right at this moment of time
sec
sbc #5
cmp #10
bcs @+ ;not smaller than 10
bcc firstShoot ; GET THE aim againg
shootingLeftAtThisMomentOfTime
clc clc
adc #5 adc #5
bmi leftQuadrant cmp #170 ; maximum shooter angle
cmp #90 bcs firstShoot
bcc continue @
lda #(-90)
bne continue
leftQuadrant
continue
sta NewAngle sta NewAngle
sec
lda PreviousEnergyL,x lda PreviousEnergyL,x
sta EnergyTableL,x sbc #5
sta ForceTableL,x
lda PreviousEnergyH,x lda PreviousEnergyH,x
sta EnergyTableH,x sbc #0
sta ForceTableH,x
jmp endo jmp endo
firstShoot firstShoot
; compare the x position with the middle of the screen ; compare the x position with the middle of the screen
lda xTanksTableL,x
sta temp
lda xTanksTableH,x lda xTanksTableH,x
sta temp+1 cmp #>(screenwidth/2)
cpw temp #(screenwidth/2) bne @+
bcs tankIsOnTheRight lda xTanksTableL,x
cmp #<(screenwidth/2)
lda RANDOM @ bcc tankIsOnTheRight
and #$1F
clc
adc #5
;lda #45
; enemy tank is on the left
randomize 95 125
sta NewAngle sta NewAngle
jmp forceNow bne forceNow
tankIsOnTheRight tankIsOnTheRight
lda RANDOM randomize 55 85
and #$1F
clc
adc #(-85)
;lda #-45
sta NewAngle sta NewAngle
forceNow forceNow
mwa #100 RandBoundaryLow mwa #100 RandBoundaryLow
mwa #800 RandBoundaryHigh mwa #800 RandBoundaryHigh
;ldx TankNr ;this is possibly not necessary
jsr RandomizeForce jsr RandomizeForce
endo endo
;ldx TankNr ;this is possibly not necessary ;ldx TankNr ;this is possibly not necessary
jsr RandomizeForce.LimitForce
lda NewAngle lda NewAngle
sta PreviousAngle,x sta PreviousAngle,x
lda EnergyTableL,x lda ForceTableL,x
sta PreviousEnergyL,x sta PreviousEnergyL,x
lda EnergyTableH,x lda ForceTableH,x
sta PreviousEnergyH,x sta PreviousEnergyH,x
; choose the best weapon ; choose the best weapon
lda TanksWeaponsTableL,x
sta temp
lda TanksWeaponsTableH,x
sta temp+1
ldy #32 ;the last weapon ldy #32 ;the last weapon
loop loop
dey dey
lda (temp),y lda (temp),y ; this is set up before calling the routine, has address of TanksWeaponsTable
beq loop beq loop
tya tya
sta ActiveWeapon,x sta ActiveWeapon,x
rts rts
.endp .endp
;---------------------------------------------- ;----------------------------------------------
Poolshark .proc .proc Poolshark
; defensives
; if low energy ten use battery
lda Energy,x
cmp #30
bcs EnoughEnergy
; lower than 30 units - check battery
ldy #ind_Battery________
lda (temp),y ; has address of TanksWeaponsTable
beq NoBatteries
; we have batteries - use one
clc
sbc #1
sta (temp),y
lda #99
sta Energy,x
NoBatteries
EnoughEnergy
; use best defensive :)
; but not allways
randomize 1 3
cmp #1
bne NoUseDefensive
; first check check if any is in use
lda ActiveDefenceWeapon,x
bne DefensiveInUse
ldy #ind_Nuclear_Winter_+1 ;the last defensive weapon
@
dey
cpy #ind_Battery________ ;first defensive weapon (White Flag nad Battery - never use)
beq NoUseDefensive
lda (temp),y ; has address of TanksWeaponsTable
beq @-
tya
; activate defensive weapon
sta ActiveDefenceWeapon,x
lda DefensiveEnergy,y
sta ShieldEnergy,x
; decrease in inventory
clc
sbc #1
sta (temp),y ; has address of TanksWeaponsTable
NoUseDefensive
DefensiveInUse
firstShoot firstShoot
;find nearest tank neighbour ;find nearest tank neighbour
jsr MakeLowResDistances jsr MakeLowResDistances
mva #$ff temp2 ; min possible distance mva #$ff temp2 ; min possible distance
ldx TankNr ;ldx TankNr
ldy NumberOfPlayers ldy NumberOfPlayers
dey dey
@@ -218,7 +263,7 @@ forceNow
jsr RandomizeForce jsr RandomizeForce
endo endo
ldx TankNr ;this is possibly not necessary ;ldx TankNr ;this is possibly not necessary
; choose the best weapon ; choose the best weapon
@@ -226,7 +271,7 @@ endo
sta temp sta temp
lda TanksWeaponsTableH,x lda TanksWeaponsTableH,x
sta temp+1 sta temp+1
ldy #32 ;the last weapon ldy #ind_Laser__________ ;the last offensive weapon
loop loop
dey dey
lda (temp),y lda (temp),y
@@ -237,11 +282,39 @@ loop
;---------------------------------------------- ;----------------------------------------------
AngleTable ; 16 bytes ;ba w $348b L$3350 AngleTable ; 16 bytes ;ba w $348b L$3350
.by 178,186,194,202,210,218,226,234 .by 106,114,122,130,138,146,154,162
.by 16,24,32,40,48,56,64,72 .by 18,26,34,43,50,58,66,74
.endp .endp
;---------------------------------------------- ;----------------------------------------------
PurchaseAI .proc ; .proc Tosser
; use best defensive :)
; allways
; first check check if any is in use
lda ActiveDefenceWeapon,x
bne DefensiveInUse
ldy #ind_Nuclear_Winter_+1 ;the last defensive weapon
@
dey
cpy #ind_Battery________ ;first defensive weapon (White Flag nad Battery - never use)
beq NoUseDefensive
lda (temp),y ; has address of TanksWeaponsTable
beq @-
tya
; activate defensive weapon
sta ActiveDefenceWeapon,x
lda DefensiveEnergy,y
sta ShieldEnergy,x
; decrease in inventory
clc
sbc #1
sta (temp),y
DefensiveInUse
NoUseDefensive
; Toosser is like Poolshark but allways uses defensives
jmp Poolshark
.endp
;----------------------------------------------
.proc PurchaseAI ;
; A - skill of the TankNr ; A - skill of the TankNr
; makes purchase for AI opponents ; makes purchase for AI opponents
; results of this routine are not visible on the screen ; results of this routine are not visible on the screen
@@ -261,21 +334,22 @@ PurchaseAIRoutines
.word MoronPurchase-1 .word MoronPurchase-1
.word ShooterPurchase-1 ;ShooterPurchase .word ShooterPurchase-1 ;ShooterPurchase
.word PoolsharkPurchase-1 ;PoolsharkPurchase .word PoolsharkPurchase-1 ;PoolsharkPurchase
.word PoolsharkPurchase-1 ;ToosserPurchase .word TosserPurchase-1 ;TosserPurchase
.word PoolsharkPurchase-1 ;ChooserPurchase .word PoolsharkPurchase-1 ;ChooserPurchase
.word PoolsharkPurchase-1 ;SpoilerPurchase .word PoolsharkPurchase-1 ;SpoilerPurchase
.word PoolsharkPurchase-1 ;CyborgPurchase .word PoolsharkPurchase-1 ;CyborgPurchase
.word PoolsharkPurchase-1 ;UnknownPurchase .word PoolsharkPurchase-1 ;UnknownPurchase
;---------------------------------------------- ;----------------------------------------------
MoronPurchase .proc MoronPurchase
;Moron buys nothing ;Moron buys nothing
rts rts
.endp
;------- ;-------
TryToPurchaseOnePiece .proc .proc TryToPurchaseOnePiece
; A - weapon number, better it will be in range(1,32) ; A - weapon number, better it will be in range(1,32)
; TankNr in X ; TankNr in X
; DOES NOT CHANGE X
tay tay
lda PurchaseMeTable,y lda PurchaseMeTable,y
beq SorryNoPurchase beq SorryNoPurchase
@@ -321,28 +395,73 @@ SorryNoPurchase
;---------------------------------------------- ;----------------------------------------------
ShooterPurchase .proc .proc ShooterPurchase
mva #4 tempXroller; number of purchases to perform ; first try to buy defensives
mva #2 tempXroller; number of offensive purchases to perform
ldx TankNr ldx TankNr
loop @
randomize 1 14 randomize ind_Battery________ ind_StrongParachute
jsr TryToPurchaseOnePiece jsr TryToPurchaseOnePiece
dec tempXroller dec tempXroller
bne loop bne @-
; and now offensives
mva #4 tempXroller; number of offensive purchases to perform
;ldx TankNr
@
randomize ind_Missile________ ind_Heavy_Roller___
jsr TryToPurchaseOnePiece
dec tempXroller
bne @-
rts rts
.endp .endp
;---------------------------------------------- ;----------------------------------------------
PoolsharkPurchase .proc .proc PoolsharkPurchase
mva #8 tempXroller; number of purchases to perform ; first try to buy defensives
mva #3 tempXroller; number of offensive purchases to perform
ldx TankNr ldx TankNr
loop @
randomize 1 30 randomize ind_Battery________ ind_Auto_Defense___
jsr TryToPurchaseOnePiece jsr TryToPurchaseOnePiece
dec tempXroller dec tempXroller
bne loop bne @-
; and now offensives
mva #8 tempXroller; number of purchases to perform
;ldx TankNr
@
randomize ind_Missile________ ind_Dirt_Charge____
jsr TryToPurchaseOnePiece
dec tempXroller
bne @-
rts
.endp
;----------------------------------------------
.proc TosserPurchase
; what is my money level
ldx TankNr
lda MoneyH,x ; money / 256
sta tempXroller ; perform this many purchase attempts
; first try to buy defensives
mva #3 tempXroller; number of defensive purchases to perform
@
randomize ind_Battery________ ind_Auto_Defense___
jsr TryToPurchaseOnePiece
dec tempXroller
bne @-
; and now offensives
lda MoneyH,x ; money / 256
asl ;*2
sta tempXroller ; perform this many purchase attempts
@
randomize ind_Missile________ ind_Dirt_Charge____
jsr TryToPurchaseOnePiece
dec tempXroller
bne @-
rts rts
.endp .endp
+1 -1
View File
@@ -456,7 +456,7 @@ quit
ini main ini main
; --- ; ---
opt l- ;opt l-
.MACRO SPRITES .MACRO SPRITES
missiles missiles
Executable → Regular
View File
Executable → Regular
View File
Executable → Regular
View File

Before

Width:  |  Height:  |  Size: 190 B

After

Width:  |  Height:  |  Size: 190 B

Executable → Regular
View File
BIN
View File
Binary file not shown.
Executable → Regular
View File
Executable → Regular
View File
+179 -400
View File
@@ -14,16 +14,15 @@ dliColorsFore
TextBackgroundColor = $02 ; REAL constans - use: LDA #TextBackgroundColor TextBackgroundColor = $02 ; REAL constans - use: LDA #TextBackgroundColor
TextForegroundColor = $0c TextForegroundColor = $0c
CashOptionL ;(one zero less than on the screen) CashOptionL ;(one zero less than on the screen)
.by 0,<200,<500,<800,<1000 .by 0,<200,<800,<1200,<2000
CashOptionH CashOptionH
.by 0,>200,>500,>800,>1000 .by 0,>200,>800,>1200,>2000
GravityTable .by 10,20,25,30,40 GravityTable .by 10,20,25,30,40
MaxWindTable .by 5,20,40,60,80 MaxWindTable .by 5,20,40,70,99
RoundsTable .by 10,20,30,40,50 RoundsTable .by 10,20,30,40,50
flyDelayTable .by 255,150,75,35,1 flyDelayTable .by 255,150,75,35,1
seppukuTable .by 255, 45,25,15,9 seppukuTable .by 255, 45,25,15,9
;------------------------------------------------ ;------------------------------------------------
LevelNameBeginL ; begins of level names LevelNameBeginL ; begins of level names
.by <NamesOfLevels,<(NamesOfLevels+10),<(NamesOfLevels+20) .by <NamesOfLevels,<(NamesOfLevels+10),<(NamesOfLevels+20)
.by <(NamesOfLevels+32),<(NamesOfLevels+42),<(NamesOfLevels+52) .by <(NamesOfLevels+32),<(NamesOfLevels+42),<(NamesOfLevels+52)
@@ -37,31 +36,25 @@ TanksWeaponsTableL
.by <TanksWeapon1,<TanksWeapon2,<TanksWeapon3,<TanksWeapon4,<TanksWeapon5,<TanksWeapon6 .by <TanksWeapon1,<TanksWeapon2,<TanksWeapon3,<TanksWeapon4,<TanksWeapon5,<TanksWeapon6
TanksWeaponsTableH TanksWeaponsTableH
.by >TanksWeapon1,>TanksWeapon2,>TanksWeapon3,>TanksWeapon4,>TanksWeapon5,>TanksWeapon6 .by >TanksWeapon1,>TanksWeapon2,>TanksWeapon3,>TanksWeapon4,>TanksWeapon5,>TanksWeapon6
;-----4x4 texts-----
;-----4x4 texts-----
LineTop LineTop
dta d"(%%%%%%%%%%%%)" dta d"(%%%%%%%%%%%%)", $ff
.byte $ff
;# - vertical, () * +, % - horizontal ;# - vertical, () * +, % - horizontal
LineBottom LineBottom
dta d"*%%%%%%%%%%%%+" dta d"*%%%%%%%%%%%%+", $ff
.byte $ff
LineEmpty LineEmpty
dta d"# #" dta d"# #", $ff
.byte $ff
LineHeader2 LineHeader2
dta d"# RESULTS #" dta d"# RESULTS #", $ff
.byte $ff
LineGameOver LineGameOver
dta d"# GAME OVER #" dta d"# GAME OVER #", $ff
.byte $ff
seppukuText seppukuText
dta d"# SEPPUKU! #" dta d"# SEPPUKU! #", $ff
.byte $ff areYouSureText
dta d"# SURE? Y/N #", $ff
lineClear lineClear
dta d" " dta d" ", $ff
.byte $ff
;----------- ;-----------
pmtableL ; addressess of the P/M memory for 5 tanks (6th is without P/M background) pmtableL ; addressess of the P/M memory for 5 tanks (6th is without P/M background)
@@ -77,32 +70,6 @@ pmtableH
.by >(pmgraph+$700) .by >(pmgraph+$700)
.by >(pmgraph+$300) .by >(pmgraph+$300)
;----------- ;-----------
; this table changes Angle to the appropriate tank character
BarrelTableL
.by $02,$02,$02,$02,$02,$02,$02,$02
.by $04,$04,$04,$04,$04,$04,$04,$04
.by $06,$06,$06,$06,$06,$06,$06,$06,$06
.by $08,$08,$08,$08,$08,$08,$08,$08
.by $0a,$0a,$0a,$0a,$0a,$0a,$0a,$0a
.by $0c,$0c,$0c,$0c,$0c,$0c,$0c,$0c,$0c
.by $0e,$0e,$0e,$0e,$0e,$0e,$0e,$0e
.by $10,$10,$10,$10,$10,$10,$10,$10
.by $12,$12,$12,$12,$12,$12,$12,$12,$12
.by $14,$14,$14,$14,$14,$14,$14,$14
.by $16,$16,$16,$16,$16,$16,$16,$16
BarrelTableR
.by $2c,$2c,$2c,$2c,$2c,$2c,$2c,$2c
.by $2a,$2a,$2a,$2a,$2a,$2a,$2a,$2a
.by $28,$28,$28,$28,$28,$28,$28,$28,$28
.by $26,$26,$26,$26,$26,$26,$26,$26
.by $24,$24,$24,$24,$24,$24,$24,$24
.by $22,$22,$22,$22,$22,$22,$22,$22,$22
.by $20,$20,$20,$20,$20,$20,$20,$20
.by $1e,$1e,$1e,$1e,$1e,$1e,$1e,$1e
.by $1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c,$1c
.by $1a,$1a,$1a,$1a,$1a,$1a,$1a,$1a
.by $18,$18,$18,$18,$18,$18,$18,$18
sintable sintable
.by 0 .by 0
.by 4 .by 4
@@ -217,328 +184,102 @@ disktance ;tanks distance
; this table is for deciding where a tank should slide ; this table is for deciding where a tank should slide
; accordingly to what is below the tank ; accordingly to what is below the tank
; there are 3 bits used here ; values in table mean that tank is moving to the left
; bit 0 - go down SlideLeftTable
; bit 1 - go left .BY %00000001
; bit 2 - go right .BY %00000010
; position in the table equals to bit pattern of soil below tank .BY %00000011
.BY %00000100
.BY %00000101
.BY %00000110
.BY %00000111
.BY %00001100
WhereToSlideTable ;-----------------------------------------------------------
; we have 3 bits, when set: 2 - go left, 1 - go right, 0 - go down ; this table changes Angle to the appropriate tank character
.BY %001 ; 00000000 BarrelTable
.BY %101 ; 00000001
.BY %100 ; 00000010 .by $2C,$2C,$2C,$2C,$2C,$2C,$2C,$2C,$2A,$2A,
.BY %100 ; 00000011 .by $2A,$2A,$2A,$2A,$2A,$2A,$28,$28,$28,$28,
.BY %100 ; 00000100 .by $28,$28,$28,$28,$28,$26,$26,$26,$26,$26,
.BY %100 ; 00000101 .by $26,$26,$26,$24,$24,$24,$24,$24,$24,$24,
.BY %100 ; 00000110 .by $24,$22,$22,$22,$22,$22,$22,$22,$22,$22,
.BY %100 ; 00000111 .by $20,$20,$20,$20,$20,$20,$20,$20,$1E,$1E,
.BY %000 ; 00001000 .by $1E,$1E,$1E,$1E,$1E,$1E,$1C,$1C,$1C,$1C,
.BY %000 ; 00001001 .by $1C,$1C,$1C,$1C,$1C,$1A,$1A,$1A,$1A,$1A,
.BY %000 ; 00001010 .by $1A,$1A,$1A,$18,$18,$18,$18,$18,$18,$18,
.BY %000 ; 00001011 ;.by $18,
.BY %100 ; 00001100
.BY %000 ; 00001101 .by $16,$16,$16,$16,$16,$16,$16,$16,$14,$14,
.BY %000 ; 00001110 .by $14,$14,$14,$14,$14,$14,$12,$12,$12,$12,
.BY %000 ; 00001111 .by $12,$12,$12,$12,$12,$10,$10,$10,$10,$10,
.BY %000 ; 00010000 .by $10,$10,$10,$0E,$0E,$0E,$0E,$0E,$0E,$0E,
.BY %000 ; 00010001 .by $0E,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,
.BY %000 ; 00010010 .by $0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$08,$08,
.BY %000 ; 00010011 .by $08,$08,$08,$08,$08,$08,$06,$06,$06,$06,
.BY %000 ; 00010100 .by $06,$06,$06,$06,$06,$04,$04,$04,$04,$04,
.BY %000 ; 00010101 .by $04,$04,$04,$02,$02,$02,$02,$02,$02,$02,
.BY %000 ; 00010110 .by $02,
.BY %000 ; 00010111
.BY %000 ; 00011000
.BY %000 ; 00011001
.BY %000 ; 00011010
.BY %000 ; 00011011
.BY %000 ; 00011100
.BY %000 ; 00011101
.BY %000 ; 00011110
.BY %000 ; 00011111
.BY %010 ; 00100000
.BY %000 ; 00100001
.BY %000 ; 00100010
.BY %000 ; 00100011
.BY %000 ; 00100100
.BY %000 ; 00100101
.BY %000 ; 00100110
.BY %000 ; 00100111
.BY %000 ; 00101000
.BY %000 ; 00101001
.BY %000 ; 00101010
.BY %000 ; 00101011
.BY %000 ; 00101100
.BY %000 ; 00101101
.BY %000 ; 00101110
.BY %000 ; 00101111
.BY %010 ; 00110000
.BY %000 ; 00110001
.BY %000 ; 00110010
.BY %000 ; 00110011
.BY %000 ; 00110100
.BY %000 ; 00110101
.BY %000 ; 00110110
.BY %000 ; 00110111
.BY %000 ; 00111000
.BY %000 ; 00111001
.BY %000 ; 00111010
.BY %000 ; 00111011
.BY %000 ; 00111100
.BY %000 ; 00111101
.BY %000 ; 00111110
.BY %000 ; 00111111
.BY %010 ; 01000000
.BY %000 ; 01000001
.BY %000 ; 01000010
.BY %000 ; 01000011
.BY %000 ; 01000100
.BY %000 ; 01000101
.BY %000 ; 01000110
.BY %000 ; 01000111
.BY %000 ; 01001000
.BY %000 ; 01001001
.BY %000 ; 01001010
.BY %000 ; 01001011
.BY %000 ; 01001100
.BY %000 ; 01001101
.BY %000 ; 01001110
.BY %000 ; 01001111
.BY %000 ; 01010000
.BY %000 ; 01010001
.BY %000 ; 01010010
.BY %000 ; 01010011
.BY %000 ; 01010100
.BY %000 ; 01010101
.BY %000 ; 01010110
.BY %000 ; 01010111
.BY %000 ; 01011000
.BY %000 ; 01011001
.BY %000 ; 01011010
.BY %000 ; 01011011
.BY %000 ; 01011100
.BY %000 ; 01011101
.BY %000 ; 01011110
.BY %000 ; 01011111
.BY %010 ; 01100000
.BY %000 ; 01100001
.BY %000 ; 01100010
.BY %000 ; 01100011
.BY %000 ; 01100100
.BY %000 ; 01100101
.BY %000 ; 01100110
.BY %000 ; 01100111
.BY %000 ; 01101000
.BY %000 ; 01101001
.BY %000 ; 01101010
.BY %000 ; 01101011
.BY %000 ; 01101100
.BY %000 ; 01101101
.BY %000 ; 01101110
.BY %000 ; 01101111
.BY %000 ; 01110000
.BY %000 ; 01110001
.BY %000 ; 01110010
.BY %000 ; 01110011
.BY %000 ; 01110100
.BY %000 ; 01110101
.BY %000 ; 01110110
.BY %000 ; 01110111
.BY %000 ; 01111000
.BY %000 ; 01111001
.BY %000 ; 01111010
.BY %000 ; 01111011
.BY %000 ; 01111100
.BY %000 ; 01111101
.BY %000 ; 01111110
.BY %000 ; 01111111
.BY %011 ; 10000000
.BY %000 ; 10000001
.BY %000 ; 10000010
.BY %000 ; 10000011
.BY %000 ; 10000100
.BY %000 ; 10000101
.BY %000 ; 10000110
.BY %000 ; 10000111
.BY %000 ; 10001000
.BY %000 ; 10001001
.BY %000 ; 10001010
.BY %000 ; 10001011
.BY %000 ; 10001100
.BY %000 ; 10001101
.BY %000 ; 10001110
.BY %000 ; 10001111
.BY %000 ; 10010000
.BY %000 ; 10010001
.BY %000 ; 10010010
.BY %000 ; 10010011
.BY %000 ; 10010100
.BY %000 ; 10010101
.BY %000 ; 10010110
.BY %000 ; 10010111
.BY %000 ; 10011000
.BY %000 ; 10011001
.BY %000 ; 10011010
.BY %000 ; 10011011
.BY %000 ; 10011100
.BY %000 ; 10011101
.BY %000 ; 10011110
.BY %000 ; 10011111
.BY %010 ; 10100000
.BY %000 ; 10100001
.BY %000 ; 10100010
.BY %000 ; 10100011
.BY %000 ; 10100100
.BY %000 ; 10100101
.BY %000 ; 10100110
.BY %000 ; 10100111
.BY %000 ; 10101000
.BY %000 ; 10101001
.BY %000 ; 10101010
.BY %000 ; 10101011
.BY %000 ; 10101100
.BY %000 ; 10101101
.BY %000 ; 10101110
.BY %000 ; 10101111
.BY %000 ; 10110000
.BY %000 ; 10110001
.BY %000 ; 10110010
.BY %000 ; 10110011
.BY %000 ; 10110100
.BY %000 ; 10110101
.BY %000 ; 10110110
.BY %000 ; 10110111
.BY %000 ; 10111000
.BY %000 ; 10111001
.BY %000 ; 10111010
.BY %000 ; 10111011
.BY %000 ; 10111100
.BY %000 ; 10111101
.BY %000 ; 10111110
.BY %000 ; 10111111
.BY %010 ; 11000000
.BY %000 ; 11000001
.BY %000 ; 11000010
.BY %000 ; 11000011
.BY %000 ; 11000100
.BY %000 ; 11000101
.BY %000 ; 11000110
.BY %000 ; 11000111
.BY %000 ; 11001000
.BY %000 ; 11001001
.BY %000 ; 11001010
.BY %000 ; 11001011
.BY %000 ; 11001100
.BY %000 ; 11001101
.BY %000 ; 11001110
.BY %000 ; 11001111
.BY %000 ; 11010000
.BY %000 ; 11010001
.BY %000 ; 11010010
.BY %000 ; 11010011
.BY %000 ; 11010100
.BY %000 ; 11010101
.BY %000 ; 11010110
.BY %000 ; 11010111
.BY %000 ; 11011000
.BY %000 ; 11011001
.BY %000 ; 11011010
.BY %000 ; 11011011
.BY %000 ; 11011100
.BY %000 ; 11011101
.BY %000 ; 11011110
.BY %000 ; 11011111
.BY %010 ; 11100000
.BY %000 ; 11100001
.BY %000 ; 11100010
.BY %000 ; 11100011
.BY %000 ; 11100100
.BY %000 ; 11100101
.BY %000 ; 11100110
.BY %000 ; 11100111
.BY %000 ; 11101000
.BY %000 ; 11101001
.BY %000 ; 11101010
.BY %000 ; 11101011
.BY %000 ; 11101100
.BY %000 ; 11101101
.BY %000 ; 11101110
.BY %000 ; 11101111
.BY %000 ; 11110000
.BY %000 ; 11110001
.BY %000 ; 11110010
.BY %000 ; 11110011
.BY %000 ; 11110100
.BY %000 ; 11110101
.BY %000 ; 11110110
.BY %000 ; 11110111
.BY %000 ; 11111000
.BY %000 ; 11111001
.BY %000 ; 11111010
.BY %000 ; 11111011
.BY %000 ; 11111100
.BY %000 ; 11111101
.BY %000 ; 11111110
.BY %000 ; 11111111
EndOfTheBarrelX EndOfTheBarrelX
.by 4,4,4,4,4,4,4,4,4,4,4 ; right angles from 0 (horizontally right) to 90 (up)
.by 5,5,5,5,5,5,5,5,5,5
.by 6,6,6,6,6,6,6,6,6
.by 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
.by 7,7,7,7,7,7,7,7,7
.by 7,7,7,7,7,7,7,7,7,7
.by 7,7,7,7,7,7,7,7,7,7,7,7,7
.by 7,7,7,7,7,7,7,7,7,7,7,7,7,7
.by 0,0,0,0,0,0,0,0,0,0 .by 7,7,7,7,7,7,7,7,7,7,
.by 0,0,0,0,0,0,0,0,0,0 .by 7,7,7,7,7,7,7,7,7,7,
.by 0,0,0,0,0,0,0,0,0,0 .by 7,7,7,7,7,7,7,7,7,7,
.by 0,0,0,0,0,0,0,0,0,0 .by 7,7,7,7,7,7,7,7,7,7,
.by 0,0,0,0,0,0,0,0,0,0 .by 7,7,7,7,7,7,7,7,7,7,
.by 0,0,0,0,0,0,0,0,0,0 .by 7,7,7,7,7,7,7,7,7,7,
.by 0,0,0,0,0,0,0,0,0,0 .by 7,6,6,6,6,6,6,6,6,6,
.by 0,0,0,0 .by 5,5,5,5,5,5,5,5,5,5,
.by 4,4,4,4,4,4,4,4,4,4,
;.by 4,
.by 0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; left angles from 90 (vertical) to 180 (horizontally left)
.by 0,0,0,0,0,0,0,0,0,0,0,0,0 .by 3,3,3,3,3,3,3,3,3,3,
.by 0,0,0,0,0,0,0,0,0,0 .by 3,2,2,2,2,2,2,2,2,2,
.by 0,0,0,0,0,0,0,0,0 .by 2,1,1,1,1,1,1,1,1,1,
.by 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 .by 0,0,0,0,0,0,0,0,0,0,
.by 1,1,1,1,1,1,1,1,1 .by 0,0,0,0,0,0,0,0,0,0,
.by 2,2,2,2,2,2,2,2,2,2 .by 0,0,0,0,0,0,0,0,0,0,
.by 3,3,3,3,3,3,3,3,3,3,3 .by 0,0,0,0,0,0,0,0,0,0,
.by 0,0,0,0,0,0,0,0,0,0,
.by 0,0,0,0,0,0,0,0,0,0,
.by 0
EndOfTheBarrelY EndOfTheBarrelY
.by 7,7,7,7,7,7,7,7,7,7,7 ; right angles from 0 (horizontally right) to 90 (up)
.by 7,7,7,7,7,7,7,7,7,7
.by 7,7,7,7,7,7,7,7,7 ; one pixel Up for fix problems with colision check
.by 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 ;.by 3,3,3,3,3,3,3,3,3,3,3,3,3,3
.by 6,6,6,6,6,6,6,6,6 .by 4,4,4,4,4,4,4,4,4,4,
.by 5,5,5,5,5,5,5,5,5,5 .by 4,4,4,4,4,4,4,4,4,4,
.by 4,4,4,4,4,4,4,4,4,4,4,4,4 .by 4,4,4,4,4,4,4,5,5,5,
.by 3,3,3,3,3,3,3,3,3,3,3,3,3,3 .by 5,5,5,5,5,5,5,6,6,6,
.by 6,6,6,6,6,6,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
;.by 7,
; left angles from 90 (vertical) to 180 (horizontally left)
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,6,6,6,6,6,
.by 6,6,6,6,5,5,5,5,5,5,
.by 5,5,5,5,4,4,4,4,4,4,
.by 4,4,4,4,4,4,4,4,4,4,
.by 4,4,4,4,4,4,4,4,4,4,
.by 4,
; one pixel Up for fix problems with colision check
;.by 3,3,3,3,3,3,3,3,3,3,3,3,3,3
.by 0,0,0,0,0,0,0,0,0,0
.by 0,0,0,0,0,0,0,0,0,0
.by 0,0,0,0,0,0,0,0,0,0
.by 0,0,0,0,0,0,0,0,0,0
.by 0,0,0,0,0,0,0,0,0,0
.by 0,0,0,0,0,0,0,0,0,0
.by 0,0,0,0,0,0,0,0,0,0
.by 0,0,0,0
.by 3,3,3,3,3,3,3,3,3,3,3,3,3,3
.by 4,4,4,4,4,4,4,4,4,4,4,4,4
.by 5,5,5,5,5,5,5,5,5,5
.by 6,6,6,6,6,6,6,6,6
.by 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
.by 7,7,7,7,7,7,7,7,7
.by 7,7,7,7,7,7,7,7,7,7
.by 7,7,7,7,7,7,7,7,7,7,7
;------------------------------------------------- ;-------------------------------------------------
TanksNamesDefault TanksNamesDefault
dta d"1st.Tank" dta d"1st.Tank"
dta d"2nd.Tank" dta d"2nd.Tank"
@@ -547,7 +288,6 @@ TanksNamesDefault
dta d"5th.Tank" dta d"5th.Tank"
dta d"6th.Tank" dta d"6th.Tank"
WeaponPriceH ; weapons prices (tables with prices of weapons) WeaponPriceH ; weapons prices (tables with prices of weapons)
.by >price_Baby_Missile___ .by >price_Baby_Missile___
.by >price_Missile________ .by >price_Missile________
@@ -597,13 +337,14 @@ WeaponPriceH ; weapons prices (tables with prices of weapons)
.by >price______________45 .by >price______________45
.by >price______________46 .by >price______________46
.by >price______________47 .by >price______________47
.by >price_Heat_Guidance__ .by >price_White_Flag_____
.by >price_Battery________
.by >price_Bal_Guidance___ .by >price_Bal_Guidance___
.by >price_Horz_Guidance__ .by >price_Horz_Guidance__
.by >price_Vert_Guidance__ .by >price_Vert_Guidance__
.by >price_Lazy_Boy_______ .by >price_Lazy_Boy_______
.by >price_Parachute______ .by >price_Parachute______
.by >price_Battery________ .by >price_StrongParachute
.by >price_Mag_Deflector__ .by >price_Mag_Deflector__
.by >price_Shield_________ .by >price_Shield_________
.by >price_Force_Shield___ .by >price_Force_Shield___
@@ -611,8 +352,7 @@ WeaponPriceH ; weapons prices (tables with prices of weapons)
.by >price_Super_Mag______ .by >price_Super_Mag______
.by >price_Auto_Defense___ .by >price_Auto_Defense___
.by >price_Fuel_Tank______ .by >price_Fuel_Tank______
.by >price_Contact_Trigger .by >price_Nuclear_Winter_
.by >price_White_Flag_____
WeaponPriceL WeaponPriceL
.by <price_Baby_Missile___ .by <price_Baby_Missile___
@@ -663,13 +403,14 @@ WeaponPriceL
.by <price______________45 .by <price______________45
.by <price______________46 .by <price______________46
.by <price______________47 .by <price______________47
.by <price_Heat_Guidance__ .by <price_White_Flag_____
.by <price_Battery________
.by <price_Bal_Guidance___ .by <price_Bal_Guidance___
.by <price_Horz_Guidance__ .by <price_Horz_Guidance__
.by <price_Vert_Guidance__ .by <price_Vert_Guidance__
.by <price_Lazy_Boy_______ .by <price_Lazy_Boy_______
.by <price_Parachute______ .by <price_Parachute______
.by <price_Battery________ .by <price_StrongParachute
.by <price_Mag_Deflector__ .by <price_Mag_Deflector__
.by <price_Shield_________ .by <price_Shield_________
.by <price_Force_Shield___ .by <price_Force_Shield___
@@ -677,8 +418,7 @@ WeaponPriceL
.by <price_Super_Mag______ .by <price_Super_Mag______
.by <price_Auto_Defense___ .by <price_Auto_Defense___
.by <price_Fuel_Tank______ .by <price_Fuel_Tank______
.by <price_Contact_Trigger .by <price_Nuclear_Winter_
.by <price_White_Flag_____
;------------------------------------------------- ;-------------------------------------------------
; how many units (bulletd) of a given weapon we get for a given price ; how many units (bulletd) of a given weapon we get for a given price
@@ -689,18 +429,18 @@ WeaponPriceL
WeaponUnits WeaponUnits
.by 10 ;Baby_Missile___ .by 10 ;Baby_Missile___
.by 5 ;Missile________ .by 5 ;Missile________
.by 3 ;Baby_Nuke______ .by 2 ;Baby_Nuke______
.by 1 ;Nuke___________ .by 1 ;Nuke___________
.by 2 ;LeapFrog_______ .by 2 ;LeapFrog_______
.by 2 ;Funky_Bomb_____ .by 3 ;Funky_Bomb_____
.by 3 ;MIRV___________ .by 2 ;MIRV___________
.by 1 ;Death_s_Head___ .by 1 ;Death_s_Head___
.by 10 ;Napalm_________ .by 10 ;Napalm_________
.by 2 ;Hot_Napalm_____ .by 2 ;Hot_Napalm_____
.by 20 ;Tracer_________ .by 20 ;Tracer_________
.by 10 ;Smoke_Tracer___ .by 10 ;Smoke_Tracer___
.by 10 ;Baby_Roller____ .by 5 ;Baby_Roller____
.by 5 ;Roller_________ .by 3 ;Roller_________
.by 2 ;Heavy_Roller___ .by 2 ;Heavy_Roller___
.by 5 ;Riot_Charge____ .by 5 ;Riot_Charge____
.by 2 ;Riot_Blast_____ .by 2 ;Riot_Blast_____
@@ -712,9 +452,9 @@ WeaponUnits
.by 10 ;Baby_Sandhog___ .by 10 ;Baby_Sandhog___
.by 5 ;Sandhog________ .by 5 ;Sandhog________
.by 2 ;Heavy_Sandhog__ .by 2 ;Heavy_Sandhog__
.by 10 ;Dirt_Clod______ .by 5 ;Dirt_Clod______
.by 5 ;Dirt_Ball______ .by 3 ;Dirt_Ball______
.by 2 ;Ton_of_Dirt____ .by 1 ;Ton_of_Dirt____
.by 4 ;Liquid_Dirt____ .by 4 ;Liquid_Dirt____
.by 2 ;Dirt_Charge____ .by 2 ;Dirt_Charge____
.by 10 ;Earth_Disrupter .by 10 ;Earth_Disrupter
@@ -735,13 +475,14 @@ WeaponUnits
.by 0 ;_____________45 .by 0 ;_____________45
.by 0 ;_____________46 .by 0 ;_____________46
.by 0 ;_____________47 .by 0 ;_____________47
.by 6 ;Heat_Guidance__ .by 1 ;White_Flag___48
.by 3 ;Battery________
.by 2 ;Bal_Guidance___ .by 2 ;Bal_Guidance___
.by 5 ;Horz_Guidance__ .by 5 ;Horz_Guidance__
.by 5 ;Vert_Guidance__ .by 5 ;Vert_Guidance__
.by 2 ;Lazy_Boy_______ .by 2 ;Lazy_Boy_______
.by 8 ;Parachute______ .by 3 ;Parachute______
.by 10 ;Battery________ .by 2 ;StrongParachute
.by 2 ;Mag_Deflector__ .by 2 ;Mag_Deflector__
.by 3 ;Shield_________ .by 3 ;Shield_________
.by 3 ;Force_Shield___ .by 3 ;Force_Shield___
@@ -749,8 +490,7 @@ WeaponUnits
.by 2 ;Super_Mag______ .by 2 ;Super_Mag______
.by 1 ;Auto_Defense___ .by 1 ;Auto_Defense___
.by 10 ;Fuel_Tank______ .by 10 ;Fuel_Tank______
.by 25 ;Contact_Trigger .by 1 ;Nuclear_Winter_
.by 1 ;_____________63
PurchaseMeTable ;weapons good to be purchased by the robot PurchaseMeTable ;weapons good to be purchased by the robot
;the comment is an index in the tables ;the comment is an index in the tables
@@ -802,6 +542,22 @@ PurchaseMeTable ;weapons good to be purchased by the robot
dta 0 ;"----------------" ; 45 dta 0 ;"----------------" ; 45
dta 0 ;"----------------" ; 46 dta 0 ;"----------------" ; 46
dta 0 ;"----------------" ; 47 dta 0 ;"----------------" ; 47
dta 0 ;"White Flag " ; 48
dta 1 ;"Battery " ; 49
dta 0 ;"Bal Guidance " ; 50
dta 0 ;"Horz Guidance " ; 51
dta 0 ;"Vert Guidance " ; 52
dta 0 ;"Lazy Boy " ; 53
dta 1 ;"Parachute " ; 54
dta 1 ;"Strong Parachute" ; 55
dta 1 ;"Mag Deflector " ; 56
dta 1 ;"Shield " ; 57
dta 1 ;"Force Shield " ; 58
dta 1 ;"Heavy Shield " ; 59
dta 0 ;"Super Mag " ; 60
dta 1 ;"Auto Defense " ; 61
dta 0 ;"Fuel Tank " ; 62
dta 0 ;"Nuclear Winter " ; 63
;------------------------------------------------- ;-------------------------------------------------
@@ -813,8 +569,8 @@ WeaponSymbols
.by $58,$59,$5a,$5b,$60,$7b,$7c,$7d .by $58,$59,$5a,$5b,$60,$7b,$7c,$7d
.by $20,$00,$00,$00,$00,$00,$00,$00 .by $20,$00,$00,$00,$00,$00,$00,$00
.by $00,$00,$00,$00,$00,$00,$00,$00 .by $00,$00,$00,$00,$00,$00,$00,$00
.by $02,$03,$06,$1d,$0a,$1b,$1c,$1e .by $5f,$1c,$03,$06,$1d,$0a,$1b,$1b ; defensives
.by $3b,$3c,$3d,$3e,$3f,$5e,$5f,$00 .by $1e,$3b,$3c,$3d,$3e,$3f,$5e,$7d
; Names of weapons (16 chars long) ; Names of weapons (16 chars long)
NamesOfWeapons ;the comment is an index in the tables NamesOfWeapons ;the comment is an index in the tables
@@ -865,26 +621,44 @@ NamesOfWeapons ;the comment is an index in the tables
dta d"----------------" ; 44 dta d"----------------" ; 44
dta d"----------------" ; 45 dta d"----------------" ; 45
dta d"----------------" ; 46 dta d"----------------" ; 46
dta d"----------------" ; 47 dta d" " ; 47 ; special (no weapon) name to simplify display
dta d"Heat Guidance " ; 48 ($30) dta d"White Flag " ; 48 ($30)
dta d"Bal Guidance " ; 49 dta d"Battery " ; 49
dta d"Horz Guidance " ; 50 dta d"Bal Guidance " ; 50
dta d"Vert Guidance " ; 51 dta d"Horz Guidance " ; 51
dta d"Lazy Boy " ; 52 dta d"Vert Guidance " ; 52
dta d"Parachute " ; 53 dta d"Lazy Boy " ; 53
dta d"Battery " ; 54 dta d"Parachute " ; 54 - no energy
dta d"Mag Deflector " ; 55 dta d"Strong Parachute" ; 55 - with energy (earlier Battery)
dta d"Shield " ; 56 dta d"Mag Deflector " ; 56 - with shield and energy
dta d"Force Shield " ; 57 dta d"Shield " ; 57 - shield for one shot - no energy
dta d"Heavy Shield " ; 58 dta d"Force Shield " ; 58 - shield with energy and parachute
dta d"Super Mag " ; 59 dta d"Heavy Shield " ; 59 - shield with energy
dta d"Auto Defense " ; 60 dta d"Super Mag " ; 60
dta d"Fuel Tank " ; 61 dta d"Auto Defense " ; 61 - with shield and energy
dta d"Contact Trigger " ; 62 dta d"Fuel Tank " ; 62
dta d"White Flag " ; 63 dta d"Nuclear Winter " ; 63
DefensiveEnergy = * - 48
.by 00 ; White Flag
.by 00 ; Heat Guidance
.by 00 ; Bal Guidance
.by 00 ; Horz Guidance
.by 00 ; Vert Guidance
.by 00 ; Lazy Boy
.by 00 ; Parachute
.by 99 ; Strong Parachute
.by 99 ; Mag Deflector
.by 00 ; Shield
.by 99 ; Force Shield
.by 99 ; Heavy Shield
.by 00 ; Super Mag
.by 99 ; Auto Defense
.by 00 ; Fuel Tank
.by 00 ; Nuclear Winter
weaponsOfDeath weaponsOfDeath
dta 0,1,2,3,7,8,9,15,16,17,18,19,20,21,22,23,24,25,26,27 dta 1,2,3,7,17,18,19,20,21,22,23,24,25,26,27
weaponsOfDeathEnd
joyToKeyTable joyToKeyTable
; .by 00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15 ; .by 00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15
.by $ff,$ff,$ff,$ff,$ff,$ff,$ff,$07,$ff,$ff,$ff,$06,$ff,$0f,$0e,$ff .by $ff,$ff,$ff,$ff,$ff,$ff,$ff,$07,$ff,$ff,$ff,$06,$ff,$0f,$0e,$ff
@@ -903,5 +677,10 @@ scrcodes
dta d"qrstuvwx" dta d"qrstuvwx"
dta d"yz123456" dta d"yz123456"
dta d"7890." ; "-" dta d"7890." ; "-"
;-----------------------------------
gameOverSpritesTop
; end of the Gover sprites by number of players
; 1 2 3 4 5 6
.by 130,130,136,142,148,154
.endif .endif
+105 -31
View File
@@ -23,27 +23,27 @@ price_Napalm_________ = $ffff ;496 ;_8
price_Hot_Napalm_____ = $ffff ;511 ;_9 price_Hot_Napalm_____ = $ffff ;511 ;_9
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_Earth_Disrupter = $ffff ;430 ;_30
price_Plasma_Blast___ = $ffff ;274 ;_31 price_Plasma_Blast___ = $ffff ;274 ;_31
price_Laser__________ = 577 ;_32 price_Laser__________ = 277 ;_32
price______________33 = 0 price______________33 = 0
price______________34 = 0 price______________34 = 0
price______________35 = 0 price______________35 = 0
@@ -59,22 +59,87 @@ price______________44 = 0
price______________45 = 0 price______________45 = 0
price______________46 = 0 price______________46 = 0
price______________47 = 0 price______________47 = 0
price_Heat_Guidance__ = $ffff ;_48_($30) price_White_Flag_____ = $0 ;_48_($30)
price_Bal_Guidance___ = $ffff ;_49 price_Battery________ = 300 ;_49
price_Horz_Guidance__ = $ffff ;_50 price_Bal_Guidance___ = $ffff ;_50
price_Vert_Guidance__ = $ffff ;_51 price_Horz_Guidance__ = $ffff ;_51
price_Lazy_Boy_______ = $ffff ;_52 price_Vert_Guidance__ = $ffff ;_52
price_Parachute______ = 1100 ;_53 price_Lazy_Boy_______ = $ffff ;_53
price_Battery________ = $ffff ;_54 price_Parachute______ = 234 ;_54
price_Mag_Deflector__ = $ffff ;_55 price_StrongParachute = 1000 ;_55
price_Shield_________ = $ffff ;_56 price_Mag_Deflector__ = 745 ;_56
price_Force_Shield___ = $ffff ;_57 price_Shield_________ = 224 ;_57
price_Heavy_Shield___ = $ffff ;_58 price_Force_Shield___ = 1100 ;_58
price_Super_Mag______ = $ffff ;_59 price_Heavy_Shield___ = 628 ;_59
price_Auto_Defense___ = $ffff ;_60 price_Super_Mag______ = $ffff ;_60
price_Fuel_Tank______ = $ffff ;_61 price_Auto_Defense___ = 512 ;_61
price_Contact_Trigger = $ffff ;_62 price_Fuel_Tank______ = $ffff ;_62
price_White_Flag_____ = $0 ;_63 price_Nuclear_Winter_ = 1000 ;_63
;Weapon indexes (numbers)
ind_Baby_Missile___ = 0
ind_Missile________ = 1
ind_Baby_Nuke______ = 2
ind_Nuke___________ = 3
ind_LeapFrog_______ = 4
ind_Funky_Bomb_____ = 5
ind_MIRV___________ = 6
ind_Death_s_Head___ = 7
ind_Napalm_________ = 8
ind_Hot_Napalm_____ = 9
ind_Tracer_________ = 10
ind_Smoke_Tracer___ = 11
ind_Baby_Roller____ = 12
ind_Roller_________ = 13
ind_Heavy_Roller___ = 14
ind_Riot_Charge____ = 15
ind_Riot_Blast_____ = 16
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_Earth_Disrupter = 30
ind_Plasma_Blast___ = 31
ind_Laser__________ = 32
ind______________33 = 0
ind______________34 = 0
ind______________35 = 0
ind______________36 = 0
ind______________37 = 0
ind______________38 = 0
ind______________39 = 0
ind______________40 = 0
ind______________41 = 0
ind______________42 = 0
ind______________43 = 0
ind______________44 = 0
ind______________45 = 0
ind______________46 = 0
ind______________47 = 0
ind_White_Flag_____ = 48
ind_Battery________ = 49
ind_Bal_Guidance___ = 50
ind_Horz_Guidance__ = 51
ind_Vert_Guidance__ = 52
ind_Lazy_Boy_______ = 53
ind_Parachute______ = 54
ind_StrongParachute = 55
ind_Mag_Deflector__ = 56
ind_Shield_________ = 57
ind_Force_Shield___ = 58
ind_Heavy_Shield___ = 59
ind_Super_Mag______ = 60
ind_Auto_Defense___ = 61
ind_Fuel_Tank______ = 62
ind_Nuclear_Winter_ = 63
;-------------------------------- ;--------------------------------
; names of RMT instruments (sfx) ; names of RMT instruments (sfx)
;-------------------------------- ;--------------------------------
@@ -106,3 +171,12 @@ sfx_keyclick = $18 ;y
sfx_shoot = $19 ;z sfx_shoot = $19 ;z
sfx_seppuku = $1a ;1 sfx_seppuku = $1a ;1
sfx_liquid_dirt = $1b ;2 sfx_liquid_dirt = $1b ;2
sfx_battery = $1c ;3
sfx_white_flag = $1d ;4
;--------------------------------
; RMT songs (lines)
;--------------------------------
song_silencio = $00
song_end_round = $02
song_ingame = $06
song_game_over = $0b
Executable → Regular
+12 -4
View File
@@ -104,7 +104,7 @@ OptionsScreen
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 "
@@ -136,7 +136,9 @@ WeaponsDescription
dta d" - Defensive/Offensive weapon " dta d" - Defensive/Offensive weapon "
dta d" " dta d" "
dta d"Space"* dta d"Space"*
dta d" - Purchase " dta d" - "
purchaseActivate
dta d"Purchase "
dta d"Return"* dta d"Return"*
dta d" - Finish " dta d" - Finish "
EmptyLine EmptyLine
@@ -169,8 +171,14 @@ textbuffer
dta d"Energy: Angle: Force: " dta d"Energy: Angle: Force: "
dta d"Round: Wind: " dta d"Round: Wind: "
textbuffer2 textbuffer2
dta d"Player: Cash: " dta d"Player: Cash: 0 " ; ZERO TO MAKE YOU RICHER ON THE SCREEN
dta d"----------------------------------------" dta d"----------------------------------------"
;---------------------------------------------------
activateText
dta d"Activate"
activateTextEnd
purchaseText
dta d"Purchase"
purchaseTextEnd
.endif .endif
Executable → Regular
+384 -264
View File
@@ -4,7 +4,7 @@
;-------------------------------------------------- ;--------------------------------------------------
draw .proc ;;fuxxing good draw :) .proc draw ;;fuxxing good draw :)
;-------------------------------------------------- ;--------------------------------------------------
;creditz to Dr Jankowski / MIM U.W. ;creditz to Dr Jankowski / MIM U.W.
; (xi,yi)-----(xk,yk) ; (xi,yi)-----(xk,yk)
@@ -43,9 +43,9 @@ draw .proc ;;fuxxing good draw :)
;cpw ybyte #screenheight ;cpw ybyte #screenheight
;bcc DrawOnTheScreen ;bcc DrawOnTheScreen
lda ydraw+1 lda ydraw+1
bne DrawOutOfTheScreen bmi DrawOutOfTheScreen
lda ybyte+1 lda ybyte+1
beq DrawOnTheScreen bpl DrawOnTheScreen
DrawOutOfTheScreen DrawOutOfTheScreen
;jsr DrawJumpPad ;jsr DrawJumpPad
rts rts
@@ -214,9 +214,61 @@ LineGoesLeft
; line goes left - we are reversing X ; line goes left - we are reversing X
sbw xtempDRAW temp xdraw ; XI sbw xtempDRAW temp xdraw ; XI
PutPixelinDraw PutPixelinDraw
jsr DrawJumpPad
; end of the special PLOT for DRAW
; 0 - plot, %10000000 - LineLength (N), %01000000 - DrawCheck (V)
bit drawFunction
bpl @+
inw LineLength
bne ContinueDraw ; ==jmp
@
bvc @+
DrawCheck
lda tracerflag
ora SmokeTracerFlag
yestrace
beq notrace
jsr plot
notrace
;aftertrace
;key
lda HitFlag
bne StopHitChecking
CheckCollisionDraw
; checking collision!
lda ydraw+1
bmi StopHitChecking
jsr CheckCollisionWithTank
lda HitFlag
bne StopHitChecking
clc
lda xdraw
adc #<mountaintable
sta temp
lda xdraw+1
adc #>mountaintable
sta temp+1
ldy #0
lda ydraw
cmp (temp),y
bcc StopHitChecking
mwa xdraw XHit
lda (temp),y
sec
sbc #1
sta YHit
sty YHit+1
mva #$ff HitFlag
StopHitChecking
jmp ContinueDraw
@
jsr plot
ContinueDraw
; XI=XI+1 ; XI=XI+1
; UNTIL XI=XK ; UNTIL XI=XK
inw XI inw XI
@@ -225,59 +277,12 @@ PutPixelinDraw
EndOfDraw EndOfDraw
mwa xtempDRAW xdraw mwa xtempDRAW xdraw
mva ytempDRAW ydraw mwa ytempDRAW ydraw
rts
.endp
;-------------JumpPad-------------
DrawJumpPad
jmp (DrawJumpAddr)
Drawplot
jmp plot
DrawLen
inw LineLength
rts
;-------------JumpPad-------------
DrawCheck .proc
lda tracerflag
ora SmokeTracerFlag
yestrace
beq notrace
jsr plot
notrace
;aftertrace
lda HitFlag
bne StopHitChecking
CheckCollisionDraw
; checking collision!
lda ydraw+1
bne StopHitChecking
jsr CheckCollisionWithTank
lda HitFlag
bne StopHitChecking
mwa xdraw temp
adw temp #mountaintable
ldy #0
lda ydraw
cmp (temp),y
bcc StopHitChecking
mva #1 HitFlag
mwa xdraw XHit
mwa ydraw YHit
StopHitChecking
rts rts
.endp .endp
;-------------------------------------------------- ;--------------------------------------------------
circle .proc ;fxxxing good circle drawing :) .proc circle ;fxxxing good circle drawing :)
;-------------------------------------------------- ;--------------------------------------------------
;Turbo Basic source ;Turbo Basic source
; R=30 ; R=30
@@ -298,7 +303,7 @@ circle .proc ;fxxxing good circle drawing :)
; splot8 ; splot8
mwa xdraw xcircle mwa xdraw xcircle
mva ydraw ycircle mwa ydraw ycircle
mwa #0 xc mwa #0 xc
mva radius yc mva radius yc
@@ -354,11 +359,11 @@ endcircleloop
jsr splot8 jsr splot8
mwa xcircle xdraw mwa xcircle xdraw
mva ycircle ydraw mwa ycircle ydraw
rts rts
.endp .endp
;---- ;----
splot8 .proc .proc splot8
; plot xcircle+XC,ycircle+YC ; plot xcircle+XC,ycircle+YC
; plot xcircle+XC,ycircle-YC ; plot xcircle+XC,ycircle-YC
; plot xcircle-XC,ycircle-YC ; plot xcircle-XC,ycircle-YC
@@ -381,12 +386,19 @@ splot8 .proc
adc YC adc YC
sta ydraw sta ydraw
sta tempcir sta tempcir
lda ycircle+1
adc #$00
sta ydraw+1
sta tempcir+1
jsr plot jsr plot
sec sec
lda ycircle lda ycircle
sbc YC sbc YC
sta ydraw sta ydraw
lda ycircle+1
sbc #$00
sta ydraw+1
jsr plot jsr plot
sec sec
@@ -400,6 +412,8 @@ splot8 .proc
lda tempcir lda tempcir
sta ydraw sta ydraw
lda tempcir+1
sta ydraw+1
jsr plot jsr plot
;--- ;---
clc clc
@@ -414,12 +428,19 @@ splot8 .proc
adc xC adc xC
sta ydraw sta ydraw
sta tempcir sta tempcir
lda ycircle+1
adc #$00
sta ydraw+1
sta tempcir+1
jsr plot jsr plot
sec sec
lda ycircle lda ycircle
sbc xC sbc xC
sta ydraw sta ydraw
lda ycircle+1
sbc #$00
sta ydraw+1
jsr plot jsr plot
sec sec
@@ -433,13 +454,15 @@ splot8 .proc
lda tempcir lda tempcir
sta ydraw sta ydraw
lda tempcir+1
sta ydraw+1
jsr plot jsr plot
RTS RTS
.endp .endp
;-------------------------------------------------- ;--------------------------------------------------
clearscreen .proc .proc clearscreen
;-------------------------------------------------- ;--------------------------------------------------
lda #$ff lda #$ff
@@ -453,7 +476,7 @@ clearscreen .proc
rts rts
.endp .endp
;-------------------------------*------------------ ;-------------------------------*------------------
placetanks .proc .proc placetanks
;-------------------------------------------------- ;--------------------------------------------------
ldx #(MaxPlayers-1) ;maxNumberOfPlayers-1 ldx #(MaxPlayers-1) ;maxNumberOfPlayers-1
lda #0 lda #0
@@ -560,55 +583,44 @@ UnequalTanks
bpl CheckNextTank bpl CheckNextTank
rts rts
.endp .endp
;-------------------------------------------------
drawtanks
;-------------------------------------------------
;-------------------------------------------------
lda tanknr .proc drawtanks
;-------------------------------------------------
lda TankNr
pha pha
ldx #$00 ldx #$00
stx tanknr stx TankNr
DrawNextTank DrawNextTank
jsr drawtanknr jsr drawtanknr
inc tanknr inc TankNr
ldx tanknr ldx TankNr
Cpx NumberOfPlayers Cpx NumberOfPlayers
bne DrawNextTank bne DrawNextTank
pla pla
sta tankNr sta TankNr
rts rts
.endp
;--------- ;---------
drawtanknr .proc DrawTankNr
ldx tanknr ldx tankNr
; let's check the energy ; let's check the energy
lda eXistenZ,x lda eXistenZ,x
bne SkipRemovigPM ; if energy=0 then no tank bne SkipHidingPM ; if energy=0 then no tank
; hide P/M ; hide P/M
lda #0 lda #0
sta hposp0,x sta hposp0,x
jmp DoNotDrawTankNr jmp DoNotDrawTankNr
SkipRemovigPM SkipHidingPM
lda AngleTable,x lda AngleTable,x
bmi AngleToLeft01
lda #90
sec
sbc AngleTable,x
tay tay
lda BarrelTableR,y lda BarrelTable,y
jmp CharacterAlreadyKnown
AngleToLeft01
sec
sbc #(255-90)
tay
lda BarrelTableL,y
CharacterAlreadyKnown
sta CharCode sta CharCode
DrawTankNrX DrawTankNrX
ldx tanknr ldx tanknr
@@ -618,6 +630,7 @@ DrawTankNrX
sta xdraw+1 sta xdraw+1
lda ytankstable,x lda ytankstable,x
sta ydraw sta ydraw
mva #0 ydraw+1
jsr TypeChar jsr TypeChar
@@ -630,11 +643,11 @@ DrawTankNrX
rorw xbyte ; divide by 2 (carry does not matter) rorw xbyte ; divide by 2 (carry does not matter)
lda xbyte lda xbyte
clc clc
adc #$24 ; P/M to graphics offset adc #PMOffset+1 ; P/M to graphics offset
cpx #$4 ; 5th tank are joined missiles and offset is defferent cpx #$4 ; 5th tank are joined missiles and offset is defferent
bne NoMissile bne NoMissile
clc clc
adc #$0C adc #$0C ; missile offset offset
NoMissile NoMissile
sta hposp0,x sta hposp0,x
; vertical position ; vertical position
@@ -666,15 +679,154 @@ ZeroesToGo
sta (xbyte),y sta (xbyte),y
dey dey
bne ClearPM bne ClearPM
NoPlayerMissile NoPlayerMissile
; draw defensive weapons like shield ( tank number in X )
; in xdraw, ydraw we have coordinates left LOWER corner of Tank char
lda ActiveDefenceWeapon,x
cmp #ind_Shield_________ ; one shot shield
beq ShieldDraw
cmp #ind_Force_Shield___ ; shield with energy and parachute
beq ShieldDraw
cmp #ind_Heavy_Shield___ ; shield with energy
beq ShieldDraw
cmp #ind_Auto_Defense___ ; Auto Defence
beq DrawTankShieldWihHorns
cmp #ind_Mag_Deflector__ ; Mag Deflector
beq DrawTankShieldWihHorns
cmp #ind_White_Flag_____ ; White Flag
beq DrawTankFlag
bne NoShieldDraw
ShieldDraw
jsr DrawTankShield.DrawInPosition
NoShieldDraw
DoNotDrawTankNr DoNotDrawTankNr
rts rts
DrawTankShieldWihHorns
jsr DrawTankShield.DrawInPosition
jsr DrawTankShieldHorns
rts
DrawTankFlag
lda #$5E ; flag symbol
sta CharCode
lda Ytankstable,x
sec
sbc #8
sta ydraw
lda XtanksTableL,x
sta xdraw
lda XtanksTableH,x
sta xdraw+1
jsr TypeChar
rts
.endp
; -------------------------------------
.proc FlashTank
; -------------------------------------
; number of blinking tank in TankNr
mva #18 fs ; temp, how many times flash the tank
tankflash_loop
lda CONSOL ; turbo mode
cmp #6 ; START
sne:mva #1 fs ; finish it
mva #1 Erase
ldx TankNr
jsr DrawTankNr.SkipHidingPM ; it's necessary becouse DrawTankNr skips tanks with no energy !
PAUSE 2
mva #0 Erase
ldx TankNr
jsr DrawTankNr.SkipHidingPM
PAUSE 2
dec fs
jne tankflash_loop
rts
.endp
;-------------------------------------------------- ;--------------------------------------------------
drawmountains .proc .proc DrawTankShield
; X - tank number
; if use DrawInPosition entry point then:
; xdraw, ydraw - coordinates left LOWER corner of Tank char
; values remain there after a DrawTankNr proc.
;
; this proc change xdraw, ydraw and temp!
;-------------------------------------------------- ;--------------------------------------------------
lda xtankstableL,x
sta xdraw
lda xtankstableH,x
sta xdraw+1
lda ytankstable,x
sta ydraw
mva #0 ydraw+1
DrawInPosition
mva #1 color
lda erase
beq ShieldVisible
dec color
ShieldVisible
sbw xdraw #$03 ; 3 pixels to left
; draw left vertical line of shield ( | )
mva #6 temp ; strange !!!
@
jsr plot
.nowarn dew ydraw
dec temp
bne @-
; draw left oblique line of shield ( / )
mva #4 temp
@
jsr plot
.nowarn dew ydraw
inw xdraw
dec temp
bne @-
; draw top horizontal line of shield ( _ )
mva #5 temp
@
jsr plot
inw xdraw
dec temp
bne @-
; draw right oblique line of shield ( \ )
mva #4 temp
@
jsr plot
inw ydraw
inw xdraw
dec temp
bne @-
; draw right vertical line of shield ( | )
mva #7 temp
@
jsr plot
inw ydraw
dec temp
bne @-
rts
.endp
;--------------------------------------------------
.proc DrawTankShieldHorns
; use only directly after DrawTankShield
; this proc draws a little "horns" on shield.
; Symbol of defensive but aggressive :) weapon
;--------------------------------------------------
.nowarn dew xdraw ; 1 pixel left
sbw ydraw #$0a ; 10 pixels up
jsr plot
.nowarn dew ydraw
inw xdraw
jsr plot
sbw xdraw #$0d ; 13 pixels left
jsr plot
inw xdraw
inw ydraw
jsr plot
rts
.endp
;--------------------------------------------------
.proc drawmountains
;--------------------------------------------------
mwa #0 xdraw mwa #0 xdraw
mwa #mountaintable modify mwa #mountaintable modify
mva #1 color mva #1 color
@@ -685,13 +837,13 @@ drawmountainsloop
cmp #screenheight cmp #screenheight
beq NoMountain beq NoMountain
sta ydraw sta ydraw
sty ydraw+1
jsr DrawLine jsr DrawLine
NoMountain NoMountain
inw modify inw modify
inw xdraw inw xdraw
cpw xdraw #screenwidth cpw xdraw #screenwidth
bne drawmountainsloop bne drawmountainsloop
rts rts
;-------------------------------------------------- ;--------------------------------------------------
drawmountainspixel drawmountainspixel
@@ -704,6 +856,7 @@ drawmountainspixelloop
ldy #0 ldy #0
lda (modify),y lda (modify),y
sta ydraw sta ydraw
sty ydraw+1
jsr plot jsr plot
inw modify inw modify
inw xdraw inw xdraw
@@ -713,7 +866,7 @@ drawmountainspixelloop
rts rts
.endp .endp
;-------------------------------------------------- ;--------------------------------------------------
SoilDown2 .proc .proc SoilDown2
;-------------------------------------------------- ;--------------------------------------------------
; how it is supposed to work: ; how it is supposed to work:
@@ -750,7 +903,7 @@ SoilDown2 .proc
adw RangeLeft #mountaintable2 tempor2 adw RangeLeft #mountaintable2 tempor2
NextColumn1 NextColumn1
mva #0 ydraw mwa #0 ydraw
NextPoint1 NextPoint1
jsr point jsr point
beq StillNothing beq StillNothing
@@ -841,8 +994,9 @@ ColumnIsReady
mva #sfx_silencer sfx_effect mva #sfx_silencer sfx_effect
rts rts
.endp .endp
;-------------------------------------------------- ;--------------------------------------------------
calculatemountains .proc .proc calculatemountains
;-------------------------------------------------- ;--------------------------------------------------
mwa #0 xdraw mwa #0 xdraw
@@ -944,7 +1098,7 @@ EndDrawing
.endp .endp
; **************************************************** ; ****************************************************
;-------------------------------------------------- ;--------------------------------------------------
calculatemountains0 .proc .proc calculatemountains0
; Only for testing - makes ground flat (0 pixels) ; Only for testing - makes ground flat (0 pixels)
; and places tanks on it ; and places tanks on it
; remember to remove in final compilation :) ; remember to remove in final compilation :)
@@ -968,8 +1122,9 @@ SetYofNextTank
rts rts
.endp .endp
; **************************************************** ; ****************************************************
; ----------------------------------------- ; -----------------------------------------
unPlot .proc .proc unPlot
; plots a point and saves the plotted byte, reverts the previous plot. ; plots a point and saves the plotted byte, reverts the previous plot.
; ----------------------------------------- ; -----------------------------------------
ldx #0 ; only one pixel ldx #0 ; only one pixel
@@ -1072,8 +1227,9 @@ SkipThisPlot
EndOfUnPlot EndOfUnPlot
rts rts
.endp .endp
; ----------------------------------------- ; -----------------------------------------
plot .proc ;plot (xdraw, ydraw, color) .proc plot ;plot (xdraw, ydraw, color)
; color == 1 --> put pixel ; color == 1 --> put pixel
; color == 0 --> erase pixel ; color == 0 --> erase pixel
; this is one of the most important routines in the whole ; this is one of the most important routines in the whole
@@ -1107,10 +1263,6 @@ MakePlot
lsr lsr
tay ;save tay ;save
;--- ;---
ldx ydraw ldx ydraw
lda linetableL,x lda linetableL,x
sta xbyte sta xbyte
@@ -1132,17 +1284,16 @@ ClearPlot
sta (xbyte),y sta (xbyte),y
rts rts
.endp .endp
; ----------------------------------------- ; -----------------------------------------
point .proc .proc point
; ----------------------------------------- ; -----------------------------------------
; checks state of the pixel (coordinates in xdraw and ydraw) ; checks state of the pixel (coordinates in xdraw and ydraw)
; result is in A (zero or appropriate bit is set) ; result is in A (zero or appropriate bit is set)
; let's calculate coordinates from xdraw and ydraw ; let's calculate coordinates from xdraw and ydraw
mwa xdraw xbyte mwa xdraw xbyte
lda xbyte lda xbyte
and #$7 and #$7
sta ybit sta ybit
@@ -1154,9 +1305,7 @@ point .proc
lsr lsr
lsr lsr
tay ;save tay ;save
;--- ;---
ldx ydraw ldx ydraw
lda linetableL,x lda linetableL,x
sta xbyte sta xbyte
@@ -1172,7 +1321,7 @@ point .proc
.endp .endp
;-------------------------------------------------- ;--------------------------------------------------
DrawLine .proc .proc DrawLine
;-------------------------------------------------- ;--------------------------------------------------
mva #0 ydraw+1 mva #0 ydraw+1
lda #screenheight lda #screenheight
@@ -1184,21 +1333,19 @@ DrawLine .proc
jmp IntoDraw ; jumps inside Draw routine jmp IntoDraw ; jumps inside Draw routine
; because one pixel is already plotted ; because one pixel is already plotted
@
loopdraw
lda (xbyte),y lda (xbyte),y
and bittable2,x and bittable2,x
sta (xbyte),y sta (xbyte),y
IntoDraw adw xbyte #screenBytes IntoDraw
adw xbyte #screenBytes
dec tempbyte01 dec tempbyte01
bne loopdraw bne @-
rts rts
.endp .endp
;
; ------------------------------------------ ; ------------------------------------------
TypeChar .proc .proc TypeChar
; puts char on the graphics screen ; puts char on the graphics screen
; in: CharCode ; in: CharCode
; in: left LOWER corner of the char coordinates (xdraw, ydraw) ; in: left LOWER corner of the char coordinates (xdraw, ydraw)
@@ -1247,7 +1394,6 @@ CopyMask
lsrw xbyte ; div 8 lsrw xbyte ; div 8
rorw xbyte rorw xbyte
rorw xbyte rorw xbyte
;--- ;---
ldy xbyte ldy xbyte
@@ -1264,46 +1410,15 @@ CopyMask
ldx ybit ldx ybit
beq MaskOK00 beq MaskOK00
MakeMask00 MakeMask00
lsr mask1 .rept 8
ror mask2 lsr mask1+#
lsr mask1+1 ror mask2+#
ror mask2+1 .endr
lsr mask1+2
ror mask2+2
lsr mask1+3
ror mask2+3
lsr mask1+4
ror mask2+4
lsr mask1+5
ror mask2+5
lsr mask1+6
ror mask2+6
lsr mask1+7
ror mask2+7
sec sec
ror char1 .rept 8
ror char2 ror char1+# ; in second (and next) lines we have C=1 - one SEC enough
sec ror char2+#
ror char1+1 .endr
ror char2+1
sec
ror char1+2
ror char2+2
sec
ror char1+3
ror char2+3
sec
ror char1+4
ror char2+4
sec
ror char1+5
ror char2+5
sec
ror char1+6
ror char2+6
sec
ror char1+7
ror char2+7
dex dex
bne MakeMask00 bne MakeMask00
MaskOK00 MaskOK00
@@ -1333,132 +1448,137 @@ CharLoopi
inx inx
cpx #8 cpx #8
bne CharLoopi bne CharLoopi
EndPutChar
rts rts
.endp .endp
; ------------------------------------------ ; ------------------------------------------
PutChar4x4 .proc ;puts 4x4 pixels char on the graphics screen .proc PutChar4x4
; in: xdraw, ydraw (upper left corner of the char) ; puts 4x4 pixels char on the graphics screen
; in: dx, dy (LOWER left corner of the char)
; in: CharCode4x4 (.sbyte) ; in: CharCode4x4 (.sbyte)
;-------------------------------------------------- ; in: plot4x4color (0/1)
lda plot4x4color ; all pixels are being drawn
sta color
; calculating address of the first byte
mva #4 LoopCounter4x4
lda CharCode4x4
and #1
sta nibbler4x4
lda CharCode4x4
ror
; in carry there is which nibble of the byte is to be taken
clc
adc #(3*32)
sta y4x4
nextline4x4
mva #4 Xcounter4x4
ldy y4x4
lda font4x4,y ;there was a problem with OMC here, but it works now
ldx nibbler4x4
beq uppernibble
asl
asl
asl
asl
uppernibble
rol
sta StoreA4x4
bcs EmptyPixel ; the font I drawn is in inverse ...
;lda plot4x4color ;these lines are not necessary
;sta color ;if a plots are one color only
jsr plot
;jmp Loop4x4Continued
EmptyPixel
;lda #1 ;reverse color (color==1-color)
;sec
;sbc plot4x4color
;sta color
;jsr plot
;this is turned off for speed
;anyway we assume the text is being drawn
;over an empty space
Loop4x4Continued
inw xdraw
lda StoreA4x4
dec Xcounter4x4
ldx Xcounter4x4
bne uppernibble
; here we have on screen one line of the char
inw ydraw
sbw xdraw #4
sbw y4x4 #32
dec:lda LoopCounter4x4
bne nextline4x4
rts
.endp
; ------------------------------------------
PutChar4x4FULL .proc;
;this routine works just like PutChar4x4,
;but this time all pixels are being drawn
; (empty and not empty) ; (empty and not empty)
;-------------------------------------------------- ;--------------------------------------------------
; cpw ydraw #(screenheight-4)
; calculating address of the first byte ; jcs TypeChar.EndPutChar ;nearest RTS
mva #4 LoopCounter4x4 ; cpw xdraw #(screenwidth-4)
; jcs TypeChar.EndPutChar ;nearest RTS
; checks ommited.
lda plot4x4color
beq FontColor0
lda #$ff ; better option to check (plot4x4color = $00 or $ff)
sta plot4x4color
FontColor0
; char to the table
lda CharCode4x4 lda CharCode4x4
and #1 and #1
beq Upper4bits
lda #$ff ; better option to check (nibbler4x4 = $00 or $ff)
Upper4bits
sta nibbler4x4 sta nibbler4x4
lda CharCode4x4 lda CharCode4x4
ror lsr
; in carry there is which nibble of the byte is to be taken clc sta fontind
clc lda #$00
adc #(3*32) sta fontind+1
sta y4x4
nextline4x4FULL
mva #4 Xcounter4x4
ldy y4x4
lda font4x4,y
ldx nibbler4x4 adw fontind #font4x4
beq uppernibbleFULL
asl ; and 4 bytes to the table
asl ldy #0
asl ldx #3
asl CopyChar
uppernibbleFULL lda (fontind),y ; Y must be 0 !!!!
rol bit nibbler4x4
sta StoreA4x4 bpl GetUpper4bits
bcs EmptyPixelFULL :4 rol
lda plot4x4color ;these lines are not necessary GetUpper4bits
sta color ;if a plots are one color only ora #$0f
jsr plot sta char1,x
jmp Loop4x4ContinuedFULL lda #$ff
EmptyPixelFULL sta char2,x
lda #1 ;reverse color (color==1-color) ; and 4 bytes as a mask
lda #$f0
sta mask1,x
lda #$00
sta mask2,x
adw fontind #32 ; next byte of 4x4 font
dex
bpl CopyChar
; calculating coordinates from xdraw and ydraw
mwa dx xbyte
lda xbyte
and #$7
sta ybit
lsrw xbyte ; div 8
rorw xbyte
rorw xbyte
;---
ldy xbyte
lda dy ; y = y - 3 because left lower.
sec sec
sbc plot4x4color sbc #3
sta color tax
jsr plot
;this is turned on now
;of course it is slower
Loop4x4ContinuedFULL lda linetableL,x
inw xdraw sta xbyte
lda StoreA4x4 lda linetableH,x
dec Xcounter4x4 sta xbyte+1
ldx Xcounter4x4 ; mask preparation and character shifting
bne uppernibbleFULL ldx ybit
; here we have on screen one line of the char beq MaskOK01
inw ydraw MakeMask01
sbw xdraw #4 .rept 4
sbw y4x4 #32 ; why? possibly because of width of the 4x4 font lsr mask1+#
dec:lda LoopCounter4x4 ror mask2+#
bne nextline4x4FULL .endr
sec
.rept 4
ror char1+# ; in second (and next) lines we have C=1 - one SEC enough
ror char2+#
.endr
dex
bne MakeMask01
MaskOK01
ldx #0
CharLoopi4x4
lda (xbyte),y
ora mask1,x
bit plot4x4color
bpl PutInColor0_1 ; only mask - no char
and char1,x
PutInColor0_1
sta (xbyte),y
iny
lda (xbyte),y
ora mask2,x
bit plot4x4color
bpl PutInColor0_2 ; only mask - no char
and char2,x
PutInColor0_2
sta (xbyte),y
dey
adw xbyte #screenBytes
inx
cpx #4
bne CharLoopi4x4
EndPut4x4
rts
.endp
.proc SetMainScreen
mva #0 dmactl
VDLI DLIinterruptGraph ; jsr SetDLI for graphics (game) screen
mwa #dl dlptrs ; issue #72 (glitches when switches)
lda dmactls
and #$fc
ora #$02 ; 2=normal, 3 = wide screen width
sta dmactls
rts rts
.endp .endp
+1
View File
@@ -147,6 +147,7 @@ NMIST = $D40F ; rejestr statusu przerwa NMI
;------------------------------------- ;-------------------------------------
;additional system variables ;additional system variables
;------------------------------------- ;-------------------------------------
ATRACT = $004D
COLPM0S = $02C0 ;- - shadow register COLPM0 COLPM0S = $02C0 ;- - shadow register COLPM0
COLPM1S = $02C1 ;- - shadow register COLPM1 COLPM1S = $02C1 ;- - shadow register COLPM1
COLPM2S = $02C2 ;- - shadow register COLPM2 COLPM2S = $02C2 ;- - shadow register COLPM2
+3
View File
@@ -104,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
+304 -189
View File
@@ -36,7 +36,7 @@
;we decided it must go in 'English' to let other people work on it ;we decided it must go in 'English' to let other people work on it
.macro build .macro build
dta d"141" ; number of this build (3 bytes) dta d"146" ; number of this build (3 bytes)
.endm .endm
icl 'definitions.asm' icl 'definitions.asm'
@@ -55,26 +55,36 @@
.zpvar xc .word .zpvar xc .word
.zpvar temp .word ;temporary word for the most embeded loops only .zpvar temp .word ;temporary word for the most embeded loops only
.zpvar temp2 .word ;same as above .zpvar temp2 .word ;same as above
.zpvar modify .word ;origially used to replace self-modyfying code
.zpvar tempXROLLER .word ;same as above for XROLLER routine (used also in result display routine) .zpvar tempXROLLER .word ;same as above for XROLLER routine (used also in result display routine)
.zpvar xtempDRAW .word ;same as above for XDRAW routine .zpvar xtempDRAW .word ;same as above for XDRAW routine
.zpvar ytempDRAW .word ;same as above for XDRAW routine .zpvar ytempDRAW .word ;same as above for XDRAW routine
.zpvar tempor2 .byte
;--------------temps used in circle routine ;--------------temps used in circle routine
.zpvar xi .word ;X (word) in draw routine .zpvar xi .word ;X (word) in draw routine
.zpvar fx .byte ;circle drawing variables .zpvar fx .byte
.zpvar yi .word ;Y (word) in draw routine .zpvar yi .word ;Y (word) in draw routine
.zpvar fy .byte .zpvar fy .byte
.zpvar xk .word .zpvar xk .word
.zpvar fs .byte .zpvar fs .byte
.zpvar yc .byte ;ycircle - temporary for circle .zpvar yc .byte ;ycircle - temporary for circle
.zpvar dx .word .zpvar dx .word
.zpvar tempor2 .byte
.zpvar dy .word .zpvar dy .word
.zpvar dd .word .zpvar dd .word
.zpvar di .word .zpvar di .word
.zpvar dp .word .zpvar dp .word
.zpvar modify .word ;----------------------------
.zpvar UnderTank1 .byte
.zpvar UnderTank2 .byte
;----------------------------
.zpvar weaponPointer .word .zpvar weaponPointer .word
.zpvar dliCounter .byte .zpvar dliCounter .byte
.zpvar pressTimer .byte
.zpvar NTSCcounter .byte
;.zpvar dliA .byte
;.zpvar dliX .byte
;.zpvar dliY .byte
;* RMT ZeroPage addresses ;* RMT ZeroPage addresses
.zpvar p_tis .word .zpvar p_tis .word
.zpvar p_trackslbstable .word .zpvar p_trackslbstable .word
@@ -98,11 +108,12 @@
icl 'lib/atari.hea' icl 'lib/atari.hea'
icl 'lib/macro.hea' icl 'lib/macro.hea'
;splash screen and musix
icl 'artwork/HIMARS14.asm' icl 'artwork/HIMARS14.asm'
;Game loading address ;Game loading address
ORG $3000 ORG $3000
WeaponFont WeaponFont
ins 'artwork/weapons_AW5.fnt' ; 'artwork/weapons.fnt' ins 'artwork/weapons_AW5_mod.fnt' ; 'artwork/weapons.fnt'
;----------------------------------------------- ;-----------------------------------------------
;Screen displays go here to avoid crossing 4kb barrier ;Screen displays go here to avoid crossing 4kb barrier
;----------------------------------------------- ;-----------------------------------------------
@@ -117,33 +128,31 @@ START
; Startup sequence ; Startup sequence
jsr Initialize jsr Initialize
jsr Options ;startup screen jsr Options ;startup screen
lda escFlag lda escFlag
bne START bne START
jsr EnterPlayerNames jsr EnterPlayerNames
lda escFlag
bne START
jsr RandomizeSequence jsr RandomizeSequence
; for the round #1 shooting sequence is random ; for the round #1 shooting sequence is random
MainGameLoop MainGameLoop
VDLI DLIinterruptText ; jsr SetDLI for text (purchase) screen
jsr CallPurchaseForEveryTank jsr CallPurchaseForEveryTank
; issue #72 (glitches when switches) ; issue #72 (glitches when switches)
mva #0 dmactl mva #0 dmactl
lda dmactls
and #$fc
;ora #$02 ; 2=normal, 3 = wide screen width, 0 = no screen
sta dmactls
jsr GetRandomWind jsr GetRandomWind
jsr RoundInit jsr RoundInit
jsr MainRoundLoop jsr MainRoundLoop
lda escFlag
bne START
mva #0 TankNr ; mva #0 TankNr ;
jsr SortSequence jsr SortSequence
@@ -161,7 +170,8 @@ MainGameLoop
; Results are number of other deaths ; Results are number of other deaths
; before the player dies itself ; before the player dies itself
lda #song_end_round
jsr RmtSongSelect
jsr DisplayResults jsr DisplayResults
;check demo mode ;check demo mode
@@ -234,6 +244,7 @@ skipzeroing
inc CurrentRoundNr inc CurrentRoundNr
mva #0 dmactl ; issue #72 mva #0 dmactl ; issue #72
jsr RmtSongSelect
mva #sfx_silencer sfx_effect mva #sfx_silencer sfx_effect
jmp MainGameLoop jmp MainGameLoop
@@ -248,16 +259,17 @@ skipzeroing
; the shooting angle is randomized ; the shooting angle is randomized
; of course gains an looses are zeroed ; of course gains an looses are zeroed
;jsr StatusDisplay lda #song_ingame
jsr RmtSongSelect
lda #0 lda #0
tax tax
@ @ sta singleRoundVars,x
sta previousAngle,x
inx inx
cpx #(singleRoundVarsEnd-PreviousAngle) cpx #(singleRoundVarsEnd-singleRoundVars)
bne @- bne @-
ldx #5 ldx #(MaxPlayers-1)
SettingEnergies SettingEnergies
lda #$00 lda #$00
sta gainL,x sta gainL,x
@@ -271,13 +283,13 @@ SettingEnergies
; anything in eXistenZ table means that this tank exist ; anything in eXistenZ table means that this tank exist
; in the given round ; in the given round
lda #<1000 lda #<1000
sta MaxEnergyTableL,x sta MaxForceTableL,x
lda #>1000 lda #>1000
sta MaxEnergyTableH,x sta MaxForceTableH,x
lda #<350 lda #<350
sta EnergyTableL,x sta ForceTableL,x
lda #>350 lda #>350
sta EnergyTableH,x sta ForceTableH,x
;lda #(255-45) ;lda #(255-45)
;it does not look good when all tanks have ;it does not look good when all tanks have
@@ -287,12 +299,9 @@ SettingEnergies
jsr RandomizeAngle jsr RandomizeAngle
sta AngleTable,x sta AngleTable,x
dex dex
bpl SettingEnergies bpl SettingEnergies
mva #0 CurrentResult
;generating the new landscape ;generating the new landscape
jsr PMoutofScreen ;let P/M disappear jsr PMoutofScreen ;let P/M disappear
jsr clearscreen ;let the screen be clean jsr clearscreen ;let the screen be clean
@@ -300,19 +309,18 @@ SettingEnergies
jsr calculatemountains ;let mountains be easy for the eye jsr calculatemountains ;let mountains be easy for the eye
;jsr calculatemountains0 ;only for tests - makes mountains flat and 0 height ;jsr calculatemountains0 ;only for tests - makes mountains flat and 0 height
VDLI DLIinterruptGraph ; jsr SetDLI for graphics (game) screen jsr SetMainScreen
mwa #dl dlptrs ; issue #72 (glitches when switches) jsr ColorsOfSprites
lda dmactls lda #0
and #$fc sta colpf2s ; status line "off"
ora #$02 ; 2=normal, 3 = wide screen width sta colpf1s
sta dmactls
jsr drawmountains ;draw them jsr drawmountains ;draw them
jsr drawtanks ;finally draw tanks jsr drawtanks ;finally draw tanks
mva #0 TankSequencePointer mva #0 TankSequencePointer
;--------------------round screen is ready--------- ;---------round screen is ready---------
mva #TextForegroundColor colpf1s ; status line "on"
rts rts
.endp .endp
@@ -322,6 +330,7 @@ SettingEnergies
; tank with energy greater than 0 left ; tank with energy greater than 0 left
ldy #0 ; in Y - number of tanks with energy greater than zero ldy #0 ; in Y - number of tanks with energy greater than zero
sty ATRACT ; reset atract mode
ldx NumberOfPlayers ldx NumberOfPlayers
dex dex
CheckingIfRoundIsFinished CheckingIfRoundIsFinished
@@ -343,8 +352,7 @@ WhichTankWonLoop
bne ThisOneWon bne ThisOneWon
dex dex
bpl WhichTankWonLoop bpl WhichTankWonLoop
;error here!!! ;error was here!!!
;stop
; somehow I believed program will be never here ; somehow I believed program will be never here
; but it was a bad assumption ; but it was a bad assumption
; god knows when there is such a situation ; god knows when there is such a situation
@@ -354,7 +362,6 @@ WhichTankWonLoop
; second tank explodes and kills the first one. ; second tank explodes and kills the first one.
; and code lands here... ; and code lands here...
; looks like no one won! ; looks like no one won!
rts rts
ThisOneWon ThisOneWon
@@ -373,10 +380,10 @@ DoNotFinishTheRound
mva #0 noDeathCounter mva #0 noDeathCounter
mva #sfx_seppuku sfx_effect mva #sfx_seppuku sfx_effect
jsr DisplaySeppuku jsr DisplaySeppuku
jmp Seppuku jmp Seppuku
;ldx TankNr
@ @
ldx TankSequencePointer ldx TankSequencePointer
lda TankSequence,x lda TankSequence,x
@@ -398,8 +405,16 @@ RoboTanks
; robotanks shoot here ; robotanks shoot here
jsr ArtificialIntelligence jsr ArtificialIntelligence
jsr MoveBarrelToNewPosition jsr MoveBarrelToNewPosition
jsr StatusDisplay ;all digital values like force, angle, wind, etc. jsr DisplayStatus ;all digital values like force, angle, wind, etc.
jsr PutTankNameOnScreen jsr PutTankNameOnScreen
lda kbcode
cmp #28 ; ESC
bne @+
jsr AreYouSure
lda escFlag
seq:rts
@
; let's move the tank's barrel so it points the right ; let's move the tank's barrel so it points the right
; direction ; direction
jmp AfterManualShooting jmp AfterManualShooting
@@ -408,18 +423,40 @@ ManualShooting
jsr WaitForKeyRelease jsr WaitForKeyRelease
jsr BeforeFire jsr BeforeFire
lda escFlag
seq:rts
AfterManualShooting AfterManualShooting
; defensive weapons without flight handling
ldx TankNr
lda ActiveDefenceWeapon,x
cmp #ind_White_Flag_____ ; White Flag
beq ShootWhiteFlag
cmp #ind_Nuclear_Winter_
bne StandardShoot
ShootAtomicWinter
; --- nuclear winter ---
jsr NuclearWinter
jmp NextPlayerShoots ; and we skip shoot
ShootWhiteFlag
; --- white flag ---
jsr WhiteFlag
jmp NextPlayerShoots ; and we skip shoot
StandardShoot
inc noDeathCounter inc noDeathCounter
jsr DecreaseWeaponBeforeShoot jsr DecreaseWeaponBeforeShoot
jsr StatusDisplay jsr DisplayStatus
ldx TankNr ldx TankNr
dec Energy,x ; lower energy to eventually let tanks commit suicide dec Energy,x ; lower energy to eventually let tanks commit suicide
ShootNow ShootNow
jsr Shoot jsr Shoot
;here we clear offensive text (after a shoot)
ldy TankNr
mva #0 plot4x4color
jsr DisplayOffensiveTextNr
lda HitFlag ;0 if missed lda HitFlag ;0 if missed
beq missed beq missed
@@ -431,12 +468,13 @@ ShootNow
continueMainRoundLoopAfterSeppuku continueMainRoundLoopAfterSeppuku
;here we clear offensive text (after a shoot) ;here we clear offensive text (after a shoot)
ldy TankNr ;ldy TankNr
mva #0 plot4x4color ;mva #0 plot4x4color
jsr DisplayOffensiveTextNr ;jsr DisplayOffensiveTextNr
AfterExplode AfterExplode
; TODO: IS IT OK??? possibly a fix here needed for #56
ldy WeaponDepleted ldy WeaponDepleted
bne @+ bne @+
ldx TankNr ldx TankNr
@@ -445,24 +483,25 @@ AfterExplode
@ @
;temporary tanks removal (would fall down with soil) ;temporary tanks removal (would fall down with soil)
mva TankNr tempor2
mva #1 Erase mva #1 Erase
jsr drawtanks jsr drawtanks
mva tempor2 TankNr
mva #0 Erase mva #0 Erase
lda FallDown2 lda FallDown2
beq NoFallDown2 beq NoFallDown2
jsr SoilDown2; jsr SoilDown2
NoFallDown2 NoFallDown2
;here tanks are falling down ;here tanks are falling down
mva tankNr tempor2 mva tankNr tempor2
mva #0 TankNr mvx #0 TankNr
TanksFallDown TanksFallDown
lda eXistenZ,x
beq NoExistNoFall
jsr TankFalls jsr TankFalls
inc:lda TankNr NoExistNoFall
cmp NumberOfPlayers inc:ldx TankNr
cpx NumberOfPlayers
bne TanksFallDown bne TanksFallDown
mva tempor2 TankNr mva tempor2 TankNr
missed missed
@@ -474,13 +513,10 @@ missed
jsr DisplayOffensiveTextNr jsr DisplayOffensiveTextNr
NextPlayerShoots NextPlayerShoots
mva #1 Erase ;before it shoots, the eXistenZ table must be updated
jsr drawtanks ;accordingly to actual energy (was forgotten, sorry to ourselves)
;before it shoots, the eXistenZ table must be ldx #(MaxPlayers-1)
;updated accordingly to actual energy (was forgotten, sorry to ourselves)
ldx #5
SeteXistenZ SeteXistenZ
lda Energy,x lda Energy,x
sta eXistenZ,x sta eXistenZ,x
@@ -489,7 +525,7 @@ SeteXistenZ
;DATA L1,L2 ;DATA L1,L2
;Multiplication 8bit*8bit, ;Multiplication 8bit*8bit,
;result 16bit ;result 16bit
;this algiorithm is a little longer than in Ruszczyc 6502 book ;this algiorithm is a little longer than one in Ruszczyc 6502 book
;but it is faster ;but it is faster
LDy #8 LDy #8
@@ -500,29 +536,20 @@ LP0
ROR L1 ROR L1
BCC B0 BCC B0
CLC CLC
ADC #10 ; multiplication by 10 (L2) ADC #10 ; (L2) multiplication by 10
B0 DEY B0 DEY
BNE LP0 BNE LP0
ror ror
ROR L1 ROR L1
STA MaxEnergyTableH,x STA MaxForceTableH,x
lda L1 lda L1
sta MaxEnergyTableL,x sta MaxForceTableL,x
dex dex
bpl SeteXistenZ bpl SeteXistenZ
;was setup of maximum energy for players ;was setup of maximum energy for players
mva #0 Erase
jsr drawtanks
;inc TankNr
;lda TankNr
inc:lda TankSequencePointer
cmp NumberOfPlayers
bne PlayersAgain
mva #0 TankSequencePointer
PlayersAgain PlayersAgain
@@ -554,20 +581,16 @@ NoPlayerNoDeath
dex dex
bpl CheckingPlayersDeath bpl CheckingPlayersDeath
; if processor is here it means there are no more explosions ; if processor is here it means there are no more explosions
inc:lda TankSequencePointer
cmp NumberOfPlayers
sne:mva #0 TankSequencePointer
jmp MainRoundLoop jmp MainRoundLoop
.endp .endp
;--------------------------------- ;---------------------------------
.proc Seppuku .proc PlayerXdeath
lda #0
sta FallDown1
sta FallDown2
lda #1 ; Missile
jsr ExplosionDirect
jmp MainRoundLoop.continueMainRoundLoopAfterSeppuku
.endp
;---------------------------------
PlayerXdeath
; this tank should not explode anymore: ; this tank should not explode anymore:
; there is 0 in A, and Tank Number in X, so... ; there is 0 in A, and Tank Number in X, so...
@@ -591,7 +614,6 @@ PlayerXdeath
sta ResultsTable,x sta ResultsTable,x
inc CurrentResult inc CurrentResult
mva #sfx_death_begin sfx_effect mva #sfx_death_begin sfx_effect
;RandomizeDeffensiveText ;RandomizeDeffensiveText
randomize talk.NumberOfOffensiveTexts (talk.NumberOfDeffensiveTexts+talk.NumberOfOffensiveTexts-1) randomize talk.NumberOfOffensiveTexts (talk.NumberOfDeffensiveTexts+talk.NumberOfOffensiveTexts-1)
@@ -599,16 +621,19 @@ PlayerXdeath
ldy TankTempY ldy TankTempY
mva #1 plot4x4color mva #1 plot4x4color
jsr DisplayOffensiveTextNr jsr DisplayOffensiveTextNr
; tank flash
ldy TankTempY
mva TankNr temp2 ; not elegant, and probably unnecessary
sty TankNr
jsr FlashTank ; blinking and pausing (like PAUSE 72 - 18x(2+2) )
mva temp2 TankNr
PAUSE 75
;Deffensive text cleanup ;Deffensive text cleanup
;here we clear Deffensive text (after a shoot) ;here we clear Deffensive text (after a shoot)
ldy TankTempY ldy TankTempY
mva #0 plot4x4color mva #0 plot4x4color
jsr DisplayOffensiveTextNr jsr DisplayOffensiveTextNr
; calculate position of the explosion (the post-death one) ; calculate position of the explosion (the post-death one)
ldx TankTempY ldx TankTempY
clc clc
@@ -623,7 +648,7 @@ PlayerXdeath
sbc #4 sbc #4
sta ydraw sta ydraw
lda #0 lda #0
sta ydraw+1 ; there is 0 left in A, so... TODO: bad code above. revisit when transitioning ydraw to byte sta ydraw+1 ; there is 0 left in A, so... TODO: bad code above. revisit
;cleanup of the soil fall down ranges (left and right) ;cleanup of the soil fall down ranges (left and right)
sta RangeRight sta RangeRight
@@ -632,34 +657,29 @@ PlayerXdeath
sta FallDown2 sta FallDown2
mwa #screenwidth RangeLeft mwa #screenwidth RangeLeft
; We are randomizing the weapon now. ; We are randomizing the weapon now.
; jumping into the middle of the explosion ; jumping into the middle of the explosion
; routine ; routine
MetodOfDeath MetodOfDeath
lda random lda random
and #%00011111 ; range 0-31 and #%00011111 ; range 0-31
cmp #20 ; we have 20 weapons in table (from 0 to 19) cmp #(weaponsOfDeathEnd-weaponsOfDeath) ; we have 20 weapons in table (from 0 to 19)
bcs MetodOfDeath bcs MetodOfDeath
tay tay
lda weaponsOfDeath,y lda weaponsOfDeath,y
jsr ExplosionDirect jsr ExplosionDirect
mva #sfx_silencer sfx_effect mva #sfx_silencer sfx_effect
; jump to after explosion routines (soil fallout, etc.) ; jump to after explosion routines (soil fallout, etc.)
; After going through these routines we are back ; After going through these routines we are back
; to checking if a tank exploded and maybe we have ; to checking if a tank exploded and maybe we have
; a deadly shot here again. ; a deadly shot here again.
jmp MainRoundLoop.AfterExplode jmp MainRoundLoop.AfterExplode
.endp
;-------------------------------------------------- ;--------------------------------------------------
.proc DecreaseEnergyX .proc DecreaseEnergyX
;Decreases energy of player nr X ;Decreases energy of player nr X by the value Y
;increases his financial loss ;increases his financial loss
;increases gain of tank TankNr ;increases gain of tank TankNr
;-------------------------------------------------- ;--------------------------------------------------
@@ -698,64 +718,139 @@ NotNegativeEnergy
.endp .endp
;-------------------------------------------------- ;--------------------------------------------------
GetRandomWind .proc .proc DecreaseShieldEnergyX
; Decreases energy of shield player nr X by the value Y
; if shield energy is 0 after decrease then in Y we have
; rest of the energy - to decrease tank energy
;--------------------------------------------------
sty EnergyDecrease
ldy #0 ; if Shield survive then no decrease tank anergy
; Energy cannot be less than 0
lda ShieldEnergy,x
cmp EnergyDecrease
bcc UseAllShieldEnergy
;sec
sbc EnergyDecrease
bpl NotNegativeShieldEnergy ; jump allways
UseAllShieldEnergy
; now calculate rest of energy for future tank energy decrease
sec
lda EnergyDecrease
sbc ShieldEnergy,x
tay
lda #0
NotNegativeShieldEnergy
sta ShieldEnergy,x
rts
.endp
;---------------------------------
.proc Seppuku
lda #0
sta FallDown1
sta FallDown2
sta ydraw+1
; get position of the tank
ldx TankNr
lda #0 ; turn off defense weapons when hara-kiring
sta ActiveDefenceWeapon,x
sta ShieldEnergy,x
lda xtankstableL,x
sta xdraw
lda xtankstableH,x
sta xdraw+1
lda yTanksTable,x
sta ydraw
lda #1 ; Missile
jsr ExplosionDirect
jmp MainRoundLoop.continueMainRoundLoopAfterSeppuku
.endp
;--------------------------------------------------
.proc GetRandomWind
;in: MaxWind (byte)
;out: Wind (word)
;uses: _
;-------------------------------------------------- ;--------------------------------------------------
lda random lda random
cmp MaxWind cmp MaxWind
bcs GetRandomWind ; if more than MaxWind then randomize again bcs GetRandomWind ; if more than MaxWind then randomize again
sta Wind sta Wind
mva #$00 Wind+1 mva #$00 Wind+1
; multiply Wind by 16 and take it as a decimal part (0.Wind) sta Wind+2
sta Wind+3
; multiply Wind by 16
; two bytes of Wind are treated as a decimal part of vx variable
:4 aslw Wind :4 aslw Wind
; decide the direction
lda random lda random
and #$01 and #$01
sta WindOrientation beq @+
rts sec ; Wind = -Wind
.rept 4
lda #$00
sbc Wind+#
sta Wind+#
.endr
@ rts
.endp .endp
;-------------------------------------------------- ;--------------------------------------------------
PMoutofScreen .proc .proc PMoutofScreen
;-------------------------------------------------- ;--------------------------------------------------
lda #$00 ; let all P/M disappear lda #$00 ; let all P/M disappear
:8 sta hposp0+# :8 sta hposp0+#
rts rts
.endp .endp
;--------------------------------------------------
.proc ColorsOfSprites
lda TankColoursTable ; colours of sprites under tanks
sta COLPM0S
lda TankColoursTable+1
sta COLPM1S
lda TankColoursTable+2
sta COLPM2S
lda TankColoursTable+3
sta COLPM3S
LDA TankColoursTable+4
STA COLPF3S ; joined missiles (5th tank)
rts
.endp
;-------------------------------------------------- ;--------------------------------------------------
.proc WeaponCleanup; .proc WeaponCleanup;
; cleaning of the weapon possesion tables ; cleaning of the weapon possesion tables
; (99 of Baby Missles, all other weapons=0) ; 99 of Baby Missles(index==0), all other weapons=0)
;-------------------------------------------------- ;--------------------------------------------------
ldx #$3f ldx #$3f ; TODO: maxweapons
lda #$0 @ lda #$0
loop05 cpx #48 ; White Flag
sta TanksWeapon1,x bne @+
lda #99
@ sta TanksWeapon1,x
sta TanksWeapon2,x sta TanksWeapon2,x
sta TanksWeapon3,x sta TanksWeapon3,x
sta TanksWeapon4,x sta TanksWeapon4,x
sta TanksWeapon5,x sta TanksWeapon5,x
sta TanksWeapon6,x sta TanksWeapon6,x
dex dex
bne @+ beq setBmissile
lda #99 bpl @-1
bne loop05
@ bpl loop05
rts rts
setBmissile
lda #99
bne @-
.endp .endp
;-------------------------------------------------- ;--------------------------------------------------
.proc Initialize .proc Initialize
;Initialization sequence ;Initialization sequence
;uses: temp, ...
;-------------------------------------------------- ;--------------------------------------------------
deletePtr = temp deletePtr = temp
lda #0
sta Erase
sta tracerflag
sta GameIsOver
sta escFlag
; clean variables ; clean variables
lda #0
tay tay
mwa #variablesStart deletePtr mwa #variablesStart deletePtr
@ tya @ tya
@@ -807,21 +902,9 @@ SetunPlots
lda #$10 ; P/M priorities (bit 4 joins missiles) lda #$10 ; P/M priorities (bit 4 joins missiles)
sta gtictls sta gtictls
jsr PMoutofScreen jsr PMoutofScreen
lda TankColoursTable ; temporary colours of sprites under tanks
sta $2c0
lda TankColoursTable+1
sta $2c1
lda TankColoursTable+2
sta $2c2
lda TankColoursTable+3
sta $2c3
LDA TankColoursTable+4
STA COLPF3S ; joined missiles (5th tank)
mva #0 hscrol
;let the tanks be visible! ;let the tanks be visible!
ldx #5 ldx #(maxPlayers-1)
lda #1 ; tank is visible lda #1 ; tank is visible
MakeTanksVisible MakeTanksVisible
sta eXistenZ,x sta eXistenZ,x
@@ -838,6 +921,7 @@ ClearResults
bne ClearResults bne ClearResults
mva #1 CurrentRoundNr ;we start from round 1 mva #1 CurrentRoundNr ;we start from round 1
mva #6 NTSCcounter
; RMT INIT ; RMT INIT
lda #$f0 ;initial value lda #$f0 ;initial value
@@ -846,17 +930,17 @@ ClearResults
lda #$ff ;initial value lda #$ff ;initial value
sta sfx_effect sta sfx_effect
; ;
ldx #<MODUL ;low byte of RMT module to X reg lda #0
ldy #>MODUL ;hi byte of RMT module to Y reg jsr RmtSongSelect
lda #0 ;starting song line 0-255 to A reg
jsr RASTERMUSICTRACKER ;Init
; ;
VMAIN VBLinterrupt,6 ;jsr SetVBL VMAIN VBLinterrupt,6 ;jsr SetVBL
rts rts
.endp .endp
;--------------------------------------------------
DLIinterruptGraph .proc .proc DLIinterruptGraph
;sta dliA
;sty dliY
pha pha
phy phy
ldy dliCounter ldy dliCounter
@@ -868,48 +952,80 @@ DLIinterruptGraph .proc
sta COLPF1 sta COLPF1
sty COLPF2 sty COLPF2
inc dliCounter inc dliCounter
;ldy dliY
;lda dliA
ply ply
pla pla
rti rti
.endp .endp
;--------------------------------------------------
DLIinterruptText .proc .proc DLIinterruptText
;sta dliA
pha pha
sta WSYNC sta WSYNC
mva #TextBackgroundColor colpf2 mva #TextBackgroundColor colpf2
mva #TextForegroundColor colpf3 mva #TextForegroundColor colpf3
;lda dliA
pla pla
DLIinterruptNone DLIinterruptNone
rti rti
.endp .endp
;--------------------------------------------------
VBLinterrupt .proc .proc VBLinterrupt
pha pha
phx phx
phy phy
mva #0 dliCounter mva #0 dliCounter
lda PAL
and #%00001110
beq itsPAL
;it is NTSC here
dec NTSCcounter
bne itsPAL
mva #6 NTSCcounter
bne exitVBL ; skip doing VBL things each 6 frames in Amerika, Amerika
; We're all living in Amerika, Coca Cola, Wonderbra
itsPAL
; pressTimer is trigger tick counter. always 50 ticks / s
bit:smi:inc pressTimer ; timer halted if >127. max time measured 2.5 s
; ------- RMT -------
lda sfx_effect lda sfx_effect
bmi lab2 bmi lab2
asl @ ; * 2 asl @ ; * 2
tay ;Y = 2,4,..,16 instrument number * 2 (0,2,4,..,126) tay ;Y = 2,4,..,16 instrument number * 2 (0,2,4,..,126)
ldx #0 ;X = 0 channel (0..3 or 0..7 for stereo module) ldx #0 ;X = 0 channel (0..3 or 0..7 for stereo module)
lda #0 ;A = 12 note (0..60) lda #0 ;A = 0 note (0..60)
jsr RASTERMUSICTRACKER+15 ;RMT_SFX start tone (It works only if FEAT_SFX is enabled !!!) bit noSfx
; smi:jsr RASTERMUSICTRACKER+15 ;RMT_SFX start tone (It works only if FEAT_SFX is enabled !!!)
lda #$ff lda #$ff
sta sfx_effect ;reinit value sta sfx_effect ;reinit value
;
lab2 lab2
jsr RASTERMUSICTRACKER+3 ;1 play jsr RASTERMUSICTRACKER+3 ;1 play
; ------- RMT -------
exitVBL
ply ply
plx plx
pla pla
jmp SYSVBV jmp SYSVBV
.endp .endp
;---------------------------------------------- ;----------------------------------------------
RandomizeSequence .proc .proc RandomizeSequence0
ldx #0
@ txa
sta TankSequence,x
inx
cpx #MaxPlayers
bne @-
rts
.endp
;--------------------------------------------------
.proc RandomizeSequence
; in: NumberOfPlayers ; in: NumberOfPlayers
; out: TankSequence ; out: TankSequence
; how: get random number lower than NumberOfPlayers ; how: get random number lower than NumberOfPlayers
@@ -958,7 +1074,7 @@ UsageLoop
rts rts
.endp .endp
;---------------------------------------------- ;----------------------------------------------
RandomizeAngle .proc ; .proc RandomizeAngle
; routine returns in A ; routine returns in A
; a valid angle for the tank's barrel. ; a valid angle for the tank's barrel.
; X is not changed ; X is not changed
@@ -974,15 +1090,15 @@ RandomizeAngle .proc ;
bcs RandomizeAngle bcs RandomizeAngle
sta temp ;sta temp
lda #90 ; CARRY=0 here ;lda #90 ; CARRY=0 here
sbc temp ;sbc temp
rts rts
.endp .endp
;---------------------------------------------- ;----------------------------------------------
RandomizeForce .proc .proc RandomizeForce
; routine returns in EnergyTable/L/H ; routine returns in ForceTable/L/H
; valid force of shooting for TankNr ; valid force of shooting for TankNr
; in X must be TankNr ; in X must be TankNr
; low and high randomize boundary passed as word value ; low and high randomize boundary passed as word value
@@ -990,68 +1106,56 @@ RandomizeForce .proc
; RandBoundaryHigh ; RandBoundaryHigh
;---------------------------------------------- ;----------------------------------------------
lda MaxEnergyTableL,x
sta temp
lda MaxEnergyTableH,x
sta temp+1
GetRandomAgain
lda RANDOM lda RANDOM
; gets values in range(256,765)
sta temp2 sta temp2
lda RANDOM ; :) lda RANDOM
and #%00000011 ;(0..1023) and #%00000011 ;(0..1023)
sta temp2+1 sta temp2+1
cpw RandBoundaryLow temp2 cpw RandBoundaryLow temp2
bcs GetRandomAgain bcs RandomizeForce
cpw RandBoundaryHigh temp2 cpw RandBoundaryHigh temp2
bcc GetRandomAgain bcc RandomizeForce
cpw temp temp2
bcs EnergyInRange
mwa temp temp2
EnergyInRange
lda temp2 lda temp2
sta EnergyTableL,x sta ForceTableL,x
lda temp2+1 lda temp2+1
sta EnergyTableH,x sta ForceTableH,x
;---------
LimitForce
; in X must be TankNr
; cuts force to MaxForceTable
lda MaxForceTableH,x
cmp ForceTableH,x
bne @+
lda MaxForceTableL,x
cmp ForceTableL,x
@ bcs @+
lda MaxForceTableL,x
sta ForceTableL,x
lda MaxForceTableH,x
sta ForceTableH,x
@
rts rts
.endp
.endp
;---------------------------------------------- ;----------------------------------------------
.proc MoveBarrelToNewPosition .proc MoveBarrelToNewPosition
jsr DrawTankNr jsr DrawTankNr
ldx TankNr ldx TankNr
lda AngleTable,x
clc
adc #90 ;shift angle to the positive values
sta temp
lda NewAngle lda NewAngle
clc cmp AngleTable,x
adc #90
cmp temp
beq BarrelPositionIsFine beq BarrelPositionIsFine
bcc rotateLeft ; older is bigger bcc rotateLeft ; older is bigger
rotateRight;older is lower rotateRight;older is lower
inc angleTable,x inc angleTable,x
bne MoveBarrelToNewPosition
mva #$30 CharCode ; if angle goes through 0 we clear the barrel
jsr drawtankNrX
jmp MoveBarrelToNewPosition jmp MoveBarrelToNewPosition
rotateLeft rotateLeft
dec angleTable,x dec angleTable,x
bpl MoveBarrelToNewPosition
mva #$2e CharCode
jsr drawtankNrX
jmp MoveBarrelToNewPosition jmp MoveBarrelToNewPosition
BarrelPositionIsFine BarrelPositionIsFine
rts rts
@@ -1146,7 +1250,8 @@ nextishigher
.endp .endp
;-------------------------------------------------- ;--------------------------------------------------
.proc getkey ; waits for pressing a key and returns pressed value in A .proc GetKey ; waits for pressing a key and returns pressed value in A
; when [ESC] is pressed, escFlag is set to 1
;-------------------------------------------------- ;--------------------------------------------------
jsr WaitForKeyRelease jsr WaitForKeyRelease
@ @
@@ -1184,19 +1289,19 @@ notpressedJoyGetKey
getkeyend getkeyend
mvx #sfx_keyclick sfx_effect mvx #sfx_keyclick sfx_effect
rts rts
.endp .endp
;-------------------------------------------------- ;--------------------------------------------------
getkeynowait .proc; .proc getkeynowait
;-------------------------------------------------- ;--------------------------------------------------
jsr WaitForKeyRelease jsr WaitForKeyRelease
lda kbcode lda kbcode
and #$3f ;CTRL and SHIFT ellimination and #$3f ;CTRL and SHIFT ellimination
rts rts
.endp .endp
;-------------------------------------------------- ;--------------------------------------------------
WaitForKeyRelease .proc .proc WaitForKeyRelease
;-------------------------------------------------- ;--------------------------------------------------
lda JSTICK0 lda JSTICK0
and #$0f and #$0f
@@ -1210,7 +1315,16 @@ WaitForKeyRelease .proc
rts rts
.endp .endp
;--------------------------------------------------
.proc RmtSongSelect
;--------------------------------------------------
; starting song line 0-255 to A reg
bit noMusic
spl:lda #song_silencio
ldx #<MODUL ;low byte of RMT module to X reg
ldy #>MODUL ;hi byte of RMT module to Y reg
jmp RASTERMUSICTRACKER ;Init, :RTS
.endp
;---------------------------------------------- ;----------------------------------------------
icl 'weapons.asm' icl 'weapons.asm'
;---------------------------------------------- ;----------------------------------------------
@@ -1228,10 +1342,11 @@ font4x4
ins 'artwork/font4x4s.bmp',+62 ins 'artwork/font4x4s.bmp',+62
;---------------------------------------------- ;----------------------------------------------
TankFont TankFont
ins 'artwork/tanks.fnt' ins 'artwork/tanksv2.fnt'
;---------------------------------------------- ;----------------------------------------------
icl 'variables.asm' icl 'variables.asm'
;---------------------------------------------- ;----------------------------------------------
; reserved space for RMT player ; reserved space for RMT player
.ds $0320 .ds $0320
.align $100 .align $100
@@ -1240,14 +1355,14 @@ TankFont
MODUL equ $b000 ;address of RMT module MODUL equ $b000 ;address of RMT module
opt h- ;RMT module is standard Atari binary file already opt h- ;RMT module is standard Atari binary file already
ins "artwork/sfx/scorch_trial0e_stripped.rmt" ;include music RMT module ins "artwork/sfx/scorch_trial0f_stripped.rmt" ;include music RMT module
opt h+ opt h+
; ;
; ;
TheEnd TheEnd
.ECHO 'TheEnd: ',TheEnd .ECHO 'TheEnd: ',TheEnd
.if TheEnd > PMGraph + $300 .if TheEnd > PMGraph + $300
.error memory conflict .error "memory conflict"
.endif .endif
;---------------------------------------------- ;----------------------------------------------
BIN
View File
Binary file not shown.
Executable → Regular
+525 -257
View File
File diff suppressed because it is too large Load Diff
Executable → Regular
+79 -67
View File
@@ -8,32 +8,33 @@
; 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
;===================================================== ;=====================================================
;--------------------------------------------------
;Variables
;--------------
TanksNames ; DO NOT ZERO - ticket #24 TanksNames ; DO NOT ZERO - ticket #24
:6 dta d" " :6 dta d" "
;---------------------------- ;----------------------------------------------------
;Options DO NOT ZERO - ticket #27 ;Options DO NOT ZERO - ticket #27
OptionsTable .by 0,0,2,2,0,1,3 OptionsTable .by 0,1,2,2,0,1,3
RoundsInTheGame .by 10 ;how many rounds in the current game RoundsInTheGame .by 10 ;how many rounds in the current game
seppukuVal .by 75 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]
;----------------------------------- ;----------------------------------------------------
noMusic .by 0 ; 0 - play music, $ff - do not play music
noSfx .by 0 ; 0 - play SFX, $ff - do not play SFX
; 4x4 text buffer ; 4x4 text buffer
ResultLineBuffer ResultLineBuffer
dta d" " dta d" ", $ff
.byte $ff
LineHeader1 LineHeader1
dta d"# ROUND: " dta d"# ROUND: "
RoundNrDisplay RoundNrDisplay
dta d" #" dta d" #", $ff
.byte $ff
;=====================================================
variablesStart ; zeroing starts here variablesStart ; zeroing starts here
escFlag .ds 1 ;=====================================================
isInventory .ds 1 ; 0 - purchase, $ff - inventory
;--------------
drawFunction .ds 1 ; 0 - plot, %10000000 - LineLength (N), %01000000 - DrawCheck (V)
;-------------- ;--------------
sfx_effect .ds 1 sfx_effect .ds 1
;-------------- ;--------------
@@ -45,30 +46,32 @@ flyDelay .ds 1
NumberOfPlayers .DS 1 ;current number of players (counted from 1) NumberOfPlayers .DS 1 ;current number of players (counted from 1)
TankSequence .DS [MaxPlayers] ;sequence of shooting during the Round TankSequence .DS [MaxPlayers] ;sequence of shooting during the Round
GameIsOver .DS 1 ; 1 means it was the last round in the game GameIsOver .DS 1 ; 1 means it was the last round in the game
;----------------------------------- ;----------------------------------------------------
moneyH ;we place zero at the end of prices and money moneyH ;we place zero at the end of prices and money
;and have range from 0 to 99990 (not too much) ;and have range from 0 to 99990 (not too much)
;money players have (maybe one more byte is needed?) ;money players have (maybe one more byte is needed?)
.DS [MaxPlayers] .DS [MaxPlayers]
moneyL moneyL
.DS [MaxPlayers] .DS [MaxPlayers]
;----------------------------------- ;----------------------------------------------------
gainH ;how much money player gets after the round gainH ;how much money player gets after the round
;it is gathered during the round basing on energy ;it is gathered during the round basing on energy
;opponents loose after player's shoots ;opponents loose after player's shoots
.DS [MaxPlayers] .DS [MaxPlayers]
gainL gainL
.DS [MaxPlayers] .DS [MaxPlayers]
;----------------------------------- ;----------------------------------------------------
looseH ;how much player looses after the round looseH ;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 looseL
.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]
@@ -79,66 +82,67 @@ ResultsTable ;the results in the gameeeeee
.DS [MaxPlayers] .DS [MaxPlayers]
TempResults TempResults
.DS [MaxPlayers] .DS [MaxPlayers]
CurrentResult ;----------------------------------------------------
.DS 1 ForceTableL ;shooting Force of the tank during the round
;-----------------------------------
EnergyTableL ;shooting Force of the tank during the round
.DS [MaxPlayers] .DS [MaxPlayers]
EnergyTableH 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]
;----------------------------------- ;----------------------------------------------------
AngleTable ;Angle of the barrel of each tank during the round AngleTable ;Angle of the barrel of each tank during the round
.DS [MaxPlayers] .DS [MaxPlayers]
NewAngle .DS 1 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
;----------------------------------- ;----------------------------------------------------
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 Erase .DS 1 ; if 1 only mask of the character is printed
; on the graphics screen. if 0 character is printed normally ; on the graphics screen. if 0 character is printed normally
;----------------------------------- ;----------------------------------------------------
RangeLeft .DS 2 ;range of the soil to be fallen down RangeLeft .DS 2 ;range of the soil to be fallen down
RangeRight .DS 2 ;it is being set by all Explosions RangeRight .DS 2 ;it is being set by all Explosions
;----------------------------------- ;----------------------------------------------------
WeaponRangeLeft .DS 2 ;Range of the Explosion of the given weapon WeaponRangeLeft .DS 2 ;Range of the Explosion of the given weapon
WeaponRangeRight .DS 2 WeaponRangeRight .DS 2
;-------------------------------------------------- ;----------------------------------------------------
;xroller ;xroller
HowMuchToFall .ds 1 HowMuchToFall .ds 1
HeightRol .DS 1 HeightRol .DS 1
@@ -159,7 +163,6 @@ 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)
@@ -172,14 +175,14 @@ 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?
; ------------------------------------------------- ;----------------------------------------------------
;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
@@ -192,7 +195,9 @@ 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
; ------------------------------------------------- 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
@@ -204,12 +209,11 @@ 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 ;SoilDown2
IsEndOfTheFallFlag .DS 1 IsEndOfTheFallFlag .DS 1
; ------------------------------------------------- ;----------------------------------------------------
;unPlot ;unPlot
WhichUnPlot .DS 1 WhichUnPlot .DS 1
; max 5 concurrent unPlots ; max 5 concurrent unPlots
@@ -223,7 +227,7 @@ 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]
@@ -241,24 +245,22 @@ 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 8*5 ; max 40 offensive weapons. this is wrong, should be 48, still only 32 defined.
NubersOfWeaponsL2 IndexesOfWeaponsL2
.ds 8*2 ; :(8*2) .by $ff .ds 8*2 ; max 16 defensive weapons.
; ------------------------------------------------- ;----------------------------------------------------
; 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 .DS 1
PositionOnTheList ; pointer position on the list being displayed PositionOnTheList ; pointer position on the list being displayed
.DS 1 .DS 1
@@ -274,14 +276,14 @@ WhichList ; list currently on the screen
OffsetDL1 ; offset of the list screen (how many lines).... OffsetDL1 ; offset of the list screen (how many lines)....
.DS 1 .DS 1
; ------------------------------------------------- ;----------------------------------------------------
;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 ; Difficulty Level (human/cpu)
.DS 1 .DS 1
;------------------------------------------------- ;----------------------------------------------------
;displaydecimal ;displaydecimal
decimal .DS 2 decimal .DS 2
decimalresult .DS 4 decimalresult .DS 4
@@ -296,7 +298,7 @@ FallDown2 .DS 1
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)
@@ -323,7 +325,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
@@ -332,7 +334,16 @@ TextNumberOff .DS 1
;-------------- ;--------------
TankTempY TankTempY
.DS 1 .DS 1
;----------------------------------------------------
;-------------- single round variables -------------- ;-------------- single round variables --------------
;----------------------------------------------------
singleRoundVars
;--------------
escFlag .ds 1
;--------------
CurrentResult
.DS 1
;--------------
previousAngle previousAngle
.DS [MaxPlayers] .DS [MaxPlayers]
previousEnergyL previousEnergyL
@@ -350,9 +361,9 @@ RandBoundaryHigh
AngleTablePointer AngleTablePointer
.DS 1 .DS 1
singleRoundVarsEnd singleRoundVarsEnd
;---------------------------------------------- ;----------------------------------------------------
; 4x4 texts ; 4x4 texts
;---------------------------------------------- ;----------------------------------------------------
LineAddress4x4 LineAddress4x4
.DS 2 .DS 2
LineCharNr LineCharNr
@@ -370,8 +381,9 @@ ResultY
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
@@ -383,6 +395,6 @@ plot4x4color .DS 1 ;1-white, 0-background
variablesEnd variablesEnd
;---------------------------- ;----------------------------------------------------
.endif .endif
Executable → Regular
+805 -563
View File
File diff suppressed because it is too large Load Diff