Compare commits

...

16 Commits

Author SHA1 Message Date
Pirx 8c61ce7e4d Merge pull request #145 from pkali/develop
Develop
2022-10-31 01:54:02 -04:00
Pirx eb38407868 manual_en update 2022-10-31 01:52:56 -04:00
Pirx 7d7da78fd6 manual_en update 2022-10-31 01:52:06 -04:00
Pirx 148c64f158 version, README and manual_en update 2022-10-31 01:51:20 -04:00
Pecusx 4bf6b33528 Keyboard autorepeat added #141 2022-10-30 12:51:38 +01:00
Pecusx cd70e8c1ec New (faster) ingame DLI 2022-10-29 17:40:00 +02:00
Pecusx c7aea8e3ab DLI optimization
No more WSYNC :)
2022-10-29 16:22:53 +02:00
Pecusx fe990a6668 WaitOneFrame procedure sometimes hung in NTSC
And manuals update.
2022-10-29 11:36:33 +02:00
Pecusx 6f369735c3 Final (or not :) ) PAL and NTSC music by @mikerro 2022-10-28 21:27:06 +02:00
Pecusx d462c84577 Bouncy Castle bounces Funky Bomb bug fixed #129 2022-10-27 20:33:54 +02:00
Pecusx 3ed648b01f Better music in NTSC 2022-10-26 19:15:37 +02:00
Pecusx 2aca68c41c ATRACT mode fixed. 2022-10-25 19:47:15 +02:00
Pecusx 5f5ea0a752 Credits flickering fixed! 2022-10-25 19:15:50 +02:00
Pirx 1891bcc7f1 5200 ingame dli fix 2022-10-25 09:38:01 -04:00
Pecusx 11592414a8 GameOver screen optimization and return of Tab in weapon selection :) 2022-10-25 10:03:04 +02:00
Pirx 89d6f4834b README updt 2022-10-16 23:51:42 -04:00
15 changed files with 190 additions and 75 deletions
+17 -14
View File
@@ -14,10 +14,10 @@ On the first screen, you can configure gameplay options:
* frequency of suicides :) - if for a number of turns the game has not recorded hits (tanks are constantly shooting inaccurately), after one of such misses a tank commits suicide - here you determine how long they can "shooting for the stars" :) - if only people play the optimal setting is "norm", in the case of computer-controlled players ... you choose. * frequency of suicides :) - if for a number of turns the game has not recorded hits (tanks are constantly shooting inaccurately), after one of such misses a tank commits suicide - here you determine how long they can "shooting for the stars" :) - if only people play the optimal setting is "norm", in the case of computer-controlled players ... you choose.
* The height (and undulation) of the mountains from almost flat (NL - Kingdom of the Netherlands), to soaring and high (NP - Federal Democratic Republic of Nepal) * The height (and undulation) of the mountains from almost flat (NL - Kingdom of the Netherlands), to soaring and high (NP - Federal Democratic Republic of Nepal)
* the way the walls (edges of the screen) work: * the way the walls (edges of the screen) work:
* none - projectiles that flew off the screen do not return * none - projectiles that flew off the screen do not return (black color of the screen frame)
* wrap - the screen "wraps" and projectiles that flew to the right appear on the left side (and vice versa) * wrap - the screen "wraps" and projectiles that flew to the right appear on the left side and vice versa (purple color of the screen frame)
* bump - the right and left walls deflect projectiles that want to fly through them * bump - the right and left walls deflect projectiles that want to fly through them (dark blue color of the screen frame)
* boxy - just like bump, except that the "ceiling" also reflects projectiles * boxy - just like bump, except that the "ceiling" also reflects projectiles (green color of the screen frame)
* rand - at the beginning of each round, one of the above 4 ways the walls work is drawn. * rand - at the beginning of each round, one of the above 4 ways the walls work is drawn.
During gameplay, the current mode of the walls is represented by the color of the screen frame: none - black, wrap - purple, bump - blue, boxy - green. During gameplay, the current mode of the walls is represented by the color of the screen frame: none - black, wrap - purple, bump - blue, boxy - green.
@@ -56,16 +56,19 @@ The status line shows which player is currently allowed to take a shot and a set
* in parentheses is the name of the active defensive weapon - if there is any activated by the player. * in parentheses is the name of the active defensive weapon - if there is any activated by the player.
The keyboard controls here are simple, cursor keys or joystick: left/right - change the angle of the barrel, up/down - change the the force of the shot. The keyboard controls here are simple, cursor keys or joystick: left/right - change the angle of the barrel, up/down - change the the force of the shot.
* [SPACE] or joystick button pressed briefly - firing a shot.
* [TAB] or [SELECT] - selection of offensive weapons (this option is not available directly with the joystick - you need to select Inventory). | A800 | 5200 | function |
* [I] or longer holding the joystick button - go to Inventory. It is a screen (actually two) with the same layout as the shopping menu, it also works similarly except that here you don't buy weapons, but choose one of the offensive ones to shoot or activate a defensive weapon. | --- | --- | --- |
* [A] or [OPTION] - go directly to the defensive weapons activation. | [SPACE] | [0] | or joystick button pressed briefly - firing a shot. |
* [M] key - disable/enable background music. | [TAB] or [SELECT] | [5] | selection of offensive weapons (this option is not available directly with the joystick - you need to select Inventory) |
* [S] key - disable/enable effect sounds. | [I] | [9] | or longer holding the joystick button - go to Inventory. It is a screen (actually two) with the same layout as the shopping menu, it also works similarly except that here you don't buy weapons, but choose one of the offensive ones to shoot or activate a defensive weapon. |
* [START] - speed up some game animations. | [A] or [OPTION] | [7] | go directly to the defensive weapons activation.
* [O] - end the current game and jump to the Game Over screen with a summary. The summary of the results does not take into account the current round of the game, but only the rounds completed earlier. This corresponds to pressing the [ESC] key with the difference that the summary and credits are displayed. | [M] | [PAUSE] | disable/enable background music. |
* [START] + [OPTION] - immediately force the end of the game (Game Over), just like [O] but without confirmation. | [S] key | [RESET] | disable/enable effect sounds. |
* [ESC] - during the entire game at any time (unless the computer is playing, then sometimes you have to wait a while) you can press the [ESC] key, which allows you to abort the game and return to the beginning (of course, there is protection against accidental pressing). | [START] | N/A | speed up some game animations. |
| [O] | [3] | end the current game and jump to the Game Over screen with a summary. The summary of the results does not take into account the current round of the game, but only the rounds completed earlier. This corresponds to pressing the [ESC] key with the difference that the summary and credits are displayed. |
| [START] + [OPTION] | N/A | immediately force the end of the game (Game Over), just like [O] but without confirmation.
| [ESC] | [*] | during the entire game at any time (unless the computer is playing, then sometimes you have to wait a while) you can press the [ESC] key, which allows you to abort the game and return to the beginning (of course, there is protection against accidental pressing). |
## 5. Game mechanics - offensive weapons ## 5. Game mechanics - offensive weapons
+4 -4
View File
@@ -13,10 +13,10 @@ Na pierwszym ekranie możemy skonfigurować opcje rozgrywwki:
* częstotliwość samobójstw :) - jeśli przez ileś tur gra nie odnotowała trafień (czołgi ciągle strzelają niecelnie) jeden z takich pudłujących czołgów popełnia samobójstwo - tu określamy jak długo mogą “strzelać w próżnię” :) - jeśli grają tylko ludzie optymalne ustawienie to “norm”, w przypadku graczy sterowanych przez komputer… wedle uznania. * częstotliwość samobójstw :) - jeśli przez ileś tur gra nie odnotowała trafień (czołgi ciągle strzelają niecelnie) jeden z takich pudłujących czołgów popełnia samobójstwo - tu określamy jak długo mogą “strzelać w próżnię” :) - jeśli grają tylko ludzie optymalne ustawienie to “norm”, w przypadku graczy sterowanych przez komputer… wedle uznania.
* wysokość (i pofałdowanie) gór od prawie płaskich (NL - Królestwo Niderlandów), do strzelistych i wysokich (NP - Federalna Demokratyczna Republika Nepalu) * wysokość (i pofałdowanie) gór od prawie płaskich (NL - Królestwo Niderlandów), do strzelistych i wysokich (NP - Federalna Demokratyczna Republika Nepalu)
* sposób działania ścian (krawędzi ekranu): * sposób działania ścian (krawędzi ekranu):
* none - pociski, które wyleciały poza ekran nie wracają * none - pociski, które wyleciały poza ekran nie wracają (czarny kolor ramki ekranu)
* wrap - ekran "zawija się" i pociski, które wyleciały w prawo pojawiają się z lewej strony (i odwrotnie) * wrap - ekran "zawija się" i pociski, które wyleciały w prawo pojawiają się z lewej strony i odwrotnie (fioletowy kolor ramki ekranu)
* bump - prawa i lewa ściana odbijają pociski, które chcą przez nie przelecieć * bump - prawa i lewa ściana odbijają pociski, które chcą przez nie przelecieć (granatowy kolor ramki ekranu)
* boxy - tak jak bump, tyle że "sufit" także odbija pociski * boxy - tak jak bump, tyle że "sufit" także odbija pociski (zielony kolor ramki ekranu)
* rand - na początku każdej rundy losowany jest jeden z 4 powyższych sposobów działania ścian * rand - na początku każdej rundy losowany jest jeden z 4 powyższych sposobów działania ścian
W trakcie rozgrywki aktualny sposób działania ścian reprezentowany jest przez kolor ramki ekranu: none - czarny, wrap - fioletowy, bump - niebieski, boxy - zielony. W trakcie rozgrywki aktualny sposób działania ścian reprezentowany jest przez kolor ramki ekranu: none - czarny, wrap - fioletowy, bump - niebieski, boxy - zielony.
+30 -2
View File
@@ -46,7 +46,35 @@ It never happened, but we got some encouraging comments and we are still trying
With the advent of [fujinet](https://fujinet.online/) we are thinking about making the game interplanetary, err, with multiplayer over the net. We'll see. With the advent of [fujinet](https://fujinet.online/) we are thinking about making the game interplanetary, err, with multiplayer over the net. We'll see.
## Changes: ## Changelog:
###### Version 1.17
2022-10-31
Mostly 5200 console port and NTSC improvements.
* Updated songs from Miker do not require skipping frames on NTSC machines. Crucial for the next point.
* Bouncy Castle bouncing of Funky Bomb fixed https://github.com/pkali/scorch_src/issues/129
* 5200 version had various graphical and sound glitches. Although mostly harmless, it hurt our sense of aesthetics. First of all the flickering credits roll is all good now.
* Rare hang-ups on NTSC machines fixed
* Screen lowered down by 7 scan lines to help top status line on NTSC CRTs.
* 5200 ATTRACT mode not going away fixed
* Autorepeat added to menus what should help 5200 users with their non-centering abomination of a controller.
* DLI interrupts optimized, few cycles saved.
* 5200 keypad sort-of-works. Please refer to manual for key bindings.
###### Version 1.16
2022-10-16
The official release of our game for the Atari 5200 SuperSystem. Grab the `scorch.bin` file and burn a cart!
This is all thanks to @miker who supported us all this time of uncertainty and despair.
Cramming the game into a 32KiB cart and 16KiB RAM was a big task - it required a rewrite of the RMT player, a crazy number of size optimizations, and counting each byte.
The release is not perfect - we have a number of glitches and improvements to the 5200 controller procedures to work on, but the game is playable.
Changes:
* numerous, but not very visible
###### Version 1.14 ###### Version 1.14
2022-09-05 2022-09-05
@@ -60,7 +88,7 @@ Changes:
* Bouncy Castle bounces like it should. * Bouncy Castle bounces like it should.
* Tracer and Smoke Tracer are not causing defense weapons to trigger anymore. * Tracer and Smoke Tracer are not causing defense weapons to trigger anymore.
* In rare cases direct hit was not accounted for correctly. * In rare cases direct hit was not accounted for correctly.
* Manuals updated. * Manuals updated. https://github.com/pkali/scorch_src/releases/tag/v1.16
###### Version 1.13 ###### Version 1.13
Binary file not shown.
+5 -2
View File
@@ -594,11 +594,14 @@ CreditsStart
dta d"Krzysztof 'Kaz' Ziembi",d"k"* dta d"Krzysztof 'Kaz' Ziembi",d"k"*
.ENDIF .ENDIF
dta d" "* dta d" "*
dta d"Ideas and Q",d"A"* dta d"Ideas, help and Q",d"A"*
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, ZP",d"H"*
.IF target = 5200
dta d"x-usr(1536), Aking, JAC!, phaero",d"n"*
.ENDIF
dta d" "* dta d" "*
dta d"Additional testin",d"g"* dta d"Additional testin",d"g"*
dta d"Arek and Alex Peck",d"o"* dta d"Arek and Alex Peck",d"o"*
@@ -609,7 +612,7 @@ CreditsStart
dta d" "* dta d" "*
CreditsEnd CreditsEnd
.IF target = 5200 .IF target = 5200
CreditsLines=36 CreditsLines=37
.ELSE .ELSE
CreditsLines=42 ; 34 in reality. add 7? CreditsLines=42 ; 34 in reality. add 7?
.ENDIF .ENDIF
+2
View File
@@ -25,6 +25,8 @@ TextBackgroundColor = $02 ; REAL constans - use: LDA #TextBackgroundColor
TextForegroundColor = $0A TextForegroundColor = $0A
space = 0 ; space in screencodes space = 0 ; space in screencodes
KeyRepeatSpeed = 10 ; (max 127 !!!)
;character codes for symbols (tank, parachute, etc. ) ;character codes for symbols (tank, parachute, etc. )
char_parachute_______ = $02 char_parachute_______ = $02
char_flag____________ = $1e char_flag____________ = $1e
+3 -2
View File
@@ -13,9 +13,10 @@ PurchaseDL
DLPurTitleAddr DLPurTitleAddr
.word PurchaseTitle .word PurchaseTitle
.byte $50 .byte $50
.byte $42+$80 .byte $42
.word purchaseTextBuffer .word purchaseTextBuffer
.byte $60,$42 .byte $00+$80
.byte $50,$42
MoreUpdl MoreUpdl
.word EmptyLine .word EmptyLine
.byte 0,$42 .byte 0,$42
+4 -4
View File
@@ -117,8 +117,8 @@ dl ; MAIN game display list
.byte $70 .byte $70
.byte $42 .byte $42
.word statusBuffer .word statusBuffer
.byte $02, $02 +$80 ;DLI .byte $02, $02
.byte $10 ; 2 blank lines .byte $10+$80 ; 2 blank lines + DLI
.byte $4f .byte $4f
.word display ; 1 line .word display ; 1 line
@@ -213,13 +213,13 @@ GameOverDL
.byte $70,$40 .byte $70,$40
.byte $47 ; 16 gr8 lines .byte $47 ; 16 gr8 lines
.word GameOverTitle .word GameOverTitle
.byte $60 ; 7 lines down to match new sprite position ; .byte $60 ; 7 lines down to match new sprite position
.byte $4f ; 1 line .byte $4f ; 1 line
.word display+(40*72) .word display+(40*72)
:28 .byte $0f ; 28 lines :28 .byte $0f ; 28 lines
.byte $0f+$80 .byte $0f+$80
.byte $4f ; 1 line .byte $4f ; 1 line
.word display+(40*32) .word display+(40*(32-7)) ;7 lines up to match new sprite position
:30 .byte $0f ; 30 lines :30 .byte $0f ; 30 lines
.byte $0f+$80 ; 1 line .byte $0f+$80 ; 1 line
.byte $4f ; 1 line .byte $4f ; 1 line
+4 -2
View File
@@ -78,8 +78,10 @@
; 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 ?zero LDA VCOUNT
beq ?zero cmp #$05
bpl ?WA bcc ?zero
cmp #$70
bcc ?WA
sbc #10 ; last lines correction sbc #10 ; last lines correction
?WA cmp VCOUNT ?WA cmp VCOUNT
beq ?WA beq ?WA
+4 -2
View File
@@ -77,8 +77,10 @@
; 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 ?zero LDA VCOUNT
beq ?zero cmp #$05
bpl ?WA bcc ?zero
cmp #$70
bcc ?WA
sbc #10 ; last lines correction sbc #10 ; last lines correction
?WA cmp VCOUNT ?WA cmp VCOUNT
beq ?WA beq ?WA
+97 -34
View File
@@ -6,7 +6,7 @@
;Miami & Warsaw 2022 ;Miami & Warsaw 2022
;--------------------------------------------------- ;---------------------------------------------------
.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}
;--------------------------------------------------- ;---------------------------------------------------
@@ -15,7 +15,7 @@
;--------------------------------------------------- ;---------------------------------------------------
.macro build .macro build
dta d"1.16" ; number of this build (4 bytes) dta d"1.17" ; number of this build (4 bytes)
.endm .endm
.macro RMTSong .macro RMTSong
@@ -26,7 +26,7 @@
;--------------------------------------------------- ;---------------------------------------------------
icl 'definitions.asm' icl 'definitions.asm'
;--------------------------------------------------- ;---------------------------------------------------
.zpvar DliColorBack .byte = $63
.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
@@ -70,6 +70,7 @@
.zpvar IsEndOfTheFallFlag .byte ; for small speedup ground falling .zpvar IsEndOfTheFallFlag .byte ; for small speedup ground falling
.zpvar sfx_effect .byte .zpvar sfx_effect .byte
.zpvar RMT_blocked .byte .zpvar RMT_blocked .byte
.zpvar ScrollFlag .byte
; --------------OPTIMIZATION VARIABLES-------------- ; --------------OPTIMIZATION VARIABLES--------------
.zpvar Force .word .zpvar Force .word
@@ -251,6 +252,24 @@ FirstSTART
cpy #screenheight+1 cpy #screenheight+1
bne @- bne @-
.IF TARGET = 800
lda PAL
and #%00001110
bne NoRMT_PALchange
;it is PAL here
; Change RMT to PAL version
; 5 values in RMT file
; not elegant :(
mva #$06 MODUL-6+$941
mva #$10 MODUL-6+$a43
mva #$06 MODUL-6+$b9d
mva #$04 MODUL-6+$bd2
mva #$08 MODUL-6+$e17
mva #$06 MODUL-6+$e3d
NoRMT_PALchange
.ENDIF
; RMT INIT ; RMT INIT
lda #$f0 ;initial value lda #$f0 ;initial value
sta RMTSFXVOLUME ;sfx note volume * 16 (0,16,32,...,240) sta RMTSFXVOLUME ;sfx note volume * 16 (0,16,32,...,240)
@@ -1106,7 +1125,7 @@ MakeTanksVisible
rts rts
.endp .endp
;-------------------------------------------------- ;--------------------------------------------------
.proc DLIinterruptGraph /* .proc DLIinterruptGraph
;sta dliA ;sta dliA
;sty dliY ;sty dliY
pha pha
@@ -1115,9 +1134,9 @@ MakeTanksVisible
lda dliColorsBack,y lda dliColorsBack,y
ldy dliColorsFore ldy dliColorsFore
.IF TARGET = 800 .IF TARGET = 800
nop ; necessary on 800 because DLIs take less time, jitter visible without it nop ; necessary on 800 because DLIs take less time, jitter visible without it
nop
.ENDIF .ENDIF
nop
sta COLPF1 sta COLPF1
sty COLPF2 sty COLPF2
inc dliCounter inc dliCounter
@@ -1126,6 +1145,26 @@ MakeTanksVisible
ply ply
pla pla
rti rti
.endp */
.proc DLIinterruptGraph
pha
lda dliColorsFore
nop
nop
nop
.IF TARGET = 800
nop ; necessary on 800 because DLIs take less time, jitter visible without it
nop
.ENDIF
sta COLPF2
lda DliColorBack
sta COLPF1
eor #$02
sta DliColorBack
pla
rti
.endp .endp
;-------------------------------------------------- ;--------------------------------------------------
.proc DLIinterruptOptions .proc DLIinterruptOptions
@@ -1149,14 +1188,14 @@ MakeTanksVisible
lda dliCounter lda dliCounter
bne EndofPMG bne EndofPMG
lda #%00100001 ; playfield after P/M - prior=1 lda #%00100001 ; playfield after P/M - prior=1
STA WSYNC ;STA WSYNC
sta PRIOR sta PRIOR
bne EndOfDLI_GO bne EndOfDLI_GO
EndofPMG EndofPMG
cmp #1 cmp #1
bne ColoredLines bne ColoredLines
lda #%00100100 ; playfield before P/M lda #%00100100 ; playfield before P/M
STA WSYNC ;STA WSYNC
sta PRIOR sta PRIOR
bne EndOfDLI_GO bne EndOfDLI_GO
ColoredLines ColoredLines
@@ -1165,29 +1204,13 @@ ColoredLines
tay tay
lda GameOverColoursTable-3,y ; -2 because this is DLI nr 2 and -1 (labels line) lda GameOverColoursTable-3,y ; -2 because this is DLI nr 2 and -1 (labels line)
ldy #$0a ; text colour (brightnes) ldy #$0a ; text colour (brightnes)
STA WSYNC ;STA WSYNC
sta COLPF2 sta COLPF2
sty COLPF1 sty COLPF1
bne EndOfDLI_GO bne EndOfDLI_GO
CreditsScroll CreditsScroll
lda #$00 lda #$00
sta COLPF2 sta COLPF2
inc CreditsVScrol
lda CreditsVScrol
cmp #32 ;not too fast
beq nextlinedisplay
:2 lsr ;not too fast
sta WSYNC
sta VSCROL
jmp EndOfDLI_GO
nextlinedisplay
lda #0
sta CreditsVScrol
sta VSCROL
adw DLCreditsAddr #40
cpw DLCreditsAddr #CreditsLastLine
bne EndOfDLI_GO
mwa #Credits DLCreditsAddr
EndOfDLI_GO EndOfDLI_GO
inc dliCounter inc dliCounter
ply ply
@@ -1199,7 +1222,7 @@ EndOfDLI_GO
;sta dliA ;sta dliA
pha pha
lda #TextBackgroundColor lda #TextBackgroundColor
sta WSYNC ;sta WSYNC
sta COLPF2 sta COLPF2
mva #TextForegroundColor COLPF3 mva #TextForegroundColor COLPF3
;lda dliA ;lda dliA
@@ -1210,6 +1233,7 @@ DLIinterruptNone
;-------------------------------------------------- ;--------------------------------------------------
.proc VBLinterrupt .proc VBLinterrupt
mva #0 dliCounter mva #0 dliCounter
mva #$02 DliColorBack
lda PAL lda PAL
and #%00001110 and #%00001110
@@ -1218,13 +1242,15 @@ DLIinterruptNone
dec NTSCcounter dec NTSCcounter
bne itsPAL bne itsPAL
mva #6 NTSCcounter mva #6 NTSCcounter
bne exitVBL ; skip doing VBL things each 6 frames in Amerika, Amerika bne SkippedIfNTSC ; skip doing VBL things each 6 frames in Amerika, Amerika
; We're all living in Amerika, Coca Cola, Wonderbra ; We're all living in Amerika, Coca Cola, Wonderbra
itsPAL itsPAL
; pressTimer is trigger tick counter. always 50 ticks / s ; pressTimer is trigger tick counter. always 50 ticks / s
bit:smi:inc pressTimer ; timer halted if >127. max time measured 2.5 s bit:smi:inc pressTimer ; timer halted if >127. max time measured 2.5 s
SkippedIfNTSC
bit RMT_blocked bit RMT_blocked
bmi SkipRMTVBL bmi SkipRMTVBL
; ------- RMT ------- ; ------- RMT -------
@@ -1243,7 +1269,37 @@ lab2
jsr RASTERMUSICTRACKER+3 ;1 play jsr RASTERMUSICTRACKER+3 ;1 play
; ------- RMT ------- ; ------- RMT -------
SkipRMTVBL SkipRMTVBL
exitVBL 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 .IF TARGET = 5200
center = 114 ;Read analog stick and make it look like a digital stick center = 114 ;Read analog stick and make it look like a digital stick
threshold = 60 threshold = 60
@@ -1601,6 +1657,8 @@ notpressedJoyGetKey
lda #@kbcode._ret ;Return key lda #@kbcode._ret ;Return key
getkeyend getkeyend
ldx #0
stx ATRACT ; reset atract mode
mvx #sfx_keyclick sfx_effect mvx #sfx_keyclick sfx_effect
rts rts
.endp .endp
@@ -1617,22 +1675,27 @@ getkeyend
;-------------------------------------------------- ;--------------------------------------------------
.proc WaitForKeyRelease .proc WaitForKeyRelease
;-------------------------------------------------- ;--------------------------------------------------
mva #128-KeyRepeatSpeed pressTimer ; tricky
StillWait
bit pressTimer
bmi KeyReleased
lda STICK0 lda STICK0
and #$0f and #$0f
cmp #$0f cmp #$0f
bne WaitForKeyRelease bne StillWait
lda STRIG0 lda STRIG0
beq WaitForKeyRelease beq StillWait
.IF TARGET = 800 .IF TARGET = 800
lda SKSTAT lda SKSTAT
cmp #$ff cmp #$ff
bne WaitForKeyRelease bne StillWait
lda CONSOL lda CONSOL
and #%00000110 ; Select and Option only and #%00000110 ; Select and Option only
cmp #%00000110 cmp #%00000110
bne WaitForKeyRelease bne StillWait
rts
.ENDIF .ENDIF
KeyReleased
rts
.endp .endp
;-------------------------------------------------- ;--------------------------------------------------
.proc IsKeyPressed ; A=0 - yes , A>0 - no .proc IsKeyPressed ; A=0 - yes , A>0 - no
@@ -1794,7 +1857,7 @@ TankFont
org $b000 org $b000
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_str6.rmt",+6 ;include music RMT module ins "artwork/sfx/scorch_str6-NTSC.rmt",+6 ;include music RMT module
;opt h+ ;opt h+
MODULEND MODULEND
;---------------------------------------------- ;----------------------------------------------
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+7 -5
View File
@@ -398,7 +398,7 @@ ChoosingItemForPurchase
jsr getkey jsr getkey
bit escFlag bit escFlag
spl:jmp WaitForKeyRelease ; like jsr ... : rts spl:jmp WaitForKeyRelease ; like jsr ... : rts
cmp #@kbcode._esc ; $2c ; Tab cmp #@kbcode._tab ; $2c ; Tab
jeq ListChange jeq ListChange
cmp #@kbcode._left ; $06 ; cursor left cmp #@kbcode._left ; $06 ; cursor left
jeq ListChange jeq ListChange
@@ -2022,6 +2022,7 @@ FinishResultDisplay
jsr GameOverResultsClear jsr GameOverResultsClear
jsr CopyFromPurchaseAndGameOver jsr CopyFromPurchaseAndGameOver
mwa #GameOverDL dlptrs mwa #GameOverDL dlptrs
mva #$ff ScrollFlag ; credits scroll on
lda #%00111110 ; normal screen width, DL on, P/M on lda #%00111110 ; normal screen width, DL on, P/M on
sta dmactls sta dmactls
lda #%00100100 ; playfield before P/M lda #%00100100 ; playfield before P/M
@@ -2139,7 +2140,7 @@ MainTanksFloatingLoop
AllTanksFloatingDown AllTanksFloatingDown
stx TankNr stx TankNr
lda Ytankstable,x lda Ytankstable,x
cmp #72 ; tank under screen - no erase cmp #(72-7) ; tank under screen - no erase
bcs NoEraseTank bcs NoEraseTank
mva #1 Erase mva #1 Erase
jsr DrawTankNr jsr DrawTankNr
@@ -2154,9 +2155,9 @@ NoEraseTank
NotFastTank NotFastTank
lda Ytankstable,x lda Ytankstable,x
; cmp #32 ; tank over screen - not visible ; cmp #32 ; tank over screen - not visible
cmp #80 ; tank under screen - new tank randomize cmp #(80-7) ; tank under screen - new tank randomize
bcs TankUnderScreen bcs TankUnderScreen
cmp #72 ; tank under screen but.... parachute cmp #(72-7) ; tank under screen but.... parachute
bcs DrawOnlyParachute bcs DrawOnlyParachute
bcc TankOnScreen bcc TankOnScreen
TankUnderScreen TankUnderScreen
@@ -2173,11 +2174,12 @@ FastTank
bpl AllTanksFloatingDown bpl AllTanksFloatingDown
jsr IsKeyPressed jsr IsKeyPressed
bne MainTanksFloatingLoop ; neverending loop bne MainTanksFloatingLoop ; neverending loop
mva #$00 ScrollFlag ; credits scroll off
jsr MakeDarkScreen jsr MakeDarkScreen
jsr GameOverResultsClear jsr GameOverResultsClear
rts rts
RandomizeTankPos RandomizeTankPos
randomize 10 32 ; 10 not 8 - barrel !! :) randomize 10 (32-7) ; 10 not 8 - barrel !! :)
sta Ytankstable,x sta Ytankstable,x
randomize 0 180 randomize 0 180
sta AngleTable,x sta AngleTable,x
+12 -3
View File
@@ -1207,6 +1207,7 @@ checkJoy
cmp #$0f cmp #$0f
beq notpressedJoy beq notpressedJoy
tay tay
mva #0 ATRACT ; reset atract mode
lda joyToKeyTable,y lda joyToKeyTable,y
jmp jumpFromStick jmp jumpFromStick
notpressedJoy notpressedJoy
@@ -1415,9 +1416,10 @@ pressedS
pressedSpace pressedSpace
;================================= ;=================================
;we shoot here!!! ;we shoot here!!!
lda #0
mva #0 pressTimer ; reset sta ATRACT ; reset atract mode
jsr WaitForKeyRelease sta pressTimer ; reset
jsr WaitForKeyRelease.StillWait
lda pressTimer lda pressTimer
cmp #25 ; 1/2s cmp #25 ; 1/2s
bcc fire bcc fire
@@ -1895,6 +1897,13 @@ NoDefence
lsrw Force ; Force = Force / 2 - because earlier we multiplied by 2 lsrw Force ; Force = Force / 2 - because earlier we multiplied by 2
rts ; END !!! rts ; END !!!
BouncyCastle BouncyCastle
; now in Y we have number of of the attacking player (TankNr) !
lda ActiveWeapon,y
; if Bouncy Castle bounced Funky Bomb - whole screen in range of soil down
cmp #ind_Funky_Bomb_____
bne @+
jsr SetFullScreenSoilRange
@
mva #sfx_shield_on sfx_effect mva #sfx_shield_on sfx_effect
; now run defensive-aggressive weapon - Bouncy Castle (previously known as Auto Defence)! ; now run defensive-aggressive weapon - Bouncy Castle (previously known as Auto Defence)!
mva #1 Erase mva #1 Erase