nicer sources

This commit is contained in:
2023-10-01 09:50:42 -04:00
parent c18fc198dc
commit e4bf9e077f
3 changed files with 78 additions and 76 deletions
+2 -2
View File
@@ -30,7 +30,7 @@ OptionsSubTitle
dta d" Unknown Father of All Games" dta d" Unknown Father of All Games"
;----------------------------------------------- ;-----------------------------------------------
MoreUp MoreUp
dta d" " ; common part of this text and OptionsSubTitle :) dta d" " ; common part of this text and OptionsSubTitle :)
dta 92,92,92 dta 92,92,92
dta d" more " dta d" more "
dta 92,92,92 dta 92,92,92
@@ -40,7 +40,7 @@ MoreDown
dta 93,93,93 dta 93,93,93
dta d" more " dta d" more "
dta 93,93,93 dta 93,93,93
; dta d" " ; common part of text and empty line :) ; dta d" " ; common part of text and empty line :)
EmptyLine EmptyLine
dta d" " dta d" "
;----------------------------------------------- ;-----------------------------------------------
+76 -74
View File
@@ -1,17 +1,19 @@
; @com.wudsn.ide.lng.mainsourcefile=scorch.asm ; @com.wudsn.ide.lng.mainsourcefile=scorch.asm
;Atari 8-bit Scorched Earth source code
;Atari 8-bit Scorch source code
;--------------------------------------------------- ;---------------------------------------------------
;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, 2023 ;Miami & Warsaw 2022, 2023
;WARNING! requires mads compiled on 2023-09-13 or later
;atari800 -5200 -cart ${outputFilePath} -cart-type 4
;atari800 -run ${outputFilePath}
;--------------------------------------------------- ;---------------------------------------------------
.IFNDEF TARGET .IFNDEF TARGET
.def TARGET = 800 ; 5200 .def TARGET = 800 ; 5200
.ENDIF .ENDIF
;WARNING! requires mads compiled on 2023-06-03 or later
;atari800 -5200 -cart ${outputFilePath} -cart-type 4
;atari800 -run ${outputFilePath}
;--------------------------------------------------- ;---------------------------------------------------
.def CART_VERSION = 0 .def CART_VERSION = 0
; if 1 - dual splash screen ; if 1 - dual splash screen
@@ -24,7 +26,7 @@
; (direct writes to screen memory - atari only :) ) ; (direct writes to screen memory - atari only :) )
;--------------------------------------------------- ;---------------------------------------------------
OPT r+ ; saves 10 bytes, and probably work :) : https://github.com/tebe6502/Mad-Assembler/issues/10 OPT r+ ; saves 10 bytes, and probably works :) https://github.com/tebe6502/Mad-Assembler/issues/10
;--------------------------------------------------- ;---------------------------------------------------
.macro build .macro build
@@ -40,30 +42,24 @@
icl 'definitions.asm' icl 'definitions.asm'
;--------------------------------------------------- ;---------------------------------------------------
AdditionalZPvariables = $20 AdditionalZPvariables = $20
.zpvar EplotX .word = AdditionalZPvariables .zpvar EplotX .word = AdditionalZPvariables
.zpvar EplotByte .word .zpvar EplotByte .word
.zpvar EplotY .byte .zpvar EplotY .byte
.zpvar Mpoint1X .word ; meteor first point X position .zpvar Mpoint1X .word ; meteor first point X position
.zpvar Mpoint2X .word ; meteor last point X position .zpvar Mpoint2X .word ; meteor last point X position
.zpvar Mpoint1Y .byte ; meteor first point Y position .zpvar Mpoint1Y .byte ; meteor first point Y position
.zpvar Mcounter .byte ; meteor length counter ( $ff - no meteor on sky ) .zpvar Mcounter .byte ; meteor length counter ( $ff - no meteor on sky )
.zpvar Mpoint2Y .byte ; meteor last point Y position .zpvar Mpoint2Y .byte ; meteor last point Y position
.zpvar MeteorsFlag .byte ; set 7th bit - block meteors .zpvar MeteorsFlag .byte ; set 7th bit - block meteors
.zpvar MeteorsRound .byte ; set 7th bit - block meteors in round .zpvar MeteorsRound .byte ; set 7th bit - block meteors in round
FirstZpageVariable = $51 FirstZpageVariable = $51
.zpvar DliColorBack .byte = FirstZpageVariable .zpvar DliColorBack .byte = FirstZpageVariable
.zpvar FirstKeypressDelay .byte
.zpvar ClearSky .byte ; $ff - Crear sky during drawmountains, 0 - no clear sky .zpvar ClearSky .byte ; $ff - Crear sky during drawmountains, 0 - no clear sky
.zpvar PaddleState .byte ; old state 2nd button for 2 buttons joysticks .zpvar PaddleState .byte ; old state 2nd button for 2 buttons joysticks
.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 RandomMountains .byte ; mountains type change after each turn flag
; (0 - round only, >0 - each turn)
.zpvar FastSoilDown .byte ; 0 - standard, >0 - fast
.zpvar JoystickNumber .byte .zpvar JoystickNumber .byte
.zpvar LazyFlag .byte ; 7 bit - run Lazy Darwin, 6 bit - run Lazy Boy or Darwin (!) after inventory .zpvar LazyFlag .byte ; 7 bit - run Lazy Darwin, 6 bit - run Lazy Boy or Darwin (!) after inventory
; 0 - nothing ; 0 - nothing
@@ -77,7 +73,6 @@ FirstZpageVariable = $51
.zpvar CharCode .byte .zpvar CharCode .byte
.zpvar fontind .word .zpvar fontind .word
.zpvar tanknr .byte .zpvar tanknr .byte
.zpvar TankSequencePointer .byte
.zpvar oldplot .word .zpvar oldplot .word
.zpvar xc .word .zpvar xc .word
.zpvar temp .word ; temporary word for the most embeded loops only .zpvar temp .word ; temporary word for the most embeded loops only
@@ -110,7 +105,6 @@ FirstZpageVariable = $51
.zpvar dliCounter .byte .zpvar dliCounter .byte
.zpvar pressTimer .byte .zpvar pressTimer .byte
.zpvar NTSCcounter .byte .zpvar NTSCcounter .byte
.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 .zpvar ScrollFlag .byte
@@ -141,7 +135,15 @@ FirstZpageVariable = $51
.zpvar vx_ .word ; 4 bytes .zpvar vx_ .word ; 4 bytes
.zpvar HitFlag .byte ; $ff when missile hit ground, $00 when no hit, .zpvar HitFlag .byte ; $ff when missile hit ground, $00 when no hit,
; $01-$06 tank index+1 when hit tank ; $01-$06 tank index+1 when hit tank
.zpvar PositionOnTheList .byte ; pointer position on the list being displayed .zpvar PositionOnTheList .byte ; pointer position on the list being displayed
.zpvar FirstKeypressDelay .byte
.zpvar IsEndOfTheFallFlag .byte ;for small speedup ground falling
.zpvar TankSequencePointer .byte
.zpvar WindChangeInRound .byte ; wind change after each turn (not round only) flag
; (0 - round only, >0 - each turn)
.zpvar RandomMountains .byte ; mountains type change after each turn flag
; (0 - round only, >0 - each turn)
.zpvar FastSoilDown .byte ; 0 - standard, >0 - fast
.zpvar XHit .word .zpvar XHit .word
.zpvar delta .word .zpvar delta .word
.zpvar HowMuchToFall .byte .zpvar HowMuchToFall .byte
@@ -373,10 +375,10 @@ NoRMT_PALchange
; 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)
lda #$ff ; initial value lda #$ff ; initial value
sta sfx_effect sta sfx_effect
sta Mcounter sta Mcounter
sta MeteorsFlag sta MeteorsFlag
@@ -385,12 +387,12 @@ NoRMT_PALchange
.IF TARGET = 5200 .IF TARGET = 5200
mva #$0f STICK0 mva #$0f STICK0
mva #$04 CONSOL5200 ; Speaker off, Pots enabled, port #1 selected mva #$04 CONSOL5200 ; Speaker off, Pots enabled, port #1 selected
mwa #kb_continue VKEYCNT ; Keyboard handler mwa #kb_continue VKEYCNT ; Keyboard handler
.ENDIF .ENDIF
VMAIN VBLinterrupt,7 ; jsr SetVBL VMAIN VBLinterrupt,7 ; jsr SetVBL
mva #2 chactl ; necessary for 5200 mva #2 chactl ; necessary for 5200
;-------------------------------------------------- ;--------------------------------------------------
; Main program of the game ; Main program of the game
@@ -418,19 +420,19 @@ getKeyAfterWait
.IF TARGET = 800 .IF TARGET = 800
lda SKSTAT lda SKSTAT
cmp #$ff cmp #$ff
beq checkJoyGetKey ; key not pressed, check Joy beq checkJoyGetKey ; key not pressed, check Joy
cmp #$f7 ; SHIFT cmp #$f7 ; SHIFT
beq checkJoyGetKey beq checkJoyGetKey
.ELIF TARGET = 5200 .ELIF TARGET = 5200
lda SkStatSimulator lda SkStatSimulator
and #%11111110 and #%11111110
bne checkJoyGetKey ; key not pressed, check Joy bne checkJoyGetKey ; key not pressed, check Joy
.ENDIF .ENDIF
lda kbcode lda kbcode
cmp #@kbcode._none cmp #@kbcode._none
beq checkJoyGetKey beq checkJoyGetKey
and #$3f ;CTRL and SHIFT ellimination and #$3f ; CTRL and SHIFT ellimination
cmp #@kbcode._esc ; 28 ; ESC cmp #@kbcode._esc ; 28 ; ESC
bne getkeyend bne getkeyend
mvy #$80 escFlag mvy #$80 escFlag
bne getkeyend bne getkeyend
@@ -451,33 +453,33 @@ notpressedJoyGetKey
;fire ;fire
lda STRIG0 lda STRIG0
beq JoyButton beq JoyButton
.IF TARGET = 800 ; Second joy button , Select and Option key only on A800 .IF TARGET = 800 ; Second joy button , Select and Option key only on A800
jsr Check2button jsr Check2button
bcc SecondButton bcc SecondButton
bne checkSelectKey bne checkSelectKey
checkSelectKey checkSelectKey
lda CONSOL lda CONSOL
and #%00000010 ; Select and #%00000010 ; Select
beq SelectPressed beq SelectPressed
lda CONSOL lda CONSOL
and #%00000100 ; Option and #%00000100 ; Option
.ENDIF .ENDIF
bne getKeyAfterWait bne getKeyAfterWait
OptionPressed OptionPressed
lda #@kbcode._atari ; Option key lda #@kbcode._atari ; Option key
bne getkeyend bne getkeyend
SecondButton SecondButton
SelectPressed SelectPressed
lda #@kbcode._tab ; Select key lda #@kbcode._tab ; Select key
bne getkeyend bne getkeyend
JoyButton JoyButton
lda #@kbcode._ret ;Return key lda #@kbcode._ret ; Return key
getkeyend getkeyend
ldy #0 ldy #0
sty ATRACT ; reset atract mode sty ATRACT ; reset atract mode
mvy #sfx_keyclick sfx_effect mvy #sfx_keyclick sfx_effect
rts rts
.IF TARGET = 800 ; Second joy button only on A800 .IF TARGET = 800 ; Second joy button only on A800
Check2button Check2button
lda PADDL0 lda PADDL0
and #$c0 and #$c0
@@ -493,16 +495,16 @@ Check2button
;-------------------------------------------------- ;--------------------------------------------------
jsr WaitForKeyRelease jsr WaitForKeyRelease
lda kbcode lda kbcode
and #$3f ; CTRL and SHIFT ellimination and #$3f ; CTRL and SHIFT ellimination
rts rts
.endp .endp
;-------------------------------------------------- ;--------------------------------------------------
.proc WaitForKeyRelease .proc WaitForKeyRelease
;-------------------------------------------------- ;--------------------------------------------------
lda #128-KeyRepeatSpeed ; tricky lda #128-KeyRepeatSpeed ; tricky
sec sec
sbc FirstKeypressDelay ; tricky 2 :) sbc FirstKeypressDelay ; tricky 2 :)
sta pressTimer sta pressTimer
StillWait StillWait
bit pressTimer bit pressTimer
@@ -518,7 +520,7 @@ StillWait
cmp #$ff cmp #$ff
bne StillWait bne StillWait
lda CONSOL lda CONSOL
and #%00000110 ; Select and Option only and #%00000110 ; Select and Option only
cmp #%00000110 cmp #%00000110
bne StillWait bne StillWait
.ELIF TARGET = 5200 .ELIF TARGET = 5200
@@ -529,7 +531,7 @@ StillWait
KeyReleased KeyReleased
mva #FirstKeySpeed FirstKeypressDelay mva #FirstKeySpeed FirstKeypressDelay
rts rts
KeyAutoReleased ; autorepeat KeyAutoReleased ; autorepeat
mva #0 FirstKeypressDelay mva #0 FirstKeypressDelay
rts rts
.endp .endp
@@ -552,13 +554,12 @@ KeyAutoReleased ; autorepeat
;check demo mode ;check demo mode
ldx numberOfPlayers ldx numberOfPlayers
dex dex
checkForHuman ; if all in skillTable other than 0 then switch to DEMO MODE checkForHuman ; if all in skillTable other than 0 then switch to DEMO MODE
lda skillTable,x lda skillTable,x
beq peopleAreHere beq peopleAreHere
dex dex
bpl checkForHuman bpl checkForHuman
; no people, just wait a bit ; no people, just wait a bit
;pause 150
ldy #75 ldy #75
jmp PauseYFrames jmp PauseYFrames
; rts ; rts
@@ -569,15 +570,15 @@ peopleAreHere
;-------------------------------------------------- ;--------------------------------------------------
MakeDarkScreen MakeDarkScreen
;-------------------------------------------------- ;--------------------------------------------------
jsr PMoutofScreen ; hide P/M jsr PMoutofScreen ; hide P/M
mva #0 dmactls ; dark screen mva #0 dmactls ; dark screen
; and wait one frame :) ; and wait one frame :)
;-------------------------------------------------- ;--------------------------------------------------
.proc WaitOneFrame .proc WaitOneFrame
;-------------------------------------------------- ;--------------------------------------------------
lda CONSOL lda CONSOL
and #%00000001 ; START KEY and #%00000001 ; START KEY
seq:wait ; or waitRTC ? seq:wait ; or waitRTC ?
rts rts
.endp .endp
@@ -604,28 +605,28 @@ MakeDarkScreen
; Select and Option ; Select and Option
lda CONSOL lda CONSOL
and #%00000101 ; Start + Option and #%00000101 ; Start + Option
beq QuitToGameover beq QuitToGameover
lda SKSTAT lda SKSTAT
cmp #$ff cmp #$ff
jeq nokeys jeq nokeys
cmp #$f7 ; SHIFT cmp #$f7 ; SHIFT
jeq nokeys jeq nokeys
lda kbcode lda kbcode
and #%10111111 ; SHIFT elimination and #%10111111 ; SHIFT elimination
cmp #@kbcode._O ; $08 ; O cmp #@kbcode._O ; $08 ; O
bne CheckEsc bne CheckEsc
jsr AreYouSure jsr AreYouSure
bit escFlag bit escFlag
bpl nokeys bpl nokeys
;---O pressed-quit game to game over screen--- ;---O pressed-quit game to game over screen---
QuitToGameover QuitToGameover
mva #$C0 escFlag ; bits 7 and 6 set mva #$C0 escFlag ; bits 7 and 6 set
rts rts
CheckEsc CheckEsc
cmp #@kbcode._esc ; 28 ; ESC cmp #@kbcode._esc ; 28 ; ESC
bne nokeys bne nokeys
DisplayAreYouSure DisplayAreYouSure
jsr AreYouSure jsr AreYouSure
@@ -640,7 +641,7 @@ nokeys
;-------------------------------------------------- ;--------------------------------------------------
ldy flyDelay ldy flyDelay
Y lda CONSOL Y lda CONSOL
and #%00000001 ; START KEY and #%00000001 ; START KEY
beq noShellDelay beq noShellDelay
DelayLoop DelayLoop
lda VCOUNT lda VCOUNT
@@ -657,14 +658,14 @@ noShellDelay
; starting song line 0-255 to A reg ; starting song line 0-255 to A reg
;-------------------------------------------------- ;--------------------------------------------------
cmp #song_main_menu cmp #song_main_menu
beq noingame ; noMusic blocks only ingame songs beq noingame ; noMusic blocks only ingame songs
bit noMusic bit noMusic
spl:lda #song_silencio spl:lda #song_silencio
noingame noingame
mvx #$ff RMT_blocked mvx #$ff RMT_blocked
ldx #<MODUL ; low byte of RMT module to X reg ldx #<MODUL ; low byte of RMT module to X reg
ldy #>MODUL ; hi byte of RMT module to Y reg ldy #>MODUL ; hi byte of RMT module to Y reg
jsr RASTERMUSICTRACKER ; Init jsr RASTERMUSICTRACKER ; Init
mva #0 RMT_blocked mva #0 RMT_blocked
rts rts
.endp .endp
@@ -708,7 +709,7 @@ noingame
icl 'artwork/talk.asm' icl 'artwork/talk.asm'
;---------------------------------------------- ;----------------------------------------------
TankFont TankFont
ins 'artwork/tanksv4.fnt',+0,384 ; 48 characters only ins 'artwork/tanksv4.fnt',+0,384 ; 48 characters only
;---------------------------------------------- ;----------------------------------------------
font4x4 font4x4
ins 'artwork/font4x4s.bmp',+62 ins 'artwork/font4x4s.bmp',+62
@@ -721,7 +722,7 @@ font4x4
lda TankNr lda TankNr
asl asl
asl asl
asl ; 8 chars per name asl ; 8 chars per name
tax tax
@ lda CheatName,y @ lda CheatName,y
sec sec
@@ -767,10 +768,10 @@ EndofBFGDLI
.endp .endp
; ------------------------ ; ------------------------
.proc BFGblink .proc BFGblink
SetDLI DLIinterruptBFG ; blinking on SetDLI DLIinterruptBFG ; blinking on
ldy #50 ldy #50
jsr PauseYFrames jsr PauseYFrames
SetDLI DLIinterruptGraph ; blinking off SetDLI DLIinterruptGraph ; blinking off
rts rts
.endp .endp
;-------------------------------------------------- ;--------------------------------------------------
@@ -781,16 +782,17 @@ EndofBFGDLI
.ECHO "Bytes left: ",$b000-* .ECHO "Bytes left: ",$b000-*
org $b000 ;address of RMT module org $b000 ; address of RMT module
MODUL MODUL
;RMT module is standard Atari binary file already ; RMT module is standard Atari binary file already
ins "artwork/sfx/scorch_str9-NTSC.rmt",+6 ;include music RMT module ; include music RMT module:
ins "artwork/sfx/scorch_str9-NTSC.rmt",+6
MODULEND MODULEND
;---------------------------------------------- ;----------------------------------------------
icl 'constants_top.asm' icl 'constants_top.asm'
;---------------------------------------------- ;----------------------------------------------
.ECHO "Bytes on top left: ",$bfe8-* ;ROM_SETTINGS-* .ECHO "Bytes on top left: ",$bfe8-* ; ROM_SETTINGS-*
.IF TARGET = 800 .IF TARGET = 800
run FirstSTART run FirstSTART
.ELIF TARGET = 5200 .ELIF TARGET = 5200
BIN
View File
Binary file not shown.