mirror of
https://github.com/pkali/scorch_src.git
synced 2026-05-21 14:49:46 +02:00
Compare commits
90 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d474ba7af8 | |||
| 802b67673b | |||
| 5070b11be3 | |||
| 0d210b8d88 | |||
| 171f37c73f | |||
| cee53fd257 | |||
| 224588eaa9 | |||
| 4cd864e47e | |||
| 710570ae8a | |||
| 2820f66467 | |||
| c84aecc886 | |||
| 25ed106e02 | |||
| bc65dafdac | |||
| fd15ed9bb6 | |||
| 028c34bf31 | |||
| 3b0388fdaf | |||
| 9d14950ef9 | |||
| a205c37dc0 | |||
| 950d6922b4 | |||
| 22785ecdd5 | |||
| 268d99ffaf | |||
| bb826b680d | |||
| f45d2c8446 | |||
| 1f576a0c49 | |||
| 054c5df5d7 | |||
| 1b4a73c362 | |||
| f807fe8876 | |||
| f14b64a7f6 | |||
| e45cc3e609 | |||
| 192b1b01dc | |||
| 664dc1568d | |||
| 234fbc5a4a | |||
| 2f57c1f774 | |||
| 2d274b05d0 | |||
| 5b90bc571e | |||
| c1b16cd1d1 | |||
| cf08093cee | |||
| e6d37e8410 | |||
| 56ed83fbac | |||
| 2cda0bfb12 | |||
| e5ce864254 | |||
| 312bca4866 | |||
| 2bec64c38e | |||
| d448eb2e1e | |||
| 05409fa301 | |||
| e60776fd57 | |||
| eed446545e | |||
| 54cc76464e | |||
| 3ac678e68b | |||
| 823be97490 | |||
| 8775e0b42e | |||
| cd41f59175 | |||
| 91d5172fe2 | |||
| 3a836fa072 | |||
| 84da6fb7a0 | |||
| 9eb0f8adff | |||
| 2f1f016ce0 | |||
| 8e0aa974e7 | |||
| 6a0c3a91e9 | |||
| 025afbce91 | |||
| edbfddf090 | |||
| d7501b5c7c | |||
| 1945dd5e88 | |||
| c725fd3827 | |||
| c8ffba4603 | |||
| 16f24793f6 | |||
| f9fc25ec0f | |||
| 4d090f1766 | |||
| 9df4a49abe | |||
| 0a68184f7c | |||
| 807da90fda | |||
| 3855b0e2cf | |||
| a01af2a608 | |||
| 47dcfa1af4 | |||
| 02ff63d524 | |||
| 9b42e79b61 | |||
| 2c3b4d148e | |||
| 513f13c5fc | |||
| 27bc443581 | |||
| 992130f267 | |||
| 1de19dfd26 | |||
| 960675d4ac | |||
| dc9e2de8df | |||
| a7e1bd519e | |||
| 616452a01e | |||
| f20ce14dc3 | |||
| d9012f4485 | |||
| 5c38b7b12a | |||
| 6cb817d463 | |||
| 19200be905 |
@@ -1,2 +1,4 @@
|
|||||||
|
|
||||||
*.bak
|
*.bak
|
||||||
|
scorch.lab
|
||||||
|
scorch.lst
|
||||||
|
|||||||
@@ -48,6 +48,34 @@ With the advent of fujinet (https://fujinet.online/) we are thinking about makin
|
|||||||
|
|
||||||
## Changes:
|
## Changes:
|
||||||
|
|
||||||
|
###### Version 1.00
|
||||||
|
2022-08-13
|
||||||
|
|
||||||
|
Silly Version 1.00
|
||||||
|
This is an official Silly Venture Summer Edition Atari 50 release. The game reached version 1.00.
|
||||||
|
|
||||||
|
The game manual is available at https://github.com/pkali/scorch_src/wiki
|
||||||
|
All 48KB+ 8-bit Atari computers are supported.
|
||||||
|
|
||||||
|
Thank you @Pecusx and @Miker for your hard work over the last few weeks - I was almost entirely absent because of the real-world attack.
|
||||||
|
|
||||||
|
Most important changes:
|
||||||
|
* New Game Over screen with a summary of wins, direct hits and earned cash. https://github.com/pkali/scorch_src/issues/9
|
||||||
|
* Tank barrels are drawn procedurally to make aiming easier..
|
||||||
|
* Various SFX and music updates with new tunes for all parts of the game. https://github.com/pkali/scorch_src/issues/112
|
||||||
|
* AI can use White Flag.
|
||||||
|
* 3 different tank shapes https://github.com/pkali/scorch_src/issues/64.
|
||||||
|
* All AI levels are programmed. Cyborg is tough! https://github.com/pkali/scorch_src/issues/40
|
||||||
|
* New weapon - Long Schlong!
|
||||||
|
* New splash screen.
|
||||||
|
* Game mechanics improved.
|
||||||
|
* [O] key skips to the Game Over screen.
|
||||||
|
* The game works on Atari 800.
|
||||||
|
* Huge amount of optimizations to squeeze the game into 48K.
|
||||||
|
|
||||||
|
And now the new adventure begins!
|
||||||
|
|
||||||
|
|
||||||
###### Build 148
|
###### Build 148
|
||||||
2022-07-17
|
2022-07-17
|
||||||
WHAT DOES THE FOX SAY?
|
WHAT DOES THE FOX SAY?
|
||||||
|
|||||||
@@ -57,11 +57,23 @@ AIRoutines
|
|||||||
.word Shooter-1 ;Shooter
|
.word Shooter-1 ;Shooter
|
||||||
.word Poolshark-1 ;Poolshark
|
.word Poolshark-1 ;Poolshark
|
||||||
.word Tosser-1 ;Tosser
|
.word Tosser-1 ;Tosser
|
||||||
.word Tosser-1 ;Chooser
|
.word Chooser-1 ;Chooser
|
||||||
.word Tosser-1 ;Spoiler
|
.word Spoiler-1 ;Spoiler
|
||||||
.word Tosser-1 ;Cyborg
|
.word Cyborg-1 ;Cyborg
|
||||||
.word Tosser-1 ;Unknown
|
.word Unknown-1 ;Unknown
|
||||||
|
|
||||||
|
;----------------------------------------------
|
||||||
|
.proc Unknown
|
||||||
|
; random robotank (from Poolshark to Cyborg)
|
||||||
|
randomize 4 13
|
||||||
|
and #%11111110
|
||||||
|
tay
|
||||||
|
lda AIRoutines+1,y
|
||||||
|
pha
|
||||||
|
lda AIRoutines,y
|
||||||
|
pha
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
;----------------------------------------------
|
;----------------------------------------------
|
||||||
.proc Moron
|
.proc Moron
|
||||||
jsr RandomizeAngle
|
jsr RandomizeAngle
|
||||||
@@ -154,101 +166,29 @@ loop
|
|||||||
.endp
|
.endp
|
||||||
;----------------------------------------------
|
;----------------------------------------------
|
||||||
.proc Poolshark
|
.proc Poolshark
|
||||||
|
jsr UseBatteryOrFlag
|
||||||
; defensives
|
; defensives
|
||||||
; if low energy ten use battery
|
jsr PoolsharkDefensives
|
||||||
lda Energy,x
|
|
||||||
cmp #30
|
|
||||||
bcs EnoughEnergy
|
|
||||||
; lower than 30 units - check battery
|
|
||||||
ldy #ind_Battery________
|
|
||||||
lda (temp),y ; has address of TanksWeaponsTable
|
|
||||||
beq NoBatteries
|
|
||||||
; we have batteries - use one
|
|
||||||
clc
|
|
||||||
sbc #1
|
|
||||||
sta (temp),y
|
|
||||||
lda #99
|
|
||||||
sta Energy,x
|
|
||||||
NoBatteries
|
|
||||||
EnoughEnergy
|
|
||||||
; use best defensive :)
|
|
||||||
; but not allways
|
|
||||||
randomize 1 3
|
|
||||||
cmp #1
|
|
||||||
bne NoUseDefensive
|
|
||||||
; first check check if any is in use
|
|
||||||
lda ActiveDefenceWeapon,x
|
|
||||||
bne DefensiveInUse
|
|
||||||
ldy #ind_Nuclear_Winter_+1 ;the last defensive weapon
|
|
||||||
@
|
|
||||||
dey
|
|
||||||
cpy #ind_Battery________ ;first defensive weapon (White Flag nad Battery - never use)
|
|
||||||
beq NoUseDefensive
|
|
||||||
lda (temp),y ; has address of TanksWeaponsTable
|
|
||||||
beq @-
|
|
||||||
; decrease in inventory
|
|
||||||
clc
|
|
||||||
sbc #1
|
|
||||||
sta (temp),y ; has address of TanksWeaponsTable
|
|
||||||
; activate defensive weapon
|
|
||||||
tya ; number of selectet defensive weapon
|
|
||||||
sta ActiveDefenceWeapon,x
|
|
||||||
lda DefensiveEnergy,y
|
|
||||||
sta ShieldEnergy,x
|
|
||||||
NoUseDefensive
|
|
||||||
DefensiveInUse
|
|
||||||
firstShoot
|
firstShoot
|
||||||
;find nearest tank neighbour
|
;find nearest tank neighbour
|
||||||
jsr MakeLowResDistances
|
jsr FindBestTarget2
|
||||||
mva #$ff temp2 ; min possible distance
|
beq EnemyOnLeft
|
||||||
|
|
||||||
;ldx TankNr
|
|
||||||
ldy NumberOfPlayers
|
|
||||||
dey
|
|
||||||
|
|
||||||
loop01
|
|
||||||
cpy TankNr
|
|
||||||
beq skipThisPlayer
|
|
||||||
lda eXistenZ,y
|
|
||||||
beq skipThisPlayer
|
|
||||||
|
|
||||||
lda LowResDistances,x
|
|
||||||
cmp LowResDistances,y
|
|
||||||
bcs EnemyOnTheLeft
|
|
||||||
;enemy on the right
|
|
||||||
sec
|
|
||||||
lda LowResDistances,y
|
|
||||||
sbc LowResDistances,x
|
|
||||||
cmp temp2 ; lowest
|
|
||||||
bcs lowestIsLower
|
|
||||||
sta temp2
|
|
||||||
sty temp2+1 ; number of the closest tank
|
|
||||||
; calculate index to shotangle table
|
; calculate index to shotangle table
|
||||||
|
; in temp2 we have x distance divided by 8
|
||||||
|
lda temp2
|
||||||
:3 lsr @
|
:3 lsr @
|
||||||
and #%00000111
|
and #%00000111
|
||||||
clc
|
clc
|
||||||
adc #8
|
adc #8
|
||||||
sta AngleTablePointer
|
sta AngleTablePointer
|
||||||
jmp lowestIsLower
|
bne AngleIsSet
|
||||||
|
EnemyOnLeft
|
||||||
EnemyOnTheLeft
|
lda temp2
|
||||||
sec
|
|
||||||
lda LowResDistances,x
|
|
||||||
sbc LowResDistances,y
|
|
||||||
cmp temp2 ; lowest
|
|
||||||
bcs lowestIsLower
|
|
||||||
sta temp2
|
|
||||||
sty temp2+1 ; number of the closest tank
|
|
||||||
; calculate index to shotangle table
|
|
||||||
:3 lsr @
|
:3 lsr @
|
||||||
and #%00000111
|
and #%00000111
|
||||||
eor #%00000111
|
eor #%00000111
|
||||||
sta AngleTablePointer
|
sta AngleTablePointer
|
||||||
|
AngleIsSet
|
||||||
lowestIsLower
|
|
||||||
skipThisPlayer
|
|
||||||
dey
|
|
||||||
bpl loop01
|
|
||||||
|
|
||||||
randomize 0 8
|
randomize 0 8
|
||||||
ldy AngleTablePointer
|
ldy AngleTablePointer
|
||||||
@@ -286,7 +226,72 @@ AngleTable ; 16 bytes ;ba w $348b L$3350
|
|||||||
.by 18,26,34,43,50,58,66,74
|
.by 18,26,34,43,50,58,66,74
|
||||||
.endp
|
.endp
|
||||||
;----------------------------------------------
|
;----------------------------------------------
|
||||||
|
.proc UseBatteryOrFlag
|
||||||
|
; if low energy ten use battery
|
||||||
|
lda Energy,x
|
||||||
|
cmp #30
|
||||||
|
bcs EnoughEnergy
|
||||||
|
; lower than 30 units - check battery
|
||||||
|
ldy #ind_Battery________
|
||||||
|
lda (temp),y ; has address of TanksWeaponsTable
|
||||||
|
beq NoBatteries
|
||||||
|
; we have batteries - use one
|
||||||
|
clc
|
||||||
|
sbc #1
|
||||||
|
sta (temp),y
|
||||||
|
lda #99
|
||||||
|
sta Energy,x
|
||||||
|
NoBatteries
|
||||||
|
; if very low energy and no battery then use White Flag
|
||||||
|
lda Energy,x
|
||||||
|
cmp #5
|
||||||
|
bcs EnoughEnergy
|
||||||
|
; lower than 5 units - white flag
|
||||||
|
lda #ind_White_Flag_____
|
||||||
|
sta ActiveDefenceWeapon,x
|
||||||
|
EnoughEnergy
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
;----------------------------------------------
|
||||||
|
.proc PoolsharkDefensives
|
||||||
|
; use best defensive :)
|
||||||
|
; but not allways
|
||||||
|
randomize 1 3
|
||||||
|
cmp #1
|
||||||
|
bne NoUseDefensive
|
||||||
|
; first check check if any is in use
|
||||||
|
lda ActiveDefenceWeapon,x
|
||||||
|
bne DefensiveInUse
|
||||||
|
ldy #ind_Nuclear_Winter_+1 ;the last defensive weapon
|
||||||
|
@
|
||||||
|
dey
|
||||||
|
cpy #ind_Battery________ ;first defensive weapon (White Flag nad Battery - never use)
|
||||||
|
beq NoUseDefensive
|
||||||
|
lda (temp),y ; has address of TanksWeaponsTable
|
||||||
|
beq @-
|
||||||
|
; decrease in inventory
|
||||||
|
clc
|
||||||
|
sbc #1
|
||||||
|
sta (temp),y ; has address of TanksWeaponsTable
|
||||||
|
; activate defensive weapon
|
||||||
|
tya ; number of selectet defensive weapon
|
||||||
|
sta ActiveDefenceWeapon,x
|
||||||
|
lda DefensiveEnergy,y
|
||||||
|
sta ShieldEnergy,x
|
||||||
|
NoUseDefensive
|
||||||
|
DefensiveInUse
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
;----------------------------------------------
|
||||||
.proc Tosser
|
.proc Tosser
|
||||||
|
jsr UseBatteryOrFlag
|
||||||
|
; use best defensive :)
|
||||||
|
jsr TosserDefensives
|
||||||
|
; Toosser is like Poolshark but allways uses defensives
|
||||||
|
jmp Poolshark.firstShoot
|
||||||
|
.endp
|
||||||
|
;----------------------------------------------
|
||||||
|
.proc TosserDefensives
|
||||||
; use best defensive :)
|
; use best defensive :)
|
||||||
; allways
|
; allways
|
||||||
; first check check if any is in use
|
; first check check if any is in use
|
||||||
@@ -310,8 +315,512 @@ AngleTable ; 16 bytes ;ba w $348b L$3350
|
|||||||
sta ShieldEnergy,x
|
sta ShieldEnergy,x
|
||||||
DefensiveInUse
|
DefensiveInUse
|
||||||
NoUseDefensive
|
NoUseDefensive
|
||||||
; Toosser is like Poolshark but allways uses defensives
|
rts
|
||||||
jmp Poolshark
|
.endp
|
||||||
|
;----------------------------------------------
|
||||||
|
.proc Chooser
|
||||||
|
; like cyborg but more randomizing force
|
||||||
|
jsr UseBatteryOrFlag
|
||||||
|
; use defensives like Tosser
|
||||||
|
jsr TosserDefensives
|
||||||
|
; now select best target
|
||||||
|
jsr FindBestTarget3
|
||||||
|
sty TargetTankNr
|
||||||
|
; aiming
|
||||||
|
jsr TakeAim ; direction still in A (0 - left, >0 - right)
|
||||||
|
|
||||||
|
; choose the best weapon
|
||||||
|
lda TanksWeaponsTableL,x
|
||||||
|
sta temp
|
||||||
|
lda TanksWeaponsTableH,x
|
||||||
|
sta temp+1
|
||||||
|
ldy #ind_LeapFrog_______ ;the last offensive weapon to use
|
||||||
|
loop
|
||||||
|
dey
|
||||||
|
lda (temp),y
|
||||||
|
beq loop
|
||||||
|
tya
|
||||||
|
sta ActiveWeapon,x
|
||||||
|
|
||||||
|
; randomizing force +-100
|
||||||
|
sbw Force #100 RandBoundaryLow
|
||||||
|
bpl NotNegativeEnergy
|
||||||
|
mwa #1 RandBoundaryLow
|
||||||
|
NotNegativeEnergy
|
||||||
|
adw Force #100 RandBoundaryHigh
|
||||||
|
jsr RandomizeForce
|
||||||
|
lda ForceTableH,x
|
||||||
|
bne HighForce
|
||||||
|
; if Force lower than 256 - set weapon to Baby Missile (for security :) )
|
||||||
|
lda #ind_Baby_Missile___
|
||||||
|
sta ActiveWeapon,x
|
||||||
|
HighForce
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
;----------------------------------------------
|
||||||
|
.proc Spoiler
|
||||||
|
; like cyborg but little randomizing force
|
||||||
|
jsr UseBatteryOrFlag
|
||||||
|
; use defensives like Tosser
|
||||||
|
jsr TosserDefensives
|
||||||
|
; now select best target
|
||||||
|
jsr FindBestTarget3
|
||||||
|
sty TargetTankNr
|
||||||
|
; aiming
|
||||||
|
jsr TakeAim ; direction still in A (0 - left, >0 - right)
|
||||||
|
|
||||||
|
; choose the best weapon
|
||||||
|
lda TanksWeaponsTableL,x
|
||||||
|
sta temp
|
||||||
|
lda TanksWeaponsTableH,x
|
||||||
|
sta temp+1
|
||||||
|
ldy #ind_LeapFrog_______ ;the last offensive weapon to use
|
||||||
|
loop
|
||||||
|
dey
|
||||||
|
lda (temp),y
|
||||||
|
beq loop
|
||||||
|
tya
|
||||||
|
sta ActiveWeapon,x
|
||||||
|
|
||||||
|
; randomizing force +-50
|
||||||
|
sbw Force #50 RandBoundaryLow
|
||||||
|
bpl NotNegativeEnergy
|
||||||
|
mwa #1 RandBoundaryLow
|
||||||
|
NotNegativeEnergy
|
||||||
|
adw Force #50 RandBoundaryHigh
|
||||||
|
jsr RandomizeForce
|
||||||
|
lda ForceTableH,x
|
||||||
|
bne HighForce
|
||||||
|
; if Force lower than 256 - set weapon to Baby Missile (for security :) )
|
||||||
|
lda #ind_Baby_Missile___
|
||||||
|
sta ActiveWeapon,x
|
||||||
|
HighForce
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
;----------------------------------------------
|
||||||
|
.proc Cyborg
|
||||||
|
jsr UseBatteryOrFlag
|
||||||
|
; use defensives like Tosser
|
||||||
|
jsr TosserDefensives
|
||||||
|
; now select best target
|
||||||
|
jsr FindBestTarget3
|
||||||
|
sty TargetTankNr
|
||||||
|
; aiming
|
||||||
|
jsr TakeAim ; direction still in A (0 - left, >0 - right)
|
||||||
|
|
||||||
|
; choose the best weapon
|
||||||
|
lda TanksWeaponsTableL,x
|
||||||
|
sta temp
|
||||||
|
lda TanksWeaponsTableH,x
|
||||||
|
sta temp+1
|
||||||
|
ldy #ind_LeapFrog_______ ;the last offensive weapon to use
|
||||||
|
loop
|
||||||
|
dey
|
||||||
|
lda (temp),y
|
||||||
|
beq loop
|
||||||
|
tya
|
||||||
|
sta ActiveWeapon,x
|
||||||
|
|
||||||
|
lda Force
|
||||||
|
sta ForceTableL,x
|
||||||
|
lda Force+1
|
||||||
|
sta ForceTableH,x
|
||||||
|
bne HighForce
|
||||||
|
; if Force lower than 256 - set weapon to Baby Missile (for security :) )
|
||||||
|
lda #ind_Baby_Missile___
|
||||||
|
sta ActiveWeapon,x
|
||||||
|
HighForce
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
|
||||||
|
;----------------------------------------------
|
||||||
|
.proc FindBestTarget3
|
||||||
|
; find target with lowest energy
|
||||||
|
; X - shooting tank number
|
||||||
|
; returns target tank number in Y and
|
||||||
|
; direcion of shoot in A (0 - left, >0 - right)
|
||||||
|
;----------------------------------------------
|
||||||
|
jsr MakeLowResDistances
|
||||||
|
lda #101
|
||||||
|
sta temp2 ; max possible energy
|
||||||
|
lda #0
|
||||||
|
sta tempor2 ; direction of shoot
|
||||||
|
;ldx TankNr
|
||||||
|
ldy NumberOfPlayers
|
||||||
|
dey
|
||||||
|
|
||||||
|
loop01
|
||||||
|
cpy TankNr
|
||||||
|
beq skipThisPlayer
|
||||||
|
lda eXistenZ,y
|
||||||
|
beq skipThisPlayer
|
||||||
|
|
||||||
|
lda LowResDistances,x
|
||||||
|
cmp LowResDistances,y
|
||||||
|
bcs EnemyOnTheLeft
|
||||||
|
;enemy on the right
|
||||||
|
lda Energy,y
|
||||||
|
cmp temp2 ; lowest
|
||||||
|
bcs lowestIsLower
|
||||||
|
sta temp2
|
||||||
|
sty temp2+1 ; number of the closest tank
|
||||||
|
inc tempor2 ; set direction to right
|
||||||
|
bne lowestIsLower
|
||||||
|
|
||||||
|
EnemyOnTheLeft
|
||||||
|
lda Energy,y
|
||||||
|
cmp temp2 ; lowest
|
||||||
|
bcs lowestIsLower
|
||||||
|
sta temp2
|
||||||
|
sty temp2+1 ; number of the closest tank
|
||||||
|
|
||||||
|
lowestIsLower
|
||||||
|
skipThisPlayer
|
||||||
|
dey
|
||||||
|
bpl loop01
|
||||||
|
; now we have number of the farthest tank in temp2+1
|
||||||
|
; and direction (0 - left, >0 - right) in tempor2
|
||||||
|
; let's move them to registers
|
||||||
|
; in temp2 we have energy of target
|
||||||
|
ldy temp2+1
|
||||||
|
lda tempor2
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
;----------------------------------------------
|
||||||
|
.proc FindBestTarget2
|
||||||
|
; find nearest tank neighbour
|
||||||
|
; X - shooting tank number
|
||||||
|
; returns target tank number in Y and
|
||||||
|
; direcion of shoot in A (0 - left, >0 - right)
|
||||||
|
;----------------------------------------------
|
||||||
|
jsr MakeLowResDistances
|
||||||
|
mva #$ff temp2 ; min possible distance
|
||||||
|
mva #0 tempor2 ; direction of shoot
|
||||||
|
|
||||||
|
;ldx TankNr
|
||||||
|
ldy NumberOfPlayers
|
||||||
|
dey
|
||||||
|
|
||||||
|
loop01
|
||||||
|
cpy TankNr
|
||||||
|
beq skipThisPlayer
|
||||||
|
lda eXistenZ,y
|
||||||
|
beq skipThisPlayer
|
||||||
|
|
||||||
|
lda LowResDistances,x
|
||||||
|
cmp LowResDistances,y
|
||||||
|
bcs EnemyOnTheLeft
|
||||||
|
;enemy on the right
|
||||||
|
sec
|
||||||
|
lda LowResDistances,y
|
||||||
|
sbc LowResDistances,x
|
||||||
|
cmp temp2 ; lowest
|
||||||
|
bcs lowestIsLower
|
||||||
|
sta temp2
|
||||||
|
sty temp2+1 ; number of the closest tank
|
||||||
|
inc tempor2 ; set direction to right
|
||||||
|
bne lowestIsLower
|
||||||
|
|
||||||
|
EnemyOnTheLeft
|
||||||
|
sec
|
||||||
|
lda LowResDistances,x
|
||||||
|
sbc LowResDistances,y
|
||||||
|
cmp temp2 ; lowest
|
||||||
|
bcs lowestIsLower
|
||||||
|
sta temp2
|
||||||
|
sty temp2+1 ; number of the closest tank
|
||||||
|
|
||||||
|
lowestIsLower
|
||||||
|
skipThisPlayer
|
||||||
|
dey
|
||||||
|
bpl loop01
|
||||||
|
; now we have number of the closest tank in temp2+1
|
||||||
|
; and direction (0 - left, >0 - right) in tempor2
|
||||||
|
; let's move them to registers
|
||||||
|
; in temp2 we have x distance divided by 8
|
||||||
|
ldy temp2+1
|
||||||
|
lda tempor2
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
/*
|
||||||
|
;----------------------------------------------
|
||||||
|
.proc FindBestTarget1
|
||||||
|
; find farthest tank neighbour
|
||||||
|
; X - shooting tank number
|
||||||
|
; returns target tank number in Y and
|
||||||
|
; direcion of shoot in A (0 - left, >0 - right)
|
||||||
|
;----------------------------------------------
|
||||||
|
jsr MakeLowResDistances
|
||||||
|
lda #$00
|
||||||
|
sta temp2 ; max possible distance
|
||||||
|
sta tempor2 ; direction of shoot
|
||||||
|
;ldx TankNr
|
||||||
|
ldy NumberOfPlayers
|
||||||
|
dey
|
||||||
|
|
||||||
|
loop01
|
||||||
|
cpy TankNr
|
||||||
|
beq skipThisPlayer
|
||||||
|
lda eXistenZ,y
|
||||||
|
beq skipThisPlayer
|
||||||
|
|
||||||
|
lda LowResDistances,x
|
||||||
|
cmp LowResDistances,y
|
||||||
|
bcs EnemyOnTheLeft
|
||||||
|
;enemy on the right
|
||||||
|
sec
|
||||||
|
lda LowResDistances,y
|
||||||
|
sbc LowResDistances,x
|
||||||
|
cmp temp2 ; bigest
|
||||||
|
bcc bigestIsBigger
|
||||||
|
sta temp2
|
||||||
|
sty temp2+1 ; number of the farthest tank
|
||||||
|
inc tempor2 ; set direction to right
|
||||||
|
bne bigestIsBigger
|
||||||
|
|
||||||
|
EnemyOnTheLeft
|
||||||
|
sec
|
||||||
|
lda LowResDistances,x
|
||||||
|
sbc LowResDistances,y
|
||||||
|
cmp temp2 ; lowest
|
||||||
|
bcc bigestIsBigger
|
||||||
|
sta temp2
|
||||||
|
sty temp2+1 ; number of the farthest tank
|
||||||
|
|
||||||
|
bigestIsBigger
|
||||||
|
skipThisPlayer
|
||||||
|
dey
|
||||||
|
bpl loop01
|
||||||
|
; now we have number of the farthest tank in temp2+1
|
||||||
|
; and direction (0 - left, >0 - right) in tempor2
|
||||||
|
; let's move them to registers
|
||||||
|
; in temp2 we have x distance divided by 8
|
||||||
|
ldy temp2+1
|
||||||
|
lda tempor2
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
*/
|
||||||
|
;----------------------------------------------
|
||||||
|
.proc TakeAim
|
||||||
|
; targeting the tank number TargetTankNr (and Y)
|
||||||
|
; A (and tempor2) - direction from shooting tank (0 - left, >0 - right)
|
||||||
|
; returns angle and power of shoot tank X (TankNr)
|
||||||
|
; in the appropriate variables (Angle and Force)
|
||||||
|
;----------------------------------------------
|
||||||
|
; set initial Angle and Force values
|
||||||
|
; wind correction 90+(wind/8)
|
||||||
|
mwa Wind temp2
|
||||||
|
:7 lsrw temp2
|
||||||
|
clc
|
||||||
|
lda #90
|
||||||
|
adc temp2
|
||||||
|
sta NewAngle
|
||||||
|
lda OptionsTable+2 ; selected gravity
|
||||||
|
asl
|
||||||
|
tay
|
||||||
|
; force correction - lower tank Y position - higher possible force
|
||||||
|
clc
|
||||||
|
lda #screenheight
|
||||||
|
sbc Ytankstable,x
|
||||||
|
sta temp2
|
||||||
|
clc
|
||||||
|
lda AIForceTable,y
|
||||||
|
sta RandBoundaryLow
|
||||||
|
adc temp2
|
||||||
|
sta RandBoundaryHigh
|
||||||
|
lda AIForceTable+1,y
|
||||||
|
sta RandBoundaryLow+1
|
||||||
|
adc #0
|
||||||
|
sta RandBoundaryHigh+1
|
||||||
|
jsr RandomizeForce
|
||||||
|
lda ForceTableL,x
|
||||||
|
sta Force
|
||||||
|
lda ForceTableH,x
|
||||||
|
sta Force+1
|
||||||
|
lda #ind_Baby_Missile___
|
||||||
|
sta ActiveWeapon,x
|
||||||
|
; now we have initial valuses
|
||||||
|
mva #$ff TestFlightFlag
|
||||||
|
; check targeting direction
|
||||||
|
lda tempor2
|
||||||
|
jne AimingLeft
|
||||||
|
AimingRight
|
||||||
|
; make test Shoot (Flight)
|
||||||
|
jsr SetStartAndFlight
|
||||||
|
lda HitFlag
|
||||||
|
beq NoHitInFirstLoopR ; impossible :)
|
||||||
|
bmi GroundHitInFirstLoopR
|
||||||
|
TankHitInFirstLoopR
|
||||||
|
; tank hit, but which tank?
|
||||||
|
; it's our target or not?
|
||||||
|
ldy HitFlag
|
||||||
|
dey
|
||||||
|
cpy TargetTankNr
|
||||||
|
beq EndOfFirstLoopR ; it's our target!
|
||||||
|
; if it's another tank then check position like ground hit
|
||||||
|
GroundHitInFirstLoopR
|
||||||
|
; checking only x position of hit
|
||||||
|
ldy TargetTankNr
|
||||||
|
lda xTanksTableH,y
|
||||||
|
cmp XHit+1
|
||||||
|
bne @+
|
||||||
|
lda xTanksTableL,y
|
||||||
|
cmp XHit
|
||||||
|
@
|
||||||
|
bcs HitOnRightSideOfTargetR
|
||||||
|
; continue targeting
|
||||||
|
clc
|
||||||
|
lda NewAngle
|
||||||
|
adc #5 ; 5 deg to right
|
||||||
|
cmp #(180-20)
|
||||||
|
bcs EndOfFirstLoopR ; if angle 180-20 or higher
|
||||||
|
sta NewAngle
|
||||||
|
jmp AimingRight
|
||||||
|
NoHitInFirstLoopR
|
||||||
|
; Angle 5 deg to left and end loop
|
||||||
|
sec
|
||||||
|
lda NewAngle
|
||||||
|
sbc #5
|
||||||
|
sta NewAngle
|
||||||
|
HitOnRightSideOfTargetR
|
||||||
|
EndOfFirstLoopR
|
||||||
|
mva #5 modify ; set counter (5 turns)
|
||||||
|
SecondLoopR
|
||||||
|
; make test Shoot (Flight)
|
||||||
|
jsr SetStartAndFlight
|
||||||
|
lda HitFlag
|
||||||
|
beq NoHitInSecondLoopR ; impossible :)
|
||||||
|
bmi GroundHitInSecondLoopR
|
||||||
|
TankHitInSecondLoopR
|
||||||
|
; tank hit, but which tank?
|
||||||
|
; it's our target or not?
|
||||||
|
ldy HitFlag
|
||||||
|
dey
|
||||||
|
cpy TargetTankNr
|
||||||
|
beq EndOfSecondLoopR ; it's our target!
|
||||||
|
; if it's another tank then check position like ground hit
|
||||||
|
GroundHitInSecondLoopR
|
||||||
|
; checking only x position of hit
|
||||||
|
ldy TargetTankNr
|
||||||
|
lda xTanksTableH,y
|
||||||
|
cmp XHit+1
|
||||||
|
bne @+
|
||||||
|
lda xTanksTableL,y
|
||||||
|
cmp XHit
|
||||||
|
@
|
||||||
|
bcc HitOnLeftSideOfTargetR
|
||||||
|
; continue targeting
|
||||||
|
dec NewAngle ; 1 deg to left
|
||||||
|
dec modify ; max 5 turns
|
||||||
|
beq EndOfSecondLoopR
|
||||||
|
jmp SecondLoopR
|
||||||
|
HitOnLeftSideOfTargetR
|
||||||
|
; decrease energy (a little)
|
||||||
|
sbw Force #5
|
||||||
|
NoHitInSecondLoopR
|
||||||
|
; Angle 1 deg to right and end loop
|
||||||
|
inc NewAngle
|
||||||
|
EndOfSecondLoopR
|
||||||
|
rts
|
||||||
|
|
||||||
|
AimingLeft
|
||||||
|
; make test Shoot (Flight)
|
||||||
|
jsr SetStartAndFlight
|
||||||
|
lda HitFlag
|
||||||
|
beq NoHitInFirstLoopL ; impossible :)
|
||||||
|
bmi GroundHitInFirstLoopL
|
||||||
|
TankHitInFirstLoopL
|
||||||
|
; tank hit, but which tank?
|
||||||
|
; it's our target or not?
|
||||||
|
ldy HitFlag
|
||||||
|
dey
|
||||||
|
cpy TargetTankNr
|
||||||
|
beq EndOfFirstLoopL ; it's our target!
|
||||||
|
; if it's another tank then check position like ground hit
|
||||||
|
GroundHitInFirstLoopL
|
||||||
|
; checking only x position of hit
|
||||||
|
ldy TargetTankNr
|
||||||
|
lda xTanksTableH,y
|
||||||
|
cmp XHit+1
|
||||||
|
bne @+
|
||||||
|
lda xTanksTableL,y
|
||||||
|
cmp XHit
|
||||||
|
@
|
||||||
|
bcc HitOnLeftSideOfTargetL
|
||||||
|
; continue targeting
|
||||||
|
sec
|
||||||
|
lda NewAngle
|
||||||
|
sbc #5 ; 5 deg to left
|
||||||
|
cmp #21
|
||||||
|
bcc EndOfFirstLoopL ; if angle 180-20 or higher
|
||||||
|
sta NewAngle
|
||||||
|
jmp AimingLeft
|
||||||
|
NoHitInFirstLoopL
|
||||||
|
; Angle 5 deg to right and end loop
|
||||||
|
clc
|
||||||
|
lda NewAngle
|
||||||
|
adc #5
|
||||||
|
sta NewAngle
|
||||||
|
HitOnLeftSideOfTargetL
|
||||||
|
EndOfFirstLoopL
|
||||||
|
mva #5 modify ; set counter (5 turns)
|
||||||
|
SecondLoopL
|
||||||
|
; make test Shoot (Flight)
|
||||||
|
jsr SetStartAndFlight
|
||||||
|
lda HitFlag
|
||||||
|
beq NoHitInSecondLoopL ; impossible :)
|
||||||
|
bmi GroundHitInSecondLoopL
|
||||||
|
TankHitInSecondLoopL
|
||||||
|
; tank hit, but which tank?
|
||||||
|
; it's our target or not?
|
||||||
|
ldy HitFlag
|
||||||
|
dey
|
||||||
|
cpy TargetTankNr
|
||||||
|
beq EndOfSecondLoopL ; it's our target!
|
||||||
|
; if it's another tank then check position like ground hit
|
||||||
|
GroundHitInSecondLoopL
|
||||||
|
; checking only x position of hit
|
||||||
|
ldy TargetTankNr
|
||||||
|
lda xTanksTableH,y
|
||||||
|
cmp XHit+1
|
||||||
|
bne @+
|
||||||
|
lda xTanksTableL,y
|
||||||
|
cmp XHit
|
||||||
|
@
|
||||||
|
bcs HitOnRightSideOfTargetL
|
||||||
|
; continue targeting
|
||||||
|
inc NewAngle ; 1 deg to right
|
||||||
|
dec modify ; max 5 turns
|
||||||
|
beq EndOfSecondLoopL
|
||||||
|
jmp SecondLoopL
|
||||||
|
HitOnRightSideOfTargetL
|
||||||
|
; decrease energy (a little)
|
||||||
|
sbw Force #5
|
||||||
|
NoHitInSecondLoopL
|
||||||
|
; Angle 1 deg to left and end loop
|
||||||
|
dec NewAngle
|
||||||
|
EndOfSecondLoopL
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
SetStartAndFlight ; set start point (virtual barrel end :) ) and make test flight
|
||||||
|
; xtraj+1 and ytraj+1 set
|
||||||
|
clc
|
||||||
|
lda xTanksTableL,x
|
||||||
|
adc #4
|
||||||
|
sta xtraj+1
|
||||||
|
lda xTanksTableH,x
|
||||||
|
adc #0
|
||||||
|
sta xtraj+2
|
||||||
|
sec
|
||||||
|
lda yTanksTable,x
|
||||||
|
sbc #4
|
||||||
|
sta ytraj+1
|
||||||
|
mva #0 ytraj+2
|
||||||
|
mva NewAngle Angle
|
||||||
|
jsr Flight
|
||||||
|
ldx TankNr
|
||||||
|
rts
|
||||||
.endp
|
.endp
|
||||||
;----------------------------------------------
|
;----------------------------------------------
|
||||||
.proc PurchaseAI ;
|
.proc PurchaseAI ;
|
||||||
@@ -336,8 +845,8 @@ PurchaseAIRoutines
|
|||||||
.word PoolsharkPurchase-1 ;PoolsharkPurchase
|
.word PoolsharkPurchase-1 ;PoolsharkPurchase
|
||||||
.word TosserPurchase-1 ;TosserPurchase
|
.word TosserPurchase-1 ;TosserPurchase
|
||||||
.word TosserPurchase-1 ;ChooserPurchase
|
.word TosserPurchase-1 ;ChooserPurchase
|
||||||
.word TosserPurchase-1 ;SpoilerPurchase
|
.word CyborgPurchase-1 ;SpoilerPurchase
|
||||||
.word TosserPurchase-1 ;CyborgPurchase
|
.word CyborgPurchase-1 ;CyborgPurchase
|
||||||
.word TosserPurchase-1 ;UnknownPurchase
|
.word TosserPurchase-1 ;UnknownPurchase
|
||||||
|
|
||||||
;----------------------------------------------
|
;----------------------------------------------
|
||||||
@@ -346,13 +855,41 @@ PurchaseAIRoutines
|
|||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
;-------
|
;-------
|
||||||
|
.proc TryToPurchaseOnePiece2 ; for Cyborg
|
||||||
|
; A - weapon number, better it will be in range(1,32)
|
||||||
|
; TankNr in X
|
||||||
|
; DOES NOT CHANGE X
|
||||||
|
tay
|
||||||
|
sta temp+1
|
||||||
|
:3 lsr ; A=A/8
|
||||||
|
sta temp
|
||||||
|
tya
|
||||||
|
and #%00000111
|
||||||
|
tay
|
||||||
|
lda bittable,y
|
||||||
|
ldy temp
|
||||||
|
and PurchaseMeTable2,y
|
||||||
|
beq TryToPurchaseOnePiece.SorryNoPurchase
|
||||||
|
jmp TryToPurchaseOnePiece.PurchaseIt
|
||||||
|
.endp
|
||||||
|
;-------
|
||||||
.proc TryToPurchaseOnePiece
|
.proc TryToPurchaseOnePiece
|
||||||
; A - weapon number, better it will be in range(1,32)
|
; A - weapon number, better it will be in range(1,32)
|
||||||
; TankNr in X
|
; TankNr in X
|
||||||
; DOES NOT CHANGE X
|
; DOES NOT CHANGE X
|
||||||
tay
|
tay
|
||||||
lda PurchaseMeTable,y
|
sta temp+1
|
||||||
|
:3 lsr ; A=A/8
|
||||||
|
sta temp
|
||||||
|
tya
|
||||||
|
and #%00000111
|
||||||
|
tay
|
||||||
|
lda bittable,y
|
||||||
|
ldy temp
|
||||||
|
and PurchaseMeTable,y
|
||||||
beq SorryNoPurchase
|
beq SorryNoPurchase
|
||||||
|
PurchaseIt
|
||||||
|
ldy temp+1
|
||||||
lda WeaponPriceL,y
|
lda WeaponPriceL,y
|
||||||
sta temp
|
sta temp
|
||||||
lda WeaponPriceH,y
|
lda WeaponPriceH,y
|
||||||
@@ -422,7 +959,7 @@ SorryNoPurchase
|
|||||||
mva #3 tempXroller; number of offensive purchases to perform
|
mva #3 tempXroller; number of offensive purchases to perform
|
||||||
ldx TankNr
|
ldx TankNr
|
||||||
@
|
@
|
||||||
randomize ind_Battery________ ind_Auto_Defense___
|
randomize ind_Battery________ ind_Bouncy_Castle__
|
||||||
jsr TryToPurchaseOnePiece
|
jsr TryToPurchaseOnePiece
|
||||||
dec tempXroller
|
dec tempXroller
|
||||||
bne @-
|
bne @-
|
||||||
@@ -443,12 +980,12 @@ SorryNoPurchase
|
|||||||
|
|
||||||
; what is my money level
|
; what is my money level
|
||||||
ldx TankNr
|
ldx TankNr
|
||||||
lda MoneyH,x ; money / 256
|
; lda MoneyH,x ; money / 256
|
||||||
sta tempXroller ; perform this many purchase attempts
|
; sta tempXroller ; perform this many purchase attempts
|
||||||
; first try to buy defensives
|
; first try to buy defensives
|
||||||
mva #3 tempXroller; number of defensive purchases to perform
|
mva #1 tempXroller; number of defensive purchases to perform
|
||||||
@
|
@
|
||||||
randomize ind_Battery________ ind_Auto_Defense___
|
randomize ind_Battery________ ind_Bouncy_Castle__
|
||||||
jsr TryToPurchaseOnePiece
|
jsr TryToPurchaseOnePiece
|
||||||
dec tempXroller
|
dec tempXroller
|
||||||
bne @-
|
bne @-
|
||||||
@@ -465,3 +1002,30 @@ SorryNoPurchase
|
|||||||
|
|
||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
|
;----------------------------------------------
|
||||||
|
.proc CyborgPurchase
|
||||||
|
|
||||||
|
; what is my money level
|
||||||
|
ldx TankNr
|
||||||
|
;lda MoneyH,x ; money / 256
|
||||||
|
;sta tempXroller ; perform this many purchase attempts
|
||||||
|
; first try to buy defensives
|
||||||
|
mva #1 tempXroller; number of defensive purchases to perform
|
||||||
|
@
|
||||||
|
randomize ind_Battery________ ind_Bouncy_Castle__
|
||||||
|
jsr TryToPurchaseOnePiece2
|
||||||
|
dec tempXroller
|
||||||
|
bne @-
|
||||||
|
|
||||||
|
; and now offensives
|
||||||
|
lda MoneyH,x ; money / 256
|
||||||
|
:4 asl ;*16
|
||||||
|
sta tempXroller ; perform this many purchase attempts
|
||||||
|
@
|
||||||
|
randomize ind_Missile________ ind_Plasma_Blast___
|
||||||
|
jsr TryToPurchaseOnePiece2
|
||||||
|
dec tempXroller
|
||||||
|
bne @-
|
||||||
|
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
|||||||
@@ -1,501 +0,0 @@
|
|||||||
; @com.wudsn.ide.asm.mainsourcefile=../scorch.asm
|
|
||||||
/***************************************/
|
|
||||||
/* Use MADS http://mads.atari8.info/ */
|
|
||||||
/* Mode: DLI (char mode) */
|
|
||||||
/***************************************/
|
|
||||||
|
|
||||||
;icl "HIMARS14.h"
|
|
||||||
;ICL '../lib/atari.hea'
|
|
||||||
|
|
||||||
|
|
||||||
WIDTH = 40
|
|
||||||
HEIGHT = 30
|
|
||||||
|
|
||||||
; --- BASIC switch OFF
|
|
||||||
org $2000\ mva #$ff portb\ rts\ ini $2000
|
|
||||||
|
|
||||||
; --- dmsc LZSS player routine on zero page
|
|
||||||
org $80
|
|
||||||
|
|
||||||
chn_copy .ds 9
|
|
||||||
chn_pos .ds 9
|
|
||||||
bptr .ds 2
|
|
||||||
cur_pos .ds 1
|
|
||||||
chn_bits .ds 1
|
|
||||||
|
|
||||||
bit_data .ds 1
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
fcnt .ds 2
|
|
||||||
fadr .ds 2
|
|
||||||
fhlp .ds 2
|
|
||||||
cloc .ds 1
|
|
||||||
regA .ds 1
|
|
||||||
regX .ds 1
|
|
||||||
regY .ds 1
|
|
||||||
; --- MAIN PROGRAM
|
|
||||||
org $2000
|
|
||||||
ant dta $80
|
|
||||||
dta $42,a(scr),$02,$02,$02,$02,$02,$02,$02,$02,$02,$82,$02,$02,$02,$02,$82
|
|
||||||
dta $02,$02,$02,$82,$82,$82,$02,$82,$02,$02,$02,$82
|
|
||||||
dta $42,a(verline)
|
|
||||||
dta $41,a(ant)
|
|
||||||
|
|
||||||
verline
|
|
||||||
:37 dta d" "
|
|
||||||
build
|
|
||||||
|
|
||||||
scr ins "HIMARS14.scr"
|
|
||||||
|
|
||||||
.ds 2*40
|
|
||||||
|
|
||||||
.ALIGN $0400
|
|
||||||
fnt ins "HIMARS14.fnt"
|
|
||||||
|
|
||||||
ift USESPRITES
|
|
||||||
.ALIGN $0800
|
|
||||||
pmg .ds $0300
|
|
||||||
ift FADECHR = 0
|
|
||||||
SPRITES
|
|
||||||
els
|
|
||||||
.ds $500
|
|
||||||
eif
|
|
||||||
eif
|
|
||||||
|
|
||||||
song_data
|
|
||||||
ins 'mmm_16.lzs'
|
|
||||||
song_end
|
|
||||||
|
|
||||||
POKEY = $D200
|
|
||||||
|
|
||||||
buffers
|
|
||||||
.ds 256 * 9
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
; Song Initialization - this runs in the first tick:
|
|
||||||
;
|
|
||||||
.proc init_song
|
|
||||||
|
|
||||||
mva #1 bit_data
|
|
||||||
|
|
||||||
; Example: here initializes song pointer:
|
|
||||||
|
|
||||||
;mwa #song_data song_ptr
|
|
||||||
|
|
||||||
; Init all channels:
|
|
||||||
ldx #8
|
|
||||||
ldy #0
|
|
||||||
clear
|
|
||||||
; Read just init value and store into buffer and POKEY
|
|
||||||
jsr get_byte
|
|
||||||
sta POKEY, x
|
|
||||||
sty chn_copy, x
|
|
||||||
cbuf
|
|
||||||
sta buffers + 255
|
|
||||||
inc cbuf + 2
|
|
||||||
dex
|
|
||||||
bpl clear
|
|
||||||
|
|
||||||
; Initialize buffer pointer:
|
|
||||||
sty bptr
|
|
||||||
sty cur_pos
|
|
||||||
rts
|
|
||||||
.endp
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
; Wait for next frame
|
|
||||||
;
|
|
||||||
.proc wait_frame
|
|
||||||
|
|
||||||
lda 20
|
|
||||||
delay
|
|
||||||
cmp 20
|
|
||||||
beq delay
|
|
||||||
.endp
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
; Play one frame of the song
|
|
||||||
;
|
|
||||||
.proc play_frame
|
|
||||||
lda #>buffers
|
|
||||||
sta bptr+1
|
|
||||||
|
|
||||||
lda song_data
|
|
||||||
sta chn_bits
|
|
||||||
ldx #8
|
|
||||||
|
|
||||||
; Loop through all "channels", one for each POKEY register
|
|
||||||
chn_loop:
|
|
||||||
lsr chn_bits
|
|
||||||
bcs skip_chn ; C=1 : skip this channel
|
|
||||||
|
|
||||||
lda chn_copy, x ; Get status of this stream
|
|
||||||
bne do_copy_byte ; If > 0 we are copying bytes
|
|
||||||
|
|
||||||
; We are decoding a new match/literal
|
|
||||||
lsr bit_data ; Get next bit
|
|
||||||
bne got_bit
|
|
||||||
jsr get_byte ; Not enough bits, refill!
|
|
||||||
ror ; Extract a new bit and add a 1 at the high bit (from C set above)
|
|
||||||
sta bit_data ;
|
|
||||||
got_bit:
|
|
||||||
jsr get_byte ; Always read a byte, it could mean "match size/offset" or "literal byte"
|
|
||||||
bcs store ; Bit = 1 is "literal", bit = 0 is "match"
|
|
||||||
|
|
||||||
sta chn_pos, x ; Store in "copy pos"
|
|
||||||
|
|
||||||
jsr get_byte
|
|
||||||
sta chn_copy, x ; Store in "copy length"
|
|
||||||
|
|
||||||
; And start copying first byte
|
|
||||||
do_copy_byte:
|
|
||||||
dec chn_copy, x ; Decrease match length, increase match position
|
|
||||||
inc chn_pos, x
|
|
||||||
ldy chn_pos, x
|
|
||||||
|
|
||||||
; Now, read old data, jump to data store
|
|
||||||
lda (bptr), y
|
|
||||||
|
|
||||||
store:
|
|
||||||
ldy cur_pos
|
|
||||||
sta POKEY, x ; Store to output and buffer
|
|
||||||
sta (bptr), y
|
|
||||||
|
|
||||||
skip_chn:
|
|
||||||
; Increment channel buffer pointer
|
|
||||||
inc bptr+1
|
|
||||||
|
|
||||||
dex
|
|
||||||
bpl chn_loop ; Next channel
|
|
||||||
|
|
||||||
inc cur_pos
|
|
||||||
.endp
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
||||||
; Check for ending of song and jump to the next frame
|
|
||||||
;
|
|
||||||
|
|
||||||
; not checking really so the tune gets funky :)))
|
|
||||||
;lda song_ptr + 1
|
|
||||||
;cmp #>song_end
|
|
||||||
;bne wait_frame
|
|
||||||
;lda song_ptr
|
|
||||||
;cmp #<song_end
|
|
||||||
;bne wait_frame
|
|
||||||
|
|
||||||
end_loop
|
|
||||||
rts
|
|
||||||
|
|
||||||
song_ptr = get_byte + 1
|
|
||||||
.proc get_byte
|
|
||||||
lda song_data+1
|
|
||||||
inc song_ptr
|
|
||||||
bne skip
|
|
||||||
inc song_ptr+1
|
|
||||||
skip
|
|
||||||
rts
|
|
||||||
.endp
|
|
||||||
|
|
||||||
|
|
||||||
main
|
|
||||||
jsr init_song
|
|
||||||
|
|
||||||
; --- init PMG
|
|
||||||
|
|
||||||
ift USESPRITES
|
|
||||||
mva >pmg pmbase ;missiles and players data address
|
|
||||||
mva #$03 pmcntl ;enable players and missiles
|
|
||||||
eif
|
|
||||||
|
|
||||||
lda:cmp:req $14 ;wait 1 frame
|
|
||||||
|
|
||||||
; copy system font to $a000
|
|
||||||
ldx #0
|
|
||||||
@ lda $e000,x
|
|
||||||
sta $a000,x
|
|
||||||
;lda $e100,x ; i need digits only :]
|
|
||||||
;sta $a100,x
|
|
||||||
;lda $e200,x
|
|
||||||
;sta $a200,x
|
|
||||||
;lda $e300,x
|
|
||||||
;sta $a300,x
|
|
||||||
inx
|
|
||||||
bne @-
|
|
||||||
|
|
||||||
sei ;stop IRQ interrupts
|
|
||||||
mva #$00 nmien ;stop NMI interrupts
|
|
||||||
sta dmactl
|
|
||||||
mva #$fe portb ;switch off ROM to get 16k more ram
|
|
||||||
|
|
||||||
mwa #NMI $fffa ;new NMI handler
|
|
||||||
|
|
||||||
mva #$c0 nmien ;switch on NMI+DLI again
|
|
||||||
|
|
||||||
ift CHANGES ;if label CHANGES defined
|
|
||||||
|
|
||||||
_lp lda trig0 ; FIRE #0
|
|
||||||
beq stop
|
|
||||||
|
|
||||||
lda trig1 ; FIRE #1
|
|
||||||
beq stop
|
|
||||||
|
|
||||||
lda consol ; START
|
|
||||||
and #1
|
|
||||||
beq stop
|
|
||||||
|
|
||||||
lda skctl
|
|
||||||
and #$04
|
|
||||||
bne _lp ;wait to press any key; here you can put any own routine
|
|
||||||
|
|
||||||
els
|
|
||||||
|
|
||||||
null jmp DLI.dli1 ;CPU is busy here, so no more routines allowed
|
|
||||||
|
|
||||||
eif
|
|
||||||
|
|
||||||
|
|
||||||
stop
|
|
||||||
mva #$00 pmcntl ;PMG disabled
|
|
||||||
tax
|
|
||||||
sta:rne hposp0,x+
|
|
||||||
|
|
||||||
mva #$ff portb ;ROM switch on
|
|
||||||
mva #$40 nmien ;only NMI interrupts, DLI disabled
|
|
||||||
cli ;IRQ enabled
|
|
||||||
|
|
||||||
|
|
||||||
lda #0
|
|
||||||
ldx #8
|
|
||||||
@ sta POKEY,x
|
|
||||||
dex
|
|
||||||
bpl @-
|
|
||||||
|
|
||||||
;no glitching please (issue #67)
|
|
||||||
lda #0
|
|
||||||
sta $D400 ;dmactl
|
|
||||||
sta $022F ;dmactls
|
|
||||||
rts ;return to ... DOS
|
|
||||||
|
|
||||||
; --- DLI PROGRAM
|
|
||||||
|
|
||||||
.local DLI
|
|
||||||
|
|
||||||
?old_dli = *
|
|
||||||
|
|
||||||
ift !CHANGES
|
|
||||||
|
|
||||||
dli1 lda trig0 ; FIRE #0
|
|
||||||
beq stop
|
|
||||||
|
|
||||||
lda trig1 ; FIRE #1
|
|
||||||
beq stop
|
|
||||||
|
|
||||||
lda consol ; START
|
|
||||||
and #1
|
|
||||||
beq stop
|
|
||||||
|
|
||||||
lda skctl
|
|
||||||
and #$04
|
|
||||||
beq stop
|
|
||||||
|
|
||||||
lda vcount
|
|
||||||
cmp #$02
|
|
||||||
bne dli1
|
|
||||||
|
|
||||||
:3 sta wsync
|
|
||||||
|
|
||||||
DLINEW dli10
|
|
||||||
|
|
||||||
eif
|
|
||||||
|
|
||||||
dli_start
|
|
||||||
|
|
||||||
dli10
|
|
||||||
sta regA
|
|
||||||
|
|
||||||
c4 lda #$04
|
|
||||||
sta wsync ;line=8
|
|
||||||
sta color0
|
|
||||||
sta gtictl
|
|
||||||
DLINEW DLI.dli2 1 0 0
|
|
||||||
|
|
||||||
dli2
|
|
||||||
sta regA
|
|
||||||
lda >fnt+$400*$01
|
|
||||||
sta wsync ;line=96
|
|
||||||
sta chbase
|
|
||||||
DLINEW dli3 1 0 0
|
|
||||||
|
|
||||||
dli3
|
|
||||||
sta regA
|
|
||||||
lda >fnt+$400*$02
|
|
||||||
sta wsync ;line=136
|
|
||||||
sta chbase
|
|
||||||
DLINEW dli4 1 0 0
|
|
||||||
|
|
||||||
dli4
|
|
||||||
sta regA
|
|
||||||
lda >fnt+$400*$01
|
|
||||||
sta wsync ;line=168
|
|
||||||
sta chbase
|
|
||||||
DLINEW dli5 1 0 0
|
|
||||||
|
|
||||||
dli5
|
|
||||||
sta regA
|
|
||||||
lda >fnt+$400*$02
|
|
||||||
sta wsync ;line=176
|
|
||||||
sta chbase
|
|
||||||
DLINEW dli6 1 0 0
|
|
||||||
|
|
||||||
dli6
|
|
||||||
sta regA
|
|
||||||
lda >fnt+$400*$03
|
|
||||||
sta wsync ;line=184
|
|
||||||
sta chbase
|
|
||||||
DLINEW dli7 1 0 0
|
|
||||||
|
|
||||||
dli7
|
|
||||||
sta regA
|
|
||||||
lda >fnt+$400*$00
|
|
||||||
sta wsync ;line=200
|
|
||||||
sta chbase
|
|
||||||
DLINEW dli11 1 0 0
|
|
||||||
|
|
||||||
dli11
|
|
||||||
sta regA
|
|
||||||
|
|
||||||
lda #>$a000 ; system font
|
|
||||||
sta wsync ;line=232
|
|
||||||
sta chbase
|
|
||||||
lda #$01
|
|
||||||
sta gtictl
|
|
||||||
|
|
||||||
lda regA
|
|
||||||
rti
|
|
||||||
|
|
||||||
.endl
|
|
||||||
|
|
||||||
; ---
|
|
||||||
|
|
||||||
CHANGES = 1
|
|
||||||
FADECHR = 0
|
|
||||||
|
|
||||||
SCHR = 127
|
|
||||||
|
|
||||||
; ---
|
|
||||||
|
|
||||||
.proc NMI
|
|
||||||
|
|
||||||
bit nmist
|
|
||||||
bpl VBL
|
|
||||||
|
|
||||||
jmp DLI.dli_start
|
|
||||||
dliv equ *-2
|
|
||||||
|
|
||||||
VBL
|
|
||||||
sta regA
|
|
||||||
stx regX
|
|
||||||
sty regY
|
|
||||||
|
|
||||||
sta nmist ;reset NMI flag
|
|
||||||
|
|
||||||
mwa #ant dlptr ;ANTIC address program
|
|
||||||
|
|
||||||
mva #@dmactl(standard|dma|lineX1) dmactl ;set new screen width
|
|
||||||
|
|
||||||
inc cloc ;little timer
|
|
||||||
|
|
||||||
; Initial values
|
|
||||||
|
|
||||||
lda >fnt+$400*$00
|
|
||||||
sta chbase
|
|
||||||
c0 lda #$00
|
|
||||||
sta colbak
|
|
||||||
lda #$02
|
|
||||||
sta chrctl
|
|
||||||
lda #$01
|
|
||||||
sta gtictl
|
|
||||||
c1 lda #$0C
|
|
||||||
sta color1
|
|
||||||
c2 lda #$02
|
|
||||||
sta color2
|
|
||||||
c3 lda #$0E
|
|
||||||
sta color3
|
|
||||||
x0 lda #$00
|
|
||||||
sta hposp0
|
|
||||||
sta hposp1
|
|
||||||
sta hposp2
|
|
||||||
sta hposp3
|
|
||||||
sta hposm0
|
|
||||||
sta hposm1
|
|
||||||
sta hposm2
|
|
||||||
sta hposm3
|
|
||||||
sta sizep0
|
|
||||||
sta sizep1
|
|
||||||
sta sizep2
|
|
||||||
sta sizep3
|
|
||||||
sta sizem
|
|
||||||
sta colpm0
|
|
||||||
sta colpm1
|
|
||||||
sta colpm2
|
|
||||||
sta colpm3
|
|
||||||
sta color0
|
|
||||||
|
|
||||||
mwa #DLI.dli_start dliv ;set the first address of DLI interrupt
|
|
||||||
|
|
||||||
;this area is for yours routines
|
|
||||||
jsr play_frame
|
|
||||||
|
|
||||||
quit
|
|
||||||
lda regA
|
|
||||||
ldx regX
|
|
||||||
ldy regY
|
|
||||||
rti
|
|
||||||
|
|
||||||
.endp
|
|
||||||
|
|
||||||
; ---
|
|
||||||
ini main
|
|
||||||
; ---
|
|
||||||
|
|
||||||
;opt l-
|
|
||||||
|
|
||||||
.MACRO SPRITES
|
|
||||||
missiles
|
|
||||||
.ds $100
|
|
||||||
player0
|
|
||||||
.ds $100
|
|
||||||
player1
|
|
||||||
.ds $100
|
|
||||||
player2
|
|
||||||
.ds $100
|
|
||||||
player3
|
|
||||||
.ds $100
|
|
||||||
.ENDM
|
|
||||||
|
|
||||||
USESPRITES = 0
|
|
||||||
|
|
||||||
.MACRO DLINEW
|
|
||||||
mva <:1 NMI.dliv
|
|
||||||
ift [>?old_dli]<>[>:1]
|
|
||||||
mva >:1 NMI.dliv+1
|
|
||||||
eif
|
|
||||||
|
|
||||||
ift :2
|
|
||||||
lda regA
|
|
||||||
eif
|
|
||||||
|
|
||||||
ift :3
|
|
||||||
ldx regX
|
|
||||||
eif
|
|
||||||
|
|
||||||
ift :4
|
|
||||||
ldy regY
|
|
||||||
eif
|
|
||||||
|
|
||||||
rti
|
|
||||||
|
|
||||||
.def ?old_dli = *
|
|
||||||
.ENDM
|
|
||||||
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 4.5 KiB |
Binary file not shown.
@@ -0,0 +1,877 @@
|
|||||||
|
/***************************************/
|
||||||
|
/* Use MADS http://mads.atari8.info/ */
|
||||||
|
/* Mode: DLI (char mode) */
|
||||||
|
/***************************************/
|
||||||
|
|
||||||
|
;icl "Scorch50.h"
|
||||||
|
|
||||||
|
; --- dmsc LZSS player routine on zero page
|
||||||
|
org $80
|
||||||
|
|
||||||
|
chn_copy .ds 9
|
||||||
|
chn_pos .ds 9
|
||||||
|
bptr .ds 2
|
||||||
|
cur_pos .ds 1
|
||||||
|
chn_bits .ds 1
|
||||||
|
|
||||||
|
bit_data .ds 1
|
||||||
|
|
||||||
|
fcnt .ds 2
|
||||||
|
fadr .ds 2
|
||||||
|
fhlp .ds 2
|
||||||
|
cloc .ds 1
|
||||||
|
regA .ds 1
|
||||||
|
regX .ds 1
|
||||||
|
regY .ds 1
|
||||||
|
|
||||||
|
WIDTH = 40
|
||||||
|
HEIGHT = 30
|
||||||
|
|
||||||
|
; --- BASIC switch OFF
|
||||||
|
org $2000\ mva #$ff portb\ rts\ ini $2000
|
||||||
|
|
||||||
|
; --- MAIN PROGRAM
|
||||||
|
org $2000
|
||||||
|
ant dta $C2,a(scr)
|
||||||
|
dta $02,$82,$02,$02,$82,$02,$82,$02,$82,$02,$02,$02,$82,$02,$82,$82
|
||||||
|
dta $02,$02,$82,$02,$02,$82,$02,$02,$82,$82,$02,$82,$22
|
||||||
|
;dta $42,a(verline)
|
||||||
|
dta $41,a(ant)
|
||||||
|
|
||||||
|
;verline
|
||||||
|
; :37 dta d" "
|
||||||
|
; dta build
|
||||||
|
|
||||||
|
scr ins "Scorch50.scr"
|
||||||
|
|
||||||
|
.ds 0*40
|
||||||
|
|
||||||
|
.ALIGN $0400
|
||||||
|
fnt ins "Scorch50.fnt"
|
||||||
|
|
||||||
|
ift USESPRITES
|
||||||
|
.ALIGN $0800
|
||||||
|
pmg .ds $0300
|
||||||
|
ift FADECHR = 0
|
||||||
|
SPRITES
|
||||||
|
els
|
||||||
|
.ds $500
|
||||||
|
eif
|
||||||
|
eif
|
||||||
|
|
||||||
|
|
||||||
|
song_data
|
||||||
|
ins 'mmm_16.lzs'
|
||||||
|
song_end
|
||||||
|
|
||||||
|
POKEY = $D200
|
||||||
|
|
||||||
|
buffers
|
||||||
|
.ds 256 * 9
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; Song Initialization - this runs in the first tick:
|
||||||
|
;
|
||||||
|
.proc init_song
|
||||||
|
|
||||||
|
mva #1 bit_data
|
||||||
|
|
||||||
|
; Example: here initializes song pointer:
|
||||||
|
|
||||||
|
;mwa #song_data song_ptr
|
||||||
|
|
||||||
|
; Init all channels:
|
||||||
|
ldx #8
|
||||||
|
ldy #0
|
||||||
|
clear
|
||||||
|
; Read just init value and store into buffer and POKEY
|
||||||
|
jsr get_byte
|
||||||
|
sta POKEY, x
|
||||||
|
sty chn_copy, x
|
||||||
|
cbuf
|
||||||
|
sta buffers + 255
|
||||||
|
inc cbuf + 2
|
||||||
|
dex
|
||||||
|
bpl clear
|
||||||
|
|
||||||
|
; Initialize buffer pointer:
|
||||||
|
sty bptr
|
||||||
|
sty cur_pos
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; Wait for next frame
|
||||||
|
;
|
||||||
|
.proc wait_frame
|
||||||
|
|
||||||
|
lda 20
|
||||||
|
delay
|
||||||
|
cmp 20
|
||||||
|
beq delay
|
||||||
|
.endp
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; Play one frame of the song
|
||||||
|
;
|
||||||
|
.proc play_frame
|
||||||
|
lda #>buffers
|
||||||
|
sta bptr+1
|
||||||
|
|
||||||
|
lda song_data
|
||||||
|
sta chn_bits
|
||||||
|
ldx #8
|
||||||
|
|
||||||
|
; Loop through all "channels", one for each POKEY register
|
||||||
|
chn_loop:
|
||||||
|
lsr chn_bits
|
||||||
|
bcs skip_chn ; C=1 : skip this channel
|
||||||
|
|
||||||
|
lda chn_copy, x ; Get status of this stream
|
||||||
|
bne do_copy_byte ; If > 0 we are copying bytes
|
||||||
|
|
||||||
|
; We are decoding a new match/literal
|
||||||
|
lsr bit_data ; Get next bit
|
||||||
|
bne got_bit
|
||||||
|
jsr get_byte ; Not enough bits, refill!
|
||||||
|
ror ; Extract a new bit and add a 1 at the high bit (from C set above)
|
||||||
|
sta bit_data ;
|
||||||
|
got_bit:
|
||||||
|
jsr get_byte ; Always read a byte, it could mean "match size/offset" or "literal byte"
|
||||||
|
bcs store ; Bit = 1 is "literal", bit = 0 is "match"
|
||||||
|
|
||||||
|
sta chn_pos, x ; Store in "copy pos"
|
||||||
|
|
||||||
|
jsr get_byte
|
||||||
|
sta chn_copy, x ; Store in "copy length"
|
||||||
|
|
||||||
|
; And start copying first byte
|
||||||
|
do_copy_byte:
|
||||||
|
dec chn_copy, x ; Decrease match length, increase match position
|
||||||
|
inc chn_pos, x
|
||||||
|
ldy chn_pos, x
|
||||||
|
|
||||||
|
; Now, read old data, jump to data store
|
||||||
|
lda (bptr), y
|
||||||
|
|
||||||
|
store:
|
||||||
|
ldy cur_pos
|
||||||
|
sta POKEY, x ; Store to output and buffer
|
||||||
|
sta (bptr), y
|
||||||
|
|
||||||
|
skip_chn:
|
||||||
|
; Increment channel buffer pointer
|
||||||
|
inc bptr+1
|
||||||
|
|
||||||
|
dex
|
||||||
|
bpl chn_loop ; Next channel
|
||||||
|
|
||||||
|
inc cur_pos
|
||||||
|
.endp
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; Check for ending of song and jump to the next frame
|
||||||
|
;
|
||||||
|
|
||||||
|
; not checking really so the tune gets funky :)))
|
||||||
|
;lda song_ptr + 1
|
||||||
|
;cmp #>song_end
|
||||||
|
;bne wait_frame
|
||||||
|
;lda song_ptr
|
||||||
|
;cmp #<song_end
|
||||||
|
;bne wait_frame
|
||||||
|
|
||||||
|
end_loop
|
||||||
|
rts
|
||||||
|
|
||||||
|
song_ptr = get_byte + 1
|
||||||
|
.proc get_byte
|
||||||
|
lda song_data+1
|
||||||
|
inc song_ptr
|
||||||
|
bne skip
|
||||||
|
inc song_ptr+1
|
||||||
|
skip
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
|
||||||
|
|
||||||
|
main
|
||||||
|
|
||||||
|
jsr init_song
|
||||||
|
|
||||||
|
; ; copy system font to $a000
|
||||||
|
; ldx #0
|
||||||
|
;@ lda $e000,x
|
||||||
|
; sta $a000,x
|
||||||
|
; ;lda $e100,x ; i need digits only :]
|
||||||
|
; ;sta $a100,x
|
||||||
|
; ;lda $e200,x
|
||||||
|
; ;sta $a200,x
|
||||||
|
; ;lda $e300,x
|
||||||
|
; ;sta $a300,x
|
||||||
|
; inx
|
||||||
|
; bne @-
|
||||||
|
|
||||||
|
; --- init PMG
|
||||||
|
|
||||||
|
ift USESPRITES
|
||||||
|
mva >pmg pmbase ;missiles and players data address
|
||||||
|
mva #$03 pmcntl ;enable players and missiles
|
||||||
|
eif
|
||||||
|
|
||||||
|
lda:cmp:req $14 ;wait 1 frame
|
||||||
|
|
||||||
|
sei ;stop IRQ interrupts
|
||||||
|
mva #$00 nmien ;stop NMI interrupts
|
||||||
|
sta dmactl
|
||||||
|
;mva #$fe portb ;switch off ROM to get 16k more ram
|
||||||
|
|
||||||
|
;mwa #NMI $fffa ;new NMI handler
|
||||||
|
|
||||||
|
sta colbaks
|
||||||
|
lda #$0E
|
||||||
|
sta colpf1s
|
||||||
|
lda #$84
|
||||||
|
sta colpf2s
|
||||||
|
lda #$0E
|
||||||
|
sta colpf3s
|
||||||
|
lda #$02
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
VMAIN NMI.vbl,6 ;jsr SetVBL
|
||||||
|
VDLI DLI.dli_start
|
||||||
|
|
||||||
|
|
||||||
|
mva #1 vscrol
|
||||||
|
|
||||||
|
mva #$c0 nmien ;switch on NMI+DLI again
|
||||||
|
|
||||||
|
_lp lda trig0 ; FIRE #0
|
||||||
|
beq stop
|
||||||
|
|
||||||
|
lda trig1 ; FIRE #1
|
||||||
|
beq stop
|
||||||
|
|
||||||
|
lda consol ; START
|
||||||
|
and #1
|
||||||
|
beq stop
|
||||||
|
|
||||||
|
lda skctl
|
||||||
|
and #$04
|
||||||
|
bne _lp ;wait to press any key; here you can put any own routine
|
||||||
|
|
||||||
|
|
||||||
|
stop
|
||||||
|
|
||||||
|
cli
|
||||||
|
vmain sysvbv,6
|
||||||
|
|
||||||
|
mva #$00 pmcntl ;PMG disabled
|
||||||
|
tax
|
||||||
|
sta:rne hposp0,x+
|
||||||
|
|
||||||
|
;mva #$ff portb ;ROM switch on
|
||||||
|
mva #$40 nmien ;only NMI interrupts, DLI disabled
|
||||||
|
;cli ;IRQ enabled
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
ldx #8
|
||||||
|
@ sta POKEY,x
|
||||||
|
dex
|
||||||
|
bpl @-
|
||||||
|
|
||||||
|
|
||||||
|
;no glitching please (issue #67)
|
||||||
|
lda #0
|
||||||
|
sta $D400 ;dmactl
|
||||||
|
sta $022F ;dmactls
|
||||||
|
rts ;return to ... DOS
|
||||||
|
|
||||||
|
; --- DLI PROGRAM
|
||||||
|
|
||||||
|
.local DLI
|
||||||
|
|
||||||
|
?old_dli = *
|
||||||
|
|
||||||
|
dli_start
|
||||||
|
|
||||||
|
dli13
|
||||||
|
sta regA
|
||||||
|
|
||||||
|
sta wsync ;line=8
|
||||||
|
sta wsync ;line=9
|
||||||
|
sta wsync ;line=10
|
||||||
|
sta wsync ;line=11
|
||||||
|
sta wsync ;line=12
|
||||||
|
sta wsync ;line=13
|
||||||
|
c9 lda #$14
|
||||||
|
sta wsync ;line=14
|
||||||
|
sta colpm3
|
||||||
|
DLINEW DLI.dli2 1 0 0
|
||||||
|
|
||||||
|
dli2
|
||||||
|
sta regA
|
||||||
|
lda >fnt+$400*$01
|
||||||
|
sta wsync ;line=24
|
||||||
|
sta chbase
|
||||||
|
DLINEW dli3 1 0 0
|
||||||
|
|
||||||
|
dli3
|
||||||
|
sta regA
|
||||||
|
lda >fnt+$400*$02
|
||||||
|
sta wsync ;line=48
|
||||||
|
sta chbase
|
||||||
|
sta wsync ;line=49
|
||||||
|
sta wsync ;line=50
|
||||||
|
sta wsync ;line=51
|
||||||
|
s3 lda #$07
|
||||||
|
sta wsync ;line=52
|
||||||
|
sta sizem
|
||||||
|
DLINEW dli14 1 0 0
|
||||||
|
|
||||||
|
dli14
|
||||||
|
sta regA
|
||||||
|
stx regX
|
||||||
|
sty regY
|
||||||
|
|
||||||
|
x8 lda #$A3
|
||||||
|
sta wsync ;line=64
|
||||||
|
sta hposp3
|
||||||
|
x9 lda #$AB
|
||||||
|
sta wsync ;line=65
|
||||||
|
sta hposm3
|
||||||
|
sta wsync ;line=66
|
||||||
|
sta wsync ;line=67
|
||||||
|
sta wsync ;line=68
|
||||||
|
sta wsync ;line=69
|
||||||
|
sta wsync ;line=70
|
||||||
|
s4 lda #$13
|
||||||
|
x10 ldx #$A6
|
||||||
|
sta wsync ;line=71
|
||||||
|
sta sizem
|
||||||
|
stx hposm2
|
||||||
|
s5 lda #$01
|
||||||
|
x11 ldx #$72
|
||||||
|
x12 ldy #$62
|
||||||
|
sta wsync ;line=72
|
||||||
|
sta sizep2
|
||||||
|
sta sizep3
|
||||||
|
stx hposp2
|
||||||
|
sty hposp3
|
||||||
|
x13 lda #$A9
|
||||||
|
sta wsync ;line=73
|
||||||
|
sta hposp1
|
||||||
|
DLINEW dli4 1 1 1
|
||||||
|
|
||||||
|
dli4
|
||||||
|
sta regA
|
||||||
|
lda >fnt+$400*$03
|
||||||
|
sta wsync ;line=80
|
||||||
|
sta chbase
|
||||||
|
DLINEW dli5 1 0 0
|
||||||
|
|
||||||
|
dli5
|
||||||
|
sta regA
|
||||||
|
stx regX
|
||||||
|
lda >fnt+$400*$04
|
||||||
|
sta wsync ;line=112
|
||||||
|
sta chbase
|
||||||
|
sta wsync ;line=113
|
||||||
|
sta wsync ;line=114
|
||||||
|
sta wsync ;line=115
|
||||||
|
sta wsync ;line=116
|
||||||
|
sta wsync ;line=117
|
||||||
|
sta wsync ;line=118
|
||||||
|
s6 lda #$07
|
||||||
|
x14 ldx #$A3
|
||||||
|
sta wsync ;line=119
|
||||||
|
sta sizem
|
||||||
|
stx hposm1
|
||||||
|
s7 lda #$01
|
||||||
|
x15 ldx #$93
|
||||||
|
sta wsync ;line=120
|
||||||
|
sta sizep1
|
||||||
|
stx hposp1
|
||||||
|
DLINEW dli15 1 1 0
|
||||||
|
|
||||||
|
dli15
|
||||||
|
sta regA
|
||||||
|
stx regX
|
||||||
|
|
||||||
|
sta wsync ;line=128
|
||||||
|
sta wsync ;line=129
|
||||||
|
sta wsync ;line=130
|
||||||
|
sta wsync ;line=131
|
||||||
|
x16 lda #$4A
|
||||||
|
sta wsync ;line=132
|
||||||
|
sta hposp1
|
||||||
|
c10 lda #$D4
|
||||||
|
sta wsync ;line=133
|
||||||
|
sta color2
|
||||||
|
s8 lda #$C3
|
||||||
|
x17 ldx #$5A
|
||||||
|
sta wsync ;line=134
|
||||||
|
sta sizem
|
||||||
|
stx hposm3
|
||||||
|
DLINEW dli6 1 1 0
|
||||||
|
|
||||||
|
dli6
|
||||||
|
sta regA
|
||||||
|
stx regX
|
||||||
|
sty regY
|
||||||
|
lda >fnt+$400*$05
|
||||||
|
sta wsync ;line=136
|
||||||
|
sta chbase
|
||||||
|
sta wsync ;line=137
|
||||||
|
sta wsync ;line=138
|
||||||
|
sta wsync ;line=139
|
||||||
|
sta wsync ;line=140
|
||||||
|
sta wsync ;line=141
|
||||||
|
sta wsync ;line=142
|
||||||
|
s9 lda #$C7
|
||||||
|
x18 ldx #$A9
|
||||||
|
sta wsync ;line=143
|
||||||
|
sta sizem
|
||||||
|
stx hposm1
|
||||||
|
s10 lda #$D7
|
||||||
|
x19 ldx #$9E
|
||||||
|
c11 ldy #$02
|
||||||
|
sta wsync ;line=144
|
||||||
|
sta sizem
|
||||||
|
stx hposm2
|
||||||
|
sty colpm2
|
||||||
|
sta wsync ;line=145
|
||||||
|
c12 lda #$04
|
||||||
|
sta wsync ;line=146
|
||||||
|
sta colpm1
|
||||||
|
sta wsync ;line=147
|
||||||
|
sta wsync ;line=148
|
||||||
|
sta wsync ;line=149
|
||||||
|
s11 lda #$00
|
||||||
|
x20 ldx #$74
|
||||||
|
c13 ldy #$02
|
||||||
|
sta wsync ;line=150
|
||||||
|
sta sizep3
|
||||||
|
stx hposp3
|
||||||
|
sty colpm3
|
||||||
|
sta wsync ;line=151
|
||||||
|
sta wsync ;line=152
|
||||||
|
sta wsync ;line=153
|
||||||
|
sta wsync ;line=154
|
||||||
|
sta wsync ;line=155
|
||||||
|
sta wsync ;line=156
|
||||||
|
sta wsync ;line=157
|
||||||
|
c14 lda #$04
|
||||||
|
sta wsync ;line=158
|
||||||
|
sta color0
|
||||||
|
DLINEW dli7 1 1 1
|
||||||
|
|
||||||
|
dli7
|
||||||
|
sta regA
|
||||||
|
lda >fnt+$400*$06
|
||||||
|
sta wsync ;line=160
|
||||||
|
sta chbase
|
||||||
|
DLINEW dli8 1 0 0
|
||||||
|
|
||||||
|
dli8
|
||||||
|
sta regA
|
||||||
|
stx regX
|
||||||
|
sty regY
|
||||||
|
lda >fnt+$400*$07
|
||||||
|
sta wsync ;line=184
|
||||||
|
sta chbase
|
||||||
|
sta wsync ;line=185
|
||||||
|
s12 lda #$00
|
||||||
|
x21 ldx #$8E
|
||||||
|
c15 ldy #$08
|
||||||
|
sta wsync ;line=186
|
||||||
|
sta sizep2
|
||||||
|
stx hposp2
|
||||||
|
sty colpm2
|
||||||
|
x22 lda #$4C
|
||||||
|
c16 ldx #$0E
|
||||||
|
sta wsync ;line=187
|
||||||
|
sta hposp3
|
||||||
|
stx colpm3
|
||||||
|
c17 lda #$0A
|
||||||
|
c18 ldx #$34
|
||||||
|
sta wsync ;line=188
|
||||||
|
sta color1
|
||||||
|
stx colpm3
|
||||||
|
s13 lda #$43
|
||||||
|
x23 ldx #$49
|
||||||
|
sta wsync ;line=189
|
||||||
|
sta sizem
|
||||||
|
stx hposm3
|
||||||
|
c19 lda #$08
|
||||||
|
c20 ldx #$34
|
||||||
|
sta wsync ;line=190
|
||||||
|
sta color1
|
||||||
|
stx colpm2
|
||||||
|
sta wsync ;line=191
|
||||||
|
c21 lda #$0A
|
||||||
|
sta wsync ;line=192
|
||||||
|
sta color1
|
||||||
|
c22 lda #$08
|
||||||
|
sta wsync ;line=193
|
||||||
|
sta color1
|
||||||
|
c23 lda #$0A
|
||||||
|
sta wsync ;line=194
|
||||||
|
sta color1
|
||||||
|
c24 lda #$34
|
||||||
|
sta wsync ;line=195
|
||||||
|
sta color2
|
||||||
|
c25 lda #$0C
|
||||||
|
sta wsync ;line=196
|
||||||
|
sta color1
|
||||||
|
c26 lda #$0A
|
||||||
|
sta wsync ;line=197
|
||||||
|
sta color1
|
||||||
|
c27 lda #$0C
|
||||||
|
sta wsync ;line=198
|
||||||
|
sta color1
|
||||||
|
sta wsync ;line=199
|
||||||
|
sta wsync ;line=200
|
||||||
|
c28 lda #$0E
|
||||||
|
sta wsync ;line=201
|
||||||
|
sta color1
|
||||||
|
c29 lda #$0C
|
||||||
|
sta wsync ;line=202
|
||||||
|
sta color1
|
||||||
|
c30 lda #$0E
|
||||||
|
sta wsync ;line=203
|
||||||
|
sta color1
|
||||||
|
c31 lda #$0C
|
||||||
|
sta wsync ;line=204
|
||||||
|
sta color1
|
||||||
|
c32 lda #$0E
|
||||||
|
sta wsync ;line=205
|
||||||
|
sta color1
|
||||||
|
DLINEW dli16 1 1 1
|
||||||
|
|
||||||
|
dli16
|
||||||
|
sta regA
|
||||||
|
|
||||||
|
sta wsync ;line=208
|
||||||
|
sta wsync ;line=209
|
||||||
|
c33 lda #$0C
|
||||||
|
sta wsync ;line=210
|
||||||
|
sta color1
|
||||||
|
c34 lda #$0E
|
||||||
|
sta wsync ;line=211
|
||||||
|
sta color1
|
||||||
|
c35 lda #$0C
|
||||||
|
sta wsync ;line=212
|
||||||
|
sta color1
|
||||||
|
DLINEW dli9 1 0 0
|
||||||
|
|
||||||
|
dli9
|
||||||
|
sta regA
|
||||||
|
stx regX
|
||||||
|
sty regY
|
||||||
|
lda >fnt+$400*$08
|
||||||
|
c36 ldx #$0A
|
||||||
|
sta wsync ;line=216
|
||||||
|
sta chbase
|
||||||
|
stx color1
|
||||||
|
c37 lda #$0C
|
||||||
|
sta wsync ;line=217
|
||||||
|
sta color1
|
||||||
|
c38 lda #$0A
|
||||||
|
x24 ldx #$9D
|
||||||
|
c39 ldy #$34
|
||||||
|
sta wsync ;line=218
|
||||||
|
sta color1
|
||||||
|
stx hposm1
|
||||||
|
sty colpm1
|
||||||
|
s14 lda #$03
|
||||||
|
x25 ldx #$7D
|
||||||
|
sta wsync ;line=219
|
||||||
|
sta sizep3
|
||||||
|
stx hposp3
|
||||||
|
c40 lda #$08
|
||||||
|
s15 ldx #$13
|
||||||
|
x26 ldy #$45
|
||||||
|
sta wsync ;line=220
|
||||||
|
sta color1
|
||||||
|
stx sizem
|
||||||
|
sty hposm2
|
||||||
|
s16 lda #$03
|
||||||
|
x27 ldx #$59
|
||||||
|
sta wsync ;line=221
|
||||||
|
sta sizep2
|
||||||
|
stx hposp2
|
||||||
|
s17 lda #$53
|
||||||
|
x28 ldx #$49
|
||||||
|
x29 ldy #$79
|
||||||
|
sta wsync ;line=222
|
||||||
|
sta sizem
|
||||||
|
stx hposp1
|
||||||
|
sty hposm3
|
||||||
|
c41 lda #$06
|
||||||
|
c42 ldx #$00
|
||||||
|
sta wsync ;line=223
|
||||||
|
sta color1
|
||||||
|
stx color2
|
||||||
|
lda >fnt+$400*$01
|
||||||
|
s18 ldx #$50
|
||||||
|
x30 ldy #$44
|
||||||
|
sta wsync ;line=224
|
||||||
|
sta chbase
|
||||||
|
stx sizem
|
||||||
|
sty hposm0
|
||||||
|
sta wsync ;line=225
|
||||||
|
c43 lda #$08
|
||||||
|
sta wsync ;line=226
|
||||||
|
sta color1
|
||||||
|
c44 lda #$0C
|
||||||
|
sta wsync ;line=227
|
||||||
|
sta color1
|
||||||
|
sta wsync ;line=228
|
||||||
|
sta wsync ;line=229
|
||||||
|
c45 lda #$0E
|
||||||
|
sta wsync ;line=230
|
||||||
|
sta color1
|
||||||
|
DLINEW dli10 1 1 1
|
||||||
|
|
||||||
|
dli10
|
||||||
|
sta regA
|
||||||
|
lda >fnt+$400*$00
|
||||||
|
sta wsync ;line=232
|
||||||
|
sta chbase
|
||||||
|
;DLINEW dli11 1 0 0
|
||||||
|
|
||||||
|
lda regA
|
||||||
|
rti
|
||||||
|
|
||||||
|
;dli11
|
||||||
|
; sta regA
|
||||||
|
;
|
||||||
|
; lda #>$a000 ; system font
|
||||||
|
; sta wsync ;line=232
|
||||||
|
; sta chbase
|
||||||
|
; lda #$01
|
||||||
|
; sta gtictl
|
||||||
|
;
|
||||||
|
; lda regA
|
||||||
|
; rti
|
||||||
|
|
||||||
|
|
||||||
|
.endl
|
||||||
|
|
||||||
|
; ---
|
||||||
|
|
||||||
|
CHANGES = 1
|
||||||
|
FADECHR = 0
|
||||||
|
|
||||||
|
SCHR = 127
|
||||||
|
|
||||||
|
dliv = $0200
|
||||||
|
|
||||||
|
; ---
|
||||||
|
|
||||||
|
.proc NMI
|
||||||
|
|
||||||
|
bit nmist
|
||||||
|
bpl VBL
|
||||||
|
|
||||||
|
jmp DLI.dli_start
|
||||||
|
|
||||||
|
|
||||||
|
VBL
|
||||||
|
sta regA
|
||||||
|
stx regX
|
||||||
|
sty regY
|
||||||
|
|
||||||
|
;sta nmist ;reset NMI flag
|
||||||
|
|
||||||
|
mwa #ant dlptr ;ANTIC address program
|
||||||
|
|
||||||
|
mva #@dmactl(standard|dma|lineX1|players|missiles) dmactl ;set new screen width
|
||||||
|
|
||||||
|
inc cloc ;little timer
|
||||||
|
|
||||||
|
; Initial values
|
||||||
|
|
||||||
|
lda >fnt+$400*$00
|
||||||
|
sta chbase
|
||||||
|
c0 lda #$00
|
||||||
|
sta colbak
|
||||||
|
c1 lda #$0E
|
||||||
|
sta color1
|
||||||
|
c2 lda #$84
|
||||||
|
sta color2
|
||||||
|
c3 lda #$0E
|
||||||
|
sta color3
|
||||||
|
lda #$02
|
||||||
|
sta chrctl
|
||||||
|
lda #$01
|
||||||
|
sta gtictl
|
||||||
|
sta sizep0
|
||||||
|
s0 lda #$03
|
||||||
|
sta sizem
|
||||||
|
x0 lda #$D0
|
||||||
|
sta hposp0
|
||||||
|
x1 lda #$28
|
||||||
|
sta hposm0
|
||||||
|
c4 lda #$00
|
||||||
|
sta colpm0
|
||||||
|
x2 lda #$A2
|
||||||
|
sta hposm3
|
||||||
|
c5 lda #$0E
|
||||||
|
sta colpm3
|
||||||
|
s1 lda #$00
|
||||||
|
sta sizep2
|
||||||
|
sta sizep3
|
||||||
|
x3 lda #$92
|
||||||
|
sta hposp2
|
||||||
|
x4 lda #$8A
|
||||||
|
sta hposp3
|
||||||
|
c6 lda #$14
|
||||||
|
sta colpm2
|
||||||
|
s2 lda #$00
|
||||||
|
sta sizep1
|
||||||
|
x5 lda #$9A
|
||||||
|
sta hposp1
|
||||||
|
c7 lda #$14
|
||||||
|
sta colpm1
|
||||||
|
x6 lda #$A4
|
||||||
|
sta hposm2
|
||||||
|
x7 lda #$A6
|
||||||
|
sta hposm1
|
||||||
|
c8 lda #$00
|
||||||
|
sta color0
|
||||||
|
|
||||||
|
mwa #DLI.dli_start dliv ;set the first address of DLI interrupt
|
||||||
|
|
||||||
|
;this area is for yours routines
|
||||||
|
jsr play_frame
|
||||||
|
|
||||||
|
quit
|
||||||
|
lda regA
|
||||||
|
ldx regX
|
||||||
|
ldy regY
|
||||||
|
jmp sysvbv
|
||||||
|
|
||||||
|
.endp
|
||||||
|
|
||||||
|
; ---
|
||||||
|
ini main
|
||||||
|
; ---
|
||||||
|
|
||||||
|
opt l-
|
||||||
|
|
||||||
|
.MACRO SPRITES
|
||||||
|
missiles
|
||||||
|
.he 00 00 00 00 00 00 00 00 03 03 C3 03 03 03 03 03
|
||||||
|
.he 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03
|
||||||
|
.he 03 03 03 03 03 03 03 03 03 83 83 83 C3 C3 C3 C3
|
||||||
|
.he C3 C3 C3 C3 C3 E3 E3 E3 E3 E3 E3 F3 F3 F3 F3 FB
|
||||||
|
.he FB FB FB FB FF FF FF FF F3 33 83 83 83 83 C3 D3
|
||||||
|
.he D3 D3 13 03 03 03 03 03 03 03 03 03 03 03 03 03
|
||||||
|
.he 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03
|
||||||
|
.he 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 0F
|
||||||
|
.he 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 03 03 03 03 C3 C3
|
||||||
|
.he C3 C3 C3 C3 C3 C3 C3 C3 C3 D3 FF FF 3F 3F 3F 3F
|
||||||
|
.he 3F 3F 33 13 03 03 03 03 03 03 03 03 03 03 03 03
|
||||||
|
.he 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03
|
||||||
|
.he 03 03 03 03 03 03 03 43 43 C3 C3 C3 C3 03 03 03
|
||||||
|
.he 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03
|
||||||
|
.he 03 03 0F 0F 3F 3F FF FC FE FE FF DB 03 03 03 03
|
||||||
|
.he 03 03 03 03 03 03 03 03 00 00 00 00 00 00 00 00
|
||||||
|
player0
|
||||||
|
.he 00 00 00 00 00 00 00 00 FF FF FF FF FF FF FF FF
|
||||||
|
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||||
|
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||||
|
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||||
|
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||||
|
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||||
|
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||||
|
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||||
|
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||||
|
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||||
|
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||||
|
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||||
|
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||||
|
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||||
|
.he FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
|
||||||
|
.he FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00 00
|
||||||
|
player1
|
||||||
|
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||||
|
.he 00 00 00 00 00 00 00 00 F0 FC FE FE FF FF FF FF
|
||||||
|
.he FF 0F 0F 0F 0F 0F 0F 0F 0F 0F 07 07 07 07 07 07
|
||||||
|
.he 03 03 03 FF FF FF FF FF CF CF FF FF FF FF FF 9F
|
||||||
|
.he 9F FF FF FF FF FF FF FF 00 00 00 00 00 00 00 00
|
||||||
|
.he 00 F0 F0 F0 F0 78 F8 78 78 78 78 38 78 38 3C 3C
|
||||||
|
.he 3C 3C 1C 3C 1C 1C 1C 1C 1E 1E 1E 1E 0E 1E 0E 0E
|
||||||
|
.he 0E 0F 07 0F 07 0F 07 07 07 07 07 07 06 06 06 06
|
||||||
|
.he FF FF FF FF FF FF FF FF FF FF FF 00 00 3E 3F 7F
|
||||||
|
.he 7F 7F 7F 7F 7F 7F 7F 3F 3F 3F 00 00 00 00 00 00
|
||||||
|
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||||
|
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||||
|
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||||
|
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||||
|
.he 00 00 00 00 00 00 FF FF FF FF FF FF 00 00 00 00
|
||||||
|
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||||
|
player2
|
||||||
|
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||||
|
.he 00 00 00 00 00 00 00 00 FF FF FF FF FF FF FF FF
|
||||||
|
.he FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||||
|
.he 00 00 00 FF FF FF FF FF 99 99 FF FF FF FF FF 33
|
||||||
|
.he 33 FF FF FF FF FF FF FF 00 00 00 00 00 00 00 00
|
||||||
|
.he 00 00 80 F0 F8 F8 F8 FC FC FC FC FC FC FC FC FC
|
||||||
|
.he FC FE FE FE FE FE FE FF FF FF FF FF FF FF FE FC
|
||||||
|
.he F8 F8 F8 F8 F0 F0 F0 F0 F0 F0 F0 F0 E0 E0 E0 E0
|
||||||
|
.he E0 E0 E0 FC FE FE FF FF 8F 87 87 87 07 07 07 07
|
||||||
|
.he 07 07 07 07 07 07 07 03 00 00 00 00 00 00 00 00
|
||||||
|
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||||
|
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||||
|
.he 00 00 00 00 00 00 F8 FC FC FE FE FF FF 00 00 00
|
||||||
|
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||||
|
.he 00 00 00 00 00 00 FF FF FF FF FF FF 00 00 00 00
|
||||||
|
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||||
|
player3
|
||||||
|
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||||
|
.he 00 00 00 00 00 00 00 00 01 07 0F 1F 1F 3F 3F 7F
|
||||||
|
.he 7F 78 78 F0 F0 F0 F0 F8 F8 F8 78 7C 7C 7C 3C 3E
|
||||||
|
.he 3E 3E 1E 1F 1F 1F 0F 0F 0F 0F 0F 1F 1F 1F 1F 1F
|
||||||
|
.he 1F 3F 3F 3F 3F 3F 3F 3F FF 7F 7F 3F 3F 1F 1F 0F
|
||||||
|
.he 1F 1F 1F 3F 3F 3F 3F 3F 3F 3B 30 30 30 30 30 30
|
||||||
|
.he 30 30 30 30 38 3E 7F 7F 7F 7F 7F 7F 7F 7F 7F 7F
|
||||||
|
.he 7F 7F 7F 7F 7F 7F 7F FF FF FF FF FF FF FF FF FF
|
||||||
|
.he FF FF FF FF FF FF FF FF 7F 7F 7F 7F 7F 7F FF FF
|
||||||
|
.he FF FF FF FF FE FE FE FE FE FE FE FE FC 1C FF 7E
|
||||||
|
.he 7E FE FE FE FE FF FF FF 7F 7E 7E 3C 00 00 00 00
|
||||||
|
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||||
|
.he 00 00 00 00 00 7C FE FE FF FF FF 00 00 00 00 00
|
||||||
|
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||||
|
.he 00 00 00 FF FF FF FF FF FF FF FF FF 00 00 00 00
|
||||||
|
.he 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
||||||
|
.ENDM
|
||||||
|
|
||||||
|
USESPRITES = 1
|
||||||
|
|
||||||
|
.MACRO DLINEW
|
||||||
|
mva <:1 dliv
|
||||||
|
ift [>?old_dli]<>[>:1]
|
||||||
|
mva >:1 dliv+1
|
||||||
|
eif
|
||||||
|
|
||||||
|
ift :2
|
||||||
|
lda regA
|
||||||
|
eif
|
||||||
|
|
||||||
|
ift :3
|
||||||
|
ldx regX
|
||||||
|
eif
|
||||||
|
|
||||||
|
ift :4
|
||||||
|
ldy regY
|
||||||
|
eif
|
||||||
|
|
||||||
|
rti
|
||||||
|
|
||||||
|
.def ?old_dli = *
|
||||||
|
.ENDM
|
||||||
|
|
||||||
Binary file not shown.
Binary file not shown.
@@ -1,54 +0,0 @@
|
|||||||
IN TIMES OF TROUBLE, GO WITH WHAT YOU KNOW.
|
|
||||||
DIE!
|
|
||||||
EAT MY SHORTS!
|
|
||||||
YOU'RE TOAST!
|
|
||||||
BANZAI!
|
|
||||||
FROM HELL'S HEART I STAB AT THEE...
|
|
||||||
I DIDN'T DO IT. NOBODY SAW ME DO IT.
|
|
||||||
TAKE A HIKE!
|
|
||||||
YOU'RE DEAD MEAT.
|
|
||||||
MAKE MY DAY.
|
|
||||||
CHARGE!
|
|
||||||
ATTACK!
|
|
||||||
YOU'RE OUTTA HERE.
|
|
||||||
WATTSA MATTA YOU?
|
|
||||||
FREEZE, OR I'LL SHOOT!
|
|
||||||
HA HA HA.
|
|
||||||
WE COME IN PEACE - SHOOT TO KILL!
|
|
||||||
IN YOUR FACE!
|
|
||||||
DIE COMMIE PIG!
|
|
||||||
I LOVE THE SMELL OF NAPALM IN THE MORNING.
|
|
||||||
VICTORY!
|
|
||||||
SHOW SOME RESPECT.
|
|
||||||
JUST WHO DO YOU THINK YOU ARE?
|
|
||||||
LOOK OUT BELOW!
|
|
||||||
KNOCK, KNOCK.
|
|
||||||
LOOK OVER THERE.
|
|
||||||
GUESS WHAT'S COMING FOR DINNER?
|
|
||||||
MERRY CHRISTMAS.
|
|
||||||
OPEN WIDE!
|
|
||||||
HERE GOES NOTHING...
|
|
||||||
DON'T WORRY, IT ISN'T A LIVE ROUND.
|
|
||||||
BLOOD, PAIN, VIOLENCE!
|
|
||||||
TAKE THIS, SISSY!
|
|
||||||
I SHALL FLATTEN YOU!
|
|
||||||
I SHALL SMASH YOUR UGLY TANK!
|
|
||||||
I WONDER WHAT THIS BUTTON DOES?
|
|
||||||
DON'T TAKE THIS PERSONALLY.
|
|
||||||
WOULD THIS MAKE YOU MAD?
|
|
||||||
I TOLD YOU TO LEAVE MY SISTER ALONE!
|
|
||||||
I COULD SPARE YOU, BUT WHY?
|
|
||||||
MY BOMB IS BIGGER THAN YOURS.
|
|
||||||
DON'T FORGET ABOUT ME!
|
|
||||||
HASTA LA VISTA, BABY!
|
|
||||||
THIS IS YOUR BRAIN ON SCORCH.
|
|
||||||
TAKE THIS!
|
|
||||||
THIS SCREEN AIN'T BIG ENOUGH FOR THE BOTH OF US.
|
|
||||||
DIE, ALIEN SWINE!
|
|
||||||
SAY 'ARRGGHHHHH....'
|
|
||||||
I SHALL OIL MY TURRET WITH YOUR BLOOD.
|
|
||||||
DIE, TANK-SCUM!
|
|
||||||
I'M GONNA BREAK YOUR FACE!
|
|
||||||
MAMA SAID KNOCK YOU OUT!
|
|
||||||
I HOPE YOU ENJOY PAIN!
|
|
||||||
PARTING IS SUCH SWEET SORROW... NOT!
|
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
UGH!
|
|
||||||
AARGH!
|
|
||||||
AAAGGHHH!
|
|
||||||
I'M MELTING!
|
|
||||||
OOF..
|
|
||||||
OH!
|
|
||||||
EEEK!
|
|
||||||
AACCH!
|
|
||||||
I HATE IT WHEN THAT HAPPENS.
|
|
||||||
ONE DIRECT HIT CAN RUIN YOUR WHOLE DAY.
|
|
||||||
OH NO!
|
|
||||||
NOT ME!
|
|
||||||
OUCH.
|
|
||||||
OH NO, NOT AGAIN.
|
|
||||||
ANOTHER ONE BITES THE DUST.
|
|
||||||
GOODBYE.
|
|
||||||
HELP ME!
|
|
||||||
FAREWELL, CRUEL WORLD.
|
|
||||||
REMEMBER THE ALAMO!
|
|
||||||
OH MAN!
|
|
||||||
DOOUGH!
|
|
||||||
ANOTHER DAY, ANOTHER BOMB.
|
|
||||||
THIS IS THE END, MY ONLY FRIEND.
|
|
||||||
IT'S ALL OVER.
|
|
||||||
THE FAT LADY SANG.
|
|
||||||
WHY DOES EVERYTHING HAPPEN TO ME?
|
|
||||||
I'M GOING DOWN.
|
|
||||||
I'VE GOT A BAD FEELING ABOUT THIS.
|
|
||||||
CRAPOLA.
|
|
||||||
POW!
|
|
||||||
BIF!
|
|
||||||
BAM!
|
|
||||||
ZONK!
|
|
||||||
I SHOULD'VE LISTENED TO MY MOTHER...
|
|
||||||
NO... A BUD LIGHT!
|
|
||||||
WHAT WAS THAT NOISE?
|
|
||||||
MAMA SAID THERE'D BE DAYS LIKE THIS.
|
|
||||||
ITS JUST ONE OF THOSE DAYS...
|
|
||||||
I SEE A BRIGHT LIGHT...
|
|
||||||
MOMMY? IS THAT YOU?
|
|
||||||
I LET YOU HIT ME!
|
|
||||||
SUCKER SHOT!
|
|
||||||
I DIDN'T WANT TO LIVE ANYWAY.
|
|
||||||
-<SOB>-
|
|
||||||
WAS THAT AS CLOSE AS I THINK IT WAS?
|
|
||||||
JOIN THE ARMY, SEE THE WORLD THEY SAID.
|
|
||||||
IT WASN'T JUST A JOB IT WAS AN ADVENTURE!
|
|
||||||
I DIDN'T LIKE VIOLENCE ANYWAY!
|
|
||||||
I THOUGHT YOU LIKED ME?
|
|
||||||
SUCH SENSELESS VIOLENCE! I DON'T UNDERSTAND IT.
|
|
||||||
I THINK THIS GUY'S A LITTLE CRAZY.
|
|
||||||
SOMEHOW I DON'T FEEL LIKE KILLING ANYMORE.
|
|
||||||
HEY! KILLIN' AIN'T COOL.
|
|
||||||
GEE... THANKS.
|
|
||||||
I'VE FALLEN AND I CAN'T GET UP!
|
|
||||||
911?
|
|
||||||
OH NO! HERE I BLOW AGAIN!
|
|
||||||
I'LL BE BACK...
|
|
||||||
HEY - I'VE GOT LAWYERS.
|
|
||||||
TIME TO CALL 1-900-SUE-TANK.
|
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
STEREOMODE equ 0
|
||||||
|
;* --------BEGIN--------
|
||||||
|
;* C:\Atari\rmt\rmt128\schorch_str.rmt
|
||||||
|
FEAT_SFX equ 1
|
||||||
|
FEAT_GLOBALVOLUMEFADE equ 0 ;RMTGLOBALVOLUMEFADE variable
|
||||||
|
FEAT_NOSTARTINGSONGLINE equ 0
|
||||||
|
FEAT_INSTRSPEED equ 1
|
||||||
|
FEAT_CONSTANTSPEED equ 0 ;(19 times)
|
||||||
|
FEAT_COMMAND1 equ 1 ;(18 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 ;(44 times)
|
||||||
|
FEAT_FILTERG0L equ 1 ;(13 times)
|
||||||
|
FEAT_FILTERG1L equ 1 ;(22 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 ;(1 times)
|
||||||
|
FEAT_AUDCTLMANUALSET equ 1 ;(6 times)
|
||||||
|
FEAT_VOLUMEMIN equ 0 ;(0 times)
|
||||||
|
FEAT_EFFECTVIBRATO equ 1 ;(3 times)
|
||||||
|
FEAT_EFFECTFSHIFT equ 1 ;(11 times)
|
||||||
|
;* --------END--------
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
STEREOMODE equ 0
|
||||||
|
;* --------BEGIN--------
|
||||||
|
;* C:\Atari\rmt\rmt128\schorch_str2.rmt
|
||||||
|
FEAT_SFX equ 1
|
||||||
|
FEAT_GLOBALVOLUMEFADE equ 0 ;RMTGLOBALVOLUMEFADE variable
|
||||||
|
FEAT_NOSTARTINGSONGLINE equ 0
|
||||||
|
FEAT_INSTRSPEED equ 1
|
||||||
|
FEAT_CONSTANTSPEED equ 0 ;(19 times)
|
||||||
|
FEAT_COMMAND1 equ 1 ;(18 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 ;(44 times)
|
||||||
|
FEAT_FILTERG0L equ 1 ;(13 times)
|
||||||
|
FEAT_FILTERG1L equ 1 ;(22 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 ;(3 times)
|
||||||
|
FEAT_EFFECTFSHIFT equ 1 ;(11 times)
|
||||||
|
;* --------END--------
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
;* --------BEGIN--------
|
|
||||||
;* Z:\home\pkalinowski\Seafile\atari\projects\scorch_src\artwork\sfx\scorch_trial07_stripped.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 ;(4 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 ;(1 times)
|
|
||||||
FEAT_AUDCTLMANUALSET equ 1 ;(4 times)
|
|
||||||
FEAT_VOLUMEMIN equ 0 ;(0 times)
|
|
||||||
FEAT_EFFECTVIBRATO equ 0 ;(0 times)
|
|
||||||
FEAT_EFFECTFSHIFT equ 1 ;(7 times)
|
|
||||||
;* --------END--------
|
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
.echo *
|
|
||||||
;*
|
;*
|
||||||
;* Raster Music Tracker, RMT Atari routine version 1.20090108
|
;* Raster Music Tracker, RMT Atari routine version 1.20090108
|
||||||
;* (c) Radek Sterba, Raster/C.P.U., 2002 - 2009
|
;* (c) Radek Sterba, Raster/C.P.U., 2002 - 2009
|
||||||
@@ -17,18 +16,40 @@
|
|||||||
;*
|
;*
|
||||||
;* 3. Because of RMTplayer provides a lot of effects, it spent a lot of CPU time.
|
;* 3. Because of RMTplayer provides a lot of effects, it spent a lot of CPU time.
|
||||||
;*
|
;*
|
||||||
STEREOMODE equ 0 ;0 => compile RMTplayer for 4 tracks mono
|
;* STEREOMODE equ 0..3 ;0 => compile RMTplayer for 4 tracks mono
|
||||||
;* ;1 => compile RMTplayer for 8 tracks stereo
|
;* ;1 => compile RMTplayer for 8 tracks stereo
|
||||||
;* ;2 => compile RMTplayer for 4 tracks stereo L1 R2 R3 L4
|
;* ;2 => compile RMTplayer for 4 tracks stereo L1 R2 R3 L4
|
||||||
;* ;3 => compile RMTplayer for 4 tracks stereo L1 L2 R3 R4
|
;* ;3 => compile RMTplayer for 4 tracks stereo L1 L2 R3 R4
|
||||||
;*
|
;*
|
||||||
; IFT STEREOMODE==1
|
IFT STEREOMODE==1
|
||||||
;TRACKS equ 8
|
TRACKS equ 8
|
||||||
; ELS
|
ELS
|
||||||
TRACKS equ 4
|
TRACKS equ 4
|
||||||
; EIF
|
EIF
|
||||||
;*
|
;*
|
||||||
PLAYER = *
|
;*PLAYER equ $3400
|
||||||
|
;*
|
||||||
|
;* RMT FEATures definitions file
|
||||||
|
;* For optimizations of RMT player routine to concrete RMT modul only!
|
||||||
|
icl "feat.txt"
|
||||||
|
;*
|
||||||
|
;* RMT ZeroPage addresses
|
||||||
|
org RMT_Zero_Page_V
|
||||||
|
p_tis
|
||||||
|
p_instrstable org *+2
|
||||||
|
p_trackslbstable org *+2
|
||||||
|
p_trackshbstable org *+2
|
||||||
|
p_song org *+2
|
||||||
|
ns org *+2
|
||||||
|
nr org *+2
|
||||||
|
nt org *+2
|
||||||
|
reg1 org *+1
|
||||||
|
reg2 org *+1
|
||||||
|
reg3 org *+1
|
||||||
|
tmp org *+1
|
||||||
|
IFT FEAT_COMMAND2
|
||||||
|
frqaddcmd2 org *+1
|
||||||
|
EIF
|
||||||
IFT TRACKS>4
|
IFT TRACKS>4
|
||||||
org PLAYER-$400+$40
|
org PLAYER-$400+$40
|
||||||
ELS
|
ELS
|
||||||
@@ -745,8 +766,9 @@ ei4
|
|||||||
IFT 1==[FEAT_COMMAND1+FEAT_COMMAND2+FEAT_COMMAND3+FEAT_COMMAND4+FEAT_COMMAND5+FEAT_COMMAND6+[FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY]]
|
IFT 1==[FEAT_COMMAND1+FEAT_COMMAND2+FEAT_COMMAND3+FEAT_COMMAND4+FEAT_COMMAND5+FEAT_COMMAND6+[FEAT_COMMAND7SETNOTE||FEAT_COMMAND7VOLUMEONLY]]
|
||||||
beq cmd0
|
beq cmd0
|
||||||
ELS
|
ELS
|
||||||
lsr @
|
; lsr @
|
||||||
lsr @
|
; lsr @
|
||||||
|
lda #0 ; my fix :)
|
||||||
sta jmx+1
|
sta jmx+1
|
||||||
jmx bcc *
|
jmx bcc *
|
||||||
jmp cmd0
|
jmp cmd0
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+124
-165
@@ -2,11 +2,29 @@
|
|||||||
|
|
||||||
.IF *>0 ;this is a trick that prevents compiling this file alone
|
.IF *>0 ;this is a trick that prevents compiling this file alone
|
||||||
|
|
||||||
|
; initial values for some variables
|
||||||
|
initialvaluesStart
|
||||||
|
I_OptionsTable .by 0,1,2,2,0,1,3,2
|
||||||
|
I_RoundsInTheGame .by 10 ;how many rounds in the current game
|
||||||
|
I_seppukuVal .by 75
|
||||||
|
I_mountainDeltaH .by 3
|
||||||
|
I_mountainDeltaL .by $ff
|
||||||
|
;----------------------------------------------------
|
||||||
|
; 4x4 text buffer
|
||||||
|
I_ResultLineBuffer
|
||||||
|
dta d" ", $ff
|
||||||
|
I_LineHeader1
|
||||||
|
dta d"# ROUND: "
|
||||||
|
I_RoundNrDisplay
|
||||||
|
dta d" #", $ff
|
||||||
|
initialvaluesCount = *-initialvaluesstart ; MAX 128 bytes !
|
||||||
;===================================================================================
|
;===================================================================================
|
||||||
;==========================CONSTANT TABLES, do not erase!===========================
|
;==========================CONSTANT TABLES, do not erase!===========================
|
||||||
;===================================================================================
|
;===================================================================================
|
||||||
TankColoursTable .BYTE $86,$46,$c6,$28,$c6,$ee
|
TankColoursTable .BYTE $58,$2a,$96,$ca,$7a,$de
|
||||||
TankStatusColoursTable .BYTE $80,$40,$c4,$20,$c0,$e4
|
TankStatusColoursTable .BYTE $54,$24,$94,$c4,$74,$d4
|
||||||
|
TankShapesTable .BYTE char_tank1___________,char_tank2___________,char_tank3___________
|
||||||
|
.BYTE char_tank1___________,char_tank2___________,char_tank3___________
|
||||||
dliColorsBack
|
dliColorsBack
|
||||||
:10 .by $02,$00
|
:10 .by $02,$00
|
||||||
dliColorsFore
|
dliColorsFore
|
||||||
@@ -18,6 +36,7 @@ CashOptionH
|
|||||||
GravityTable .by 10,20,25,30,40
|
GravityTable .by 10,20,25,30,40
|
||||||
MaxWindTable .by 5,20,40,70,99
|
MaxWindTable .by 5,20,40,70,99
|
||||||
RoundsTable .by 10,20,30,40,50
|
RoundsTable .by 10,20,30,40,50
|
||||||
|
AIForceTable .wo 375,470,630,720,820 ; starting shoot forces for different gravity
|
||||||
flyDelayTable .by 255,150,75,35,1
|
flyDelayTable .by 255,150,75,35,1
|
||||||
seppukuTable .by 255, 45,25,15,9
|
seppukuTable .by 255, 45,25,15,9
|
||||||
mountainsDeltaTableH .by 0,1,3,5,7
|
mountainsDeltaTableH .by 0,1,3,5,7
|
||||||
@@ -36,7 +55,11 @@ TanksWeaponsTableL
|
|||||||
.by <TanksWeapon1,<TanksWeapon2,<TanksWeapon3,<TanksWeapon4,<TanksWeapon5,<TanksWeapon6
|
.by <TanksWeapon1,<TanksWeapon2,<TanksWeapon3,<TanksWeapon4,<TanksWeapon5,<TanksWeapon6
|
||||||
TanksWeaponsTableH
|
TanksWeaponsTableH
|
||||||
.by >TanksWeapon1,>TanksWeapon2,>TanksWeapon3,>TanksWeapon4,>TanksWeapon5,>TanksWeapon6
|
.by >TanksWeapon1,>TanksWeapon2,>TanksWeapon3,>TanksWeapon4,>TanksWeapon5,>TanksWeapon6
|
||||||
|
;--------------
|
||||||
|
XtankOffsetGO_L
|
||||||
|
.by 6,56,106,156,206,0
|
||||||
|
XtankOffsetGO_H
|
||||||
|
.by 0,0,0,0,0,1
|
||||||
;-----4x4 texts-----
|
;-----4x4 texts-----
|
||||||
LineTop
|
LineTop
|
||||||
dta d"(%%%%%%%%%%%%)", $ff
|
dta d"(%%%%%%%%%%%%)", $ff
|
||||||
@@ -197,90 +220,6 @@ SlideLeftTable
|
|||||||
.BY %00000111
|
.BY %00000111
|
||||||
.BY %00001100
|
.BY %00001100
|
||||||
|
|
||||||
;-----------------------------------------------------------
|
|
||||||
; this table changes Angle to the appropriate tank character
|
|
||||||
BarrelTable
|
|
||||||
|
|
||||||
.by $2C,$2C,$2C,$2C,$2C,$2C,$2C,$2C,$2A,$2A,
|
|
||||||
.by $2A,$2A,$2A,$2A,$2A,$2A,$28,$28,$28,$28,
|
|
||||||
.by $28,$28,$28,$28,$28,$26,$26,$26,$26,$26,
|
|
||||||
.by $26,$26,$26,$24,$24,$24,$24,$24,$24,$24,
|
|
||||||
.by $24,$22,$22,$22,$22,$22,$22,$22,$22,$22,
|
|
||||||
.by $20,$20,$20,$20,$20,$20,$20,$20,$1E,$1E,
|
|
||||||
.by $1E,$1E,$1E,$1E,$1E,$1E,$1C,$1C,$1C,$1C,
|
|
||||||
.by $1C,$1C,$1C,$1C,$1C,$1A,$1A,$1A,$1A,$1A,
|
|
||||||
.by $1A,$1A,$1A,$18,$18,$18,$18,$18,$18,$18,
|
|
||||||
;.by $18,
|
|
||||||
|
|
||||||
.by $16,$16,$16,$16,$16,$16,$16,$16,$14,$14,
|
|
||||||
.by $14,$14,$14,$14,$14,$14,$12,$12,$12,$12,
|
|
||||||
.by $12,$12,$12,$12,$12,$10,$10,$10,$10,$10,
|
|
||||||
.by $10,$10,$10,$0E,$0E,$0E,$0E,$0E,$0E,$0E,
|
|
||||||
.by $0E,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,
|
|
||||||
.by $0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$08,$08,
|
|
||||||
.by $08,$08,$08,$08,$08,$08,$06,$06,$06,$06,
|
|
||||||
.by $06,$06,$06,$06,$06,$04,$04,$04,$04,$04,
|
|
||||||
.by $04,$04,$04,$02,$02,$02,$02,$02,$02,$02,
|
|
||||||
.by $02,
|
|
||||||
|
|
||||||
EndOfTheBarrelX
|
|
||||||
; right angles from 0 (horizontally right) to 90 (up)
|
|
||||||
|
|
||||||
.by 7,7,7,7,7,7,7,7,7,7,
|
|
||||||
.by 7,7,7,7,7,7,7,7,7,7,
|
|
||||||
.by 7,7,7,7,7,7,7,7,7,7,
|
|
||||||
.by 7,7,7,7,7,7,7,7,7,7,
|
|
||||||
.by 7,7,7,7,7,7,7,7,7,7,
|
|
||||||
.by 7,7,7,7,7,7,7,7,7,7,
|
|
||||||
.by 7,6,6,6,6,6,6,6,6,6,
|
|
||||||
.by 5,5,5,5,5,5,5,5,5,5,
|
|
||||||
.by 4,4,4,4,4,4,4,4,4,4,
|
|
||||||
;.by 4,
|
|
||||||
|
|
||||||
; left angles from 90 (vertical) to 180 (horizontally left)
|
|
||||||
.by 3,3,3,3,3,3,3,3,3,3,
|
|
||||||
.by 3,2,2,2,2,2,2,2,2,2,
|
|
||||||
.by 2,1,1,1,1,1,1,1,1,1,
|
|
||||||
.by 0,0,0,0,0,0,0,0,0,0,
|
|
||||||
.by 0,0,0,0,0,0,0,0,0,0,
|
|
||||||
.by 0,0,0,0,0,0,0,0,0,0,
|
|
||||||
.by 0,0,0,0,0,0,0,0,0,0,
|
|
||||||
.by 0,0,0,0,0,0,0,0,0,0,
|
|
||||||
.by 0,0,0,0,0,0,0,0,0,0,
|
|
||||||
.by 0
|
|
||||||
|
|
||||||
EndOfTheBarrelY
|
|
||||||
; right angles from 0 (horizontally right) to 90 (up)
|
|
||||||
|
|
||||||
; one pixel Up for fix problems with colision check
|
|
||||||
;.by 3,3,3,3,3,3,3,3,3,3,3,3,3,3
|
|
||||||
.by 4,4,4,4,4,4,4,4,4,4,
|
|
||||||
.by 4,4,4,4,4,4,4,4,4,4,
|
|
||||||
.by 4,4,4,4,4,4,4,5,5,5,
|
|
||||||
.by 5,5,5,5,5,5,5,6,6,6,
|
|
||||||
.by 6,6,6,6,6,6,7,7,7,7,
|
|
||||||
.by 7,7,7,7,7,7,7,7,7,7,
|
|
||||||
.by 7,7,7,7,7,7,7,7,7,7,
|
|
||||||
.by 7,7,7,7,7,7,7,7,7,7,
|
|
||||||
.by 7,7,7,7,7,7,7,7,7,7,
|
|
||||||
;.by 7,
|
|
||||||
|
|
||||||
; left angles from 90 (vertical) to 180 (horizontally left)
|
|
||||||
|
|
||||||
.by 7,7,7,7,7,7,7,7,7,7,
|
|
||||||
.by 7,7,7,7,7,7,7,7,7,7,
|
|
||||||
.by 7,7,7,7,7,7,7,7,7,7,
|
|
||||||
.by 7,7,7,7,7,7,7,7,7,7,
|
|
||||||
.by 7,7,7,7,7,6,6,6,6,6,
|
|
||||||
.by 6,6,6,6,5,5,5,5,5,5,
|
|
||||||
.by 5,5,5,5,4,4,4,4,4,4,
|
|
||||||
.by 4,4,4,4,4,4,4,4,4,4,
|
|
||||||
.by 4,4,4,4,4,4,4,4,4,4,
|
|
||||||
.by 4,
|
|
||||||
; one pixel Up for fix problems with colision check
|
|
||||||
;.by 3,3,3,3,3,3,3,3,3,3,3,3,3,3
|
|
||||||
|
|
||||||
|
|
||||||
;-------------------------------------------------
|
;-------------------------------------------------
|
||||||
TanksNamesDefault
|
TanksNamesDefault
|
||||||
dta d"1st.Tank"
|
dta d"1st.Tank"
|
||||||
@@ -352,8 +291,8 @@ WeaponPriceH ; weapons prices (tables with prices of weapons)
|
|||||||
.by >price_Heavy_Shield___
|
.by >price_Heavy_Shield___
|
||||||
.by >price_Force_Shield___
|
.by >price_Force_Shield___
|
||||||
.by >price_Super_Mag______
|
.by >price_Super_Mag______
|
||||||
.by >price_Auto_Defense___
|
.by >price_Bouncy_Castle__
|
||||||
.by >price_Fuel_Tank______
|
.by >price_Long_Barrel____
|
||||||
.by >price_Nuclear_Winter_
|
.by >price_Nuclear_Winter_
|
||||||
|
|
||||||
WeaponPriceL
|
WeaponPriceL
|
||||||
@@ -418,8 +357,8 @@ WeaponPriceL
|
|||||||
.by <price_Heavy_Shield___
|
.by <price_Heavy_Shield___
|
||||||
.by <price_Force_Shield___
|
.by <price_Force_Shield___
|
||||||
.by <price_Super_Mag______
|
.by <price_Super_Mag______
|
||||||
.by <price_Auto_Defense___
|
.by <price_Bouncy_Castle__
|
||||||
.by <price_Fuel_Tank______
|
.by <price_Long_Barrel____
|
||||||
.by <price_Nuclear_Winter_
|
.by <price_Nuclear_Winter_
|
||||||
|
|
||||||
;-------------------------------------------------
|
;-------------------------------------------------
|
||||||
@@ -491,76 +430,56 @@ WeaponUnits
|
|||||||
.by 3 ;Force_Shield___
|
.by 3 ;Force_Shield___
|
||||||
.by 2 ;Super_Mag______
|
.by 2 ;Super_Mag______
|
||||||
.by 1 ;Auto_Defense___
|
.by 1 ;Auto_Defense___
|
||||||
.by 10 ;Fuel_Tank______
|
.by 2 ;Long_Barrel____
|
||||||
.by 1 ;Nuclear_Winter_
|
.by 1 ;Nuclear_Winter_
|
||||||
|
|
||||||
PurchaseMeTable ;weapons good to be purchased by the robot
|
PurchaseMeTable ;weapons good to be purchased by the robot
|
||||||
;the comment is an index in the tables
|
;the comment is an index in the tables
|
||||||
dta 1 ;"Baby Missile " ; 0
|
; "Baby Missile ","Missile ","Baby Nuke ","Nuke "
|
||||||
dta 1 ;"Missile " ; 1
|
; "LeapFrog ","Funky Bomb ","MIRV ","Death's Head "
|
||||||
dta 1 ;"Baby Nuke " ; 2
|
.by %01111111
|
||||||
dta 1 ;"Nuke " ; 3
|
; "Napalm ","Hot Napalm ","Tracer ","Smoke Tracer "
|
||||||
dta 1 ;"LeapFrog " ; 4
|
; "Baby Roller ","Roller ","Heavy Roller ","Riot Charge "
|
||||||
dta 1 ;"Funky Bomb " ; 5
|
.by %11001110
|
||||||
dta 1 ;"MIRV " ; 6
|
; "Riot Blast ","Riot Bomb ","Heavy Riot Bomb ","Baby Digger "
|
||||||
dta 1 ;"Death's Head " ; 7
|
; "Digger ","Heavy Digger ","Baby Sandhog ","Sandhog "
|
||||||
dta 1 ;"Napalm " ; 8
|
.by %00000000
|
||||||
dta 1 ;"Hot Napalm " ; 9
|
; "Heavy Sandhog ","Dirt Clod ","Dirt Ball ","Ton of Dirt "
|
||||||
dta 0 ;"Tracer " ; 10
|
; "Liquid Dirt ","Dirt Charge ","Earth Disrupter ","Plasma Blast "
|
||||||
dta 0 ;"Smoke Tracer " ; 11
|
.by %00000000
|
||||||
dta 1 ;"Baby Roller " ; 12
|
; "Laser "
|
||||||
dta 1 ;"Roller " ; 13
|
.by %00000000
|
||||||
dta 1 ;"Heavy Roller " ; 14
|
.by 0 ; offset to defensives
|
||||||
dta 0 ;"Riot Charge " ; 15
|
; "White Flag ","Battery ","Bal Guidance ","Horz Guidance "
|
||||||
dta 0 ;"Riot Blast " ; 16
|
; "Vert Guidance ","Lazy Boy ","Parachute ","Strong Parachute"
|
||||||
dta 0 ;"Riot Bomb " ; 17
|
.by %01000011
|
||||||
dta 0 ;"Heavy Riot Bomb " ; 18
|
; "Mag Deflector ","Shield ","Heavy Shield ","Force Shield "
|
||||||
dta 0 ;"Baby Digger " ; 19
|
; "Super Mag ","Bouncy Castle ","Long Barrel ","Nuclear Winter "
|
||||||
dta 0 ;"Digger " ; 20
|
.by %11110100
|
||||||
dta 0 ;"Heavy Digger " ; 21
|
|
||||||
dta 0 ;"Baby Sandhog " ; 22
|
|
||||||
dta 0 ;"Sandhog " ; 23
|
|
||||||
dta 0 ;"Heavy Sandhog " ; 24
|
|
||||||
dta 0 ;"Dirt Clod " ; 25
|
|
||||||
dta 0 ;"Dirt Ball " ; 26
|
|
||||||
dta 0 ;"Ton of Dirt " ; 27
|
|
||||||
dta 0 ;"Liquid Dirt " ; 28
|
|
||||||
dta 0 ;"Dirt Charge " ; 29
|
|
||||||
dta 0 ;"Earth Disrupter " ; 30
|
|
||||||
dta 0 ;"Plasma Blast " ; 31
|
|
||||||
dta 1 ;"Laser " ; 32
|
|
||||||
dta 0 ;"----------------" ; 33
|
|
||||||
dta 0 ;"----------------" ; 34
|
|
||||||
dta 0 ;"----------------" ; 35
|
|
||||||
dta 0 ;"----------------" ; 36
|
|
||||||
dta 0 ;"----------------" ; 37
|
|
||||||
dta 0 ;"----------------" ; 38
|
|
||||||
dta 0 ;"----------------" ; 39
|
|
||||||
dta 0 ;"----------------" ; 40
|
|
||||||
dta 0 ;"----------------" ; 41
|
|
||||||
dta 0 ;"----------------" ; 42
|
|
||||||
dta 0 ;"----------------" ; 43
|
|
||||||
dta 0 ;"----------------" ; 44
|
|
||||||
dta 0 ;"----------------" ; 45
|
|
||||||
dta 0 ;"----------------" ; 46
|
|
||||||
dta 0 ;"----------------" ; 47
|
|
||||||
dta 0 ;"White Flag " ; 48
|
|
||||||
dta 1 ;"Battery " ; 49
|
|
||||||
dta 0 ;"Bal Guidance " ; 50
|
|
||||||
dta 0 ;"Horz Guidance " ; 51
|
|
||||||
dta 0 ;"Vert Guidance " ; 52
|
|
||||||
dta 0 ;"Lazy Boy " ; 53
|
|
||||||
dta 1 ;"Parachute " ; 54
|
|
||||||
dta 1 ;"Strong Parachute" ; 55
|
|
||||||
dta 1 ;"Mag Deflector " ; 56
|
|
||||||
dta 1 ;"Shield " ; 57
|
|
||||||
dta 1 ;"Heavy Shield " ; 58
|
|
||||||
dta 1 ;"Force Shield " ; 59
|
|
||||||
dta 0 ;"Super Mag " ; 60
|
|
||||||
dta 1 ;"Auto Defense " ; 61
|
|
||||||
dta 0 ;"Fuel Tank " ; 62
|
|
||||||
dta 0 ;"Nuclear Winter " ; 63
|
|
||||||
|
|
||||||
|
PurchaseMeTable2 ;weapons good to be purchased by the robot (Cyborg)
|
||||||
|
;the comment is an index in the tables
|
||||||
|
; "Baby Missile ","Missile ","Baby Nuke ","Nuke "
|
||||||
|
; "LeapFrog ","Funky Bomb ","MIRV ","Death's Head "
|
||||||
|
.by %00110001
|
||||||
|
; "Napalm ","Hot Napalm ","Tracer ","Smoke Tracer "
|
||||||
|
; "Baby Roller ","Roller ","Heavy Roller ","Riot Charge "
|
||||||
|
.by %01000000
|
||||||
|
; "Riot Blast ","Riot Bomb ","Heavy Riot Bomb ","Baby Digger "
|
||||||
|
; "Digger ","Heavy Digger ","Baby Sandhog ","Sandhog "
|
||||||
|
.by %00000000
|
||||||
|
; "Heavy Sandhog ","Dirt Clod ","Dirt Ball ","Ton of Dirt "
|
||||||
|
; "Liquid Dirt ","Dirt Charge ","Earth Disrupter ","Plasma Blast "
|
||||||
|
.by %00000000
|
||||||
|
; "Laser "
|
||||||
|
.by %00000000
|
||||||
|
.by 0 ; offset to defensives
|
||||||
|
; "White Flag ","Battery ","Bal Guidance ","Horz Guidance "
|
||||||
|
; "Vert Guidance ","Lazy Boy ","Parachute ","Strong Parachute"
|
||||||
|
.by %01000001
|
||||||
|
; "Mag Deflector ","Shield ","Heavy Shield ","Force Shield "
|
||||||
|
; "Super Mag ","Bouncy Castle ","Long Barrel ","Nuclear Winter "
|
||||||
|
.by %10110100
|
||||||
|
|
||||||
;-------------------------------------------------
|
;-------------------------------------------------
|
||||||
; Screen codes of icons (chars) representing a given weapon
|
; Screen codes of icons (chars) representing a given weapon
|
||||||
@@ -572,7 +491,7 @@ WeaponSymbols
|
|||||||
.by $20,$00,$00,$00,$00,$00,$00,$00
|
.by $20,$00,$00,$00,$00,$00,$00,$00
|
||||||
.by $00,$00,$00,$00,$00,$00,$00,$00
|
.by $00,$00,$00,$00,$00,$00,$00,$00
|
||||||
.by $5f,$1c,$03,$06,$1d,$0a,$1b,$1b ; defensives
|
.by $5f,$1c,$03,$06,$1d,$0a,$1b,$1b ; defensives
|
||||||
.by $1e,$3b,$3d,$3c,$3e,$3f,$5e,$7d
|
.by $1e,$3b,$3d,$3c,$3e,$3f,$1d,$7d
|
||||||
|
|
||||||
; Names of weapons (16 chars long)
|
; Names of weapons (16 chars long)
|
||||||
NamesOfWeapons ;the comment is an index in the tables
|
NamesOfWeapons ;the comment is an index in the tables
|
||||||
@@ -631,15 +550,15 @@ NamesOfWeapons ;the comment is an index in the tables
|
|||||||
dta d"Horz Guidance " ; 51
|
dta d"Horz Guidance " ; 51
|
||||||
dta d"Vert Guidance " ; 52
|
dta d"Vert Guidance " ; 52
|
||||||
dta d"Lazy Boy " ; 53
|
dta d"Lazy Boy " ; 53
|
||||||
dta d"Parachute " ; 54 - no energy
|
dta d"Parachute " ; 54 - no energy
|
||||||
dta d"Strong Parachute" ; 55 - with energy (earlier Battery)
|
dta d"Strong Parachute" ; 55 - with energy (earlier Battery)
|
||||||
dta d"Mag Deflector " ; 56 - with shield and energy
|
dta d"Mag Deflector " ; 56 - with shield and energy
|
||||||
dta d"Shield " ; 57 - shield for one shot - no energy
|
dta d"Shield " ; 57 - shield for one shot - no energy
|
||||||
dta d"Heavy Shield " ; 58 - shield with energy
|
dta d"Heavy Shield " ; 58 - shield with energy
|
||||||
dta d"Force Shield " ; 59 - shield with energy and parachute
|
dta d"Force Shield " ; 59 - shield with energy and parachute
|
||||||
dta d"Super Mag " ; 60
|
dta d"Super Mag " ; 60
|
||||||
dta d"Auto Defense " ; 61 - with shield and energy
|
dta d"Bouncy Castle " ; 61 - with shield and energy
|
||||||
dta d"Fuel Tank " ; 62
|
dta d"Long Schlong " ; 62
|
||||||
dta d"Nuclear Winter " ; 63
|
dta d"Nuclear Winter " ; 63
|
||||||
DefensiveEnergy = * - 48
|
DefensiveEnergy = * - 48
|
||||||
.by 00 ; White Flag
|
.by 00 ; White Flag
|
||||||
@@ -655,8 +574,8 @@ DefensiveEnergy = * - 48
|
|||||||
.by 99 ; Heavy Shield
|
.by 99 ; Heavy Shield
|
||||||
.by 99 ; Force Shield
|
.by 99 ; Force Shield
|
||||||
.by 00 ; Super Mag
|
.by 00 ; Super Mag
|
||||||
.by 99 ; Auto Defense
|
.by 99 ; Bouncy Castle
|
||||||
.by 00 ; Fuel Tank
|
.by 00 ; Long Barrel
|
||||||
.by 00 ; Nuclear Winter
|
.by 00 ; Nuclear Winter
|
||||||
weaponsOfDeath
|
weaponsOfDeath
|
||||||
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
|
||||||
@@ -684,5 +603,45 @@ 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,130,136,142,148,154
|
||||||
|
;-------decimal constans
|
||||||
|
zero
|
||||||
|
digits dta d"0123456789"
|
||||||
|
nineplus dta d"9"+1
|
||||||
|
space dta d" "
|
||||||
|
;------credits
|
||||||
|
CreditsStart
|
||||||
|
dta d" "*
|
||||||
|
dta d"You were playin",d"g"*
|
||||||
|
dta d"Scorc",d"h"*
|
||||||
|
dta d"Warsaw, Miam",d"i"*
|
||||||
|
dta d"2000-202",d"2"*
|
||||||
|
dta d" "*
|
||||||
|
dta d"B",d"y"*
|
||||||
|
dta d" "*
|
||||||
|
dta d"Programmin",d"g"*
|
||||||
|
dta d"Tomasz 'Pecus' Peck",d"o"*
|
||||||
|
dta d"Pawel 'pirx' Kalinowsk",d"i"*
|
||||||
|
dta d" "*
|
||||||
|
dta d"SFX, Music and Suppor",d"t"*
|
||||||
|
dta d"Michal 'Miker' Szpilowsk",d"i"*
|
||||||
|
dta d" "*
|
||||||
|
dta d"Additional Musi",d"c"*
|
||||||
|
dta d"Mario 'Emkay' Kri",d"x"*
|
||||||
|
dta d" "*
|
||||||
|
dta d"Code Optimizatio",d"n"*
|
||||||
|
dta d"Piotr '0xF' Fusi",d"k"*
|
||||||
|
dta d" "*
|
||||||
|
dta d"Ar",d"t"*
|
||||||
|
dta d"Adam Wachowsk",d"i"*
|
||||||
|
dta d"Krzysztof 'Kaz' Ziembi",d"k"*
|
||||||
|
dta d" "*
|
||||||
|
dta d"Ideas and Q",d"A"*
|
||||||
|
dta d"Bocianu, Probabilitydragon, EnderDude",d","*
|
||||||
|
dta d"Beeblebrox, KrzysRog, lopezpb, Dracon",d","*
|
||||||
|
dta d"brad-colbert, archon800, nowy80",d","*
|
||||||
|
dta d"Shaggy the Atarian, RetroBorsuk, ZP",d"H"*
|
||||||
|
dta d" "*
|
||||||
|
dta d"Stay tuned for the FujiNet version",d"!"*
|
||||||
|
dta d" "*
|
||||||
|
CreditsEnd
|
||||||
.endif
|
.endif
|
||||||
|
|||||||
+31
-8
@@ -1,18 +1,38 @@
|
|||||||
; @com.wudsn.ide.asm.mainsourcefile=scorch.asm
|
; @com.wudsn.ide.asm.mainsourcefile=scorch.asm
|
||||||
|
|
||||||
|
;----------------------------------------------
|
||||||
|
; Player/missile memory
|
||||||
|
|
||||||
|
PMGraph = $0800
|
||||||
|
display = $1010 ;screen takes $2K due to clearing routine
|
||||||
|
|
||||||
screenheight = 200
|
screenheight = 200
|
||||||
screenBytes = 40
|
screenBytes = 40
|
||||||
screenwidth = screenBytes*8 ; Max screenwidth = 512!!!
|
screenwidth = screenBytes*8 ; Max screenwidth = 512!!!
|
||||||
margin = 40 ;mountain drawing Y variable margin
|
margin = 40 ;mountain drawing Y variable margin
|
||||||
display = $1010 ;screen takes $2K due to clearing routine
|
|
||||||
MaxPlayers = 6
|
MaxPlayers = 6
|
||||||
maxOptions = 8 ;number of all options
|
maxOptions = 8 ;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 = $23 ; P/M to graphics offset
|
||||||
napalmRadius = 10
|
napalmRadius = 10
|
||||||
|
StandardBarrel = 6 ; standard tank barrel length
|
||||||
|
LongBarrel = 20 ; long barrel length
|
||||||
|
|
||||||
TextBackgroundColor = $02 ; REAL constans - use: LDA #TextBackgroundColor
|
TextBackgroundColor = $02 ; REAL constans - use: LDA #TextBackgroundColor
|
||||||
TextForegroundColor = $0c
|
TextForegroundColor = $0A
|
||||||
|
|
||||||
|
;character codes for symbols (tank, parachute, etc. )
|
||||||
|
char_parachute_______ = $02
|
||||||
|
char_flag____________ = $1e
|
||||||
|
char_flame___________ = $14
|
||||||
|
char_clear_flame_____ = $1c
|
||||||
|
char_digger__________ = $04
|
||||||
|
char_sandhog_________ = $0c
|
||||||
|
char_sandhog_offset = char_sandhog_________ - char_digger__________
|
||||||
|
|
||||||
|
char_tank1___________ = $20
|
||||||
|
char_tank2___________ = $24
|
||||||
|
char_tank3___________ = $28
|
||||||
|
|
||||||
;Weapon prices (*10 on screen)
|
;Weapon prices (*10 on screen)
|
||||||
price_Baby_Missile___ = 0 ;_0
|
price_Baby_Missile___ = 0 ;_0
|
||||||
@@ -76,8 +96,8 @@ price_Shield_________ = 224 ;_57
|
|||||||
price_Heavy_Shield___ = 628 ;_58
|
price_Heavy_Shield___ = 628 ;_58
|
||||||
price_Force_Shield___ = 1100 ;_59
|
price_Force_Shield___ = 1100 ;_59
|
||||||
price_Super_Mag______ = $ffff ;_60
|
price_Super_Mag______ = $ffff ;_60
|
||||||
price_Auto_Defense___ = 512 ;_61
|
price_Bouncy_Castle__ = 512 ;_61
|
||||||
price_Fuel_Tank______ = $ffff ;_62
|
price_Long_Barrel____ = 2100 ;_62
|
||||||
price_Nuclear_Winter_ = 1000 ;_63
|
price_Nuclear_Winter_ = 1000 ;_63
|
||||||
;Weapon indexes (numbers)
|
;Weapon indexes (numbers)
|
||||||
ind_Baby_Missile___ = 0
|
ind_Baby_Missile___ = 0
|
||||||
@@ -141,8 +161,8 @@ ind_Shield_________ = 57
|
|||||||
ind_Heavy_Shield___ = 58
|
ind_Heavy_Shield___ = 58
|
||||||
ind_Force_Shield___ = 59
|
ind_Force_Shield___ = 59
|
||||||
ind_Super_Mag______ = 60
|
ind_Super_Mag______ = 60
|
||||||
ind_Auto_Defense___ = 61
|
ind_Bouncy_Castle__ = 61
|
||||||
ind_Fuel_Tank______ = 62
|
ind_Long_Barrel____ = 62
|
||||||
ind_Nuclear_Winter_ = 63
|
ind_Nuclear_Winter_ = 63
|
||||||
;--------------------------------
|
;--------------------------------
|
||||||
; names of RMT instruments (sfx)
|
; names of RMT instruments (sfx)
|
||||||
@@ -177,10 +197,13 @@ sfx_seppuku = $1a ;1
|
|||||||
sfx_liquid_dirt = $1b ;2
|
sfx_liquid_dirt = $1b ;2
|
||||||
sfx_battery = $1c ;3
|
sfx_battery = $1c ;3
|
||||||
sfx_white_flag = $1d ;4
|
sfx_white_flag = $1d ;4
|
||||||
|
sfx_long_barrel = $1e
|
||||||
;--------------------------------
|
;--------------------------------
|
||||||
; RMT songs (lines)
|
; RMT songs (lines)
|
||||||
;--------------------------------
|
;--------------------------------
|
||||||
song_silencio = $00
|
song_silencio = $00
|
||||||
song_end_round = $02
|
song_main_menu = $02
|
||||||
song_ingame = $06
|
song_ingame = $06
|
||||||
song_game_over = $0b
|
song_round_over = $0b
|
||||||
|
song_ending_looped = $0e
|
||||||
|
song_supermarket = $1b
|
||||||
|
|||||||
+84
-40
@@ -1,4 +1,4 @@
|
|||||||
; @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
|
||||||
|
|
||||||
@@ -31,6 +31,11 @@ OptionsDL
|
|||||||
.word OptionsScreen
|
.word OptionsScreen
|
||||||
.byte $30,$02,$02,$70
|
.byte $30,$02,$02,$70
|
||||||
:maxOptions .by $02,$10
|
:maxOptions .by $02,$10
|
||||||
|
:(9-maxOptions) .by $70,$10
|
||||||
|
.byte $80
|
||||||
|
.byte $4f
|
||||||
|
.word (display+140*40)
|
||||||
|
:21 .by $0f ;76
|
||||||
.byte $41
|
.byte $41
|
||||||
.word OptionsDL
|
.word OptionsDL
|
||||||
;------------------------
|
;------------------------
|
||||||
@@ -54,51 +59,51 @@ dl ; MAIN game display list
|
|||||||
.byte $10 ; 2 blank lines
|
.byte $10 ; 2 blank lines
|
||||||
|
|
||||||
.byte $4f
|
.byte $4f
|
||||||
.word display ; 1 line
|
.word display ; 1 line
|
||||||
:76 .by $0f ;76
|
:76 .by $0f ;76
|
||||||
.by $0f+$80 ; DLI (black bar) ;2
|
.by $0f+$80 ; DLI (black bar) ;2
|
||||||
.by $0f+$80 ; DLI
|
.by $0f+$80 ; DLI
|
||||||
:13 .by $0f ;13
|
:13 .by $0f ;13
|
||||||
.by $0f+$80 ; DLI (black bar) ;2
|
.by $0f+$80 ; DLI (black bar) ;2
|
||||||
.by $0f+$80 ; DLI
|
.by $0f+$80 ; DLI
|
||||||
:8 .by $0f ;8
|
:8 .by $0f ;8
|
||||||
.by $4f ;1
|
.by $4f ;1
|
||||||
.wo display+$0ff0
|
.wo display+$0ff0
|
||||||
:2 .by $0f ;2
|
:2 .by $0f ;2
|
||||||
.by $0f+$80 ; DLI (black bar) ;2
|
.by $0f+$80 ; DLI (black bar) ;2
|
||||||
.by $0f+$80 ; DLI
|
.by $0f+$80 ; DLI
|
||||||
:9 .by $0f ;9
|
:9 .by $0f ;9
|
||||||
.by $0f+$80 ; DLI (black bar) ;2
|
.by $0f+$80 ; DLI (black bar) ;2
|
||||||
.by $0f+$80 ; DLI
|
.by $0f+$80 ; DLI
|
||||||
:8 .by $0f ;8
|
:8 .by $0f ;8
|
||||||
.by $0f+$80 ; DLI (black bar) ;2
|
.by $0f+$80 ; DLI (black bar) ;2
|
||||||
.by $0f+$80 ; DLI
|
.by $0f+$80 ; DLI
|
||||||
:7 .by $0f ;7
|
:7 .by $0f ;7
|
||||||
.by $0f+$80 ; DLI (black bar) ;2
|
.by $0f+$80 ; DLI (black bar) ;2
|
||||||
.by $0f+$80 ; DLI
|
.by $0f+$80 ; DLI
|
||||||
:6 .by $0f ;6
|
:6 .by $0f ;6
|
||||||
.by $0f+$80 ; DLI (black bar) ;2
|
.by $0f+$80 ; DLI (black bar) ;2
|
||||||
.by $0f+$80 ; DLI
|
.by $0f+$80 ; DLI
|
||||||
:5 .by $0f ;5
|
:5 .by $0f ;5
|
||||||
.by $0f+$80 ; DLI (black bar) ;2
|
.by $0f+$80 ; DLI (black bar) ;2
|
||||||
.by $0f+$80 ; DLI
|
.by $0f+$80 ; DLI
|
||||||
:4 .by $0f ;4
|
:4 .by $0f ;4
|
||||||
.by $0f+$80 ; DLI (black bar) ;2
|
.by $0f+$80 ; DLI (black bar) ;2
|
||||||
.by $0f+$80 ; DLI
|
.by $0f+$80 ; DLI
|
||||||
:3 .by $0f ;3
|
:3 .by $0f ;3
|
||||||
.by $0f+$80 ; DLI (black to end);1
|
.by $0f+$80 ; DLI (black to end);1
|
||||||
:38 .byte $0f ;35 ..... = 200
|
:38 .byte $0f ;35 ..... = 200
|
||||||
.by $4f
|
.by $4f
|
||||||
.wo EmptyLine ; additional line of ground
|
.wo EmptyLine ; additional line of ground
|
||||||
.byte $41
|
.byte $41
|
||||||
.word dl
|
.word dl
|
||||||
;-----------------------------------------------
|
;-----------------------------------------------
|
||||||
;Screen displays go first to avoid crossing 4kb barrier
|
;Screen displays go first to avoid crossing 4kb barrier
|
||||||
;-----------------------------------------------
|
;-----------------------------------------------
|
||||||
OptionsScreen
|
OptionsScreen
|
||||||
dta d"Welcome to Scorch ver. "
|
dta d"Welcome to Scorch v. "
|
||||||
build ; 3 bytes from scorch.asm (fancy method) :)
|
build ; 4 bytes from scorch.asm (fancy method) :)
|
||||||
dta d" (un)2000-2022"
|
dta d" (un)2000-2022"
|
||||||
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 "
|
||||||
OptionsHere
|
OptionsHere
|
||||||
@@ -128,6 +133,7 @@ MoreDown
|
|||||||
ListOfWeapons
|
ListOfWeapons
|
||||||
:36 dta d" "
|
:36 dta d" "
|
||||||
ListOfWeapons1End
|
ListOfWeapons1End
|
||||||
|
;GameOverResults ; reuse after game (remember to clear on start new)
|
||||||
ListOfDefensiveWeapons
|
ListOfDefensiveWeapons
|
||||||
:16 dta d" "
|
:16 dta d" "
|
||||||
ListOfDefensiveWeaponsEnd ;constant useful when clearing
|
ListOfDefensiveWeaponsEnd ;constant useful when clearing
|
||||||
@@ -146,6 +152,41 @@ EmptyLine
|
|||||||
dta d" "
|
dta d" "
|
||||||
; -------------------------------------------------
|
; -------------------------------------------------
|
||||||
.ALIGN $1000 ; WARNING!!!! 4KiB barrier crossing here, might need reassignment!!!
|
.ALIGN $1000 ; WARNING!!!! 4KiB barrier crossing here, might need reassignment!!!
|
||||||
|
;-----------------------------------------------
|
||||||
|
GameOverResults = display+$0ff0 ; reuse after game
|
||||||
|
Credits = GameOverResults +(6*40)
|
||||||
|
CreditsLastLine = Credits + (41*40)
|
||||||
|
GameOverDL
|
||||||
|
.byte $70,$40
|
||||||
|
.byte $47 ; 16 gr8 lines
|
||||||
|
.word GameOverTitle
|
||||||
|
.byte $4f ; 1 line
|
||||||
|
.word display+(40*72)
|
||||||
|
:28 .byte $0f ; 28 lines
|
||||||
|
.byte $0f+$80
|
||||||
|
.byte $4f ; 1 line
|
||||||
|
.word display+(40*32)
|
||||||
|
:30 .byte $0f ; 30 lines
|
||||||
|
.byte $0f+$80 ; 1 line
|
||||||
|
.byte $4f ; 1 line
|
||||||
|
.word display+(40*72)
|
||||||
|
:7 .byte $0f ; 7 lines
|
||||||
|
.byte $00+$80 ; 1 line
|
||||||
|
.byte $42 ; 7 tekst lines
|
||||||
|
.word GameOverTitle2
|
||||||
|
.byte $00+$80
|
||||||
|
.byte $42
|
||||||
|
.word GameOverResults
|
||||||
|
:5 .byte $00+$80,$02
|
||||||
|
.byte $70+$80
|
||||||
|
.byte $42+$20 ; VSCRL
|
||||||
|
DLCreditsAddr
|
||||||
|
.word Credits
|
||||||
|
:6 .byte $02+$20
|
||||||
|
.byte $02
|
||||||
|
.byte $41
|
||||||
|
.word GameOverDL
|
||||||
|
|
||||||
NameScreen
|
NameScreen
|
||||||
dta d" Enter names of players "
|
dta d" Enter names of players "
|
||||||
dta d" Tank 01 Name:"
|
dta d" Tank 01 Name:"
|
||||||
@@ -179,5 +220,8 @@ activateTextEnd
|
|||||||
purchaseText
|
purchaseText
|
||||||
dta d"Purchase"
|
dta d"Purchase"
|
||||||
purchaseTextEnd
|
purchaseTextEnd
|
||||||
|
GameOverTitle
|
||||||
.endif
|
dta d" game over "*
|
||||||
|
GameOverTitle2
|
||||||
|
dta d" Player Points Hits Earned Money "
|
||||||
|
.endif
|
||||||
+225
-78
@@ -462,19 +462,18 @@ endcircleloop
|
|||||||
.endp
|
.endp
|
||||||
|
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
.proc clearscreen
|
.proc ClearScreen
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
|
mwa #display temp
|
||||||
lda #$ff
|
ldy #0
|
||||||
ldx #0
|
@ lda #$ff
|
||||||
@
|
sta (temp),y
|
||||||
:31 sta display+($100*#),x
|
inw temp
|
||||||
sta display+$1e50,x ; this is so no space outside of the screen is cleared
|
cpw temp #display+screenheight*screenBytes+1
|
||||||
; of course we are clearing $100 instead of $50, but who cares :]
|
|
||||||
inx
|
|
||||||
bne @-
|
bne @-
|
||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
|
|
||||||
;-------------------------------*------------------
|
;-------------------------------*------------------
|
||||||
.proc placetanks
|
.proc placetanks
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
@@ -631,19 +630,16 @@ No6thTankHide
|
|||||||
SkipHidingPM
|
SkipHidingPM
|
||||||
|
|
||||||
|
|
||||||
|
ldy TankShapesTable,x
|
||||||
lda AngleTable,x
|
lda AngleTable,x
|
||||||
tay
|
cmp #91 ; left or right tank shape
|
||||||
lda BarrelTable,y
|
bcs LeftTank
|
||||||
sta CharCode
|
:2 iny ; right tank
|
||||||
|
LeftTank
|
||||||
|
sty CharCode
|
||||||
DrawTankNrX
|
DrawTankNrX
|
||||||
ldx tanknr
|
ldx tanknr
|
||||||
lda xtankstableL,x
|
jsr SetupXYdraw
|
||||||
sta xdraw
|
|
||||||
lda xtankstableH,x
|
|
||||||
sta xdraw+1
|
|
||||||
lda ytankstable,x
|
|
||||||
sta ydraw
|
|
||||||
mva #0 ydraw+1
|
|
||||||
|
|
||||||
jsr TypeChar
|
jsr TypeChar
|
||||||
|
|
||||||
@@ -728,44 +724,57 @@ ZeroesToGo6
|
|||||||
bne ClearPM6
|
bne ClearPM6
|
||||||
|
|
||||||
NoPlayerMissile
|
NoPlayerMissile
|
||||||
|
|
||||||
|
ldy #$01
|
||||||
|
lda Erase
|
||||||
|
beq @+
|
||||||
|
dey
|
||||||
|
@ sty color
|
||||||
; draw defensive weapons like shield ( tank number in X )
|
; draw defensive weapons like shield ( tank number in X )
|
||||||
; in xdraw, ydraw we have coordinates left LOWER corner of Tank char
|
; in xdraw, ydraw we have coordinates left LOWER corner of Tank char
|
||||||
ldx TankNr
|
ldx TankNr
|
||||||
lda ActiveDefenceWeapon,x
|
lda ActiveDefenceWeapon,x
|
||||||
cmp #ind_Shield_________ ; one shot shield
|
cmp #ind_Shield_________ ; one shot shield
|
||||||
beq DrawTankShield
|
beq DrawTankSh
|
||||||
cmp #ind_Force_Shield___ ; shield with energy and parachute
|
cmp #ind_Force_Shield___ ; shield with energy and parachute
|
||||||
beq DrawTankShieldBold
|
beq DrawTankShieldBold
|
||||||
cmp #ind_Heavy_Shield___ ; shield with energy
|
cmp #ind_Heavy_Shield___ ; shield with energy
|
||||||
beq DrawTankShieldBold
|
beq DrawTankShieldBold
|
||||||
cmp #ind_Auto_Defense___ ; Auto Defence
|
cmp #ind_Bouncy_Castle__ ; Auto Defence
|
||||||
beq DrawTankShieldWihHorns
|
beq DrawTankShieldWihHorns
|
||||||
cmp #ind_Mag_Deflector__ ; Mag Deflector
|
cmp #ind_Mag_Deflector__ ; Mag Deflector
|
||||||
beq DrawTankShieldWihHorns
|
beq DrawTankShieldWihHorns
|
||||||
cmp #ind_White_Flag_____ ; White Flag
|
cmp #ind_White_Flag_____ ; White Flag
|
||||||
beq DrawTankFlag
|
beq DrawTankFlag
|
||||||
bne NoShieldDraw
|
bne NoShieldDraw
|
||||||
DrawTankShield
|
DrawTankSh
|
||||||
jmp DrawTankShield.DrawInPosition
|
jsr DrawTankShield
|
||||||
|
jmp NoShieldDraw
|
||||||
DrawTankShieldWihHorns
|
DrawTankShieldWihHorns
|
||||||
jsr DrawTankShield.DrawInPosition
|
jsr DrawTankShield
|
||||||
jmp DrawTankShieldHorns
|
jsr DrawTankShieldHorns
|
||||||
|
jmp NoShieldDraw
|
||||||
DrawTankShieldBold
|
DrawTankShieldBold
|
||||||
jsr DrawTankShield.DrawInPosition
|
jsr DrawTankShield
|
||||||
jmp DrawTankShieldBoldLine
|
jsr DrawTankShieldBoldLine
|
||||||
|
jmp NoShieldDraw
|
||||||
DrawTankFlag
|
DrawTankFlag
|
||||||
lda #$5E ; flag symbol
|
lda #char_flag____________ ; flag symbol
|
||||||
sta CharCode
|
sta CharCode
|
||||||
lda Ytankstable,x
|
lda Ytankstable,x
|
||||||
sec
|
sec
|
||||||
sbc #8
|
sbc #8
|
||||||
sta ydraw
|
sta ydraw
|
||||||
lda XtanksTableL,x
|
|
||||||
sta xdraw
|
|
||||||
lda XtanksTableH,x
|
|
||||||
sta xdraw+1
|
|
||||||
jsr TypeChar
|
jsr TypeChar
|
||||||
NoShieldDraw
|
NoShieldDraw
|
||||||
|
BarrelChange
|
||||||
|
ldy #$01
|
||||||
|
lda Erase
|
||||||
|
beq @+
|
||||||
|
dey
|
||||||
|
@ sty color
|
||||||
|
jsr DrawBarrel
|
||||||
|
ldx TankNr
|
||||||
DoNotDrawTankNr
|
DoNotDrawTankNr
|
||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
@@ -782,11 +791,15 @@ tankflash_loop
|
|||||||
mva #1 Erase
|
mva #1 Erase
|
||||||
ldx TankNr
|
ldx TankNr
|
||||||
jsr DrawTankNr.SkipHidingPM ; it's necessary becouse DrawTankNr skips tanks with no energy !
|
jsr DrawTankNr.SkipHidingPM ; it's necessary becouse DrawTankNr skips tanks with no energy !
|
||||||
PAUSE 2
|
;PAUSE 2
|
||||||
|
ldy #1
|
||||||
|
jsr PauseYFrames
|
||||||
mva #0 Erase
|
mva #0 Erase
|
||||||
ldx TankNr
|
ldx TankNr
|
||||||
jsr DrawTankNr.SkipHidingPM
|
jsr DrawTankNr.SkipHidingPM
|
||||||
PAUSE 2
|
;PAUSE 2
|
||||||
|
ldy #1
|
||||||
|
jsr PauseYFrames
|
||||||
dec fs
|
dec fs
|
||||||
jne tankflash_loop
|
jne tankflash_loop
|
||||||
rts
|
rts
|
||||||
@@ -801,22 +814,9 @@ tankflash_loop
|
|||||||
;
|
;
|
||||||
; this proc change xdraw, ydraw and temp!
|
; this proc change xdraw, ydraw and temp!
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
lda xtankstableL,x
|
|
||||||
sta xdraw
|
|
||||||
lda xtankstableH,x
|
|
||||||
sta xdraw+1
|
|
||||||
lda ytankstable,x
|
|
||||||
sta ydraw
|
|
||||||
mva #0 ydraw+1
|
|
||||||
DrawInPosition
|
|
||||||
mva #1 color
|
|
||||||
lda erase
|
|
||||||
beq ShieldVisible
|
|
||||||
dec color
|
|
||||||
ShieldVisible
|
|
||||||
sbw xdraw #$03 ; 3 pixels to left
|
sbw xdraw #$03 ; 3 pixels to left
|
||||||
; draw left vertical line of shield ( | )
|
; draw left vertical line of shield ( | )
|
||||||
mva #6 temp ; strange !!!
|
mva #7 temp ; strange !!!
|
||||||
@
|
@
|
||||||
jsr plot
|
jsr plot
|
||||||
.nowarn dew ydraw
|
.nowarn dew ydraw
|
||||||
@@ -894,17 +894,18 @@ ShieldVisible
|
|||||||
.proc DrawTankParachute
|
.proc DrawTankParachute
|
||||||
;Tank number in X
|
;Tank number in X
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
lda #$34 ; parachute symbol
|
lda #char_parachute_______ ; parachute symbol
|
||||||
sta CharCode
|
sta CharCode
|
||||||
lda Ytankstable,x
|
lda Ytankstable,x
|
||||||
sec
|
cmp #16
|
||||||
|
bcc ToHighToParachute
|
||||||
|
;sec
|
||||||
sbc #8
|
sbc #8
|
||||||
sta ydraw
|
sta ydraw
|
||||||
lda XtanksTableL,x
|
jsr SetupXYdraw.X
|
||||||
sta xdraw
|
|
||||||
lda XtanksTableH,x
|
|
||||||
sta xdraw+1
|
|
||||||
jsr TypeChar
|
jsr TypeChar
|
||||||
|
ToHighToParachute
|
||||||
|
ldx TankNr
|
||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
|
|
||||||
@@ -944,19 +945,16 @@ NoFallingSound
|
|||||||
and #01
|
and #01
|
||||||
beq DoNotClearParachute
|
beq DoNotClearParachute
|
||||||
; here we clear the parachute
|
; here we clear the parachute
|
||||||
ldx TankNr
|
; ldx TankNr
|
||||||
jsr DrawTankParachute
|
jsr DrawTankParachute
|
||||||
DoNotClearParachute
|
DoNotClearParachute
|
||||||
mva #0 Erase
|
mva #0 Erase
|
||||||
ldx TankNr
|
; ldx TankNr
|
||||||
lda EndOfTheFallFlag ; We only get byte below the tank if still falling
|
lda EndOfTheFallFlag ; We only get byte below the tank if still falling
|
||||||
bne NoGroundCheck
|
bne NoGroundCheck
|
||||||
; coordinates of the first pixel under the tank
|
; coordinates of the first pixel under the tank
|
||||||
ldx TankNr
|
ldx TankNr
|
||||||
lda XtankstableL,x
|
jsr SetupXYdraw.X
|
||||||
sta xdraw
|
|
||||||
lda XtankstableH,x
|
|
||||||
sta xdraw+1
|
|
||||||
lda Ytankstable,x
|
lda Ytankstable,x
|
||||||
clc
|
clc
|
||||||
adc #1 ; in this point the comment helped us! For the very first
|
adc #1 ; in this point the comment helped us! For the very first
|
||||||
@@ -1037,9 +1035,10 @@ FallingLeft
|
|||||||
bit PreviousFall ; bit 6 - right
|
bit PreviousFall ; bit 6 - right
|
||||||
bvs EndLeftFall
|
bvs EndLeftFall
|
||||||
; we finish falling left if the tank reached the edge of the screen
|
; we finish falling left if the tank reached the edge of the screen
|
||||||
lda XtanksTableL,x
|
|
||||||
bne NotLeftEdge
|
|
||||||
lda XtanksTableH,x
|
lda XtanksTableH,x
|
||||||
|
bne NotLeftEdge
|
||||||
|
lda XtanksTableL,x
|
||||||
|
cmp #2 ; 2 pixels correction due to a barrel wider than tank
|
||||||
beq EndLeftFall
|
beq EndLeftFall
|
||||||
NotLeftEdge
|
NotLeftEdge
|
||||||
; tank is falling left - modify coorinates
|
; tank is falling left - modify coorinates
|
||||||
@@ -1064,7 +1063,7 @@ FallingRight
|
|||||||
lda XtanksTableH,x
|
lda XtanksTableH,x
|
||||||
adc #0
|
adc #0
|
||||||
sta temp+1
|
sta temp+1
|
||||||
cpw temp #screenwidth
|
cpw temp #screenwidth-2 ; 2 pixels correction due to a barrel wider than tank
|
||||||
beq EndRightFall
|
beq EndRightFall
|
||||||
; tank is falling right - modify coorinates
|
; tank is falling right - modify coorinates
|
||||||
sec
|
sec
|
||||||
@@ -1088,9 +1087,9 @@ EndOfFCycle
|
|||||||
cmp #3 ; parachute and falling
|
cmp #3 ; parachute and falling
|
||||||
bne DoNotDrawParachute
|
bne DoNotDrawParachute
|
||||||
; here we draw parachute
|
; here we draw parachute
|
||||||
ldx TankNr
|
; ldx TankNr
|
||||||
jsr DrawTankParachute
|
jsr DrawTankParachute
|
||||||
wait ; onli if tank with patachute
|
jsr WaitOneFrame ; only if tank with parachute
|
||||||
RapidFalling
|
RapidFalling
|
||||||
DoNotDrawParachute
|
DoNotDrawParachute
|
||||||
lda EndOfTheFallFlag
|
lda EndOfTheFallFlag
|
||||||
@@ -1099,7 +1098,7 @@ DoNotDrawParachute
|
|||||||
; the horizontal coordinate is even.
|
; the horizontal coordinate is even.
|
||||||
; If it is odd then it must be corrected because otherwise
|
; If it is odd then it must be corrected because otherwise
|
||||||
; P/M graphics background would not look OK
|
; P/M graphics background would not look OK
|
||||||
ldx TankNr
|
; ldx TankNr
|
||||||
lda XtanksTableL,x
|
lda XtanksTableL,x
|
||||||
and #$01
|
and #$01
|
||||||
beq EndOfFall ; if it is even then it is the end
|
beq EndOfFall ; if it is even then it is the end
|
||||||
@@ -1116,7 +1115,7 @@ ForceFallLeft
|
|||||||
jne TankFallsX
|
jne TankFallsX
|
||||||
EndOfFall
|
EndOfFall
|
||||||
mva #1 Erase
|
mva #1 Erase
|
||||||
ldx TankNr
|
; ldx TankNr
|
||||||
; if tank was falling down having parachute,
|
; if tank was falling down having parachute,
|
||||||
; we must deduct one parachute
|
; we must deduct one parachute
|
||||||
lda Parachute
|
lda Parachute
|
||||||
@@ -1135,7 +1134,7 @@ NoParachuteWeapon
|
|||||||
jsr DrawTankParachute
|
jsr DrawTankParachute
|
||||||
ThereWasNoParachute
|
ThereWasNoParachute
|
||||||
mva #0 Erase
|
mva #0 Erase
|
||||||
ldx TankNr
|
; ldx TankNr
|
||||||
jsr DrawTankNr ; redraw tank after erase parachute (exactly for redraw leaky schield :) )
|
jsr DrawTankNr ; redraw tank after erase parachute (exactly for redraw leaky schield :) )
|
||||||
mva #sfx_silencer sfx_effect
|
mva #sfx_silencer sfx_effect
|
||||||
rts
|
rts
|
||||||
@@ -1432,7 +1431,7 @@ EndDrawing
|
|||||||
|
|
||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
; ****************************************************
|
/*
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
.proc calculatemountains0
|
.proc calculatemountains0
|
||||||
; Only for testing - makes ground flat (0 pixels)
|
; Only for testing - makes ground flat (0 pixels)
|
||||||
@@ -1457,7 +1456,7 @@ SetYofNextTank
|
|||||||
bpl SetYofNextTank
|
bpl SetYofNextTank
|
||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
; ****************************************************
|
*/
|
||||||
|
|
||||||
; -----------------------------------------
|
; -----------------------------------------
|
||||||
.proc unPlot
|
.proc unPlot
|
||||||
@@ -1578,10 +1577,10 @@ EndOfUnPlot
|
|||||||
; -----------------------------------------
|
; -----------------------------------------
|
||||||
; is it not over the screen ???
|
; is it not over the screen ???
|
||||||
cpw ydraw #(screenheight+1); changed for one additional line. cpw ydraw #(screenheight-1)
|
cpw ydraw #(screenheight+1); changed for one additional line. cpw ydraw #(screenheight-1)
|
||||||
bcs unPlot.EndOfUnPlot
|
bcs unPlot.EndOfUnPlot ;nearest RTS
|
||||||
CheckX02
|
CheckX02
|
||||||
cpw xdraw #screenwidth
|
cpw xdraw #screenwidth
|
||||||
bcs EndOfPlot ;nearest RTS
|
bcs EndOfPlot
|
||||||
MakePlot
|
MakePlot
|
||||||
; let's calculate coordinates from xdraw and ydraw
|
; let's calculate coordinates from xdraw and ydraw
|
||||||
|
|
||||||
@@ -1800,7 +1799,7 @@ EndPutChar
|
|||||||
FontColor0
|
FontColor0
|
||||||
; char to the table
|
; char to the table
|
||||||
lda CharCode4x4
|
lda CharCode4x4
|
||||||
and #1
|
and #%00000001
|
||||||
beq Upper4bits
|
beq Upper4bits
|
||||||
lda #$ff ; better option to check (nibbler4x4 = $00 or $ff)
|
lda #$ff ; better option to check (nibbler4x4 = $00 or $ff)
|
||||||
Upper4bits
|
Upper4bits
|
||||||
@@ -1842,11 +1841,11 @@ GetUpper4bits
|
|||||||
and #$7
|
and #$7
|
||||||
sta ybit
|
sta ybit
|
||||||
|
|
||||||
lsrw xbyte ; div 8
|
:3 lsrw xbyte ; div 8
|
||||||
rorw xbyte
|
; rorw xbyte
|
||||||
rorw xbyte
|
; rorw xbyte
|
||||||
;---
|
;---
|
||||||
ldy xbyte
|
ldy xbyte ; horizontal byte offet stored in Y
|
||||||
lda dy ; y = y - 3 because left lower.
|
lda dy ; y = y - 3 because left lower.
|
||||||
sec
|
sec
|
||||||
sbc #3
|
sbc #3
|
||||||
@@ -1906,6 +1905,154 @@ EndPut4x4
|
|||||||
; and #$fc
|
; and #$fc
|
||||||
; ora #$02 ; 2=normal, 3 = wide screen width
|
; ora #$02 ; 2=normal, 3 = wide screen width
|
||||||
sta dmactls
|
sta dmactls
|
||||||
|
jsr WaitOneFrame
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
; -------------------------------------
|
||||||
|
.proc SetupXYdraw
|
||||||
|
lda ytankstable,x
|
||||||
|
sta ydraw
|
||||||
|
mva #0 ydraw+1
|
||||||
|
X lda XtanksTableL,x
|
||||||
|
sta xdraw
|
||||||
|
lda XtanksTableH,x
|
||||||
|
sta xdraw+1
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
;--------------------------------------------------
|
||||||
|
.proc DrawBarrel
|
||||||
|
; X - tankNr
|
||||||
|
; changes xdraw, ydraw, fx, fy
|
||||||
|
;--------------------------------------------------
|
||||||
|
;vx calculation
|
||||||
|
;vx = sin(90-Angle) for Angle <=90
|
||||||
|
;vx = -sin(Angle-90) for 90 < Angle <= 180
|
||||||
|
|
||||||
|
; erase previous barrel
|
||||||
|
|
||||||
|
;cos(Angle) (but we use sin table only so some shenanigans happen)
|
||||||
|
; mva #0 color
|
||||||
|
; lda previousBarrelAngle,x
|
||||||
|
; sta Angle
|
||||||
|
; jsr DrawBarrelTech
|
||||||
|
;
|
||||||
|
; mva #1 color
|
||||||
|
ldx TankNr
|
||||||
|
jsr SetupXYdraw
|
||||||
|
lda BarrelLength,x
|
||||||
|
sta yc ; current tank barrel length
|
||||||
|
lda angleTable,x
|
||||||
|
sta Angle
|
||||||
|
jsr DrawBarrelTech
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
|
||||||
|
.proc DrawBarrelTech
|
||||||
|
; angle in Angle and A
|
||||||
|
|
||||||
|
mvx #0 goleft
|
||||||
|
cmp #91
|
||||||
|
bcc angleUnder90
|
||||||
|
|
||||||
|
;over 90
|
||||||
|
sec
|
||||||
|
sbc #90
|
||||||
|
tax
|
||||||
|
; barrel start offset over 90deg
|
||||||
|
adw xdraw #5 xdraw
|
||||||
|
mva #1 goleft
|
||||||
|
bpl @+ ; jmp @+
|
||||||
|
|
||||||
|
angleUnder90
|
||||||
|
sec ; X = 90-Angle
|
||||||
|
lda #90
|
||||||
|
sbc Angle
|
||||||
|
tax
|
||||||
|
; barrel start offset under 90deg
|
||||||
|
adw xdraw #3 xdraw
|
||||||
|
|
||||||
|
@
|
||||||
|
sbw ydraw #3 ydraw
|
||||||
|
lda sintable,x ; cos(X)
|
||||||
|
sta vx
|
||||||
|
|
||||||
|
;======vy
|
||||||
|
;vy = sin(Angle) for Angle <=90
|
||||||
|
;vy = sin(180-Angle) for 90 < Angle <= 180
|
||||||
|
|
||||||
|
;--
|
||||||
|
lda Angle
|
||||||
|
cmp #91
|
||||||
|
bcc YangleUnder90
|
||||||
|
|
||||||
|
lda #180
|
||||||
|
sec
|
||||||
|
sbc Angle
|
||||||
|
YangleUnder90
|
||||||
|
tax
|
||||||
|
lda sintable,x
|
||||||
|
sta vy
|
||||||
|
|
||||||
|
lda #0 ; all arithmetic to zero
|
||||||
|
sta vx+1
|
||||||
|
sta vy+1
|
||||||
|
sta fx
|
||||||
|
sta fy
|
||||||
|
|
||||||
|
; draw by vx vy
|
||||||
|
; in each step
|
||||||
|
; 1. plot(xdraw, ydraw)
|
||||||
|
; 2. add vx and vy to 3 byte variables xdraw.fx, ydraw.fy
|
||||||
|
; 3 check length, if shorter, go to 1.
|
||||||
|
|
||||||
|
; mva #6 yc ; barrel length
|
||||||
|
barrelLoop
|
||||||
|
|
||||||
|
lda goleft
|
||||||
|
bne @+
|
||||||
|
clc
|
||||||
|
lda fx
|
||||||
|
adc vx
|
||||||
|
sta fx
|
||||||
|
lda xdraw
|
||||||
|
adc #0
|
||||||
|
sta xdraw
|
||||||
|
lda xdraw+1
|
||||||
|
adc #0
|
||||||
|
sta xdraw+1
|
||||||
|
jmp ybarrel
|
||||||
|
@
|
||||||
|
sec
|
||||||
|
lda fx
|
||||||
|
sbc vx
|
||||||
|
sta fx
|
||||||
|
lda xdraw
|
||||||
|
sbc #0
|
||||||
|
sta xdraw
|
||||||
|
lda xdraw+1
|
||||||
|
sbc #0
|
||||||
|
sta xdraw+1
|
||||||
|
|
||||||
|
ybarrel
|
||||||
|
sec
|
||||||
|
lda fy
|
||||||
|
sbc vy
|
||||||
|
sta fy
|
||||||
|
lda ydraw
|
||||||
|
sbc #0
|
||||||
|
sta ydraw
|
||||||
|
lda ydraw+1
|
||||||
|
sbc #0
|
||||||
|
sta ydraw+1
|
||||||
|
|
||||||
|
jsr plot ;.MakePlot
|
||||||
|
|
||||||
|
dec yc
|
||||||
|
bne barrelLoop
|
||||||
|
|
||||||
|
mwa xdraw EndOfTheBarrelX
|
||||||
|
mva ydraw EndOfTheBarrelY
|
||||||
|
|
||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,157 @@
|
|||||||
|
Podstawowa instrukcja:
|
||||||
|
|
||||||
|
Grać można przy użyciu klawiatury (wszystkie funkcjonalności) lub joysticka (wszystkie funkcjonalności niezbędne w rozgrywce).
|
||||||
|
|
||||||
|
1 Wybór opcji gry.
|
||||||
|
Na pierwszym ekranie możemy skonfigurować opcje rozgrywwki:
|
||||||
|
- ilość graczy (2 - 6) obejmuje tak ludzi jak graczy sterowanych przez komputer
|
||||||
|
- początkową ilość gotówki każdego z graczy (8k to wybrana przez nas wartość optymalna, jecz przy krótkich rozgrywkach warto wybrać większą wartość)
|
||||||
|
- grawitacja
|
||||||
|
- maksymalna siła wiatru (wiatr jest losowany na początku każdej z rund, tu możemy wybrać jak silny może być)
|
||||||
|
- ilość rozgrywanych rund
|
||||||
|
- szybkość lotu pocisków (nie ma wpływu na tor lotu - zmienia jedynie widoczną prędkość rysowania - nie zmienia nic w samej rozgrywce)
|
||||||
|
- częstotliwość samobójstw :) - jeśli przez ileś tur gra nie odnotowała trafień (czołgi ciągle strzelają niecelnie) jeden z takich pudłujących czołgów popełnia samobójstwo - tu określamy jak długo mogą “strzelać w próżnię” :) - jeśli grają tylko ludzie optymalne ustawienie to “norm”, w przypadku graczy sterowanych przez komputer… wedle uznania.
|
||||||
|
- wysokość (i pofałdowanie) gór od prawie płaskich (NL), do strzelistych i wysokich (NP)
|
||||||
|
Wybór opcji klawiszami kursora lub joystickiem.
|
||||||
|
klawisz [RETURN] lub przycisk Joysticka przechodzi do następnego ekranu.
|
||||||
|
|
||||||
|
2. Wprowadzanie nazwy graczy i wybór poziomu graczy sterowanych przez komputer
|
||||||
|
Drugi ekran powtarza się dla każdego z graczy można na nim klawiszami kursora lub joysticjiem wybrać czy danym czołgiem będzie kierował człowiek (opcja HUMAN) czy też kompute (pozostałe opcje). Jednocześnie z klawiatury można wprowadzić nazwę wybranego gracza.
|
||||||
|
Po naciśnięciu klawisza [RETURN] lub przycisku Joysticka ekran przechodzi na następnego gracza aż zostaną wybrane poziomy trudności dla każdego z nich.
|
||||||
|
Jeśli nazwa nie zostanie wpisana (bo np operujemy wyłącznie joystickiem), to zostanie uzupełniona nazwą domyślną.
|
||||||
|
|
||||||
|
3. Ekran zakupów (przed każdą rundą)
|
||||||
|
Na tym ekranie można dokonywać zakupów broni ofensywnych i defensywnych. Widoczne są tylko te bronie na które gracza stać wraz z informacją o cenie i ilości jednostek danej broni, którą za ten cenę otrzymamy. Informacje na ekranie nie wymagają chyba więcej opisu. Po listach poruszamy się klawiszami kursora (góra i dół) lub joystickiem, klawisz [TAB] lub strzałka w lewo czy też ruch joystickiem w lewo zmieniają ekran na bronie defensywne lub ofensywne, klawisz [SPACJA] lub strzałka w prawo a także joystick w prawo realizują zakup wskazanej broni.
|
||||||
|
Klawisz [RETURN] lub przycisk joysticka przechodzi do ekranu zakupów następnego gracza.
|
||||||
|
(oczywiście dla graczy komputerowych ten ekran się nie pojawia)
|
||||||
|
|
||||||
|
4. Główny ekran gry
|
||||||
|
W linii statusowej widoczna jest informacja o tym który z graczy aktualnie może oddać strzał oraz zestaw innych informacji:
|
||||||
|
- nazwa czołgu gracza
|
||||||
|
- wybrana aktualnie broń ofensywna
|
||||||
|
- pozostała ilość punktów energii gracza i jeśli ma on aktywną broń defensywną posiadającą swój zasób energii - w nawiasie ten zasób
|
||||||
|
- ustawiony przez gracza kąt nachylenia lufy i kierunek jej nachylenia
|
||||||
|
- ustawiona przez gracza siła strzału (maksymalna siła strzału jest ograniczana przez energię gracza - nie może przekroczyć energii * 10 . Oznacza to, że mając małą ilość energii możemy oddać słabsze strzały
|
||||||
|
- numer aktualnej rundy rozgrywki
|
||||||
|
- prędkość i kierunek wiatru
|
||||||
|
- w nawiasie nazwę aktywnej broni defensywnej - jeśli jest jakaś aktywowana przez gracz
|
||||||
|
Tutaj klawiszologia jest prosta, klawisze kursora lub joustick: lewo/prawo - zmiana kąta nachylenia lufy, góra/dół - zmiana ustawienia siły strzału.
|
||||||
|
[SPACJA] lub przycisk joysticka naciśnięte krótko - oddanie strzału
|
||||||
|
[TAB] - wybór broni ofensywnej (ta opcja nie jest dostępna bezpośrednio joystickiem - trzeba wybrać Inventory)
|
||||||
|
klawisz [I] lub dłuższe przytrzymanie przycisku joysticka - przejście do Inventory
|
||||||
|
Inventory to ekran (a w zasadzie dwa) bliźniaczo podobny do ekranu zakupów. Zasady poruszania się są identyczne z tym, że tu nie kupujemy broni, ale wybieramy jedną z ofensywnych, którą będziemy strzelać lub aktywujemy broń defensywną.
|
||||||
|
Klawisz [M] - wyłączenie/włączenie muzyki w tle
|
||||||
|
Klawisz [S] - wyłączenie/włączenie dźwięków efektów.
|
||||||
|
Klawisz [O] - wymuszenie zakończenia gry (Game Over). W podsumowaniu wyników nie jest brana pod uwagę przerwana właśnie runda rozgrywki, a wyłącznie rundy zakończone wcześniej. Odpowiada to wciśnięciu klawisza [ESC] z tą różnicą, że wyświetlane jest podsumowanie oraz creditsy.
|
||||||
|
|
||||||
|
W czasie całej gry w dowolnym momencie (chyba że akurat gra komputer, wtedy czasem trzeba chwilę poczekać) można nacisnąć klawisz [ESC], który umożliwia przerwanie gry i powrót na początek (oczywiście jest zabezpieczenie przed przypadkowym naciśnięciem).
|
||||||
|
|
||||||
|
|
||||||
|
A tutaj zręby opisu działania poszczególnych broni, zasad punktacji itp:
|
||||||
|
|
||||||
|
—-----------------------
|
||||||
|
|
||||||
|
Najpierw co wiemy o energii czołgów
|
||||||
|
- Czołgi mają energię (a Ogry warstwy - jak cebula) - na starcie 99 jednostek
|
||||||
|
- Energii czołgom ubywa na 3 sposoby:
|
||||||
|
1. 1 jednostka po oddaniu każdego strzału
|
||||||
|
2. w czasie spadania (jeden piksel w dół 2 jednostki)
|
||||||
|
3. w chwili trafienia w czołg lub obok niego jakiegoś pocisku - i tu ilość odejmowanej energii zależy od odległości od centrum eksplozji i typu/siły rażenia pocisku.
|
||||||
|
|
||||||
|
Jak działa odejmowanie energii (i zarabianie kasy!)
|
||||||
|
Po każdej rundzie wyliczana jest ilość zdobytych/straconych pieniędzy robione jest to na podstawie dwóch zmiennych gromadzonych przez każdy z czołgów w trakcie rundy. Te zmienne to:
|
||||||
|
gain - energia "przechwycona" od trafionych czołgów (także jeśli trafimy w samego siebie :) i tu haczyk, jeśli pozostało nam bardzo mało energii opłacalne może być trafienie w siebie mocną bronią!
|
||||||
|
loose - energia stracona w wyniku eksplozji/upadku (i tu ważne liczona jest całkowita utrata energii nawet jeśli czołg ma w chwili trafienia mniej).
|
||||||
|
Dodatkowo czołg który wygrał rundę ma parametr gain (przechwyconej od trafionych czołgów energii) zwiększany o pozostałą mu na koniec rundy energię (bo nie zginął i powinien ją mieć - choć bywa też inaczej :) )
|
||||||
|
|
||||||
|
Konkretnie:
|
||||||
|
Po każdej rundzie:
|
||||||
|
money = money + (2 * (gain+energy))
|
||||||
|
money = money - loose
|
||||||
|
if money <0 then money=0
|
||||||
|
|
||||||
|
(na starcie każdej rundy gain i loose mają wartość 0)
|
||||||
|
|
||||||
|
W czasie rundy, jeśli w wyniku strzału oddanego przez czołg inny czołg zostanie trafiony, czołg oddający strzał "dostaje energię" zabraną czołgowi trafionemu.
|
||||||
|
czołg oddający strzał:
|
||||||
|
gain = gain + EnergyDecrease
|
||||||
|
czołg trafiony:
|
||||||
|
loose = loose + EnergyDecrease
|
||||||
|
|
||||||
|
gdzie EnergyDecrease to utrata energii w wyniku trafienia.
|
||||||
|
|
||||||
|
Oczywiście jednocześnie trafiony czołg traci ilość energii zapisaną w EnergyDecrease, z tym że tutaj strata nie może przekroczyć posiadanej energii.
|
||||||
|
|
||||||
|
Uwaga! Ekranowa reprezentacja pieniędzy ma na końcu dopisane dodatkowe 0 więc faktyczne mamy 10 razy więcej kasy niż wynika z powyższych obliczeń :)
|
||||||
|
|
||||||
|
Jak działa trafienie.
|
||||||
|
Każda broń, która skutkuje eksplozją, ma swój promień rażenia (ExplosionRadius).
|
||||||
|
Po eksplozji każdy czołg w jej zasięgu traci energię.
|
||||||
|
Działa to tak, że obliczana jest odległość trafianego czołgu od centrum eksplozji, zmniejszony o tę odległość ExplosionRadius jest mnożony przez 8 i w wyniku otrzymujemy EnergyDecrease.
|
||||||
|
Czyli w przypadku trafienia centralnie w czołg:
|
||||||
|
EnergyDecrease = ExplosionRadius * 8
|
||||||
|
a z każdym pikselem dalej od centrum ubywa o 8 jednostek mniej.
|
||||||
|
Nie wiem czy to zrozumiałe - ja rozumiem :)
|
||||||
|
Przykładowo, jeśli czołg zostanie trafiony centralnie przy pomocy Baby Missile - odejmowane jest mu 88 jednostek energii (11 * 8), co także oznacza, że przy trafieniu tym pociskiem w odległości 12 pikseli od czołgu - nie traci on energii wcale.
|
||||||
|
|
||||||
|
A oto wartości promienia rażenia (ExplosionRadius) dla poszczególnych broni:
|
||||||
|
|
||||||
|
Baby Missile - 11
|
||||||
|
Missile - 17
|
||||||
|
Baby Nuke - 25
|
||||||
|
Nuke - 31
|
||||||
|
LeapFrog - 17 15 13
|
||||||
|
Funky Bomb - 21 11 (* 5)
|
||||||
|
MIRV - 17 (* 5)
|
||||||
|
Death's Head - 31 (* 5)
|
||||||
|
Napalm - x 40 (ta broń jest inna i nie jest wyznaczana odległość od centrum, po prostu każdy czołg znajdujący się w zasięgu płomieni traci 40 jednostek energii - zmienna ExplosionRadius nie jest używana)
|
||||||
|
Hot Napalm - x 80 (zasada taka jak w Napalm)
|
||||||
|
Baby Roller - 11
|
||||||
|
Roller - 21
|
||||||
|
Heavy Roller - 31
|
||||||
|
Riot Charge - 31
|
||||||
|
Riot Blast - 0 (tak na prawdę - 61 ale przy tych broniach nie jest brana pod uwagę przy liczeniu ubytku energii tylko szerokości gruntu do opadnięcia)
|
||||||
|
Riot Bomb - 17
|
||||||
|
Heavy Riot Bomb - 29
|
||||||
|
Baby Digger - 0 (60 - jak w Riot Blast)
|
||||||
|
Digger - 0 (60 - jak wyżej)
|
||||||
|
Heavy Digger - 0 (60 - jak wyżej)
|
||||||
|
Baby Sandhog - 0 (60 - jak wyżej)
|
||||||
|
Sandhog - 0 (60 - jak wyżej)
|
||||||
|
Heavy Sandhog - 0 (60 - jak wyżej)
|
||||||
|
Dirt Clod - 12
|
||||||
|
Dirt Ball - 22
|
||||||
|
Ton of Dirt - 31
|
||||||
|
Liquid Dirt - 0 (może warto to zmienić?)
|
||||||
|
Dirt Charge - 0 (61 - jak wyżej)
|
||||||
|
Laser - x 100 (ale tu także jest inaczej - równo 100 tylko w przypadku bezpośredniego trafienia, zmienna ExplosionRadius nie jest używana, więc nie ma mnożenia przez 8 - po prostu odejmujemy 100 jednostek energii - czyli czołg zawsze ginie).
|
||||||
|
|
||||||
|
|
||||||
|
Duże punkty otrzymane przez gracza to ilość czołgów, które zginęły wcześniej niż on. Jeśli któryś z innych czołgów skapitulował wcześniej (Biała Flaga) nie jest doliczany do tych które zginęły i nie daje punktów.
|
||||||
|
Tylko te punkty decydują o kolejności w podsumowaniu
|
||||||
|
|
||||||
|
|
||||||
|
A teraz bronie defensywne:
|
||||||
|
White Flag - powoduje poddanie gracza (może czasem przydać się w sytuacji beznadziejnej). Zaletą jest to, że poddając się nie dajemy dużego punktu przeciwnikom i nie powodujemy, że któryś zyska na tym, że nas zgładzi, ograniczamy też stratę swojej energii czyli także kasy. I tu także ważna uwaga - to jedyna broń defensywna, którą można deaktywować. Wystarczy ponownie wejść do inventory i jeszcze raz wybrać jej aktywację.
|
||||||
|
Battery - w momencie aktywacji doładowuje energię czołgu do pełna (99 jednostek) i jednocześnie jest to jedyna broń defensywna, która nie deaktywuje innych broni defensywnych w przypadku jej użycia.
|
||||||
|
Parachute - nie chroni przed ubytkiem energii z powodu sąsiedniej eksplozji, powoduje że nie ubywa energii w czasie JEDNEGO spadania. Po takim upadku deaktywuje się i trzeba aktywować nowy spadochron.
|
||||||
|
Shield - najprostsza osłona działa dokładnie przeciwnie niż Parachute, nie chroni przed ubytkiem energii w czasie spadania, chroni za to przed ubytkiem energii spowodowanym JEDNĄ sąsiednią eksplozją. Chroni jednorazowo, bez znaczenia jak silna jest eksplozja (czy jest to tylko "draśnięcie", czy też bezpośrednie trafienie atomówką) i od razu po niej deaktywuje się.
|
||||||
|
Heavy Shield - osłona z własną energią (na starcie 99 jednostek), działa tak samo jak Shield (nie chroni przed upadkiem) z tym wyjątkiem, że ma własny zasób energii. Przy eksplozji w pierwszej kolejności zmniejszana jest energia tej osłony i jeśli dojdzie ona do 0 to osłona deaktywuje się i dalej zmniejszana jest energia czołgu. W związku z takim działaniem, czołg z tym typem osłony można "zabić" podkopując go, bo spadanie zmniejsza energię czołgu a nie osłony.
|
||||||
|
Force Shield - najmocniejsza osłona - działa tak jak Heavy Shield tyle że połączona z Parachute. Co ważne w jej przypadku upadek nie zabiera energii osłonie ani czołgowi. Zabierają ją tylko trafienia.
|
||||||
|
Bouncy Castle - broń agresywna :) . Działa następująco. W przypadku bezpośredniego trafienia w czołg (i osłonę) powoduje "odbicie" pocisku w przeciwnym kierunku z tą samą siłą z jaką był wystrzelony. W przypadku braku wiatru i różnicy poziomów broń trafia wtedy w czołg, który ją wystrzelił. Po takim odbiciu deaktywuje się. W związku z tym, że broń ta reaguje w ten sposób tylko na precyzyjne trafienia, jest także osłoną odpowiadającą działaniu Heavy Shield i ma na starcie 99 jednostek (prawdopodobnie trzeba będzie przemyśleć tę wartość i dać tu mniejszą).
|
||||||
|
Mag Deflector - druga broń agresywna :) . W przypadku bezpośredniego trafienia w czołg (i osłonę) powoduje przesunięcie punktu trafienia losowo w lewo lub prawą stronę chronionego czołgu, ale niezbyt daleko, więc można dostać "odłamkiem" przy silniejszej broni. Tak jak w przypadku Bouncy Castle jest także osłoną odpowiadającą działaniu Heavy Shield i ma na starcie 99 jednostek (prawdopodobnie i tutaj trzeba będzie przemyśleć tę wartość i dać mniejszą).
|
||||||
|
Nuclear Winter - nic nie dodaje, nic nie zabiera :) - w zasadzie to broń nie tyle defensywna co obosieczna. Zasypuje teren opadem "radioaktywnym", który jest zwyczajną glebą. Jeśli nie mamy pod ręką żadnej broni odkopującej teren i do tego osłony (najlepiej jednorazowej), to po takim "opadzie" będzie trzeba strzelić do siebie - bo będąc pod ziemią inaczej się nie da. Ewentualnie pozostaje zawsze White Flag.
|
||||||
|
Long Schlong - broń specjalna :) - kosztuje dużo, nie bardzo w czymkolwiek pomaga (poza ewentualnym odkopaniem się ale tylko przy niewielkim przysypaniu ale fanie się nazywa i wygląda :) - Można ją aktywować niezależnie od innych broni defensywnych i pozostaje aktywna do końca rundy (nie da się jej deaktywować).
|
||||||
|
|
||||||
|
W związku z odmiennym działaniem broni MIRV, Auto Defense i Mag Deflector wykorzystują tylko funkcję osłony przy trafieniu tą bronią.
|
||||||
|
|
||||||
|
Dodatkowo, żadna z osłon nie chroni przed Napalmem. Auto Defense czy Mag Deflector przy bezpośrednim trafieniu odbije je lub przeniesie obok, ale wystarczy trafić bardzo blisko czołgu i nie zadziała jego osłona.
|
||||||
|
|
||||||
|
Bronie White Flag i Nuclear Winter po aktywacji wymagają uruchomienia, jest to realizowanie przez "oddanie strzału" po aktywacji tej broni. Oczywiście strzał bronią ofensywną nie jest wtedy oddawany, a jedynie uruchamiana jest wybrana broń defensywna.
|
||||||
|
|
||||||
|
Można mieć aktywną tylko jedną broń defensywną w danej chwili (za wyjątkiem Long Schlong oczywiście :) ). Zawsze przed oddaniem strzału możemy zmienić decyzję i aktywować inną broni defensywną czy też dezaktywować White Flag.
|
||||||
|
Oczywiście aktywacja broni w momencie kiedy mamy już aktywowaną jakąś inną powoduje utratę tej poprzedniej (nie ma zwrotów :) ).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
+10
-10
@@ -76,16 +76,16 @@
|
|||||||
.MACRO WAIT
|
.MACRO WAIT
|
||||||
; WAIT
|
; WAIT
|
||||||
; waits one frame (1/50 s(PAL) or 1/60s(NTSC))
|
; waits one frame (1/50 s(PAL) or 1/60s(NTSC))
|
||||||
lda CONSOL
|
?zero LDA VCOUNT
|
||||||
cmp #6 ; START KEY
|
beq ?zero
|
||||||
beq ?nowait
|
bpl ?WA
|
||||||
LDA VCOUNT
|
sbc #10 ; last lines correction
|
||||||
ldy vcount
|
?WA cmp VCOUNT
|
||||||
?WA cpy VCOUNT
|
beq ?WA
|
||||||
BEQ ?WA
|
bcc ?WA
|
||||||
?wframe
|
?WFRAME cmp VCOUNT
|
||||||
cmp vcount
|
beq ?nowait
|
||||||
bne ?wframe
|
bcs ?WFRAME
|
||||||
?nowait
|
?nowait
|
||||||
.ENDM
|
.ENDM
|
||||||
;-------------------------------------
|
;-------------------------------------
|
||||||
|
|||||||
+388
-170
@@ -36,11 +36,11 @@
|
|||||||
;we decided it must go in 'English' to let other people work on it
|
;we decided it must go in 'English' to let other people work on it
|
||||||
|
|
||||||
.macro build
|
.macro build
|
||||||
dta d"148" ; number of this build (3 bytes)
|
dta d"1.00" ; number of this build (3 bytes)
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
icl 'definitions.asm'
|
icl 'definitions.asm'
|
||||||
icl 'artwork/sfx/rmt_feat.asm'
|
; icl 'artwork/sfx/rmt_feat.asm'
|
||||||
|
|
||||||
|
|
||||||
.zpvar xdraw .word = $80 ;variable X for plot
|
.zpvar xdraw .word = $80 ;variable X for plot
|
||||||
@@ -60,6 +60,7 @@
|
|||||||
.zpvar xtempDRAW .word ;same as above for XDRAW routine
|
.zpvar xtempDRAW .word ;same as above for XDRAW routine
|
||||||
.zpvar ytempDRAW .word ;same as above for XDRAW routine
|
.zpvar ytempDRAW .word ;same as above for XDRAW routine
|
||||||
.zpvar tempor2 .byte
|
.zpvar tempor2 .byte
|
||||||
|
.zpvar CreditsVScrol .byte
|
||||||
;--------------temps used in circle routine
|
;--------------temps used in circle routine
|
||||||
.zpvar xi .word ;X (word) in draw routine
|
.zpvar xi .word ;X (word) in draw routine
|
||||||
.zpvar fx .byte
|
.zpvar fx .byte
|
||||||
@@ -77,6 +78,7 @@
|
|||||||
.zpvar UnderTank1 .byte
|
.zpvar UnderTank1 .byte
|
||||||
.zpvar UnderTank2 .byte
|
.zpvar UnderTank2 .byte
|
||||||
;----------------------------
|
;----------------------------
|
||||||
|
.zpvar TestFlightFlag .byte ; For AI test flights ($ff - test, $00 - standard shoot flight)
|
||||||
.zpvar weaponPointer .word
|
.zpvar weaponPointer .word
|
||||||
.zpvar dliCounter .byte
|
.zpvar dliCounter .byte
|
||||||
.zpvar pressTimer .byte
|
.zpvar pressTimer .byte
|
||||||
@@ -85,36 +87,42 @@
|
|||||||
;.zpvar dliA .byte
|
;.zpvar dliA .byte
|
||||||
;.zpvar dliX .byte
|
;.zpvar dliX .byte
|
||||||
;.zpvar dliY .byte
|
;.zpvar dliY .byte
|
||||||
|
.zpvar sfx_effect .byte
|
||||||
|
.zpvar RMT_blocked .byte
|
||||||
|
;--------------
|
||||||
|
|
||||||
|
displayposition = modify
|
||||||
|
|
||||||
|
|
||||||
;* RMT ZeroPage addresses
|
;* RMT ZeroPage addresses
|
||||||
.zpvar p_tis .word
|
.zpvar RMT_Zero_Page_V .byte
|
||||||
.zpvar p_trackslbstable .word
|
; .zpvar p_tis .word
|
||||||
.zpvar p_trackshbstable .word
|
; .zpvar p_trackslbstable .word
|
||||||
.zpvar p_song .word
|
; .zpvar p_trackshbstable .word
|
||||||
.zpvar ns .word
|
; .zpvar p_song .word
|
||||||
.zpvar nr .word
|
; .zpvar ns .word
|
||||||
.zpvar nt .word
|
; .zpvar nr .word
|
||||||
.zpvar reg1 .byte
|
; .zpvar nt .word
|
||||||
.zpvar reg2 .byte
|
; .zpvar reg1 .byte
|
||||||
.zpvar reg3 .byte
|
; .zpvar reg2 .byte
|
||||||
.zpvar tmp .byte
|
; .zpvar reg3 .byte
|
||||||
IFT FEAT_COMMAND2
|
; .zpvar tmp .byte
|
||||||
.zpvar frqaddcmd2 .byte
|
; IFT FEAT_COMMAND2
|
||||||
EIF
|
; .zpvar frqaddcmd2 .byte
|
||||||
p_instrstable = p_tis
|
; EIF
|
||||||
|
; p_instrstable = p_tis
|
||||||
|
|
||||||
displayposition = modify
|
|
||||||
;-------------------------------
|
;-------------------------------
|
||||||
|
|
||||||
icl 'lib/atari.hea'
|
icl 'lib/atari.hea'
|
||||||
icl 'lib/macro.hea'
|
icl 'lib/macro.hea'
|
||||||
|
|
||||||
;splash screen and musix
|
;splash screen and musix
|
||||||
icl 'artwork/HIMARS14.asm'
|
icl 'artwork/Scorch50.asm'
|
||||||
;Game loading address
|
;Game loading address
|
||||||
ORG $3000
|
ORG $3000
|
||||||
WeaponFont
|
WeaponFont
|
||||||
ins 'artwork/weapons_AW5_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
|
||||||
;-----------------------------------------------
|
;-----------------------------------------------
|
||||||
@@ -124,18 +132,57 @@ WeaponFont
|
|||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
; Game Code
|
; Game Code
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
START
|
FirstSTART
|
||||||
|
mva #0 dmactls ; dark screen
|
||||||
|
jsr WaitOneFrame
|
||||||
|
|
||||||
|
; one time zero variables in RAM (non zero page)
|
||||||
|
lda #0
|
||||||
|
ldy #OneTimeZeroVariablesCount-1
|
||||||
|
@ sta OneTimeZeroVariables,y
|
||||||
|
dey
|
||||||
|
bpl @-
|
||||||
|
|
||||||
|
; initialize variables in RAM (non zero page)
|
||||||
|
ldy #initialvaluesCount-1
|
||||||
|
@ lda initialvaluesStart,y
|
||||||
|
sta variablesToInitialize,y
|
||||||
|
dey
|
||||||
|
bpl @-
|
||||||
|
|
||||||
|
; RMT INIT
|
||||||
|
lda #$f0 ;initial value
|
||||||
|
sta RMTSFXVOLUME ;sfx note volume * 16 (0,16,32,...,240)
|
||||||
|
|
||||||
|
lda #$ff ;initial value
|
||||||
|
sta sfx_effect
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
jsr RmtSongSelect
|
||||||
|
|
||||||
|
VMAIN VBLinterrupt,7 ;jsr SetVBL
|
||||||
|
|
||||||
|
START
|
||||||
; Startup sequence
|
; Startup sequence
|
||||||
jsr Initialize
|
jsr Initialize
|
||||||
|
|
||||||
|
;jsr GameOverScreen ; only for test !!!
|
||||||
|
|
||||||
|
lda #song_main_menu
|
||||||
|
jsr RmtSongSelect
|
||||||
|
|
||||||
|
|
||||||
jsr Options ;startup screen
|
jsr Options ;startup screen
|
||||||
lda escFlag
|
mva #0 dmactls ; dark screen
|
||||||
bne START
|
jsr WaitOneFrame
|
||||||
|
bit escFlag
|
||||||
|
bmi START
|
||||||
|
|
||||||
jsr EnterPlayerNames
|
jsr EnterPlayerNames
|
||||||
lda escFlag
|
mva #0 dmactls ; dark screen
|
||||||
bne START
|
jsr WaitOneFrame
|
||||||
|
bit escFlag
|
||||||
|
bmi START
|
||||||
|
|
||||||
jsr RandomizeSequence
|
jsr RandomizeSequence
|
||||||
; for the round #1 shooting sequence is random
|
; for the round #1 shooting sequence is random
|
||||||
@@ -144,15 +191,17 @@ MainGameLoop
|
|||||||
jsr CallPurchaseForEveryTank
|
jsr CallPurchaseForEveryTank
|
||||||
|
|
||||||
; issue #72 (glitches when switches)
|
; issue #72 (glitches when switches)
|
||||||
mva #0 dmactls
|
mva #0 dmactls ; dark screen
|
||||||
|
jsr WaitOneFrame
|
||||||
|
|
||||||
jsr GetRandomWind
|
jsr GetRandomWind
|
||||||
|
|
||||||
jsr RoundInit
|
jsr RoundInit
|
||||||
|
|
||||||
jsr MainRoundLoop
|
jsr MainRoundLoop
|
||||||
lda escFlag
|
bit escFlag
|
||||||
bne START
|
bmi START
|
||||||
|
jvs GoGameOver
|
||||||
|
|
||||||
mva #0 TankNr ;
|
mva #0 TankNr ;
|
||||||
|
|
||||||
@@ -171,25 +220,12 @@ MainGameLoop
|
|||||||
; Results are number of other deaths
|
; Results are number of other deaths
|
||||||
; before the player dies itself
|
; before the player dies itself
|
||||||
|
|
||||||
lda #song_end_round
|
lda #song_round_over
|
||||||
jsr RmtSongSelect
|
jsr RmtSongSelect
|
||||||
jsr DisplayResults
|
jsr DisplayResults
|
||||||
|
|
||||||
;check demo mode
|
jsr DemoModeOrKey
|
||||||
ldx numberOfPlayers
|
|
||||||
dex
|
|
||||||
checkForHuman ; if all in skillTable other than 0 then switch to DEMO MODE
|
|
||||||
lda skillTable,x
|
|
||||||
beq peopleAreHere
|
|
||||||
dex
|
|
||||||
bpl checkForHuman
|
|
||||||
; no people, just wait a bit
|
|
||||||
pause 150
|
|
||||||
jmp noKey
|
|
||||||
|
|
||||||
peopleAreHere
|
|
||||||
jsr getkey
|
|
||||||
noKey
|
|
||||||
ldx NumberOfPlayers
|
ldx NumberOfPlayers
|
||||||
dex
|
dex
|
||||||
CalculateGains
|
CalculateGains
|
||||||
@@ -202,7 +238,15 @@ CalculateGains
|
|||||||
; Important! If player has 10 energy and gets a central hit
|
; Important! If player has 10 energy and gets a central hit
|
||||||
; from nuke that would take 90 energy points, his loss
|
; from nuke that would take 90 energy points, his loss
|
||||||
; is 90, not 10
|
; is 90, not 10
|
||||||
|
|
||||||
|
; adding the remaining energy of the tank to gain
|
||||||
|
; winner gets more ! :)
|
||||||
|
lda Energy,x
|
||||||
|
adc gainL,x
|
||||||
|
sta gainL,x
|
||||||
|
bcc @+
|
||||||
|
inc gainH,x
|
||||||
|
@
|
||||||
; add gain * 2
|
; add gain * 2
|
||||||
asl gainL,x
|
asl gainL,x
|
||||||
rol gainH,x
|
rol gainH,x
|
||||||
@@ -235,14 +279,50 @@ zeromoney
|
|||||||
lda #0
|
lda #0
|
||||||
sta moneyL,x
|
sta moneyL,x
|
||||||
sta moneyH,x
|
sta moneyH,x
|
||||||
|
|
||||||
skipzeroing
|
skipzeroing
|
||||||
|
; and earned money for summary
|
||||||
|
clc
|
||||||
|
lda EarnedMoneyL,x
|
||||||
|
adc gainL,x
|
||||||
|
sta EarnedMoneyL,x
|
||||||
|
lda EarnedMoneyH,x
|
||||||
|
adc gainH,x
|
||||||
|
sta EarnedMoneyH,x
|
||||||
|
; substract lose
|
||||||
|
; if lose is greater than money then zero money
|
||||||
|
lda EarnedMoneyH,x
|
||||||
|
cmp loseH,x
|
||||||
|
bcc ezeromoney
|
||||||
|
bne esubstractlose
|
||||||
|
lda EarnedMoneyL,x
|
||||||
|
cmp loseL,x
|
||||||
|
bcc ezeromoney
|
||||||
|
esubstractlose
|
||||||
|
sec
|
||||||
|
lda EarnedMoneyL,x
|
||||||
|
sbc loseL,x
|
||||||
|
sta EarnedMoneyL,x
|
||||||
|
lda EarnedMoneyH,x
|
||||||
|
sbc loseH,x
|
||||||
|
sta EarnedMoneyH,x
|
||||||
|
jmp eskipzeroing
|
||||||
|
ezeromoney
|
||||||
|
lda #0
|
||||||
|
sta EarnedMoneyL,x
|
||||||
|
sta EarnedMoneyH,x
|
||||||
|
eskipzeroing
|
||||||
|
|
||||||
dex
|
dex
|
||||||
bpl CalculateGains
|
jpl CalculateGains
|
||||||
|
|
||||||
lda GameIsOver
|
lda GameIsOver
|
||||||
jne START
|
beq NoGameOverYet
|
||||||
|
GoGameOver
|
||||||
|
mva #0 dmactls ; dark screen
|
||||||
|
jsr WaitOneFrame
|
||||||
|
jsr GameOverScreen
|
||||||
|
jmp START
|
||||||
|
NoGameOverYet
|
||||||
inc CurrentRoundNr
|
inc CurrentRoundNr
|
||||||
lda #$0
|
lda #$0
|
||||||
sta dmactls ; issue #72
|
sta dmactls ; issue #72
|
||||||
@@ -266,9 +346,10 @@ skipzeroing
|
|||||||
lda #song_ingame
|
lda #song_ingame
|
||||||
jsr RmtSongSelect
|
jsr RmtSongSelect
|
||||||
|
|
||||||
|
jsr SetPMWidth
|
||||||
lda #0
|
lda #0
|
||||||
sta sizep0 ; P0-P1 widths
|
sta colpf2s ; status line "off"
|
||||||
sta sizep0+1
|
sta colpf1s
|
||||||
|
|
||||||
tax
|
tax
|
||||||
@ sta singleRoundVars,x
|
@ sta singleRoundVars,x
|
||||||
@@ -287,6 +368,8 @@ SettingEnergies
|
|||||||
sta Energy,x
|
sta Energy,x
|
||||||
sta eXistenZ,x
|
sta eXistenZ,x
|
||||||
sta LASTeXistenZ,x
|
sta LASTeXistenZ,x
|
||||||
|
lda #StandardBarrel ; standard barrel length
|
||||||
|
sta BarrelLength,x
|
||||||
; anything in eXistenZ table means that this tank exist
|
; anything in eXistenZ table means that this tank exist
|
||||||
; in the given round
|
; in the given round
|
||||||
lda #<1000
|
lda #<1000
|
||||||
@@ -319,14 +402,19 @@ SettingEnergies
|
|||||||
|
|
||||||
jsr SetMainScreen
|
jsr SetMainScreen
|
||||||
jsr ColorsOfSprites
|
jsr ColorsOfSprites
|
||||||
lda #0
|
|
||||||
sta colpf2s ; status line "off"
|
; lda #90 ; barrel fully erect
|
||||||
sta colpf1s
|
; 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
|
||||||
|
|
||||||
mva #0 TankSequencePointer
|
mva #$00 TankSequencePointer
|
||||||
|
|
||||||
;---------round screen is ready---------
|
;---------round screen is ready---------
|
||||||
mva #TextForegroundColor colpf1s ; status line "on"
|
mva #TextForegroundColor colpf1s ; status line "on"
|
||||||
rts
|
rts
|
||||||
@@ -410,6 +498,8 @@ DoNotFinishTheRound
|
|||||||
ldx tankNr
|
ldx tankNr
|
||||||
lda TankStatusColoursTable,x
|
lda TankStatusColoursTable,x
|
||||||
sta colpf2s ; set color of status line
|
sta colpf2s ; set color of status line
|
||||||
|
jsr PutTankNameOnScreen
|
||||||
|
jsr DisplayStatus
|
||||||
|
|
||||||
lda SkillTable,x
|
lda SkillTable,x
|
||||||
beq ManualShooting
|
beq ManualShooting
|
||||||
@@ -418,21 +508,18 @@ RoboTanks
|
|||||||
; robotanks shoot here
|
; robotanks shoot here
|
||||||
; TankNr still in X
|
; TankNr still in X
|
||||||
jsr ArtificialIntelligence
|
jsr ArtificialIntelligence
|
||||||
jsr PutTankNameOnScreen
|
;pause 30
|
||||||
jsr DisplayStatus
|
|
||||||
pause 30
|
|
||||||
ldx TankNr
|
ldx TankNr
|
||||||
|
jsr DisplayStatus ; to make visible AI selected defensive (and offensive :) )
|
||||||
jsr MoveBarrelToNewPosition
|
jsr MoveBarrelToNewPosition
|
||||||
lda kbcode
|
lda kbcode
|
||||||
cmp #28 ; ESC
|
cmp #28 ; ESC
|
||||||
bne @+
|
bne @+
|
||||||
jsr AreYouSure
|
jsr AreYouSure
|
||||||
lda escFlag
|
bit escFlag
|
||||||
seq:rts
|
spl:rts
|
||||||
@
|
@
|
||||||
|
|
||||||
; let's move the tank's barrel so it points the right
|
|
||||||
; direction
|
|
||||||
jmp AfterManualShooting
|
jmp AfterManualShooting
|
||||||
|
|
||||||
ManualShooting
|
ManualShooting
|
||||||
@@ -440,7 +527,7 @@ ManualShooting
|
|||||||
jsr WaitForKeyRelease
|
jsr WaitForKeyRelease
|
||||||
jsr BeforeFire
|
jsr BeforeFire
|
||||||
lda escFlag
|
lda escFlag
|
||||||
seq:rts
|
seq:rts ; keys Esc or O
|
||||||
|
|
||||||
AfterManualShooting
|
AfterManualShooting
|
||||||
mva #0 plot4x4color
|
mva #0 plot4x4color
|
||||||
@@ -466,7 +553,7 @@ StandardShoot
|
|||||||
jsr DecreaseWeaponBeforeShoot
|
jsr DecreaseWeaponBeforeShoot
|
||||||
jsr DisplayStatus
|
jsr DisplayStatus
|
||||||
|
|
||||||
ldx TankNr
|
; ldx TankNr
|
||||||
dec Energy,x ; lower energy to eventually let tanks commit suicide
|
dec Energy,x ; lower energy to eventually let tanks commit suicide
|
||||||
|
|
||||||
ShootNow
|
ShootNow
|
||||||
@@ -511,16 +598,16 @@ AfterExplode
|
|||||||
NoFallDown2
|
NoFallDown2
|
||||||
;here tanks are falling down
|
;here tanks are falling down
|
||||||
mva tankNr tempor2
|
mva tankNr tempor2
|
||||||
mvx #0 TankNr
|
ldx NumberOfPlayers
|
||||||
|
dex
|
||||||
TanksFallDown
|
TanksFallDown
|
||||||
|
stx TankNr
|
||||||
lda eXistenZ,x
|
lda eXistenZ,x
|
||||||
beq NoExistNoFall
|
beq NoExistNoFall
|
||||||
jsr TankFalls
|
jsr TankFalls
|
||||||
NoExistNoFall
|
NoExistNoFall
|
||||||
inc:ldx TankNr
|
dex
|
||||||
cpx NumberOfPlayers
|
bpl TanksFallDown
|
||||||
bne TanksFallDown
|
|
||||||
mva tempor2 TankNr
|
mva tempor2 TankNr
|
||||||
missed
|
missed
|
||||||
|
|
||||||
@@ -538,30 +625,8 @@ NextPlayerShoots
|
|||||||
SeteXistenZ
|
SeteXistenZ
|
||||||
lda Energy,x
|
lda Energy,x
|
||||||
sta eXistenZ,x
|
sta eXistenZ,x
|
||||||
sta L1
|
|
||||||
|
jsr MaxForceCalculate
|
||||||
;DATA L1,L2
|
|
||||||
;Multiplication 8bit*8bit,
|
|
||||||
;result 16bit
|
|
||||||
;this algiorithm is a little longer than one in Ruszczyc 6502 book
|
|
||||||
;but it is faster
|
|
||||||
|
|
||||||
LDy #8
|
|
||||||
LDA #0
|
|
||||||
CLC
|
|
||||||
LP0
|
|
||||||
ror
|
|
||||||
ROR L1
|
|
||||||
BCC B0
|
|
||||||
CLC
|
|
||||||
ADC #10 ; (L2) multiplication by 10
|
|
||||||
B0 DEY
|
|
||||||
BNE LP0
|
|
||||||
ror
|
|
||||||
ROR L1
|
|
||||||
STA MaxForceTableH,x
|
|
||||||
lda L1
|
|
||||||
sta MaxForceTableL,x
|
|
||||||
|
|
||||||
dex
|
dex
|
||||||
bpl SeteXistenZ
|
bpl SeteXistenZ
|
||||||
@@ -736,16 +801,16 @@ ldahashzero
|
|||||||
NotNegativeEnergy
|
NotNegativeEnergy
|
||||||
sta Energy,x
|
sta Energy,x
|
||||||
;now increase the gain of the shooting tank
|
;now increase the gain of the shooting tank
|
||||||
phx
|
; phx
|
||||||
ldx TankNr
|
ldy TankNr
|
||||||
clc
|
clc
|
||||||
lda gainL,x
|
lda gainL,y
|
||||||
adc EnergyDecrease
|
adc EnergyDecrease
|
||||||
sta gainL,x
|
sta gainL,y
|
||||||
lda gainH,x
|
lda gainH,y
|
||||||
adc #$00
|
adc #$00
|
||||||
sta gainH,x
|
sta gainH,y
|
||||||
plx
|
; plx
|
||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
|
|
||||||
@@ -787,12 +852,7 @@ NotNegativeShieldEnergy
|
|||||||
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
|
||||||
lda xtankstableL,x
|
jsr SetupXYdraw
|
||||||
sta xdraw
|
|
||||||
lda xtankstableH,x
|
|
||||||
sta xdraw+1
|
|
||||||
lda yTanksTable,x
|
|
||||||
sta ydraw
|
|
||||||
lda #1 ; Missile
|
lda #1 ; Missile
|
||||||
jsr ExplosionDirect
|
jsr ExplosionDirect
|
||||||
jmp MainRoundLoop.continueMainRoundLoopAfterSeppuku
|
jmp MainRoundLoop.continueMainRoundLoopAfterSeppuku
|
||||||
@@ -826,7 +886,37 @@ NotNegativeShieldEnergy
|
|||||||
.endr
|
.endr
|
||||||
@ rts
|
@ rts
|
||||||
.endp
|
.endp
|
||||||
|
;--------------------------------------------------
|
||||||
|
.proc MaxForceCalculate
|
||||||
|
; calculates max force for tank (tanknr in X)
|
||||||
|
; Energy of tank X in A
|
||||||
|
;--------------------------------------------------
|
||||||
|
sta L1
|
||||||
|
|
||||||
|
;DATA L1,L2
|
||||||
|
;Multiplication 8bit*8bit,
|
||||||
|
;result 16bit
|
||||||
|
;this algiorithm is a little longer than one in Ruszczyc 6502 book
|
||||||
|
;but it is faster
|
||||||
|
|
||||||
|
LDy #8
|
||||||
|
LDA #0
|
||||||
|
CLC
|
||||||
|
LP0
|
||||||
|
ror
|
||||||
|
ROR L1
|
||||||
|
BCC B0
|
||||||
|
CLC
|
||||||
|
ADC #10 ; (L2) multiplication by 10
|
||||||
|
B0 DEY
|
||||||
|
BNE LP0
|
||||||
|
ror
|
||||||
|
ROR L1
|
||||||
|
STA MaxForceTableH,x
|
||||||
|
lda L1
|
||||||
|
sta MaxForceTableL,x
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
.proc PMoutofScreen
|
.proc PMoutofScreen
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
@@ -856,7 +946,7 @@ NotNegativeShieldEnergy
|
|||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
ldx #$3f ; TODO: maxweapons
|
ldx #$3f ; TODO: maxweapons
|
||||||
@ lda #$0
|
@ lda #$0
|
||||||
cpx #48 ; White Flag
|
cpx #ind_White_Flag_____ ; White Flag
|
||||||
bne @+
|
bne @+
|
||||||
lda #99
|
lda #99
|
||||||
@ sta TanksWeapon1,x
|
@ sta TanksWeapon1,x
|
||||||
@@ -890,17 +980,15 @@ deletePtr = temp
|
|||||||
inw deletePtr
|
inw deletePtr
|
||||||
cpw deletePtr #variablesEnd
|
cpw deletePtr #variablesEnd
|
||||||
bne @-
|
bne @-
|
||||||
|
|
||||||
mwa #1024 RandBoundaryHigh
|
mwa #1024 RandBoundaryHigh
|
||||||
mva #$ff LastWeapon
|
mva #$ff LastWeapon
|
||||||
sta HowMuchToFall
|
sta HowMuchToFall
|
||||||
mva #1 color
|
mva #1 color
|
||||||
|
|
||||||
jsr WeaponCleanup
|
jsr SetStandardBarrels
|
||||||
|
jsr WeaponCleanup
|
||||||
|
|
||||||
|
|
||||||
mva #TextBackgroundColor colpf2s
|
|
||||||
mva #TextForegroundColor colpf3s
|
|
||||||
mva #>WeaponFont chbas
|
mva #>WeaponFont chbas
|
||||||
|
|
||||||
;parameter for old plot (unPlot) max 5 points
|
;parameter for old plot (unPlot) max 5 points
|
||||||
@@ -925,6 +1013,47 @@ SetunPlots
|
|||||||
; sta dmactls
|
; sta dmactls
|
||||||
lda #$03 ; P/M on
|
lda #$03 ; P/M on
|
||||||
sta pmcntl
|
sta pmcntl
|
||||||
|
jsr SetPMWidth
|
||||||
|
lda #%00100000 ; P/M priorities (multicolor players on)
|
||||||
|
sta gtictls
|
||||||
|
jsr PMoutofScreen
|
||||||
|
|
||||||
|
;let the tanks be visible!
|
||||||
|
ldx #(maxPlayers-1)
|
||||||
|
lda #99 ; tank is visible
|
||||||
|
MakeTanksVisible
|
||||||
|
sta eXistenZ,x
|
||||||
|
dex
|
||||||
|
bpl MakeTanksVisible
|
||||||
|
|
||||||
|
mva #1 CurrentRoundNr ;we start from round 1
|
||||||
|
mva #6 NTSCcounter
|
||||||
|
|
||||||
|
; ; RMT INIT
|
||||||
|
; lda #$f0 ;initial value
|
||||||
|
; sta RMTSFXVOLUME ;sfx note volume * 16 (0,16,32,...,240)
|
||||||
|
;
|
||||||
|
; lda #$ff ;initial value
|
||||||
|
; sta sfx_effect
|
||||||
|
;
|
||||||
|
; lda #0
|
||||||
|
; jsr RmtSongSelect
|
||||||
|
;
|
||||||
|
; VMAIN VBLinterrupt,7 ;jsr SetVBL
|
||||||
|
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
;--------------------------------------------------
|
||||||
|
.proc SetStandardBarrels
|
||||||
|
ldx #maxPlayers-1
|
||||||
|
lda #StandardBarrel ; standard barrel length
|
||||||
|
@ sta BarrelLength,x
|
||||||
|
dex
|
||||||
|
bpl @-
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
;--------------------------------------------------
|
||||||
|
.proc SetPMWidth
|
||||||
lda #$00
|
lda #$00
|
||||||
sta sizep0 ; P0-P3 widths
|
sta sizep0 ; P0-P3 widths
|
||||||
sta sizep0+1
|
sta sizep0+1
|
||||||
@@ -932,43 +1061,7 @@ SetunPlots
|
|||||||
sta sizep0+3
|
sta sizep0+3
|
||||||
lda #%01010101
|
lda #%01010101
|
||||||
sta sizem ; all missiles, double width
|
sta sizem ; all missiles, double width
|
||||||
lda #%00100000 ; P/M priorities (multicolor players on)
|
rts
|
||||||
sta gtictls
|
|
||||||
jsr PMoutofScreen
|
|
||||||
|
|
||||||
;let the tanks be visible!
|
|
||||||
ldx #(maxPlayers-1)
|
|
||||||
lda #1 ; tank is visible
|
|
||||||
MakeTanksVisible
|
|
||||||
sta eXistenZ,x
|
|
||||||
dex
|
|
||||||
bpl MakeTanksVisible
|
|
||||||
|
|
||||||
|
|
||||||
ldx #0
|
|
||||||
txa
|
|
||||||
ClearResults
|
|
||||||
sta ResultsTable,x
|
|
||||||
inx
|
|
||||||
cpx #MaxPlayers
|
|
||||||
bne ClearResults
|
|
||||||
|
|
||||||
mva #1 CurrentRoundNr ;we start from round 1
|
|
||||||
mva #6 NTSCcounter
|
|
||||||
|
|
||||||
; RMT INIT
|
|
||||||
lda #$f0 ;initial value
|
|
||||||
sta RMTSFXVOLUME ;sfx note volume * 16 (0,16,32,...,240)
|
|
||||||
;
|
|
||||||
lda #$ff ;initial value
|
|
||||||
sta sfx_effect
|
|
||||||
;
|
|
||||||
lda #0
|
|
||||||
jsr RmtSongSelect
|
|
||||||
;
|
|
||||||
VMAIN VBLinterrupt,6 ;jsr SetVBL
|
|
||||||
|
|
||||||
rts
|
|
||||||
.endp
|
.endp
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
.proc DLIinterruptGraph
|
.proc DLIinterruptGraph
|
||||||
@@ -992,12 +1085,78 @@ ClearResults
|
|||||||
rti
|
rti
|
||||||
.endp
|
.endp
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
|
.proc DLIinterruptOptions
|
||||||
|
;sta dliA
|
||||||
|
;sty dliY
|
||||||
|
pha
|
||||||
|
; lda dliColorsBack
|
||||||
|
lda #0
|
||||||
|
sta COLPF1
|
||||||
|
lda dliColorsFore
|
||||||
|
sta COLPF2
|
||||||
|
pla
|
||||||
|
rti
|
||||||
|
.endp
|
||||||
|
;--------------------------------------------------
|
||||||
|
.proc DLIinterruptGameOver
|
||||||
|
;sta dliA
|
||||||
|
;sty dliY
|
||||||
|
pha
|
||||||
|
phy
|
||||||
|
lda dliCounter
|
||||||
|
bne EndofPMG
|
||||||
|
lda #%00100000 ; playfield after P/M
|
||||||
|
STA WSYNC
|
||||||
|
sta gtictl
|
||||||
|
bne EndOfDLI_GO
|
||||||
|
EndofPMG
|
||||||
|
cmp #1
|
||||||
|
bne ColoredLines
|
||||||
|
lda #%00100100 ; playfield before P/M
|
||||||
|
STA WSYNC
|
||||||
|
sta gtictl
|
||||||
|
bne EndOfDLI_GO
|
||||||
|
ColoredLines
|
||||||
|
cmp #9
|
||||||
|
beq CreditsScroll
|
||||||
|
tay
|
||||||
|
lda GameOverColoursTable-3,y ; -2 becouse this is DLI nr 2 and -1 (labels line)
|
||||||
|
ldy #$0a ; text colour (brightnes)
|
||||||
|
STA WSYNC
|
||||||
|
sta COLPF2
|
||||||
|
sty COLPF1
|
||||||
|
bne EndOfDLI_GO
|
||||||
|
CreditsScroll
|
||||||
|
lda #$00
|
||||||
|
sta COLPF2
|
||||||
|
inc CreditsVScrol
|
||||||
|
lda CreditsVScrol
|
||||||
|
cmp #32 ;not to fast
|
||||||
|
beq nextlinedisplay
|
||||||
|
:2 lsr ;not to fast
|
||||||
|
sta VSCROL
|
||||||
|
jmp EndOfDLI_GO
|
||||||
|
nextlinedisplay
|
||||||
|
lda #0
|
||||||
|
sta CreditsVScrol
|
||||||
|
sta VSCROL
|
||||||
|
adw DLCreditsAddr #40
|
||||||
|
cpw DLCreditsAddr #CreditsLastLine
|
||||||
|
bne EndOfDLI_GO
|
||||||
|
mwa #Credits DLCreditsAddr
|
||||||
|
EndOfDLI_GO
|
||||||
|
inc dliCounter
|
||||||
|
ply
|
||||||
|
pla
|
||||||
|
rti
|
||||||
|
.endp
|
||||||
|
;--------------------------------------------------
|
||||||
.proc DLIinterruptText
|
.proc DLIinterruptText
|
||||||
;sta dliA
|
;sta dliA
|
||||||
pha
|
pha
|
||||||
sta WSYNC
|
sta WSYNC
|
||||||
mva #TextBackgroundColor colpf2
|
mva #TextBackgroundColor COLPF2
|
||||||
mva #TextForegroundColor colpf3
|
mva #TextForegroundColor COLPF3
|
||||||
;lda dliA
|
;lda dliA
|
||||||
pla
|
pla
|
||||||
DLIinterruptNone
|
DLIinterruptNone
|
||||||
@@ -1024,7 +1183,8 @@ itsPAL
|
|||||||
; pressTimer is trigger tick counter. always 50 ticks / s
|
; pressTimer is trigger tick counter. always 50 ticks / s
|
||||||
bit:smi:inc pressTimer ; timer halted if >127. max time measured 2.5 s
|
bit:smi:inc pressTimer ; timer halted if >127. max time measured 2.5 s
|
||||||
|
|
||||||
|
bit RMT_blocked
|
||||||
|
bmi SkipRMTVBL
|
||||||
; ------- RMT -------
|
; ------- RMT -------
|
||||||
lda sfx_effect
|
lda sfx_effect
|
||||||
bmi lab2
|
bmi lab2
|
||||||
@@ -1040,12 +1200,12 @@ itsPAL
|
|||||||
lab2
|
lab2
|
||||||
jsr RASTERMUSICTRACKER+3 ;1 play
|
jsr RASTERMUSICTRACKER+3 ;1 play
|
||||||
; ------- RMT -------
|
; ------- RMT -------
|
||||||
|
SkipRMTVBL
|
||||||
exitVBL
|
exitVBL
|
||||||
ply
|
ply
|
||||||
plx
|
plx
|
||||||
pla
|
pla
|
||||||
jmp SYSVBV
|
jmp XITVBV
|
||||||
.endp
|
.endp
|
||||||
;----------------------------------------------
|
;----------------------------------------------
|
||||||
.proc RandomizeSequence0
|
.proc RandomizeSequence0
|
||||||
@@ -1177,20 +1337,30 @@ LimitForce
|
|||||||
.endp
|
.endp
|
||||||
;----------------------------------------------
|
;----------------------------------------------
|
||||||
.proc MoveBarrelToNewPosition
|
.proc MoveBarrelToNewPosition
|
||||||
|
mva #1 Erase
|
||||||
|
jsr DrawTankNr.BarrelChange
|
||||||
|
mva #0 Erase
|
||||||
|
MoveBarrel
|
||||||
|
mva #sfx_set_power_2 sfx_effect
|
||||||
jsr DrawTankNr
|
jsr DrawTankNr
|
||||||
jsr DisplayStatus.displayAngle
|
jsr DisplayStatus.displayAngle
|
||||||
ldx TankNr
|
; ldx TankNr
|
||||||
|
mva #1 Erase
|
||||||
|
jsr WaitOneFrame
|
||||||
|
jsr DrawTankNr.BarrelChange
|
||||||
|
mva #0 Erase
|
||||||
lda NewAngle
|
lda NewAngle
|
||||||
cmp AngleTable,x
|
cmp AngleTable,x
|
||||||
beq BarrelPositionIsFine
|
beq BarrelPositionIsFine
|
||||||
bcc rotateLeft ; older is bigger
|
bcc rotateLeft ; older is bigger
|
||||||
rotateRight;older is lower
|
rotateRight;older is lower
|
||||||
inc angleTable,x
|
inc angleTable,x
|
||||||
jmp MoveBarrelToNewPosition
|
jmp MoveBarrel
|
||||||
rotateLeft
|
rotateLeft
|
||||||
dec angleTable,x
|
dec angleTable,x
|
||||||
jmp MoveBarrelToNewPosition
|
jmp MoveBarrel
|
||||||
BarrelPositionIsFine
|
BarrelPositionIsFine
|
||||||
|
jsr DrawTankNr
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.endp
|
.endp
|
||||||
@@ -1299,7 +1469,7 @@ nextishigher
|
|||||||
and #$3f ;CTRL and SHIFT ellimination
|
and #$3f ;CTRL and SHIFT ellimination
|
||||||
cmp #28 ; ESC
|
cmp #28 ; ESC
|
||||||
bne getkeyend
|
bne getkeyend
|
||||||
mvx #1 escFlag
|
mvx #$80 escFlag
|
||||||
bne getkeyend
|
bne getkeyend
|
||||||
|
|
||||||
checkJoyGetKey
|
checkJoyGetKey
|
||||||
@@ -1348,6 +1518,54 @@ getkeyend
|
|||||||
bne WaitForKeyRelease
|
bne WaitForKeyRelease
|
||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
|
;--------------------------------------------------
|
||||||
|
.proc IsKeyPressed ; A=0 - yes , A>0 - no
|
||||||
|
;--------------------------------------------------
|
||||||
|
lda SKSTAT
|
||||||
|
and #%00000100
|
||||||
|
beq @+
|
||||||
|
lda #1
|
||||||
|
@ and TRIG0S
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
;--------------------------------------------------
|
||||||
|
.proc DemoModeOrKey
|
||||||
|
;--------------------------------------------------
|
||||||
|
;check demo mode
|
||||||
|
ldx numberOfPlayers
|
||||||
|
dex
|
||||||
|
checkForHuman ; if all in skillTable other than 0 then switch to DEMO MODE
|
||||||
|
lda skillTable,x
|
||||||
|
beq peopleAreHere
|
||||||
|
dex
|
||||||
|
bpl checkForHuman
|
||||||
|
; no people, just wait a bit
|
||||||
|
;pause 150
|
||||||
|
ldy #75
|
||||||
|
jsr PauseYFrames
|
||||||
|
jmp noKey
|
||||||
|
|
||||||
|
peopleAreHere
|
||||||
|
jsr getkey
|
||||||
|
noKey
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
.proc WaitOneFrame
|
||||||
|
lda CONSOL
|
||||||
|
cmp #6 ; START KEY
|
||||||
|
beq @+
|
||||||
|
wait
|
||||||
|
@ rts
|
||||||
|
.endp
|
||||||
|
.proc PauseYFrames
|
||||||
|
; Y - number of frames to wait (divided by 2)
|
||||||
|
; pauses for maximally 510 frames (255 * 2)
|
||||||
|
@ jsr WaitOneFrame
|
||||||
|
jsr WaitOneFrame
|
||||||
|
dey
|
||||||
|
bne @-
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
.proc RmtSongSelect
|
.proc RmtSongSelect
|
||||||
@@ -1355,9 +1573,12 @@ getkeyend
|
|||||||
; starting song line 0-255 to A reg
|
; starting song line 0-255 to A reg
|
||||||
bit noMusic
|
bit noMusic
|
||||||
spl:lda #song_silencio
|
spl:lda #song_silencio
|
||||||
|
mvx #$ff RMT_blocked
|
||||||
ldx #<MODUL ;low byte of RMT module to X reg
|
ldx #<MODUL ;low byte of RMT module to X reg
|
||||||
ldy #>MODUL ;hi byte of RMT module to Y reg
|
ldy #>MODUL ;hi byte of RMT module to Y reg
|
||||||
jmp RASTERMUSICTRACKER ;Init, :RTS
|
jsr RASTERMUSICTRACKER ;Init
|
||||||
|
mva #0 RMT_blocked
|
||||||
|
rts
|
||||||
.endp
|
.endp
|
||||||
;----------------------------------------------
|
;----------------------------------------------
|
||||||
icl 'weapons.asm'
|
icl 'weapons.asm'
|
||||||
@@ -1376,7 +1597,7 @@ font4x4
|
|||||||
ins 'artwork/font4x4s.bmp',+62
|
ins 'artwork/font4x4s.bmp',+62
|
||||||
;----------------------------------------------
|
;----------------------------------------------
|
||||||
TankFont
|
TankFont
|
||||||
ins 'artwork/tanksv2.fnt'
|
ins 'artwork/tanksv3.fnt',+0,352 ; 44 characters only
|
||||||
;----------------------------------------------
|
;----------------------------------------------
|
||||||
icl 'variables.asm'
|
icl 'variables.asm'
|
||||||
;----------------------------------------------
|
;----------------------------------------------
|
||||||
@@ -1384,26 +1605,23 @@ TankFont
|
|||||||
; reserved space for RMT player
|
; reserved space for RMT player
|
||||||
.ds $0320
|
.ds $0320
|
||||||
.align $100
|
.align $100
|
||||||
|
PLAYER
|
||||||
.ECHO 'PLAYER: ',*
|
.ECHO 'PLAYER: ',*
|
||||||
icl 'artwork/sfx/rmtplayr_game.asm'
|
icl 'artwork/sfx/rmtplayr.a65'
|
||||||
|
|
||||||
MODUL equ $b000 ;address of RMT module
|
MODUL equ $b000 ;address of RMT module
|
||||||
opt h- ;RMT module is standard Atari binary file already
|
opt h- ;RMT module is standard Atari binary file already
|
||||||
ins "artwork/sfx/scorch_trial0f_stripped.rmt" ;include music RMT module
|
ins "artwork/sfx/schorch_str2.rmt" ;include music RMT module
|
||||||
opt h+
|
opt h+
|
||||||
;
|
;
|
||||||
;
|
;
|
||||||
TheEnd
|
TheEnd
|
||||||
.ECHO 'TheEnd: ',TheEnd
|
.ECHO 'TheEnd: ',TheEnd
|
||||||
.if TheEnd > PMGraph + $300
|
;.if TheEnd > PMGraph + $300
|
||||||
.error "memory conflict"
|
; .error "memory conflict"
|
||||||
|
;.endif
|
||||||
.endif
|
|
||||||
;----------------------------------------------
|
|
||||||
; Player/missile memory
|
|
||||||
org $b800
|
|
||||||
PMGraph
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
run START
|
|
||||||
|
run FirstSTART
|
||||||
|
|||||||
BIN
Binary file not shown.
+415
-134
@@ -1,4 +1,4 @@
|
|||||||
; @com.wudsn.ide.asm.mainsourcefile=scorch.asm
|
; @com.wudsn.ide.asm.mainsourcefile=scorch.asm
|
||||||
|
|
||||||
|
|
||||||
.IF *>0
|
.IF *>0
|
||||||
@@ -16,23 +16,55 @@
|
|||||||
; - money each player has on the beginning of the game (moneyL i moneyH)
|
; - money each player has on the beginning of the game (moneyL i moneyH)
|
||||||
; - and I am sure maxwind, gravity, no_of_rounds in a game, speed of shell flight
|
; - and I am sure maxwind, gravity, no_of_rounds in a game, speed of shell flight
|
||||||
|
|
||||||
|
jsr clearscreen ;let the screen be clean
|
||||||
|
|
||||||
mwa #OptionsDL dlptrs
|
mwa #OptionsDL dlptrs
|
||||||
; lda dmactls
|
; lda dmactls
|
||||||
; and #$fc
|
; and #$fc
|
||||||
; ora #$02 ; normal screen width
|
; ora #$02 ; normal screen width
|
||||||
lda #%00110010 ; normal screen width, DL on, P/M off
|
; lda #%00110010 ; normal screen width, DL on, P/M off
|
||||||
|
lda #%00111110 ; normal screen width, DL on, P/M on
|
||||||
sta dmactls
|
sta dmactls
|
||||||
|
jsr SetPMWidth
|
||||||
VDLI DLIinterruptText.DLIinterruptNone ; jsr SetDLI for text screen without DLIs
|
mva #TextBackgroundColor colpf2s
|
||||||
|
mva #TextForegroundColor colpf3s
|
||||||
|
mva #$ca colpf1s
|
||||||
|
|
||||||
|
VDLI DLIinterruptOptions ; jsr SetDLI for Options text screen
|
||||||
|
|
||||||
|
; -------- setup bottom (tanks) line
|
||||||
|
lda NumberOfPlayers
|
||||||
|
pha
|
||||||
|
lda mountainsDeltaTableH
|
||||||
|
sta mountainDeltaH
|
||||||
|
lda mountainsDeltaTableL
|
||||||
|
sta mountainDeltaL
|
||||||
|
mva #6 NumberOfPlayers
|
||||||
|
jsr PMoutofScreen ;let P/M disappear
|
||||||
|
jsr clearscreen ;let the screen be clean
|
||||||
|
jsr ClearPMmemory
|
||||||
|
jsr placetanks ;let the tanks be evenly placed
|
||||||
|
jsr calculatemountains ;let mountains be easy for the eye
|
||||||
|
jsr ColorsOfSprites
|
||||||
|
jsr drawmountains ;draw them
|
||||||
|
ldx NumberOfPlayers
|
||||||
|
dex
|
||||||
|
@ jsr RandomizeAngle
|
||||||
|
sta AngleTable,x
|
||||||
|
dex
|
||||||
|
bpl @-
|
||||||
|
jsr drawtanks ;finally draw tanks
|
||||||
|
pla
|
||||||
|
sta NumberOfPlayers
|
||||||
|
; --------
|
||||||
|
|
||||||
mva #0 OptionsY
|
mva #0 OptionsY
|
||||||
|
|
||||||
OptionsMainLoop
|
OptionsMainLoop
|
||||||
|
|
||||||
jsr OptionsInversion
|
jsr OptionsInversion
|
||||||
jsr getkey
|
jsr getkey
|
||||||
ldx escFlag
|
bit escFlag
|
||||||
seq:rts
|
spl:rts
|
||||||
|
|
||||||
cmp #$f ;cursor down
|
cmp #$f ;cursor down
|
||||||
bne OptionsNoDown
|
bne OptionsNoDown
|
||||||
@@ -222,8 +254,8 @@ OptionsYLoop
|
|||||||
|
|
||||||
ManualPurchase
|
ManualPurchase
|
||||||
jsr Purchase
|
jsr Purchase
|
||||||
ldx escFlag
|
bit escFlag
|
||||||
seq:rts
|
spl:rts
|
||||||
AfterManualPurchase
|
AfterManualPurchase
|
||||||
|
|
||||||
inc:lda TankNr
|
inc:lda TankNr
|
||||||
@@ -251,6 +283,9 @@ AfterManualPurchase
|
|||||||
; ora #$02 ; normal screen width
|
; ora #$02 ; normal screen width
|
||||||
lda #%00110010 ; normal screen width, DL on, P/M off
|
lda #%00110010 ; normal screen width, DL on, P/M off
|
||||||
sta dmactls
|
sta dmactls
|
||||||
|
|
||||||
|
lda #song_supermarket
|
||||||
|
jsr RmtSongSelect
|
||||||
|
|
||||||
mwa #ListOfWeapons WeaponsListDL ;switch to the list of offensive weapons
|
mwa #ListOfWeapons WeaponsListDL ;switch to the list of offensive weapons
|
||||||
|
|
||||||
@@ -290,8 +325,8 @@ AfterPurchase
|
|||||||
sta decimal
|
sta decimal
|
||||||
lda moneyH,x
|
lda moneyH,x
|
||||||
sta decimal+1
|
sta decimal+1
|
||||||
mwa #textbuffer2+29 displayposition
|
mwa #textbuffer2+28 displayposition
|
||||||
jsr displaydec
|
jsr displaydec5
|
||||||
|
|
||||||
; in xbyte there is the address of the line that
|
; in xbyte there is the address of the line that
|
||||||
; is being processed now
|
; is being processed now
|
||||||
@@ -346,9 +381,6 @@ CreateList
|
|||||||
ldy #25
|
ldy #25
|
||||||
lda #15 ; "/"
|
lda #15 ; "/"
|
||||||
sta (xbyte),y
|
sta (xbyte),y
|
||||||
iny
|
|
||||||
lda #04 ; "$"
|
|
||||||
sta (xbyte),y
|
|
||||||
ldy #31
|
ldy #31
|
||||||
lda #16 ; "0"
|
lda #16 ; "0"
|
||||||
sta (xbyte),y
|
sta (xbyte),y
|
||||||
@@ -361,12 +393,15 @@ CreateList
|
|||||||
ldx temp ;getting back index of the weapon
|
ldx temp ;getting back index of the weapon
|
||||||
|
|
||||||
; and now price of the weapon
|
; and now price of the weapon
|
||||||
adw xbyte #27 displayposition ; 27 chars from the beginning of the line
|
adw xbyte #26 displayposition ; 26 chars from the beginning of the line
|
||||||
lda WeaponPriceL,x
|
lda WeaponPriceL,x
|
||||||
sta decimal
|
sta decimal
|
||||||
lda WeaponPriceH,x
|
lda WeaponPriceH,x
|
||||||
sta decimal+1
|
sta decimal+1
|
||||||
jsr displaydec
|
jsr displaydec5
|
||||||
|
ldy #26 ; overwrite first digit (allways space - no digit :) )
|
||||||
|
lda #04 ; "$"
|
||||||
|
sta (xbyte),y
|
||||||
|
|
||||||
jmp notInventory
|
jmp notInventory
|
||||||
|
|
||||||
@@ -623,8 +658,8 @@ ChoosingItemForPurchase
|
|||||||
|
|
||||||
jsr PutLitteChar ; Places pointer at the right position
|
jsr PutLitteChar ; Places pointer at the right position
|
||||||
jsr getkey
|
jsr getkey
|
||||||
ldx escFlag
|
bit escFlag
|
||||||
seq:jmp WaitForKeyRelease ; like jsr ... : rts
|
spl:jmp WaitForKeyRelease ; like jsr ... : rts
|
||||||
cmp #$2c ; Tab
|
cmp #$2c ; Tab
|
||||||
jeq ListChange
|
jeq ListChange
|
||||||
cmp #$06 ; cursor left
|
cmp #$06 ; cursor left
|
||||||
@@ -795,27 +830,35 @@ invSelectDef
|
|||||||
lda IndexesOfWeaponsL2,y
|
lda IndexesOfWeaponsL2,y
|
||||||
tay
|
tay
|
||||||
ldx tankNr
|
ldx tankNr
|
||||||
cmp #ind_Battery________
|
cmp #ind_Battery________
|
||||||
bne NotBattery
|
bne NotBattery
|
||||||
; if activate battery, we do it differently
|
; if activate battery, we do it differently
|
||||||
mva #sfx_battery sfx_effect
|
mva #sfx_battery sfx_effect
|
||||||
mva #99 Energy,x
|
mva #99 Energy,x
|
||||||
bne DecreaseDefensive ; bypass activation
|
jsr MaxForceCalculate
|
||||||
|
jmp DecreaseDefensive ; bypass activation
|
||||||
NotBattery
|
NotBattery
|
||||||
cmp #ind_White_Flag_____
|
cmp #ind_Long_Barrel____
|
||||||
bne NotWhiteFlag
|
bne NotBarrel
|
||||||
cmp ActiveDefenceWeapon,x
|
; if activate long barrel, we do it differently too
|
||||||
bne NoDeactivateWhiteFlag
|
mva #sfx_long_barrel sfx_effect
|
||||||
mva #sfx_white_flag sfx_effect
|
mva #LongBarrel BarrelLength,x
|
||||||
lda #$00 ; if try to activate activated White Flag then deactivate Defence
|
bne DecreaseDefensive ; bypass activation
|
||||||
|
NotBarrel
|
||||||
|
cmp #ind_White_Flag_____
|
||||||
|
bne NotWhiteFlag
|
||||||
|
cmp ActiveDefenceWeapon,x
|
||||||
|
bne NoDeactivateWhiteFlag
|
||||||
|
mva #sfx_white_flag sfx_effect
|
||||||
|
lda #$00 ; if try to activate activated White Flag then deactivate Defence
|
||||||
sta ActiveDefenceWeapon,x
|
sta ActiveDefenceWeapon,x
|
||||||
sta ShieldEnergy,x
|
sta ShieldEnergy,x
|
||||||
beq DefActivationEnd
|
beq DefActivationEnd
|
||||||
NotWhiteFlag
|
NotWhiteFlag
|
||||||
NoDeactivateWhiteFlag
|
NoDeactivateWhiteFlag
|
||||||
; activate new defensive
|
; activate new defensive
|
||||||
sta ActiveDefenceWeapon,x
|
sta ActiveDefenceWeapon,x
|
||||||
; set defensive energy
|
; set defensive energy
|
||||||
lda DefensiveEnergy,y
|
lda DefensiveEnergy,y
|
||||||
sta ShieldEnergy,x
|
sta ShieldEnergy,x
|
||||||
DecreaseDefensive
|
DecreaseDefensive
|
||||||
@@ -983,8 +1026,8 @@ NoArrowDown
|
|||||||
lda TankStatusColoursTable,x
|
lda TankStatusColoursTable,x
|
||||||
sta colpf2s ; set color of player name line
|
sta colpf2s ; set color of player name line
|
||||||
jsr EnterPlayerName
|
jsr EnterPlayerName
|
||||||
lda escFlag
|
bit escFlag
|
||||||
seq:rts
|
spl:rts
|
||||||
inc TankNr
|
inc TankNr
|
||||||
lda TankNr
|
lda TankNr
|
||||||
cmp NumberOfPlayers
|
cmp NumberOfPlayers
|
||||||
@@ -1043,8 +1086,8 @@ endOfTankName
|
|||||||
|
|
||||||
CheckKeys
|
CheckKeys
|
||||||
jsr getkey
|
jsr getkey
|
||||||
ldx escFlag
|
bit escFlag
|
||||||
seq:rts
|
spl:rts
|
||||||
|
|
||||||
; is the char to be recorded?
|
; is the char to be recorded?
|
||||||
ldx #keycodesEnd-keycodes ;table was 38 chars long
|
ldx #keycodesEnd-keycodes ;table was 38 chars long
|
||||||
@@ -1154,6 +1197,8 @@ EndOfNick
|
|||||||
asl ; 8 chars per name
|
asl ; 8 chars per name
|
||||||
tax ; in X where to put new name
|
tax ; in X where to put new name
|
||||||
|
|
||||||
|
mva #sfx_next_player sfx_effect
|
||||||
|
|
||||||
lda NameAdr ; check if first char is " "
|
lda NameAdr ; check if first char is " "
|
||||||
and #$7F ; remove inverse (Cursor)
|
and #$7F ; remove inverse (Cursor)
|
||||||
beq MakeDefaultName
|
beq MakeDefaultName
|
||||||
@@ -1175,7 +1220,6 @@ nextchar05
|
|||||||
iny
|
iny
|
||||||
cpy #$08
|
cpy #$08
|
||||||
bne nextchar05
|
bne nextchar05
|
||||||
mva #sfx_next_player sfx_effect
|
|
||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
|
|
||||||
@@ -1213,13 +1257,13 @@ CheckNextLevel
|
|||||||
.endp
|
.endp
|
||||||
|
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
.proc displaydec ;decimal (word), displayposition (word)
|
.proc displaydec5 ;decimal (word), displayposition (word)
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
; displays decimal number as in parameters (in text mode)
|
; displays decimal number as in parameters (in text mode)
|
||||||
; leading zeroes are removed
|
; leading zeroes are removed
|
||||||
; the range is (0000..9999 - two bytes)
|
; the range is (00000..65565 - two bytes)
|
||||||
|
|
||||||
ldy #3 ; there will be 4 digits
|
ldy #4 ; there will be 5 digits
|
||||||
NextDigit
|
NextDigit
|
||||||
ldx #16 ; 16-bit dividee so Rotate 16 times
|
ldx #16 ; 16-bit dividee so Rotate 16 times
|
||||||
lda #$00
|
lda #$00
|
||||||
@@ -1243,39 +1287,31 @@ TooLittle000 dex
|
|||||||
dey
|
dey
|
||||||
bpl NextDigit ; Result again /10 and we have next digit
|
bpl NextDigit ; Result again /10 and we have next digit
|
||||||
|
|
||||||
|
;rightnumber
|
||||||
rightnumber
|
; displaying without leading zeroes (if zeroes exist then display space at this position)
|
||||||
; now cut leading zeroes (002 goes 2)
|
ldy #0
|
||||||
lda decimalresult
|
ldx #0 ; digit flag (cut leading zeroes)
|
||||||
cmp zero
|
|
||||||
bne decimalend
|
|
||||||
lda space
|
|
||||||
sta decimalresult
|
|
||||||
|
|
||||||
lda decimalresult+1
|
|
||||||
cmp zero
|
|
||||||
bne decimalend
|
|
||||||
lda space
|
|
||||||
sta decimalresult+1
|
|
||||||
|
|
||||||
lda decimalresult+2
|
|
||||||
cmp zero
|
|
||||||
bne DecimalEnd
|
|
||||||
lda space
|
|
||||||
sta decimalresult+2
|
|
||||||
|
|
||||||
DecimalEnd
|
|
||||||
; displaying
|
|
||||||
ldy #3
|
|
||||||
displayloop
|
displayloop
|
||||||
lda decimalresult,y
|
lda decimalresult,y
|
||||||
|
cpx #0
|
||||||
|
bne noleading0
|
||||||
|
cpy #4
|
||||||
|
beq noleading0 ; if 00000 - last 0 must be
|
||||||
|
cmp zero
|
||||||
|
bne noleading0
|
||||||
|
lda space
|
||||||
|
beq displaychar ; space = 0 !
|
||||||
|
noleading0
|
||||||
|
inx ; set flag (no leading zeroes to cut)
|
||||||
|
displaychar
|
||||||
sta (displayposition),y
|
sta (displayposition),y
|
||||||
dey
|
nexdigit
|
||||||
bpl displayloop
|
iny
|
||||||
|
cpy #5
|
||||||
|
bne displayloop
|
||||||
|
|
||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
|
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
.proc displaybyte ;decimal (byte), displayposition (word)
|
.proc displaybyte ;decimal (byte), displayposition (word)
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
@@ -1324,11 +1360,6 @@ displayloop1
|
|||||||
|
|
||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
;-------decimal constans
|
|
||||||
zero
|
|
||||||
digits dta d"0123456789"
|
|
||||||
nineplus dta d"9"+1
|
|
||||||
space dta d" "
|
|
||||||
|
|
||||||
;--------------------------------------------------------
|
;--------------------------------------------------------
|
||||||
.proc Display4x4AboveTank ;
|
.proc Display4x4AboveTank ;
|
||||||
@@ -1584,11 +1615,11 @@ EndOfTypeLine4x4
|
|||||||
jsr GetKey
|
jsr GetKey
|
||||||
cmp #$2b ; "Y"
|
cmp #$2b ; "Y"
|
||||||
bne @+
|
bne @+
|
||||||
mva #1 escFlag
|
mva #$80 escFlag
|
||||||
bne skip01
|
bne skip01
|
||||||
@ mva #0 escFlag
|
@ mva #0 escFlag
|
||||||
jsr WaitForKeyRelease
|
|
||||||
skip01
|
skip01
|
||||||
|
jsr WaitForKeyRelease
|
||||||
|
|
||||||
;clean
|
;clean
|
||||||
mva #3 di
|
mva #3 di
|
||||||
@@ -1692,7 +1723,7 @@ quit_seppuku
|
|||||||
beq @+ ;unconditional jump, because TypeLine4x4 ends with beq
|
beq @+ ;unconditional jump, because TypeLine4x4 ends with beq
|
||||||
|
|
||||||
GameOver4x4
|
GameOver4x4
|
||||||
lda #song_game_over
|
lda #song_round_over
|
||||||
jsr RmtSongSelect
|
jsr RmtSongSelect
|
||||||
mwa #LineGameOver LineAddress4x4
|
mwa #LineGameOver LineAddress4x4
|
||||||
mwa #((ScreenWidth/2)-(8*4)) LineXdraw
|
mwa #((ScreenWidth/2)-(8*4)) LineXdraw
|
||||||
@@ -1743,11 +1774,21 @@ ResultOfTheNextPlayer
|
|||||||
;there are at least 2 players, so we can safely
|
;there are at least 2 players, so we can safely
|
||||||
;start displaying the result
|
;start displaying the result
|
||||||
|
|
||||||
ldx #0
|
|
||||||
lda #3 ;it means |
|
lda #3 ;it means |
|
||||||
sta ResultLineBuffer,x
|
sta ResultLineBuffer
|
||||||
|
|
||||||
|
ldy TankNr
|
||||||
|
lda ResultsTable,y
|
||||||
|
sta decimal
|
||||||
|
mva #0 decimal+1
|
||||||
|
mwa #(ResultLineBuffer+8) displayposition
|
||||||
|
jsr displaydec5 ;decimal (byte), displayposition (word)
|
||||||
|
|
||||||
|
; overwrite the second digit of the points (max 255)
|
||||||
|
;it means ":"
|
||||||
|
mva #26 ResultLineBuffer+9
|
||||||
|
|
||||||
|
ldx #0
|
||||||
lda TankNr
|
lda TankNr
|
||||||
asl
|
asl
|
||||||
asl ; times 8, because it is lengtgh
|
asl ; times 8, because it is lengtgh
|
||||||
@@ -1762,18 +1803,8 @@ TankNameCopyLoop
|
|||||||
iny
|
iny
|
||||||
cpx #8 ; end of name
|
cpx #8 ; end of name
|
||||||
bne TankNameCopyLoop
|
bne TankNameCopyLoop
|
||||||
|
; last letter of tank name overwrites first digit of the points (max 255)
|
||||||
|
|
||||||
ldy TankNr
|
|
||||||
lda ResultsTable,y
|
|
||||||
sta decimal
|
|
||||||
mva #0 decimal+1
|
|
||||||
mwa #(ResultLineBuffer+9) displayposition
|
|
||||||
jsr displaydec ;decimal (byte), displayposition (word)
|
|
||||||
|
|
||||||
|
|
||||||
; overwrite the first digit of the points (max 255)
|
|
||||||
;it means ":"
|
|
||||||
mva #26 ResultLineBuffer+9
|
|
||||||
|
|
||||||
;just after the digits
|
;just after the digits
|
||||||
;it means |
|
;it means |
|
||||||
@@ -1828,6 +1859,256 @@ FinishResultDisplay
|
|||||||
jmp TypeLine4x4 ; jsr:rts
|
jmp TypeLine4x4 ; jsr:rts
|
||||||
.endp
|
.endp
|
||||||
|
|
||||||
|
;--------------------------------------------------
|
||||||
|
.proc GameOverScreen
|
||||||
|
;--------------------------------------------------
|
||||||
|
jsr WaitForKeyRelease
|
||||||
|
jsr ClearScreen
|
||||||
|
jsr ClearPMmemory
|
||||||
|
jsr PrepareCredits
|
||||||
|
jsr GameOverResultsClear
|
||||||
|
mwa #GameOverDL dlptrs
|
||||||
|
lda #%00111110 ; normal screen width, DL on, P/M on
|
||||||
|
sta dmactls
|
||||||
|
lda #%00100100 ; playfield before P/M
|
||||||
|
sta gtictls
|
||||||
|
jsr SetPMWidth
|
||||||
|
jsr ColorsOfSprites
|
||||||
|
mva #0 colpf1s
|
||||||
|
sta CreditsVScrol
|
||||||
|
mva #TextForegroundColor colpf2s
|
||||||
|
VDLI DLIinterruptGameOver ; jsr SetDLI for Game Over screen
|
||||||
|
; make text and color lines for each tank
|
||||||
|
ldx NumberOfPlayers ;we start from the highest (best) tank
|
||||||
|
dex ;and it is the last one
|
||||||
|
stx ResultOfTankNr ;in TankSequence table
|
||||||
|
ldy #0 ;witch line we are coloring
|
||||||
|
FinalResultOfTheNextPlayer
|
||||||
|
ldx ResultOfTankNr ;we are after a round, so we can use TankNr
|
||||||
|
lda TankSequence,x ;and we keep here real number if the tank
|
||||||
|
tax
|
||||||
|
stx TankNr ;for which we are displaying results
|
||||||
|
lda TankStatusColoursTable,x
|
||||||
|
sta GameOverColoursTable,y
|
||||||
|
; Y - line number (from 0 to 5)
|
||||||
|
; X - TanNr
|
||||||
|
; let's make texts
|
||||||
|
phy
|
||||||
|
; first calculate adres first byte of line
|
||||||
|
mwa #GameOverResults temp
|
||||||
|
@ dey
|
||||||
|
bmi LineAdresReady
|
||||||
|
adw temp #40
|
||||||
|
jmp @-
|
||||||
|
LineAdresReady
|
||||||
|
; put position of tank on the screen
|
||||||
|
pla
|
||||||
|
pha ; now we have line number in A register
|
||||||
|
ldy #1
|
||||||
|
tax
|
||||||
|
lda zero+1,x
|
||||||
|
sta (temp),y
|
||||||
|
; puts name of the tank on the screen
|
||||||
|
ldy #$03
|
||||||
|
lda TankNr
|
||||||
|
:3 asl ; 8 chars per name
|
||||||
|
tax
|
||||||
|
NextChar
|
||||||
|
lda tanksnames,x
|
||||||
|
sta (temp),y
|
||||||
|
inx
|
||||||
|
iny
|
||||||
|
cpy #$08+3
|
||||||
|
bne NextChar
|
||||||
|
; put big points on the screen
|
||||||
|
ldx TankNr
|
||||||
|
lda ResultsTable,x
|
||||||
|
sta decimal
|
||||||
|
mva #0 decimal+1
|
||||||
|
adw temp #12 displayposition
|
||||||
|
jsr displaydec5
|
||||||
|
mva #0 displayposition ; overwrite first digit
|
||||||
|
; put hits points on the screen
|
||||||
|
ldx TankNr
|
||||||
|
lda DirectHitsL,x
|
||||||
|
sta decimal
|
||||||
|
lda DirectHitsH,x
|
||||||
|
sta decimal+1
|
||||||
|
adw temp #19 displayposition
|
||||||
|
jsr displaydec5
|
||||||
|
mva #0 displayposition ; overwrite first digit
|
||||||
|
; put earned money on the screen
|
||||||
|
ldx TankNr
|
||||||
|
lda EarnedMoneyL,x
|
||||||
|
sta decimal
|
||||||
|
lda EarnedMoneyH,x
|
||||||
|
sta decimal+1
|
||||||
|
adw temp #30 displayposition
|
||||||
|
jsr displaydec5
|
||||||
|
ldy #35
|
||||||
|
lda zero
|
||||||
|
sta (temp),y ; and last zero
|
||||||
|
ply
|
||||||
|
iny
|
||||||
|
dec ResultOfTankNr
|
||||||
|
jpl FinalResultOfTheNextPlayer
|
||||||
|
MakeBlackLines
|
||||||
|
cpy #$06
|
||||||
|
beq AllLinesReady
|
||||||
|
lda #0 ; black line color for rest of tanks
|
||||||
|
sta GameOverColoursTable,y
|
||||||
|
iny
|
||||||
|
bne MakeBlackLines
|
||||||
|
AllLinesReady
|
||||||
|
ldx #(MaxPlayers-1)
|
||||||
|
MakeAllTanksVisible
|
||||||
|
lda #99
|
||||||
|
sta eXistenZ,x
|
||||||
|
lda #0
|
||||||
|
sta ActiveDefenceWeapon,x
|
||||||
|
dex
|
||||||
|
bpl MakeAllTanksVisible
|
||||||
|
jsr SetStandardBarrels
|
||||||
|
|
||||||
|
; start music and animations
|
||||||
|
lda #song_ending_looped
|
||||||
|
jsr RmtSongSelect
|
||||||
|
; initial tank positions randomization
|
||||||
|
ldx #(MaxPlayers-1) ;maxNumberOfPlayers-1
|
||||||
|
@
|
||||||
|
jsr RandomizeTankPos
|
||||||
|
dex
|
||||||
|
bpl @-
|
||||||
|
MainTanksFloatingLoop
|
||||||
|
; main tanks floating loop
|
||||||
|
ldx #(MaxPlayers-1) ;maxNumberOfPlayers-1
|
||||||
|
AllTanksFloatingDown
|
||||||
|
stx TankNr
|
||||||
|
lda Ytankstable,x
|
||||||
|
cmp #72 ; tank under screen - no erase
|
||||||
|
bcs NoEraseTank
|
||||||
|
mva #1 Erase
|
||||||
|
jsr DrawTankNr
|
||||||
|
mva #0 Erase
|
||||||
|
sta ATRACT ; reset atract mode
|
||||||
|
NoEraseTank
|
||||||
|
ldx TankNr
|
||||||
|
inc Ytankstable,x
|
||||||
|
lda ActiveDefenceWeapon,x
|
||||||
|
beq NotFastTank
|
||||||
|
:3 inc Ytankstable,x
|
||||||
|
NotFastTank
|
||||||
|
lda Ytankstable,x
|
||||||
|
; cmp #32 ; tank over screen - not visible
|
||||||
|
cmp #80 ; tank under screen - new tank randomize
|
||||||
|
bcs TankUnderScreen
|
||||||
|
cmp #72 ; tank under screen but.... parachute
|
||||||
|
bcs DrawOnlyParachute
|
||||||
|
bcc TankOnScreen
|
||||||
|
TankUnderScreen
|
||||||
|
jsr RandomizeTankPos
|
||||||
|
TankOnScreen
|
||||||
|
jsr DrawTankNr
|
||||||
|
DrawOnlyParachute
|
||||||
|
lda ActiveDefenceWeapon,x
|
||||||
|
bne FastTank
|
||||||
|
jsr DrawTankParachute
|
||||||
|
FastTank
|
||||||
|
; ldx TankNr
|
||||||
|
dex
|
||||||
|
bpl AllTanksFloatingDown
|
||||||
|
jsr IsKeyPressed
|
||||||
|
bne MainTanksFloatingLoop ; neverending loop
|
||||||
|
mva #0 dmactls ; dark screen
|
||||||
|
jsr WaitOneFrame
|
||||||
|
jsr GameOverResultsClear
|
||||||
|
rts
|
||||||
|
RandomizeTankPos
|
||||||
|
randomize 10 32 ; 10 not 8 - barrel !! :)
|
||||||
|
sta Ytankstable,x
|
||||||
|
randomize 0 180
|
||||||
|
sta AngleTable,x
|
||||||
|
randomize 0 (49-8)
|
||||||
|
and #%11111110 ; correction for PMG
|
||||||
|
clc
|
||||||
|
adc XtankOffsetGO_L,x
|
||||||
|
sta XtankstableL,x
|
||||||
|
lda XtankOffsetGO_H,x
|
||||||
|
adc #0
|
||||||
|
sta XtankstableH,x
|
||||||
|
lda random
|
||||||
|
cmp #32 ; like 1:8
|
||||||
|
bcc NowFastTank
|
||||||
|
lda #0
|
||||||
|
sta ActiveDefenceWeapon,x
|
||||||
|
rts
|
||||||
|
NowFastTank
|
||||||
|
lda #1
|
||||||
|
sta ActiveDefenceWeapon,x
|
||||||
|
rts
|
||||||
|
GameOverResultsClear
|
||||||
|
lda #$00
|
||||||
|
tax
|
||||||
|
@ sta GameOverResults,x
|
||||||
|
inx
|
||||||
|
cpx #(6*40)+1
|
||||||
|
bne @-
|
||||||
|
rts
|
||||||
|
PrepareCredits
|
||||||
|
; Rewrites credits and places it in the middle of each line.
|
||||||
|
mwa #CreditsStart temp ; from
|
||||||
|
mwa #Credits temp2 ; to
|
||||||
|
MainRewriteLoop
|
||||||
|
ldy #0
|
||||||
|
cpw temp #CreditsEnd
|
||||||
|
beq EndOfCredits
|
||||||
|
; count characters in this line
|
||||||
|
@ lda (temp),y
|
||||||
|
bmi LastCharFound
|
||||||
|
iny
|
||||||
|
bne @-
|
||||||
|
LastCharFound
|
||||||
|
; in Y number of characters reduced by 1
|
||||||
|
; let's count how many spaces add before the text
|
||||||
|
sec
|
||||||
|
sty magic
|
||||||
|
lda #40
|
||||||
|
sbc magic
|
||||||
|
lsr ; now in A we have number of spaces in front
|
||||||
|
sta magic
|
||||||
|
ldy #0
|
||||||
|
tya
|
||||||
|
tax
|
||||||
|
FirstSpaces
|
||||||
|
sta (temp2),y ; fill the area in front of the text with spaces
|
||||||
|
iny
|
||||||
|
cpy magic
|
||||||
|
bne FirstSpaces
|
||||||
|
MainText
|
||||||
|
lda (temp,x)
|
||||||
|
sta (temp2),y ; rewrite the text to a new place
|
||||||
|
bmi LastCharWritten
|
||||||
|
inw temp
|
||||||
|
iny
|
||||||
|
bne MainText
|
||||||
|
LastCharWritten
|
||||||
|
inw temp
|
||||||
|
and #%01111111 ; remove inverse
|
||||||
|
sta (temp2),y
|
||||||
|
iny
|
||||||
|
txa ; space to A (0)
|
||||||
|
LastSpaces
|
||||||
|
sta (temp2),y ; fill the area behind the text with spaces
|
||||||
|
iny
|
||||||
|
cpy #40
|
||||||
|
bne LastSpaces
|
||||||
|
NextLine
|
||||||
|
adw temp2 #40
|
||||||
|
jmp MainRewriteLoop
|
||||||
|
EndOfCredits
|
||||||
|
mwa #Credits DLCreditsAddr ; set address in DL to first line
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
;-------------------------------------------------
|
;-------------------------------------------------
|
||||||
.proc DisplayStatus
|
.proc DisplayStatus
|
||||||
;-------------------------------------------------
|
;-------------------------------------------------
|
||||||
@@ -1878,17 +2159,17 @@ FinishResultDisplay
|
|||||||
;---------------------
|
;---------------------
|
||||||
;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 textbuffer+80+22
|
||||||
lda #$09 ; )
|
lda #$09 ; )
|
||||||
sta textbuffer+80+39
|
sta textbuffer+80+39
|
||||||
lda ActiveDefenceWeapon,x
|
lda ActiveDefenceWeapon,x
|
||||||
bne ActiveDefence
|
bne ActiveDefence
|
||||||
; clear brackets
|
; clear brackets
|
||||||
lda #$00 ; space
|
lda #$00 ; space
|
||||||
sta textbuffer+80+22
|
sta textbuffer+80+22
|
||||||
sta textbuffer+80+39
|
sta textbuffer+80+39
|
||||||
lda #47 ; no weapon name
|
lda #47 ; no weapon name
|
||||||
ActiveDefence
|
ActiveDefence
|
||||||
sta temp ;get back number of the weapon
|
sta temp ;get back number of the weapon
|
||||||
mva #0 temp+1
|
mva #0 temp+1
|
||||||
@@ -1921,26 +2202,26 @@ ActiveDefence
|
|||||||
;---------------------
|
;---------------------
|
||||||
;displaying the energy of a tank shield (if exist)
|
;displaying the energy of a tank shield (if exist)
|
||||||
;---------------------
|
;---------------------
|
||||||
; clear (if no shield)
|
; clear (if no shield)
|
||||||
lda #$00 ; space
|
lda #$00 ; space
|
||||||
sta textbuffer+40+10
|
sta textbuffer+40+10
|
||||||
sta textbuffer+40+11
|
sta textbuffer+40+11
|
||||||
sta textbuffer+40+12
|
sta textbuffer+40+12
|
||||||
sta textbuffer+40+13
|
sta textbuffer+40+13
|
||||||
; check shield energy and display it
|
; check shield energy and display it
|
||||||
ldx TankNr
|
ldx TankNr
|
||||||
lda ActiveDefenceWeapon,x
|
lda ActiveDefenceWeapon,x
|
||||||
beq NoDefenceWeapon
|
beq NoDefenceWeapon
|
||||||
lda ShieldEnergy,x
|
lda ShieldEnergy,x
|
||||||
beq NoShieldEnergy
|
beq NoShieldEnergy
|
||||||
sta decimal ; displayed value
|
sta decimal ; displayed value
|
||||||
lda #$08 ; (
|
lda #$08 ; (
|
||||||
sta textbuffer+40+10
|
sta textbuffer+40+10
|
||||||
mwa #textbuffer+40+11 displayposition
|
mwa #textbuffer+40+11 displayposition
|
||||||
jsr displaybyte
|
jsr displaybyte
|
||||||
lda #$09 ; )
|
lda #$09 ; )
|
||||||
sta textbuffer+40+13
|
sta textbuffer+40+13
|
||||||
NoDefenceWeapon
|
NoDefenceWeapon
|
||||||
NoShieldEnergy
|
NoShieldEnergy
|
||||||
|
|
||||||
;=========================
|
;=========================
|
||||||
@@ -1989,8 +2270,8 @@ DisplayWindValue
|
|||||||
sta decimal
|
sta decimal
|
||||||
lda ForceTableH,x
|
lda ForceTableH,x
|
||||||
sta decimal+1
|
sta decimal+1
|
||||||
mwa #textbuffer+40+36 displayposition
|
mwa #textbuffer+40+35 displayposition
|
||||||
jsr displaydec
|
jsr displaydec5
|
||||||
|
|
||||||
;=========================
|
;=========================
|
||||||
;display Angle
|
;display Angle
|
||||||
@@ -1998,30 +2279,30 @@ DisplayWindValue
|
|||||||
displayAngle
|
displayAngle
|
||||||
ldx TankNr
|
ldx TankNr
|
||||||
lda AngleTable,x
|
lda AngleTable,x
|
||||||
cmp #90
|
cmp #90
|
||||||
beq VerticallyUp
|
beq VerticallyUp
|
||||||
bcs AngleToLeft
|
bcs AngleToLeft
|
||||||
AngleToRight
|
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 textbuffer+40+25
|
||||||
lda #0 ;space
|
lda #0 ;space
|
||||||
sta textbuffer+40+22
|
sta textbuffer+40+22
|
||||||
beq AngleDisplay
|
beq AngleDisplay
|
||||||
AngleToLeft
|
AngleToLeft
|
||||||
sec
|
sec
|
||||||
lda #180
|
lda #180
|
||||||
sbc AngleTable,x
|
sbc AngleTable,x
|
||||||
; 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 textbuffer+40+22
|
||||||
lda #0 ;space
|
lda #0 ;space
|
||||||
sta textbuffer+40+25
|
sta textbuffer+40+25
|
||||||
beq AngleDisplay
|
beq AngleDisplay
|
||||||
VerticallyUp
|
VerticallyUp
|
||||||
; now we have value 90
|
; now we have value 90
|
||||||
sta decimal
|
sta decimal
|
||||||
lda #0 ;space
|
lda #0 ;space
|
||||||
sta textbuffer+40+25
|
sta textbuffer+40+25
|
||||||
@@ -2030,7 +2311,7 @@ VerticallyUp
|
|||||||
AngleDisplay
|
AngleDisplay
|
||||||
mwa #textbuffer+40+23 displayposition
|
mwa #textbuffer+40+23 displayposition
|
||||||
jsr displaybyte
|
jsr displaybyte
|
||||||
|
ldx TankNr
|
||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
;-------------------------------------------------
|
;-------------------------------------------------
|
||||||
|
|||||||
+41
-19
@@ -8,21 +8,29 @@
|
|||||||
; compilation to e.g. cartridge
|
; compilation to e.g. cartridge
|
||||||
; zero page variables are declared in program.s65 module
|
; zero page variables are declared in program.s65 module
|
||||||
;=====================================================
|
;=====================================================
|
||||||
TanksNames ; DO NOT ZERO - ticket #24
|
OneTimeZeroVariables
|
||||||
|
OneTimeZeroVariablesCount = variablesToInitialize-OneTimeZeroVariables ; MAX 128 bytes !
|
||||||
|
noMusic .by 0 ; 0 - play music, $ff - do not play music
|
||||||
|
noSfx .by 0 ; 0 - play SFX, $ff - do not play SFX
|
||||||
|
;----------------------------------------------------
|
||||||
|
; Color table for Game Over Screen (created in a gameover routine)
|
||||||
|
.by $00 ; labels line color
|
||||||
|
GameOverColoursTable .BYTE $80,$40,$c4,$20,$c0,$e4
|
||||||
|
;----------------------------------------------------
|
||||||
|
TanksNames ; DO NOT ZERO ON RESTART GAME - ticket #24
|
||||||
:6 dta d" "
|
:6 dta d" "
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
;Options DO NOT ZERO - ticket #27
|
skilltable ; computer controlled players' skills (1-8), 0 - human (no cleaning, ticket #30)
|
||||||
|
.DS [MaxPlayers]
|
||||||
|
;----------------------------------------------------
|
||||||
|
variablesToInitialize
|
||||||
|
;Options DO NOT ZERO ON RESTART GAME - ticket #27
|
||||||
OptionsTable .by 0,1,2,2,0,1,3,2
|
OptionsTable .by 0,1,2,2,0,1,3,2
|
||||||
RoundsInTheGame .by 10 ;how many rounds in the current game
|
RoundsInTheGame .by 10 ;how many rounds in the current game
|
||||||
seppukuVal .by 75
|
seppukuVal .by 75
|
||||||
mountainDeltaH .by 3
|
mountainDeltaH .by 3
|
||||||
mountainDeltaL .by $ff
|
mountainDeltaL .by $ff
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
skilltable ; computer controlled players' skills (1-8), 0 - human (no cleaning, ticket #30)
|
|
||||||
.DS [MaxPlayers]
|
|
||||||
;----------------------------------------------------
|
|
||||||
noMusic .by 0 ; 0 - play music, $ff - do not play music
|
|
||||||
noSfx .by 0 ; 0 - play SFX, $ff - do not play SFX
|
|
||||||
; 4x4 text buffer
|
; 4x4 text buffer
|
||||||
ResultLineBuffer
|
ResultLineBuffer
|
||||||
dta d" ", $ff
|
dta d" ", $ff
|
||||||
@@ -38,8 +46,6 @@ isInventory .ds 1 ; 0 - purchase, $ff - inventory
|
|||||||
;--------------
|
;--------------
|
||||||
drawFunction .ds 1 ; 0 - plot, %10000000 - LineLength (N), %01000000 - DrawCheck (V)
|
drawFunction .ds 1 ; 0 - plot, %10000000 - LineLength (N), %01000000 - DrawCheck (V)
|
||||||
;--------------
|
;--------------
|
||||||
sfx_effect .ds 1
|
|
||||||
;--------------
|
|
||||||
noDeathCounter .ds 1
|
noDeathCounter .ds 1
|
||||||
;--------------
|
;--------------
|
||||||
OptionsY .ds 1 ;vertical position of cursor on Options screen
|
OptionsY .ds 1 ;vertical position of cursor on Options screen
|
||||||
@@ -84,6 +90,14 @@ ResultsTable ;the results in the gameeeeee
|
|||||||
.DS [MaxPlayers]
|
.DS [MaxPlayers]
|
||||||
TempResults
|
TempResults
|
||||||
.DS [MaxPlayers]
|
.DS [MaxPlayers]
|
||||||
|
DirectHitsH
|
||||||
|
.DS [MaxPlayers]
|
||||||
|
DirectHitsL
|
||||||
|
.DS [MaxPlayers]
|
||||||
|
EarnedMoneyH
|
||||||
|
.DS [MaxPlayers]
|
||||||
|
EarnedMoneyL
|
||||||
|
.DS [MaxPlayers]
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
ForceTableL ;shooting Force of the tank during the round
|
ForceTableL ;shooting Force of the tank during the round
|
||||||
.DS [MaxPlayers]
|
.DS [MaxPlayers]
|
||||||
@@ -95,12 +109,8 @@ MaxForceTableL ;Energy of the tank during the round
|
|||||||
MaxForceTableH
|
MaxForceTableH
|
||||||
.DS [MaxPlayers]
|
.DS [MaxPlayers]
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
|
BarrelLength ;length of the tank barrel - dont forget to set it to 6 at round start!
|
||||||
AngleTable ;Angle of the barrel of each tank during the round
|
|
||||||
.DS [MaxPlayers]
|
.DS [MaxPlayers]
|
||||||
NewAngle .DS 1
|
|
||||||
;----------------------------------------------------
|
|
||||||
|
|
||||||
ActiveWeapon ;number of the selected weapon
|
ActiveWeapon ;number of the selected weapon
|
||||||
.DS [MaxPlayers]
|
.DS [MaxPlayers]
|
||||||
ActiveDefenceWeapon ;number of the activated defence weapon - 0
|
ActiveDefenceWeapon ;number of the activated defence weapon - 0
|
||||||
@@ -135,6 +145,9 @@ ytankstable ;Y positions of tanks (lower left point)
|
|||||||
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)
|
||||||
|
.DS 1
|
||||||
|
;----------------------------------------------------
|
||||||
Erase .DS 1 ; if 1 only mask of the character is printed
|
Erase .DS 1 ; if 1 only mask of the character is printed
|
||||||
; on the graphics screen. if 0 character is printed normally
|
; on the graphics screen. if 0 character is printed normally
|
||||||
|
|
||||||
@@ -286,7 +299,7 @@ DifficultyLevel ; Difficulty Level (human/cpu)
|
|||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
;displaydecimal
|
;displaydecimal
|
||||||
decimal .DS 2
|
decimal .DS 2
|
||||||
decimalresult .DS 4
|
decimalresult .DS 5
|
||||||
|
|
||||||
;xmissile
|
;xmissile
|
||||||
ExplosionRadius .DS 2 ;because when adding in xdraw it is double byte
|
ExplosionRadius .DS 2 ;because when adding in xdraw it is double byte
|
||||||
@@ -339,11 +352,22 @@ TankTempY
|
|||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
singleRoundVars
|
singleRoundVars
|
||||||
;--------------
|
;--------------
|
||||||
escFlag .ds 1
|
escFlag .ds 1 ; 0 - Esc or O not pressed, $80 - Esc pressed, $40 - O pressed
|
||||||
;--------------
|
;--------------
|
||||||
CurrentResult
|
CurrentResult
|
||||||
.DS 1
|
.DS 1
|
||||||
;--------------
|
;--------------
|
||||||
|
AngleTable ;Angle of the barrel of each tank during the round
|
||||||
|
.DS [MaxPlayers]
|
||||||
|
NewAngle ; used in AI
|
||||||
|
.DS 1
|
||||||
|
;previousBarrelAngle
|
||||||
|
; .DS [MaxPlayers]
|
||||||
|
EndOfTheBarrelX
|
||||||
|
.ds 2
|
||||||
|
EndOfTheBarrelY
|
||||||
|
.ds 1
|
||||||
|
;----------------------------------------------------
|
||||||
previousAngle
|
previousAngle
|
||||||
.DS [MaxPlayers]
|
.DS [MaxPlayers]
|
||||||
previousEnergyL
|
previousEnergyL
|
||||||
@@ -352,8 +376,6 @@ previousLeftRange
|
|||||||
.DS [MaxPlayers]
|
.DS [MaxPlayers]
|
||||||
previousEnergyH
|
previousEnergyH
|
||||||
.DS [MaxPlayers]
|
.DS [MaxPlayers]
|
||||||
previousRightAngle
|
|
||||||
.DS [MaxPlayers]
|
|
||||||
RandBoundaryLow
|
RandBoundaryLow
|
||||||
.ds 2
|
.ds 2
|
||||||
RandBoundaryHigh
|
RandBoundaryHigh
|
||||||
|
|||||||
+172
-113
@@ -283,6 +283,7 @@ NoLowerCircle
|
|||||||
.endp
|
.endp
|
||||||
; ------------------------
|
; ------------------------
|
||||||
.proc napalm
|
.proc napalm
|
||||||
|
mva #sfx_napalm sfx_effect
|
||||||
inc FallDown2
|
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
|
||||||
@@ -291,6 +292,7 @@ NoLowerCircle
|
|||||||
.endp
|
.endp
|
||||||
; ------------------------
|
; ------------------------
|
||||||
.proc hotnapalm
|
.proc hotnapalm
|
||||||
|
mva #sfx_napalm sfx_effect
|
||||||
inc FallDown2
|
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
|
||||||
@@ -331,10 +333,10 @@ RepeatFlame ; internal loop (draw flames)
|
|||||||
lda random
|
lda random
|
||||||
and #%00000110
|
and #%00000110
|
||||||
clc
|
clc
|
||||||
adc #$46
|
adc #char_flame___________
|
||||||
bne PutFlameChar
|
bne PutFlameChar
|
||||||
LastNapalmRepeat
|
LastNapalmRepeat
|
||||||
lda #$4e ; clear flame symbol
|
lda #char_clear_flame_____ ; clear flame symbol
|
||||||
PutFlameChar
|
PutFlameChar
|
||||||
sta CharCode
|
sta CharCode
|
||||||
; check coordinates
|
; check coordinates
|
||||||
@@ -569,7 +571,7 @@ DiggerCharacter
|
|||||||
lda random
|
lda random
|
||||||
and #$06
|
and #$06
|
||||||
clc
|
clc
|
||||||
adc #$36
|
adc #char_digger__________
|
||||||
adc sandhogflag
|
adc sandhogflag
|
||||||
sta CharCode
|
sta CharCode
|
||||||
cpw xdraw #(screenwidth-6)
|
cpw xdraw #(screenwidth-6)
|
||||||
@@ -579,7 +581,7 @@ DiggerCharacter
|
|||||||
; ------------------------
|
; ------------------------
|
||||||
.proc babysandhog
|
.proc babysandhog
|
||||||
mva #sfx_sandhog sfx_effect
|
mva #sfx_sandhog sfx_effect
|
||||||
mva #8 sandhogflag
|
mva #char_sandhog_offset sandhogflag
|
||||||
inc FallDown2
|
inc FallDown2
|
||||||
mva #13 DigLong
|
mva #13 DigLong
|
||||||
mva #1 diggery ; how many branches (-1)
|
mva #1 diggery ; how many branches (-1)
|
||||||
@@ -588,7 +590,7 @@ DiggerCharacter
|
|||||||
; ------------------------
|
; ------------------------
|
||||||
.proc sandhog
|
.proc sandhog
|
||||||
mva #sfx_sandhog sfx_effect
|
mva #sfx_sandhog sfx_effect
|
||||||
mva #8 sandhogflag
|
mva #char_sandhog_offset sandhogflag
|
||||||
inc FallDown2
|
inc FallDown2
|
||||||
mva #13 DigLong
|
mva #13 DigLong
|
||||||
mva #3 diggery ; how many branches (-1)
|
mva #3 diggery ; how many branches (-1)
|
||||||
@@ -597,7 +599,7 @@ DiggerCharacter
|
|||||||
; ------------------------
|
; ------------------------
|
||||||
.proc heavysandhog
|
.proc heavysandhog
|
||||||
mva #sfx_sandhog sfx_effect
|
mva #sfx_sandhog sfx_effect
|
||||||
mva #8 sandhogflag
|
mva #char_sandhog_offset sandhogflag
|
||||||
inc FallDown2
|
inc FallDown2
|
||||||
mva #13 DigLong
|
mva #13 DigLong
|
||||||
mva #5 diggery ; how many branches (-1)
|
mva #5 diggery ; how many branches (-1)
|
||||||
@@ -661,20 +663,25 @@ DiggerCharacter
|
|||||||
ldx TankNr
|
ldx TankNr
|
||||||
lda AngleTable,x
|
lda AngleTable,x
|
||||||
tay
|
tay
|
||||||
clc
|
|
||||||
lda xtankstableL,x
|
mwa EndOfTheBarrelX xbyte
|
||||||
adc EndOfTheBarrelX,y ; correction of the end of the barrel point (X)
|
mva EndOfTheBarrelY ybyte
|
||||||
sta xbyte
|
mva #0 ybyte+1
|
||||||
lda xtankstableH,x
|
|
||||||
adc #0
|
;clc
|
||||||
sta xbyte+1
|
;lda xtankstableL,x
|
||||||
sec
|
;adc EndOfTheBarrelX,y ; correction of the end of the barrel point (X)
|
||||||
lda ytankstable,x
|
;sta xbyte
|
||||||
sbc EndOfTheBarrelY,y ; correction of the end of the barrel point (Y)
|
;lda xtankstableH,x
|
||||||
sta ybyte
|
;adc #0
|
||||||
lda #$00
|
;sta xbyte+1
|
||||||
sbc #$00
|
;sec
|
||||||
sta ybyte+1
|
;lda ytankstable,x
|
||||||
|
;sbc EndOfTheBarrelY,y ; correction of the end of the barrel point (Y)
|
||||||
|
;sta ybyte
|
||||||
|
;lda #$00
|
||||||
|
;sbc #$00
|
||||||
|
;sta ybyte+1
|
||||||
|
|
||||||
mwa xdraw LaserCoordinate
|
mwa xdraw LaserCoordinate
|
||||||
mwa ydraw LaserCoordinate+2
|
mwa ydraw LaserCoordinate+2
|
||||||
@@ -759,10 +766,10 @@ ExplosionLoop2
|
|||||||
;calculation
|
;calculation
|
||||||
|
|
||||||
ldx NumberOfPlayers
|
ldx NumberOfPlayers
|
||||||
|
dex
|
||||||
DistanceCheckLoop
|
DistanceCheckLoop
|
||||||
dex
|
|
||||||
lda eXistenZ,x
|
lda eXistenZ,x
|
||||||
beq EndOfDistanceCheckLoop
|
jeq EndOfDistanceCheckLoop
|
||||||
;here the tank exist
|
;here the tank exist
|
||||||
lda XtankstableL,x
|
lda XtankstableL,x
|
||||||
clc
|
clc
|
||||||
@@ -803,7 +810,7 @@ DistanceCheckLoop
|
|||||||
beq UseShieldWithEnergy
|
beq UseShieldWithEnergy
|
||||||
cmp #ind_Heavy_Shield___ ; shield with energy
|
cmp #ind_Heavy_Shield___ ; shield with energy
|
||||||
beq UseShieldWithEnergy
|
beq UseShieldWithEnergy
|
||||||
cmp #ind_Auto_Defense___ ; Auto Defence (it works only if hit ground next to tank. Tank hit is handled in Flight proc)
|
cmp #ind_Bouncy_Castle__ ; Auto Defence (it works only if hit ground next to tank. Tank hit is handled in Flight proc)
|
||||||
beq UseShieldWithEnergy
|
beq UseShieldWithEnergy
|
||||||
cmp #ind_Mag_Deflector__ ; Mag deflector (it works only if hit ground next to tank. Tank hit is handled in Flight proc)
|
cmp #ind_Mag_Deflector__ ; Mag deflector (it works only if hit ground next to tank. Tank hit is handled in Flight proc)
|
||||||
beq UseShieldWithEnergy
|
beq UseShieldWithEnergy
|
||||||
@@ -820,14 +827,21 @@ ShieldCoveredTank
|
|||||||
ShieldEnergy0 ; deactivate if no energy. it's like use one hit shield :)
|
ShieldEnergy0 ; deactivate if no energy. it's like use one hit shield :)
|
||||||
UseShield
|
UseShield
|
||||||
mva #1 Erase
|
mva #1 Erase
|
||||||
phx
|
lda TankNr
|
||||||
jsr DrawTankShield
|
pha ; store TankNr
|
||||||
plx
|
stx TankNr ; store X in TankNr :)
|
||||||
mva #0 ActiveDefenceWeapon,x ; deactivate defense weapons
|
jsr DrawTankNr ; now erase tank with shield (to erase shield)
|
||||||
|
lda #0
|
||||||
|
sta ActiveDefenceWeapon,x ; deactivate defense weapons
|
||||||
|
sta Erase
|
||||||
|
jsr DrawTankNr ; draw tank without shield
|
||||||
|
ldx TankNr ; restore X value :)
|
||||||
|
pla
|
||||||
|
sta TankNr ; restore TankNr value :)
|
||||||
TankIsNotWithinTheRange
|
TankIsNotWithinTheRange
|
||||||
EndOfDistanceCheckLoop
|
EndOfDistanceCheckLoop
|
||||||
txa
|
dex
|
||||||
jne DistanceCheckLoop
|
jpl DistanceCheckLoop
|
||||||
mva #sfx_silencer sfx_effect
|
mva #sfx_silencer sfx_effect
|
||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
@@ -881,8 +895,8 @@ Rollin
|
|||||||
sta HeightRol ; relative point
|
sta HeightRol ; relative point
|
||||||
|
|
||||||
RollinContinues
|
RollinContinues
|
||||||
wait
|
jsr WaitOneFrame
|
||||||
wait
|
jsr WaitOneFrame
|
||||||
; new point is set
|
; new point is set
|
||||||
adw xdraw #mountaintable tempXROLLER
|
adw xdraw #mountaintable tempXROLLER
|
||||||
ldy #0
|
ldy #0
|
||||||
@@ -1019,7 +1033,7 @@ NoColor ; jump here with color=0 to clean dirt
|
|||||||
; current dirt width
|
; current dirt width
|
||||||
sta magic
|
sta magic
|
||||||
NextRow
|
NextRow
|
||||||
wait
|
jsr WaitOneFrame
|
||||||
ldy magic
|
ldy magic
|
||||||
NextLine
|
NextLine
|
||||||
lda random
|
lda random
|
||||||
@@ -1134,6 +1148,7 @@ ToHighFill
|
|||||||
;first, get current parameters (angle+force)
|
;first, get current parameters (angle+force)
|
||||||
;for an active tank and display them
|
;for an active tank and display them
|
||||||
;(these values are taken from the previous round)
|
;(these values are taken from the previous round)
|
||||||
|
mva #0 Erase
|
||||||
|
|
||||||
ldx TankNr
|
ldx TankNr
|
||||||
|
|
||||||
@@ -1155,7 +1170,7 @@ ContinueToCheckMaxForce2
|
|||||||
|
|
||||||
jsr DrawTankNr
|
jsr DrawTankNr
|
||||||
|
|
||||||
wait ; best after drawing a tank
|
jsr WaitOneFrame ; best after drawing a tank
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1176,11 +1191,20 @@ notpressed
|
|||||||
lda kbcode
|
lda kbcode
|
||||||
and #%10111111 ; SHIFT elimination
|
and #%10111111 ; SHIFT elimination
|
||||||
|
|
||||||
|
cmp #$08 ; O
|
||||||
|
bne @+
|
||||||
|
jsr AreYouSure
|
||||||
|
bit escFlag
|
||||||
|
bpl notpressed
|
||||||
|
;---O pressed-quit game to game over screen---
|
||||||
|
mva #$40 escFlag
|
||||||
|
rts
|
||||||
|
@
|
||||||
cmp #28 ; ESC
|
cmp #28 ; ESC
|
||||||
bne @+
|
bne @+
|
||||||
jsr AreYouSure
|
jsr AreYouSure
|
||||||
lda escFlag
|
bit escFlag
|
||||||
beq notpressed
|
bpl notpressed
|
||||||
;---esc pressed-quit game---
|
;---esc pressed-quit game---
|
||||||
rts
|
rts
|
||||||
|
|
||||||
@@ -1195,9 +1219,14 @@ callInventory
|
|||||||
;
|
;
|
||||||
mva #$ff isInventory
|
mva #$ff isInventory
|
||||||
jsr Purchase
|
jsr Purchase
|
||||||
|
mva #0 dmactls ; dark screen
|
||||||
|
jsr WaitOneFrame
|
||||||
|
lda #song_ingame
|
||||||
|
jsr RmtSongSelect
|
||||||
mva #0 escFlag
|
mva #0 escFlag
|
||||||
jsr DisplayStatus
|
jsr DisplayStatus
|
||||||
jsr SetMainScreen
|
jsr SetMainScreen
|
||||||
|
jsr WaitOneFrame
|
||||||
jsr DrawTanks
|
jsr DrawTanks
|
||||||
jsr WaitForKeyRelease
|
jsr WaitForKeyRelease
|
||||||
jmp BeforeFire
|
jmp BeforeFire
|
||||||
@@ -1325,61 +1354,69 @@ CTRLPressedDown
|
|||||||
jmp BeforeFire
|
jmp BeforeFire
|
||||||
|
|
||||||
pressedRight
|
pressedRight
|
||||||
|
ldx TankNr
|
||||||
lda pressTimer
|
lda pressTimer
|
||||||
spl:mva #0 pressTimer ; if >128 then reset to 0
|
spl:mva #0 pressTimer ; if >128 then reset to 0
|
||||||
cmp #25 ; 1/2s
|
cmp #25 ; 1/2s
|
||||||
bcs CTRLPressedRight
|
bcs CTRLPressedRight
|
||||||
|
|
||||||
mva #sfx_set_power_2 sfx_effect
|
mva #sfx_set_power_2 sfx_effect
|
||||||
ldx TankNr
|
mva #1 Erase
|
||||||
|
jsr DrawTankNr.BarrelChange
|
||||||
dec AngleTable,x
|
dec AngleTable,x
|
||||||
lda AngleTable,x
|
lda AngleTable,x
|
||||||
cmp #255 ; -1
|
cmp #255 ; -1
|
||||||
jne BeforeFire
|
jne BeforeFire
|
||||||
lda #180
|
lda #179
|
||||||
sta AngleTable,x
|
sta AngleTable,x
|
||||||
jmp BeforeFire
|
jmp BeforeFire
|
||||||
|
|
||||||
CTRLPressedRight
|
CTRLPressedRight
|
||||||
mva #sfx_set_power_2 sfx_effect
|
|
||||||
ldx TankNr
|
ldx TankNr
|
||||||
|
mva #sfx_set_power_2 sfx_effect
|
||||||
|
mva #1 Erase
|
||||||
|
jsr DrawTankNr.BarrelChange
|
||||||
lda AngleTable,x
|
lda AngleTable,x
|
||||||
sec
|
sec
|
||||||
sbc #4
|
sbc #4
|
||||||
sta AngleTable,x
|
sta AngleTable,x
|
||||||
cmp #4 ; smalles angle for speed rotating
|
cmp #4 ; smallest angle for speed rotating
|
||||||
jcs BeforeFire
|
jcs BeforeFire
|
||||||
lda #180
|
lda #179
|
||||||
sta AngleTable,x
|
sta AngleTable,x
|
||||||
jmp BeforeFire
|
jmp BeforeFire
|
||||||
|
|
||||||
|
|
||||||
pressedLeft
|
pressedLeft
|
||||||
|
ldx TankNr
|
||||||
lda pressTimer
|
lda pressTimer
|
||||||
spl:mva #0 pressTimer ; if >128 then reset to 0
|
spl:mva #0 pressTimer ; if >128 then reset to 0
|
||||||
cmp #25 ; 1/2s
|
cmp #25 ; 1/2s
|
||||||
bcs CTRLPressedLeft
|
bcs CTRLPressedLeft
|
||||||
|
|
||||||
mva #sfx_set_power_2 sfx_effect
|
mva #sfx_set_power_2 sfx_effect
|
||||||
ldx TankNr
|
mva #1 Erase
|
||||||
|
jsr DrawTankNr.BarrelChange
|
||||||
INC AngleTable,x
|
INC AngleTable,x
|
||||||
lda AngleTable,x
|
lda AngleTable,x
|
||||||
cmp #181
|
cmp #180
|
||||||
jne BeforeFire
|
jne BeforeFire
|
||||||
lda #0
|
lda #1
|
||||||
sta AngleTable,x
|
sta AngleTable,x
|
||||||
jmp BeforeFire
|
jmp BeforeFire
|
||||||
|
|
||||||
CTRLPressedLeft
|
CTRLPressedLeft
|
||||||
mva #sfx_set_power_2 sfx_effect
|
|
||||||
ldx TankNr
|
ldx TankNr
|
||||||
|
mva #sfx_set_power_2 sfx_effect
|
||||||
|
mva #1 Erase
|
||||||
|
jsr DrawTankNr.BarrelChange
|
||||||
lda AngleTable,x
|
lda AngleTable,x
|
||||||
clc
|
clc
|
||||||
adc #4
|
adc #4
|
||||||
sta AngleTable,x
|
sta AngleTable,x
|
||||||
cmp #181-4
|
cmp #180-4
|
||||||
jcc BeforeFire
|
jcc BeforeFire
|
||||||
lda #0
|
lda #1
|
||||||
sta AngleTable,x
|
sta AngleTable,x
|
||||||
jmp BeforeFire
|
jmp BeforeFire
|
||||||
|
|
||||||
@@ -1484,38 +1521,26 @@ NotStrongShoot
|
|||||||
sta Force+1
|
sta Force+1
|
||||||
mva #sfx_shoot sfx_effect
|
mva #sfx_shoot sfx_effect
|
||||||
AfterStrongShoot
|
AfterStrongShoot
|
||||||
lda #$0
|
|
||||||
sta Force+2
|
|
||||||
lda AngleTable,x
|
lda AngleTable,x
|
||||||
sta Angle
|
sta Angle
|
||||||
|
|
||||||
lda #0
|
|
||||||
sta xtraj
|
|
||||||
sta ytraj
|
|
||||||
|
|
||||||
; Shoots tank nr X !!! :)
|
; Shoots tank nr X !!! :)
|
||||||
; set the starting coordinates of bullet with correction
|
; set the starting coordinates of bullet with correction
|
||||||
; to start where the tank's barrel ends
|
; to start where the tank's barrel ends
|
||||||
; (without it bullet would go from the left lower corner of the tank)
|
; (without it bullet would go from the left lower corner of the tank)
|
||||||
;ldx TankNr
|
;ldx TankNr
|
||||||
ldy Angle
|
|
||||||
clc
|
mwa EndOfTheBarrelX xtraj+1
|
||||||
lda xtankstableL,x
|
mva EndOfTheBarrely ytraj+1
|
||||||
adc EndOfTheBarrelX,y ; correction of X
|
lda #0
|
||||||
sta xtraj+1
|
sta Force+2
|
||||||
lda xtankstableH,x
|
sta ytraj+2
|
||||||
adc #$00
|
sta xtraj
|
||||||
sta xtraj+2
|
sta ytraj
|
||||||
sec
|
sta TestFlightFlag
|
||||||
lda ytankstable,x
|
|
||||||
sbc EndOfTheBarrelY,y ; correction of Y
|
|
||||||
sta ytraj+1
|
|
||||||
lda #$00
|
|
||||||
sbc #$00
|
|
||||||
sta ytraj+2
|
|
||||||
|
|
||||||
; checking if the shot is underground (no Flight but Hit :) )
|
; checking if the shot is underground (no Flight but Hit :) )
|
||||||
ldy #0
|
tay ; A=0 !
|
||||||
adw xtraj+1 #mountaintable temp
|
adw xtraj+1 #mountaintable temp
|
||||||
lda ytraj+1
|
lda ytraj+1
|
||||||
cmp (temp),y ; check collision witch mountains
|
cmp (temp),y ; check collision witch mountains
|
||||||
@@ -1533,6 +1558,7 @@ ShotUnderGround
|
|||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
.proc Flight ; Force(byte.byte), Wind(0.word)
|
.proc Flight ; Force(byte.byte), Wind(0.word)
|
||||||
; Angle(byte) 128=0, 255=maxright, 0=maxleft
|
; Angle(byte) 128=0, 255=maxright, 0=maxleft
|
||||||
|
; if TestFlightFlag is set ($ff) ne real flight - hit test only (for AI)
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
;g=-0.1
|
;g=-0.1
|
||||||
;vx=Force*cos(Angle)
|
;vx=Force*cos(Angle)
|
||||||
@@ -1764,6 +1790,8 @@ NoWind
|
|||||||
mwa xtraj+1 XtrajOld+1
|
mwa xtraj+1 XtrajOld+1
|
||||||
mwa ytraj+1 YtrajOld+1
|
mwa ytraj+1 YtrajOld+1
|
||||||
|
|
||||||
|
bit TestFlightFlag
|
||||||
|
bmi nowait
|
||||||
lda tracerflag
|
lda tracerflag
|
||||||
bne nowait
|
bne nowait
|
||||||
lda color
|
lda color
|
||||||
@@ -1802,7 +1830,9 @@ SkipCollisionCheck
|
|||||||
|
|
||||||
mwa xtraj+1 xdraw
|
mwa xtraj+1 xdraw
|
||||||
mwa ytraj+1 ydraw
|
mwa ytraj+1 ydraw
|
||||||
|
|
||||||
|
bit TestFlightFlag
|
||||||
|
bmi NoUnPlot
|
||||||
lda tracerflag
|
lda tracerflag
|
||||||
bne NoUnPlot
|
bne NoUnPlot
|
||||||
|
|
||||||
@@ -1815,7 +1845,8 @@ NoUnPlot
|
|||||||
Hit
|
Hit
|
||||||
mwa XHit xdraw
|
mwa XHit xdraw
|
||||||
mwa YHit ydraw
|
mwa YHit ydraw
|
||||||
|
bit TestFlightFlag
|
||||||
|
bmi EndOfFlight
|
||||||
jsr unPlot
|
jsr unPlot
|
||||||
EndOfFlight
|
EndOfFlight
|
||||||
mwa xdraw xcircle ; we must store for a little while
|
mwa xdraw xcircle ; we must store for a little while
|
||||||
@@ -1834,18 +1865,31 @@ EndOfFlight
|
|||||||
EndOfFlight2
|
EndOfFlight2
|
||||||
mva #0 tracerflag ; don't know why
|
mva #0 tracerflag ; don't know why
|
||||||
|
|
||||||
|
bit TestFlightFlag
|
||||||
|
jmi NoHitAtEndOfFight ; RTS only !!! - no defendsives check
|
||||||
; and now check for defensive-aggressive weapon
|
; and now check for defensive-aggressive weapon
|
||||||
lda HitFlag
|
lda HitFlag
|
||||||
jeq NoHitAtEndOfFight ; RTS only !!!
|
jeq NoHitAtEndOfFight ; RTS only !!!
|
||||||
jmi NoTankHitAtEndOfFight
|
jmi NoTankHitAtEndOfFight
|
||||||
|
; tank hit - increase direct hits points
|
||||||
|
ldx TankNr
|
||||||
|
inx
|
||||||
|
cpx HitFlag ; we don't count suicides :)
|
||||||
|
beq @+
|
||||||
|
dex
|
||||||
|
inc DirectHitsL,x
|
||||||
|
bne @+
|
||||||
|
inc DirectHitsH,x
|
||||||
|
@
|
||||||
; tank hit - check defensive weapon of this tank
|
; tank hit - check defensive weapon of this tank
|
||||||
tax
|
tax
|
||||||
dex ; index of tank in X
|
dex ; index of tank in X
|
||||||
lda ActiveDefenceWeapon,x
|
lda ActiveDefenceWeapon,x
|
||||||
cmp #ind_Auto_Defense___ ; Auto Defence
|
cmp #ind_Bouncy_Castle__ ; Auto Defence
|
||||||
beq AutoDefence
|
jeq BouncyCastle
|
||||||
cmp #ind_Mag_Deflector__ ; Mag Deflector
|
cmp #ind_Mag_Deflector__ ; Mag Deflector
|
||||||
bne NoDefence
|
beq MagDeflector
|
||||||
|
jmp NoDefence
|
||||||
MagDeflector
|
MagDeflector
|
||||||
; now run defensive-aggressive weapon - Mag Deflector!
|
; now run defensive-aggressive weapon - Mag Deflector!
|
||||||
; get tank position
|
; get tank position
|
||||||
@@ -1872,28 +1916,47 @@ RightDeflection
|
|||||||
bcs EndOfMagDeflector ; hit of course but we need RTS
|
bcs EndOfMagDeflector ; hit of course but we need RTS
|
||||||
sbw XHit #36 ; change to left
|
sbw XHit #36 ; change to left
|
||||||
EndOfMagDeflector
|
EndOfMagDeflector
|
||||||
|
mva #1 Erase
|
||||||
|
lda TankNr
|
||||||
|
pha ; store TankNr
|
||||||
|
stx TankNr ; store X in TankNr :)
|
||||||
|
jsr DrawTankNr ; now erase tank with shield (to erase shield)
|
||||||
|
lda #0
|
||||||
|
sta ActiveDefenceWeapon,x ; deactivate used mag deflector weapon
|
||||||
|
sta ShieldEnergy,x
|
||||||
|
sta Erase
|
||||||
|
jsr DrawTankNr ; draw tank without shield
|
||||||
|
ldx TankNr ; restore X value :)
|
||||||
|
pla
|
||||||
|
sta TankNr ; restore TankNr value :)
|
||||||
mwa XHit xdraw ; why? !!!
|
mwa XHit xdraw ; why? !!!
|
||||||
NoTankHitAtEndOfFight
|
NoTankHitAtEndOfFight
|
||||||
NoHitAtEndOfFight
|
NoHitAtEndOfFight
|
||||||
NoDefence
|
NoDefence
|
||||||
|
lsrw Force ; Force = Force / 2 - because earlier we multiplied by 2
|
||||||
rts ; END !!!
|
rts ; END !!!
|
||||||
AutoDefence
|
BouncyCastle
|
||||||
; now run defensive-aggressive weapon - Auto Defence!
|
mva #sfx_shield_on sfx_effect
|
||||||
|
; now run defensive-aggressive weapon - Bouncy Castle (previously known as Auto Defence)!
|
||||||
sbb #180 LeapFrogAngle Angle ; swap angle (LeapFrogAngle - because we have strored angle in this variable)
|
sbb #180 LeapFrogAngle Angle ; swap angle (LeapFrogAngle - because we have strored angle in this variable)
|
||||||
lsrw Force ; Force = Force / 2 - becouse earlier we multiplied by 2
|
lsrw Force ; Force = Force / 2 - because earlier we multiplied by 2
|
||||||
mva #1 Erase ; now erase shield
|
mva #1 Erase
|
||||||
phx
|
lda TankNr
|
||||||
jsr DrawTankShield
|
pha ; store TankNr
|
||||||
jsr DrawTankShieldHorns
|
stx TankNr ; store X in TankNr :)
|
||||||
plx
|
jsr DrawTankNr ; now erase tank with shield (to erase shield)
|
||||||
lda #$00
|
lda #0
|
||||||
sta Erase
|
sta ActiveDefenceWeapon,x ; deactivate used auto defense weapon
|
||||||
sta ActiveDefenceWeapon,x ; deactivate used Auto Defence
|
|
||||||
sta ShieldEnergy,x
|
sta ShieldEnergy,x
|
||||||
sta xtraj ; prepare coordinates
|
sta xtraj ; prepare coordinates
|
||||||
sta ytraj
|
sta ytraj
|
||||||
sta xtraj+2
|
sta xtraj+2
|
||||||
sta ytraj+2
|
sta ytraj+2
|
||||||
|
sta Erase
|
||||||
|
jsr DrawTankNr ; draw tank without shield
|
||||||
|
ldx TankNr ; restore X value :)
|
||||||
|
pla
|
||||||
|
sta TankNr ; restore TankNr value :)
|
||||||
mwa XHit xtraj+1
|
mwa XHit xtraj+1
|
||||||
sbw YHit #5 ytraj+1
|
sbw YHit #5 ytraj+1
|
||||||
mva #1 color
|
mva #1 color
|
||||||
@@ -1918,30 +1981,25 @@ AutoDefence
|
|||||||
sta xtraj
|
sta xtraj
|
||||||
sta ytraj
|
sta ytraj
|
||||||
|
|
||||||
lda xtankstableL,x
|
mwa EndOfTheBarrelX xbyte
|
||||||
sta xtraj+1
|
mva EndOfTheBarrelY ybyte
|
||||||
lda xtankstableH,x
|
mva #0 ybyte+1
|
||||||
sta xtraj+2
|
|
||||||
lda ytankstable,x
|
|
||||||
sta ytraj+1
|
|
||||||
lda #$00
|
|
||||||
sta ytraj+2
|
|
||||||
|
|
||||||
ldy Angle
|
; ldy Angle
|
||||||
clc
|
; clc
|
||||||
lda xtraj+1
|
; lda xtraj+1
|
||||||
adc EndOfTheBarrelX,y ; correction of X
|
; adc EndOfTheBarrelX,y ; correction of X
|
||||||
sta xtraj+1
|
; sta xtraj+1
|
||||||
lda xtraj+2
|
; lda xtraj+2
|
||||||
adc #0
|
; adc #0
|
||||||
sta xtraj+2
|
; sta xtraj+2
|
||||||
sec
|
; sec
|
||||||
lda ytraj+1
|
; lda ytraj+1
|
||||||
sbc EndOfTheBarrelY,y ; correction of Y
|
; sbc EndOfTheBarrelY,y ; correction of Y
|
||||||
sta ytraj+1
|
; sta ytraj+1
|
||||||
lda ytraj+2
|
; lda ytraj+2
|
||||||
sbc #0
|
; sbc #0
|
||||||
sta ytraj+2
|
; sta ytraj+2
|
||||||
|
|
||||||
ldy #100 ; ???
|
ldy #100 ; ???
|
||||||
mva #1 tracerflag ; I do not know (I mean I think I know ;) )
|
mva #1 tracerflag ; I do not know (I mean I think I know ;) )
|
||||||
@@ -2285,7 +2343,8 @@ MIRValreadyAll
|
|||||||
jsr FlashTank ; first we flash tank
|
jsr FlashTank ; first we flash tank
|
||||||
mva #1 Erase
|
mva #1 Erase
|
||||||
jsr DrawTankNr ; and erase tank
|
jsr DrawTankNr ; and erase tank
|
||||||
mva #0 Erase
|
lda #0
|
||||||
|
sta Erase
|
||||||
ldx TankNr
|
ldx TankNr
|
||||||
sta Energy,x ; clear tank energy
|
sta Energy,x ; clear tank energy
|
||||||
sta eXistenZ,x ; erase from existence
|
sta eXistenZ,x ; erase from existence
|
||||||
@@ -2318,7 +2377,7 @@ NextLine1
|
|||||||
dex
|
dex
|
||||||
bpl NextLine1
|
bpl NextLine1
|
||||||
;
|
;
|
||||||
wait ; wait uses A and Y
|
jsr WaitOneFrame ; wait uses A only
|
||||||
; second loop - inverse again and put random "snow" to column of bytes
|
; second loop - inverse again and put random "snow" to column of bytes
|
||||||
ldx #120
|
ldx #120
|
||||||
ldy magic
|
ldy magic
|
||||||
@@ -2374,7 +2433,8 @@ InverseScreenByte
|
|||||||
; XHit , YHit - coordinates of hit
|
; XHit , YHit - coordinates of hit
|
||||||
; X - index of the hit tank
|
; X - index of the hit tank
|
||||||
|
|
||||||
ldx #0
|
ldx NumberOfPlayers
|
||||||
|
dex
|
||||||
CheckCollisionWithTankLoop
|
CheckCollisionWithTankLoop
|
||||||
lda eXistenZ,x
|
lda eXistenZ,x
|
||||||
beq DeadTank
|
beq DeadTank
|
||||||
@@ -2420,9 +2480,8 @@ LeftFromTheTank
|
|||||||
OverTheTank
|
OverTheTank
|
||||||
BelowTheTank
|
BelowTheTank
|
||||||
DeadTank
|
DeadTank
|
||||||
inx
|
dex
|
||||||
cpx NumberOfPlayers
|
bpl CheckCollisionWithTankLoop
|
||||||
bne CheckCollisionWithTankLoop
|
|
||||||
rts
|
rts
|
||||||
CheckCollisionWithShieldedTank
|
CheckCollisionWithShieldedTank
|
||||||
; now we use Y as low byte and A as high byte of checked position (left right edgs of shield)
|
; now we use Y as low byte and A as high byte of checked position (left right edgs of shield)
|
||||||
|
|||||||
Reference in New Issue
Block a user