mirror of
https://github.com/pkali/scorch_src.git
synced 2026-05-21 21:35:16 +02:00
Compare commits
35 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6377e9a936 | |||
| 3654743456 | |||
| 378ac8b0f6 | |||
| 76a20e26fb | |||
| 443b62e9e6 | |||
| ecc8e11d13 | |||
| da2c027fee | |||
| 6425431496 | |||
| f3b9092777 | |||
| 8d188f4497 | |||
| f9092110ac | |||
| 0968613b02 | |||
| 95303380e7 | |||
| 174dbe0bed | |||
| d72ca57181 | |||
| 01160ff4b9 | |||
| 6fc2882a6e | |||
| c15a80443c | |||
| 415bfbba2b | |||
| 2addb0905e | |||
| fe55f94702 | |||
| 0693e5d20e | |||
| 9c5c701ca1 | |||
| 2a83fa962d | |||
| 2c01691bf5 | |||
| fad8c2c06a | |||
| 58eec3dc9c | |||
| a98c0b81b9 | |||
| 2471ca7282 | |||
| 4078722b29 | |||
| e782e101f5 | |||
| 8a73202fa3 | |||
| 0ad513d5cb | |||
| c9855b66ba | |||
| cad3a0cf38 |
@@ -0,0 +1,643 @@
|
|||||||
|
;
|
||||||
|
; Raster Music Tracker, RMT Atari routine version 1.20090108
|
||||||
|
; (c) Radek Sterba, Raster/C.P.U., 2002 - 2009
|
||||||
|
; http://raster.atari.org
|
||||||
|
;
|
||||||
|
; Warnings:
|
||||||
|
;
|
||||||
|
; 1. RMT player routine needs 19 itself reserved bytes in zero page (no accessed
|
||||||
|
; from any other routines) as well as cca 1KB of memory before the "PLAYER"
|
||||||
|
; address for frequency tables and functionary variables. It's:
|
||||||
|
; a) from PLAYER-$03c0 to PLAYER for stereo RMTplayer
|
||||||
|
; b) from PLAYER-$0320 to PLAYER for mono RMTplayer
|
||||||
|
;
|
||||||
|
; 2. RMT player routine MUST (!!!) be compiled from the begin of the memory page.
|
||||||
|
; i.e. "PLAYER" address can be $..00 only!
|
||||||
|
;
|
||||||
|
; 3. Because of RMTplayer provides a lot of effects, it spent a lot of CPU time.
|
||||||
|
;
|
||||||
|
; STEREOMODE equ 0..3 ;0 => compile RMTplayer for 4 tracks mono
|
||||||
|
; ;1 => compile RMTplayer for 8 tracks stereo
|
||||||
|
; ;2 => compile RMTplayer for 4 tracks stereo L1 R2 R3 L4
|
||||||
|
; ;3 => compile RMTplayer for 4 tracks stereo L1 L2 R3 R4
|
||||||
|
|
||||||
|
TRACKS equ 4
|
||||||
|
; RMT FEATures definitions file
|
||||||
|
; For optimizations of RMT player routine to concrete RMT modul only!
|
||||||
|
icl "feat.txt"
|
||||||
|
;FEAT_EFFECTS equ FEAT_EFFECTVIBRATO||FEAT_EFFECTFSHIFT
|
||||||
|
;
|
||||||
|
; RMT ZeroPage addresses
|
||||||
|
.zpvar p_tis .word
|
||||||
|
p_instrstable = p_tis
|
||||||
|
.zpvar p_trackslbstable .word
|
||||||
|
.zpvar p_trackshbstable .word
|
||||||
|
.zpvar p_song .word
|
||||||
|
.zpvar ns .word
|
||||||
|
.zpvar nr .word
|
||||||
|
.zpvar nt .byte
|
||||||
|
.zpvar reg1 .byte
|
||||||
|
.zpvar reg2 .byte
|
||||||
|
.zpvar reg3 .byte
|
||||||
|
.zpvar tmp .byte
|
||||||
|
.zpvar v_audctl .byte ; de-self-modification vars
|
||||||
|
.zpvar v_ainstrspeed .byte
|
||||||
|
.zpvar v_maxtracklen .byte
|
||||||
|
.zpvar v_abeat .byte
|
||||||
|
.zpvar v_bspeed .byte
|
||||||
|
.zpvar v_speed .byte
|
||||||
|
.zpvar RMTSFXVOLUME .byte
|
||||||
|
|
||||||
|
; MOVED TO variables.asm
|
||||||
|
; org PLAYER-$400+$e0
|
||||||
|
;track_variables
|
||||||
|
;trackn_db .ds TRACKS
|
||||||
|
;trackn_hb .ds TRACKS
|
||||||
|
;trackn_idx .ds TRACKS
|
||||||
|
;trackn_pause .ds TRACKS
|
||||||
|
;trackn_note .ds TRACKS
|
||||||
|
;trackn_volume .ds TRACKS
|
||||||
|
;trackn_distor .ds TRACKS
|
||||||
|
;trackn_shiftfrq .ds TRACKS
|
||||||
|
;trackn_instrx2 .ds TRACKS
|
||||||
|
;trackn_instrdb .ds TRACKS
|
||||||
|
;trackn_instrhb .ds TRACKS
|
||||||
|
;trackn_instridx .ds TRACKS
|
||||||
|
;trackn_instrlen .ds TRACKS
|
||||||
|
;trackn_instrlop .ds TRACKS
|
||||||
|
;trackn_instrreachend .ds TRACKS
|
||||||
|
;trackn_volumeslidedepth .ds TRACKS
|
||||||
|
;trackn_volumeslidevalue .ds TRACKS
|
||||||
|
;trackn_effdelay .ds TRACKS
|
||||||
|
;trackn_effvibratoa .ds TRACKS
|
||||||
|
;trackn_effshift .ds TRACKS
|
||||||
|
;trackn_tabletypespeed .ds TRACKS
|
||||||
|
;trackn_tablenote .ds TRACKS
|
||||||
|
;trackn_tablea .ds TRACKS
|
||||||
|
;trackn_tableend .ds TRACKS
|
||||||
|
;trackn_tablelop .ds TRACKS
|
||||||
|
;trackn_tablespeeda .ds TRACKS
|
||||||
|
;trackn_command .ds TRACKS
|
||||||
|
;trackn_filter .ds TRACKS
|
||||||
|
;trackn_audf .ds TRACKS
|
||||||
|
;trackn_audc .ds TRACKS
|
||||||
|
;trackn_audctl .ds TRACKS
|
||||||
|
;v_aspeed .ds 1
|
||||||
|
;track_endvariables
|
||||||
|
|
||||||
|
INSTRPAR equ 12
|
||||||
|
tabbeganddistor
|
||||||
|
dta frqtabpure-frqtab,$00
|
||||||
|
dta frqtabpure-frqtab,$20
|
||||||
|
dta frqtabpure-frqtab,$40
|
||||||
|
dta frqtabbass1-frqtab,$c0
|
||||||
|
dta frqtabpure-frqtab,$80
|
||||||
|
dta frqtabpure-frqtab,$a0
|
||||||
|
dta frqtabbass1-frqtab,$c0
|
||||||
|
dta frqtabbass2-frqtab,$c0
|
||||||
|
vibtabbeg dta 0,vib1-vib0,vib2-vib0,vib3-vib0
|
||||||
|
vib0 dta 0
|
||||||
|
vib1 dta 1,-1,-1,1
|
||||||
|
vib2 dta 1,0,-1,-1,0,1
|
||||||
|
vib3 dta 1,1,0,-1,-1,-1,-1,0,1,1
|
||||||
|
vibtabnext
|
||||||
|
dta vib0-vib0+0
|
||||||
|
dta vib1-vib0+1,vib1-vib0+2,vib1-vib0+3,vib1-vib0+0
|
||||||
|
dta vib2-vib0+1,vib2-vib0+2,vib2-vib0+3,vib2-vib0+4,vib2-vib0+5,vib2-vib0+0
|
||||||
|
dta vib3-vib0+1,vib3-vib0+2,vib3-vib0+3,vib3-vib0+4,vib3-vib0+5,vib3-vib0+6,vib3-vib0+7,vib3-vib0+8,vib3-vib0+9,vib3-vib0+0
|
||||||
|
.align $100
|
||||||
|
frqtab
|
||||||
|
ERT [<frqtab]!=0 ;* frqtab must begin at the memory page bound! (i.e. $..00 address)
|
||||||
|
frqtabbass1
|
||||||
|
dta $BF,$B6,$AA,$A1,$98,$8F,$89,$80,$F2,$E6,$DA,$CE,$BF,$B6,$AA,$A1
|
||||||
|
dta $98,$8F,$89,$80,$7A,$71,$6B,$65,$5F,$5C,$56,$50,$4D,$47,$44,$3E
|
||||||
|
dta $3C,$38,$35,$32,$2F,$2D,$2A,$28,$25,$23,$21,$1F,$1D,$1C,$1A,$18
|
||||||
|
dta $17,$16,$14,$13,$12,$11,$10,$0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07
|
||||||
|
frqtabbass2
|
||||||
|
dta $FF,$F1,$E4,$D8,$CA,$C0,$B5,$AB,$A2,$99,$8E,$87,$7F,$79,$73,$70
|
||||||
|
dta $66,$61,$5A,$55,$52,$4B,$48,$43,$3F,$3C,$39,$37,$33,$30,$2D,$2A
|
||||||
|
dta $28,$25,$24,$21,$1F,$1E,$1C,$1B,$19,$17,$16,$15,$13,$12,$11,$10
|
||||||
|
dta $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00
|
||||||
|
frqtabpure
|
||||||
|
dta $F3,$E6,$D9,$CC,$C1,$B5,$AD,$A2,$99,$90,$88,$80,$79,$72,$6C,$66
|
||||||
|
dta $60,$5B,$55,$51,$4C,$48,$44,$40,$3C,$39,$35,$32,$2F,$2D,$2A,$28
|
||||||
|
dta $25,$23,$21,$1F,$1D,$1C,$1A,$18,$17,$16,$14,$13,$12,$11,$10,$0F
|
||||||
|
dta $0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00,$00
|
||||||
|
|
||||||
|
.align $100
|
||||||
|
volumetab
|
||||||
|
dta $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||||
|
dta $00,$00,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01
|
||||||
|
dta $00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$02,$02,$02,$02
|
||||||
|
dta $00,$00,$00,$01,$01,$01,$01,$01,$02,$02,$02,$02,$02,$03,$03,$03
|
||||||
|
dta $00,$00,$01,$01,$01,$01,$02,$02,$02,$02,$03,$03,$03,$03,$04,$04
|
||||||
|
dta $00,$00,$01,$01,$01,$02,$02,$02,$03,$03,$03,$04,$04,$04,$05,$05
|
||||||
|
dta $00,$00,$01,$01,$02,$02,$02,$03,$03,$04,$04,$04,$05,$05,$06,$06
|
||||||
|
dta $00,$00,$01,$01,$02,$02,$03,$03,$04,$04,$05,$05,$06,$06,$07,$07
|
||||||
|
dta $00,$01,$01,$02,$02,$03,$03,$04,$04,$05,$05,$06,$06,$07,$07,$08
|
||||||
|
dta $00,$01,$01,$02,$02,$03,$04,$04,$05,$05,$06,$07,$07,$08,$08,$09
|
||||||
|
dta $00,$01,$01,$02,$03,$03,$04,$05,$05,$06,$07,$07,$08,$09,$09,$0A
|
||||||
|
dta $00,$01,$01,$02,$03,$04,$04,$05,$06,$07,$07,$08,$09,$0A,$0A,$0B
|
||||||
|
dta $00,$01,$02,$02,$03,$04,$05,$06,$06,$07,$08,$09,$0A,$0A,$0B,$0C
|
||||||
|
dta $00,$01,$02,$03,$03,$04,$05,$06,$07,$08,$09,$0A,$0A,$0B,$0C,$0D
|
||||||
|
dta $00,$01,$02,$03,$04,$05,$06,$07,$07,$08,$09,$0A,$0B,$0C,$0D,$0E
|
||||||
|
dta $00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F
|
||||||
|
;*
|
||||||
|
;* Set of RMT main vectors:
|
||||||
|
;*
|
||||||
|
RASTERMUSICTRACKER
|
||||||
|
jmp rmt_init
|
||||||
|
jmp rmt_play
|
||||||
|
jmp rmt_p3
|
||||||
|
jmp rmt_silence
|
||||||
|
jmp SetPokey
|
||||||
|
jmp rmt_sfx ;* A=note(0,..,60),X=channel(0,..,3 or 0,..,7),Y=instrument*2(0,2,4,..,126)
|
||||||
|
rmt_init
|
||||||
|
stx ns
|
||||||
|
sty ns+1
|
||||||
|
pha
|
||||||
|
; IFT track_endvariables-track_variables>255
|
||||||
|
; ldy #0
|
||||||
|
; tya
|
||||||
|
;ri0 sta track_variables,y
|
||||||
|
; sta track_endvariables-$100,y
|
||||||
|
; iny
|
||||||
|
; bne ri0
|
||||||
|
; ELS
|
||||||
|
ldy #track_endvariables-track_variables
|
||||||
|
lda #0
|
||||||
|
ri0 sta track_variables-1,y
|
||||||
|
dey
|
||||||
|
bne ri0
|
||||||
|
; EIF
|
||||||
|
ldy #4
|
||||||
|
lda (ns),y
|
||||||
|
sta v_maxtracklen
|
||||||
|
iny
|
||||||
|
lda (ns),y
|
||||||
|
sta v_speed
|
||||||
|
ldy #8
|
||||||
|
ri1 lda (ns),y
|
||||||
|
sta p_tis-8,y
|
||||||
|
iny
|
||||||
|
cpy #8+8
|
||||||
|
bne ri1
|
||||||
|
pla
|
||||||
|
pha
|
||||||
|
asl @
|
||||||
|
asl @
|
||||||
|
clc
|
||||||
|
adc p_song
|
||||||
|
sta p_song
|
||||||
|
pla
|
||||||
|
php
|
||||||
|
and #$c0
|
||||||
|
asl @
|
||||||
|
rol @
|
||||||
|
rol @
|
||||||
|
plp
|
||||||
|
adc p_song+1
|
||||||
|
sta p_song+1
|
||||||
|
jsr GetSongLineTrackLineInitOfNewSetInstrumentsOnlyRmtp3
|
||||||
|
rmt_silence
|
||||||
|
lda #0
|
||||||
|
sta $d208
|
||||||
|
ldy #3
|
||||||
|
sty $d20f
|
||||||
|
ldy #8
|
||||||
|
si1 sta $d200,y
|
||||||
|
dey
|
||||||
|
bpl si1
|
||||||
|
lda #FEAT_INSTRSPEED
|
||||||
|
rts
|
||||||
|
GetSongLineTrackLineInitOfNewSetInstrumentsOnlyRmtp3
|
||||||
|
GetSongLine
|
||||||
|
ldx #0
|
||||||
|
stx v_abeat
|
||||||
|
nn0
|
||||||
|
nn1 txa
|
||||||
|
tay
|
||||||
|
lda (p_song),y
|
||||||
|
cmp #$fe
|
||||||
|
bcs nn2
|
||||||
|
tay
|
||||||
|
lda (p_trackslbstable),y
|
||||||
|
sta trackn_db,x
|
||||||
|
lda (p_trackshbstable),y
|
||||||
|
nn1a sta trackn_hb,x
|
||||||
|
lda #0
|
||||||
|
sta trackn_idx,x
|
||||||
|
lda #1
|
||||||
|
nn1a2 sta trackn_pause,x
|
||||||
|
lda #$80
|
||||||
|
sta trackn_instrx2,x
|
||||||
|
inx
|
||||||
|
xtracks01 cpx #TRACKS
|
||||||
|
bne nn1
|
||||||
|
lda p_song
|
||||||
|
clc
|
||||||
|
xtracks02 adc #TRACKS
|
||||||
|
sta p_song
|
||||||
|
bcc GetTrackLine
|
||||||
|
inc p_song+1
|
||||||
|
nn1b
|
||||||
|
jmp GetTrackLine
|
||||||
|
nn2
|
||||||
|
beq nn3
|
||||||
|
nn2a
|
||||||
|
lda #0
|
||||||
|
beq nn1a2
|
||||||
|
nn3
|
||||||
|
ldy #2
|
||||||
|
lda (p_song),y
|
||||||
|
tax
|
||||||
|
iny
|
||||||
|
lda (p_song),y
|
||||||
|
sta p_song+1
|
||||||
|
stx p_song
|
||||||
|
ldx #0
|
||||||
|
beq nn0
|
||||||
|
GetTrackLine
|
||||||
|
oo0
|
||||||
|
oo0a
|
||||||
|
lda v_speed
|
||||||
|
|
||||||
|
sta v_bspeed
|
||||||
|
ldx #-1
|
||||||
|
oo1
|
||||||
|
inx
|
||||||
|
dec trackn_pause,x
|
||||||
|
bne oo1x
|
||||||
|
oo1b
|
||||||
|
lda trackn_db,x
|
||||||
|
sta ns
|
||||||
|
lda trackn_hb,x
|
||||||
|
sta ns+1
|
||||||
|
oo1i
|
||||||
|
ldy trackn_idx,x
|
||||||
|
inc trackn_idx,x
|
||||||
|
lda (ns),y
|
||||||
|
sta reg1
|
||||||
|
and #$3f
|
||||||
|
cmp #61
|
||||||
|
beq oo1a
|
||||||
|
bcs oo2
|
||||||
|
sta trackn_note,x
|
||||||
|
iny
|
||||||
|
lda (ns),y
|
||||||
|
lsr @
|
||||||
|
and #$3f*2
|
||||||
|
sta trackn_instrx2,x
|
||||||
|
oo1a
|
||||||
|
lda #1
|
||||||
|
sta trackn_pause,x
|
||||||
|
ldy trackn_idx,x
|
||||||
|
inc trackn_idx,x
|
||||||
|
lda (ns),y
|
||||||
|
lsr @
|
||||||
|
ror reg1
|
||||||
|
lsr @
|
||||||
|
ror reg1
|
||||||
|
lda reg1
|
||||||
|
and #$f0
|
||||||
|
sta trackn_volume,x
|
||||||
|
oo1x
|
||||||
|
xtracks03sub1 cpx #TRACKS-1
|
||||||
|
bne oo1
|
||||||
|
lda v_bspeed
|
||||||
|
|
||||||
|
sta v_speed
|
||||||
|
sta v_aspeed
|
||||||
|
jmp InitOfNewSetInstrumentsOnly
|
||||||
|
oo2
|
||||||
|
cmp #63
|
||||||
|
beq oo63
|
||||||
|
lda reg1
|
||||||
|
and #$c0
|
||||||
|
beq oo62_b
|
||||||
|
asl @
|
||||||
|
rol @
|
||||||
|
rol @
|
||||||
|
sta trackn_pause,x
|
||||||
|
jmp oo1x
|
||||||
|
oo62_b
|
||||||
|
iny
|
||||||
|
lda (ns),y
|
||||||
|
sta trackn_pause,x
|
||||||
|
inc trackn_idx,x
|
||||||
|
jmp oo1x
|
||||||
|
oo63
|
||||||
|
lda reg1
|
||||||
|
bmi oo63_1X
|
||||||
|
iny
|
||||||
|
lda (ns),y
|
||||||
|
sta v_bspeed
|
||||||
|
inc trackn_idx,x
|
||||||
|
jmp oo1i
|
||||||
|
oo63_1X
|
||||||
|
cmp #255
|
||||||
|
beq oo63_11
|
||||||
|
iny
|
||||||
|
lda (ns),y
|
||||||
|
sta trackn_idx,x
|
||||||
|
jmp oo1i
|
||||||
|
oo63_11
|
||||||
|
jmp GetSongLine
|
||||||
|
p2xrmtp3 jmp rmt_p3
|
||||||
|
p2x0 dex
|
||||||
|
bmi p2xrmtp3
|
||||||
|
InitOfNewSetInstrumentsOnly
|
||||||
|
p2x1 ldy trackn_instrx2,x
|
||||||
|
bmi p2x0
|
||||||
|
jsr SetUpInstrumentY2
|
||||||
|
jmp p2x0
|
||||||
|
rmt_sfx
|
||||||
|
sta trackn_note,x
|
||||||
|
lda RMTSFXVOLUME ;* sfx note volume*16
|
||||||
|
;* label for sfx note volume parameter overwriting
|
||||||
|
sta trackn_volume,x
|
||||||
|
SetUpInstrumentY2
|
||||||
|
lda (p_instrstable),y
|
||||||
|
sta trackn_instrdb,x
|
||||||
|
sta nt
|
||||||
|
iny
|
||||||
|
lda (p_instrstable),y
|
||||||
|
sta trackn_instrhb,x
|
||||||
|
sta nt+1
|
||||||
|
lda #1
|
||||||
|
sta trackn_filter,x
|
||||||
|
tay
|
||||||
|
lda (nt),y
|
||||||
|
sta trackn_tablelop,x
|
||||||
|
iny
|
||||||
|
lda (nt),y
|
||||||
|
sta trackn_instrlen,x
|
||||||
|
iny
|
||||||
|
lda (nt),y
|
||||||
|
sta trackn_instrlop,x
|
||||||
|
iny
|
||||||
|
lda (nt),y
|
||||||
|
sta trackn_tabletypespeed,x
|
||||||
|
sta trackn_tablespeeda,x
|
||||||
|
iny
|
||||||
|
lda (nt),y
|
||||||
|
sta trackn_audctl,x
|
||||||
|
iny
|
||||||
|
lda (nt),y
|
||||||
|
sta trackn_volumeslidedepth,x
|
||||||
|
ldy #8
|
||||||
|
lda (nt),y
|
||||||
|
sta trackn_effdelay,x
|
||||||
|
iny
|
||||||
|
lda (nt),y
|
||||||
|
tay
|
||||||
|
lda vibtabbeg,y
|
||||||
|
sta trackn_effvibratoa,x
|
||||||
|
ldy #10
|
||||||
|
lda (nt),y
|
||||||
|
sta trackn_effshift,x
|
||||||
|
lda #128
|
||||||
|
sta trackn_volumeslidevalue,x
|
||||||
|
sta trackn_instrx2,x
|
||||||
|
asl @
|
||||||
|
sta trackn_instrreachend,x
|
||||||
|
sta trackn_shiftfrq,x
|
||||||
|
tay
|
||||||
|
lda (nt),y
|
||||||
|
sta trackn_tableend,x
|
||||||
|
adc #0
|
||||||
|
sta trackn_instridx,x
|
||||||
|
lda #INSTRPAR
|
||||||
|
sta trackn_tablea,x
|
||||||
|
tay
|
||||||
|
lda (nt),y
|
||||||
|
sta trackn_tablenote,x
|
||||||
|
xata_rtshere
|
||||||
|
rts
|
||||||
|
rmt_play
|
||||||
|
rmt_p0
|
||||||
|
jsr SetPokey
|
||||||
|
rmt_p1
|
||||||
|
rmt_p2
|
||||||
|
dec v_aspeed
|
||||||
|
bne rmt_p3
|
||||||
|
inc v_abeat
|
||||||
|
lda v_abeat
|
||||||
|
|
||||||
|
cmp v_maxtracklen
|
||||||
|
|
||||||
|
beq p2o3
|
||||||
|
jmp GetTrackLine
|
||||||
|
p2o3
|
||||||
|
jmp GetSongLineTrackLineInitOfNewSetInstrumentsOnlyRmtp3
|
||||||
|
go_ppnext jmp ppnext
|
||||||
|
rmt_p3
|
||||||
|
lda #>frqtab
|
||||||
|
sta nr+1
|
||||||
|
xtracks05sub1 ldx #TRACKS-1
|
||||||
|
pp1
|
||||||
|
lda trackn_instrhb,x
|
||||||
|
beq go_ppnext
|
||||||
|
sta ns+1
|
||||||
|
lda trackn_instrdb,x
|
||||||
|
sta ns
|
||||||
|
ldy trackn_instridx,x
|
||||||
|
lda (ns),y
|
||||||
|
sta reg1
|
||||||
|
iny
|
||||||
|
lda (ns),y
|
||||||
|
sta reg2
|
||||||
|
iny
|
||||||
|
lda (ns),y
|
||||||
|
sta reg3
|
||||||
|
iny
|
||||||
|
tya
|
||||||
|
cmp trackn_instrlen,x
|
||||||
|
bcc pp2
|
||||||
|
beq pp2
|
||||||
|
lda #$80
|
||||||
|
sta trackn_instrreachend,x
|
||||||
|
pp1b
|
||||||
|
lda trackn_instrlop,x
|
||||||
|
pp2 sta trackn_instridx,x
|
||||||
|
lda reg1
|
||||||
|
and #$0f
|
||||||
|
ora trackn_volume,x
|
||||||
|
tay
|
||||||
|
lda volumetab,y
|
||||||
|
sta tmp
|
||||||
|
lda reg2
|
||||||
|
and #$0e
|
||||||
|
tay
|
||||||
|
lda tabbeganddistor,y
|
||||||
|
sta nr
|
||||||
|
lda tmp
|
||||||
|
ora tabbeganddistor+1,y
|
||||||
|
sta trackn_audc,x
|
||||||
|
InstrumentsEffects
|
||||||
|
lda trackn_effdelay,x
|
||||||
|
beq ei2
|
||||||
|
cmp #1
|
||||||
|
bne ei1
|
||||||
|
lda trackn_shiftfrq,x
|
||||||
|
clc
|
||||||
|
adc trackn_effshift,x
|
||||||
|
clc
|
||||||
|
ldy trackn_effvibratoa,x
|
||||||
|
adc vib0,y
|
||||||
|
sta trackn_shiftfrq,x
|
||||||
|
lda vibtabnext,y
|
||||||
|
sta trackn_effvibratoa,x
|
||||||
|
jmp ei2
|
||||||
|
ei1
|
||||||
|
dec trackn_effdelay,x
|
||||||
|
ei2
|
||||||
|
ldy trackn_tableend,x
|
||||||
|
cpy #INSTRPAR+1
|
||||||
|
bcc ei3
|
||||||
|
lda trackn_tablespeeda,x
|
||||||
|
bpl ei2f
|
||||||
|
ei2c
|
||||||
|
tya
|
||||||
|
cmp trackn_tablea,x
|
||||||
|
bne ei2c2
|
||||||
|
lda trackn_tablelop,x
|
||||||
|
sta trackn_tablea,x
|
||||||
|
bne ei2a
|
||||||
|
ei2c2
|
||||||
|
inc trackn_tablea,x
|
||||||
|
ei2a
|
||||||
|
lda trackn_instrdb,x
|
||||||
|
sta nt
|
||||||
|
lda trackn_instrhb,x
|
||||||
|
sta nt+1
|
||||||
|
ldy trackn_tablea,x
|
||||||
|
lda (nt),y
|
||||||
|
sta trackn_tablenote,x
|
||||||
|
lda trackn_tabletypespeed,x
|
||||||
|
ei2f
|
||||||
|
sec
|
||||||
|
sbc #1
|
||||||
|
sta trackn_tablespeeda,x
|
||||||
|
ei3
|
||||||
|
lda trackn_instrreachend,x
|
||||||
|
bpl ei4
|
||||||
|
lda trackn_volume,x
|
||||||
|
beq ei4
|
||||||
|
tay
|
||||||
|
lda trackn_volumeslidevalue,x
|
||||||
|
clc
|
||||||
|
adc trackn_volumeslidedepth,x
|
||||||
|
sta trackn_volumeslidevalue,x
|
||||||
|
bcc ei4
|
||||||
|
tya
|
||||||
|
sbc #16
|
||||||
|
sta trackn_volume,x
|
||||||
|
ei4
|
||||||
|
lda reg2
|
||||||
|
sta trackn_command,x
|
||||||
|
and #$70
|
||||||
|
beq cmd0
|
||||||
|
cmd1
|
||||||
|
lda reg3
|
||||||
|
jmp cmd0c
|
||||||
|
cmd2
|
||||||
|
cmd3
|
||||||
|
cmd4
|
||||||
|
cmd5
|
||||||
|
cmd6
|
||||||
|
cmd7
|
||||||
|
cmd0
|
||||||
|
lda trackn_note,x
|
||||||
|
clc
|
||||||
|
adc reg3
|
||||||
|
cmd0a
|
||||||
|
clc
|
||||||
|
adc trackn_tablenote,x
|
||||||
|
cmp #61
|
||||||
|
bcc cmd0a1
|
||||||
|
lda #0
|
||||||
|
sta trackn_audc,x
|
||||||
|
lda #63
|
||||||
|
cmd0a1
|
||||||
|
tay
|
||||||
|
lda (nr),y
|
||||||
|
clc
|
||||||
|
adc trackn_shiftfrq,x
|
||||||
|
cmd0c
|
||||||
|
sta trackn_audf,x
|
||||||
|
pp9
|
||||||
|
ppnext
|
||||||
|
dex
|
||||||
|
bmi rmt_p4
|
||||||
|
jmp pp1
|
||||||
|
rmt_p4
|
||||||
|
lda trackn_audctl+0
|
||||||
|
ora trackn_audctl+1
|
||||||
|
ora trackn_audctl+2
|
||||||
|
ora trackn_audctl+3
|
||||||
|
tax
|
||||||
|
qq1
|
||||||
|
stx v_audctl
|
||||||
|
lda trackn_command+0
|
||||||
|
bpl qq2
|
||||||
|
lda trackn_audc+0
|
||||||
|
and #$0f
|
||||||
|
beq qq2
|
||||||
|
lda trackn_audf+0
|
||||||
|
clc
|
||||||
|
adc trackn_filter+0
|
||||||
|
sta trackn_audf+2
|
||||||
|
lda #0
|
||||||
|
sta trackn_audc+2
|
||||||
|
qq1a
|
||||||
|
txa
|
||||||
|
ora #4
|
||||||
|
tax
|
||||||
|
qq2
|
||||||
|
lda trackn_command+1
|
||||||
|
bpl qq3
|
||||||
|
lda trackn_audc+1
|
||||||
|
and #$0f
|
||||||
|
beq qq3
|
||||||
|
lda trackn_audf+1
|
||||||
|
clc
|
||||||
|
adc trackn_filter+1
|
||||||
|
sta trackn_audf+3
|
||||||
|
lda #0
|
||||||
|
sta trackn_audc+3
|
||||||
|
qq2a
|
||||||
|
txa
|
||||||
|
ora #2
|
||||||
|
tax
|
||||||
|
qq3
|
||||||
|
cpx v_audctl
|
||||||
|
bne qq5
|
||||||
|
qq5
|
||||||
|
stx v_audctl
|
||||||
|
rmt_p5
|
||||||
|
lda v_ainstrspeed
|
||||||
|
|
||||||
|
rts
|
||||||
|
SetPokey
|
||||||
|
ldy v_audctl
|
||||||
|
|
||||||
|
lda trackn_audf+0
|
||||||
|
ldx trackn_audc+0
|
||||||
|
sta AUDF1
|
||||||
|
stx AUDC1
|
||||||
|
lda trackn_audf+1
|
||||||
|
ldx trackn_audc+1
|
||||||
|
sta AUDF2
|
||||||
|
stx AUDC2
|
||||||
|
lda trackn_audf+2
|
||||||
|
ldx trackn_audc+2
|
||||||
|
sta AUDF3
|
||||||
|
stx AUDC3
|
||||||
|
lda trackn_audf+3
|
||||||
|
ldx trackn_audc+3
|
||||||
|
sta AUDF4
|
||||||
|
stx AUDC4
|
||||||
|
sty AUDCTL
|
||||||
|
rts
|
||||||
|
RMTPLAYEREND
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
;* --------BEGIN--------
|
||||||
|
;* C:\Atari\rmt\rmt128\scorch_SFX-only-str.rmt
|
||||||
|
FEAT_SFX equ 1
|
||||||
|
FEAT_GLOBALVOLUMEFADE equ 0 ;RMTGLOBALVOLUMEFADE variable
|
||||||
|
FEAT_NOSTARTINGSONGLINE equ 0
|
||||||
|
FEAT_INSTRSPEED equ 1
|
||||||
|
FEAT_CONSTANTSPEED equ 16 ;(0 times)
|
||||||
|
FEAT_COMMAND1 equ 1 ;(8 times)
|
||||||
|
FEAT_COMMAND2 equ 0 ;(0 times)
|
||||||
|
FEAT_COMMAND3 equ 0 ;(0 times)
|
||||||
|
FEAT_COMMAND4 equ 0 ;(0 times)
|
||||||
|
FEAT_COMMAND5 equ 0 ;(0 times)
|
||||||
|
FEAT_COMMAND6 equ 0 ;(0 times)
|
||||||
|
FEAT_COMMAND7SETNOTE equ 0 ;(0 times)
|
||||||
|
FEAT_COMMAND7VOLUMEONLY equ 0 ;(0 times)
|
||||||
|
FEAT_PORTAMENTO equ 0 ;(0 times)
|
||||||
|
FEAT_FILTER equ 1 ;(22 times)
|
||||||
|
FEAT_FILTERG0L equ 0 ;(0 times)
|
||||||
|
FEAT_FILTERG1L equ 0 ;(0 times)
|
||||||
|
FEAT_FILTERG0R equ 0 ;(0 times)
|
||||||
|
FEAT_FILTERG1R equ 0 ;(0 times)
|
||||||
|
FEAT_BASS16 equ 0 ;(0 times)
|
||||||
|
FEAT_BASS16G1L equ 0 ;(0 times)
|
||||||
|
FEAT_BASS16G3L equ 0 ;(0 times)
|
||||||
|
FEAT_BASS16G1R equ 0 ;(0 times)
|
||||||
|
FEAT_BASS16G3R equ 0 ;(0 times)
|
||||||
|
FEAT_VOLUMEONLYG0L equ 0 ;(0 times)
|
||||||
|
FEAT_VOLUMEONLYG2L equ 0 ;(0 times)
|
||||||
|
FEAT_VOLUMEONLYG3L equ 0 ;(0 times)
|
||||||
|
FEAT_VOLUMEONLYG0R equ 0 ;(0 times)
|
||||||
|
FEAT_VOLUMEONLYG2R equ 0 ;(0 times)
|
||||||
|
FEAT_VOLUMEONLYG3R equ 0 ;(0 times)
|
||||||
|
FEAT_TABLETYPE equ 0 ;(0 times)
|
||||||
|
FEAT_TABLEMODE equ 0 ;(0 times)
|
||||||
|
FEAT_TABLEGO equ 1 ;(2 times)
|
||||||
|
FEAT_AUDCTLMANUALSET equ 1 ;(6 times)
|
||||||
|
FEAT_VOLUMEMIN equ 0 ;(0 times)
|
||||||
|
FEAT_EFFECTVIBRATO equ 1 ;(1 times)
|
||||||
|
FEAT_EFFECTFSHIFT equ 1 ;(11 times)
|
||||||
|
;* --------END--------
|
||||||
Binary file not shown.
Binary file not shown.
+3
-3
@@ -1,6 +1,6 @@
|
|||||||
.proc talk
|
.proc talk
|
||||||
; Maximum text length is 63 characters!!!
|
; Maximum text length is 63 characters!!!
|
||||||
L0 dta d"IN TIMES OF TROUBLE, GO WITH WHAT YOU KNOW."
|
L0 dta d"CYKA BLAT"
|
||||||
L1 dta d"DIE!"
|
L1 dta d"DIE!"
|
||||||
L2 dta d"EAT MY SHORTS!"
|
L2 dta d"EAT MY SHORTS!"
|
||||||
L3 dta d"YOU'RE TOAST!"
|
L3 dta d"YOU'RE TOAST!"
|
||||||
@@ -47,7 +47,7 @@ L43 dta d"THIS IS YOUR BRAIN ON SCORCH."
|
|||||||
L44 dta d"TAKE THIS!"
|
L44 dta d"TAKE THIS!"
|
||||||
L45 dta d"THIS SCREEN AIN'T BIG ENOUGH FOR THE BOTH OF US."
|
L45 dta d"THIS SCREEN AIN'T BIG ENOUGH FOR THE BOTH OF US."
|
||||||
L46 dta d"DIE, ALIEN SWINE!"
|
L46 dta d"DIE, ALIEN SWINE!"
|
||||||
L47 dta d"SAY ARRGGHHHHH...."
|
L47 dta d"AWRUK!!!"
|
||||||
L48 dta d"I SHALL OIL MY TURRET WITH YOUR BLOOD."
|
L48 dta d"I SHALL OIL MY TURRET WITH YOUR BLOOD."
|
||||||
L49 dta d"DIE, TANK-SCUM!"
|
L49 dta d"DIE, TANK-SCUM!"
|
||||||
L50 dta d"I'M GONNA BREAK YOUR FACE!"
|
L50 dta d"I'M GONNA BREAK YOUR FACE!"
|
||||||
@@ -104,7 +104,7 @@ L99 dta d"JOIN THE ARMY, SEE THE WORLD THEY SAID."
|
|||||||
L100 dta d"IT WASN'T JUST A JOB IT WAS AN ADVENTURE!"
|
L100 dta d"IT WASN'T JUST A JOB IT WAS AN ADVENTURE!"
|
||||||
L101 dta d"I DIDN'T LIKE VIOLENCE ANYWAY!"
|
L101 dta d"I DIDN'T LIKE VIOLENCE ANYWAY!"
|
||||||
L102 dta d"I THOUGHT YOU LIKED ME?"
|
L102 dta d"I THOUGHT YOU LIKED ME?"
|
||||||
L103 dta d"SUCH SENSELESS VIOLENCE! I DON'T UNDERSTAND IT."
|
L103 dta d"CTO XYEB"
|
||||||
L104 dta d"I THINK THIS GUY'S A LITTLE CRAZY."
|
L104 dta d"I THINK THIS GUY'S A LITTLE CRAZY."
|
||||||
L105 dta d"SOMEHOW I DON'T FEEL LIKE KILLING ANYMORE."
|
L105 dta d"SOMEHOW I DON'T FEEL LIKE KILLING ANYMORE."
|
||||||
L106 dta d"HEY! KILLIN' AIN'T COOL."
|
L106 dta d"HEY! KILLIN' AIN'T COOL."
|
||||||
|
|||||||
+35
-12
@@ -525,8 +525,22 @@ weaponsOfDeath ; weapons used in tank death animations
|
|||||||
dta 1,2,3,7,17,18,19,20,21,22,23,24,25,26,27
|
dta 1,2,3,7,17,18,19,20,21,22,23,24,25,26,27
|
||||||
weaponsOfDeathEnd
|
weaponsOfDeathEnd
|
||||||
joyToKeyTable
|
joyToKeyTable
|
||||||
; .by 00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15
|
.by $ff ;00
|
||||||
.by $ff,$ff,$ff,$ff,$ff,$ff,$ff,$07,$ff,$ff,$ff,$06,$ff,$0f,$0e,$ff
|
.by $ff ;01
|
||||||
|
.by $ff ;02
|
||||||
|
.by $ff ;03
|
||||||
|
.by $ff ;04
|
||||||
|
.by $ff ;05
|
||||||
|
.by $ff ;06
|
||||||
|
.by @kbcode._right ;07
|
||||||
|
.by $ff ;08
|
||||||
|
.by $ff ;09
|
||||||
|
.by $ff ;0a
|
||||||
|
.by @kbcode._left ;0b
|
||||||
|
.by $ff ;0c
|
||||||
|
.by @kbcode._down ;0d
|
||||||
|
.by @kbcode._up ;0e
|
||||||
|
.by $ff ;0f
|
||||||
|
|
||||||
;-----------------------------------
|
;-----------------------------------
|
||||||
keycodes ;tables for converting KeyCode to Screen Code (38 -1 characters)
|
keycodes ;tables for converting KeyCode to Screen Code (38 -1 characters)
|
||||||
@@ -546,7 +560,7 @@ scrcodes
|
|||||||
gameOverSpritesTop
|
gameOverSpritesTop
|
||||||
; end of the Gover sprites by number of players
|
; end of the Gover sprites by number of players
|
||||||
; 1 2 3 4 5 6
|
; 1 2 3 4 5 6
|
||||||
.by 130,130,136,142,148,154
|
.by 130+7,130+7,136+7,142+7,148+7,154+7
|
||||||
;-------decimal constans
|
;-------decimal constans
|
||||||
zero
|
zero
|
||||||
digits dta d"0123456789"
|
digits dta d"0123456789"
|
||||||
@@ -559,8 +573,6 @@ CreditsStart
|
|||||||
dta d"Warsaw, Miam",d"i"*
|
dta d"Warsaw, Miam",d"i"*
|
||||||
dta d"2000-202",d"2"*
|
dta d"2000-202",d"2"*
|
||||||
dta d" "*
|
dta d" "*
|
||||||
dta d"B",d"y"*
|
|
||||||
dta d" "*
|
|
||||||
dta d"Programmin",d"g"*
|
dta d"Programmin",d"g"*
|
||||||
dta d"Tomasz 'Pecus' Peck",d"o"*
|
dta d"Tomasz 'Pecus' Peck",d"o"*
|
||||||
dta d"Pawel 'pirx' Kalinowsk",d"i"*
|
dta d"Pawel 'pirx' Kalinowsk",d"i"*
|
||||||
@@ -568,15 +580,19 @@ CreditsStart
|
|||||||
dta d"SFX, Music and Suppor",d"t"*
|
dta d"SFX, Music and Suppor",d"t"*
|
||||||
dta d"Michal 'Miker' Szpilowsk",d"i"*
|
dta d"Michal 'Miker' Szpilowsk",d"i"*
|
||||||
dta d" "*
|
dta d" "*
|
||||||
dta d"Additional Musi",d"c"*
|
.IF target != 5200
|
||||||
dta d"Mario 'Emkay' Kri",d"x"*
|
dta d"Additional Musi",d"c"*
|
||||||
dta d" "*
|
dta d"Mario 'Emkay' Kri",d"x"*
|
||||||
|
dta d" "*
|
||||||
|
.ENDIF
|
||||||
dta d"Code Optimizatio",d"n"*
|
dta d"Code Optimizatio",d"n"*
|
||||||
dta d"Piotr '0xF' Fusi",d"k"*
|
dta d"Piotr '0xF' Fusi",d"k"*
|
||||||
dta d" "*
|
dta d" "*
|
||||||
dta d"Ar",d"t"*
|
dta d"Ar",d"t"*
|
||||||
dta d"Adam Wachowsk",d"i"*
|
dta d"Adam Wachowsk",d"i"*
|
||||||
dta d"Krzysztof 'Kaz' Ziembi",d"k"*
|
.IF target != 5200
|
||||||
|
dta d"Krzysztof 'Kaz' Ziembi",d"k"*
|
||||||
|
.ENDIF
|
||||||
dta d" "*
|
dta d" "*
|
||||||
dta d"Ideas and Q",d"A"*
|
dta d"Ideas and Q",d"A"*
|
||||||
dta d"Bocianu, Probabilitydragon, EnderDude",d","*
|
dta d"Bocianu, Probabilitydragon, EnderDude",d","*
|
||||||
@@ -586,9 +602,16 @@ CreditsStart
|
|||||||
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"*
|
||||||
dta d" "*
|
.IF target != 5200
|
||||||
dta d"Stay tuned for the FujiNet version",d"!"*
|
dta d" "*
|
||||||
|
dta d"Stay tuned for the FujiNet version",d"!"*
|
||||||
|
.ENDIF
|
||||||
dta d" "*
|
dta d" "*
|
||||||
CreditsEnd
|
CreditsEnd
|
||||||
CreditsLines=44
|
.IF target = 5200
|
||||||
|
CreditsLines=36
|
||||||
|
.ELSE
|
||||||
|
CreditsLines=42 ; 34 in reality. add 7?
|
||||||
|
.ENDIF
|
||||||
|
|
||||||
.endif
|
.endif
|
||||||
|
|||||||
+4
-8
@@ -7,20 +7,16 @@ screenwidth = screenBytes*8 ; Max screenwidth = 512!!!
|
|||||||
TankWidth = 8
|
TankWidth = 8
|
||||||
;----------------------------------------------
|
;----------------------------------------------
|
||||||
; Player/missile memory
|
; Player/missile memory
|
||||||
PMGraph = $0800 ; real PM start = $0b00
|
PMGraph = $1800 ; real PM start = PMGraph + $0300
|
||||||
|
|
||||||
|
|
||||||
; Generated tables
|
; Generated tables
|
||||||
linetableL = $0b00 - (screenHeight+1)*2
|
display = $2010 ;screen takes $1f68 because it has screenHeight+1 lines because of out of screen tracer(?)
|
||||||
linetableH = $0b00 - (screenHeight+1)
|
;----------------------------------------------
|
||||||
|
|
||||||
display = $1010 ;screen takes $1f68 because it has screenHeight+1 lines because of out of screen tracer(?)
|
|
||||||
|
|
||||||
margin = 40 ;mountain drawing Y variable margin
|
margin = 40 ;mountain drawing Y variable margin
|
||||||
MaxPlayers = 6
|
MaxPlayers = 6
|
||||||
maxOptions = 9 ;number of all options
|
maxOptions = 9 ;number of all options
|
||||||
PMOffsetX = $2C ; P/M to graphics offset
|
PMOffsetX = $2C ; P/M to graphics offset
|
||||||
PMOffsetY = $23 ; P/M to graphics offset
|
PMOffsetY = $2A ; P/M to graphics offset
|
||||||
napalmRadius = 10
|
napalmRadius = 10
|
||||||
StandardBarrel = 6 ; standard tank barrel length
|
StandardBarrel = 6 ; standard tank barrel length
|
||||||
LongBarrel = 20 ; long barrel length
|
LongBarrel = 20 ; long barrel length
|
||||||
|
|||||||
@@ -0,0 +1,45 @@
|
|||||||
|
; @com.wudsn.ide.asm.mainsourcefile=scorch.asm
|
||||||
|
|
||||||
|
.IF *>0 ;this is a trick that prevents compiling this file alone
|
||||||
|
;-----------------------------------------------
|
||||||
|
; start of "variables" (RAM)
|
||||||
|
;-----------------------------------------------
|
||||||
|
OptionsHere
|
||||||
|
; 0123456789012345678901234567890123456789
|
||||||
|
dta d"Players : 2 3 4 5 6 "
|
||||||
|
dta d"Cash : none 2K 8K 12K 20K "
|
||||||
|
dta d"Gravity : 0.2G 0.5G 1G 2G 4G "
|
||||||
|
dta d"Wind : 1B 3B 5B 7B 9B "
|
||||||
|
dta d"Rounds : 10 20 30 40 50 "
|
||||||
|
dta d"Missiles : slug slow norm fast hare "
|
||||||
|
dta d"Seppuku : nevr rare norm oftn alws "
|
||||||
|
dta d"Mountains: NL BE CZ CH NP "
|
||||||
|
dta d"Walls : none wrap bump boxy rand "
|
||||||
|
;; 01234567890123456789012345678901
|
||||||
|
; dta d"Players: 2 3 4 5 6 "
|
||||||
|
; dta d"Cash :none 2K 8K 12K 20K"
|
||||||
|
; dta d"Gravity:0.2G 0.5G 1G 2G 4G "
|
||||||
|
; dta d"Wind : 1B 3B 5B 7B 9B "
|
||||||
|
; dta d"Rounds : 10 20 30 40 50 "
|
||||||
|
; dta d"Missile:slug slow norm fast hare"
|
||||||
|
; dta d"Seppuku:nevr rare norm oftn alws"
|
||||||
|
; dta d"Hills : NL BE CZ CH NP "
|
||||||
|
; dta d"Walls :none wrap bump boxy rand"
|
||||||
|
OptionsScreenEnd
|
||||||
|
|
||||||
|
;-----------------------------------------------
|
||||||
|
NameScreen2
|
||||||
|
dta d" Tank 01 Name:"
|
||||||
|
NameAdr
|
||||||
|
dta d" "
|
||||||
|
NameScreen4
|
||||||
|
dta d" "
|
||||||
|
NamesOfLevels
|
||||||
|
dta d" HUMAN Moron Shooter "
|
||||||
|
dta d" Poolshark Tosser Chooser "
|
||||||
|
dta d" Spoiler Cyborg Unknown "
|
||||||
|
;------------------------
|
||||||
|
; end of "variables" (RAM)
|
||||||
|
;------------------------
|
||||||
|
|
||||||
|
.endif
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
; @com.wudsn.ide.asm.mainsourcefile=scorch.asm
|
||||||
|
|
||||||
|
.IF *>0 ;this is a trick that prevents compiling this file alone
|
||||||
|
;---------------------------------------------------
|
||||||
|
purchaseTextBuffer
|
||||||
|
dta d"Player: Cash: 0" ; ZERO TO MAKE YOU RICHER ON THE SCREEN
|
||||||
|
|
||||||
|
; DLs fragments (modified by game code)
|
||||||
|
; all Purchase DL :)
|
||||||
|
PurchaseDL
|
||||||
|
.byte $70
|
||||||
|
.byte $47
|
||||||
|
DLPurTitleAddr
|
||||||
|
.word PurchaseTitle
|
||||||
|
.byte $50
|
||||||
|
.byte $42+$80
|
||||||
|
.word purchaseTextBuffer
|
||||||
|
.byte $60,$42
|
||||||
|
MoreUpdl
|
||||||
|
.word EmptyLine
|
||||||
|
.byte 0,$42
|
||||||
|
WeaponsListDL
|
||||||
|
.word ListOfWeapons
|
||||||
|
:15 .byte 0,2
|
||||||
|
.byte 0, $42
|
||||||
|
MoreDownDL
|
||||||
|
.word EmptyLine
|
||||||
|
.byte $40,$42
|
||||||
|
.word WeaponsDescription
|
||||||
|
.byte $0,$42
|
||||||
|
PurActDescAddr
|
||||||
|
.word PurchaseDescription
|
||||||
|
.byte $41
|
||||||
|
.word PurchaseDL
|
||||||
|
;------------------------
|
||||||
|
DLCreditsFragm
|
||||||
|
.byte $60+$80
|
||||||
|
.byte $42+$20 ; VSCRL
|
||||||
|
DLCreditsAddr
|
||||||
|
.word Credits
|
||||||
|
:6 .byte $02+$20
|
||||||
|
.byte $02
|
||||||
|
.byte $41
|
||||||
|
.word GameOverDL
|
||||||
|
.endif
|
||||||
@@ -1,107 +1,6 @@
|
|||||||
; @com.wudsn.ide.asm.mainsourcefile=scorch.asm
|
; @com.wudsn.ide.asm.mainsourcefile=scorch.asm
|
||||||
|
|
||||||
.IF *>0 ;this is a trick that prevents compiling this file alone
|
.IF *>0 ;this is a trick that prevents compiling this file alone
|
||||||
;-----------------------------------------------
|
|
||||||
; start of "variables" (RAM)
|
|
||||||
;-----------------------------------------------
|
|
||||||
OptionsHere
|
|
||||||
; 0123456789012345678901234567890123456789
|
|
||||||
dta d"Players : 2 3 4 5 6 "
|
|
||||||
dta d"Cash : none 2K 8K 12K 20K "
|
|
||||||
dta d"Gravity : 0.2G 0.5G 1G 2G 4G "
|
|
||||||
dta d"Wind : 1B 3B 5B 7B 9B "
|
|
||||||
dta d"Rounds : 10 20 30 40 50 "
|
|
||||||
dta d"Missiles : slug slow norm fast hare "
|
|
||||||
dta d"Seppuku : nevr rare norm oftn alws "
|
|
||||||
dta d"Mountains: NL BE CZ CH NP "
|
|
||||||
dta d"Walls : none wrap bump boxy rand "
|
|
||||||
;; 01234567890123456789012345678901
|
|
||||||
; dta d"Players: 2 3 4 5 6 "
|
|
||||||
; dta d"Cash :none 2K 8K 12K 20K"
|
|
||||||
; dta d"Gravity:0.2G 0.5G 1G 2G 4G "
|
|
||||||
; dta d"Wind : 1B 3B 5B 7B 9B "
|
|
||||||
; dta d"Rounds : 10 20 30 40 50 "
|
|
||||||
; dta d"Missile:slug slow norm fast hare"
|
|
||||||
; dta d"Seppuku:nevr rare norm oftn alws"
|
|
||||||
; dta d"Hills : NL BE CZ CH NP "
|
|
||||||
; dta d"Walls :none wrap bump boxy rand"
|
|
||||||
OptionsScreenEnd
|
|
||||||
|
|
||||||
;-----------------------------------------------
|
|
||||||
ListOfWeapons
|
|
||||||
; 0123456789012345678901234567890123456789
|
|
||||||
; :number_of_offensives dta d" "
|
|
||||||
:32 dta d" "
|
|
||||||
ListOfWeapons1End
|
|
||||||
ListOfDefensiveWeapons
|
|
||||||
; :number_of_defensives dta d" "
|
|
||||||
:16 dta d" "
|
|
||||||
ListOfDefensiveWeaponsEnd ;constant useful when clearing
|
|
||||||
NameScreen
|
|
||||||
dta d" Enter names of players "
|
|
||||||
dta d" Tank 01 Name:"
|
|
||||||
NameAdr
|
|
||||||
dta d" "
|
|
||||||
dta d" Human/Atari (difficulty level) "
|
|
||||||
dta d" "
|
|
||||||
NamesOfLevels
|
|
||||||
dta d" HUMAN Moron Shooter "
|
|
||||||
dta d" Poolshark Tosser Chooser "
|
|
||||||
dta d" Spoiler Cyborg Unknown "
|
|
||||||
dta d" "
|
|
||||||
dta d"Tab"*
|
|
||||||
dta d" - Player/Difficulty level "
|
|
||||||
dta d" "
|
|
||||||
dta d"Return"*
|
|
||||||
dta d" - Proceed "
|
|
||||||
;---------------------------------------------------
|
|
||||||
textbuffer
|
|
||||||
; 0123456789012345678901234567890123456789
|
|
||||||
dta d"Player: "
|
|
||||||
dta d"Energy: Angle: Force: "
|
|
||||||
dta d"Round: Wind: "
|
|
||||||
textbuffer2
|
|
||||||
dta d"Player: Cash: 0" ; ZERO TO MAKE YOU RICHER ON THE SCREEN
|
|
||||||
|
|
||||||
; DLs fragments (modified by game code)
|
|
||||||
; all Purchase DL :)
|
|
||||||
PurchaseDL
|
|
||||||
.byte $70
|
|
||||||
.byte $47
|
|
||||||
DLPurTitleAddr
|
|
||||||
.word PurchaseTitle
|
|
||||||
.byte $50
|
|
||||||
.byte $42+$80
|
|
||||||
.word textbuffer2
|
|
||||||
.byte $60,$42
|
|
||||||
MoreUpdl
|
|
||||||
.word EmptyLine
|
|
||||||
.byte 0,$42
|
|
||||||
WeaponsListDL
|
|
||||||
.word ListOfWeapons
|
|
||||||
:15 .byte 0,2
|
|
||||||
.byte 0, $42
|
|
||||||
MoreDownDL
|
|
||||||
.word EmptyLine
|
|
||||||
.byte $40,$42
|
|
||||||
.word WeaponsDescription
|
|
||||||
.byte $0,$42
|
|
||||||
PurActDescAddr
|
|
||||||
.word PurchaseDescription
|
|
||||||
.byte $41
|
|
||||||
.word PurchaseDL
|
|
||||||
;------------------------
|
|
||||||
DLCreditsFragm
|
|
||||||
.byte $60+$80
|
|
||||||
.byte $42+$20 ; VSCRL
|
|
||||||
DLCreditsAddr
|
|
||||||
.word Credits
|
|
||||||
:6 .byte $02+$20
|
|
||||||
.byte $02
|
|
||||||
.byte $41
|
|
||||||
.word GameOverDL
|
|
||||||
;------------------------
|
|
||||||
; end of "variables" (RAM)
|
|
||||||
;------------------------
|
;------------------------
|
||||||
; start of "constants" (ROM)
|
; start of "constants" (ROM)
|
||||||
;-----------------------------------------------
|
;-----------------------------------------------
|
||||||
@@ -110,9 +9,44 @@ DLCreditsAddr
|
|||||||
OptionsScreen
|
OptionsScreen
|
||||||
dta d"Welcome to Scorch v. "
|
dta d"Welcome to Scorch v. "
|
||||||
build ; 4 bytes from scorch.asm (fancy method) :)
|
build ; 4 bytes from scorch.asm (fancy method) :)
|
||||||
dta d" (un)2000-2022"
|
dta d" (un)2000-2022"
|
||||||
|
|
||||||
|
.IF TARGET = 800
|
||||||
dta d" Please select option with cursor keys "
|
dta d" Please select option with cursor keys "
|
||||||
dta d" and press (Return) to proceed "
|
dta d" and press (Return) to proceed "
|
||||||
|
.ELIF TARGET = 5200
|
||||||
|
dta d" Please select option with joystick one "
|
||||||
|
dta d" and press FIRE to proceed "
|
||||||
|
.ENDIF
|
||||||
|
; 0123456789012345678901234567890123456789
|
||||||
|
;-----------------------------------------------
|
||||||
|
NameScreen
|
||||||
|
.IF TARGET = 800
|
||||||
|
dta d" Enter names of players "
|
||||||
|
.ELIF TARGET = 5200
|
||||||
|
dta d"Hold "
|
||||||
|
dta d "FIRE"*
|
||||||
|
dta d " to enter player names "
|
||||||
|
.ENDIF
|
||||||
|
NameScreen3
|
||||||
|
dta d" Human/Atari (difficulty level) "
|
||||||
|
NameScreen5
|
||||||
|
.IF TARGET = 800
|
||||||
|
dta d" "
|
||||||
|
dta d"TAB"*
|
||||||
|
dta d" - Player/Difficulty level "
|
||||||
|
dta d" "
|
||||||
|
dta d"Return"*
|
||||||
|
dta d" - Proceed "
|
||||||
|
.ELIF TARGET = 5200
|
||||||
|
dta d" "
|
||||||
|
dta d"Joy"*
|
||||||
|
dta d" - Player/Difficulty level "
|
||||||
|
dta d" "
|
||||||
|
dta d"FIRE"*
|
||||||
|
dta d" - Proceed "
|
||||||
|
.ENDIF
|
||||||
|
;-----------------------------------------------
|
||||||
MoreUp
|
MoreUp
|
||||||
dta d" "
|
dta d" "
|
||||||
dta 92,92,92
|
dta 92,92,92
|
||||||
@@ -127,20 +61,39 @@ MoreDown
|
|||||||
dta d" "
|
dta d" "
|
||||||
WeaponsDescription
|
WeaponsDescription
|
||||||
; 0123456789012345678901234567890123456789
|
; 0123456789012345678901234567890123456789
|
||||||
|
.IF TARGET = 800
|
||||||
dta d"Tab"*
|
dta d"Tab"*
|
||||||
dta d ": Defensive/Offensive weapon "
|
dta d ": Defensive/Offensive weapon "
|
||||||
|
.ELIF TARGET = 5200
|
||||||
|
dta d"Left"*
|
||||||
|
dta d ": Defensive/Offensive weapon"
|
||||||
|
.ENDIF
|
||||||
PurchaseDescription
|
PurchaseDescription
|
||||||
; 0123456789012345678901234567890123456789
|
; 0123456789012345678901234567890123456789
|
||||||
|
.IF TARGET = 800
|
||||||
dta d"Space"*
|
dta d"Space"*
|
||||||
dta d": Purchase "
|
dta d": Purchase "
|
||||||
dta d"Return"*
|
dta d"Return"*
|
||||||
dta d": Finish "
|
dta d": Finish "
|
||||||
|
.ELIF TARGET = 5200
|
||||||
|
dta d"Right"*
|
||||||
|
dta d": Purchase "
|
||||||
|
dta d"FIRE"*
|
||||||
|
dta d": Finish "
|
||||||
|
.ENDIF
|
||||||
ActivateDescription
|
ActivateDescription
|
||||||
; 0123456789012345678901234567890123456789
|
; 0123456789012345678901234567890123456789
|
||||||
|
.IF TARGET = 800
|
||||||
dta d"Space"*
|
dta d"Space"*
|
||||||
dta d": Activate "
|
dta d": Activate "
|
||||||
dta d"Return"*
|
dta d"Return"*
|
||||||
dta d": Finish "
|
dta d": Finish "
|
||||||
|
.ELIF TARGET = 5200
|
||||||
|
dta d"Right"*
|
||||||
|
dta d": Activate "
|
||||||
|
dta d"FIRE"*
|
||||||
|
dta d": Finish "
|
||||||
|
.ENDIF
|
||||||
EmptyLine
|
EmptyLine
|
||||||
dta d" "
|
dta d" "
|
||||||
;---------------------------------------------------
|
;---------------------------------------------------
|
||||||
@@ -161,9 +114,9 @@ GameOverTitle2
|
|||||||
;-----------------------------------------------------
|
;-----------------------------------------------------
|
||||||
|
|
||||||
dl ; MAIN game display list
|
dl ; MAIN game display list
|
||||||
.byte 0
|
.byte $70
|
||||||
.byte $42
|
.byte $42
|
||||||
.word textbuffer
|
.word statusBuffer
|
||||||
.byte $02, $02 +$80 ;DLI
|
.byte $02, $02 +$80 ;DLI
|
||||||
.byte $10 ; 2 blank lines
|
.byte $10 ; 2 blank lines
|
||||||
|
|
||||||
@@ -207,7 +160,6 @@ dl ; MAIN game display list
|
|||||||
.byte $41
|
.byte $41
|
||||||
.word dl
|
.word dl
|
||||||
;-----------------------------------------------
|
;-----------------------------------------------
|
||||||
.ALIGN $1000 ; WARNING!!!! 4KiB barrier crossing here, might need reassignment!!!
|
|
||||||
OptionsDL
|
OptionsDL
|
||||||
.byte $70
|
.byte $70
|
||||||
.byte $47
|
.byte $47
|
||||||
@@ -222,6 +174,7 @@ OptionsDL
|
|||||||
:maxOptions-1 .by $02,$10
|
:maxOptions-1 .by $02,$10
|
||||||
:(9-maxOptions) .by $70,$10
|
:(9-maxOptions) .by $70,$10
|
||||||
.byte $80
|
.byte $80
|
||||||
|
.byte $70 ; to match moved sprites
|
||||||
.byte $4f
|
.byte $4f
|
||||||
.word (display+140*40)
|
.word (display+140*40)
|
||||||
:21 .by $0f ;76
|
:21 .by $0f ;76
|
||||||
@@ -233,12 +186,23 @@ NameDL
|
|||||||
.byte $70
|
.byte $70
|
||||||
.byte $47
|
.byte $47
|
||||||
.word DifficultyTitle
|
.word DifficultyTitle
|
||||||
.byte $70,$70
|
.byte $70,$70 ; 16 empty lines
|
||||||
.byte $42
|
.byte $42
|
||||||
.word NameScreen
|
.word NameScreen
|
||||||
.byte $30
|
.byte $30 ; 4 empty lines
|
||||||
.byte $02,$30+$80,$02
|
.byte $42
|
||||||
.byte $10,$02,$02,$02,$30,$02,$02
|
.word NameScreen2
|
||||||
|
.byte $30+$80 ; 4 empty lines + DLI
|
||||||
|
.byte $42
|
||||||
|
.word NameScreen3
|
||||||
|
.byte $10 ; 2 empty lines
|
||||||
|
.byte $42
|
||||||
|
.word NameScreen4
|
||||||
|
.byte $02,$02
|
||||||
|
.byte $30 ; 4 empty lines
|
||||||
|
.byte $42
|
||||||
|
.word NameScreen5
|
||||||
|
.byte $02
|
||||||
.byte $41
|
.byte $41
|
||||||
.word NameDL
|
.word NameDL
|
||||||
; -------------------------------------------------
|
; -------------------------------------------------
|
||||||
@@ -249,6 +213,7 @@ 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 $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
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
; @com.wudsn.ide.asm.mainsourcefile=scorch.asm
|
||||||
|
|
||||||
|
.IF *>0 ;this is a trick that prevents compiling this file alone
|
||||||
|
|
||||||
|
statusBuffer
|
||||||
|
; 0123456789012345678901234567890123456789
|
||||||
|
dta d"Player: "
|
||||||
|
dta d"Energy: Angle: Force: "
|
||||||
|
dta d"Round: Wind: "
|
||||||
|
|
||||||
|
.ENDIF
|
||||||
+45
-3
@@ -1590,14 +1590,24 @@ nextPointChecking
|
|||||||
lda (modify),y
|
lda (modify),y
|
||||||
tax
|
tax
|
||||||
NotHigher
|
NotHigher
|
||||||
inw modify
|
; inw modify
|
||||||
cpw modify #(mountaintable+screenwidth)
|
; cpw modify #(mountaintable+screenwidth)
|
||||||
|
; --
|
||||||
|
; better code (with Y reg)
|
||||||
|
iny
|
||||||
|
bne @+
|
||||||
|
inc modify+1
|
||||||
|
@
|
||||||
|
lda modify+1
|
||||||
|
cmp #>(mountaintable+screenwidth)
|
||||||
|
bne @+
|
||||||
|
cpy #<screenwidth
|
||||||
|
@
|
||||||
bne nextPointChecking
|
bne nextPointChecking
|
||||||
txa
|
txa
|
||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
|
|
||||||
|
|
||||||
; -----------------------------------------
|
; -----------------------------------------
|
||||||
.proc unPlot
|
.proc unPlot
|
||||||
; plots a point and saves the plotted byte, reverts the previous plot.
|
; plots a point and saves the plotted byte, reverts the previous plot.
|
||||||
@@ -2171,5 +2181,37 @@ ybarrel
|
|||||||
|
|
||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
|
;--------------------------------------------------
|
||||||
|
.proc PMoutofScreen
|
||||||
|
;--------------------------------------------------
|
||||||
|
lda #$00 ; let all P/M disappear
|
||||||
|
:8 sta hposp0+#
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
;--------------------------------------------------
|
||||||
|
.proc ColorsOfSprites
|
||||||
|
lda TankColoursTable ; colours of sprites under tanks
|
||||||
|
sta PCOLR0
|
||||||
|
lda TankColoursTable+1
|
||||||
|
sta PCOLR1
|
||||||
|
lda TankColoursTable+2
|
||||||
|
sta PCOLR2
|
||||||
|
lda TankColoursTable+3
|
||||||
|
sta PCOLR3
|
||||||
|
LDA TankColoursTable+4
|
||||||
|
STA COLOR3 ; joined missiles (5th tank)
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
;--------------------------------------------------
|
||||||
|
.proc SetPMWidth
|
||||||
|
lda #$00
|
||||||
|
sta sizep0 ; P0-P3 widths
|
||||||
|
sta sizep0+1
|
||||||
|
sta sizep0+2
|
||||||
|
sta sizep0+3
|
||||||
|
lda #%01010101
|
||||||
|
sta sizem ; all missiles, double width
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
|
||||||
.endif
|
.endif
|
||||||
@@ -0,0 +1,147 @@
|
|||||||
|
;-------------------------------------
|
||||||
|
.MACRO ROLW
|
||||||
|
ROL :1
|
||||||
|
ROL :1+1
|
||||||
|
.ENDM
|
||||||
|
;-------------------------------------
|
||||||
|
.MACRO ASLW
|
||||||
|
ASL :1
|
||||||
|
ROL :1+1
|
||||||
|
.ENDM
|
||||||
|
;-------------------------------------
|
||||||
|
.MACRO RORW
|
||||||
|
ROR :1+1
|
||||||
|
ROR :1
|
||||||
|
.ENDM
|
||||||
|
;-------------------------------------
|
||||||
|
.MACRO LSRW
|
||||||
|
LSR :1+1
|
||||||
|
ROR :1
|
||||||
|
.ENDM
|
||||||
|
|
||||||
|
;-------------------------------------
|
||||||
|
.MACRO VMAIN
|
||||||
|
; VMAIN #WORD,interrupt.vector
|
||||||
|
; interrupt.vector:
|
||||||
|
; 0 - VIMIRQ
|
||||||
|
; 1 - TIMCNT1
|
||||||
|
; 2 - TIMCNT2
|
||||||
|
; 3 - TIMCNT3
|
||||||
|
; 4 - TIMCNT4
|
||||||
|
; 5 - TIMCNT5
|
||||||
|
; 6 - VVBLKI
|
||||||
|
; 7 - VVBLKD
|
||||||
|
; 8 - TIMVEC1
|
||||||
|
; 9 - TIMVEC2
|
||||||
|
; Initialises Vertical Blank Interrupts
|
||||||
|
; (works only with system interrupts ON)
|
||||||
|
;----------
|
||||||
|
; on 5200 it sets up deferred VBL ONLY for now
|
||||||
|
sei
|
||||||
|
lda #$00 ;Disable all interruptes
|
||||||
|
sta nmien
|
||||||
|
sta irqen
|
||||||
|
|
||||||
|
@ lda vcount
|
||||||
|
bne @-
|
||||||
|
mwa #:1 VVBLKD
|
||||||
|
mva #$40 nmien
|
||||||
|
;Enable IRQ interrupts
|
||||||
|
sta pokmsk
|
||||||
|
sta irqen
|
||||||
|
cli
|
||||||
|
|
||||||
|
.ENDM
|
||||||
|
;-------------------------------------
|
||||||
|
.MACRO VDLI
|
||||||
|
; VDLI #WORD
|
||||||
|
; Initialises Display List Interrupts
|
||||||
|
mwa #:1 VDSLST
|
||||||
|
mva #$C0 NMIEN
|
||||||
|
.ENDM
|
||||||
|
;-------------------------------------
|
||||||
|
.MACRO halt
|
||||||
|
?stop
|
||||||
|
lda RANDOM
|
||||||
|
and #$05
|
||||||
|
sta COLBAK
|
||||||
|
jmp ?stop
|
||||||
|
.ENDM
|
||||||
|
;-------------------------------------
|
||||||
|
.MACRO KEY
|
||||||
|
; KEY
|
||||||
|
; waits for releasing and pressing "any key"
|
||||||
|
|
||||||
|
.ENDM
|
||||||
|
;-------------------------------------
|
||||||
|
.MACRO WAIT
|
||||||
|
; WAIT
|
||||||
|
; waits one frame (1/50 s(PAL) or 1/60s(NTSC))
|
||||||
|
?zero LDA VCOUNT
|
||||||
|
beq ?zero
|
||||||
|
bpl ?WA
|
||||||
|
sbc #10 ; last lines correction
|
||||||
|
?WA cmp VCOUNT
|
||||||
|
beq ?WA
|
||||||
|
bcc ?WA
|
||||||
|
?WFRAME cmp VCOUNT
|
||||||
|
beq ?nowait
|
||||||
|
bcs ?WFRAME
|
||||||
|
?nowait
|
||||||
|
.ENDM
|
||||||
|
;-------------------------------------
|
||||||
|
.macro negw
|
||||||
|
; negate the given word (0-a)
|
||||||
|
;-------------------------------------
|
||||||
|
sec
|
||||||
|
lda #$00
|
||||||
|
sbc :1
|
||||||
|
sta :1
|
||||||
|
lda #$00
|
||||||
|
sbc :1+1
|
||||||
|
sta :1+1
|
||||||
|
.endm
|
||||||
|
;-------------------------------------
|
||||||
|
.macro randomizer
|
||||||
|
;usage: randomize floor ceiling
|
||||||
|
;returns (in A) a random .byte between "floor" and "ceiling"
|
||||||
|
.if :2 < :1
|
||||||
|
.error "floor higher than ceiling"
|
||||||
|
.endif
|
||||||
|
?rand
|
||||||
|
lda random
|
||||||
|
cmp #:1 ;floor
|
||||||
|
bcc ?rand
|
||||||
|
cmp #:2+1 ;ceiling
|
||||||
|
bcs ?rand
|
||||||
|
.endm
|
||||||
|
;-------------------------------------
|
||||||
|
.macro phx
|
||||||
|
txa
|
||||||
|
pha
|
||||||
|
.endm
|
||||||
|
;-------------------------------------
|
||||||
|
.macro phy
|
||||||
|
tya
|
||||||
|
pha
|
||||||
|
.endm
|
||||||
|
;-------------------------------------
|
||||||
|
.macro plx
|
||||||
|
pla
|
||||||
|
tax
|
||||||
|
.endm
|
||||||
|
;-------------------------------------
|
||||||
|
.macro ply
|
||||||
|
pla
|
||||||
|
tay
|
||||||
|
.endm
|
||||||
|
;-------------------------------------
|
||||||
|
.macro pause
|
||||||
|
;waits :1 number (byte) of frames
|
||||||
|
ldx #:1
|
||||||
|
?PAUSELOOP
|
||||||
|
wait
|
||||||
|
dex
|
||||||
|
bne ?PAUSELOOP
|
||||||
|
.ENDM
|
||||||
|
|
||||||
+272
@@ -0,0 +1,272 @@
|
|||||||
|
;****************************************************************************
|
||||||
|
;* ATARI 5200 CONSOLE *
|
||||||
|
;* SYSTEM EQUATES *
|
||||||
|
;****************************************************************************
|
||||||
|
; based on https://web.archive.org/web/20200831200348/http://www.atarimuseum.com/videogames/consoles/5200/conv_to_5200.html
|
||||||
|
;
|
||||||
|
; OS VARIABLES FOR 5200
|
||||||
|
;
|
||||||
|
; PAGE 0
|
||||||
|
POKMSK = $00 ;pokmsk at $00 on Atari 5200 instead of $10 on Atari XL
|
||||||
|
RTCLOK = $01 ;Actually $01/$02
|
||||||
|
CRITIC = $03
|
||||||
|
ATRACT = $04 ;attact at $04 on Atari 5200 instead of $4D on Atari XL
|
||||||
|
DLPTRS = $05 ;DLPTRS at $05/$06 on Atari 5200 instead of $230 on Atari XL
|
||||||
|
DMACTLS = $07 ;DMACTLS at $07 on Atari 5200 instead of $22f on Atari XL
|
||||||
|
SSKCTL = skctl ;There is no shadow on Atari 5200
|
||||||
|
PCOLR0 EQU $08 ;P0 COLOR
|
||||||
|
PCOLR1 EQU $09 ;P1 COLOR
|
||||||
|
PCOLR2 EQU $0a ;P2 COLOR
|
||||||
|
PCOLR3 EQU $0b ;P3 COLOR
|
||||||
|
COLOR0 EQU $0c ;COLOR 0
|
||||||
|
COLOR1 EQU $0d
|
||||||
|
COLOR2 EQU $0e
|
||||||
|
COLOR3 EQU $0f
|
||||||
|
COLOR4 EQU $10
|
||||||
|
COLBAKS EQU COLOR4
|
||||||
|
PADDL0 EQU $11
|
||||||
|
PADDL1 EQU $12
|
||||||
|
PADDL2 EQU $13
|
||||||
|
PADDL3 EQU $14
|
||||||
|
PADDL4 EQU $15
|
||||||
|
PADDL5 EQU $16
|
||||||
|
PADDL6 EQU $17
|
||||||
|
PADDL7 EQU $18
|
||||||
|
STICK0 = $19 ;There is no stick0 but we will make the analog stick look like a digital one and store it here
|
||||||
|
STRIG0 = $1a ;There is no strig0 but we will make this the shadow of the TRIG0 ($c010) of GTIA
|
||||||
|
chbas = $1b ;There is no CHBAS but we will make this the shadow of the CHBASE
|
||||||
|
CONSOL = $1c ;There are no console keys on Atari 5200, so we replace console h/w reads with a new shadow based on the keypad keys
|
||||||
|
consol_reset = $07;The constant value representing that no consol key is pressed
|
||||||
|
kbcode = $1d ;There is no keyboard on the Atari 5200, so replace kbcode h/w reads with a byte variable read based on the keypad keys
|
||||||
|
|
||||||
|
; PAGE 2
|
||||||
|
VIMIRQ EQU $0200 ;IMMED IRQ VECTOR
|
||||||
|
VVBLKI EQU $0202 ;IMM VBLK NMI VECTOR
|
||||||
|
VVBLKD EQU $0204 ;DEF VBLK NMI VECTOR
|
||||||
|
VDSLST EQU $0206 ;DSP LIST NMI VECTOR
|
||||||
|
VKEYBD EQU $0208 ;POKEY KB IRQ VECTOR
|
||||||
|
VKEYCNT EQU $020A ;Keypad routine continuation vector
|
||||||
|
BRKKY EQU $023C ;BREAK KEY VECTOR
|
||||||
|
VBREAK EQU $020E ;BRK INST IRQ VECTOR
|
||||||
|
VSERIN EQU $0210 ;POKEY INPUT RDY IRQ
|
||||||
|
VSEROR EQU $0212 ;POKEY OUTPUT RDY
|
||||||
|
VSEROC EQU $0214 ;POKEY OUTPUT DONE
|
||||||
|
VTIMR1 EQU $0216 ;POKEY TIMER 1 IRQ
|
||||||
|
VTIMR2 EQU $0218 ;POKEY TIMER 2 IRQ
|
||||||
|
VTIMR4 EQU $021A ;POKEY TIMER 4 IRQ
|
||||||
|
|
||||||
|
|
||||||
|
ROM_SETTINGS = $bfe8 ; game ROM info start (24 bytes total, 20b title, 2b year, 2b start vector)
|
||||||
|
|
||||||
|
; HARDWARE REGISTERS
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
POKEY EQU $EB00
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; READ
|
||||||
|
;
|
||||||
|
POT0 EQU POKEY+$00
|
||||||
|
POT1 EQU POKEY+$01
|
||||||
|
POT2 EQU POKEY+$02
|
||||||
|
POT3 EQU POKEY+$03
|
||||||
|
POT4 EQU POKEY+$04
|
||||||
|
POT5 EQU POKEY+$05
|
||||||
|
POT6 EQU POKEY+$06
|
||||||
|
POT7 EQU POKEY+$07
|
||||||
|
ALLPOT EQU POKEY+$08
|
||||||
|
KBCODE_5200 EQU POKEY+$09
|
||||||
|
RANDOM EQU POKEY+$0a
|
||||||
|
POTGO EQU POKEY+$0b
|
||||||
|
SERIN EQU POKEY+$0d
|
||||||
|
IRQST EQU POKEY+$0e
|
||||||
|
SKSTAT EQU POKEY+$0f
|
||||||
|
;
|
||||||
|
; WRITE
|
||||||
|
;
|
||||||
|
AUDF1 EQU POKEY+$00
|
||||||
|
AUDC1 EQU POKEY+$01
|
||||||
|
AUDF2 EQU POKEY+$02
|
||||||
|
AUDC2 EQU POKEY+$03
|
||||||
|
AUDF3 EQU POKEY+$04
|
||||||
|
AUDC3 EQU POKEY+$05
|
||||||
|
AUDF4 EQU POKEY+$06
|
||||||
|
AUDC4 EQU POKEY+$07
|
||||||
|
AUDCTL EQU POKEY+$08
|
||||||
|
STIMER EQU POKEY+$09
|
||||||
|
SKRES EQU POKEY+$0a
|
||||||
|
SEROUT EQU POKEY+$0d
|
||||||
|
IRQEN EQU POKEY+$0e
|
||||||
|
SKCTL EQU POKEY+$0f
|
||||||
|
;
|
||||||
|
;
|
||||||
|
;
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
GTIA EQU $C000
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; WRITE
|
||||||
|
;
|
||||||
|
HPOSP0 EQU GTIA+$00
|
||||||
|
HPOSP1 EQU GTIA+$01
|
||||||
|
HPOSP2 EQU GTIA+$02
|
||||||
|
HPOSP3 EQU GTIA+$03
|
||||||
|
HPOSM0 EQU GTIA+$04
|
||||||
|
HPOSM1 EQU GTIA+$05
|
||||||
|
HPOSM2 EQU GTIA+$06
|
||||||
|
HPOSM3 EQU GTIA+$07
|
||||||
|
SIZEP0 EQU GTIA+$08
|
||||||
|
SIZEP1 EQU GTIA+$09
|
||||||
|
SIZEP2 EQU GTIA+$0a
|
||||||
|
SIZEP3 EQU GTIA+$0b
|
||||||
|
SIZEM EQU GTIA+$0c
|
||||||
|
GRAFP0 EQU GTIA+$0d
|
||||||
|
GRAFP1 EQU GTIA+$0e
|
||||||
|
GRAFP2 EQU GTIA+$0f
|
||||||
|
GRAFP3 EQU GTIA+$10
|
||||||
|
GRAFM EQU GTIA+$11
|
||||||
|
COLPM0 EQU GTIA+$12
|
||||||
|
COLPM1 EQU GTIA+$13
|
||||||
|
COLPM2 EQU GTIA+$14
|
||||||
|
COLPM3 EQU GTIA+$15
|
||||||
|
COLPF0 EQU GTIA+$16
|
||||||
|
COLPF1 EQU GTIA+$17
|
||||||
|
COLPF2 EQU GTIA+$18
|
||||||
|
COLPF3 EQU GTIA+$19
|
||||||
|
COLBAK EQU GTIA+$1a
|
||||||
|
PRIOR EQU GTIA+$1b
|
||||||
|
GPRIOR = PRIOR ; no PRIOR shadow (GPRIOR)
|
||||||
|
VDELAY EQU GTIA+$1c
|
||||||
|
GRACTL EQU GTIA+$1d
|
||||||
|
HITCLR EQU GTIA+$1e
|
||||||
|
CONSOL5200 EQU GTIA+$1f ; no CONSOL in 5200
|
||||||
|
;
|
||||||
|
; READ
|
||||||
|
;
|
||||||
|
M0PF EQU GTIA+$00
|
||||||
|
M1PF EQU GTIA+$01
|
||||||
|
M2PF EQU GTIA+$02
|
||||||
|
M3PF EQU GTIA+$03
|
||||||
|
P0PF EQU GTIA+$04
|
||||||
|
P1PF EQU GTIA+$05
|
||||||
|
P2PF EQU GTIA+$06
|
||||||
|
P3PF EQU GTIA+$07
|
||||||
|
M0PL EQU GTIA+$08
|
||||||
|
M1PL EQU GTIA+$09
|
||||||
|
M2PL EQU GTIA+$0a
|
||||||
|
M3PL EQU GTIA+$0b
|
||||||
|
P0PL EQU GTIA+$0c
|
||||||
|
P1PL EQU GTIA+$0d
|
||||||
|
P2PL EQU GTIA+$0e
|
||||||
|
P3PL EQU GTIA+$0f
|
||||||
|
TRIG0 EQU GTIA+$10
|
||||||
|
TRIG1 EQU GTIA+$11
|
||||||
|
TRIG2 EQU GTIA+$12
|
||||||
|
TRIG3 EQU GTIA+$13
|
||||||
|
PAL EQU GTIA+$14
|
||||||
|
;
|
||||||
|
;
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
ANTIC EQU $D400
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
DMACTL EQU ANTIC+$00
|
||||||
|
CHACTL EQU ANTIC+$01
|
||||||
|
DLPTR EQU ANTIC+$02
|
||||||
|
;DLISTH EQU ANTIC+$03
|
||||||
|
HSCROL EQU ANTIC+$04
|
||||||
|
VSCROL EQU ANTIC+$05
|
||||||
|
PMBASE EQU ANTIC+$07
|
||||||
|
CHBASE EQU ANTIC+$09
|
||||||
|
WSYNC EQU ANTIC+$0a
|
||||||
|
VCOUNT EQU ANTIC+$0b
|
||||||
|
PENH EQU ANTIC+$0c
|
||||||
|
PENV EQU ANTIC+$0d
|
||||||
|
NMIEN EQU ANTIC+$0e
|
||||||
|
NMIRES EQU ANTIC+$0f
|
||||||
|
NMIST EQU ANTIC+$0f
|
||||||
|
;
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; Atari ANTIC chip display list equates
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
JUMP EQU $01 ; display list jump instruction (3 byte)
|
||||||
|
JVB EQU $41 ; display list jump and wait for vblank instruction (3)
|
||||||
|
;
|
||||||
|
SCH EQU $10 ; display list horizontal scrolling
|
||||||
|
SCV EQU $20 ; display list vertical scrolling
|
||||||
|
LMS EQU $40 ; display list load memory scan instruction (3 byte)
|
||||||
|
DLII EQU $80 ; display list interrupt instruction
|
||||||
|
;
|
||||||
|
SKIP1 EQU $00 ; display list skip 1 scan line instruction
|
||||||
|
SKIP2 EQU $10 ; display list skip 2 scan lines instruction
|
||||||
|
SKIP3 EQU $20 ; display list skip 3 scan lines instruction
|
||||||
|
SKIP4 EQU $30 ; display list skip 4 scan lines instruction
|
||||||
|
SKIP5 EQU $40 ; display list skip 5 scan lines instruction
|
||||||
|
SKIP6 EQU $50 ; display list skip 6 scan lines instruction
|
||||||
|
SKIP7 EQU $60 ; display list skip 7 scan lines instruction
|
||||||
|
SKIP8 EQU $70 ; display list skip 8 scan lines instruction
|
||||||
|
;
|
||||||
|
MODE2 EQU $02 ; display list mode 2
|
||||||
|
MODE4 EQU $04 ; display list mode 4
|
||||||
|
MODE8 EQU $08 ; display list mode 8
|
||||||
|
MODEE EQU $0E ; display list mode E
|
||||||
|
MODEF EQU $0F ; display list mode F
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; ENUMS
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
.enum @dmactl
|
||||||
|
blank = %00
|
||||||
|
narrow = %01
|
||||||
|
standard= %10
|
||||||
|
wide = %11
|
||||||
|
missiles= %100
|
||||||
|
players = %1000
|
||||||
|
lineX1 = %10000
|
||||||
|
lineX2 = %00000
|
||||||
|
dma = %100000
|
||||||
|
.ende
|
||||||
|
|
||||||
|
scr48 = @dmactl(wide|dma|players|missiles|lineX1)
|
||||||
|
scr40 = @dmactl(standard|dma|players|missiles|lineX1)
|
||||||
|
scr32 = @dmactl(narrow|dma|players|missiles|lineX1)
|
||||||
|
|
||||||
|
.enum @pmcntl
|
||||||
|
missiles= %1
|
||||||
|
players = %10
|
||||||
|
trigs = %100
|
||||||
|
.ende
|
||||||
|
|
||||||
|
.enum @gtictl
|
||||||
|
prior0 = %0
|
||||||
|
prior1 = %1
|
||||||
|
prior2 = %10
|
||||||
|
prior4 = %100
|
||||||
|
prior8 = %1000
|
||||||
|
ply5 = %10000 ; Fifth Player Enable
|
||||||
|
mlc = %100000 ; Multiple Color Player Enable
|
||||||
|
mode9 = %01000000
|
||||||
|
mode10 = %10000000
|
||||||
|
mode11 = %11000000
|
||||||
|
.ende
|
||||||
|
/*
|
||||||
|
; commented out to be replaced by the application specific A800 --> 5200 keypad translation
|
||||||
|
.enum @kbcode
|
||||||
|
_0
|
||||||
|
_1
|
||||||
|
_2
|
||||||
|
_3
|
||||||
|
_4
|
||||||
|
_5
|
||||||
|
_6
|
||||||
|
_7
|
||||||
|
_8
|
||||||
|
_9
|
||||||
|
_asterisk = $0a
|
||||||
|
_hash = $0b
|
||||||
|
_start = $0c
|
||||||
|
_pause = $0d
|
||||||
|
_reset = $0e
|
||||||
|
.ende
|
||||||
|
*/
|
||||||
@@ -652,3 +652,71 @@ scr32 = @dmactl(narrow|dma|players|missiles|lineX1)
|
|||||||
mode10 = %10000000
|
mode10 = %10000000
|
||||||
mode11 = %11000000
|
mode11 = %11000000
|
||||||
.ende
|
.ende
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; KBCODEs
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
.enum @kbcode
|
||||||
|
_none = 255
|
||||||
|
_esc = 28
|
||||||
|
_1 = 31
|
||||||
|
_2 = 30
|
||||||
|
_3 = 26
|
||||||
|
_4 = 24
|
||||||
|
_5 = 29
|
||||||
|
_6 = 27
|
||||||
|
_7 = 51
|
||||||
|
_8 = 53
|
||||||
|
_9 = 48
|
||||||
|
_0 = 50
|
||||||
|
_lt = 54
|
||||||
|
_gt = 55
|
||||||
|
_del = 52
|
||||||
|
_tab = 44
|
||||||
|
_Q = 47
|
||||||
|
_W = 46
|
||||||
|
_E = 42
|
||||||
|
_R = 40
|
||||||
|
_T = 45
|
||||||
|
_Y = 43
|
||||||
|
_U = 11
|
||||||
|
_I = 13
|
||||||
|
_O = 8
|
||||||
|
_P = 10
|
||||||
|
_min = 14
|
||||||
|
_up = 14 ; cursor function
|
||||||
|
_eq = 15
|
||||||
|
_down = 15 ; cursor function
|
||||||
|
_ret = 12
|
||||||
|
_A = 63
|
||||||
|
_S = 62
|
||||||
|
_D = 58
|
||||||
|
_F = 56
|
||||||
|
_G = 61
|
||||||
|
_H = 57
|
||||||
|
_J = 1
|
||||||
|
_K = 5
|
||||||
|
_L = 0
|
||||||
|
_semicolon = 2
|
||||||
|
_plus = 6
|
||||||
|
_left = 6 ; cursor function
|
||||||
|
_asterisk = 7
|
||||||
|
_right = 7 ; cursor function
|
||||||
|
_caps = 60
|
||||||
|
_Z = 23
|
||||||
|
_X = 22
|
||||||
|
_C = 18
|
||||||
|
_V = 16
|
||||||
|
_B = 21
|
||||||
|
_N = 36
|
||||||
|
_M = 37
|
||||||
|
_comma = 32
|
||||||
|
_dot = 34
|
||||||
|
_slash = 38
|
||||||
|
_atari = 39
|
||||||
|
_help = 17
|
||||||
|
_F1 = 3
|
||||||
|
_F2 = 4
|
||||||
|
_F3 = 19
|
||||||
|
_F4 = 20
|
||||||
|
_space = 33
|
||||||
|
.ende
|
||||||
@@ -101,7 +101,7 @@
|
|||||||
sta :1+1
|
sta :1+1
|
||||||
.endm
|
.endm
|
||||||
;-------------------------------------
|
;-------------------------------------
|
||||||
.macro randomize
|
.macro randomizer
|
||||||
;usage: randomize floor ceiling
|
;usage: randomize floor ceiling
|
||||||
;returns (in A) a random .byte between "floor" and "ceiling"
|
;returns (in A) a random .byte between "floor" and "ceiling"
|
||||||
.if :2 < :1
|
.if :2 < :1
|
||||||
+322
-213
@@ -2,45 +2,30 @@
|
|||||||
;Atari 8-bit Scorched Earth source code
|
;Atari 8-bit Scorched Earth 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
|
;Miami & Warsaw 2022
|
||||||
;you can contact us at pecus@poczta.fm or pirx@5oft.pl
|
|
||||||
;home page of this project is https://github.com/pkali/scorch_src
|
|
||||||
|
|
||||||
;this source code was compiled under OMC65 crossassembler
|
;---------------------------------------------------
|
||||||
;(https://github.com/pkali/omc65)
|
.def TARGET = 800 ;5200 ; or 800
|
||||||
;and on 2012-06-21 translated to mads
|
;atari800 -5200 -cart ${outputFilePath} -cart-type 4
|
||||||
;
|
;atari800 -run ${outputFilePath}
|
||||||
;game source code is split into 5+2 parts:
|
;---------------------------------------------------
|
||||||
;scorch.asm is the main game code (with many assorted routines)
|
|
||||||
;grafproc.asm - graphics routines like line or circle
|
|
||||||
;textproc.asm - text routines like list of weapons and shop
|
|
||||||
;variables.asm - all non-zero page variables and constans
|
|
||||||
;display.asm - display lists and text screen definitions
|
|
||||||
;ai.asm - artificial stupidity of computer opponents
|
|
||||||
;weapons.asm - general arsenal of tankies
|
|
||||||
|
|
||||||
;we were trying to use as much macros and pseudoops as possible
|
OPT r+ ; saves 12 bytes :O
|
||||||
;they are defined in atari.hea and macro.hea files together with many
|
|
||||||
;atari constans. This way it shoud be relatively easy to
|
|
||||||
;port this code to e.g. C64
|
|
||||||
;
|
|
||||||
;After those N years of working on this piece of code
|
|
||||||
;we are sure it would be much wiser to write it in C, Action!
|
|
||||||
;or MadPascal but on the other hand it is so much fun to type 150 chars
|
|
||||||
;where you want to have y=ax+b :)
|
|
||||||
;
|
|
||||||
;originally most variables were in Polish, comments were sparse
|
|
||||||
;but we wanted to release this piece of code to public
|
|
||||||
;and due to being always short of time/energy (to finish the game)
|
|
||||||
;we decided it must go in 'English' to let other people work on it
|
|
||||||
|
|
||||||
|
;---------------------------------------------------
|
||||||
.macro build
|
.macro build
|
||||||
dta d"1.14" ; number of this build (3 bytes)
|
dta d"1.16" ; number of this build (4 bytes)
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
.macro RMTSong
|
||||||
|
lda #:1
|
||||||
|
jsr RMTSongSelect
|
||||||
|
.endm
|
||||||
|
|
||||||
|
;---------------------------------------------------
|
||||||
icl 'definitions.asm'
|
icl 'definitions.asm'
|
||||||
|
;---------------------------------------------------
|
||||||
|
|
||||||
.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)
|
||||||
@@ -83,9 +68,6 @@
|
|||||||
.zpvar pressTimer .byte
|
.zpvar pressTimer .byte
|
||||||
.zpvar NTSCcounter .byte
|
.zpvar NTSCcounter .byte
|
||||||
.zpvar IsEndOfTheFallFlag .byte ; for small speedup ground falling
|
.zpvar IsEndOfTheFallFlag .byte ; for small speedup ground falling
|
||||||
;.zpvar dliA .byte
|
|
||||||
;.zpvar dliX .byte
|
|
||||||
;.zpvar dliY .byte
|
|
||||||
.zpvar sfx_effect .byte
|
.zpvar sfx_effect .byte
|
||||||
.zpvar RMT_blocked .byte
|
.zpvar RMT_blocked .byte
|
||||||
|
|
||||||
@@ -103,7 +85,6 @@
|
|||||||
.zpvar Counter .byte ;temporary Counter for outside loops
|
.zpvar Counter .byte ;temporary Counter for outside loops
|
||||||
.zpvar ExplosionRadius .word ;because when adding in xdraw it is double byte
|
.zpvar ExplosionRadius .word ;because when adding in xdraw it is double byte
|
||||||
.zpvar ResultY .byte
|
.zpvar ResultY .byte
|
||||||
; .zpvar FallDown2 .byte
|
|
||||||
.zpvar xcircle .word
|
.zpvar xcircle .word
|
||||||
.zpvar ycircle .word
|
.zpvar ycircle .word
|
||||||
.zpvar vy .word
|
.zpvar vy .word
|
||||||
@@ -134,7 +115,6 @@
|
|||||||
.zpvar HowToDraw .byte
|
.zpvar HowToDraw .byte
|
||||||
.zpvar gravity .byte
|
.zpvar gravity .byte
|
||||||
.zpvar LineLength .word
|
.zpvar LineLength .word
|
||||||
;.zpvar LineAddress4x4 .word
|
|
||||||
.zpvar tracerflag .byte
|
.zpvar tracerflag .byte
|
||||||
.zpvar isInventory .byte
|
.zpvar isInventory .byte
|
||||||
.zpvar DifficultyLevel .byte
|
.zpvar DifficultyLevel .byte
|
||||||
@@ -143,28 +123,97 @@
|
|||||||
.zpvar L1 .byte
|
.zpvar L1 .byte
|
||||||
|
|
||||||
;* RMT ZeroPage addresses in artwork/sfx/rmtplayr.a65
|
;* RMT ZeroPage addresses in artwork/sfx/rmtplayr.a65
|
||||||
.zpvar RMT_Zero_Page_V .byte
|
|
||||||
|
|
||||||
displayposition = modify
|
displayposition = modify
|
||||||
LineAddress4x4 = temp
|
LineAddress4x4 = temp
|
||||||
|
|
||||||
;-------------------------------
|
;-----------------------------------------------
|
||||||
|
; libraries
|
||||||
|
;-----------------------------------------------
|
||||||
|
.IF TARGET = 5200
|
||||||
|
OPT h-f+ ; no headers, single block --> cart bin file
|
||||||
|
icl 'lib/5200SYS.ASM'
|
||||||
|
icl 'lib/5200MACRO.ASM'
|
||||||
|
.enum @kbcode
|
||||||
|
/*
|
||||||
|
_0
|
||||||
|
_1
|
||||||
|
_2
|
||||||
|
_3
|
||||||
|
_4
|
||||||
|
_5
|
||||||
|
_6
|
||||||
|
_7
|
||||||
|
_8
|
||||||
|
_9
|
||||||
|
_asterisk = $0a
|
||||||
|
_hash = $0b
|
||||||
|
_start = $0c
|
||||||
|
_pause = $0d
|
||||||
|
_reset = $0e
|
||||||
|
*/
|
||||||
|
_space = $00
|
||||||
|
_Y = $01
|
||||||
|
_up = $f2 ;02
|
||||||
|
_O = $03
|
||||||
|
_left = $f4 ;04
|
||||||
|
_tab = $05
|
||||||
|
_right = $f6 ;06
|
||||||
|
_A = $07
|
||||||
|
_down = $f8 ;08
|
||||||
|
_I = $09
|
||||||
|
_esc = $0a
|
||||||
|
_ret = $fb ;$0b ;not used in 5200
|
||||||
|
_del = $fc ;$0c ;not used in 5200
|
||||||
|
_M = $0d
|
||||||
|
_S = $0e
|
||||||
|
_none = $0f
|
||||||
|
|
||||||
icl 'lib/ATARISYS.ASM'
|
.ende */
|
||||||
icl 'lib/macro.hea'
|
.ELSE
|
||||||
|
icl 'lib/ATARISYS.ASM'
|
||||||
;splash screen and musix
|
icl 'lib/MACRO.ASM'
|
||||||
icl 'artwork/Scorch50.asm'
|
icl 'artwork/Scorch50.asm' ; splash screen and musix
|
||||||
|
.ENDIF
|
||||||
|
|
||||||
;Game loading address
|
;-----------------------------------------------
|
||||||
ORG $3000
|
; variable declarations in RAM (no code)
|
||||||
|
;-----------------------------------------------
|
||||||
|
ORG PMGraph + $0300 - (variablesEnd - OneTimeZeroVariables + 1)
|
||||||
|
icl 'variables.asm'
|
||||||
|
|
||||||
|
; Game loading address
|
||||||
|
ORG $4000
|
||||||
|
|
||||||
WeaponFont
|
WeaponFont
|
||||||
ins 'artwork/weapons_AW6_mod.fnt' ; 'artwork/weapons.fnt'
|
ins 'artwork/weapons_AW6_mod.fnt' ; 'artwork/weapons.fnt'
|
||||||
|
|
||||||
;-----------------------------------------------
|
;-----------------------------------------------
|
||||||
;Screen displays go here to avoid crossing 4kb barrier
|
;Screen displays go here to avoid crossing 4kb barrier
|
||||||
;-----------------------------------------------
|
;-----------------------------------------------
|
||||||
icl 'display.asm'
|
DisplayCopyRom = *
|
||||||
|
org display, DisplayCopyRom
|
||||||
|
DisplayCopyStart
|
||||||
|
icl 'display_main_menu.asm'
|
||||||
|
DisplayCopyEnd
|
||||||
|
org DisplayCopyRom + (DisplayCopyEnd - DisplayCopyStart)
|
||||||
|
|
||||||
|
DisplayCopyPurchaseDlROM = *
|
||||||
|
org DisplayCopyPurchase, DisplayCopyPurchaseDlROM
|
||||||
|
DisplayCopyPurchaseStart
|
||||||
|
icl 'display_purchasedl.asm'
|
||||||
|
DisplayCopyPurchaseEnd
|
||||||
|
org DisplayCopyPurchaseDlROM + (DisplayCopyPurchaseEnd - DisplayCopyPurchaseStart)
|
||||||
|
|
||||||
|
StatusBufferROM = *
|
||||||
|
org StatusBufferCopy, StatusBufferROM
|
||||||
|
StatusBufferCopyStart
|
||||||
|
icl 'display_status.asm'
|
||||||
|
StatusBufferCopyEnd
|
||||||
|
org StatusBufferROM + (StatusBufferCopyEnd - StatusBufferCopyStart)
|
||||||
|
|
||||||
|
|
||||||
|
icl 'display_static.asm'
|
||||||
;----------------------------------------------
|
;----------------------------------------------
|
||||||
|
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
@@ -176,15 +225,15 @@ FirstSTART
|
|||||||
; one time zero variables in RAM (non zero page)
|
; one time zero variables in RAM (non zero page)
|
||||||
lda #0
|
lda #0
|
||||||
ldy #OneTimeZeroVariablesCount-1
|
ldy #OneTimeZeroVariablesCount-1
|
||||||
@ sta OneTimeZeroVariables,y
|
@ sta OneTimeZeroVariables,y
|
||||||
dey
|
dey
|
||||||
bpl @-
|
bpl @-
|
||||||
|
|
||||||
; initialize variables in RAM (non zero page)
|
; initialize variables in RAM (non zero page)
|
||||||
ldy #initialvaluesCount-1
|
ldy #initialvaluesCount-1
|
||||||
@ lda initialvaluesStart,y
|
@ lda initialvaluesStart,y
|
||||||
sta variablesToInitialize,y
|
sta variablesToInitialize,y
|
||||||
dey
|
dey
|
||||||
bpl @-
|
bpl @-
|
||||||
|
|
||||||
|
|
||||||
@@ -202,7 +251,6 @@ FirstSTART
|
|||||||
cpy #screenheight+1
|
cpy #screenheight+1
|
||||||
bne @-
|
bne @-
|
||||||
|
|
||||||
|
|
||||||
; 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)
|
||||||
@@ -210,20 +258,24 @@ FirstSTART
|
|||||||
lda #$ff ;initial value
|
lda #$ff ;initial value
|
||||||
sta sfx_effect
|
sta sfx_effect
|
||||||
|
|
||||||
lda #0
|
RMTSong 0
|
||||||
jsr RmtSongSelect
|
|
||||||
|
|
||||||
|
.IF TARGET = 5200
|
||||||
|
mva #$0f STICK0
|
||||||
|
mva #$04 CONSOL5200 ;Speaker off, Pots enabled, port #1 selected
|
||||||
|
mwa #kb_continue VKEYCNT ;Keyboard handler
|
||||||
|
.ENDIF
|
||||||
VMAIN VBLinterrupt,7 ;jsr SetVBL
|
VMAIN VBLinterrupt,7 ;jsr SetVBL
|
||||||
|
|
||||||
|
mva #2 chactl ; necessary for 5200
|
||||||
|
|
||||||
START
|
START
|
||||||
; Startup sequence
|
; Startup sequence
|
||||||
jsr Initialize
|
jsr Initialize
|
||||||
|
|
||||||
;jsr GameOverScreen ; only for test !!!
|
;jsr GameOverScreen ; only for test !!!
|
||||||
|
|
||||||
lda #song_main_menu
|
RMTSong song_main_menu
|
||||||
jsr RmtSongSelect
|
|
||||||
|
|
||||||
|
|
||||||
jsr Options ;startup screen
|
jsr Options ;startup screen
|
||||||
jsr MakeDarkScreen
|
jsr MakeDarkScreen
|
||||||
@@ -242,12 +294,7 @@ MainGameLoop
|
|||||||
jsr SetWallsType
|
jsr SetWallsType
|
||||||
; first set default barrel lengths (fix for Long Schlong activation :) )
|
; first set default barrel lengths (fix for Long Schlong activation :) )
|
||||||
; we must do it before purchase/activate
|
; we must do it before purchase/activate
|
||||||
ldx #(MaxPlayers-1)
|
jsr SetStandardBarrels
|
||||||
SettingBarrel
|
|
||||||
lda #StandardBarrel ; standard barrel length
|
|
||||||
sta BarrelLength,x
|
|
||||||
dex
|
|
||||||
bpl SettingBarrel
|
|
||||||
|
|
||||||
jsr CallPurchaseForEveryTank
|
jsr CallPurchaseForEveryTank
|
||||||
|
|
||||||
@@ -281,8 +328,7 @@ SettingBarrel
|
|||||||
; Results are number of other deaths
|
; Results are number of other deaths
|
||||||
; before the player dies itself
|
; before the player dies itself
|
||||||
|
|
||||||
lda #song_round_over
|
RmtSong song_round_over
|
||||||
jsr RmtSongSelect
|
|
||||||
jsr DisplayResults
|
jsr DisplayResults
|
||||||
|
|
||||||
jsr DemoModeOrKey
|
jsr DemoModeOrKey
|
||||||
@@ -385,7 +431,7 @@ GoGameOver
|
|||||||
NoGameOverYet
|
NoGameOverYet
|
||||||
inc CurrentRoundNr
|
inc CurrentRoundNr
|
||||||
jsr MakeDarkScreen ; issue #72
|
jsr MakeDarkScreen ; issue #72
|
||||||
jsr RmtSongSelect
|
; jsr RmtSongSelect ; ?????
|
||||||
mva #sfx_silencer sfx_effect
|
mva #sfx_silencer sfx_effect
|
||||||
jsr PMoutofscreen
|
jsr PMoutofscreen
|
||||||
|
|
||||||
@@ -402,8 +448,7 @@ NoGameOverYet
|
|||||||
; the shooting angle is randomized
|
; the shooting angle is randomized
|
||||||
; of course gains an loses are zeroed
|
; of course gains an loses are zeroed
|
||||||
|
|
||||||
lda #song_ingame
|
RmtSong song_ingame
|
||||||
jsr RmtSongSelect
|
|
||||||
|
|
||||||
jsr SetPMWidth
|
jsr SetPMWidth
|
||||||
lda #0
|
lda #0
|
||||||
@@ -457,16 +502,15 @@ SettingEnergies
|
|||||||
jsr calculatemountains ;let mountains be easy for the eye
|
jsr calculatemountains ;let mountains be easy for the eye
|
||||||
;jsr calculatemountains0 ;only for tests - makes mountains flat and 0 height
|
;jsr calculatemountains0 ;only for tests - makes mountains flat and 0 height
|
||||||
|
|
||||||
|
|
||||||
|
mwa #StatusBufferROM temp
|
||||||
|
mwa #StatusBufferCopy temp2
|
||||||
|
mwa #StatusBufferCopyEnd+1 modify
|
||||||
|
jsr CopyFromROM
|
||||||
|
|
||||||
jsr SetMainScreen
|
jsr SetMainScreen
|
||||||
jsr ColorsOfSprites
|
jsr ColorsOfSprites
|
||||||
|
|
||||||
; lda #90 ; barrel fully erect
|
|
||||||
; ldx #MaxPlayers-1
|
|
||||||
;@ sta previousBarrelAngle,x
|
|
||||||
; dex
|
|
||||||
; bpl @-
|
|
||||||
|
|
||||||
|
|
||||||
jsr drawmountains ;draw them
|
jsr drawmountains ;draw them
|
||||||
jsr drawtanks ;finally draw tanks
|
jsr drawtanks ;finally draw tanks
|
||||||
|
|
||||||
@@ -570,7 +614,7 @@ RoboTanks
|
|||||||
jsr DisplayStatus ; to make visible AI selected defensive (and offensive :) )
|
jsr DisplayStatus ; to make visible AI selected defensive (and offensive :) )
|
||||||
jsr MoveBarrelToNewPosition
|
jsr MoveBarrelToNewPosition
|
||||||
lda kbcode
|
lda kbcode
|
||||||
cmp #28 ; ESC
|
cmp #@kbcode._esc ; 28 ; ESC
|
||||||
bne @+
|
bne @+
|
||||||
jsr AreYouSure
|
jsr AreYouSure
|
||||||
@ lda escFlag
|
@ lda escFlag
|
||||||
@@ -632,16 +676,9 @@ ShootNow
|
|||||||
lda HitFlag ;0 if missed
|
lda HitFlag ;0 if missed
|
||||||
beq missed
|
beq missed
|
||||||
|
|
||||||
lda #0
|
|
||||||
; sta FallDown2
|
|
||||||
jsr Explosion
|
jsr Explosion
|
||||||
|
|
||||||
continueMainRoundLoopAfterSeppuku
|
continueMainRoundLoopAfterSeppuku
|
||||||
;here we clear offensive text (after a shoot)
|
|
||||||
;ldy TankNr
|
|
||||||
;mva #0 plot4x4color
|
|
||||||
;jsr DisplayOffensiveTextNr
|
|
||||||
|
|
||||||
|
|
||||||
AfterExplode
|
AfterExplode
|
||||||
jsr SoilDown2 ; allways
|
jsr SoilDown2 ; allways
|
||||||
@@ -659,9 +696,8 @@ NoExistNoFall
|
|||||||
dex
|
dex
|
||||||
bpl TanksFallDown
|
bpl TanksFallDown
|
||||||
mvx tempor2 TankNr
|
mvx tempor2 TankNr
|
||||||
missed
|
|
||||||
|
|
||||||
; TODO: IS IT OK??? possibly a fix here needed for #56
|
missed
|
||||||
ldy WeaponDepleted
|
ldy WeaponDepleted
|
||||||
bne @+
|
bne @+
|
||||||
ldx TankNr
|
ldx TankNr
|
||||||
@@ -670,7 +706,6 @@ missed
|
|||||||
@
|
@
|
||||||
|
|
||||||
;here we clear offensive text (after a shoot)
|
;here we clear offensive text (after a shoot)
|
||||||
;shit -- it's second time, but it must be like this
|
|
||||||
ldy TankNr
|
ldy TankNr
|
||||||
mva #$00 plot4x4color
|
mva #$00 plot4x4color
|
||||||
jsr DisplayOffensiveTextNr
|
jsr DisplayOffensiveTextNr
|
||||||
@@ -742,7 +777,6 @@ NoPlayerNoDeath
|
|||||||
;clear NoDeathCounter here
|
;clear NoDeathCounter here
|
||||||
sta noDeathCounter
|
sta noDeathCounter
|
||||||
|
|
||||||
|
|
||||||
; display defensive text here (well, defensive
|
; display defensive text here (well, defensive
|
||||||
; is not the real meaning, it should be pre-death,
|
; is not the real meaning, it should be pre-death,
|
||||||
; but I am too lazy to change names of variables)
|
; but I am too lazy to change names of variables)
|
||||||
@@ -756,7 +790,7 @@ NoPlayerNoDeath
|
|||||||
inc CurrentResult
|
inc CurrentResult
|
||||||
|
|
||||||
mva #sfx_death_begin sfx_effect
|
mva #sfx_death_begin sfx_effect
|
||||||
;RandomizeDeffensiveText
|
; RandomizeDeffensiveText
|
||||||
randomize talk.NumberOfOffensiveTexts (talk.NumberOfDeffensiveTexts+talk.NumberOfOffensiveTexts-1)
|
randomize talk.NumberOfOffensiveTexts (talk.NumberOfDeffensiveTexts+talk.NumberOfOffensiveTexts-1)
|
||||||
sta TextNumberOff
|
sta TextNumberOff
|
||||||
ldy TankTempY
|
ldy TankTempY
|
||||||
@@ -794,7 +828,6 @@ NoPlayerNoDeath
|
|||||||
;cleanup of the soil fall down ranges (left and right)
|
;cleanup of the soil fall down ranges (left and right)
|
||||||
sta RangeRight
|
sta RangeRight
|
||||||
sta RangeRight+1
|
sta RangeRight+1
|
||||||
; sta FallDown2
|
|
||||||
mwa #screenwidth RangeLeft
|
mwa #screenwidth RangeLeft
|
||||||
|
|
||||||
; We are randomizing the weapon now.
|
; We are randomizing the weapon now.
|
||||||
@@ -901,11 +934,10 @@ NotNegativeShieldEnergy
|
|||||||
;---------------------------------
|
;---------------------------------
|
||||||
.proc Seppuku
|
.proc Seppuku
|
||||||
lda #0
|
lda #0
|
||||||
;sta FallDown2
|
|
||||||
sta ydraw+1
|
sta ydraw+1
|
||||||
; get position of the tank
|
; get position of the tank
|
||||||
ldx TankNr
|
ldx TankNr
|
||||||
lda #0 ; turn off defense weapons when hara-kiring
|
; lda #0 ; turn off defense weapons when hara-kiring
|
||||||
sta ActiveDefenceWeapon,x
|
sta ActiveDefenceWeapon,x
|
||||||
sta ShieldEnergy,x
|
sta ShieldEnergy,x
|
||||||
jsr SetupXYdraw
|
jsr SetupXYdraw
|
||||||
@@ -973,27 +1005,6 @@ B0 DEY
|
|||||||
sta MaxForceTableL,x
|
sta MaxForceTableL,x
|
||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
;--------------------------------------------------
|
|
||||||
.proc PMoutofScreen
|
|
||||||
;--------------------------------------------------
|
|
||||||
lda #$00 ; let all P/M disappear
|
|
||||||
:8 sta hposp0+#
|
|
||||||
rts
|
|
||||||
.endp
|
|
||||||
;--------------------------------------------------
|
|
||||||
.proc ColorsOfSprites
|
|
||||||
lda TankColoursTable ; colours of sprites under tanks
|
|
||||||
sta PCOLR0
|
|
||||||
lda TankColoursTable+1
|
|
||||||
sta PCOLR1
|
|
||||||
lda TankColoursTable+2
|
|
||||||
sta PCOLR2
|
|
||||||
lda TankColoursTable+3
|
|
||||||
sta PCOLR3
|
|
||||||
LDA TankColoursTable+4
|
|
||||||
STA COLOR3 ; joined missiles (5th tank)
|
|
||||||
rts
|
|
||||||
.endp
|
|
||||||
|
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
.proc WeaponCleanup;
|
.proc WeaponCleanup;
|
||||||
@@ -1095,17 +1106,6 @@ MakeTanksVisible
|
|||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
.proc SetPMWidth
|
|
||||||
lda #$00
|
|
||||||
sta sizep0 ; P0-P3 widths
|
|
||||||
sta sizep0+1
|
|
||||||
sta sizep0+2
|
|
||||||
sta sizep0+3
|
|
||||||
lda #%01010101
|
|
||||||
sta sizem ; all missiles, double width
|
|
||||||
rts
|
|
||||||
.endp
|
|
||||||
;--------------------------------------------------
|
|
||||||
.proc DLIinterruptGraph
|
.proc DLIinterruptGraph
|
||||||
;sta dliA
|
;sta dliA
|
||||||
;sty dliY
|
;sty dliY
|
||||||
@@ -1114,8 +1114,9 @@ MakeTanksVisible
|
|||||||
ldy dliCounter
|
ldy dliCounter
|
||||||
lda dliColorsBack,y
|
lda dliColorsBack,y
|
||||||
ldy dliColorsFore
|
ldy dliColorsFore
|
||||||
nop
|
.IF TARGET = 800
|
||||||
nop
|
nop ; necessary on 800 because DLIs take less time, jitter visible without it
|
||||||
|
.ENDIF
|
||||||
nop
|
nop
|
||||||
sta COLPF1
|
sta COLPF1
|
||||||
sty COLPF2
|
sty COLPF2
|
||||||
@@ -1162,7 +1163,7 @@ ColoredLines
|
|||||||
cmp #9
|
cmp #9
|
||||||
beq CreditsScroll
|
beq CreditsScroll
|
||||||
tay
|
tay
|
||||||
lda GameOverColoursTable-3,y ; -2 becouse 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
|
||||||
@@ -1176,6 +1177,7 @@ CreditsScroll
|
|||||||
cmp #32 ;not too fast
|
cmp #32 ;not too fast
|
||||||
beq nextlinedisplay
|
beq nextlinedisplay
|
||||||
:2 lsr ;not too fast
|
:2 lsr ;not too fast
|
||||||
|
sta WSYNC
|
||||||
sta VSCROL
|
sta VSCROL
|
||||||
jmp EndOfDLI_GO
|
jmp EndOfDLI_GO
|
||||||
nextlinedisplay
|
nextlinedisplay
|
||||||
@@ -1196,8 +1198,9 @@ EndOfDLI_GO
|
|||||||
.proc DLIinterruptText
|
.proc DLIinterruptText
|
||||||
;sta dliA
|
;sta dliA
|
||||||
pha
|
pha
|
||||||
|
lda #TextBackgroundColor
|
||||||
sta WSYNC
|
sta WSYNC
|
||||||
mva #TextBackgroundColor COLPF2
|
sta COLPF2
|
||||||
mva #TextForegroundColor COLPF3
|
mva #TextForegroundColor COLPF3
|
||||||
;lda dliA
|
;lda dliA
|
||||||
pla
|
pla
|
||||||
@@ -1206,9 +1209,6 @@ DLIinterruptNone
|
|||||||
.endp
|
.endp
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
.proc VBLinterrupt
|
.proc VBLinterrupt
|
||||||
pha
|
|
||||||
phx
|
|
||||||
phy
|
|
||||||
mva #0 dliCounter
|
mva #0 dliCounter
|
||||||
|
|
||||||
lda PAL
|
lda PAL
|
||||||
@@ -1244,11 +1244,59 @@ lab2
|
|||||||
; ------- RMT -------
|
; ------- RMT -------
|
||||||
SkipRMTVBL
|
SkipRMTVBL
|
||||||
exitVBL
|
exitVBL
|
||||||
ply
|
.IF TARGET = 5200
|
||||||
plx
|
center = 114 ;Read analog stick and make it look like a digital stick
|
||||||
pla
|
threshold = 60
|
||||||
jmp XITVBV
|
|
||||||
|
lda paddl0 ;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 ;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
|
||||||
|
|
||||||
|
mva trig0 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
|
||||||
|
jmp XITVBV
|
||||||
|
.ENDIF
|
||||||
.endp
|
.endp
|
||||||
|
.IF TARGET = 5200
|
||||||
|
.proc kb_continue
|
||||||
|
sta kbcode ;Store key code in shadow.
|
||||||
|
exit pla
|
||||||
|
tay
|
||||||
|
pla
|
||||||
|
tax
|
||||||
|
pla
|
||||||
|
rti
|
||||||
|
.endp
|
||||||
|
.ENDIF
|
||||||
;----------------------------------------------
|
;----------------------------------------------
|
||||||
.proc RandomizeSequence0
|
.proc RandomizeSequence0
|
||||||
ldx #0
|
ldx #0
|
||||||
@@ -1466,7 +1514,7 @@ Bubble
|
|||||||
BubbleBobble
|
BubbleBobble
|
||||||
lda TempResults,x
|
lda TempResults,x
|
||||||
cmp TempResults+1,x
|
cmp TempResults+1,x
|
||||||
beq nextishigher ; this is to block hangs when 2 same values meet
|
beq nextishigher ; this is to block hangs when 2 equal values meet
|
||||||
bcc nextishigher
|
bcc nextishigher
|
||||||
;here we must swap values
|
;here we must swap values
|
||||||
;because next is smaller than previous
|
;because next is smaller than previous
|
||||||
@@ -1518,18 +1566,21 @@ SetRandomWalls
|
|||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
jsr WaitForKeyRelease
|
jsr WaitForKeyRelease
|
||||||
@
|
@
|
||||||
lda SKSTAT
|
.IF TARGET = 800
|
||||||
cmp #$ff
|
lda SKSTAT
|
||||||
beq checkJoyGetKey ; key not pressed, check Joy
|
cmp #$ff
|
||||||
cmp #$f7 ; SHIFT
|
beq checkJoyGetKey ; key not pressed, check Joy
|
||||||
beq checkJoyGetKey
|
cmp #$f7 ; SHIFT
|
||||||
|
beq checkJoyGetKey
|
||||||
lda kbcode
|
.ENDIF
|
||||||
and #$3f ;CTRL and SHIFT ellimination
|
lda kbcode
|
||||||
cmp #28 ; ESC
|
cmp #@kbcode._none
|
||||||
bne getkeyend
|
beq checkJoyGetKey
|
||||||
mvx #$80 escFlag
|
and #$3f ;CTRL and SHIFT ellimination
|
||||||
bne getkeyend
|
cmp #@kbcode._esc ; 28 ; ESC
|
||||||
|
bne getkeyend
|
||||||
|
mvx #$80 escFlag
|
||||||
|
bne getkeyend
|
||||||
|
|
||||||
checkJoyGetKey
|
checkJoyGetKey
|
||||||
;------------JOY-------------
|
;------------JOY-------------
|
||||||
@@ -1547,7 +1598,7 @@ notpressedJoyGetKey
|
|||||||
;fire
|
;fire
|
||||||
lda STRIG0
|
lda STRIG0
|
||||||
bne @-
|
bne @-
|
||||||
lda #$0c ;Return key
|
lda #@kbcode._ret ;Return key
|
||||||
|
|
||||||
getkeyend
|
getkeyend
|
||||||
mvx #sfx_keyclick sfx_effect
|
mvx #sfx_keyclick sfx_effect
|
||||||
@@ -1566,20 +1617,22 @@ getkeyend
|
|||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
.proc WaitForKeyRelease
|
.proc WaitForKeyRelease
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
lda STICK0
|
lda STICK0
|
||||||
and #$0f
|
and #$0f
|
||||||
cmp #$0f
|
cmp #$0f
|
||||||
bne WaitForKeyRelease
|
bne WaitForKeyRelease
|
||||||
lda STRIG0
|
lda STRIG0
|
||||||
beq WaitForKeyRelease
|
beq WaitForKeyRelease
|
||||||
lda SKSTAT
|
.IF TARGET = 800
|
||||||
cmp #$ff
|
lda SKSTAT
|
||||||
bne WaitForKeyRelease
|
cmp #$ff
|
||||||
lda CONSOL
|
bne WaitForKeyRelease
|
||||||
and #%00000110 ; Select and Option only
|
lda CONSOL
|
||||||
cmp #%00000110
|
and #%00000110 ; Select and Option only
|
||||||
bne WaitForKeyRelease
|
cmp #%00000110
|
||||||
rts
|
bne WaitForKeyRelease
|
||||||
|
rts
|
||||||
|
.ENDIF
|
||||||
.endp
|
.endp
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
.proc IsKeyPressed ; A=0 - yes , A>0 - no
|
.proc IsKeyPressed ; A=0 - yes , A>0 - no
|
||||||
@@ -1606,26 +1659,25 @@ checkForHuman ; if all in skillTable other than 0 then switch to DEMO MODE
|
|||||||
;pause 150
|
;pause 150
|
||||||
ldy #75
|
ldy #75
|
||||||
jsr PauseYFrames
|
jsr PauseYFrames
|
||||||
jmp noKey
|
rts
|
||||||
|
|
||||||
peopleAreHere
|
peopleAreHere
|
||||||
jsr getkey
|
jmp getkey ; jsr:rts
|
||||||
noKey
|
|
||||||
rts
|
|
||||||
.endp
|
.endp
|
||||||
|
|
||||||
MakeDarkScreen
|
MakeDarkScreen
|
||||||
mva #0 dmactls ; dark screen
|
mva #0 dmactls ; dark screen
|
||||||
|
sta dmactl
|
||||||
; and wait one frame :)
|
; and wait one frame :)
|
||||||
.proc WaitOneFrame
|
.proc WaitOneFrame
|
||||||
lda CONSOL
|
lda CONSOL
|
||||||
and #%00000101 ; Start + Option
|
and #%00000101 ; Start + Option
|
||||||
bne @+
|
sne:mva #$40 escFlag
|
||||||
mva #$40 escFlag
|
and #%00000001 ; START KEY
|
||||||
@ and #%00000001 ; START KEY
|
seq:wait
|
||||||
beq @+
|
rts
|
||||||
wait
|
|
||||||
@ rts
|
|
||||||
.endp
|
.endp
|
||||||
|
|
||||||
.proc PauseYFrames
|
.proc PauseYFrames
|
||||||
; Y - number of frames to wait (divided by 2)
|
; Y - number of frames to wait (divided by 2)
|
||||||
; pauses for maximally 510 frames (255 * 2)
|
; pauses for maximally 510 frames (255 * 2)
|
||||||
@@ -1641,7 +1693,7 @@ MakeDarkScreen
|
|||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
; starting song line 0-255 to A reg
|
; starting song line 0-255 to A reg
|
||||||
cmp #song_ingame
|
cmp #song_ingame
|
||||||
bne noingame ; noMusic blck onlu ingame song
|
bne noingame ; noMusic blocks only ingame song
|
||||||
bit noMusic
|
bit noMusic
|
||||||
spl:lda #song_silencio
|
spl:lda #song_silencio
|
||||||
noingame
|
noingame
|
||||||
@@ -1652,58 +1704,115 @@ noingame
|
|||||||
mva #0 RMT_blocked
|
mva #0 RMT_blocked
|
||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
;;--------------------------------------------------
|
;-------------------------------------------------
|
||||||
;.proc Randomizer
|
.proc CopyFromROM
|
||||||
;;--------------------------------------------------
|
;-------------------------------------------------
|
||||||
; ;usage: randomize floor ceiling
|
;copy from CART to RAM
|
||||||
; ;returns (in A) a random .byte between "floor" and "ceiling"
|
; trashes: Y
|
||||||
;?rand
|
; temp: source
|
||||||
; lda random
|
; temp2: destination
|
||||||
; cmp #:1 ;floor
|
; modify: destination-end
|
||||||
; bcc ?rand
|
;usage:
|
||||||
; cmp #:2+1 ;ceiling
|
; mwa #DisplayCopyRom temp
|
||||||
; bcs ?rand
|
; mwa #display temp2
|
||||||
; rts
|
; mwa #DisplayCopyEnd+1 modify
|
||||||
;.endp
|
; jsr CopyFromROM
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
@ lda (temp),y
|
||||||
|
sta (temp2),y
|
||||||
|
inw temp
|
||||||
|
inw temp2
|
||||||
|
cpw temp2 modify
|
||||||
|
bne @-
|
||||||
|
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 'weapons.asm'
|
icl 'constants.asm'
|
||||||
;----------------------------------------------
|
;----------------------------------------------
|
||||||
icl 'textproc.asm'
|
icl 'textproc.asm'
|
||||||
;----------------------------------------------
|
;----------------------------------------------
|
||||||
icl 'grafproc.asm'
|
icl 'grafproc.asm'
|
||||||
;----------------------------------------------
|
;----------------------------------------------
|
||||||
icl 'ai.asm'
|
icl 'weapons.asm'
|
||||||
;----------------------------------------------
|
;----------------------------------------------
|
||||||
icl 'constants.asm'
|
icl 'ai.asm'
|
||||||
;----------------------------------------------
|
;----------------------------------------------
|
||||||
icl 'artwork/talk.asm'
|
icl 'artwork/talk.asm'
|
||||||
;----------------------------------------------
|
;----------------------------------------------
|
||||||
TankFont
|
TankFont
|
||||||
ins 'artwork/tanksv3.fnt',+0,352 ; 44 characters only
|
ins 'artwork/tanksv3.fnt',+0,352 ; 44 characters only
|
||||||
;----------------------------------------------
|
;----------------------------------------------
|
||||||
icl 'variables.asm'
|
|
||||||
;----------------------------------------------
|
|
||||||
|
|
||||||
; reserved space for RMT player
|
;RMT PLAYER and song loading shenaningans
|
||||||
.ds $0320
|
icl 'artwork/sfx/rmtplayr_modified.asm'
|
||||||
.align $100
|
org $b000
|
||||||
PLAYER
|
MODUL ; equ $b000 ;address of RMT module
|
||||||
.ECHO 'PLAYER: ',*
|
;opt h- ;RMT module is standard Atari binary file already
|
||||||
icl 'artwork/sfx/rmtplayr.a65'
|
ins "artwork/sfx/scorch_str6.rmt",+6 ;include music RMT module
|
||||||
|
;opt h+
|
||||||
MODUL equ $b000 ;address of RMT module
|
MODULEND
|
||||||
opt h- ;RMT module is standard Atari binary file already
|
|
||||||
ins "artwork/sfx/scorch_str6.rmt" ;include music RMT module
|
|
||||||
opt h+
|
|
||||||
;
|
|
||||||
;----------------------------------------------
|
;----------------------------------------------
|
||||||
org $bf80
|
|
||||||
font4x4
|
font4x4
|
||||||
ins 'artwork/font4x4s.bmp',+62
|
ins 'artwork/font4x4s.bmp',+62
|
||||||
|
|
||||||
|
;----------------------------------------------
|
||||||
|
.IF target = 5200
|
||||||
|
.IF * > ROM_SETTINGS-1
|
||||||
|
.ERROR 'Code too long to fit in 5200'
|
||||||
|
.ENDIF
|
||||||
run FirstSTART
|
org ROM_SETTINGS ; 5200 ROM settings address $bfe8
|
||||||
|
; "01234567890123456789"
|
||||||
|
.byte " scorch 5200 v" ;20 characters title
|
||||||
|
build ; " "
|
||||||
|
.byte " "
|
||||||
|
.byte "7A" ;2 characters year .. 1900 + $7A = 2020
|
||||||
|
.word FirstSTART
|
||||||
|
.ELSE
|
||||||
|
run FirstSTART
|
||||||
|
.ENDIF
|
||||||
BIN
Binary file not shown.
BIN
Binary file not shown.
+84
-73
@@ -18,11 +18,13 @@
|
|||||||
|
|
||||||
jsr clearscreen ;let the screen be clean
|
jsr clearscreen ;let the screen be clean
|
||||||
|
|
||||||
|
mwa #DisplayCopyRom temp
|
||||||
|
mwa #display temp2
|
||||||
|
mwa #DisplayCopyEnd+1 modify
|
||||||
|
jsr CopyFromROM
|
||||||
|
|
||||||
mwa #OptionsDL dlptrs
|
mwa #OptionsDL dlptrs
|
||||||
; lda dmactls
|
|
||||||
; and #$fc
|
|
||||||
; ora #$02 ; normal screen width
|
|
||||||
; lda #%00110010 ; normal screen width, DL on, P/M off
|
|
||||||
lda #%00111110 ; normal screen width, DL on, P/M on
|
lda #%00111110 ; normal screen width, DL on, P/M on
|
||||||
sta dmactls
|
sta dmactls
|
||||||
jsr SetPMWidth
|
jsr SetPMWidth
|
||||||
@@ -42,7 +44,7 @@
|
|||||||
sta mountainDeltaL
|
sta mountainDeltaL
|
||||||
mva #6 NumberOfPlayers
|
mva #6 NumberOfPlayers
|
||||||
jsr PMoutofScreen ;let P/M disappear
|
jsr PMoutofScreen ;let P/M disappear
|
||||||
jsr clearscreen ;let the screen be clean
|
;jsr clearscreen ;let the screen be clean (clean-ish already)
|
||||||
jsr ClearPMmemory
|
jsr ClearPMmemory
|
||||||
jsr placetanks ;let the tanks be evenly placed
|
jsr placetanks ;let the tanks be evenly placed
|
||||||
jsr calculatemountains ;let mountains be easy for the eye
|
jsr calculatemountains ;let mountains be easy for the eye
|
||||||
@@ -66,7 +68,7 @@ OptionsMainLoop
|
|||||||
bit escFlag
|
bit escFlag
|
||||||
spl:rts
|
spl:rts
|
||||||
|
|
||||||
cmp #$f ;cursor down
|
cmp #@kbcode._down ; $f ;cursor down
|
||||||
bne OptionsNoDown
|
bne OptionsNoDown
|
||||||
inc:lda OptionsY
|
inc:lda OptionsY
|
||||||
cmp #maxoptions
|
cmp #maxoptions
|
||||||
@@ -75,7 +77,7 @@ OptionsMainLoop
|
|||||||
jmp OptionsMainLoop
|
jmp OptionsMainLoop
|
||||||
|
|
||||||
OptionsNoDown
|
OptionsNoDown
|
||||||
cmp #$e ;cursor up
|
cmp #@kbcode._up ; $e ;cursor up
|
||||||
bne OptionsNoUp
|
bne OptionsNoUp
|
||||||
dec OptionsY
|
dec OptionsY
|
||||||
bpl OptionsMainLoop
|
bpl OptionsMainLoop
|
||||||
@@ -83,7 +85,7 @@ OptionsNoDown
|
|||||||
jmp OptionsMainLoop
|
jmp OptionsMainLoop
|
||||||
|
|
||||||
OptionsNoUp
|
OptionsNoUp
|
||||||
cmp #$6 ;cursor left
|
cmp #@kbcode._left ; $6 ;cursor left
|
||||||
bne OptionsNoLeft
|
bne OptionsNoLeft
|
||||||
ldx OptionsY
|
ldx OptionsY
|
||||||
dec OptionsTable,X
|
dec OptionsTable,X
|
||||||
@@ -93,19 +95,19 @@ OptionsNoUp
|
|||||||
jmp OptionsMainLoop
|
jmp OptionsMainLoop
|
||||||
|
|
||||||
OptionsNoLeft
|
OptionsNoLeft
|
||||||
cmp #$7 ;cursor right
|
cmp #@kbcode._right ; $7 ;cursor right
|
||||||
bne OptionsNoRight
|
bne OptionsNoRight
|
||||||
|
|
||||||
ldx OptionsY
|
ldx OptionsY
|
||||||
inc OptionsTable,X
|
inc OptionsTable,X
|
||||||
lda OptionsTable,X
|
lda OptionsTable,X
|
||||||
cmp #5
|
cmp #5 ; number of columns in options
|
||||||
bne OptionsMainLoop
|
bne OptionsMainLoop
|
||||||
dec OptionsTable,X
|
dec OptionsTable,X
|
||||||
jmp OptionsMainLoop
|
jmp OptionsMainLoop
|
||||||
|
|
||||||
OptionsNoRight
|
OptionsNoRight
|
||||||
cmp #$c ;Return key
|
cmp #@kbcode._ret ; $c ;Return key
|
||||||
bne OptionsNoReturn
|
bne OptionsNoReturn
|
||||||
jmp OptionsFinished
|
jmp OptionsFinished
|
||||||
OptionsNoReturn
|
OptionsNoReturn
|
||||||
@@ -276,6 +278,15 @@ AfterManualPurchase
|
|||||||
; offensive weapon - 0, defensive - %10000000
|
; offensive weapon - 0, defensive - %10000000
|
||||||
jmp Purchase.GoToActivation
|
jmp Purchase.GoToActivation
|
||||||
.endp
|
.endp
|
||||||
|
|
||||||
|
;--------------------------------------------------
|
||||||
|
.proc CopyFromPurchaseAndGameOver
|
||||||
|
mwa #DisplayCopyPurchaseDlROM temp
|
||||||
|
mwa #DisplayCopyPurchase temp2
|
||||||
|
mwa #DisplayCopyPurchaseEnd+1 modify
|
||||||
|
jmp CopyFromROM ; jsr:rts
|
||||||
|
.endp
|
||||||
|
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
.proc Purchase ;
|
.proc Purchase ;
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
@@ -284,6 +295,8 @@ AfterManualPurchase
|
|||||||
; Rest of the data is taken from appropriate tables
|
; Rest of the data is taken from appropriate tables
|
||||||
; and during the purchase these tables are modified.
|
; and during the purchase these tables are modified.
|
||||||
|
|
||||||
|
jsr CopyFromPurchaseAndGameOver
|
||||||
|
|
||||||
mwa #ListOfWeapons WeaponsListDL ;switch to the list of offensive weapons
|
mwa #ListOfWeapons WeaponsListDL ;switch to the list of offensive weapons
|
||||||
|
|
||||||
; we are clearing list of the weapons
|
; we are clearing list of the weapons
|
||||||
@@ -303,7 +316,7 @@ GoToActivation
|
|||||||
bpl @+
|
bpl @+
|
||||||
lda #song_inventory
|
lda #song_inventory
|
||||||
@ jsr RmtSongSelect
|
@ jsr RmtSongSelect
|
||||||
|
|
||||||
ldx tankNr
|
ldx tankNr
|
||||||
lda TankStatusColoursTable,x
|
lda TankStatusColoursTable,x
|
||||||
sta COLOR2
|
sta COLOR2
|
||||||
@@ -317,7 +330,7 @@ GoToActivation
|
|||||||
tax
|
tax
|
||||||
NextChar03
|
NextChar03
|
||||||
lda tanksnames,x
|
lda tanksnames,x
|
||||||
sta textbuffer2+8,y
|
sta purchaseTextBuffer+8,y
|
||||||
inx
|
inx
|
||||||
iny
|
iny
|
||||||
cpy #$08
|
cpy #$08
|
||||||
@@ -335,7 +348,7 @@ AfterPurchase
|
|||||||
sta decimal
|
sta decimal
|
||||||
lda moneyH,x
|
lda moneyH,x
|
||||||
sta decimal+1
|
sta decimal+1
|
||||||
mwa #textbuffer2+26 displayposition
|
mwa #purchaseTextBuffer+26 displayposition
|
||||||
jsr displaydec5
|
jsr displaydec5
|
||||||
|
|
||||||
; in xbyte there is the address of the line that
|
; in xbyte there is the address of the line that
|
||||||
@@ -385,19 +398,19 @@ ChoosingItemForPurchase
|
|||||||
jsr getkey
|
jsr getkey
|
||||||
bit escFlag
|
bit escFlag
|
||||||
spl:jmp WaitForKeyRelease ; like jsr ... : rts
|
spl:jmp WaitForKeyRelease ; like jsr ... : rts
|
||||||
cmp #$2c ; Tab
|
cmp #@kbcode._esc ; $2c ; Tab
|
||||||
jeq ListChange
|
jeq ListChange
|
||||||
cmp #$06 ; cursor left
|
cmp #@kbcode._left ; $06 ; cursor left
|
||||||
jeq ListChange
|
jeq ListChange
|
||||||
cmp #$0c ; Return
|
cmp #@kbcode._ret ; $0c ; Return
|
||||||
sne:rts
|
sne:rts
|
||||||
cmp #$e
|
cmp #@kbcode._up ; $e
|
||||||
beq PurchaseKeyUp
|
beq PurchaseKeyUp
|
||||||
cmp #$f
|
cmp #@kbcode._down ; $f
|
||||||
beq PurchaseKeyDown
|
beq PurchaseKeyDown
|
||||||
cmp #$21 ; Space
|
cmp #@kbcode._space ; $21 ; Space
|
||||||
jeq PurchaseWeaponNow
|
jeq PurchaseWeaponNow
|
||||||
cmp #$07 ; cursor right
|
cmp #@kbcode._right ; $07 ; cursor right
|
||||||
jeq PurchaseWeaponNow
|
jeq PurchaseWeaponNow
|
||||||
bne ChoosingItemForPurchase
|
bne ChoosingItemForPurchase
|
||||||
|
|
||||||
@@ -1057,7 +1070,7 @@ NoArrowDown
|
|||||||
sta difficultyLevel
|
sta difficultyLevel
|
||||||
inx
|
inx
|
||||||
stx decimal
|
stx decimal
|
||||||
mwa #(NameScreen+41) displayposition
|
mwa #(NameScreen2+9) displayposition
|
||||||
jsr displaybyte
|
jsr displaybyte
|
||||||
jsr HighlightLevel ; setting choosen level of the opponent (Moron, etc)
|
jsr HighlightLevel ; setting choosen level of the opponent (Moron, etc)
|
||||||
|
|
||||||
@@ -1124,20 +1137,20 @@ YesLetter
|
|||||||
@ stx PositionInName ; if not, we store
|
@ stx PositionInName ; if not, we store
|
||||||
jmp CheckKeys
|
jmp CheckKeys
|
||||||
CheckFurtherX01 ; here we check Tab, Return and Del
|
CheckFurtherX01 ; here we check Tab, Return and Del
|
||||||
cmp #$0c ; Return
|
cmp #@kbcode._ret ; $0c ; Return
|
||||||
jeq EndOfNick
|
jeq EndOfNick
|
||||||
cmp #$2c ; Tab
|
cmp #@kbcode._tab ; $2c ; Tab
|
||||||
beq ChangeOfLevelUp
|
beq ChangeOfLevelUp
|
||||||
cmp #$7 ;cursor right
|
cmp #@kbcode._right ; $7 ;cursor right
|
||||||
beq ChangeOfLevelUp
|
beq ChangeOfLevelUp
|
||||||
cmp #$6 ;cursor left
|
cmp #@kbcode._left ; $6 ;cursor left
|
||||||
beq ChangeOfLevelDown
|
beq ChangeOfLevelDown
|
||||||
cmp #$f ;cursor down
|
cmp #@kbcode._down ; $f ;cursor down
|
||||||
beq ChangeOfLevel3Up
|
beq ChangeOfLevel3Up
|
||||||
cmp #$e ;cursor up
|
cmp #@kbcode._up ; $e ;cursor up
|
||||||
beq ChangeOfLevel3Down
|
beq ChangeOfLevel3Down
|
||||||
|
|
||||||
cmp #$34 ; Backspace (del)
|
cmp #@kbcode._del ; $34 ; Backspace (del)
|
||||||
bne CheckKeys
|
bne CheckKeys
|
||||||
; handling backing one char
|
; handling backing one char
|
||||||
ldx PositionInName
|
ldx PositionInName
|
||||||
@@ -1321,7 +1334,7 @@ JoyNotCentered
|
|||||||
bne NoRight
|
bne NoRight
|
||||||
; joy right
|
; joy right
|
||||||
cpy #7
|
cpy #7
|
||||||
beq GoToMainLoop ; jast character
|
beq GoToMainLoop ; the last character
|
||||||
iny
|
iny
|
||||||
bne GoToMainLoop
|
bne GoToMainLoop
|
||||||
NoRight
|
NoRight
|
||||||
@@ -1340,7 +1353,7 @@ NoLeft
|
|||||||
; joy up
|
; joy up
|
||||||
cpx #(keycodesEnd-keycodes-1)
|
cpx #(keycodesEnd-keycodes-1)
|
||||||
bne @+
|
bne @+
|
||||||
ldx #$00 ; set to first character index (loop)
|
ldx #$00 ; set to the first character index (loop)
|
||||||
beq CharAndMainLoop
|
beq CharAndMainLoop
|
||||||
@ inx
|
@ inx
|
||||||
bne CharAndMainLoop
|
bne CharAndMainLoop
|
||||||
@@ -1350,7 +1363,7 @@ NoUp
|
|||||||
; joy down
|
; joy down
|
||||||
dex
|
dex
|
||||||
bpl CharAndMainLoop
|
bpl CharAndMainLoop
|
||||||
ldx #(keycodesEnd-keycodes-1) ; set to last character index (loop)
|
ldx #(keycodesEnd-keycodes-1) ; set to the last character index (loop)
|
||||||
CharAndMainLoop
|
CharAndMainLoop
|
||||||
lda scrcodes,x
|
lda scrcodes,x
|
||||||
sta NameAdr,y
|
sta NameAdr,y
|
||||||
@@ -1754,7 +1767,7 @@ EndOfTypeLine4x4
|
|||||||
|
|
||||||
|
|
||||||
jsr GetKey
|
jsr GetKey
|
||||||
cmp #$2b ; "Y"
|
cmp #@kbcode._Y ; $2b ; "Y"
|
||||||
bne @+
|
bne @+
|
||||||
mva #$80 escFlag
|
mva #$80 escFlag
|
||||||
bne skip01
|
bne skip01
|
||||||
@@ -1864,8 +1877,7 @@ quit_seppuku
|
|||||||
beq @+ ;unconditional jump, because TypeLine4x4 ends with beq
|
beq @+ ;unconditional jump, because TypeLine4x4 ends with beq
|
||||||
|
|
||||||
GameOver4x4
|
GameOver4x4
|
||||||
lda #song_round_over
|
RmtSong song_round_over
|
||||||
jsr RmtSongSelect
|
|
||||||
mwa #LineGameOver LineAddress4x4
|
mwa #LineGameOver LineAddress4x4
|
||||||
mwa #((ScreenWidth/2)-(8*4)) LineXdraw
|
mwa #((ScreenWidth/2)-(8*4)) LineXdraw
|
||||||
mva ResultY LineYdraw
|
mva ResultY LineYdraw
|
||||||
@@ -2008,6 +2020,7 @@ FinishResultDisplay
|
|||||||
jsr ClearPMmemory
|
jsr ClearPMmemory
|
||||||
jsr PrepareCredits
|
jsr PrepareCredits
|
||||||
jsr GameOverResultsClear
|
jsr GameOverResultsClear
|
||||||
|
jsr CopyFromPurchaseAndGameOver
|
||||||
mwa #GameOverDL dlptrs
|
mwa #GameOverDL dlptrs
|
||||||
lda #%00111110 ; normal screen width, DL on, P/M on
|
lda #%00111110 ; normal screen width, DL on, P/M on
|
||||||
sta dmactls
|
sta dmactls
|
||||||
@@ -2113,8 +2126,7 @@ MakeAllTanksVisible
|
|||||||
jsr SetStandardBarrels
|
jsr SetStandardBarrels
|
||||||
|
|
||||||
; start music and animations
|
; start music and animations
|
||||||
lda #song_ending_looped
|
RmtSong song_ending_looped
|
||||||
jsr RmtSongSelect
|
|
||||||
; initial tank positions randomization
|
; initial tank positions randomization
|
||||||
ldx #(MaxPlayers-1) ;maxNumberOfPlayers-1
|
ldx #(MaxPlayers-1) ;maxNumberOfPlayers-1
|
||||||
@
|
@
|
||||||
@@ -2258,13 +2270,13 @@ EndOfCredits
|
|||||||
;displaying symbol of the weapon
|
;displaying symbol of the weapon
|
||||||
;---------------------
|
;---------------------
|
||||||
;display name and symbol of the weapon
|
;display name and symbol of the weapon
|
||||||
;textbuffer+18 - symbol (1 char)
|
;statusBuffer+18 - symbol (1 char)
|
||||||
;textbuffer+20 - quantity left
|
;statusBuffer+20 - quantity left
|
||||||
;textbuffer+23 - name
|
;statusBuffer+23 - name
|
||||||
ldx TankNr
|
ldx TankNr
|
||||||
ldy ActiveWeapon,x
|
ldy ActiveWeapon,x
|
||||||
lda WeaponSymbols,y
|
lda WeaponSymbols,y
|
||||||
sta TextBuffer+18
|
sta statusBuffer+18
|
||||||
|
|
||||||
;---------------------
|
;---------------------
|
||||||
;displaying quantity of the given weapon
|
;displaying quantity of the given weapon
|
||||||
@@ -2272,7 +2284,7 @@ EndOfCredits
|
|||||||
lda ActiveWeapon,x
|
lda ActiveWeapon,x
|
||||||
jsr HowManyBullets
|
jsr HowManyBullets
|
||||||
sta decimal
|
sta decimal
|
||||||
mwa #textbuffer+20 displayposition
|
mwa #statusBuffer+20 displayposition
|
||||||
jsr displaybyte
|
jsr displaybyte
|
||||||
|
|
||||||
;---------------------
|
;---------------------
|
||||||
@@ -2293,7 +2305,7 @@ EndOfCredits
|
|||||||
ldy #15
|
ldy #15
|
||||||
@
|
@
|
||||||
lda (temp),y
|
lda (temp),y
|
||||||
sta textbuffer+23,y
|
sta statusBuffer+23,y
|
||||||
dey
|
dey
|
||||||
bpl @-
|
bpl @-
|
||||||
|
|
||||||
@@ -2301,15 +2313,15 @@ EndOfCredits
|
|||||||
;displaying name of the defence weapon (if active)
|
;displaying name of the defence weapon (if active)
|
||||||
;---------------------
|
;---------------------
|
||||||
lda #$08 ; (
|
lda #$08 ; (
|
||||||
sta textbuffer+80+22
|
sta statusBuffer+80+22
|
||||||
lda #$09 ; )
|
lda #$09 ; )
|
||||||
sta textbuffer+80+39
|
sta statusBuffer+80+39
|
||||||
lda ActiveDefenceWeapon,x
|
lda ActiveDefenceWeapon,x
|
||||||
bne ActiveDefence
|
bne ActiveDefence
|
||||||
; clear brackets
|
; clear brackets
|
||||||
lda #space
|
lda #space
|
||||||
sta textbuffer+80+22
|
sta statusBuffer+80+22
|
||||||
sta textbuffer+80+39
|
sta statusBuffer+80+39
|
||||||
mwa #emptyLine temp
|
mwa #emptyLine temp
|
||||||
jmp ClearingOnly
|
jmp ClearingOnly
|
||||||
ActiveDefence
|
ActiveDefence
|
||||||
@@ -2327,7 +2339,7 @@ ClearingOnly
|
|||||||
ldy #15
|
ldy #15
|
||||||
@
|
@
|
||||||
lda (temp),y
|
lda (temp),y
|
||||||
sta textbuffer+40+40+23,y
|
sta statusBuffer+40+40+23,y
|
||||||
dey
|
dey
|
||||||
bpl @-
|
bpl @-
|
||||||
|
|
||||||
@@ -2338,7 +2350,7 @@ ClearingOnly
|
|||||||
lda Energy,x
|
lda Energy,x
|
||||||
|
|
||||||
sta decimal
|
sta decimal
|
||||||
mwa #textbuffer+48 displayposition
|
mwa #statusBuffer+48 displayposition
|
||||||
jsr displaybyte
|
jsr displaybyte
|
||||||
|
|
||||||
;---------------------
|
;---------------------
|
||||||
@@ -2346,10 +2358,10 @@ ClearingOnly
|
|||||||
;---------------------
|
;---------------------
|
||||||
; clear (if no shield)
|
; clear (if no shield)
|
||||||
lda #space
|
lda #space
|
||||||
sta textbuffer+40+10
|
sta statusBuffer+40+10
|
||||||
sta textbuffer+40+11
|
sta statusBuffer+40+11
|
||||||
sta textbuffer+40+12
|
sta statusBuffer+40+12
|
||||||
sta textbuffer+40+13
|
sta statusBuffer+40+13
|
||||||
; check shield energy and display it
|
; check shield energy and display it
|
||||||
ldx TankNr
|
ldx TankNr
|
||||||
lda ActiveDefenceWeapon,x
|
lda ActiveDefenceWeapon,x
|
||||||
@@ -2358,11 +2370,11 @@ ClearingOnly
|
|||||||
beq NoShieldEnergy
|
beq NoShieldEnergy
|
||||||
sta decimal ; displayed value
|
sta decimal ; displayed value
|
||||||
lda #$08 ; (
|
lda #$08 ; (
|
||||||
sta textbuffer+40+10
|
sta statusBuffer+40+10
|
||||||
mwa #textbuffer+40+11 displayposition
|
mwa #statusBuffer+40+11 displayposition
|
||||||
jsr displaybyte
|
jsr displaybyte
|
||||||
lda #$09 ; )
|
lda #$09 ; )
|
||||||
sta textbuffer+40+13
|
sta statusBuffer+40+13
|
||||||
NoDefenceWeapon
|
NoDefenceWeapon
|
||||||
NoShieldEnergy
|
NoShieldEnergy
|
||||||
|
|
||||||
@@ -2373,9 +2385,9 @@ NoShieldEnergy
|
|||||||
lda Wind+3 ; highest byte of 4 byte wind
|
lda Wind+3 ; highest byte of 4 byte wind
|
||||||
bmi DisplayLeftWind
|
bmi DisplayLeftWind
|
||||||
lda #$7f ; (tab) char
|
lda #$7f ; (tab) char
|
||||||
sta textbuffer+80+20
|
sta statusBuffer+80+20
|
||||||
lda #space
|
lda #space
|
||||||
sta textbuffer+80+17
|
sta statusBuffer+80+17
|
||||||
beq DisplayWindValue
|
beq DisplayWindValue
|
||||||
DisplayLeftWind
|
DisplayLeftWind
|
||||||
sec ; Wind = -Wind
|
sec ; Wind = -Wind
|
||||||
@@ -2386,14 +2398,14 @@ DisplayLeftWind
|
|||||||
sbc temp+1
|
sbc temp+1
|
||||||
sta temp+1
|
sta temp+1
|
||||||
lda #$7e ;(del) char
|
lda #$7e ;(del) char
|
||||||
sta textbuffer+80+17
|
sta statusBuffer+80+17
|
||||||
lda #space
|
lda #space
|
||||||
sta textbuffer+80+20
|
sta statusBuffer+80+20
|
||||||
DisplayWindValue
|
DisplayWindValue
|
||||||
:4 lsrw temp ;divide by 16 to have a nice value on a screen
|
:4 lsrw temp ;divide by 16 to have a nice value on a screen
|
||||||
lda temp
|
lda temp
|
||||||
sta decimal
|
sta decimal
|
||||||
mwa #textbuffer+80+18 displayposition
|
mwa #statusBuffer+80+18 displayposition
|
||||||
jsr displaybyte
|
jsr displaybyte
|
||||||
|
|
||||||
;=========================
|
;=========================
|
||||||
@@ -2401,7 +2413,7 @@ DisplayWindValue
|
|||||||
;=========================
|
;=========================
|
||||||
lda CurrentRoundNr
|
lda CurrentRoundNr
|
||||||
sta decimal
|
sta decimal
|
||||||
mwa #textbuffer+80+7 displayposition
|
mwa #statusBuffer+80+7 displayposition
|
||||||
jsr displaybyte ;decimal (byte), displayposition (word)
|
jsr displaybyte ;decimal (byte), displayposition (word)
|
||||||
|
|
||||||
;=========================
|
;=========================
|
||||||
@@ -2412,7 +2424,7 @@ DisplayWindValue
|
|||||||
sta decimal
|
sta decimal
|
||||||
lda ForceTableH,x
|
lda ForceTableH,x
|
||||||
sta decimal+1
|
sta decimal+1
|
||||||
mwa #textbuffer+40+35 displayposition
|
mwa #statusBuffer+40+35 displayposition
|
||||||
jsr displaydec5
|
jsr displaydec5
|
||||||
|
|
||||||
;=========================
|
;=========================
|
||||||
@@ -2428,9 +2440,9 @@ AngleToRight
|
|||||||
; now we have values from 0 to 89 and right angle
|
; now we have values from 0 to 89 and right angle
|
||||||
sta decimal
|
sta decimal
|
||||||
lda #$7f ; (tab) character
|
lda #$7f ; (tab) character
|
||||||
sta textbuffer+40+25
|
sta statusBuffer+40+25
|
||||||
lda #space
|
lda #space
|
||||||
sta textbuffer+40+22
|
sta statusBuffer+40+22
|
||||||
beq AngleDisplay
|
beq AngleDisplay
|
||||||
AngleToLeft
|
AngleToLeft
|
||||||
sec
|
sec
|
||||||
@@ -2439,19 +2451,19 @@ AngleToLeft
|
|||||||
; angles 180 - 91 converted to 0 - 89
|
; angles 180 - 91 converted to 0 - 89
|
||||||
sta decimal
|
sta decimal
|
||||||
lda #$7e ;(del) char
|
lda #$7e ;(del) char
|
||||||
sta textbuffer+40+22
|
sta statusBuffer+40+22
|
||||||
lda #space
|
lda #space
|
||||||
sta textbuffer+40+25
|
sta statusBuffer+40+25
|
||||||
beq AngleDisplay
|
beq AngleDisplay
|
||||||
VerticallyUp
|
VerticallyUp
|
||||||
; now we have value 90
|
; now we have value 90
|
||||||
sta decimal
|
sta decimal
|
||||||
lda #space
|
lda #space
|
||||||
sta textbuffer+40+25
|
sta statusBuffer+40+25
|
||||||
sta textbuffer+40+22
|
sta statusBuffer+40+22
|
||||||
|
|
||||||
AngleDisplay
|
AngleDisplay
|
||||||
mwa #textbuffer+40+23 displayposition
|
mwa #statusBuffer+40+23 displayposition
|
||||||
jsr displaybyte
|
jsr displaybyte
|
||||||
ldx TankNr
|
ldx TankNr
|
||||||
rts
|
rts
|
||||||
@@ -2467,7 +2479,7 @@ AngleDisplay
|
|||||||
tax
|
tax
|
||||||
NextChar02
|
NextChar02
|
||||||
lda tanksnames,x
|
lda tanksnames,x
|
||||||
sta textbuffer+7,y
|
sta statusBuffer+7,y
|
||||||
inx
|
inx
|
||||||
iny
|
iny
|
||||||
cpy #$08
|
cpy #$08
|
||||||
@@ -2496,7 +2508,7 @@ NextChar02
|
|||||||
|
|
||||||
; set background
|
; set background
|
||||||
lda #$ff
|
lda #$ff
|
||||||
ldx #100 ; top of the sprites
|
ldx #100+7 ; top of the sprites
|
||||||
@ sta PMGraph+$400,x
|
@ sta PMGraph+$400,x
|
||||||
sta PMGraph+$500,x
|
sta PMGraph+$500,x
|
||||||
inx
|
inx
|
||||||
@@ -2511,6 +2523,5 @@ NextChar02
|
|||||||
|
|
||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
;-------------------------------------------------
|
|
||||||
|
|
||||||
.endif
|
.endif
|
||||||
+103
-51
@@ -14,35 +14,43 @@ OneTimeZeroVariablesCount = variablesToInitialize-OneTimeZeroVariables ; MAX 12
|
|||||||
.error "OneTimeZeroVariablesCount too large, ",OneTimeZeroVariablesCount
|
.error "OneTimeZeroVariablesCount too large, ",OneTimeZeroVariablesCount
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
noMusic .by 0 ; 0 - play music, $ff - do not play music
|
noMusic .ds 1 ;.by 0 ; 0 - play music, $ff - do not play music
|
||||||
noSfx .by 0 ; 0 - play SFX, $ff - do not play SFX
|
noSfx .ds 1 ;.by 0 ; 0 - play SFX, $ff - do not play SFX
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
; Color table for Game Over Screen (created in a gameover routine)
|
; Color table for Game Over Screen (created in a gameover routine)
|
||||||
.by $00 ; labels line color
|
.ds 1 ;.by $00 ; labels line color
|
||||||
GameOverColoursTable .BYTE $80,$40,$c4,$20,$c0,$e4
|
GameOverColoursTable .ds MaxPlayers; .BYTE $80,$40,$c4,$20,$c0,$e4
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
TanksNames ; DO NOT ZERO ON GAME RESTART - ticket #24
|
TanksNames ; DO NOT ZERO ON GAME RESTART - ticket #24
|
||||||
:6 dta d" "
|
;:6 dta d" "
|
||||||
|
.ds 6*8
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
skilltable ; computer controlled players' skills (1-8), 0 - human (no cleaning, ticket #30)
|
skilltable ; computer controlled players' skills (1-8), 0 - human (no cleaning, ticket #30)
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
variablesToInitialize
|
variablesToInitialize
|
||||||
;Options DO NOT ZERO ON RESTART GAME - ticket #27
|
;Options DO NOT ZERO ON RESTART GAME - ticket #27
|
||||||
OptionsTable .by 0,1,2,2,0,1,3,2,0
|
OptionsTable .ds maxOptions ;.by 0,1,2,2,0,1,3,2,0
|
||||||
RoundsInTheGame .by 10 ;how many rounds in the current game
|
RoundsInTheGame .ds 1 ;.by 10 ;how many rounds in the current game
|
||||||
seppukuVal .by 75
|
seppukuVal .ds 1 ;.by 75
|
||||||
mountainDeltaH .by 3
|
mountainDeltaH .ds 1 ;.by 3
|
||||||
mountainDeltaL .by $ff
|
mountainDeltaL .ds 1 ;.by $ff
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
LineHeader1
|
LineHeader1
|
||||||
dta d"# ROUND: "
|
.ds 9 ;dta d"# ROUND: "
|
||||||
RoundNrDisplay
|
RoundNrDisplay
|
||||||
dta d" #", $ff
|
.ds 7 ;dta d" #", $ff
|
||||||
; 4x4 text buffer
|
; 4x4 text buffer
|
||||||
ResultLineBuffer
|
ResultLineBuffer
|
||||||
dta d" ", $ff
|
.ds 19 ;dta d" ", $ff
|
||||||
|
linetableL ; = PMGraph + $0300 - (screenHeight+1)*2
|
||||||
|
.ds (screenHeight+1)
|
||||||
|
linetableH ; = PMGraph + $0300 - (screenHeight+1)
|
||||||
|
.ds (screenHeight+1)
|
||||||
|
DisplayCopyPurchase
|
||||||
|
.ds (DisplayCopyPurchaseEnd - DisplayCopyPurchaseStart +1)
|
||||||
|
StatusBufferCopy
|
||||||
|
.ds screenBytes*3
|
||||||
;=====================================================
|
;=====================================================
|
||||||
variablesStart ; zeroing starts here
|
variablesStart ; zeroing starts here
|
||||||
;=====================================================
|
;=====================================================
|
||||||
@@ -56,69 +64,69 @@ OptionsY .ds 1 ;vertical position of cursor on Options screen
|
|||||||
flyDelay .ds 1
|
flyDelay .ds 1
|
||||||
;--------------
|
;--------------
|
||||||
;NumberOfPlayers .DS 1 ;current number of players (counted from 1)
|
;NumberOfPlayers .DS 1 ;current number of players (counted from 1)
|
||||||
TankSequence .DS [MaxPlayers] ;sequence of shooting during the Round
|
TankSequence .DS MaxPlayers ;sequence of shooting during the Round
|
||||||
GameIsOver .DS 1 ; 1 means it was the last round in the game
|
GameIsOver .DS 1 ; 1 means it was the last round in the game
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
moneyH ;we place zero at the end of prices and money
|
moneyH ;we place zero at the end of prices and money
|
||||||
;and have range from 0 to 99990 (not too much)
|
;and have range from 0 to 99990 (not too much)
|
||||||
;money players have (maybe one more byte is needed?)
|
;money players have (maybe one more byte is needed?)
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
moneyL
|
moneyL
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
gainH ;how much money player gets after the round
|
gainH ;how much money player gets after the round
|
||||||
;it is gathered during the round basing on energy
|
;it is gathered during the round basing on energy
|
||||||
;opponents lose after player's shoots
|
;opponents lose after player's shoots
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
gainL
|
gainL
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
loseH ;how much player looses after the round
|
loseH ;how much player looses after the round
|
||||||
;calculated from REAL energy loss
|
;calculated from REAL energy loss
|
||||||
;(not only to zero energy)
|
;(not only to zero energy)
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
loseL
|
loseL
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
Energy
|
Energy
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
ShieldEnergy
|
ShieldEnergy
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
EnergyDecrease .DS 1
|
EnergyDecrease .DS 1
|
||||||
eXistenZ
|
eXistenZ
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
LASTeXistenZ ; eXistenZ before shoot
|
LASTeXistenZ ; eXistenZ before shoot
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
|
|
||||||
ResultsTable ;the results in the gameeeeee
|
ResultsTable ;the results in the gameeeeee
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
TempResults
|
TempResults
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
DirectHitsH
|
DirectHitsH
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
DirectHitsL
|
DirectHitsL
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
EarnedMoneyH
|
EarnedMoneyH
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
EarnedMoneyL
|
EarnedMoneyL
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
ForceTableL ;shooting Force of the tank during the round
|
ForceTableL ;shooting Force of the tank during the round
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
ForceTableH
|
ForceTableH
|
||||||
.DS [MaxPlayers] ;maxplayers=6
|
.DS MaxPlayers ;maxplayers=6
|
||||||
MaxForceTableL ;Energy of the tank during the round
|
MaxForceTableL ;Energy of the tank during the round
|
||||||
;(limes superior force of the Shoot)
|
;(limes superior force of the Shoot)
|
||||||
.DS [MaxPlayers] ;1000 is the default
|
.DS MaxPlayers ;1000 is the default
|
||||||
MaxForceTableH
|
MaxForceTableH
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
BarrelLength ;length of the tank barrel - dont forget to set it to 6 at round start!
|
BarrelLength ;length of the tank barrel - dont forget to set it to 6 at round start!
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
ActiveWeapon ;number of the selected weapon
|
ActiveWeapon ;number of the selected weapon
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
ActiveDefenceWeapon ;number of the activated defence weapon - 0
|
ActiveDefenceWeapon ;number of the activated defence weapon - 0
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
WeaponDepleted .DS 1 ; if 0 deactivate the weapon and switch to Baby Missile
|
WeaponDepleted .DS 1 ; if 0 deactivate the weapon and switch to Baby Missile
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
|
|
||||||
@@ -142,13 +150,13 @@ WindOrientation .DS 1 ;(0-right,1-left)
|
|||||||
WallsType .ds 1 ; bits 6 and 7: 00 - none, 01 - bump, 10 - wrap, 11 - boxy
|
WallsType .ds 1 ; bits 6 and 7: 00 - none, 01 - bump, 10 - wrap, 11 - boxy
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
xtankstableL ;X positions of tanks (lower left point)
|
xtankstableL ;X positions of tanks (lower left point)
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
xtankstableH
|
xtankstableH
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
ytankstable ;Y positions of tanks (lower left point)
|
ytankstable ;Y positions of tanks (lower left point)
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
LowResDistances ; coarse tank positions divided by 4 (to be in just one byte)
|
LowResDistances ; coarse tank positions divided by 4 (to be in just one byte)
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
TargetTankNr ; Target tank index (for AI routines)
|
TargetTankNr ; Target tank index (for AI routines)
|
||||||
.DS 1
|
.DS 1
|
||||||
@@ -367,24 +375,24 @@ CurrentResult
|
|||||||
.DS 1
|
.DS 1
|
||||||
;--------------
|
;--------------
|
||||||
AngleTable ;Angle of the barrel of each tank during the round
|
AngleTable ;Angle of the barrel of each tank during the round
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
;NewAngle ; used in AI
|
;NewAngle ; used in AI
|
||||||
.DS 1
|
.DS 1
|
||||||
;previousBarrelAngle
|
;previousBarrelAngle
|
||||||
; .DS [MaxPlayers]
|
; .DS MaxPlayers
|
||||||
EndOfTheBarrelX
|
EndOfTheBarrelX
|
||||||
.ds 2
|
.ds 2
|
||||||
EndOfTheBarrelY
|
EndOfTheBarrelY
|
||||||
.ds 1
|
.ds 1
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
previousAngle
|
previousAngle
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
previousEnergyL
|
previousEnergyL
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
previousLeftRange
|
previousLeftRange
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
previousEnergyH
|
previousEnergyH
|
||||||
.DS [MaxPlayers]
|
.DS MaxPlayers
|
||||||
RandBoundaryLow
|
RandBoundaryLow
|
||||||
.ds 2
|
.ds 2
|
||||||
RandBoundaryHigh
|
RandBoundaryHigh
|
||||||
@@ -417,8 +425,52 @@ Xcounter4x4 .DS 1
|
|||||||
nibbler4x4 .DS 1
|
nibbler4x4 .DS 1
|
||||||
CharCode4x4 .DS 1
|
CharCode4x4 .DS 1
|
||||||
;plot4x4color .DS 1 ;1-white, 0-background
|
;plot4x4color .DS 1 ;1-white, 0-background
|
||||||
|
; This is moved from display.asm to be easier to relocate
|
||||||
|
ListOfWeapons
|
||||||
|
; 0123456789012345678901234567890123456789
|
||||||
|
; :number_of_offensives dta d" "
|
||||||
|
;:32 dta d" "
|
||||||
|
.ds 32*32
|
||||||
|
ListOfWeapons1End
|
||||||
|
ListOfDefensiveWeapons
|
||||||
|
; :number_of_defensives dta d" "
|
||||||
|
;:16 dta d" "
|
||||||
|
.ds 16*32
|
||||||
|
ListOfDefensiveWeaponsEnd ;constant useful when clearing
|
||||||
|
track_variables
|
||||||
|
trackn_db .ds TRACKS
|
||||||
|
trackn_hb .ds TRACKS
|
||||||
|
trackn_idx .ds TRACKS
|
||||||
|
trackn_pause .ds TRACKS
|
||||||
|
trackn_note .ds TRACKS
|
||||||
|
trackn_volume .ds TRACKS
|
||||||
|
trackn_distor .ds TRACKS
|
||||||
|
trackn_shiftfrq .ds TRACKS
|
||||||
|
trackn_instrx2 .ds TRACKS
|
||||||
|
trackn_instrdb .ds TRACKS
|
||||||
|
trackn_instrhb .ds TRACKS
|
||||||
|
trackn_instridx .ds TRACKS
|
||||||
|
trackn_instrlen .ds TRACKS
|
||||||
|
trackn_instrlop .ds TRACKS
|
||||||
|
trackn_instrreachend .ds TRACKS
|
||||||
|
trackn_volumeslidedepth .ds TRACKS
|
||||||
|
trackn_volumeslidevalue .ds TRACKS
|
||||||
|
trackn_effdelay .ds TRACKS
|
||||||
|
trackn_effvibratoa .ds TRACKS
|
||||||
|
trackn_effshift .ds TRACKS
|
||||||
|
trackn_tabletypespeed .ds TRACKS
|
||||||
|
trackn_tablenote .ds TRACKS
|
||||||
|
trackn_tablea .ds TRACKS
|
||||||
|
trackn_tableend .ds TRACKS
|
||||||
|
trackn_tablelop .ds TRACKS
|
||||||
|
trackn_tablespeeda .ds TRACKS
|
||||||
|
trackn_command .ds TRACKS
|
||||||
|
trackn_filter .ds TRACKS
|
||||||
|
trackn_audf .ds TRACKS
|
||||||
|
trackn_audc .ds TRACKS
|
||||||
|
trackn_audctl .ds TRACKS
|
||||||
|
v_aspeed .ds 1
|
||||||
|
track_endvariables
|
||||||
|
|
||||||
variablesEnd
|
variablesEnd
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
|
|||||||
+23
-54
@@ -17,7 +17,6 @@
|
|||||||
pha
|
pha
|
||||||
lda ExplosionRoutines,x
|
lda ExplosionRoutines,x
|
||||||
pha
|
pha
|
||||||
; inc FallDown2
|
|
||||||
rts
|
rts
|
||||||
ExplosionRoutines
|
ExplosionRoutines
|
||||||
.word babymissile-1 ;Baby_Missile___;_00
|
.word babymissile-1 ;Baby_Missile___;_00
|
||||||
@@ -62,35 +61,30 @@ tracer
|
|||||||
; ------------------------
|
; ------------------------
|
||||||
.proc babymissile
|
.proc babymissile
|
||||||
mva #sfx_baby_missile sfx_effect
|
mva #sfx_baby_missile sfx_effect
|
||||||
; inc FallDown2
|
|
||||||
mva #11 ExplosionRadius
|
mva #11 ExplosionRadius
|
||||||
jmp xmissile
|
jmp xmissile
|
||||||
.endp
|
.endp
|
||||||
; ------------------------
|
; ------------------------
|
||||||
.proc missile ;
|
.proc missile ;
|
||||||
mva #sfx_baby_missile sfx_effect
|
mva #sfx_baby_missile sfx_effect
|
||||||
; inc FallDown2
|
|
||||||
mva #17 ExplosionRadius
|
mva #17 ExplosionRadius
|
||||||
jmp xmissile
|
jmp xmissile
|
||||||
.endp
|
.endp
|
||||||
; ------------------------
|
; ------------------------
|
||||||
.proc babynuke
|
.proc babynuke
|
||||||
mva #sfx_nuke sfx_effect
|
mva #sfx_nuke sfx_effect
|
||||||
; inc FallDown2
|
|
||||||
mva #25 ExplosionRadius
|
mva #25 ExplosionRadius
|
||||||
jmp xmissile
|
jmp xmissile
|
||||||
.endp
|
.endp
|
||||||
; ------------------------
|
; ------------------------
|
||||||
.proc nuke
|
.proc nuke
|
||||||
mva #sfx_nuke sfx_effect
|
mva #sfx_nuke sfx_effect
|
||||||
; inc FallDown2
|
|
||||||
mva #30 ExplosionRadius
|
mva #30 ExplosionRadius
|
||||||
jmp xmissile
|
jmp xmissile
|
||||||
.endp
|
.endp
|
||||||
; ------------------------
|
; ------------------------
|
||||||
.proc leapfrog
|
.proc leapfrog
|
||||||
mva #sfx_baby_missile sfx_effect
|
mva #sfx_baby_missile sfx_effect
|
||||||
; inc FallDown2
|
|
||||||
mva #17 ExplosionRadius
|
mva #17 ExplosionRadius
|
||||||
jsr xmissile
|
jsr xmissile
|
||||||
|
|
||||||
@@ -143,7 +137,6 @@ EndOfLeapping
|
|||||||
.endp
|
.endp
|
||||||
; ------------------------
|
; ------------------------
|
||||||
.proc mirv ; the whole mirv is performed by Flight routine
|
.proc mirv ; the whole mirv is performed by Flight routine
|
||||||
; inc FallDown2
|
|
||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
; ------------------------
|
; ------------------------
|
||||||
@@ -151,7 +144,6 @@ EndOfLeapping
|
|||||||
mva #sfx_baby_missile sfx_effect
|
mva #sfx_baby_missile sfx_effect
|
||||||
mwa xtraj+1 xtrajfb
|
mwa xtraj+1 xtrajfb
|
||||||
sbw ytraj+1 #$05 ytrajfb ; funky missiles start point goes 5 pixel UP to prevent multiple explosion at one point if tank is hit (4 pixels tank height + 1)
|
sbw ytraj+1 #$05 ytrajfb ; funky missiles start point goes 5 pixel UP to prevent multiple explosion at one point if tank is hit (4 pixels tank height + 1)
|
||||||
; inc FallDown2
|
|
||||||
;central Explosion
|
;central Explosion
|
||||||
mva #21 ExplosionRadius
|
mva #21 ExplosionRadius
|
||||||
jsr CalculateExplosionRange0
|
jsr CalculateExplosionRange0
|
||||||
@@ -198,7 +190,6 @@ NoWallsInFunky
|
|||||||
.endp
|
.endp
|
||||||
; ------------------------
|
; ------------------------
|
||||||
.proc deathshead
|
.proc deathshead
|
||||||
; inc FallDown2
|
|
||||||
mva #30 ExplosionRadius
|
mva #30 ExplosionRadius
|
||||||
mva #sfx_nuke sfx_effect
|
mva #sfx_nuke sfx_effect
|
||||||
SaveDrawXY
|
SaveDrawXY
|
||||||
@@ -250,7 +241,6 @@ NoLowerCircle
|
|||||||
; ------------------------
|
; ------------------------
|
||||||
.proc napalm
|
.proc napalm
|
||||||
mva #sfx_napalm sfx_effect
|
mva #sfx_napalm sfx_effect
|
||||||
; inc FallDown2
|
|
||||||
mva #(napalmRadius+4) ExplosionRadius ; real radius + 4 pixels (half characrer width)
|
mva #(napalmRadius+4) ExplosionRadius ; real radius + 4 pixels (half characrer width)
|
||||||
jsr CalculateExplosionRange
|
jsr CalculateExplosionRange
|
||||||
mva #0 ExplosionRadius ; in this weapon - flag: 0 - napalm, 1 - hotnapalm
|
mva #0 ExplosionRadius ; in this weapon - flag: 0 - napalm, 1 - hotnapalm
|
||||||
@@ -259,7 +249,6 @@ NoLowerCircle
|
|||||||
; ------------------------
|
; ------------------------
|
||||||
.proc hotnapalm
|
.proc hotnapalm
|
||||||
mva #sfx_napalm sfx_effect
|
mva #sfx_napalm sfx_effect
|
||||||
; inc FallDown2
|
|
||||||
mva #(napalmRadius+4) ExplosionRadius ; real radius + 4 pixels (half characrer width)
|
mva #(napalmRadius+4) ExplosionRadius ; real radius + 4 pixels (half characrer width)
|
||||||
jsr CalculateExplosionRange
|
jsr CalculateExplosionRange
|
||||||
mva #1 ExplosionRadius ; in this weapon - flag: 0 - napalm, 1 - hotnapalm
|
mva #1 ExplosionRadius ; in this weapon - flag: 0 - napalm, 1 - hotnapalm
|
||||||
@@ -324,7 +313,6 @@ CharOffTheScreen
|
|||||||
dec magic
|
dec magic
|
||||||
jpl RepeatNapalm
|
jpl RepeatNapalm
|
||||||
; after napalm
|
; after napalm
|
||||||
; inc FallDown2
|
|
||||||
;now we must check tanks in range
|
;now we must check tanks in range
|
||||||
ldx NumberOfPlayers
|
ldx NumberOfPlayers
|
||||||
dex
|
dex
|
||||||
@@ -372,32 +360,27 @@ EndNurnedCheckLoop
|
|||||||
.endp
|
.endp
|
||||||
; ------------------------
|
; ------------------------
|
||||||
.proc babyroller
|
.proc babyroller
|
||||||
; inc FallDown2
|
|
||||||
mva #11 ExplosionRadius
|
mva #11 ExplosionRadius
|
||||||
jmp xroller
|
jmp xroller
|
||||||
.endp
|
.endp
|
||||||
; ------------------------
|
; ------------------------
|
||||||
.proc roller ;
|
.proc roller ;
|
||||||
; inc FallDown2
|
|
||||||
mva #21 ExplosionRadius
|
mva #21 ExplosionRadius
|
||||||
jmp xroller
|
jmp xroller
|
||||||
.endp
|
.endp
|
||||||
; ------------------------
|
; ------------------------
|
||||||
.proc heavyroller
|
.proc heavyroller
|
||||||
; inc FallDown2
|
|
||||||
mva #30 ExplosionRadius
|
mva #30 ExplosionRadius
|
||||||
jmp xroller
|
jmp xroller
|
||||||
.endp
|
.endp
|
||||||
; ------------------------
|
; ------------------------
|
||||||
.proc riotbomb
|
.proc riotbomb
|
||||||
; inc FallDown2
|
|
||||||
mva #17 ExplosionRadius
|
mva #17 ExplosionRadius
|
||||||
jsr CalculateExplosionRange
|
jsr CalculateExplosionRange
|
||||||
jmp xriotbomb
|
jmp xriotbomb
|
||||||
.endp
|
.endp
|
||||||
; ------------------------
|
; ------------------------
|
||||||
.proc heavyriotbomb
|
.proc heavyriotbomb
|
||||||
; inc FallDown2
|
|
||||||
mva #29 ExplosionRadius
|
mva #29 ExplosionRadius
|
||||||
jsr CalculateExplosionRange
|
jsr CalculateExplosionRange
|
||||||
jmp xriotbomb
|
jmp xriotbomb
|
||||||
@@ -406,7 +389,6 @@ EndNurnedCheckLoop
|
|||||||
.proc babydigger
|
.proc babydigger
|
||||||
mva #sfx_digger sfx_effect
|
mva #sfx_digger sfx_effect
|
||||||
mva #0 sandhogflag
|
mva #0 sandhogflag
|
||||||
; inc FallDown2
|
|
||||||
mva #13 DigLong
|
mva #13 DigLong
|
||||||
mva #1 diggery ; how many branches (-1)
|
mva #1 diggery ; how many branches (-1)
|
||||||
jmp xdigger
|
jmp xdigger
|
||||||
@@ -415,7 +397,6 @@ EndNurnedCheckLoop
|
|||||||
.proc digger ;
|
.proc digger ;
|
||||||
mva #sfx_digger sfx_effect
|
mva #sfx_digger sfx_effect
|
||||||
mva #0 sandhogflag
|
mva #0 sandhogflag
|
||||||
; inc FallDown2
|
|
||||||
mva #13 DigLong
|
mva #13 DigLong
|
||||||
mva #3 diggery ; how many branches (-1)
|
mva #3 diggery ; how many branches (-1)
|
||||||
jmp xdigger
|
jmp xdigger
|
||||||
@@ -424,7 +405,6 @@ EndNurnedCheckLoop
|
|||||||
.proc heavydigger
|
.proc heavydigger
|
||||||
mva #sfx_digger sfx_effect
|
mva #sfx_digger sfx_effect
|
||||||
mva #0 sandhogflag
|
mva #0 sandhogflag
|
||||||
; inc FallDown2
|
|
||||||
mva #13 DigLong
|
mva #13 DigLong
|
||||||
mva #7 diggery ; how many branches (-1)
|
mva #7 diggery ; how many branches (-1)
|
||||||
jmp xdigger
|
jmp xdigger
|
||||||
@@ -548,7 +528,6 @@ DiggerCharacter
|
|||||||
.proc babysandhog
|
.proc babysandhog
|
||||||
mva #sfx_sandhog sfx_effect
|
mva #sfx_sandhog sfx_effect
|
||||||
mva #char_sandhog_offset sandhogflag
|
mva #char_sandhog_offset sandhogflag
|
||||||
; inc FallDown2
|
|
||||||
mva #13 DigLong
|
mva #13 DigLong
|
||||||
mva #1 diggery ; how many branches (-1)
|
mva #1 diggery ; how many branches (-1)
|
||||||
jmp xdigger
|
jmp xdigger
|
||||||
@@ -557,7 +536,6 @@ DiggerCharacter
|
|||||||
.proc sandhog
|
.proc sandhog
|
||||||
mva #sfx_sandhog sfx_effect
|
mva #sfx_sandhog sfx_effect
|
||||||
mva #char_sandhog_offset sandhogflag
|
mva #char_sandhog_offset sandhogflag
|
||||||
; inc FallDown2
|
|
||||||
mva #13 DigLong
|
mva #13 DigLong
|
||||||
mva #3 diggery ; how many branches (-1)
|
mva #3 diggery ; how many branches (-1)
|
||||||
jmp xdigger
|
jmp xdigger
|
||||||
@@ -566,35 +544,30 @@ DiggerCharacter
|
|||||||
.proc heavysandhog
|
.proc heavysandhog
|
||||||
mva #sfx_sandhog sfx_effect
|
mva #sfx_sandhog sfx_effect
|
||||||
mva #char_sandhog_offset sandhogflag
|
mva #char_sandhog_offset sandhogflag
|
||||||
; inc FallDown2
|
|
||||||
mva #13 DigLong
|
mva #13 DigLong
|
||||||
mva #5 diggery ; how many branches (-1)
|
mva #5 diggery ; how many branches (-1)
|
||||||
jmp xdigger
|
jmp xdigger
|
||||||
.endp
|
.endp
|
||||||
; ------------------------
|
; ------------------------
|
||||||
.proc dirtclod
|
.proc dirtclod
|
||||||
; inc FallDown2
|
|
||||||
mva #12 ExplosionRadius
|
mva #12 ExplosionRadius
|
||||||
jsr CalculateExplosionRange
|
jsr CalculateExplosionRange
|
||||||
jmp xdirt
|
jmp xdirt
|
||||||
.endp
|
.endp
|
||||||
; ------------------------
|
; ------------------------
|
||||||
.proc dirtball
|
.proc dirtball
|
||||||
; inc FallDown2
|
|
||||||
mva #22 ExplosionRadius
|
mva #22 ExplosionRadius
|
||||||
jsr CalculateExplosionRange
|
jsr CalculateExplosionRange
|
||||||
jmp xdirt
|
jmp xdirt
|
||||||
.endp
|
.endp
|
||||||
; ------------------------
|
; ------------------------
|
||||||
.proc tonofdirt
|
.proc tonofdirt
|
||||||
; inc FallDown2
|
|
||||||
mva #31 ExplosionRadius
|
mva #31 ExplosionRadius
|
||||||
jsr CalculateExplosionRange
|
jsr CalculateExplosionRange
|
||||||
jmp xdirt
|
jmp xdirt
|
||||||
.endp
|
.endp
|
||||||
; ------------------------
|
; ------------------------
|
||||||
.proc dirtcharge
|
.proc dirtcharge
|
||||||
; inc FallDown2
|
|
||||||
mva #61 ExplosionRadius
|
mva #61 ExplosionRadius
|
||||||
jsr CalculateExplosionRange
|
jsr CalculateExplosionRange
|
||||||
jmp ofdirt
|
jmp ofdirt
|
||||||
@@ -602,7 +575,6 @@ DiggerCharacter
|
|||||||
; ------------------------
|
; ------------------------
|
||||||
.proc riotcharge
|
.proc riotcharge
|
||||||
mva #sfx_riot_blast sfx_effect
|
mva #sfx_riot_blast sfx_effect
|
||||||
; inc FallDown2
|
|
||||||
mva #31 ExplosionRadius
|
mva #31 ExplosionRadius
|
||||||
jsr CalculateExplosionRange
|
jsr CalculateExplosionRange
|
||||||
jmp cleanDirt
|
jmp cleanDirt
|
||||||
@@ -610,7 +582,6 @@ DiggerCharacter
|
|||||||
; ------------------------
|
; ------------------------
|
||||||
.proc riotblast
|
.proc riotblast
|
||||||
mva #sfx_riot_blast sfx_effect
|
mva #sfx_riot_blast sfx_effect
|
||||||
; inc FallDown2
|
|
||||||
mva #61 ExplosionRadius
|
mva #61 ExplosionRadius
|
||||||
jsr CalculateExplosionRange
|
jsr CalculateExplosionRange
|
||||||
jmp cleanDirt
|
jmp cleanDirt
|
||||||
@@ -1155,7 +1126,7 @@ notpressed
|
|||||||
lda kbcode
|
lda kbcode
|
||||||
and #%10111111 ; SHIFT elimination
|
and #%10111111 ; SHIFT elimination
|
||||||
|
|
||||||
cmp #$08 ; O
|
cmp #@kbcode._O ; $08 ; O
|
||||||
bne @+
|
bne @+
|
||||||
jsr AreYouSure
|
jsr AreYouSure
|
||||||
bit escFlag
|
bit escFlag
|
||||||
@@ -1165,7 +1136,7 @@ QuitToGameover
|
|||||||
mva #$40 escFlag
|
mva #$40 escFlag
|
||||||
rts
|
rts
|
||||||
@
|
@
|
||||||
cmp #28 ; ESC
|
cmp #@kbcode._esc ; 28 ; ESC
|
||||||
bne @+
|
bne @+
|
||||||
jsr AreYouSure
|
jsr AreYouSure
|
||||||
bit escFlag
|
bit escFlag
|
||||||
@@ -1173,7 +1144,7 @@ QuitToGameover
|
|||||||
;---esc pressed-quit game---
|
;---esc pressed-quit game---
|
||||||
rts
|
rts
|
||||||
@
|
@
|
||||||
cmp #$3f ; A
|
cmp #@kbcode._A ; $3f ; A
|
||||||
bne @+
|
bne @+
|
||||||
callActivation
|
callActivation
|
||||||
; Hide all tanks - after inventory they may have other shapes
|
; Hide all tanks - after inventory they may have other shapes
|
||||||
@@ -1182,7 +1153,7 @@ callActivation
|
|||||||
jmp afterInventory
|
jmp afterInventory
|
||||||
|
|
||||||
@
|
@
|
||||||
cmp #$0d ; I
|
cmp #@kbcode._I ; $0d ; I
|
||||||
bne @+
|
bne @+
|
||||||
callInventory
|
callInventory
|
||||||
; Hide all tanks - after inventory they may have other shapes
|
; Hide all tanks - after inventory they may have other shapes
|
||||||
@@ -1192,8 +1163,7 @@ callInventory
|
|||||||
jsr Purchase
|
jsr Purchase
|
||||||
afterInventory
|
afterInventory
|
||||||
jsr MakeDarkScreen
|
jsr MakeDarkScreen
|
||||||
lda #song_ingame
|
RmtSong song_ingame
|
||||||
jsr RmtSongSelect
|
|
||||||
mva #0 escFlag
|
mva #0 escFlag
|
||||||
jsr DisplayStatus
|
jsr DisplayStatus
|
||||||
jsr SetMainScreen
|
jsr SetMainScreen
|
||||||
@@ -1202,30 +1172,30 @@ afterInventory
|
|||||||
jsr WaitForKeyRelease
|
jsr WaitForKeyRelease
|
||||||
jmp BeforeFire
|
jmp BeforeFire
|
||||||
@
|
@
|
||||||
cmp #$8e
|
cmp #$80|@kbcode._up
|
||||||
jeq CTRLPressedUp
|
jeq CTRLPressedUp
|
||||||
cmp #$8f
|
cmp #$80|@kbcode._down
|
||||||
jeq CTRLPressedDown
|
jeq CTRLPressedDown
|
||||||
cmp #$ac
|
cmp #$80|@kbcode._tab
|
||||||
jeq CTRLPressedTAB
|
jeq CTRLPressedTAB
|
||||||
|
|
||||||
and #$3f ;CTRL and SHIFT ellimination
|
and #$3f ;CTRL and SHIFT ellimination
|
||||||
jumpFromStick
|
jumpFromStick
|
||||||
cmp #$e
|
cmp #@kbcode._up ; $e
|
||||||
jeq pressedUp
|
jeq pressedUp
|
||||||
cmp #$f
|
cmp #@kbcode._down ; $f
|
||||||
jeq pressedDown
|
jeq pressedDown
|
||||||
cmp #$6
|
cmp #@kbcode._left ; $6
|
||||||
jeq pressedLeft
|
jeq pressedLeft
|
||||||
cmp #$7
|
cmp #@kbcode._right ; $7
|
||||||
jeq pressedRight
|
jeq pressedRight
|
||||||
cmp #$21
|
cmp #@kbcode._space ; $21
|
||||||
jeq pressedSpace
|
jeq pressedSpace
|
||||||
cmp #$2c
|
cmp #@kbcode._tab ; $2c
|
||||||
jeq pressedTAB
|
jeq pressedTAB
|
||||||
cmp #$25 ; M
|
cmp #@kbcode._M ; $25 ; M
|
||||||
jeq pressedM
|
jeq pressedM
|
||||||
cmp #$3e ; S
|
cmp #@kbcode._S ; $3e ; S
|
||||||
jeq pressedS
|
jeq pressedS
|
||||||
jmp notpressed
|
jmp notpressed
|
||||||
checkJoy
|
checkJoy
|
||||||
@@ -1430,8 +1400,7 @@ pressedM
|
|||||||
; have you tried turning the music off and on again?
|
; have you tried turning the music off and on again?
|
||||||
lda #$ff
|
lda #$ff
|
||||||
eor:sta noMusic
|
eor:sta noMusic
|
||||||
lda #song_ingame
|
RmtSong song_ingame
|
||||||
jsr RmtSongSelect
|
|
||||||
jsr WaitForKeyRelease
|
jsr WaitForKeyRelease
|
||||||
jmp BeforeFire
|
jmp BeforeFire
|
||||||
|
|
||||||
@@ -1547,7 +1516,7 @@ ShotUnderGround
|
|||||||
;xtraj=xtraj+vx - without Wind
|
;xtraj=xtraj+vx - without Wind
|
||||||
;vx=vx+Wind (Wind is a small fraction)
|
;vx=vx+Wind (Wind is a small fraction)
|
||||||
;plot xtraj,ytraj - there is clearing in plot
|
;plot xtraj,ytraj - there is clearing in plot
|
||||||
;goto begin
|
;goto begin-
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1895,7 +1864,7 @@ MagDeflector
|
|||||||
bit random ; left or right deflection ?
|
bit random ; left or right deflection ?
|
||||||
bpl RightDeflection
|
bpl RightDeflection
|
||||||
LeftDeflection
|
LeftDeflection
|
||||||
sbw XHit #18 ; 18 pixels to right and explode...
|
sbw XHit #18 ; 18 pixels to left and explode...
|
||||||
bit XHit+1 ; if off-screen ...
|
bit XHit+1 ; if off-screen ...
|
||||||
bpl EndOfMagDeflector ; hit of course but we need RTS
|
bpl EndOfMagDeflector ; hit of course but we need RTS
|
||||||
adw XHit #36 ; change to right :)
|
adw XHit #36 ; change to right :)
|
||||||
@@ -2579,7 +2548,7 @@ notpressed
|
|||||||
lda kbcode
|
lda kbcode
|
||||||
and #%00111111 ; CTRL and SHIFT elimination
|
and #%00111111 ; CTRL and SHIFT elimination
|
||||||
|
|
||||||
cmp #28 ; ESC
|
cmp #@kbcode._esc ; 28 ; ESC
|
||||||
bne @+
|
bne @+
|
||||||
jsr AreYouSure
|
jsr AreYouSure
|
||||||
bit escFlag
|
bit escFlag
|
||||||
@@ -2588,11 +2557,11 @@ notpressed
|
|||||||
rts
|
rts
|
||||||
@
|
@
|
||||||
jumpFromStick
|
jumpFromStick
|
||||||
cmp #$6
|
cmp #@kbcode._left ; $6
|
||||||
jeq pressedLeft
|
jeq pressedLeft
|
||||||
cmp #$7
|
cmp #@kbcode._right ; $7
|
||||||
jeq pressedRight
|
jeq pressedRight
|
||||||
cmp #$21
|
cmp #@kbcode._space ; $21
|
||||||
jeq pressedSpace
|
jeq pressedSpace
|
||||||
jmp notpressed
|
jmp notpressed
|
||||||
checkJoy
|
checkJoy
|
||||||
|
|||||||
Reference in New Issue
Block a user