mirror of
https://github.com/pkali/scorch_src.git
synced 2026-05-20 22:34:21 +02:00
Compare commits
36 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9251db8f3a | |||
| f15e815c1a | |||
| 746026ae4f | |||
| fd67dc0bb1 | |||
| c1ee40fa59 | |||
| a64d01067d | |||
| f703316128 | |||
| 98565d490f | |||
| fcbd0bc34a | |||
| e50bc8669e | |||
| bbded45200 | |||
| 00d386e73f | |||
| 70788e772e | |||
| 793d494fc5 | |||
| 6b2eabd1ca | |||
| 0832d841f4 | |||
| c41c01cee0 | |||
| 6b68066c94 | |||
| 31c181ce89 | |||
| 33d8303270 | |||
| f9fad89d7c | |||
| e9ff60210e | |||
| b7560ab6d9 | |||
| 41094db7dd | |||
| ab30227843 | |||
| 5d619c80f8 | |||
| e842d455e6 | |||
| da4d82cca4 | |||
| f7931afbb4 | |||
| b18793014d | |||
| ef1c0dc62c | |||
| bc338198a0 | |||
| 2a08447b9c | |||
| 4088e5f8fa | |||
| 79b5bc3290 | |||
| 3b80de7def |
@@ -4,3 +4,4 @@ scorch.lab
|
|||||||
scorch.lst
|
scorch.lst
|
||||||
textproc.lab
|
textproc.lab
|
||||||
textproc.lst
|
textproc.lst
|
||||||
|
artwork/talk.as_
|
||||||
|
|||||||
@@ -51,6 +51,33 @@ With the advent of [fujinet](https://fujinet.online/) we are thinking about maki
|
|||||||
|
|
||||||
## Changelog:
|
## Changelog:
|
||||||
|
|
||||||
|
###### Version 1.27
|
||||||
|
2023-02-07
|
||||||
|
|
||||||
|
Late evening edition. It is 2:11 am and I am writing this instead of dreaming of electric sheep.
|
||||||
|
Our Senior Executive Art Director @+Adam+ ordered us to stop procrastinating and finally release the version with colorized mountains. So here it is. Enjoy :)
|
||||||
|
Please note you can still press [Tab] or [5] in the main menu and revert to the classic or classy look of the "Polish rainbow" (it's a reference to a strangely accurate Wulffmorgenthaler comic strip: https://i.imgur.com/HMctP.jpg)
|
||||||
|
Other changes:
|
||||||
|
- nicer Lazy targeting and "visual Debug" for Lazy Boys
|
||||||
|
- extreme memory optimizations to fit 2 new texts from @RB5200 based on "Sandford and Son"
|
||||||
|
- fix for [G] key bug when turn wind changes were selected
|
||||||
|
- fix for Lazy Boys deactivation bug
|
||||||
|
- PAL mode now has got the full-color table, so it is possible to adjust colors better
|
||||||
|
- the x-position of tanks was always adjusted to even X values, this is no more, which saves some hassle and unnecessary tank shakes left and right. As tanks are painted with sprites of a lower resolution, a rare artifact might appear here and there.
|
||||||
|
- improved tank shapes
|
||||||
|
|
||||||
|
###### Version 1.26
|
||||||
|
2023-01-23
|
||||||
|
|
||||||
|
Early morning edition. It is 5:11 am and I am writing this instead of dreaming of electric sheep.
|
||||||
|
For the last 6 weeks, the versions we released had an awful bug - the conversations of tanks were completely invisible. Thanks for pointing this out, RB5200.
|
||||||
|
- tanks talk to each other again
|
||||||
|
- better stochastic non-blocking wait one frame
|
||||||
|
- rare distance measurement bug fixed (rarely a tank survived a direct hit)
|
||||||
|
- 5200: second fire (by RB5200)
|
||||||
|
- "visual debug" mode in A800 version, triggered by pressing [CTRL]+[HELP]. It displays distances measured, laser aiming, and aiming technique. It leaves a mess on the screen, but it does not impair the game, just makes it a bit harder.
|
||||||
|
|
||||||
|
|
||||||
###### Version 1.25
|
###### Version 1.25
|
||||||
2023-01-17
|
2023-01-17
|
||||||
|
|
||||||
@@ -58,8 +85,9 @@ Y2K Compliance Edition
|
|||||||
This version is 5200 SuperSystem focused.
|
This version is 5200 SuperSystem focused.
|
||||||
- the correct production year in the splash screens!!!
|
- the correct production year in the splash screens!!!
|
||||||
- very rare hangups when accessing the inventory seemingly eliminated, thanks @RB5200 for testing!
|
- very rare hangups when accessing the inventory seemingly eliminated, thanks @RB5200 for testing!
|
||||||
- a new feature - pressing [Tab] (atari800) or [5] (5200) when selecting the wind power switches wind mode to changing with each turn, what makes aiming arguably more challenging! It is indicated by "?" next to the "Wind" in the main menu.
|
- a new feature - pressing [Tab] (atari800) or [5] (5200) when selecting the wind power switches wind mode to changing with each turn, which makes aiming arguably more challenging! It is indicated by "?" next to the "Wind" in the main menu.
|
||||||
- all these changes were made possible because of the extensive code size optimization by @Pecus
|
- pressing [G] during the game changes the color scheme (classic, Polish rainbow, Xmas).
|
||||||
|
- all these changes were made possible thanks to the extensive code size optimization by @Pecus
|
||||||
|
|
||||||
|
|
||||||
###### Version 1.23
|
###### Version 1.23
|
||||||
@@ -659,3 +687,4 @@ Together with Pecus we were working on this piece of code for four years and it
|
|||||||
Now it's your turn to help this idea happen!
|
Now it's your turn to help this idea happen!
|
||||||
|
|
||||||
...transmission error...former history missing...
|
...transmission error...former history missing...
|
||||||
|
|
||||||
|
|||||||
@@ -545,10 +545,7 @@ skipThisPlayer
|
|||||||
sta RandBoundaryHigh+1
|
sta RandBoundaryHigh+1
|
||||||
jsr RandomizeForce
|
jsr RandomizeForce
|
||||||
RepeatAim
|
RepeatAim
|
||||||
lda ForceTableL,x
|
jsr Table2Force
|
||||||
sta Force
|
|
||||||
lda ForceTableH,x
|
|
||||||
sta Force+1
|
|
||||||
; wind correction 90+(wind/8)
|
; wind correction 90+(wind/8)
|
||||||
mwa Wind temp2
|
mwa Wind temp2
|
||||||
:7 lsrw temp2
|
:7 lsrw temp2
|
||||||
|
|||||||
@@ -760,7 +760,7 @@ quit
|
|||||||
ini main
|
ini main
|
||||||
; ---
|
; ---
|
||||||
|
|
||||||
opt l-
|
;opt l- ; this stops the listing
|
||||||
|
|
||||||
.MACRO SPRITES
|
.MACRO SPRITES
|
||||||
missiles
|
missiles
|
||||||
|
|||||||
+68
-66
@@ -53,79 +53,81 @@ L49 dta d"DIE, TANK-SCUM!"
|
|||||||
L50 dta d"I'M GONNA BREAK YOUR FACE!"
|
L50 dta d"I'M GONNA BREAK YOUR FACE!"
|
||||||
L51 dta d"MAMA SAID KNOCK YOU OUT!"
|
L51 dta d"MAMA SAID KNOCK YOU OUT!"
|
||||||
L52 dta d"I HOPE YOU ENJOY PAIN!"
|
L52 dta d"I HOPE YOU ENJOY PAIN!"
|
||||||
|
L53 dta d"HOW'D YOU LIKE ONE ACROSS YOUR LIPS?" ;(sanford and son)
|
||||||
;--------------------------------
|
;--------------------------------
|
||||||
L53 dta d"PARTING IS SUCH SWEET SORROW... NOT!"
|
L54 dta d"PARTING IS SUCH SWEET SORROW... NOT!"
|
||||||
L54 dta d"UGH!"
|
L55 dta d"UGH!"
|
||||||
L55 dta d"AARGH!"
|
L56 dta d"AARGH!"
|
||||||
L56 dta d"AAAGGHHH!"
|
L57 dta d"AAAGGHHH!"
|
||||||
L57 dta d"I'M MELTING!"
|
L58 dta d"I'M MELTING!"
|
||||||
L58 dta d"OOF.."
|
L59 dta d"OOF.."
|
||||||
L59 dta d"OH!"
|
L60 dta d"OH!"
|
||||||
L60 dta d"EEEK!"
|
L61 dta d"EEEK!"
|
||||||
L61 dta d"AACCH!"
|
L62 dta d"AACCH!"
|
||||||
L62 dta d"I HATE IT WHEN THAT HAPPENS."
|
L63 dta d"I HATE IT WHEN THAT HAPPENS."
|
||||||
L63 dta d"ONE DIRECT HIT CAN RUIN YOUR WHOLE DAY."
|
L64 dta d"ONE DIRECT HIT CAN RUIN YOUR WHOLE DAY."
|
||||||
L64 dta d"OH NO!"
|
L65 dta d"OH NO!"
|
||||||
L65 dta d"NOT ME!"
|
L66 dta d"NOT ME!"
|
||||||
L66 dta d"OUCH."
|
L67 dta d"OUCH."
|
||||||
L67 dta d"OH NO, NOT AGAIN."
|
L68 dta d"OH NO, NOT AGAIN."
|
||||||
L68 dta d"ANOTHER ONE BITES THE DUST."
|
L69 dta d"ANOTHER ONE BITES THE DUST."
|
||||||
L69 dta d"GOODBYE."
|
L70 dta d"GOODBYE."
|
||||||
L70 dta d"HELP ME!"
|
L71 dta d"HELP ME!"
|
||||||
L71 dta d"FAREWELL, CRUEL WORLD."
|
L72 dta d"FAREWELL, CRUEL WORLD."
|
||||||
L72 dta d"REMEMBER THE ALAMO!"
|
L73 dta d"REMEMBER THE ALAMO!"
|
||||||
L73 dta d"OH MAN!"
|
L74 dta d"OH MAN!"
|
||||||
L74 dta d"DOOUGH!"
|
L75 dta d"DOOUGH!"
|
||||||
L75 dta d"ANOTHER DAY, ANOTHER BOMB."
|
L76 dta d"ANOTHER DAY, ANOTHER BOMB."
|
||||||
L76 dta d"THIS IS THE END, MY ONLY FRIEND."
|
L77 dta d"THIS IS THE END, MY ONLY FRIEND."
|
||||||
L77 dta d"VERY FUNNY."
|
L78 dta d"VERY FUNNY."
|
||||||
L78 dta d"THE FAT LADY SANG."
|
L79 dta d"THE FAT LADY SANG."
|
||||||
L79 dta d"WHY DOES EVERYTHING HAPPEN TO ME?"
|
L80 dta d"WHY DOES EVERYTHING HAPPEN TO ME?"
|
||||||
L80 dta d"I'M GOING DOWN."
|
L81 dta d"I'M GOING DOWN."
|
||||||
L81 dta d"I'VE GOT A BAD FEELING ABOUT THIS."
|
L82 dta d"I'VE GOT A BAD FEELING ABOUT THIS."
|
||||||
L82 dta d"CRAPOLA."
|
L83 dta d"CRAPOLA."
|
||||||
L83 dta d"POW!"
|
L84 dta d"POW!"
|
||||||
L84 dta d"BIF!"
|
L85 dta d"BIF!"
|
||||||
L85 dta d"BAM!"
|
L86 dta d"BAM!"
|
||||||
L86 dta d"ZONK!"
|
L87 dta d"ZONK!"
|
||||||
L87 dta d"I SHOULD'VE LISTENED TO MY MOTHER..."
|
L88 dta d"I SHOULD'VE LISTENED TO MY MOTHER..."
|
||||||
L88 dta d"I WALK THROUGH THE VALLEY OF THE SHADOW..."
|
L89 dta d"I WALK THROUGH THE VALLEY OF THE SHADOW..."
|
||||||
L89 dta d"WHAT WAS THAT NOISE?"
|
L90 dta d"WHAT WAS THAT NOISE?"
|
||||||
L90 dta d"MAMA SAID THERE'D BE DAYS LIKE THIS."
|
L91 dta d"MAMA SAID THERE'D BE DAYS LIKE THIS."
|
||||||
L91 dta d"ITS JUST ONE OF THOSE DAYS..."
|
L92 dta d"ITS JUST ONE OF THOSE DAYS..."
|
||||||
L92 dta d"I SEE A BRIGHT LIGHT..."
|
L93 dta d"I SEE A BRIGHT LIGHT..."
|
||||||
L93 dta d"MOMMY? IS THAT YOU?"
|
L94 dta d"MOMMY? IS THAT YOU?"
|
||||||
L94 dta d"I LET YOU HIT ME!"
|
L95 dta d"I LET YOU HIT ME!"
|
||||||
L95 dta d"SUCKER SHOT!"
|
L96 dta d"SUCKER SHOT!"
|
||||||
L96 dta d"I DIDN'T WANT TO LIVE ANYWAY."
|
L97 dta d"I DIDN'T WANT TO LIVE ANYWAY."
|
||||||
L97 dta d"-<SOB>-"
|
L98 dta d"-<SOB>-"
|
||||||
L98 dta d"WAS THAT AS CLOSE AS I THINK IT WAS?"
|
L99 dta d"WAS THAT AS CLOSE AS I THINK IT WAS?"
|
||||||
L99 dta d"JOIN THE ARMY, SEE THE WORLD THEY SAID."
|
L100 dta d"JOIN THE ARMY, SEE THE WORLD THEY SAID."
|
||||||
L100 dta d"IT WASN'T JUST A JOB IT WAS AN ADVENTURE!"
|
L101 dta d"IT WASN'T JUST A JOB IT WAS AN ADVENTURE!"
|
||||||
L101 dta d"I DIDN'T LIKE VIOLENCE ANYWAY!"
|
L102 dta d"I DIDN'T LIKE VIOLENCE ANYWAY!"
|
||||||
L102 dta d"I THOUGHT YOU LIKED ME?"
|
L103 dta d"I THOUGHT YOU LIKED ME?"
|
||||||
L103 dta d"CTO XYEB"
|
L104 dta d"CTO XYEB"
|
||||||
L104 dta d"I THINK THIS GUY'S A LITTLE CRAZY."
|
L105 dta d"I THINK THIS GUY'S A LITTLE CRAZY."
|
||||||
L105 dta d"SOMEHOW I DON'T FEEL LIKE KILLING ANYMORE."
|
L106 dta d"SOMEHOW I DON'T FEEL LIKE KILLING ANYMORE."
|
||||||
L106 dta d"HEY! KILLIN' AIN'T COOL."
|
L107 dta d"HEY! KILLIN' AIN'T COOL."
|
||||||
L107 dta d"GEE... THANKS."
|
L108 dta d"GEE... THANKS."
|
||||||
L108 dta d"I'VE FALLEN AND I CAN'T GET UP!"
|
L109 dta d"I'VE FALLEN AND I CAN'T GET UP!"
|
||||||
L109 dta d"911?"
|
L110 dta d"911?"
|
||||||
L110 dta d"OH NO! HERE I BLOW AGAIN!"
|
L111 dta d"OH NO! HERE I BLOW AGAIN!"
|
||||||
L111 dta d"I'LL BE BACK..."
|
L112 dta d"I'LL BE BACK..."
|
||||||
L112 dta d"HEY - I'VE GOT LAWYERS."
|
L113 dta d"HEY - I'VE GOT LAWYERS."
|
||||||
L113 dta d"TIME TO CALL 1-900-SUE-TANK."
|
L114 dta d"TIME TO CALL 1-900-SUE-TANK."
|
||||||
|
L115 dta d"YOU BIG DUMMY!" ;(sanford and son)
|
||||||
LEND
|
LEND
|
||||||
OffensiveTextTableL
|
OffensiveTextTableL
|
||||||
dta <L0,<L1,<L2,<L3,<L4,<L5,<L6,<L7,<L8,<L9,<L10,<L11,<L12,<L13,<L14,<L15,<L16,<L17,<L18,<L19,<L20,<L21,<L22,<L23,<L24,<L25,<L26,<L27,<L28,<L29,<L30,<L31,<L32,<L33,<L34,<L35,<L36,<L37,<L38,<L39,<L40,<L41,<L42,<L43,<L44,<L45,<L46,<L47,<L48,<L49,<L50,<L51,<L52
|
dta <L0,<L1,<L2,<L3,<L4,<L5,<L6,<L7,<L8,<L9,<L10,<L11,<L12,<L13,<L14,<L15,<L16,<L17,<L18,<L19,<L20,<L21,<L22,<L23,<L24,<L25,<L26,<L27,<L28,<L29,<L30,<L31,<L32,<L33,<L34,<L35,<L36,<L37,<L38,<L39,<L40,<L41,<L42,<L43,<L44,<L45,<L46,<L47,<L48,<L49,<L50,<L51,<L52,<L53
|
||||||
dta <L53,<L54,<L55,<L56,<L57,<L58,<L59,<L60,<L61,<L62,<L63,<L64,<L65,<L66,<L67,<L68,<L69,<L70,<L71,<L72,<L73,<L74,<L75,<L76,<L77,<L78,<L79,<L80,<L81,<L82,<L83,<L84,<L85,<L86,<L87,<L88,<L89,<L90,<L91,<L92,<L93,<L94,<L95,<L96,<L97,<L98,<L99,<L100,<L101,<L102,<L103,<L104,<L105,<L106,<L107,<L108,<L109,<L110,<L111,<L112,<L113
|
dta <L54,<L55,<L56,<L57,<L58,<L59,<L60,<L61,<L62,<L63,<L64,<L65,<L66,<L67,<L68,<L69,<L70,<L71,<L72,<L73,<L74,<L75,<L76,<L77,<L78,<L79,<L80,<L81,<L82,<L83,<L84,<L85,<L86,<L87,<L88,<L89,<L90,<L91,<L92,<L93,<L94,<L95,<L96,<L97,<L98,<L99,<L100,<L101,<L102,<L103,<L104,<L105,<L106,<L107,<L108,<L109,<L110,<L111,<L112,<L113,<L114,<L115
|
||||||
dta <LEND
|
dta <LEND
|
||||||
OffensiveTextTableH
|
OffensiveTextTableH
|
||||||
dta >L0,>L1,>L2,>L3,>L4,>L5,>L6,>L7,>L8,>L9,>L10,>L11,>L12,>L13,>L14,>L15,>L16,>L17,>L18,>L19,>L20,>L21,>L22,>L23,>L24,>L25,>L26,>L27,>L28,>L29,>L30,>L31,>L32,>L33,>L34,>L35,>L36,>L37,>L38,>L39,>L40,>L41,>L42,>L43,>L44,>L45,>L46,>L47,>L48,>L49,>L50,>L51,>L52
|
dta >L0,>L1,>L2,>L3,>L4,>L5,>L6,>L7,>L8,>L9,>L10,>L11,>L12,>L13,>L14,>L15,>L16,>L17,>L18,>L19,>L20,>L21,>L22,>L23,>L24,>L25,>L26,>L27,>L28,>L29,>L30,>L31,>L32,>L33,>L34,>L35,>L36,>L37,>L38,>L39,>L40,>L41,>L42,>L43,>L44,>L45,>L46,>L47,>L48,>L49,>L50,>L51,>L52,>L53
|
||||||
dta >L53,>L54,>L55,>L56,>L57,>L58,>L59,>L60,>L61,>L62,>L63,>L64,>L65,>L66,>L67,>L68,>L69,>L70,>L71,>L72,>L73,>L74,>L75,>L76,>L77,>L78,>L79,>L80,>L81,>L82,>L83,>L84,>L85,>L86,>L87,>L88,>L89,>L90,>L91,>L92,>L93,>L94,>L95,>L96,>L97,>L98,>L99,>L100,>L101,>L102,>L103,>L104,>L105,>L106,>L107,>L108,>L109,>L110,>L111,>L112,>L113
|
dta >L54,>L55,>L56,>L57,>L58,>L59,>L60,>L61,>L62,>L63,>L64,>L65,>L66,>L67,>L68,>L69,>L70,>L71,>L72,>L73,>L74,>L75,>L76,>L77,>L78,>L79,>L80,>L81,>L82,>L83,>L84,>L85,>L86,>L87,>L88,>L89,>L90,>L91,>L92,>L93,>L94,>L95,>L96,>L97,>L98,>L99,>L100,>L101,>L102,>L103,>L104,>L105,>L106,>L107,>L108,>L109,>L110,>L111,>L112,>L113,>L114,>L115
|
||||||
dta >LEND
|
dta >LEND
|
||||||
NumberOfOffensiveTexts=54
|
NumberOfOffensiveTexts=54
|
||||||
NumberOfDeffensiveTexts=60
|
NumberOfDeffensiveTexts=62
|
||||||
.endp
|
.endp
|
||||||
hoverFull dta d"MY HOVERCRAFT IS FULL OF EELS!"
|
hoverFull dta d"MY HOVERCRAFT IS FULL OF EELS!"
|
||||||
hoverFullEnd
|
hoverFullEnd
|
||||||
|
|||||||
Binary file not shown.
+16
-5
@@ -67,10 +67,14 @@ GradientAddrL
|
|||||||
.by <dliColorsFore, <dliColorsFore, <dliColorsFore2
|
.by <dliColorsFore, <dliColorsFore, <dliColorsFore2
|
||||||
GradientAddrH
|
GradientAddrH
|
||||||
.by >dliColorsFore, >dliColorsFore, >dliColorsFore2
|
.by >dliColorsFore, >dliColorsFore, >dliColorsFore2
|
||||||
dliColorsFore2
|
dliColorsFore2 ; colors for NTSC
|
||||||
.by $0a ; one mountains color
|
.by $0a ; one mountains color
|
||||||
.by $7e,$7a,$7c,$6a,$6c,$58,$5a,$48,$4a,$38
|
.by $7e,$7a,$7c,$6a,$6c,$58,$5a,$48,$4a,$38
|
||||||
.by $3a,$16,$18,$e6,$e8,$d4,$d6,$b4,$b6,$b6
|
.by $3a,$16,$18,$e6,$e8,$d4,$d6,$b4,$b6,$b6
|
||||||
|
dliColorsFore2PAL ; colors for PAL
|
||||||
|
.by $0a ; one mountains color
|
||||||
|
.by $7e,$7a,$7c,$6a,$6c,$58,$5a,$48,$4a,$38
|
||||||
|
.by $3a,$16,$18,$e6,$e8,$c4,$c6,$a4,$a6,$a6
|
||||||
|
|
||||||
;-----------
|
;-----------
|
||||||
pmtableL ; addressess of the P/M memory for 6 tanks
|
pmtableL ; addressess of the P/M memory for 6 tanks
|
||||||
@@ -626,10 +630,13 @@ CreditsStart
|
|||||||
dta d"Bocianu, Probabilitydragon, EnderDude",d","*
|
dta d"Bocianu, Probabilitydragon, EnderDude",d","*
|
||||||
dta d"Beeblebrox, KrzysRog, lopezpb, Dracon",d","*
|
dta d"Beeblebrox, KrzysRog, lopezpb, Dracon",d","*
|
||||||
dta d"brad-colbert, archon800, nowy80",d","*
|
dta d"brad-colbert, archon800, nowy80",d","*
|
||||||
dta d"Shaggy the Atarian, RetroBorsuk, ZP",d"H"*
|
dta d"Shaggy the Atarian, RetroBorsuk, ZPH"
|
||||||
.IF target = 5200
|
.IF target = 5200
|
||||||
dta d"x-usr(1536), Aking, JAC!, phaero",d"n"*
|
dta d","*
|
||||||
|
dta d"x-usr(1536), Aking, JAC!, phaeron",d","*
|
||||||
dta d"RB520",d"0"*
|
dta d"RB520",d"0"*
|
||||||
|
.ELSE
|
||||||
|
dta d" "*
|
||||||
.ENDIF
|
.ENDIF
|
||||||
dta d" "*
|
dta d" "*
|
||||||
dta d"Additional testin",d"g"*
|
dta d"Additional testin",d"g"*
|
||||||
@@ -641,9 +648,13 @@ CreditsStart
|
|||||||
dta d" "*
|
dta d" "*
|
||||||
CreditsEnd
|
CreditsEnd
|
||||||
.IF target = 5200
|
.IF target = 5200
|
||||||
CreditsLines=37
|
CreditsLines=38
|
||||||
.ELSE
|
.ELSE
|
||||||
CreditsLines=42 ; 34 in reality. add 7?
|
CreditsLines=42 ; 34 in reality. add 7?
|
||||||
.ENDIF
|
.ENDIF
|
||||||
|
.IF target = 5200
|
||||||
|
; Atari 5200 splash
|
||||||
|
NewSplashText=*
|
||||||
|
dta d"copyright 2023 atari"
|
||||||
|
.ENDIF
|
||||||
.endif
|
.endif
|
||||||
|
|||||||
+339
-16
@@ -140,8 +140,13 @@ LineParametersReady
|
|||||||
ora DX+1
|
ora DX+1
|
||||||
ora DY
|
ora DY
|
||||||
ora DY+1
|
ora DY+1
|
||||||
jeq EndOfDraw
|
bne NotOnePoint
|
||||||
|
; length=0
|
||||||
|
sta LineLength
|
||||||
|
sta LineLength+1
|
||||||
|
jmp EndOfDraw
|
||||||
|
|
||||||
|
NotOnePoint
|
||||||
; here we have DX,DY,XK and we know which operations
|
; here we have DX,DY,XK and we know which operations
|
||||||
; are to be performed with these factors when doing PLOT
|
; are to be performed with these factors when doing PLOT
|
||||||
; (accordingly to given bits of 'HowToDraw')
|
; (accordingly to given bits of 'HowToDraw')
|
||||||
@@ -219,6 +224,8 @@ PutPixelinDraw
|
|||||||
bit drawFunction
|
bit drawFunction
|
||||||
bpl @+
|
bpl @+
|
||||||
inw LineLength
|
inw LineLength
|
||||||
|
bit Vdebug
|
||||||
|
bmi MeasureVisualisation
|
||||||
jmp ContinueDraw ; was `bne` - not good, because LineLength starts from $ffff
|
jmp ContinueDraw ; was `bne` - not good, because LineLength starts from $ffff
|
||||||
@
|
@
|
||||||
bvc @+
|
bvc @+
|
||||||
@@ -266,6 +273,7 @@ CheckCollisionDraw
|
|||||||
StopHitChecking
|
StopHitChecking
|
||||||
jmp ContinueDraw
|
jmp ContinueDraw
|
||||||
@
|
@
|
||||||
|
MeasureVisualisation
|
||||||
jsr plot
|
jsr plot
|
||||||
|
|
||||||
ContinueDraw
|
ContinueDraw
|
||||||
@@ -543,16 +551,20 @@ NotHigherByte02
|
|||||||
sec
|
sec
|
||||||
lda xtankstableL,x
|
lda xtankstableL,x
|
||||||
sbc #$0f
|
sbc #$0f
|
||||||
|
; and clear lowest bit to be sure that the X coordinate is even
|
||||||
|
; (this is to have P/M background look nice)
|
||||||
|
; "AND" does not change "Carry" bit.
|
||||||
|
; x correction for P/M
|
||||||
|
; --
|
||||||
|
.IF XCORRECTION_FOR_PM = 1
|
||||||
|
and #$fe
|
||||||
|
.ENDIF
|
||||||
|
; --
|
||||||
sta xtankstableL,x
|
sta xtankstableL,x
|
||||||
bcs NotHigherByte01
|
bcs NotHigherByte01
|
||||||
dec xtankstableH,x
|
dec xtankstableH,x
|
||||||
NotHigherByte01
|
NotHigherByte01
|
||||||
|
|
||||||
; and clear lowest bit to be sure that the X coordinate is even
|
|
||||||
; (this is to have P/M background look nice)
|
|
||||||
lda xtankstableL,x
|
|
||||||
and #$fe
|
|
||||||
sta xtankstableL,x
|
|
||||||
inx
|
inx
|
||||||
Cpx NumberOfPlayers
|
Cpx NumberOfPlayers
|
||||||
bne StillRandomize02
|
bne StillRandomize02
|
||||||
@@ -1200,7 +1212,10 @@ DoNotDrawParachute
|
|||||||
; If it is odd then it must be corrected because otherwise
|
; If it is odd then it must be corrected because otherwise
|
||||||
; P/M graphics background would not look OK
|
; P/M graphics background would not look OK
|
||||||
; ldx TankNr
|
; ldx TankNr
|
||||||
lda XtanksTableL,x
|
; x correction for P/M
|
||||||
|
; --
|
||||||
|
.IF XCORRECTION_FOR_PM = 1
|
||||||
|
lda XtanksTableL,x
|
||||||
and #$01
|
and #$01
|
||||||
beq EndOfFall ; if it is even then it is the end
|
beq EndOfFall ; if it is even then it is the end
|
||||||
; and if not, we push it one pixel the way it was falling before
|
; and if not, we push it one pixel the way it was falling before
|
||||||
@@ -1214,6 +1229,8 @@ ForceFallLeft
|
|||||||
sta UnderTank1
|
sta UnderTank1
|
||||||
sty UnderTank2
|
sty UnderTank2
|
||||||
jmp TankFallsX
|
jmp TankFallsX
|
||||||
|
.ENDIF
|
||||||
|
; --
|
||||||
EndOfFall
|
EndOfFall
|
||||||
mva #1 Erase
|
mva #1 Erase
|
||||||
; ldx TankNr
|
; ldx TankNr
|
||||||
@@ -2025,6 +2042,311 @@ EndPut4x4
|
|||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
|
|
||||||
|
;--------------------------------------------------------
|
||||||
|
.proc DisplayOffensiveTextNr ;
|
||||||
|
ldx TextNumberOff
|
||||||
|
lda talk.OffensiveTextTableL,x
|
||||||
|
sta LineAddress4x4
|
||||||
|
lda talk.OffensiveTextTableH,x
|
||||||
|
sta LineAddress4x4+1
|
||||||
|
inx ; the next text
|
||||||
|
lda talk.OffensiveTextTableH,x
|
||||||
|
sta temp+1
|
||||||
|
lda talk.OffensiveTextTableL,x
|
||||||
|
sta temp ; opty possible
|
||||||
|
; substract address of the next text from previous to get text length
|
||||||
|
sbw temp LineAddress4x4 temp2
|
||||||
|
mva temp2 fx
|
||||||
|
|
||||||
|
;jsr Display4x4AboveTank
|
||||||
|
;rts
|
||||||
|
; POZOR !!!
|
||||||
|
.endp
|
||||||
|
|
||||||
|
;--------------------------------------------------------
|
||||||
|
.proc Display4x4AboveTank ;
|
||||||
|
; Displays texts using PutChar4x4 above tank and mountains.
|
||||||
|
; Pretty cool, eh!
|
||||||
|
;parameters are:
|
||||||
|
;Y - number of tank above which text is displayed
|
||||||
|
;fx - length of text
|
||||||
|
;LineAddress4x4 - address of the text
|
||||||
|
|
||||||
|
;lets calculate position of the text first!
|
||||||
|
;that's easy because we have number of tank
|
||||||
|
;and xtankstableL and H keep X position of a given tank
|
||||||
|
|
||||||
|
lda xtankstableL,y
|
||||||
|
sta temp
|
||||||
|
lda xtankstableH,y
|
||||||
|
sta temp+1
|
||||||
|
;now we should substract length of the text-1
|
||||||
|
;temp2 = (fx-1)*2
|
||||||
|
ldy fx
|
||||||
|
dey
|
||||||
|
tya
|
||||||
|
asl
|
||||||
|
sta temp2
|
||||||
|
mva #0 temp2+1
|
||||||
|
;now we have HALF length in pixels
|
||||||
|
;stored in temp2
|
||||||
|
|
||||||
|
;here we assume max length of text
|
||||||
|
;to display is 127 chars, but later it turns out it must be max 63!
|
||||||
|
|
||||||
|
sbw temp temp2 ; here begin of the text is in TEMP !!!!
|
||||||
|
;now we should check overflows
|
||||||
|
;lda temp+1 ; opty
|
||||||
|
bpl DOTNnotLessThanZero
|
||||||
|
;less than zero, so should be zero
|
||||||
|
mwa #0 temp
|
||||||
|
beq DOTNnoOverflow
|
||||||
|
|
||||||
|
DOTNnotLessThanZero
|
||||||
|
;so check if end larger than screenwidth
|
||||||
|
|
||||||
|
|
||||||
|
lda fx
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
;length in pixels -
|
||||||
|
;text length max 63 chars !!!!!!!!
|
||||||
|
|
||||||
|
|
||||||
|
clc
|
||||||
|
adc temp
|
||||||
|
sta temp2
|
||||||
|
lda #0
|
||||||
|
adc temp+1
|
||||||
|
sta temp2+1
|
||||||
|
;now in temp2 is end of the text in pixels
|
||||||
|
;so check if not greater than screenwitdth
|
||||||
|
cpw temp2 #screenwidth
|
||||||
|
bcc DOTNnoOverflow
|
||||||
|
|
||||||
|
;if end is greater than screenwidth
|
||||||
|
;then screenwidth - length is fine
|
||||||
|
lda fx
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
sta temp
|
||||||
|
mva #0 temp+1
|
||||||
|
|
||||||
|
sec
|
||||||
|
lda #<(screenwidth-1)
|
||||||
|
sbc temp
|
||||||
|
sta temp
|
||||||
|
lda #>(screenwidth-1)
|
||||||
|
sbc temp+1
|
||||||
|
sta temp+1
|
||||||
|
DOTNnoOverflow
|
||||||
|
;here in temp we have really good x position of text
|
||||||
|
|
||||||
|
mwa temp LineXdraw
|
||||||
|
|
||||||
|
;now let's get y position
|
||||||
|
;we will try to put text as low as possible
|
||||||
|
;just above mountains (so mountaintable will be checked)
|
||||||
|
lda fx
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
tay
|
||||||
|
;in temp there still is X position of text
|
||||||
|
;if we add temp and Y we will get end of the text
|
||||||
|
;so, lets go through mountaintable and look for
|
||||||
|
;the lowest value within
|
||||||
|
;Mountaitable+temp and Mountaitable+temp+Y
|
||||||
|
|
||||||
|
adw temp #MountainTable
|
||||||
|
|
||||||
|
mva #screenheight temp2 ;initialisation of the lowest value
|
||||||
|
|
||||||
|
DOTLowestMountainValueLoop
|
||||||
|
lda (temp),y
|
||||||
|
cmp temp2
|
||||||
|
bcs DOTOldLowestValue ;old lowest value
|
||||||
|
;new lowest value
|
||||||
|
sta temp2
|
||||||
|
DOTOldLowestValue
|
||||||
|
dey
|
||||||
|
cpy #$ff
|
||||||
|
bne DOTLowestMountainValueLoop
|
||||||
|
|
||||||
|
sec
|
||||||
|
lda temp2
|
||||||
|
sbc #(4+9) ;9 pixels above ground (and tanks...)
|
||||||
|
sta LineYdraw
|
||||||
|
|
||||||
|
jmp TypeLine4x4.noLengthNoColor ; rts
|
||||||
|
|
||||||
|
.endp
|
||||||
|
|
||||||
|
;--------------------------------------------------------
|
||||||
|
.proc DisplayTankNameAbove ;
|
||||||
|
lda tankNr
|
||||||
|
:3 asl ; *8
|
||||||
|
clc
|
||||||
|
adc #<TanksNames
|
||||||
|
sta temp ; TextAddress
|
||||||
|
lda #0
|
||||||
|
adc #>Tanksnames
|
||||||
|
sta temp+1 ; TextAddress+1
|
||||||
|
mwa temp LineAddress4x4
|
||||||
|
|
||||||
|
;find length of the tank's name
|
||||||
|
ldy #7
|
||||||
|
@
|
||||||
|
lda (temp),y
|
||||||
|
bne end_found
|
||||||
|
dey
|
||||||
|
bne @-
|
||||||
|
|
||||||
|
end_found
|
||||||
|
iny
|
||||||
|
sty fx
|
||||||
|
ldy tankNr
|
||||||
|
jsr Display4x4AboveTank
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
|
||||||
|
;-------------------------------
|
||||||
|
.proc TypeLine4x4 ;
|
||||||
|
;-------------------------------
|
||||||
|
;this routine prints line of length `fx`
|
||||||
|
;address in LineAddress4x4
|
||||||
|
;starting from LineXdraw, LineYdraw
|
||||||
|
|
||||||
|
lda #14 ; default length of 4x4 texts
|
||||||
|
sta fx
|
||||||
|
|
||||||
|
variableLength
|
||||||
|
lda #$ff ; $ff - visible characters, $00 - clearing
|
||||||
|
|
||||||
|
staplot4x4color
|
||||||
|
sta plot4x4color
|
||||||
|
noLengthNoColor
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
sty LineCharNr
|
||||||
|
|
||||||
|
TypeLine4x4Loop
|
||||||
|
ldy LineCharNr
|
||||||
|
|
||||||
|
lda (LineAddress4x4),y
|
||||||
|
and #$3f ;always CAPITAL letters
|
||||||
|
sta CharCode4x4
|
||||||
|
mwa LineXdraw dx
|
||||||
|
mva LineYdraw dy
|
||||||
|
mva #0 dy+1 ; dy is 2 bytes value
|
||||||
|
jsr PutChar4x4 ;type empty pixels as well!
|
||||||
|
adw LineXdraw #4
|
||||||
|
inc:lda LineCharNr
|
||||||
|
cmp fx
|
||||||
|
bne TypeLine4x4Loop
|
||||||
|
|
||||||
|
EndOfTypeLine4x4
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
|
||||||
|
|
||||||
|
;--------------------------------
|
||||||
|
.proc AreYouSure
|
||||||
|
;using 4x4 font
|
||||||
|
|
||||||
|
mva #4 ResultY ; where seppuku text starts Y-wise on the screen
|
||||||
|
|
||||||
|
;top frame
|
||||||
|
mva ResultY LineYdraw
|
||||||
|
jsr TL4x4_top
|
||||||
|
adb ResultY #4 ;next line
|
||||||
|
|
||||||
|
;sure?
|
||||||
|
mwa #areYouSureText LineAddress4x4
|
||||||
|
jsr _sep_opty
|
||||||
|
;bottom frame
|
||||||
|
mva ResultY LineYdraw
|
||||||
|
jsr TL4x4_bottom
|
||||||
|
|
||||||
|
|
||||||
|
jsr GetKey
|
||||||
|
cmp #@kbcode._Y ; $2b ; "Y"
|
||||||
|
bne @+
|
||||||
|
mva #$80 escFlag
|
||||||
|
bne skip01
|
||||||
|
@ mva #0 escFlag
|
||||||
|
skip01
|
||||||
|
jsr WaitForKeyRelease
|
||||||
|
|
||||||
|
;clean
|
||||||
|
mva #3 di
|
||||||
|
mva #4 ResultY
|
||||||
|
@
|
||||||
|
mva #$ff plot4x4color
|
||||||
|
mwa #lineClear LineAddress4x4
|
||||||
|
jsr _sep_opty
|
||||||
|
dec di
|
||||||
|
bne @-
|
||||||
|
|
||||||
|
quit_areyousure
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
|
||||||
|
.proc _sep_opty
|
||||||
|
mwa #((ScreenWidth/2)-(8*4)) LineXdraw ; centering
|
||||||
|
mva ResultY LineYdraw
|
||||||
|
jsr TypeLine4x4
|
||||||
|
adb ResultY #4 ;next line
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
|
||||||
|
;--------------------------------
|
||||||
|
.proc DisplaySeppuku
|
||||||
|
;using 4x4 font
|
||||||
|
|
||||||
|
|
||||||
|
mva #20 fs ; temp, how many times blink the billboard
|
||||||
|
seppuku_loop
|
||||||
|
lda CONSOL ; turbo mode
|
||||||
|
and #%00000001 ; START KEY
|
||||||
|
sne:mva #1 fs ; finish it
|
||||||
|
|
||||||
|
mva #4 ResultY ; where seppuku text starts Y-wise on the screen
|
||||||
|
|
||||||
|
;top frame
|
||||||
|
mva ResultY LineYdraw
|
||||||
|
jsr TL4x4_top
|
||||||
|
adb ResultY #4 ;next line
|
||||||
|
|
||||||
|
;seppuku
|
||||||
|
mwa #seppukuText LineAddress4x4
|
||||||
|
jsr _sep_opty
|
||||||
|
|
||||||
|
;bottom frame
|
||||||
|
mva ResultY LineYdraw
|
||||||
|
jsr TL4x4_bottom ; just go
|
||||||
|
|
||||||
|
;clean seppuku
|
||||||
|
|
||||||
|
mva #3 di
|
||||||
|
;mva #4 ResultY
|
||||||
|
lda #4
|
||||||
|
sta ResultY
|
||||||
|
loplop ;@
|
||||||
|
mwa #lineClear LineAddress4x4
|
||||||
|
jsr _sep_opty
|
||||||
|
|
||||||
|
dec di
|
||||||
|
bne loplop ;@-
|
||||||
|
|
||||||
|
dec fs
|
||||||
|
jne seppuku_loop
|
||||||
|
|
||||||
|
quit_seppuku
|
||||||
|
rts
|
||||||
|
|
||||||
|
.endp
|
||||||
|
|
||||||
|
;--------------------------------------------------
|
||||||
.proc SetMainScreen
|
.proc SetMainScreen
|
||||||
; mva #0 dmactls
|
; mva #0 dmactls
|
||||||
SetDLI DLIinterruptGraph ; jsr SetDLI for graphics (game) screen
|
SetDLI DLIinterruptGraph ; jsr SetDLI for graphics (game) screen
|
||||||
@@ -2190,19 +2512,20 @@ ybarrel
|
|||||||
.proc PMoutofScreen
|
.proc PMoutofScreen
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
lda #$00 ; let all P/M disappear
|
lda #$00 ; let all P/M disappear
|
||||||
:8 sta hposp0+#
|
ldy #7
|
||||||
|
@ sta hposp0,y
|
||||||
|
dey
|
||||||
|
bpl @-
|
||||||
|
;:8 sta hposp0+# ; optimized... but Y!
|
||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
.proc ColorsOfSprites
|
.proc ColorsOfSprites
|
||||||
lda TankColoursTable ; colours of sprites under tanks
|
ldy #3
|
||||||
sta PCOLR0
|
@ lda TankColoursTable,y ; colours of sprites under tanks
|
||||||
lda TankColoursTable+1
|
sta PCOLR0,y
|
||||||
sta PCOLR1
|
dey
|
||||||
lda TankColoursTable+2
|
bpl @-
|
||||||
sta PCOLR2
|
|
||||||
lda TankColoursTable+3
|
|
||||||
sta PCOLR3
|
|
||||||
LDA TankColoursTable+4
|
LDA TankColoursTable+4
|
||||||
STA COLOR3 ; joined missiles (5th tank)
|
STA COLOR3 ; joined missiles (5th tank)
|
||||||
rts
|
rts
|
||||||
|
|||||||
+267
@@ -0,0 +1,267 @@
|
|||||||
|
; @com.wudsn.ide.asm.mainsourcefile=scorch.asm
|
||||||
|
|
||||||
|
.IF *>0 ;this is a trick that prevents compiling this file alone
|
||||||
|
|
||||||
|
;--------------------------------------------------
|
||||||
|
.proc DLIinterruptGraph
|
||||||
|
pha
|
||||||
|
phy
|
||||||
|
ldy dliCounter
|
||||||
|
lda dliColorsBack,y
|
||||||
|
.IF TARGET = 800
|
||||||
|
nop ; necessary on 800 because DLIs take less time, jitter visible without it
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
.ENDIF
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
sta COLPF1
|
||||||
|
lda GradientNr
|
||||||
|
bne GoGradient
|
||||||
|
ldy #$ff ; one mauntain color
|
||||||
|
GoGradient
|
||||||
|
iny
|
||||||
|
lda (GradientColors),y ; mountains colors array
|
||||||
|
sta COLPF2
|
||||||
|
inc dliCounter
|
||||||
|
ply
|
||||||
|
pla
|
||||||
|
rti
|
||||||
|
.endp
|
||||||
|
;--------------------------------------------------
|
||||||
|
.proc DLIinterruptOptions
|
||||||
|
pha
|
||||||
|
phy
|
||||||
|
lda #0 ; background color
|
||||||
|
sta COLPF1
|
||||||
|
ldy GradientNr
|
||||||
|
beq @+
|
||||||
|
ldy #1
|
||||||
|
@ lda (GradientColors),y ; mountains colors array
|
||||||
|
sta COLPF2
|
||||||
|
ply
|
||||||
|
pla
|
||||||
|
rti
|
||||||
|
.endp
|
||||||
|
;--------------------------------------------------
|
||||||
|
.proc DLIinterruptGameOver
|
||||||
|
pha
|
||||||
|
phy
|
||||||
|
lda dliCounter
|
||||||
|
bne EndofPMG
|
||||||
|
lda #%00100001 ; playfield after P/M - prior=1
|
||||||
|
;STA WSYNC
|
||||||
|
sta PRIOR
|
||||||
|
bne EndOfDLI_GO
|
||||||
|
EndofPMG
|
||||||
|
cmp #1
|
||||||
|
bne ColoredLines
|
||||||
|
lda #%00100100 ; playfield before P/M
|
||||||
|
;STA WSYNC
|
||||||
|
sta PRIOR
|
||||||
|
bne EndOfDLI_GO
|
||||||
|
ColoredLines
|
||||||
|
cmp #9
|
||||||
|
beq CreditsScroll
|
||||||
|
tay
|
||||||
|
lda GameOverColoursTable-3,y ; -2 because this is DLI nr 2 and -1 (labels line)
|
||||||
|
ldy #$0a ; text colour (brightnes)
|
||||||
|
;STA WSYNC
|
||||||
|
sta COLPF2
|
||||||
|
sty COLPF1
|
||||||
|
bne EndOfDLI_GO
|
||||||
|
CreditsScroll
|
||||||
|
lda #$00
|
||||||
|
sta COLPF2
|
||||||
|
EndOfDLI_GO
|
||||||
|
inc dliCounter
|
||||||
|
ply
|
||||||
|
pla
|
||||||
|
rti
|
||||||
|
.endp
|
||||||
|
;--------------------------------------------------
|
||||||
|
.proc DLIinterruptText
|
||||||
|
pha
|
||||||
|
lda dliCounter
|
||||||
|
bne MoreBarsColorChange
|
||||||
|
lda #TextBackgroundColor
|
||||||
|
;sta WSYNC
|
||||||
|
sta COLPF2
|
||||||
|
mva #TextForegroundColor COLPF3
|
||||||
|
bne EndOfDLI_Text
|
||||||
|
MoreBarsColorChange
|
||||||
|
and #%00000001
|
||||||
|
rol
|
||||||
|
sta COLPF2
|
||||||
|
EndOfDLI_Text
|
||||||
|
inc dliCounter
|
||||||
|
pla
|
||||||
|
DLIinterruptNone
|
||||||
|
rti
|
||||||
|
|
||||||
|
.endp
|
||||||
|
;--------------------------------------------------
|
||||||
|
.proc VBLinterrupt
|
||||||
|
mva #0 dliCounter
|
||||||
|
mva #$02 DliColorBack
|
||||||
|
|
||||||
|
lda PAL
|
||||||
|
and #%00001110
|
||||||
|
beq itsPAL
|
||||||
|
;it is NTSC here
|
||||||
|
dec NTSCcounter
|
||||||
|
bne itsPAL
|
||||||
|
mva #6 NTSCcounter
|
||||||
|
bne SkippedIfNTSC ; skip doing VBL things each 6 frames in Amerika, Amerika
|
||||||
|
; We're all living in Amerika, Coca Cola, Wonderbra
|
||||||
|
|
||||||
|
itsPAL
|
||||||
|
; pressTimer is trigger tick counter. always 50 ticks / s
|
||||||
|
bit:smi:inc pressTimer ; timer halted if >127. max time measured 2.5 s
|
||||||
|
|
||||||
|
SkippedIfNTSC
|
||||||
|
|
||||||
|
bit RMT_blocked
|
||||||
|
bmi SkipRMTVBL
|
||||||
|
; ------- RMT -------
|
||||||
|
lda sfx_effect
|
||||||
|
bmi lab2
|
||||||
|
asl @ ; * 2
|
||||||
|
tay ;Y = 2,4,..,16 instrument number * 2 (0,2,4,..,126)
|
||||||
|
ldx #0 ;X = 0 channel (0..3 or 0..7 for stereo module)
|
||||||
|
lda #0 ;A = 0 note (0..60)
|
||||||
|
bit noSfx
|
||||||
|
smi:jsr RASTERMUSICTRACKER+15 ;RMT_SFX start tone (It works only if FEAT_SFX is enabled !!!)
|
||||||
|
|
||||||
|
lda #$ff
|
||||||
|
sta sfx_effect ;reinit value
|
||||||
|
lab2
|
||||||
|
jsr RASTERMUSICTRACKER+3 ;1 play
|
||||||
|
; ------- RMT -------
|
||||||
|
SkipRMTVBL
|
||||||
|
bit ScrollFlag
|
||||||
|
bpl EndOfCreditsVBI
|
||||||
|
CreditsVBI
|
||||||
|
inc CreditsVScrol
|
||||||
|
lda CreditsVScrol
|
||||||
|
cmp #32 ;not too fast
|
||||||
|
beq nextlinedisplay
|
||||||
|
:2 lsr ;not too fast
|
||||||
|
sta VSCROL
|
||||||
|
jmp EndOfCreditsVBI
|
||||||
|
nextlinedisplay
|
||||||
|
lda #0
|
||||||
|
sta CreditsVScrol
|
||||||
|
sta VSCROL
|
||||||
|
clc
|
||||||
|
lda DLCreditsAddr
|
||||||
|
adc #40
|
||||||
|
sta DLCreditsAddr
|
||||||
|
bcc @+
|
||||||
|
inc DLCreditsAddr+1
|
||||||
|
@
|
||||||
|
cmp #<CreditsLastLine
|
||||||
|
bne EndOfCreditsVBI
|
||||||
|
lda DLCreditsAddr+1
|
||||||
|
cmp #>CreditsLastLine
|
||||||
|
bne EndOfCreditsVBI
|
||||||
|
; adw DLCreditsAddr #40
|
||||||
|
; cpw DLCreditsAddr #CreditsLastLine
|
||||||
|
; bne EndOfCreditsVBI
|
||||||
|
mwa #Credits DLCreditsAddr
|
||||||
|
EndOfCreditsVBI
|
||||||
|
.IF TARGET = 5200
|
||||||
|
lda SkStatSimulator
|
||||||
|
bmi @+
|
||||||
|
inc SkStatSimulator
|
||||||
|
@
|
||||||
|
lda JoystickNumber ; select port
|
||||||
|
ora #%00000100 ; Speaker off, Pots enabled
|
||||||
|
sta CONSOL5200
|
||||||
|
|
||||||
|
center = 114 ;Read analog stick and make it look like a digital stick
|
||||||
|
threshold = 60
|
||||||
|
|
||||||
|
lda JoystickNumber
|
||||||
|
asl
|
||||||
|
tax
|
||||||
|
lda paddl0,x ;Read POT0 value (horizontal position)
|
||||||
|
cmp #center+threshold ;Compare with right threshold
|
||||||
|
rol stick0 ;Feed carry into digital stick value
|
||||||
|
cmp #center-threshold ;Compare with left threshold
|
||||||
|
rol stick0 ;Feed carry into digital stick value
|
||||||
|
|
||||||
|
lda paddl1,x ;Read POT1 value (vertical position)
|
||||||
|
cmp #center+threshold ;Compare with down threshold
|
||||||
|
rol stick0 ;Feed carry into digital stick value
|
||||||
|
cmp #center-threshold ;Compare with down threshold
|
||||||
|
rol stick0 ;Feed carry into digital stick value
|
||||||
|
|
||||||
|
lda stick0 ;0 indicates a press so the right/down values need to be inverted
|
||||||
|
eor #2+8
|
||||||
|
and #$0f
|
||||||
|
sta stick0
|
||||||
|
|
||||||
|
ldx JoystickNumber
|
||||||
|
; check shift key (5200 second fire button)
|
||||||
|
lda SKSTAT
|
||||||
|
:3 lsr ; third bit
|
||||||
|
and trig0,x ; and first button
|
||||||
|
;lda trig0,x
|
||||||
|
sta strig0 ;Move hardware to shadow
|
||||||
|
|
||||||
|
mva chbas chbase
|
||||||
|
|
||||||
|
lda skstat ;Reset consol key shadow is no key is pressed anymore
|
||||||
|
and #4
|
||||||
|
beq @+
|
||||||
|
mva #consol_reset consol
|
||||||
|
mva #@kbcode._none kbcode
|
||||||
|
@
|
||||||
|
|
||||||
|
pla
|
||||||
|
tay
|
||||||
|
pla
|
||||||
|
tax
|
||||||
|
pla
|
||||||
|
rti
|
||||||
|
.ELSE
|
||||||
|
; support for joysticks :)
|
||||||
|
ldx JoystickNumber
|
||||||
|
lda STICK0,x
|
||||||
|
sta STICK0
|
||||||
|
lda STRIG0,x
|
||||||
|
sta STRIG0
|
||||||
|
jmp XITVBV
|
||||||
|
.ENDIF
|
||||||
|
.endp
|
||||||
|
.IF TARGET = 5200
|
||||||
|
.proc kb_continue
|
||||||
|
sta kbcode ;Store key code in shadow.
|
||||||
|
mva #0 SkStatSimulator
|
||||||
|
exit pla
|
||||||
|
tay
|
||||||
|
pla
|
||||||
|
tax
|
||||||
|
pla
|
||||||
|
rti
|
||||||
|
.endp
|
||||||
|
.ENDIF
|
||||||
|
|
||||||
|
;--------------------------------------------------
|
||||||
|
.macro SetDLI
|
||||||
|
; SetDLI #WORD
|
||||||
|
; Initialises Display List Interrupts
|
||||||
|
LDY # <:1
|
||||||
|
LDX # >:1
|
||||||
|
jsr _SetDLIproc
|
||||||
|
.endm
|
||||||
|
.proc _SetDLIproc
|
||||||
|
LDA #$C0
|
||||||
|
STY VDSLST
|
||||||
|
STX VDSLST+1
|
||||||
|
STA NMIEN
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
|
||||||
|
.ENDIF
|
||||||
+10
-15
@@ -74,23 +74,18 @@
|
|||||||
|
|
||||||
.ENDM
|
.ENDM
|
||||||
;-------------------------------------
|
;-------------------------------------
|
||||||
.MACRO WAIT
|
.MACRO WAIT
|
||||||
; WAIT
|
; WAIT
|
||||||
; waits one frame (1/50 s(PAL) or 1/60s(NTSC))
|
; waits one frame (1/50 s(PAL) or 1/60s(NTSC))
|
||||||
?zero LDA VCOUNT
|
?ze LDA VCOUNT
|
||||||
cmp #$05
|
cmp #16 ; if line<16 then wait for line>15 (long VBI protection)
|
||||||
bcc ?zero
|
bcc ?ze
|
||||||
cmp #$70
|
sbc #10 ; last lines correction
|
||||||
bcc ?WA
|
?wa cmp VCOUNT
|
||||||
sbc #10 ; last lines correction
|
bcc ?wa
|
||||||
?WA cmp VCOUNT
|
?wf cmp VCOUNT
|
||||||
beq ?WA
|
bcs ?wf
|
||||||
bcc ?WA
|
.ENDM
|
||||||
?WFRAME cmp VCOUNT
|
|
||||||
beq ?nowait
|
|
||||||
bcs ?WFRAME
|
|
||||||
?nowait
|
|
||||||
.ENDM
|
|
||||||
;-------------------------------------
|
;-------------------------------------
|
||||||
.macro waitRTC
|
.macro waitRTC
|
||||||
lda RTCLOK+1
|
lda RTCLOK+1
|
||||||
|
|||||||
+32
-15
@@ -51,6 +51,28 @@
|
|||||||
STX $0201
|
STX $0201
|
||||||
STA NMIEN
|
STA NMIEN
|
||||||
.ENDM
|
.ENDM
|
||||||
|
;-------------------------------------
|
||||||
|
.MACRO VDL
|
||||||
|
; VDL #WORD
|
||||||
|
; Changes Display List addres
|
||||||
|
; and sets width of the screen
|
||||||
|
; vdl dl,$01 - narrow screen (32 bytes)
|
||||||
|
; vdl dl,$02 - normal screen (40 bytes)
|
||||||
|
; vdl dl,$03 - wide screen (48 bytes)
|
||||||
|
; (works only with system interrupts ON)
|
||||||
|
|
||||||
|
.if %0=2
|
||||||
|
lda dmactls
|
||||||
|
and #$fc
|
||||||
|
ora #%2
|
||||||
|
sta dmactls
|
||||||
|
.endif
|
||||||
|
|
||||||
|
LDA # <%1
|
||||||
|
STA DLPTRS
|
||||||
|
LDA # >%1
|
||||||
|
STA DLPTRS+1
|
||||||
|
.ENDM
|
||||||
;-------------------------------------
|
;-------------------------------------
|
||||||
.MACRO halt
|
.MACRO halt
|
||||||
?stop
|
?stop
|
||||||
@@ -73,23 +95,18 @@
|
|||||||
PLA
|
PLA
|
||||||
.ENDM
|
.ENDM
|
||||||
;-------------------------------------
|
;-------------------------------------
|
||||||
.MACRO WAIT
|
.MACRO WAIT
|
||||||
; WAIT
|
; WAIT
|
||||||
; waits one frame (1/50 s(PAL) or 1/60s(NTSC))
|
; waits one frame (1/50 s(PAL) or 1/60s(NTSC))
|
||||||
?zero LDA VCOUNT
|
?ze LDA VCOUNT
|
||||||
cmp #$05 ; if line<5 then wait for line>4
|
cmp #16 ; if line<16 then wait for line>15 (long VBI protection)
|
||||||
bcc ?zero
|
bcc ?ze
|
||||||
cmp #$70
|
sbc #10 ; last lines correction
|
||||||
bcc ?WA ; if line>=112 then
|
?wa cmp VCOUNT
|
||||||
sbc #10 ; last lines correction
|
bcc ?wa
|
||||||
?WA cmp VCOUNT
|
?wf cmp VCOUNT
|
||||||
beq ?WA
|
bcs ?wf
|
||||||
bcc ?WA
|
.ENDM
|
||||||
?WFRAME cmp VCOUNT
|
|
||||||
beq ?nowait
|
|
||||||
bcs ?WFRAME
|
|
||||||
?nowait
|
|
||||||
.ENDM
|
|
||||||
;-------------------------------------
|
;-------------------------------------
|
||||||
.macro waitRTC
|
.macro waitRTC
|
||||||
lda RTCLOK+2
|
lda RTCLOK+2
|
||||||
|
|||||||
+42
-325
@@ -3,19 +3,22 @@
|
|||||||
;---------------------------------------------------
|
;---------------------------------------------------
|
||||||
;by Tomasz 'pecus' Pecko and Pawel 'pirx' Kalinowski
|
;by Tomasz 'pecus' Pecko and Pawel 'pirx' Kalinowski
|
||||||
;Warsaw 2000, 2001, 2002, 2003, 2009, 2012, 2013
|
;Warsaw 2000, 2001, 2002, 2003, 2009, 2012, 2013
|
||||||
;Miami & Warsaw 2022
|
;Miami & Warsaw 2022, 2023
|
||||||
|
|
||||||
;---------------------------------------------------
|
;---------------------------------------------------
|
||||||
.def TARGET = 800 ;5200 ; or 800
|
.def TARGET = 800 ;5200 ; or 800
|
||||||
;atari800 -5200 -cart ${outputFilePath} -cart-type 4
|
;atari800 -5200 -cart ${outputFilePath} -cart-type 4
|
||||||
;atari800 -run ${outputFilePath}
|
;atari800 -run ${outputFilePath}
|
||||||
|
;---------------------------------------------------
|
||||||
|
.def XCORRECTION_FOR_PM = 0
|
||||||
|
; if 1 - active x position of tanks correction fo PMG
|
||||||
;---------------------------------------------------
|
;---------------------------------------------------
|
||||||
|
|
||||||
;OPT r+ ; saves 12 bytes :O
|
;OPT r+ ; saves 12 bytes :O
|
||||||
|
|
||||||
;---------------------------------------------------
|
;---------------------------------------------------
|
||||||
.macro build
|
.macro build
|
||||||
dta d"1.25" ; number of this build (4 bytes)
|
dta d"1.27" ; number of this build (4 bytes)
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro RMTSong
|
.macro RMTSong
|
||||||
@@ -27,12 +30,15 @@
|
|||||||
icl 'definitions.asm'
|
icl 'definitions.asm'
|
||||||
;---------------------------------------------------
|
;---------------------------------------------------
|
||||||
|
|
||||||
FirstZpageVariable = $5A
|
FirstZpageVariable = $57
|
||||||
.zpvar DliColorBack .byte = FirstZpageVariable
|
.zpvar DliColorBack .byte = FirstZpageVariable
|
||||||
.zpvar GradientNr .byte
|
.zpvar GradientNr .byte
|
||||||
.zpvar GradientColors .word
|
.zpvar GradientColors .word
|
||||||
.zpvar WindChangeInRound .byte ; wind change after each turn (not round only) flag - (0 - round only, >0 - each turn)
|
.zpvar WindChangeInRound .byte ; wind change after each turn (not round only) flag - (0 - round only, >0 - each turn)
|
||||||
.zpvar JoystickNumber .byte
|
.zpvar JoystickNumber .byte
|
||||||
|
.zpvar LazyFlag .byte ; 7 bit - run Lazy Darwin, 6 bit - run Lazy Boy or Darwin (!) after inventory, 0 - nothing
|
||||||
|
.zpvar SpyHardFlag .byte ; >$7f - run SpyHard after inventory
|
||||||
|
.zpvar Vdebug .byte ; "visual debug" flag ($00 - off, $ff - on)
|
||||||
.zpvar xdraw .word ;= $64 ;variable X for plot
|
.zpvar xdraw .word ;= $64 ;variable X for plot
|
||||||
.zpvar ydraw .word ;variable Y for plot (like in Atari Basic - Y=0 in upper right corner of the screen)
|
.zpvar ydraw .word ;variable Y for plot (like in Atari Basic - Y=0 in upper right corner of the screen)
|
||||||
.zpvar xbyte .word
|
.zpvar xbyte .word
|
||||||
@@ -181,7 +187,7 @@ FirstZpageVariable = $5A
|
|||||||
_atari = $fd ; not used in 5200
|
_atari = $fd ; not used in 5200
|
||||||
_none = $0f
|
_none = $0f
|
||||||
|
|
||||||
.ende */
|
.ende
|
||||||
.ELSE
|
.ELSE
|
||||||
icl 'lib/ATARISYS.ASM'
|
icl 'lib/ATARISYS.ASM'
|
||||||
icl 'lib/MACRO.ASM'
|
icl 'lib/MACRO.ASM'
|
||||||
@@ -274,14 +280,12 @@ rom2joy
|
|||||||
; modify the text
|
; modify the text
|
||||||
splash_text = $3c80 ; '.scorch.supersystem.copyright.19xx.atari'
|
splash_text = $3c80 ; '.scorch.supersystem.copyright.19xx.atari'
|
||||||
splash_year = splash_text + $1e
|
splash_year = splash_text + $1e
|
||||||
lda #"2"
|
splash_copyright = splash_text + $14
|
||||||
sta splash_year
|
ldy #19 ; 20 characters
|
||||||
sta splash_year+2
|
@ lda NewSplashText,y
|
||||||
lda #"0"
|
sta splash_copyright,y
|
||||||
sta splash_year+1
|
dey
|
||||||
lda #"3"
|
bpl @-
|
||||||
sta splash_year+3
|
|
||||||
|
|
||||||
|
|
||||||
; splash screen delay. maybe add fire to speed up?
|
; splash screen delay. maybe add fire to speed up?
|
||||||
@ cpx RTCLOK+1
|
@ cpx RTCLOK+1
|
||||||
@@ -311,10 +315,13 @@ no5200splash
|
|||||||
bpl @-
|
bpl @-
|
||||||
|
|
||||||
; initialize one Variable in zero page :)
|
; initialize one Variable in zero page :)
|
||||||
lda #<dliColorsFore
|
;lda #<dliColorsFore
|
||||||
sta GradientColors
|
;sta GradientColors
|
||||||
lda #>dliColorsFore
|
;lda #>dliColorsFore
|
||||||
sta GradientColors+1
|
;sta GradientColors+1
|
||||||
|
; set gradient to the full LGBTIQQAAPP+ flag on start
|
||||||
|
mva #1 GradientNr
|
||||||
|
jsr SelectNextGradient
|
||||||
|
|
||||||
; generate linetables
|
; generate linetables
|
||||||
mwa #display temp
|
mwa #display temp
|
||||||
@@ -348,12 +355,15 @@ no5200splash
|
|||||||
mva #$10 MODUL-6+$a69 ; $12 > $10
|
mva #$10 MODUL-6+$a69 ; $12 > $10
|
||||||
mva #$04 MODUL-6+$bf8 ; $05 > $04
|
mva #$04 MODUL-6+$bf8 ; $05 > $04
|
||||||
mva #$08 MODUL-6+$e3d ; $0a > $08
|
mva #$08 MODUL-6+$e3d ; $0a > $08
|
||||||
; and mountains colors
|
|
||||||
mva #$c4 dliColorsFore2+16
|
; and mountains colors table address
|
||||||
mva #$c6 dliColorsFore2+17
|
mva #<dliColorsFore2PAL GradientAddrL+2
|
||||||
mva #$a4 dliColorsFore2+18
|
mva #>dliColorsFore2PAL GradientAddrH+2
|
||||||
mva #$a6 dliColorsFore2+19
|
; mva #$c4 dliColorsFore2+16
|
||||||
sta dliColorsFore2+20
|
; mva #$c6 dliColorsFore2+17
|
||||||
|
; mva #$a4 dliColorsFore2+18
|
||||||
|
; mva #$a6 dliColorsFore2+19
|
||||||
|
; sta dliColorsFore2+20
|
||||||
NoRMT_PALchange
|
NoRMT_PALchange
|
||||||
.ELSE
|
.ELSE
|
||||||
mva #$7f SkStatSimulator
|
mva #$7f SkStatSimulator
|
||||||
@@ -409,7 +419,6 @@ MainGameLoop
|
|||||||
jsr SetStandardBarrels
|
jsr SetStandardBarrels
|
||||||
|
|
||||||
jsr CallPurchaseForEveryTank
|
jsr CallPurchaseForEveryTank
|
||||||
mva #0 SpyHardFlag
|
|
||||||
jsr MakeDarkScreen
|
jsr MakeDarkScreen
|
||||||
bit escFlag
|
bit escFlag
|
||||||
bmi START
|
bmi START
|
||||||
@@ -1256,247 +1265,6 @@ MakeTanksVisible
|
|||||||
bpl @-
|
bpl @-
|
||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
;--------------------------------------------------
|
|
||||||
.proc DLIinterruptGraph
|
|
||||||
pha
|
|
||||||
phy
|
|
||||||
ldy dliCounter
|
|
||||||
lda dliColorsBack,y
|
|
||||||
.IF TARGET = 800
|
|
||||||
nop ; necessary on 800 because DLIs take less time, jitter visible without it
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
.ENDIF
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
sta COLPF1
|
|
||||||
lda GradientNr
|
|
||||||
bne GoGradient
|
|
||||||
ldy #$ff ; one mauntain color
|
|
||||||
GoGradient
|
|
||||||
iny
|
|
||||||
lda (GradientColors),y ; mountains colors array
|
|
||||||
sta COLPF2
|
|
||||||
inc dliCounter
|
|
||||||
ply
|
|
||||||
pla
|
|
||||||
rti
|
|
||||||
.endp
|
|
||||||
;--------------------------------------------------
|
|
||||||
.proc DLIinterruptOptions
|
|
||||||
pha
|
|
||||||
phy
|
|
||||||
lda #0 ; background color
|
|
||||||
sta COLPF1
|
|
||||||
ldy GradientNr
|
|
||||||
beq @+
|
|
||||||
ldy #1
|
|
||||||
@ lda (GradientColors),y ; mountains colors array
|
|
||||||
sta COLPF2
|
|
||||||
ply
|
|
||||||
pla
|
|
||||||
rti
|
|
||||||
.endp
|
|
||||||
;--------------------------------------------------
|
|
||||||
.proc DLIinterruptGameOver
|
|
||||||
pha
|
|
||||||
phy
|
|
||||||
lda dliCounter
|
|
||||||
bne EndofPMG
|
|
||||||
lda #%00100001 ; playfield after P/M - prior=1
|
|
||||||
;STA WSYNC
|
|
||||||
sta PRIOR
|
|
||||||
bne EndOfDLI_GO
|
|
||||||
EndofPMG
|
|
||||||
cmp #1
|
|
||||||
bne ColoredLines
|
|
||||||
lda #%00100100 ; playfield before P/M
|
|
||||||
;STA WSYNC
|
|
||||||
sta PRIOR
|
|
||||||
bne EndOfDLI_GO
|
|
||||||
ColoredLines
|
|
||||||
cmp #9
|
|
||||||
beq CreditsScroll
|
|
||||||
tay
|
|
||||||
lda GameOverColoursTable-3,y ; -2 because this is DLI nr 2 and -1 (labels line)
|
|
||||||
ldy #$0a ; text colour (brightnes)
|
|
||||||
;STA WSYNC
|
|
||||||
sta COLPF2
|
|
||||||
sty COLPF1
|
|
||||||
bne EndOfDLI_GO
|
|
||||||
CreditsScroll
|
|
||||||
lda #$00
|
|
||||||
sta COLPF2
|
|
||||||
EndOfDLI_GO
|
|
||||||
inc dliCounter
|
|
||||||
ply
|
|
||||||
pla
|
|
||||||
rti
|
|
||||||
.endp
|
|
||||||
;--------------------------------------------------
|
|
||||||
.proc DLIinterruptText
|
|
||||||
pha
|
|
||||||
lda dliCounter
|
|
||||||
bne MoreBarsColorChange
|
|
||||||
lda #TextBackgroundColor
|
|
||||||
;sta WSYNC
|
|
||||||
sta COLPF2
|
|
||||||
mva #TextForegroundColor COLPF3
|
|
||||||
bne EndOfDLI_Text
|
|
||||||
MoreBarsColorChange
|
|
||||||
and #%00000001
|
|
||||||
rol
|
|
||||||
sta COLPF2
|
|
||||||
EndOfDLI_Text
|
|
||||||
inc dliCounter
|
|
||||||
pla
|
|
||||||
DLIinterruptNone
|
|
||||||
rti
|
|
||||||
|
|
||||||
.endp
|
|
||||||
;--------------------------------------------------
|
|
||||||
.proc VBLinterrupt
|
|
||||||
mva #0 dliCounter
|
|
||||||
mva #$02 DliColorBack
|
|
||||||
|
|
||||||
lda PAL
|
|
||||||
and #%00001110
|
|
||||||
beq itsPAL
|
|
||||||
;it is NTSC here
|
|
||||||
dec NTSCcounter
|
|
||||||
bne itsPAL
|
|
||||||
mva #6 NTSCcounter
|
|
||||||
bne SkippedIfNTSC ; skip doing VBL things each 6 frames in Amerika, Amerika
|
|
||||||
; We're all living in Amerika, Coca Cola, Wonderbra
|
|
||||||
|
|
||||||
itsPAL
|
|
||||||
; pressTimer is trigger tick counter. always 50 ticks / s
|
|
||||||
bit:smi:inc pressTimer ; timer halted if >127. max time measured 2.5 s
|
|
||||||
|
|
||||||
SkippedIfNTSC
|
|
||||||
|
|
||||||
bit RMT_blocked
|
|
||||||
bmi SkipRMTVBL
|
|
||||||
; ------- RMT -------
|
|
||||||
lda sfx_effect
|
|
||||||
bmi lab2
|
|
||||||
asl @ ; * 2
|
|
||||||
tay ;Y = 2,4,..,16 instrument number * 2 (0,2,4,..,126)
|
|
||||||
ldx #0 ;X = 0 channel (0..3 or 0..7 for stereo module)
|
|
||||||
lda #0 ;A = 0 note (0..60)
|
|
||||||
bit noSfx
|
|
||||||
smi:jsr RASTERMUSICTRACKER+15 ;RMT_SFX start tone (It works only if FEAT_SFX is enabled !!!)
|
|
||||||
|
|
||||||
lda #$ff
|
|
||||||
sta sfx_effect ;reinit value
|
|
||||||
lab2
|
|
||||||
jsr RASTERMUSICTRACKER+3 ;1 play
|
|
||||||
; ------- RMT -------
|
|
||||||
SkipRMTVBL
|
|
||||||
bit ScrollFlag
|
|
||||||
bpl EndOfCreditsVBI
|
|
||||||
CreditsVBI
|
|
||||||
inc CreditsVScrol
|
|
||||||
lda CreditsVScrol
|
|
||||||
cmp #32 ;not too fast
|
|
||||||
beq nextlinedisplay
|
|
||||||
:2 lsr ;not too fast
|
|
||||||
sta VSCROL
|
|
||||||
jmp EndOfCreditsVBI
|
|
||||||
nextlinedisplay
|
|
||||||
lda #0
|
|
||||||
sta CreditsVScrol
|
|
||||||
sta VSCROL
|
|
||||||
clc
|
|
||||||
lda DLCreditsAddr
|
|
||||||
adc #40
|
|
||||||
sta DLCreditsAddr
|
|
||||||
bcc @+
|
|
||||||
inc DLCreditsAddr+1
|
|
||||||
@
|
|
||||||
cmp #<CreditsLastLine
|
|
||||||
bne EndOfCreditsVBI
|
|
||||||
lda DLCreditsAddr+1
|
|
||||||
cmp #>CreditsLastLine
|
|
||||||
bne EndOfCreditsVBI
|
|
||||||
; adw DLCreditsAddr #40
|
|
||||||
; cpw DLCreditsAddr #CreditsLastLine
|
|
||||||
; bne EndOfCreditsVBI
|
|
||||||
mwa #Credits DLCreditsAddr
|
|
||||||
EndOfCreditsVBI
|
|
||||||
.IF TARGET = 5200
|
|
||||||
lda SkStatSimulator
|
|
||||||
bmi @+
|
|
||||||
inc SkStatSimulator
|
|
||||||
@
|
|
||||||
lda JoystickNumber ; select port
|
|
||||||
ora #%00000100 ; Speaker off, Pots enabled
|
|
||||||
sta CONSOL5200
|
|
||||||
|
|
||||||
center = 114 ;Read analog stick and make it look like a digital stick
|
|
||||||
threshold = 60
|
|
||||||
|
|
||||||
lda JoystickNumber
|
|
||||||
asl
|
|
||||||
tax
|
|
||||||
lda paddl0,x ;Read POT0 value (horizontal position)
|
|
||||||
cmp #center+threshold ;Compare with right threshold
|
|
||||||
rol stick0 ;Feed carry into digital stick value
|
|
||||||
cmp #center-threshold ;Compare with left threshold
|
|
||||||
rol stick0 ;Feed carry into digital stick value
|
|
||||||
|
|
||||||
lda paddl1,x ;Read POT1 value (vertical position)
|
|
||||||
cmp #center+threshold ;Compare with down threshold
|
|
||||||
rol stick0 ;Feed carry into digital stick value
|
|
||||||
cmp #center-threshold ;Compare with down threshold
|
|
||||||
rol stick0 ;Feed carry into digital stick value
|
|
||||||
|
|
||||||
lda stick0 ;0 indicates a press so the right/down values need to be inverted
|
|
||||||
eor #2+8
|
|
||||||
and #$0f
|
|
||||||
sta stick0
|
|
||||||
|
|
||||||
ldx JoystickNumber
|
|
||||||
lda trig0,x
|
|
||||||
sta strig0 ;Move hardware to shadow
|
|
||||||
|
|
||||||
mva chbas chbase
|
|
||||||
|
|
||||||
lda skstat ;Reset consol key shadow is no key is pressed anymore
|
|
||||||
and #4
|
|
||||||
beq @+
|
|
||||||
mva #consol_reset consol
|
|
||||||
mva #@kbcode._none kbcode
|
|
||||||
@
|
|
||||||
|
|
||||||
pla
|
|
||||||
tay
|
|
||||||
pla
|
|
||||||
tax
|
|
||||||
pla
|
|
||||||
rti
|
|
||||||
.ELSE
|
|
||||||
; support for joysticks :)
|
|
||||||
ldx JoystickNumber
|
|
||||||
lda STICK0,x
|
|
||||||
sta STICK0
|
|
||||||
lda STRIG0,x
|
|
||||||
sta STRIG0
|
|
||||||
jmp XITVBV
|
|
||||||
.ENDIF
|
|
||||||
.endp
|
|
||||||
.IF TARGET = 5200
|
|
||||||
.proc kb_continue
|
|
||||||
sta kbcode ;Store key code in shadow.
|
|
||||||
mva #0 SkStatSimulator
|
|
||||||
exit pla
|
|
||||||
tay
|
|
||||||
pla
|
|
||||||
tax
|
|
||||||
pla
|
|
||||||
rti
|
|
||||||
.endp
|
|
||||||
.ENDIF
|
|
||||||
;----------------------------------------------
|
;----------------------------------------------
|
||||||
.proc RandomizeSequence0
|
.proc RandomizeSequence0
|
||||||
ldx #0
|
ldx #0
|
||||||
@@ -1626,6 +1394,14 @@ LimitForce
|
|||||||
|
|
||||||
.endp
|
.endp
|
||||||
;----------------------------------------------
|
;----------------------------------------------
|
||||||
|
.proc Table2Force
|
||||||
|
lda ForceTableL,x
|
||||||
|
sta Force
|
||||||
|
lda ForceTableH,x
|
||||||
|
sta Force+1
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
;----------------------------------------------
|
||||||
.proc MoveBarrelToNewPosition
|
.proc MoveBarrelToNewPosition
|
||||||
mva #1 Erase
|
mva #1 Erase
|
||||||
jsr DrawTankNr.BarrelChange
|
jsr DrawTankNr.BarrelChange
|
||||||
@@ -1899,7 +1675,7 @@ peopleAreHere
|
|||||||
MakeDarkScreen
|
MakeDarkScreen
|
||||||
jsr PMoutofScreen
|
jsr PMoutofScreen
|
||||||
mva #0 dmactls ; dark screen
|
mva #0 dmactls ; dark screen
|
||||||
sta dmactl
|
; sta dmactl ; probably not necessary (3 bytes!!! :) )
|
||||||
; and wait one frame :)
|
; and wait one frame :)
|
||||||
.proc WaitOneFrame
|
.proc WaitOneFrame
|
||||||
lda CONSOL
|
lda CONSOL
|
||||||
@@ -1960,66 +1736,7 @@ noingame
|
|||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
.macro SetDLI
|
icl 'interrupts.asm'
|
||||||
; SetDLI #WORD
|
|
||||||
; Initialises Display List Interrupts
|
|
||||||
LDY # <:1
|
|
||||||
LDX # >:1
|
|
||||||
jsr _SetDLIproc
|
|
||||||
.endm
|
|
||||||
.proc _SetDLIproc
|
|
||||||
LDA #$C0
|
|
||||||
STY VDSLST
|
|
||||||
STX VDSLST+1
|
|
||||||
STA NMIEN
|
|
||||||
rts
|
|
||||||
.endp
|
|
||||||
;--------------------------------------------------
|
|
||||||
/* ;--------------------------------------------------
|
|
||||||
.macro randomize floor ceiling
|
|
||||||
;--------------------------------------------------
|
|
||||||
;usage: randomize floor ceiling
|
|
||||||
;returns (in A) a random .byte between "floor" and "ceiling"
|
|
||||||
jsr _randomizator
|
|
||||||
.byte :floor
|
|
||||||
.byte :ceiling
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.proc _randomizator
|
|
||||||
; private function that accompanies `randomize` macro
|
|
||||||
; trashes: magic, temp, Y
|
|
||||||
pla
|
|
||||||
sta magic
|
|
||||||
pla
|
|
||||||
sta magic+1
|
|
||||||
ldy #1 ; add 1 to the value got from the stack to point to the input parameters
|
|
||||||
lda (magic),y
|
|
||||||
sta temp
|
|
||||||
iny
|
|
||||||
lda (magic),y
|
|
||||||
sta temp+1
|
|
||||||
|
|
||||||
?rand
|
|
||||||
lda random
|
|
||||||
cmp temp ;floor
|
|
||||||
bcc ?rand
|
|
||||||
cmp temp+1 ;ceiling
|
|
||||||
bcs ?rand
|
|
||||||
tay ; save the result
|
|
||||||
|
|
||||||
; point the PC to a byte after the parameters
|
|
||||||
clc
|
|
||||||
lda magic
|
|
||||||
adc #2 ; length of the parameters in bytes
|
|
||||||
sta magic
|
|
||||||
lda magic+1
|
|
||||||
adc #0
|
|
||||||
pha
|
|
||||||
lda magic
|
|
||||||
pha
|
|
||||||
tya ; retrieve the result
|
|
||||||
rts
|
|
||||||
.endp */
|
|
||||||
;----------------------------------------------
|
;----------------------------------------------
|
||||||
icl 'constants.asm'
|
icl 'constants.asm'
|
||||||
;----------------------------------------------
|
;----------------------------------------------
|
||||||
|
|||||||
BIN
Binary file not shown.
BIN
Binary file not shown.
+8
-336
@@ -908,27 +908,13 @@ NoAutoDefense
|
|||||||
cmp #ind_Lazy_Boy_______
|
cmp #ind_Lazy_Boy_______
|
||||||
bne NoLazyBoy
|
bne NoLazyBoy
|
||||||
; Lazy Boy - do it like battery
|
; Lazy Boy - do it like battery
|
||||||
mva #sfx_lazy_boys sfx_effect
|
mva #%01000000 LazyFlag
|
||||||
phy
|
|
||||||
jsr PrepareAIShoot
|
|
||||||
jsr FindBestTarget2 ; find nearest tank neighbour
|
|
||||||
jsr LazyAim
|
|
||||||
ply
|
|
||||||
lda #%00000000
|
|
||||||
sta TestFlightFlag ; set "visual aiming" off
|
|
||||||
jmp DecreaseDefensive ; bypass activation
|
jmp DecreaseDefensive ; bypass activation
|
||||||
NoLazyBoy
|
NoLazyBoy
|
||||||
cmp #ind_Lazy_Darwin____
|
cmp #ind_Lazy_Darwin____
|
||||||
bne NoLazyDarwin
|
bne NoLazyDarwin
|
||||||
; Lazy Darwin - do it like battery
|
; Lazy Darwin - do it like battery
|
||||||
mva #sfx_lazy_boys sfx_effect
|
mva #%11000000 LazyFlag
|
||||||
phy
|
|
||||||
jsr PrepareAIShoot
|
|
||||||
jsr FindBestTarget3 ; find target with lowest energy
|
|
||||||
jsr LazyAim
|
|
||||||
ply
|
|
||||||
lda #%10000000
|
|
||||||
sta TestFlightFlag ; set "visual aiming" on
|
|
||||||
jmp DecreaseDefensive ; bypass activation
|
jmp DecreaseDefensive ; bypass activation
|
||||||
NoLazyDarwin
|
NoLazyDarwin
|
||||||
cmp #ind_Spy_Hard_______
|
cmp #ind_Spy_Hard_______
|
||||||
@@ -974,22 +960,6 @@ DefActivationEnd
|
|||||||
jmp WaitForKeyRelease ; rts
|
jmp WaitForKeyRelease ; rts
|
||||||
|
|
||||||
.endp
|
.endp
|
||||||
.proc LazyAim
|
|
||||||
; aiming proc for Lazy ... weapons
|
|
||||||
; as proc for memory optimisation
|
|
||||||
; Y - target tan nr
|
|
||||||
; A - target direction
|
|
||||||
sty TargetTankNr
|
|
||||||
; aiming
|
|
||||||
jsr TakeAim ; direction still in A (0 - left, >0 - right)
|
|
||||||
lda Force
|
|
||||||
sta ForceTableL,x
|
|
||||||
lda Force+1
|
|
||||||
sta ForceTableH,x
|
|
||||||
lda NewAngle
|
|
||||||
sta AngleTable,x
|
|
||||||
rts
|
|
||||||
.endp
|
|
||||||
; -----------------------------------------------------
|
; -----------------------------------------------------
|
||||||
.proc calcPosDefensive
|
.proc calcPosDefensive
|
||||||
; calculate positionOnTheList from the activeWeapon (defensives)
|
; calculate positionOnTheList from the activeWeapon (defensives)
|
||||||
@@ -1633,309 +1603,6 @@ displayloop1
|
|||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
|
|
||||||
;--------------------------------------------------------
|
|
||||||
.proc Display4x4AboveTank ;
|
|
||||||
; Displays texts using PutChar4x4 above tank and mountains.
|
|
||||||
; Pretty cool, eh!
|
|
||||||
;parameters are:
|
|
||||||
;Y - number of tank above which text is displayed
|
|
||||||
;fx - length of text
|
|
||||||
;LineAddress4x4 - address of the text
|
|
||||||
|
|
||||||
;lets calculate position of the text first!
|
|
||||||
;that's easy because we have number of tank
|
|
||||||
;and xtankstableL and H keep X position of a given tank
|
|
||||||
|
|
||||||
lda xtankstableL,y
|
|
||||||
sta temp
|
|
||||||
lda xtankstableH,y
|
|
||||||
sta temp+1
|
|
||||||
;now we should substract length of the text-1
|
|
||||||
;temp2 = (fx-1)*2
|
|
||||||
ldy fx
|
|
||||||
dey
|
|
||||||
tya
|
|
||||||
asl
|
|
||||||
sta temp2
|
|
||||||
mva #0 temp2+1
|
|
||||||
;now we have HALF length in pixels
|
|
||||||
;stored in temp2
|
|
||||||
|
|
||||||
;here we assume max length of text
|
|
||||||
;to display is 127 chars, but later it turns out it must be max 63!
|
|
||||||
|
|
||||||
sbw temp temp2 ; here begin of the text is in TEMP !!!!
|
|
||||||
;now we should check overflows
|
|
||||||
;lda temp+1 ; opty
|
|
||||||
bpl DOTNnotLessThanZero
|
|
||||||
;less than zero, so should be zero
|
|
||||||
mwa #0 temp
|
|
||||||
beq DOTNnoOverflow
|
|
||||||
|
|
||||||
DOTNnotLessThanZero
|
|
||||||
;so check if end larger than screenwidth
|
|
||||||
|
|
||||||
|
|
||||||
lda fx
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
;length in pixels -
|
|
||||||
;text length max 63 chars !!!!!!!!
|
|
||||||
|
|
||||||
|
|
||||||
clc
|
|
||||||
adc temp
|
|
||||||
sta temp2
|
|
||||||
lda #0
|
|
||||||
adc temp+1
|
|
||||||
sta temp2+1
|
|
||||||
;now in temp2 is end of the text in pixels
|
|
||||||
;so check if not greater than screenwitdth
|
|
||||||
cpw temp2 #screenwidth
|
|
||||||
bcc DOTNnoOverflow
|
|
||||||
|
|
||||||
;if end is greater than screenwidth
|
|
||||||
;then screenwidth - length is fine
|
|
||||||
lda fx
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
sta temp
|
|
||||||
mva #0 temp+1
|
|
||||||
|
|
||||||
sec
|
|
||||||
lda #<(screenwidth-1)
|
|
||||||
sbc temp
|
|
||||||
sta temp
|
|
||||||
lda #>(screenwidth-1)
|
|
||||||
sbc temp+1
|
|
||||||
sta temp+1
|
|
||||||
DOTNnoOverflow
|
|
||||||
;here in temp we have really good x position of text
|
|
||||||
|
|
||||||
mwa temp LineXdraw
|
|
||||||
|
|
||||||
;now let's get y position
|
|
||||||
;we will try to put text as low as possible
|
|
||||||
;just above mountains (so mountaintable will be checked)
|
|
||||||
lda fx
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
tay
|
|
||||||
;in temp there still is X position of text
|
|
||||||
;if we add temp and Y we will get end of the text
|
|
||||||
;so, lets go through mountaintable and look for
|
|
||||||
;the lowest value within
|
|
||||||
;Mountaitable+temp and Mountaitable+temp+Y
|
|
||||||
|
|
||||||
adw temp #MountainTable
|
|
||||||
|
|
||||||
mva #screenheight temp2 ;initialisation of the lowest value
|
|
||||||
|
|
||||||
DOTLowestMountainValueLoop
|
|
||||||
lda (temp),y
|
|
||||||
cmp temp2
|
|
||||||
bcs DOTOldLowestValue ;old lowest value
|
|
||||||
;new lowest value
|
|
||||||
sta temp2
|
|
||||||
DOTOldLowestValue
|
|
||||||
dey
|
|
||||||
cpy #$ff
|
|
||||||
bne DOTLowestMountainValueLoop
|
|
||||||
|
|
||||||
sec
|
|
||||||
lda temp2
|
|
||||||
sbc #(4+9) ;9 pixels above ground (and tanks...)
|
|
||||||
sta LineYdraw
|
|
||||||
|
|
||||||
jmp TypeLine4x4.noLengthNoColor ; rts
|
|
||||||
|
|
||||||
.endp
|
|
||||||
|
|
||||||
;--------------------------------------------------------
|
|
||||||
.proc DisplayOffensiveTextNr ;
|
|
||||||
ldx TextNumberOff
|
|
||||||
lda talk.OffensiveTextTableL,x
|
|
||||||
sta LineAddress4x4
|
|
||||||
lda talk.OffensiveTextTableH,x
|
|
||||||
sta LineAddress4x4+1
|
|
||||||
inx ; the next text
|
|
||||||
lda talk.OffensiveTextTableH,x
|
|
||||||
sta temp+1
|
|
||||||
lda talk.OffensiveTextTableL,x
|
|
||||||
sta temp ; opty possible
|
|
||||||
; substract address of the next text from previous to get text length
|
|
||||||
sbw temp LineAddress4x4 temp2
|
|
||||||
mva temp2 fx
|
|
||||||
|
|
||||||
;jsr Display4x4AboveTank
|
|
||||||
;rts
|
|
||||||
; POZOR !!!
|
|
||||||
.endp
|
|
||||||
|
|
||||||
;--------------------------------------------------------
|
|
||||||
.proc DisplayTankNameAbove ;
|
|
||||||
lda tankNr
|
|
||||||
:3 asl ; *8
|
|
||||||
clc
|
|
||||||
adc #<TanksNames
|
|
||||||
sta temp ; TextAddress
|
|
||||||
lda #0
|
|
||||||
adc #>Tanksnames
|
|
||||||
sta temp+1 ; TextAddress+1
|
|
||||||
mwa temp LineAddress4x4
|
|
||||||
|
|
||||||
;find length of the tank's name
|
|
||||||
ldy #7
|
|
||||||
@
|
|
||||||
lda (temp),y
|
|
||||||
bne end_found
|
|
||||||
dey
|
|
||||||
bne @-
|
|
||||||
|
|
||||||
end_found
|
|
||||||
iny
|
|
||||||
sty fx
|
|
||||||
ldy tankNr
|
|
||||||
jsr Display4x4AboveTank
|
|
||||||
rts
|
|
||||||
.endp
|
|
||||||
|
|
||||||
;-------------------------------
|
|
||||||
.proc TypeLine4x4 ;
|
|
||||||
;-------------------------------
|
|
||||||
;this routine prints line of length `fx`
|
|
||||||
;address in LineAddress4x4
|
|
||||||
;starting from LineXdraw, LineYdraw
|
|
||||||
|
|
||||||
lda #14 ; default length of 4x4 texts
|
|
||||||
sta fx
|
|
||||||
|
|
||||||
variableLength
|
|
||||||
lda #$ff ; $ff - visible characters, $00 - clearing
|
|
||||||
|
|
||||||
staplot4x4color
|
|
||||||
sta plot4x4color
|
|
||||||
noLengthNoColor
|
|
||||||
|
|
||||||
ldy #0
|
|
||||||
sty LineCharNr
|
|
||||||
|
|
||||||
TypeLine4x4Loop
|
|
||||||
ldy LineCharNr
|
|
||||||
|
|
||||||
lda (LineAddress4x4),y
|
|
||||||
and #$3f ;always CAPITAL letters
|
|
||||||
sta CharCode4x4
|
|
||||||
mwa LineXdraw dx
|
|
||||||
mva LineYdraw dy
|
|
||||||
mva #0 dy+1 ; dy is 2 bytes value
|
|
||||||
jsr PutChar4x4 ;type empty pixels as well!
|
|
||||||
adw LineXdraw #4
|
|
||||||
inc:lda LineCharNr
|
|
||||||
cmp fx
|
|
||||||
bne TypeLine4x4Loop
|
|
||||||
|
|
||||||
EndOfTypeLine4x4
|
|
||||||
rts
|
|
||||||
.endp
|
|
||||||
|
|
||||||
|
|
||||||
;--------------------------------
|
|
||||||
.proc AreYouSure
|
|
||||||
;using 4x4 font
|
|
||||||
|
|
||||||
mva #4 ResultY ; where seppuku text starts Y-wise on the screen
|
|
||||||
|
|
||||||
;top frame
|
|
||||||
mva ResultY LineYdraw
|
|
||||||
jsr TL4x4_top
|
|
||||||
adb ResultY #4 ;next line
|
|
||||||
|
|
||||||
;sure?
|
|
||||||
mwa #areYouSureText LineAddress4x4
|
|
||||||
jsr _sep_opty
|
|
||||||
;bottom frame
|
|
||||||
mva ResultY LineYdraw
|
|
||||||
jsr TL4x4_bottom
|
|
||||||
|
|
||||||
|
|
||||||
jsr GetKey
|
|
||||||
cmp #@kbcode._Y ; $2b ; "Y"
|
|
||||||
bne @+
|
|
||||||
mva #$80 escFlag
|
|
||||||
bne skip01
|
|
||||||
@ mva #0 escFlag
|
|
||||||
skip01
|
|
||||||
jsr WaitForKeyRelease
|
|
||||||
|
|
||||||
;clean
|
|
||||||
mva #3 di
|
|
||||||
mva #4 ResultY
|
|
||||||
@
|
|
||||||
mva #$ff plot4x4color
|
|
||||||
mwa #lineClear LineAddress4x4
|
|
||||||
jsr _sep_opty
|
|
||||||
dec di
|
|
||||||
bne @-
|
|
||||||
|
|
||||||
quit_areyousure
|
|
||||||
rts
|
|
||||||
.endp
|
|
||||||
|
|
||||||
.proc _sep_opty
|
|
||||||
mwa #((ScreenWidth/2)-(8*4)) LineXdraw ; centering
|
|
||||||
mva ResultY LineYdraw
|
|
||||||
jsr TypeLine4x4
|
|
||||||
adb ResultY #4 ;next line
|
|
||||||
rts
|
|
||||||
.endp
|
|
||||||
|
|
||||||
;--------------------------------
|
|
||||||
.proc DisplaySeppuku
|
|
||||||
;using 4x4 font
|
|
||||||
|
|
||||||
|
|
||||||
mva #20 fs ; temp, how many times blink the billboard
|
|
||||||
seppuku_loop
|
|
||||||
lda CONSOL ; turbo mode
|
|
||||||
and #%00000001 ; START KEY
|
|
||||||
sne:mva #1 fs ; finish it
|
|
||||||
|
|
||||||
mva #4 ResultY ; where seppuku text starts Y-wise on the screen
|
|
||||||
|
|
||||||
;top frame
|
|
||||||
mva ResultY LineYdraw
|
|
||||||
jsr TL4x4_top
|
|
||||||
adb ResultY #4 ;next line
|
|
||||||
|
|
||||||
;seppuku
|
|
||||||
mwa #seppukuText LineAddress4x4
|
|
||||||
jsr _sep_opty
|
|
||||||
|
|
||||||
;bottom frame
|
|
||||||
mva ResultY LineYdraw
|
|
||||||
jsr TL4x4_bottom ; just go
|
|
||||||
|
|
||||||
;clean seppuku
|
|
||||||
|
|
||||||
mva #3 di
|
|
||||||
;mva #4 ResultY
|
|
||||||
lda #4
|
|
||||||
sta ResultY
|
|
||||||
loplop ;@
|
|
||||||
mwa #lineClear LineAddress4x4
|
|
||||||
jsr _sep_opty
|
|
||||||
|
|
||||||
dec di
|
|
||||||
bne loplop ;@-
|
|
||||||
|
|
||||||
dec fs
|
|
||||||
jne seppuku_loop
|
|
||||||
|
|
||||||
quit_seppuku
|
|
||||||
rts
|
|
||||||
|
|
||||||
.endp
|
|
||||||
;--------------------------------
|
;--------------------------------
|
||||||
.proc DisplayResults ;
|
.proc DisplayResults ;
|
||||||
;displays results of the round
|
;displays results of the round
|
||||||
@@ -2277,7 +1944,12 @@ RandomizeTankPos
|
|||||||
randomize 0 180
|
randomize 0 180
|
||||||
sta AngleTable,x
|
sta AngleTable,x
|
||||||
randomize 0 (49-8)
|
randomize 0 (49-8)
|
||||||
and #%11111110 ; correction for PMG
|
; x correction for P/M
|
||||||
|
; --
|
||||||
|
.IF XCORRECTION_FOR_PM = 1
|
||||||
|
and #%11111110
|
||||||
|
.ENDIF
|
||||||
|
; --
|
||||||
clc
|
clc
|
||||||
adc XtankOffsetGO_L,x
|
adc XtankOffsetGO_L,x
|
||||||
sta XtankstableL,x
|
sta XtankstableL,x
|
||||||
|
|||||||
@@ -168,8 +168,6 @@ TargetTankNr ; Target tank index (for AI routines)
|
|||||||
.DS 1
|
.DS 1
|
||||||
SecondTryFlag ; For precise AI aiming
|
SecondTryFlag ; For precise AI aiming
|
||||||
.DS 1
|
.DS 1
|
||||||
SpyHardFlag ; >$7f - run SpyHard after inventory
|
|
||||||
.DS 1
|
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
;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
|
||||||
|
|||||||
+78
-21
@@ -1149,8 +1149,12 @@ afterInventory
|
|||||||
jsr MakeDarkScreen
|
jsr MakeDarkScreen
|
||||||
jsr DisplayStatus
|
jsr DisplayStatus
|
||||||
jsr SetMainScreen
|
jsr SetMainScreen
|
||||||
;jsr WaitOneFrame ; not necessary
|
|
||||||
jsr DrawTanks
|
jsr DrawTanks
|
||||||
|
;jsr WaitOneFrame ; not necessary
|
||||||
|
bit LazyFlag
|
||||||
|
bvc NoLazy
|
||||||
|
jsr LazyBoys
|
||||||
|
NoLazy
|
||||||
bit SpyHardFlag
|
bit SpyHardFlag
|
||||||
bpl NoSpyHard
|
bpl NoSpyHard
|
||||||
jsr SpyHard
|
jsr SpyHard
|
||||||
@@ -1166,8 +1170,17 @@ NoSpyHard
|
|||||||
cmp #$80|@kbcode._tab
|
cmp #$80|@kbcode._tab
|
||||||
jeq CTRLPressedTAB
|
jeq CTRLPressedTAB
|
||||||
|
|
||||||
and #$3f ;CTRL and SHIFT ellimination
|
|
||||||
jumpFromStick
|
jumpFromStick
|
||||||
|
.IF TARGET = 800
|
||||||
|
cmp #$80|17 ; Ctrl+Help
|
||||||
|
bne NoVdebugSwitch
|
||||||
|
lda Vdebug
|
||||||
|
eor #$ff
|
||||||
|
sta Vdebug
|
||||||
|
jmp ReleaseAndLoop
|
||||||
|
NoVdebugSwitch
|
||||||
|
.ENDIF
|
||||||
|
and #$3f ;CTRL and SHIFT ellimination
|
||||||
cmp #@kbcode._up ; $e
|
cmp #@kbcode._up ; $e
|
||||||
jeq pressedUp
|
jeq pressedUp
|
||||||
cmp #@kbcode._down ; $f
|
cmp #@kbcode._down ; $f
|
||||||
@@ -1187,7 +1200,7 @@ jumpFromStick
|
|||||||
.IF TARGET = 800
|
.IF TARGET = 800
|
||||||
cmp #61 ; G
|
cmp #61 ; G
|
||||||
bne EndKeys
|
bne EndKeys
|
||||||
jsr SelectNextGradient
|
jsr SelectNextGradient.NotWind
|
||||||
jmp ReleaseAndLoop
|
jmp ReleaseAndLoop
|
||||||
.ENDIF
|
.ENDIF
|
||||||
EndKeys
|
EndKeys
|
||||||
@@ -1451,17 +1464,16 @@ AfterOffensiveText
|
|||||||
cmp #ind_Laser__________ ; laser
|
cmp #ind_Laser__________ ; laser
|
||||||
bne NotStrongShoot
|
bne NotStrongShoot
|
||||||
; Laser: (not)very strong - invisible - shot for laser beam end coordinates
|
; Laser: (not)very strong - invisible - shot for laser beam end coordinates
|
||||||
|
bit Vdebug
|
||||||
|
bmi @+
|
||||||
mva #0 color
|
mva #0 color
|
||||||
lda #1
|
@ lda #1
|
||||||
sta Force
|
sta Force
|
||||||
sta Force+1
|
sta Force+1
|
||||||
mva #$ff LaserFlag ; $ff - Laser
|
mva #$ff LaserFlag ; $ff - Laser
|
||||||
bne AfterStrongShoot
|
bne AfterStrongShoot
|
||||||
NotStrongShoot
|
NotStrongShoot
|
||||||
lda ForceTableL,x
|
jsr Table2Force
|
||||||
sta Force
|
|
||||||
lda ForceTableH,x
|
|
||||||
sta Force+1
|
|
||||||
bit TestFlightFlag
|
bit TestFlightFlag
|
||||||
bmi AfterStrongShoot
|
bmi AfterStrongShoot
|
||||||
mva #sfx_shoot sfx_effect
|
mva #sfx_shoot sfx_effect
|
||||||
@@ -1748,7 +1760,10 @@ LaserNoWalls
|
|||||||
bit TestFlightFlag
|
bit TestFlightFlag
|
||||||
bmi nowait
|
bmi nowait
|
||||||
bit LaserFlag ; faster laser prepare
|
bit LaserFlag ; faster laser prepare
|
||||||
bmi nowait
|
bpl nolaserwait
|
||||||
|
bit Vdebug
|
||||||
|
bpl nowait
|
||||||
|
nolaserwait
|
||||||
lda color
|
lda color
|
||||||
beq nonowait ; smoke tracer erases slowly
|
beq nonowait ; smoke tracer erases slowly
|
||||||
lda tracerflag
|
lda tracerflag
|
||||||
@@ -1789,10 +1804,16 @@ SkipCollisionCheck
|
|||||||
mwa ytraj+1 ydraw
|
mwa ytraj+1 ydraw
|
||||||
|
|
||||||
bit TestFlightFlag
|
bit TestFlightFlag
|
||||||
bvs NoUnPlot
|
bvc NoTestFlight
|
||||||
lda tracerflag
|
bit Vdebug
|
||||||
|
bpl NoUnplot
|
||||||
|
jsr WaitOneFrame ; visualize AI targeting
|
||||||
|
jmp YesUnPlot
|
||||||
|
NoTestFlight
|
||||||
|
lda tracerflag
|
||||||
bne NoUnPlot
|
bne NoUnPlot
|
||||||
|
|
||||||
|
YesUnPlot
|
||||||
jsr UnPlot
|
jsr UnPlot
|
||||||
|
|
||||||
NoUnPlot
|
NoUnPlot
|
||||||
@@ -1944,11 +1965,7 @@ BouncyCastle
|
|||||||
; ---------------- get fire parameters again
|
; ---------------- get fire parameters again
|
||||||
|
|
||||||
ldx TankNr
|
ldx TankNr
|
||||||
lda ActiveWeapon,x
|
jsr Table2Force
|
||||||
lda ForceTableL,x
|
|
||||||
sta Force
|
|
||||||
lda ForceTableH,x
|
|
||||||
sta Force+1
|
|
||||||
lda AngleTable,x
|
lda AngleTable,x
|
||||||
sta Angle
|
sta Angle
|
||||||
|
|
||||||
@@ -2447,6 +2464,7 @@ InverseScreenByte
|
|||||||
mvx TankNr TargetTankNr ; save
|
mvx TankNr TargetTankNr ; save
|
||||||
RepeatSpy
|
RepeatSpy
|
||||||
mvx #0 TankNr
|
mvx #0 TankNr
|
||||||
|
stx SpyHardFlag ; 0 - optimization
|
||||||
CheckNextTankSH
|
CheckNextTankSH
|
||||||
cpx TargetTankNr
|
cpx TargetTankNr
|
||||||
beq ThisTankItsMe
|
beq ThisTankItsMe
|
||||||
@@ -2477,7 +2495,6 @@ SelectNextTank
|
|||||||
SpyHardEnd
|
SpyHardEnd
|
||||||
mvx TargetTankNr TankNr ; restore
|
mvx TargetTankNr TankNr ; restore
|
||||||
jsr DisplaySpyInfo
|
jsr DisplaySpyInfo
|
||||||
mva #0 SpyHardFlag
|
|
||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
.proc DisplaySpyInfo
|
.proc DisplaySpyInfo
|
||||||
@@ -2488,6 +2505,42 @@ SpyHardEnd
|
|||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
; -------------------------------------------------
|
; -------------------------------------------------
|
||||||
|
.proc LazyBoys
|
||||||
|
; -------------------------------------------------
|
||||||
|
mva #sfx_lazy_boys sfx_effect
|
||||||
|
jsr PrepareAIShoot
|
||||||
|
ldx TankNr
|
||||||
|
bit LazyFlag
|
||||||
|
bmi GoDarwin
|
||||||
|
jsr FindBestTarget2 ; find nearest tank neighbour
|
||||||
|
jsr LazyAim
|
||||||
|
lda #%00000000 ; set "visual aiming" off
|
||||||
|
beq EndLazy
|
||||||
|
GoDarwin
|
||||||
|
jsr FindBestTarget3 ; find target with lowest energy
|
||||||
|
jsr LazyAim
|
||||||
|
lda #%10000000
|
||||||
|
EndLazy
|
||||||
|
sta TestFlightFlag ; set "visual aiming" on
|
||||||
|
mva #0 LazyFlag
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
.proc LazyAim
|
||||||
|
; aiming proc for Lazy ... weapons
|
||||||
|
; as proc for memory optimisation
|
||||||
|
; Y - target tan nr
|
||||||
|
; A - target direction
|
||||||
|
sty TargetTankNr
|
||||||
|
; aiming
|
||||||
|
jsr TakeAim ; direction still in A (0 - left, >0 - right)
|
||||||
|
lda Force
|
||||||
|
sta ForceTableL,x
|
||||||
|
lda Force+1
|
||||||
|
sta ForceTableH,x
|
||||||
|
jsr MoveBarrelToNewPosition
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
; -------------------------------------------------
|
||||||
.proc TankFlying
|
.proc TankFlying
|
||||||
; -------------------------------------------------
|
; -------------------------------------------------
|
||||||
; This routine is run from inside of the main loop
|
; This routine is run from inside of the main loop
|
||||||
@@ -2600,8 +2653,7 @@ KeyboardAndJoyCheck
|
|||||||
mva #sfx_tank_move sfx_effect
|
mva #sfx_tank_move sfx_effect
|
||||||
lda ShieldEnergy,x
|
lda ShieldEnergy,x
|
||||||
cmp #20
|
cmp #20
|
||||||
bne notpressed
|
bne LotOfFuel
|
||||||
nop
|
|
||||||
|
|
||||||
; display text 4x4 - low fuel
|
; display text 4x4 - low fuel
|
||||||
mwa #hoverEmpty LineAddress4x4
|
mwa #hoverEmpty LineAddress4x4
|
||||||
@@ -2612,9 +2664,9 @@ KeyboardAndJoyCheck
|
|||||||
sbc #12
|
sbc #12
|
||||||
sta LineYdraw
|
sta LineYdraw
|
||||||
jsr TypeLine4x4.variableLength
|
jsr TypeLine4x4.variableLength
|
||||||
|
|
||||||
ldx TankNr
|
ldx TankNr
|
||||||
|
|
||||||
|
LotOfFuel
|
||||||
notpressed
|
notpressed
|
||||||
; let's animate "engine"
|
; let's animate "engine"
|
||||||
jsr DrawTankEngine
|
jsr DrawTankEngine
|
||||||
@@ -2766,7 +2818,7 @@ CheckCollisionWithTankLoop
|
|||||||
; it is tricky but fast and much shorter
|
; it is tricky but fast and much shorter
|
||||||
lda xtankstableL,x
|
lda xtankstableL,x
|
||||||
sec
|
sec
|
||||||
sbc #9 ; 2 pixels more on left side + tan width
|
sbc #9 ; 2 pixels more on left side + tank width
|
||||||
tay
|
tay
|
||||||
lda xtankstableH,x
|
lda xtankstableH,x
|
||||||
sbc #0
|
sbc #0
|
||||||
@@ -2822,9 +2874,14 @@ ItIsMe
|
|||||||
mva #1 Erase
|
mva #1 Erase
|
||||||
jsr DrawTankNr
|
jsr DrawTankNr
|
||||||
mva #0 Erase
|
mva #0 Erase
|
||||||
|
; x correction for P/M
|
||||||
|
; --
|
||||||
|
.IF XCORRECTION_FOR_PM = 1
|
||||||
lda XtankstableL,x
|
lda XtankstableL,x
|
||||||
and #%11111110 ; correction for PM
|
and #%11111110 ; correction for PM
|
||||||
sta XtankstableL,x
|
sta XtankstableL,x
|
||||||
|
.ENDIF
|
||||||
|
; --
|
||||||
GoDown
|
GoDown
|
||||||
|
|
||||||
mwa #mountaintable temp
|
mwa #mountaintable temp
|
||||||
|
|||||||
Reference in New Issue
Block a user