mirror of
https://github.com/Pecusx/scorch_src.git
synced 2026-05-21 21:34:20 +02:00
@@ -47,6 +47,21 @@ With the advent of fujinet (https://fujinet.online/) we are thinking about makin
|
|||||||
|
|
||||||
## Changes:
|
## Changes:
|
||||||
|
|
||||||
|
###### Build 144
|
||||||
|
2022-06-19
|
||||||
|
Juneteenth release is coming with the most anticipated new feature: defensive weapons. Thanks to @Pecusx we have 5 completely new weapons and more reasonably working parachute. The stub of instruction manual describing these weapons is available here: https://github.com/pkali/scorch_src/wiki/Instruction-manual.
|
||||||
|
|
||||||
|
The new inventory system has been added. Call it by pressing "I" key or short-pressing fire. Select weapon to use by moving joystick or cursor keys right. Switch between offensive and deffensive weapons by moving joystick left. Fire/escape to quit inventory.
|
||||||
|
|
||||||
|
Other significant playability change is https://github.com/pkali/scorch_src/issues/54 - it is not finished yet, but keeping joystick up or down makes force to increase / decrease faster.
|
||||||
|
Also - short press of fire calls Inventory, long press fires the shell. The timings are experimental, please let me know it this needs a modification / improvement.
|
||||||
|
|
||||||
|
Tickets closed:
|
||||||
|
* https://github.com/pkali/scorch_src/issues/92 - less unnecessary cleaning of the offensive texts
|
||||||
|
* https://github.com/pkali/scorch_src/issues/89 - improved collisions with tank
|
||||||
|
* https://github.com/pkali/scorch_src/issues/71 - ditto
|
||||||
|
* https://github.com/pkali/scorch_src/issues/11, https://github.com/pkali/scorch_src/issues/26, https://github.com/pkali/scorch_src/issues/8, https://github.com/pkali/scorch_src/issues/20 - new inventory system
|
||||||
|
|
||||||
###### Build 143
|
###### Build 143
|
||||||
2022-06-05
|
2022-06-05
|
||||||
Rewrite build. We redone several important parts of the game to allow for bug fixes and requested features. Generally it was a great success, but some new bugs appeared. This build is nice for the eye, but beware, no mercy for testers again :)
|
Rewrite build. We redone several important parts of the game to allow for bug fixes and requested features. Generally it was a great success, but some new bugs appeared. This build is nice for the eye, but beware, no mercy for testers again :)
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ pmg .ds $0300
|
|||||||
eif
|
eif
|
||||||
|
|
||||||
song_data
|
song_data
|
||||||
ins 'mmm_16.lzs'
|
ins 'mmm_16.lzs'
|
||||||
song_end
|
song_end
|
||||||
|
|
||||||
POKEY = $D200
|
POKEY = $D200
|
||||||
@@ -456,7 +456,7 @@ quit
|
|||||||
ini main
|
ini main
|
||||||
; ---
|
; ---
|
||||||
|
|
||||||
opt l-
|
;opt l-
|
||||||
|
|
||||||
.MACRO SPRITES
|
.MACRO SPRITES
|
||||||
missiles
|
missiles
|
||||||
|
|||||||
Binary file not shown.
+46
-27
@@ -14,9 +14,9 @@ dliColorsFore
|
|||||||
TextBackgroundColor = $02 ; REAL constans - use: LDA #TextBackgroundColor
|
TextBackgroundColor = $02 ; REAL constans - use: LDA #TextBackgroundColor
|
||||||
TextForegroundColor = $0c
|
TextForegroundColor = $0c
|
||||||
CashOptionL ;(one zero less than on the screen)
|
CashOptionL ;(one zero less than on the screen)
|
||||||
.by 0,<200,<500,<800,<1000
|
.by 0,<200,<800,<1200,<2000
|
||||||
CashOptionH
|
CashOptionH
|
||||||
.by 0,>200,>500,>800,>1000
|
.by 0,>200,>800,>1200,>2000
|
||||||
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
|
||||||
@@ -514,7 +514,8 @@ EndOfTheBarrelY
|
|||||||
.by 6,6,6,6,6,6,6,6,6
|
.by 6,6,6,6,6,6,6,6,6
|
||||||
.by 5,5,5,5,5,5,5,5,5,5
|
.by 5,5,5,5,5,5,5,5,5,5
|
||||||
.by 4,4,4,4,4,4,4,4,4,4,4,4,4
|
.by 4,4,4,4,4,4,4,4,4,4,4,4,4
|
||||||
.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,4,4,4,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
|
||||||
|
|
||||||
.by 0,0,0,0,0,0,0,0,0,0 ; not used
|
.by 0,0,0,0,0,0,0,0,0,0 ; not used
|
||||||
.by 0,0,0,0,0,0,0,0,0,0 ; not used
|
.by 0,0,0,0,0,0,0,0,0,0 ; not used
|
||||||
@@ -526,7 +527,8 @@ EndOfTheBarrelY
|
|||||||
.by 0,0,0,0 ; not used
|
.by 0,0,0,0 ; not used
|
||||||
|
|
||||||
; left angles from 90 (horizontally to the left) to 1 (vertically up)
|
; left angles from 90 (horizontally to the left) to 1 (vertically up)
|
||||||
.by 3,3,3,3,3,3,3,3,3,3,3,3,3,3
|
; .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,4,4,4,4 ; one pixel Up for fix problems with colision check
|
||||||
.by 4,4,4,4,4,4,4,4,4,4,4,4,4
|
.by 4,4,4,4,4,4,4,4,4,4,4,4,4
|
||||||
.by 5,5,5,5,5,5,5,5,5,5
|
.by 5,5,5,5,5,5,5,5,5,5
|
||||||
.by 6,6,6,6,6,6,6,6,6
|
.by 6,6,6,6,6,6,6,6,6
|
||||||
@@ -593,6 +595,7 @@ WeaponPriceH ; weapons prices (tables with prices of weapons)
|
|||||||
.by >price______________45
|
.by >price______________45
|
||||||
.by >price______________46
|
.by >price______________46
|
||||||
.by >price______________47
|
.by >price______________47
|
||||||
|
.by >price_White_Flag_____
|
||||||
.by >price_Heat_Guidance__
|
.by >price_Heat_Guidance__
|
||||||
.by >price_Bal_Guidance___
|
.by >price_Bal_Guidance___
|
||||||
.by >price_Horz_Guidance__
|
.by >price_Horz_Guidance__
|
||||||
@@ -608,7 +611,6 @@ WeaponPriceH ; weapons prices (tables with prices of weapons)
|
|||||||
.by >price_Auto_Defense___
|
.by >price_Auto_Defense___
|
||||||
.by >price_Fuel_Tank______
|
.by >price_Fuel_Tank______
|
||||||
.by >price_Contact_Trigger
|
.by >price_Contact_Trigger
|
||||||
.by >price_White_Flag_____
|
|
||||||
|
|
||||||
WeaponPriceL
|
WeaponPriceL
|
||||||
.by <price_Baby_Missile___
|
.by <price_Baby_Missile___
|
||||||
@@ -659,6 +661,7 @@ WeaponPriceL
|
|||||||
.by <price______________45
|
.by <price______________45
|
||||||
.by <price______________46
|
.by <price______________46
|
||||||
.by <price______________47
|
.by <price______________47
|
||||||
|
.by <price_White_Flag_____
|
||||||
.by <price_Heat_Guidance__
|
.by <price_Heat_Guidance__
|
||||||
.by <price_Bal_Guidance___
|
.by <price_Bal_Guidance___
|
||||||
.by <price_Horz_Guidance__
|
.by <price_Horz_Guidance__
|
||||||
@@ -674,7 +677,6 @@ WeaponPriceL
|
|||||||
.by <price_Auto_Defense___
|
.by <price_Auto_Defense___
|
||||||
.by <price_Fuel_Tank______
|
.by <price_Fuel_Tank______
|
||||||
.by <price_Contact_Trigger
|
.by <price_Contact_Trigger
|
||||||
.by <price_White_Flag_____
|
|
||||||
|
|
||||||
;-------------------------------------------------
|
;-------------------------------------------------
|
||||||
; how many units (bulletd) of a given weapon we get for a given price
|
; how many units (bulletd) of a given weapon we get for a given price
|
||||||
@@ -731,6 +733,7 @@ WeaponUnits
|
|||||||
.by 0 ;_____________45
|
.by 0 ;_____________45
|
||||||
.by 0 ;_____________46
|
.by 0 ;_____________46
|
||||||
.by 0 ;_____________47
|
.by 0 ;_____________47
|
||||||
|
.by 1 ;White_Flag___48
|
||||||
.by 6 ;Heat_Guidance__
|
.by 6 ;Heat_Guidance__
|
||||||
.by 2 ;Bal_Guidance___
|
.by 2 ;Bal_Guidance___
|
||||||
.by 5 ;Horz_Guidance__
|
.by 5 ;Horz_Guidance__
|
||||||
@@ -746,7 +749,6 @@ WeaponUnits
|
|||||||
.by 1 ;Auto_Defense___
|
.by 1 ;Auto_Defense___
|
||||||
.by 10 ;Fuel_Tank______
|
.by 10 ;Fuel_Tank______
|
||||||
.by 25 ;Contact_Trigger
|
.by 25 ;Contact_Trigger
|
||||||
.by 1 ;_____________63
|
|
||||||
|
|
||||||
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
|
||||||
@@ -809,8 +811,8 @@ WeaponSymbols
|
|||||||
.by $58,$59,$5a,$5b,$60,$7b,$7c,$7d
|
.by $58,$59,$5a,$5b,$60,$7b,$7c,$7d
|
||||||
.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 $02,$03,$06,$1d,$0a,$1b,$1c,$1e
|
.by $5f,$02,$03,$06,$1d,$0a,$1b,$1c ; defensives
|
||||||
.by $3b,$3c,$3d,$3e,$3f,$5e,$5f,$00
|
.by $1e,$3b,$3c,$3d,$3e,$3f,$5e,$00
|
||||||
|
|
||||||
; 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
|
||||||
@@ -861,26 +863,43 @@ NamesOfWeapons ;the comment is an index in the tables
|
|||||||
dta d"----------------" ; 44
|
dta d"----------------" ; 44
|
||||||
dta d"----------------" ; 45
|
dta d"----------------" ; 45
|
||||||
dta d"----------------" ; 46
|
dta d"----------------" ; 46
|
||||||
dta d"----------------" ; 47
|
dta d" " ; 47 ; special (no weapon) name to simplify display
|
||||||
|
|
||||||
dta d"Heat Guidance " ; 48 ($30)
|
dta d"White Flag " ; 48 ($30)
|
||||||
dta d"Bal Guidance " ; 49
|
dta d"Heat Guidance " ; 49
|
||||||
dta d"Horz Guidance " ; 50
|
dta d"Bal Guidance " ; 50
|
||||||
dta d"Vert Guidance " ; 51
|
dta d"Horz Guidance " ; 51
|
||||||
dta d"Lazy Boy " ; 52
|
dta d"Vert Guidance " ; 52
|
||||||
dta d"Parachute " ; 53
|
dta d"Lazy Boy " ; 53
|
||||||
dta d"Battery " ; 54
|
dta d"Parachute " ; 54 - no energy
|
||||||
dta d"Mag Deflector " ; 55
|
dta d"Battery " ; 55
|
||||||
dta d"Shield " ; 56
|
dta d"Mag Deflector " ; 56 - with shield and energy
|
||||||
dta d"Force Shield " ; 57
|
dta d"Shield " ; 57 - shield for one shot - no energy
|
||||||
dta d"Heavy Shield " ; 58
|
dta d"Force Shield " ; 58 - shield with energy and parachute
|
||||||
dta d"Super Mag " ; 59
|
dta d"Heavy Shield " ; 59 - shield with energy
|
||||||
dta d"Auto Defense " ; 60
|
dta d"Super Mag " ; 60
|
||||||
dta d"Fuel Tank " ; 61
|
dta d"Auto Defense " ; 61 - with shield and energy
|
||||||
dta d"Contact Trigger " ; 62
|
dta d"Fuel Tank " ; 62
|
||||||
dta d"White Flag " ; 63
|
dta d"Contact Trigger " ; 63
|
||||||
|
DefensiveEnergy = * - 48
|
||||||
|
.by 00 ; White Flag
|
||||||
|
.by 00 ; Heat Guidance
|
||||||
|
.by 00 ; Bal Guidance
|
||||||
|
.by 00 ; Horz Guidance
|
||||||
|
.by 00 ; Vert Guidance
|
||||||
|
.by 00 ; Lazy Boy
|
||||||
|
.by 00 ; Parachute
|
||||||
|
.by 00 ; Battery
|
||||||
|
.by 90 ; Mag Deflector
|
||||||
|
.by 00 ; Shield
|
||||||
|
.by 99 ; Force Shield
|
||||||
|
.by 99 ; Heavy Shield
|
||||||
|
.by 00 ; Super Mag
|
||||||
|
.by 99 ; Auto Defense
|
||||||
|
.by 00 ; Fuel Tank
|
||||||
|
.by 00 ; Contact Trigger
|
||||||
weaponsOfDeath
|
weaponsOfDeath
|
||||||
dta 1,2,3,7,15,16,17,18,19,20,21,22,23,24,25,26,27
|
dta 1,2,3,7,17,18,19,20,21,22,23,24,25,26,27
|
||||||
weaponsOfDeathEnd
|
weaponsOfDeathEnd
|
||||||
joyToKeyTable
|
joyToKeyTable
|
||||||
; .by 00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15
|
; .by 00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15
|
||||||
|
|||||||
+16
-16
@@ -59,22 +59,22 @@ price______________44 = 0
|
|||||||
price______________45 = 0
|
price______________45 = 0
|
||||||
price______________46 = 0
|
price______________46 = 0
|
||||||
price______________47 = 0
|
price______________47 = 0
|
||||||
price_Heat_Guidance__ = $ffff ;_48_($30)
|
price_White_Flag_____ = $0 ;_48_($30)
|
||||||
price_Bal_Guidance___ = $ffff ;_49
|
price_Heat_Guidance__ = $ffff ;_49
|
||||||
price_Horz_Guidance__ = $ffff ;_50
|
price_Bal_Guidance___ = $ffff ;_50
|
||||||
price_Vert_Guidance__ = $ffff ;_51
|
price_Horz_Guidance__ = $ffff ;_51
|
||||||
price_Lazy_Boy_______ = $ffff ;_52
|
price_Vert_Guidance__ = $ffff ;_52
|
||||||
price_Parachute______ = 1100 ;_53
|
price_Lazy_Boy_______ = $ffff ;_53
|
||||||
price_Battery________ = $ffff ;_54
|
price_Parachute______ = 80 ;_54
|
||||||
price_Mag_Deflector__ = $ffff ;_55
|
price_Battery________ = $ffff ;_55
|
||||||
price_Shield_________ = $ffff ;_56
|
price_Mag_Deflector__ = 120 ;_56
|
||||||
price_Force_Shield___ = $ffff ;_57
|
price_Shield_________ = 50 ;_57
|
||||||
price_Heavy_Shield___ = $ffff ;_58
|
price_Force_Shield___ = 210 ;_58
|
||||||
price_Super_Mag______ = $ffff ;_59
|
price_Heavy_Shield___ = 111 ;_59
|
||||||
price_Auto_Defense___ = $ffff ;_60
|
price_Super_Mag______ = $ffff ;_60
|
||||||
price_Fuel_Tank______ = $ffff ;_61
|
price_Auto_Defense___ = 300 ;_61
|
||||||
price_Contact_Trigger = $ffff ;_62
|
price_Fuel_Tank______ = $ffff ;_62
|
||||||
price_White_Flag_____ = $0 ;_63
|
price_Contact_Trigger = $ffff ;_63
|
||||||
;--------------------------------
|
;--------------------------------
|
||||||
; names of RMT instruments (sfx)
|
; names of RMT instruments (sfx)
|
||||||
;--------------------------------
|
;--------------------------------
|
||||||
|
|||||||
+14
-6
@@ -104,7 +104,7 @@ OptionsScreen
|
|||||||
OptionsHere
|
OptionsHere
|
||||||
; 0123456789012345678901234567890123456789
|
; 0123456789012345678901234567890123456789
|
||||||
dta d"Players : 2 3 4 5 6 "
|
dta d"Players : 2 3 4 5 6 "
|
||||||
dta d"Cash : none 2K 5K 8K 10K "
|
dta d"Cash : none 2K 8K 12K 20K "
|
||||||
dta d"Gravity : 0.2G 0.5G 1G 2G 4G "
|
dta d"Gravity : 0.2G 0.5G 1G 2G 4G "
|
||||||
dta d"Wind : 1B 3B 5B 7B 9B "
|
dta d"Wind : 1B 3B 5B 7B 9B "
|
||||||
dta d"Rounds : 10 20 30 40 50 "
|
dta d"Rounds : 10 20 30 40 50 "
|
||||||
@@ -136,7 +136,9 @@ WeaponsDescription
|
|||||||
dta d" - Defensive/Offensive weapon "
|
dta d" - Defensive/Offensive weapon "
|
||||||
dta d" "
|
dta d" "
|
||||||
dta d"Space"*
|
dta d"Space"*
|
||||||
dta d" - Purchase "
|
dta d" - "
|
||||||
|
purchaseActivate
|
||||||
|
dta d"Purchase "
|
||||||
dta d"Return"*
|
dta d"Return"*
|
||||||
dta d" - Finish "
|
dta d" - Finish "
|
||||||
EmptyLine
|
EmptyLine
|
||||||
@@ -166,11 +168,17 @@ NamesOfLevels
|
|||||||
textbuffer
|
textbuffer
|
||||||
; 0123456789012345678901234567890123456789
|
; 0123456789012345678901234567890123456789
|
||||||
dta d"Player: "
|
dta d"Player: "
|
||||||
dta d"Energy: Angle: Force: "
|
dta d"Energy: Angle: Force: "
|
||||||
dta d" Round: Wind: "
|
dta d"Round: Wind: "
|
||||||
textbuffer2
|
textbuffer2
|
||||||
dta d"Player: Cash: "
|
dta d"Player: Cash: 0 " ; ZERO TO MAKE YOU RICHER ON THE SCREEN
|
||||||
dta d"----------------------------------------"
|
dta d"----------------------------------------"
|
||||||
|
;---------------------------------------------------
|
||||||
|
activateText
|
||||||
|
dta d"Activate"
|
||||||
|
activateTextEnd
|
||||||
|
purchaseText
|
||||||
|
dta d"Purchase"
|
||||||
|
purchaseTextEnd
|
||||||
|
|
||||||
.endif
|
.endif
|
||||||
|
|||||||
+122
-9
@@ -262,8 +262,7 @@ CheckCollisionDraw
|
|||||||
sbc #1
|
sbc #1
|
||||||
sta YHit
|
sta YHit
|
||||||
sty YHit+1
|
sty YHit+1
|
||||||
;mwa ydraw YHit
|
mva #$ff HitFlag
|
||||||
mva #1 HitFlag
|
|
||||||
StopHitChecking
|
StopHitChecking
|
||||||
jmp ContinueDraw
|
jmp ContinueDraw
|
||||||
@
|
@
|
||||||
@@ -364,7 +363,7 @@ endcircleloop
|
|||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
;----
|
;----
|
||||||
splot8 .proc
|
.proc splot8
|
||||||
; plot xcircle+XC,ycircle+YC
|
; plot xcircle+XC,ycircle+YC
|
||||||
; plot xcircle+XC,ycircle-YC
|
; plot xcircle+XC,ycircle-YC
|
||||||
; plot xcircle-XC,ycircle-YC
|
; plot xcircle-XC,ycircle-YC
|
||||||
@@ -463,7 +462,7 @@ splot8 .proc
|
|||||||
.endp
|
.endp
|
||||||
|
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
clearscreen .proc
|
.proc clearscreen
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
|
|
||||||
lda #$ff
|
lda #$ff
|
||||||
@@ -477,7 +476,7 @@ clearscreen .proc
|
|||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
;-------------------------------*------------------
|
;-------------------------------*------------------
|
||||||
placetanks .proc
|
.proc placetanks
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
ldx #(MaxPlayers-1) ;maxNumberOfPlayers-1
|
ldx #(MaxPlayers-1) ;maxNumberOfPlayers-1
|
||||||
lda #0
|
lda #0
|
||||||
@@ -642,6 +641,7 @@ DrawTankNrX
|
|||||||
sta xdraw+1
|
sta xdraw+1
|
||||||
lda ytankstable,x
|
lda ytankstable,x
|
||||||
sta ydraw
|
sta ydraw
|
||||||
|
mva #0 ydraw+1
|
||||||
|
|
||||||
jsr TypeChar
|
jsr TypeChar
|
||||||
|
|
||||||
@@ -690,10 +690,30 @@ ZeroesToGo
|
|||||||
sta (xbyte),y
|
sta (xbyte),y
|
||||||
dey
|
dey
|
||||||
bne ClearPM
|
bne ClearPM
|
||||||
|
|
||||||
NoPlayerMissile
|
NoPlayerMissile
|
||||||
|
; draw defensive weapons like shield ( tank number in X )
|
||||||
|
; in xdraw, ydraw we have coordinates left LOWER corner of Tank char
|
||||||
|
lda ActiveDefenceWeapon,x
|
||||||
|
cmp #57 ; one shot shield activation
|
||||||
|
beq ShieldDraw
|
||||||
|
cmp #58 ; shield with energy and parachute activation
|
||||||
|
beq ShieldDraw
|
||||||
|
cmp #59 ; shield with energy activation
|
||||||
|
beq ShieldDraw
|
||||||
|
cmp #61 ; Auto Defence
|
||||||
|
beq DrawTankShieldWihHorns
|
||||||
|
cmp #56 ; Mag Deflector
|
||||||
|
beq DrawTankShieldWihHorns
|
||||||
|
bne NoShieldDraw
|
||||||
|
ShieldDraw
|
||||||
|
jsr DrawTankShield.DrawInPosition
|
||||||
|
NoShieldDraw
|
||||||
DoNotDrawTankNr
|
DoNotDrawTankNr
|
||||||
rts
|
rts
|
||||||
|
DrawTankShieldWihHorns
|
||||||
|
jsr DrawTankShield.DrawInPosition
|
||||||
|
jsr DrawTankShieldHorns
|
||||||
|
rts
|
||||||
.endp
|
.endp
|
||||||
|
|
||||||
; -------------------------------------
|
; -------------------------------------
|
||||||
@@ -718,6 +738,88 @@ tankflash_loop
|
|||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
|
|
||||||
|
;--------------------------------------------------
|
||||||
|
.proc DrawTankShield
|
||||||
|
; X - tank number
|
||||||
|
; if use DrawInPosition entry point then:
|
||||||
|
; xdraw, ydraw - coordinates left LOWER corner of Tank char
|
||||||
|
; values remain there after a DrawTankNr proc.
|
||||||
|
;
|
||||||
|
; 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
|
||||||
|
; draw left vertical line of shield ( | )
|
||||||
|
mva #6 temp ; strange !!!
|
||||||
|
@
|
||||||
|
jsr plot
|
||||||
|
.nowarn dew ydraw
|
||||||
|
dec temp
|
||||||
|
bne @-
|
||||||
|
; draw left oblique line of shield ( / )
|
||||||
|
mva #4 temp
|
||||||
|
@
|
||||||
|
jsr plot
|
||||||
|
.nowarn dew ydraw
|
||||||
|
inw xdraw
|
||||||
|
dec temp
|
||||||
|
bne @-
|
||||||
|
; draw top horizontal line of shield ( _ )
|
||||||
|
mva #5 temp
|
||||||
|
@
|
||||||
|
jsr plot
|
||||||
|
inw xdraw
|
||||||
|
dec temp
|
||||||
|
bne @-
|
||||||
|
; draw right oblique line of shield ( \ )
|
||||||
|
mva #4 temp
|
||||||
|
@
|
||||||
|
jsr plot
|
||||||
|
inw ydraw
|
||||||
|
inw xdraw
|
||||||
|
dec temp
|
||||||
|
bne @-
|
||||||
|
; draw right vertical line of shield ( | )
|
||||||
|
mva #7 temp
|
||||||
|
@
|
||||||
|
jsr plot
|
||||||
|
inw ydraw
|
||||||
|
dec temp
|
||||||
|
bne @-
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
;--------------------------------------------------
|
||||||
|
.proc DrawTankShieldHorns
|
||||||
|
; use only directly after DrawTankShield
|
||||||
|
; this proc draws a little "horns" on shield.
|
||||||
|
; Symbol of defensive but aggressive :) weapon
|
||||||
|
;--------------------------------------------------
|
||||||
|
.nowarn dew xdraw ; 1 pixel left
|
||||||
|
sbw ydraw #$0a ; 10 pixels up
|
||||||
|
jsr plot
|
||||||
|
.nowarn dew ydraw
|
||||||
|
inw xdraw
|
||||||
|
jsr plot
|
||||||
|
sbw xdraw #$0d ; 13 pixels left
|
||||||
|
jsr plot
|
||||||
|
inw xdraw
|
||||||
|
inw ydraw
|
||||||
|
jsr plot
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
.proc drawmountains
|
.proc drawmountains
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
@@ -1349,7 +1451,7 @@ EndPutChar
|
|||||||
; ------------------------------------------
|
; ------------------------------------------
|
||||||
.proc PutChar4x4
|
.proc PutChar4x4
|
||||||
; puts 4x4 pixels char on the graphics screen
|
; puts 4x4 pixels char on the graphics screen
|
||||||
; in: xdraw, ydraw (LOWER left corner of the char)
|
; in: dx, dy (LOWER left corner of the char)
|
||||||
; in: CharCode4x4 (.sbyte)
|
; in: CharCode4x4 (.sbyte)
|
||||||
; in: plot4x4color (0/1)
|
; in: plot4x4color (0/1)
|
||||||
; all pixels are being drawn
|
; all pixels are being drawn
|
||||||
@@ -1403,7 +1505,7 @@ GetUpper4bits
|
|||||||
bpl CopyChar
|
bpl CopyChar
|
||||||
|
|
||||||
; calculating coordinates from xdraw and ydraw
|
; calculating coordinates from xdraw and ydraw
|
||||||
mwa xdraw xbyte
|
mwa dx xbyte
|
||||||
|
|
||||||
lda xbyte
|
lda xbyte
|
||||||
and #$7
|
and #$7
|
||||||
@@ -1414,7 +1516,7 @@ GetUpper4bits
|
|||||||
rorw xbyte
|
rorw xbyte
|
||||||
;---
|
;---
|
||||||
ldy xbyte
|
ldy xbyte
|
||||||
lda ydraw ; y = y - 3 because left lower.
|
lda dy ; y = y - 3 because left lower.
|
||||||
sec
|
sec
|
||||||
sbc #3
|
sbc #3
|
||||||
tax
|
tax
|
||||||
@@ -1465,4 +1567,15 @@ EndPut4x4
|
|||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
|
|
||||||
|
.proc SetMainScreen
|
||||||
|
mva #0 dmactl
|
||||||
|
VDLI DLIinterruptGraph ; jsr SetDLI for graphics (game) screen
|
||||||
|
mwa #dl dlptrs ; issue #72 (glitches when switches)
|
||||||
|
lda dmactls
|
||||||
|
and #$fc
|
||||||
|
ora #$02 ; 2=normal, 3 = wide screen width
|
||||||
|
sta dmactls
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
|
||||||
.endif
|
.endif
|
||||||
+112
-47
@@ -36,7 +36,7 @@
|
|||||||
;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"143" ; number of this build (3 bytes)
|
dta d"144" ; number of this build (3 bytes)
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
icl 'definitions.asm'
|
icl 'definitions.asm'
|
||||||
@@ -55,26 +55,33 @@
|
|||||||
.zpvar xc .word
|
.zpvar xc .word
|
||||||
.zpvar temp .word ;temporary word for the most embeded loops only
|
.zpvar temp .word ;temporary word for the most embeded loops only
|
||||||
.zpvar temp2 .word ;same as above
|
.zpvar temp2 .word ;same as above
|
||||||
|
.zpvar modify .word ;origially used to replace self-modyfying code
|
||||||
.zpvar tempXROLLER .word ;same as above for XROLLER routine (used also in result display routine)
|
.zpvar tempXROLLER .word ;same as above for XROLLER routine (used also in result display routine)
|
||||||
.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
|
||||||
;--------------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 ;circle drawing variables
|
.zpvar fx .byte
|
||||||
.zpvar yi .word ;Y (word) in draw routine
|
.zpvar yi .word ;Y (word) in draw routine
|
||||||
.zpvar fy .byte
|
.zpvar fy .byte
|
||||||
.zpvar xk .word
|
.zpvar xk .word
|
||||||
.zpvar fs .byte
|
.zpvar fs .byte
|
||||||
.zpvar yc .byte ;ycircle - temporary for circle
|
.zpvar yc .byte ;ycircle - temporary for circle
|
||||||
.zpvar dx .word
|
.zpvar dx .word
|
||||||
.zpvar tempor2 .byte
|
|
||||||
.zpvar dy .word
|
.zpvar dy .word
|
||||||
.zpvar dd .word
|
.zpvar dd .word
|
||||||
.zpvar di .word
|
.zpvar di .word
|
||||||
.zpvar dp .word
|
.zpvar dp .word
|
||||||
.zpvar modify .word
|
;----------------------------
|
||||||
.zpvar weaponPointer .word
|
.zpvar weaponPointer .word
|
||||||
.zpvar dliCounter .byte
|
.zpvar dliCounter .byte
|
||||||
|
.zpvar pressTimer .byte
|
||||||
|
.zpvar NTSCcounter .byte
|
||||||
|
;.zpvar dliA .byte
|
||||||
|
;.zpvar dliX .byte
|
||||||
|
;.zpvar dliY .byte
|
||||||
|
|
||||||
;* RMT ZeroPage addresses
|
;* RMT ZeroPage addresses
|
||||||
.zpvar p_tis .word
|
.zpvar p_tis .word
|
||||||
.zpvar p_trackslbstable .word
|
.zpvar p_trackslbstable .word
|
||||||
@@ -103,7 +110,7 @@
|
|||||||
;Game loading address
|
;Game loading address
|
||||||
ORG $3000
|
ORG $3000
|
||||||
WeaponFont
|
WeaponFont
|
||||||
ins 'artwork/weapons_AW5.fnt' ; 'artwork/weapons.fnt'
|
ins 'artwork/weapons_AW5_mod.fnt' ; 'artwork/weapons.fnt'
|
||||||
;-----------------------------------------------
|
;-----------------------------------------------
|
||||||
;Screen displays go here to avoid crossing 4kb barrier
|
;Screen displays go here to avoid crossing 4kb barrier
|
||||||
;-----------------------------------------------
|
;-----------------------------------------------
|
||||||
@@ -128,19 +135,24 @@ START
|
|||||||
|
|
||||||
jsr RandomizeSequence
|
jsr RandomizeSequence
|
||||||
; for the round #1 shooting sequence is random
|
; for the round #1 shooting sequence is random
|
||||||
|
|
||||||
|
; activate mag deflector for all players (test)
|
||||||
|
; ldx numberOfPlayers
|
||||||
|
; dex
|
||||||
|
;@
|
||||||
|
; mva #56 ActiveDefenceWeapon,x
|
||||||
|
; tay
|
||||||
|
; lda DefensiveEnergy,y
|
||||||
|
; sta ShieldEnergy,x ; set energy of shield
|
||||||
|
; dex
|
||||||
|
; bpl @-
|
||||||
|
; mag deflector activated! (test)
|
||||||
MainGameLoop
|
MainGameLoop
|
||||||
VDLI DLIinterruptText ; jsr SetDLI for text (purchase) screen
|
|
||||||
|
|
||||||
jsr CallPurchaseForEveryTank
|
jsr CallPurchaseForEveryTank
|
||||||
|
|
||||||
; issue #72 (glitches when switches)
|
; issue #72 (glitches when switches)
|
||||||
mva #0 dmactl
|
mva #0 dmactl
|
||||||
lda dmactls
|
|
||||||
and #$fc
|
|
||||||
;ora #$02 ; 2=normal, 3 = wide screen width, 0 = no screen
|
|
||||||
sta dmactls
|
|
||||||
|
|
||||||
jsr GetRandomWind
|
jsr GetRandomWind
|
||||||
|
|
||||||
jsr RoundInit
|
jsr RoundInit
|
||||||
@@ -300,13 +312,7 @@ SettingEnergies
|
|||||||
jsr calculatemountains ;let mountains be easy for the eye
|
jsr calculatemountains ;let mountains be easy for the eye
|
||||||
;jsr calculatemountains0 ;only for tests - makes mountains flat and 0 height
|
;jsr calculatemountains0 ;only for tests - makes mountains flat and 0 height
|
||||||
|
|
||||||
VDLI DLIinterruptGraph ; jsr SetDLI for graphics (game) screen
|
jsr SetMainScreen
|
||||||
mwa #dl dlptrs ; issue #72 (glitches when switches)
|
|
||||||
lda dmactls
|
|
||||||
and #$fc
|
|
||||||
ora #$02 ; 2=normal, 3 = wide screen width
|
|
||||||
sta dmactls
|
|
||||||
|
|
||||||
|
|
||||||
jsr drawmountains ;draw them
|
jsr drawmountains ;draw them
|
||||||
jsr drawtanks ;finally draw tanks
|
jsr drawtanks ;finally draw tanks
|
||||||
@@ -428,6 +434,10 @@ AfterManualShooting
|
|||||||
|
|
||||||
ShootNow
|
ShootNow
|
||||||
jsr Shoot
|
jsr Shoot
|
||||||
|
;here we clear offensive text (after a shoot)
|
||||||
|
ldy TankNr
|
||||||
|
mva #0 plot4x4color
|
||||||
|
jsr DisplayOffensiveTextNr
|
||||||
|
|
||||||
lda HitFlag ;0 if missed
|
lda HitFlag ;0 if missed
|
||||||
beq missed
|
beq missed
|
||||||
@@ -439,9 +449,9 @@ ShootNow
|
|||||||
|
|
||||||
continueMainRoundLoopAfterSeppuku
|
continueMainRoundLoopAfterSeppuku
|
||||||
;here we clear offensive text (after a shoot)
|
;here we clear offensive text (after a shoot)
|
||||||
ldy TankNr
|
;ldy TankNr
|
||||||
mva #0 plot4x4color
|
;mva #0 plot4x4color
|
||||||
jsr DisplayOffensiveTextNr
|
;jsr DisplayOffensiveTextNr
|
||||||
|
|
||||||
|
|
||||||
AfterExplode
|
AfterExplode
|
||||||
@@ -649,7 +659,7 @@ MetodOfDeath
|
|||||||
|
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
.proc DecreaseEnergyX
|
.proc DecreaseEnergyX
|
||||||
;Decreases energy of player nr X
|
;Decreases energy of player nr X by the value Y
|
||||||
;increases his financial loss
|
;increases his financial loss
|
||||||
;increases gain of tank TankNr
|
;increases gain of tank TankNr
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
@@ -687,6 +697,33 @@ NotNegativeEnergy
|
|||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
|
|
||||||
|
;--------------------------------------------------
|
||||||
|
.proc DecreaseShieldEnergyX
|
||||||
|
; Decreases energy of shield player nr X by the value Y
|
||||||
|
; if shield energy is 0 after decrease then in Y we have
|
||||||
|
; rest of the energy - to decrease tank energy
|
||||||
|
;--------------------------------------------------
|
||||||
|
sty EnergyDecrease
|
||||||
|
ldy #0 ; if Shield survive then no decrease tank anergy
|
||||||
|
; Energy cannot be less than 0
|
||||||
|
lda ShieldEnergy,x
|
||||||
|
cmp EnergyDecrease
|
||||||
|
bcc UseAllShieldEnergy
|
||||||
|
;sec
|
||||||
|
sbc EnergyDecrease
|
||||||
|
bpl NotNegativeShieldEnergy ; jump allways
|
||||||
|
UseAllShieldEnergy
|
||||||
|
; now calculate rest of energy for future tank energy decrease
|
||||||
|
sec
|
||||||
|
lda EnergyDecrease
|
||||||
|
sbc ShieldEnergy,x
|
||||||
|
tay
|
||||||
|
lda #0
|
||||||
|
NotNegativeShieldEnergy
|
||||||
|
sta ShieldEnergy,x
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
|
||||||
;---------------------------------
|
;---------------------------------
|
||||||
.proc Seppuku
|
.proc Seppuku
|
||||||
lda #0
|
lda #0
|
||||||
@@ -707,7 +744,7 @@ NotNegativeEnergy
|
|||||||
.endp
|
.endp
|
||||||
|
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
GetRandomWind .proc
|
.proc GetRandomWind
|
||||||
;in: MaxWind (byte)
|
;in: MaxWind (byte)
|
||||||
;out: Wind (word)
|
;out: Wind (word)
|
||||||
;uses: _
|
;uses: _
|
||||||
@@ -736,7 +773,7 @@ GetRandomWind .proc
|
|||||||
.endp
|
.endp
|
||||||
|
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
PMoutofScreen .proc
|
.proc PMoutofScreen
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
lda #$00 ; let all P/M disappear
|
lda #$00 ; let all P/M disappear
|
||||||
:8 sta hposp0+#
|
:8 sta hposp0+#
|
||||||
@@ -746,21 +783,26 @@ PMoutofScreen .proc
|
|||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
.proc WeaponCleanup;
|
.proc WeaponCleanup;
|
||||||
; cleaning of the weapon possesion tables
|
; cleaning of the weapon possesion tables
|
||||||
; (99 of Baby Missles, all other weapons=0)
|
; 99 of Baby Missles(index==0), all other weapons=0)
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
ldx #$3f
|
ldx #$3f ; TODO: maxweapons
|
||||||
lda #$0
|
@ lda #$0
|
||||||
@
|
cpx #48 ; White Flag
|
||||||
sta TanksWeapon1,x
|
bne @+
|
||||||
|
lda #99
|
||||||
|
@ sta TanksWeapon1,x
|
||||||
sta TanksWeapon2,x
|
sta TanksWeapon2,x
|
||||||
sta TanksWeapon3,x
|
sta TanksWeapon3,x
|
||||||
sta TanksWeapon4,x
|
sta TanksWeapon4,x
|
||||||
sta TanksWeapon5,x
|
sta TanksWeapon5,x
|
||||||
sta TanksWeapon6,x
|
sta TanksWeapon6,x
|
||||||
dex
|
dex
|
||||||
sne:lda #99
|
beq setBmissile
|
||||||
bpl @-
|
bpl @-1
|
||||||
rts
|
rts
|
||||||
|
setBmissile
|
||||||
|
lda #99
|
||||||
|
bne @-
|
||||||
.endp
|
.endp
|
||||||
|
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
@@ -854,7 +896,8 @@ ClearResults
|
|||||||
bne ClearResults
|
bne ClearResults
|
||||||
|
|
||||||
mva #1 CurrentRoundNr ;we start from round 1
|
mva #1 CurrentRoundNr ;we start from round 1
|
||||||
|
mva #6 NTSCcounter
|
||||||
|
|
||||||
; RMT INIT
|
; RMT INIT
|
||||||
lda #$f0 ;initial value
|
lda #$f0 ;initial value
|
||||||
sta RMTSFXVOLUME ;sfx note volume * 16 (0,16,32,...,240)
|
sta RMTSFXVOLUME ;sfx note volume * 16 (0,16,32,...,240)
|
||||||
@@ -872,8 +915,10 @@ ClearResults
|
|||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
|
|
||||||
DLIinterruptGraph .proc
|
.proc DLIinterruptGraph
|
||||||
pha
|
;sta dliA
|
||||||
|
;sty dliY
|
||||||
|
pha
|
||||||
phy
|
phy
|
||||||
ldy dliCounter
|
ldy dliCounter
|
||||||
lda dliColorsBack,y
|
lda dliColorsBack,y
|
||||||
@@ -884,27 +929,46 @@ DLIinterruptGraph .proc
|
|||||||
sta COLPF1
|
sta COLPF1
|
||||||
sty COLPF2
|
sty COLPF2
|
||||||
inc dliCounter
|
inc dliCounter
|
||||||
ply
|
;ldy dliY
|
||||||
|
;lda dliA
|
||||||
|
ply
|
||||||
pla
|
pla
|
||||||
rti
|
rti
|
||||||
.endp
|
.endp
|
||||||
|
|
||||||
DLIinterruptText .proc
|
.proc DLIinterruptText
|
||||||
pha
|
;sta dliA
|
||||||
|
pha
|
||||||
sta WSYNC
|
sta WSYNC
|
||||||
mva #TextBackgroundColor colpf2
|
mva #TextBackgroundColor colpf2
|
||||||
mva #TextForegroundColor colpf3
|
mva #TextForegroundColor colpf3
|
||||||
pla
|
;lda dliA
|
||||||
|
pla
|
||||||
DLIinterruptNone
|
DLIinterruptNone
|
||||||
rti
|
rti
|
||||||
.endp
|
.endp
|
||||||
|
|
||||||
VBLinterrupt .proc
|
.proc VBLinterrupt
|
||||||
pha
|
pha
|
||||||
phx
|
phx
|
||||||
phy
|
phy
|
||||||
mva #0 dliCounter
|
mva #0 dliCounter
|
||||||
|
|
||||||
|
lda PAL
|
||||||
|
and #%00001110
|
||||||
|
beq itsPAL
|
||||||
|
;it is NTSC here
|
||||||
|
dec NTSCcounter
|
||||||
|
bne itsPAL
|
||||||
|
mva #6 NTSCcounter
|
||||||
|
bne exitVBL ; skip doing VBL things each 6 frames in Amerika, Amerika
|
||||||
|
; We're all living in Amerika, Coca Cola, Wonderbra
|
||||||
|
|
||||||
|
itsPAL
|
||||||
|
; pressTimer is trigger tick counter. always 50 ticks / s
|
||||||
|
bit:smi:inc pressTimer ; timer halted if >127. max time measured 2.5 s
|
||||||
|
|
||||||
|
; ------- RMT -------
|
||||||
lda sfx_effect
|
lda sfx_effect
|
||||||
bmi lab2
|
bmi lab2
|
||||||
asl @ ; * 2
|
asl @ ; * 2
|
||||||
@@ -912,13 +976,14 @@ VBLinterrupt .proc
|
|||||||
ldx #0 ;X = 0 channel (0..3 or 0..7 for stereo module)
|
ldx #0 ;X = 0 channel (0..3 or 0..7 for stereo module)
|
||||||
lda #0 ;A = 12 note (0..60)
|
lda #0 ;A = 12 note (0..60)
|
||||||
jsr RASTERMUSICTRACKER+15 ;RMT_SFX start tone (It works only if FEAT_SFX is enabled !!!)
|
jsr RASTERMUSICTRACKER+15 ;RMT_SFX start tone (It works only if FEAT_SFX is enabled !!!)
|
||||||
;
|
|
||||||
lda #$ff
|
lda #$ff
|
||||||
sta sfx_effect ;reinit value
|
sta sfx_effect ;reinit value
|
||||||
;
|
|
||||||
lab2
|
lab2
|
||||||
jsr RASTERMUSICTRACKER+3 ;1 play
|
jsr RASTERMUSICTRACKER+3 ;1 play
|
||||||
|
; ------- RMT -------
|
||||||
|
|
||||||
|
exitVBL
|
||||||
ply
|
ply
|
||||||
plx
|
plx
|
||||||
pla
|
pla
|
||||||
@@ -986,7 +1051,7 @@ UsageLoop
|
|||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
;----------------------------------------------
|
;----------------------------------------------
|
||||||
RandomizeAngle .proc ;
|
.proc RandomizeAngle
|
||||||
; routine returns in A
|
; routine returns in A
|
||||||
; a valid angle for the tank's barrel.
|
; a valid angle for the tank's barrel.
|
||||||
; X is not changed
|
; X is not changed
|
||||||
@@ -1009,7 +1074,7 @@ RandomizeAngle .proc ;
|
|||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
;----------------------------------------------
|
;----------------------------------------------
|
||||||
RandomizeForce .proc
|
.proc RandomizeForce
|
||||||
; routine returns in ForceTable/L/H
|
; routine returns in ForceTable/L/H
|
||||||
; valid force of shooting for TankNr
|
; valid force of shooting for TankNr
|
||||||
; in X must be TankNr
|
; in X must be TankNr
|
||||||
@@ -1222,7 +1287,7 @@ getkeyend
|
|||||||
|
|
||||||
.endp
|
.endp
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
getkeynowait .proc;
|
.proc getkeynowait
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
jsr WaitForKeyRelease
|
jsr WaitForKeyRelease
|
||||||
lda kbcode
|
lda kbcode
|
||||||
@@ -1230,7 +1295,7 @@ getkeynowait .proc;
|
|||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
WaitForKeyRelease .proc
|
.proc WaitForKeyRelease
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
lda JSTICK0
|
lda JSTICK0
|
||||||
and #$0f
|
and #$0f
|
||||||
|
|||||||
BIN
Binary file not shown.
+328
-178
@@ -8,7 +8,7 @@
|
|||||||
;----------------------------------------
|
;----------------------------------------
|
||||||
|
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
Options .proc
|
.proc Options
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
; start-up screen - options, etc.
|
; start-up screen - options, etc.
|
||||||
; this function returns:
|
; this function returns:
|
||||||
@@ -201,14 +201,9 @@ OptionsYLoop
|
|||||||
;-------------------------------------------
|
;-------------------------------------------
|
||||||
; call of the purchase screens for each tank
|
; call of the purchase screens for each tank
|
||||||
.proc CallPurchaseForEveryTank
|
.proc CallPurchaseForEveryTank
|
||||||
jsr PMoutofScreen
|
|
||||||
mwa #PurchaseDL dlptrs
|
|
||||||
lda dmactls
|
|
||||||
and #$fc
|
|
||||||
ora #$02 ; normal screen width
|
|
||||||
sta dmactls
|
|
||||||
|
|
||||||
mva #0 TankNr
|
mva #0 TankNr
|
||||||
|
sta isInventory
|
||||||
@
|
@
|
||||||
ldx TankNr
|
ldx TankNr
|
||||||
lda SkillTable,x
|
lda SkillTable,x
|
||||||
@@ -231,17 +226,29 @@ AfterManualPurchase
|
|||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
.proc Purchase ;
|
.proc Purchase ;
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
|
; TODO: when round ends with a weapon depleted the pointer points to an empty line
|
||||||
|
|
||||||
; In tanknr there is a number of the tank (player)
|
; In tanknr there is a number of the tank (player)
|
||||||
; that is buying weapons now (from 0).
|
; that is buying weapons now (from 0).
|
||||||
; Rest of the data is taken from appropriate tables
|
; Rest of the data is taken from appropriate tables
|
||||||
; and during the purchase these tables are modified.
|
; and during the purchase these tables are modified.
|
||||||
|
|
||||||
|
mva #0 dmactl
|
||||||
|
VDLI DLIinterruptText ; jsr SetDLI for text (purchase) screen
|
||||||
|
jsr PMoutofScreen
|
||||||
|
mwa #PurchaseDL dlptrs
|
||||||
|
lda dmactls
|
||||||
|
and #$fc
|
||||||
|
ora #$02 ; normal screen width
|
||||||
|
sta dmactls
|
||||||
|
|
||||||
mwa #ListOfWeapons WeaponsListDL ;switch to the list of offensive weapons
|
mwa #ListOfWeapons WeaponsListDL ;switch to the list of offensive weapons
|
||||||
|
|
||||||
ldx tankNr
|
ldx tankNr
|
||||||
lda TankStatusColoursTable,x
|
lda TankStatusColoursTable,x
|
||||||
sta colpf2s
|
sta colpf2s
|
||||||
|
|
||||||
|
|
||||||
; we are clearing list of the weapons
|
; we are clearing list of the weapons
|
||||||
mva #$ff LastWeapon
|
mva #$ff LastWeapon
|
||||||
mva #$00 WhichList
|
mva #$00 WhichList
|
||||||
@@ -265,6 +272,8 @@ NextChar03
|
|||||||
; here we must jump in after each purchase
|
; here we must jump in after each purchase
|
||||||
; to generate again list of available weapons
|
; to generate again list of available weapons
|
||||||
AfterPurchase
|
AfterPurchase
|
||||||
|
|
||||||
|
; current cash display
|
||||||
mva #sfx_purchase sfx_effect
|
mva #sfx_purchase sfx_effect
|
||||||
ldx tanknr
|
ldx tanknr
|
||||||
lda moneyL,x
|
lda moneyL,x
|
||||||
@@ -277,32 +286,44 @@ AfterPurchase
|
|||||||
; 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
|
||||||
mwa #ListOfWeapons xbyte
|
mwa #ListOfWeapons xbyte
|
||||||
ldx #$00 ; number of the checked weapon
|
ldx #$00 ; index of the checked weapon
|
||||||
stx HowManyOnTheList1 ; amounts of weapons (shells, bullets) in both lists
|
stx HowManyOnTheList1 ; amounts of weapons (shells, bullets) in both lists
|
||||||
stx HowManyOnTheList2
|
stx HowManyOnTheList2
|
||||||
stx PositionOnTheList
|
|
||||||
|
|
||||||
; Creating full list of the available weapons for displaying
|
; Creating full list of the available weapons for displaying
|
||||||
; in X there is a number of the weapon to be checked,
|
; in X there is an index of the weapon to be checked,
|
||||||
; in 'Xbyte' address of the first char in filled screen line
|
; in 'Xbyte' address of the first char in filled screen line
|
||||||
|
|
||||||
CreateList
|
CreateList
|
||||||
; checking if the weapon of the given number is present
|
stx temp ; index of a weapon will be necessary later
|
||||||
|
; checking if the weapon of the given index is present
|
||||||
lda WeaponUnits,x
|
lda WeaponUnits,x
|
||||||
jeq NoWeapon
|
jeq NoWeapon
|
||||||
|
|
||||||
|
ldy tanknr
|
||||||
|
|
||||||
|
bit isInventory
|
||||||
|
jmi itIsInventory
|
||||||
|
|
||||||
|
; put "Purchase" on the screen
|
||||||
|
ldx #[purchaseTextEnd-purchaseText-1]
|
||||||
|
@ lda purchaseText,x
|
||||||
|
sta purchaseActivate,x
|
||||||
|
dex
|
||||||
|
bpl @-
|
||||||
|
|
||||||
; checking if we can afford buying this weapon
|
; checking if we can afford buying this weapon
|
||||||
ldy tanknr
|
ldx temp
|
||||||
lda moneyH,y
|
lda moneyH,y
|
||||||
cmp WeaponPriceH,x
|
cmp WeaponPriceH,x
|
||||||
bne CheckWeapon01
|
bne @+
|
||||||
lda moneyL,y
|
lda moneyL,y
|
||||||
cmp WeaponPriceL,x
|
cmp WeaponPriceL,x
|
||||||
CheckWeapon01
|
@
|
||||||
jcc TooLittleCash
|
jcc TooLittleCash
|
||||||
|
|
||||||
; we have enough cash and the weapon can be
|
; we have enough cash and the weapon can be
|
||||||
; added to the list
|
; added to the list
|
||||||
stx temp ; number of weapon will be necessary later
|
|
||||||
|
|
||||||
; first parentheses and other special chars
|
; first parentheses and other special chars
|
||||||
; (it's easier this way)
|
; (it's easier this way)
|
||||||
@@ -322,58 +343,65 @@ CheckWeapon01
|
|||||||
lda #16 ; "0"
|
lda #16 ; "0"
|
||||||
sta (xbyte),y
|
sta (xbyte),y
|
||||||
|
|
||||||
; now symbol of the weapon
|
;now number of units (shells) to be purchased
|
||||||
lda WeaponSymbols,x
|
adw xbyte #23 displayposition ; 23 chars from the beginning of the line
|
||||||
ldy #$4 ; 4 chars from the beginning of the line
|
|
||||||
sta (xbyte),y
|
|
||||||
|
|
||||||
;now number of purchased units (shells)
|
|
||||||
clc
|
|
||||||
lda xbyte
|
|
||||||
adc #23 ; 23 chars from the beginning of the line
|
|
||||||
sta displayposition
|
|
||||||
lda xbyte+1
|
|
||||||
adc #$00
|
|
||||||
sta displayposition+1
|
|
||||||
lda WeaponUnits,x
|
lda WeaponUnits,x
|
||||||
sta decimal
|
sta decimal
|
||||||
jsr displaybyte
|
jsr displaybyte
|
||||||
ldx temp ;getting back number of the weapon
|
ldx temp ;getting back index of the weapon
|
||||||
|
|
||||||
; and now price of the weapon
|
; and now price of the weapon
|
||||||
clc
|
adw xbyte #27 displayposition ; 27 chars from the beginning of the line
|
||||||
lda xbyte
|
|
||||||
adc #27 ; 27 chars from the beginning of the line
|
|
||||||
sta displayposition
|
|
||||||
lda xbyte+1
|
|
||||||
adc #$00
|
|
||||||
sta displayposition+1
|
|
||||||
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 displaydec
|
||||||
|
|
||||||
lda temp ;getting back number of the weapon
|
jmp notInventory
|
||||||
pha ;and saving it on the stack
|
|
||||||
|
|
||||||
|
itIsInventory
|
||||||
|
; put "Activate" on the screen
|
||||||
|
ldx #[purchaseTextEnd-purchaseText-1]
|
||||||
|
@ lda activateText,x
|
||||||
|
sta purchaseActivate,x
|
||||||
|
dex
|
||||||
|
bpl @-
|
||||||
|
|
||||||
|
ldx temp
|
||||||
|
lda TanksWeaponsTableL,y
|
||||||
|
sta weaponPointer
|
||||||
|
lda TanksWeaponsTableH,y
|
||||||
|
sta weaponPointer+1
|
||||||
|
ldy temp
|
||||||
|
lda (weaponPointer),y
|
||||||
|
jeq noWeapon
|
||||||
|
|
||||||
|
; clear price area
|
||||||
|
ldy #22 ; beginning of the price area
|
||||||
|
lda #0
|
||||||
|
@ sta (XBYTE),y
|
||||||
|
iny
|
||||||
|
cpy #32+1 ; end of price
|
||||||
|
bne @-
|
||||||
|
|
||||||
|
notInventory
|
||||||
|
|
||||||
|
; number of posessed shells
|
||||||
|
lda temp ; weapon index again
|
||||||
jsr HowManyBullets
|
jsr HowManyBullets
|
||||||
sta decimal
|
sta decimal
|
||||||
|
|
||||||
pla
|
adw xbyte #1 displayposition
|
||||||
sta temp ; let's store weapon number again
|
|
||||||
|
|
||||||
clc
|
|
||||||
lda xbyte
|
|
||||||
adc #1 ; 1 char from the beginning of the screen
|
|
||||||
sta displayposition
|
|
||||||
lda xbyte+1
|
|
||||||
adc #$00
|
|
||||||
sta displayposition+1
|
|
||||||
jsr displaybyte
|
jsr displaybyte
|
||||||
|
|
||||||
|
ldx temp ;weapon index
|
||||||
|
; now symbol of the weapon
|
||||||
|
lda WeaponSymbols,x
|
||||||
|
ldy #$4 ; 4 chars from the beginning of the line
|
||||||
|
sta (xbyte),y
|
||||||
|
|
||||||
; and now name of the weapon and finisheeeedd !!!!
|
; and now name of the weapon and finisheeeedd !!!!
|
||||||
ldx temp ;weapon number
|
|
||||||
mva #0 temp+1 ; this number is only in X
|
mva #0 temp+1 ; this number is only in X
|
||||||
; times 16 (it's length of the names of weapons)
|
; times 16 (it's length of the names of weapons)
|
||||||
ldy #3 ; Rotate 4 times
|
ldy #3 ; Rotate 4 times
|
||||||
@@ -383,55 +411,54 @@ CheckWeapon01
|
|||||||
dey
|
dey
|
||||||
bpl @-
|
bpl @-
|
||||||
|
|
||||||
adw temp #NamesOfWeapons-6 modify
|
adw temp #NamesOfWeapons-6 weaponPointer
|
||||||
|
|
||||||
ldy #6 ; from 6th char
|
ldy #6 ; from 6th char on screen
|
||||||
|
|
||||||
@
|
@
|
||||||
lda (modify),y
|
lda (weaponPointer),y
|
||||||
sta (xbyte),y
|
sta (xbyte),y
|
||||||
iny
|
iny
|
||||||
cpy #(16+6)
|
cpy #(16+6)
|
||||||
bne @-
|
bne @-
|
||||||
|
|
||||||
|
|
||||||
; in X there is what we need
|
; in X there is what we need (weapon index)
|
||||||
|
|
||||||
; If on screen after the purchase there is still
|
; If on screen after the purchase there is still
|
||||||
; present the weapon purchased recently,
|
; present the weapon purchased recently,
|
||||||
; the pointer must point to it.
|
; the pointer must point to it.
|
||||||
|
bit lastWeapon
|
||||||
|
bpl @+ ; if == $ff => first run, jump to top
|
||||||
|
mva #0 PositionOnTheList
|
||||||
|
beq NotTheSameAsLastTime
|
||||||
|
@
|
||||||
cpx LastWeapon
|
cpx LastWeapon
|
||||||
bne NotTheSameAsLastTime
|
bne NotTheSameAsLastTime
|
||||||
lda WhichList
|
lda WhichList
|
||||||
bne ominx06
|
bne @+
|
||||||
lda HowManyOnTheList1
|
lda HowManyOnTheList1
|
||||||
sta PositionOnTheList
|
sta PositionOnTheList
|
||||||
jmp NotTheSameAsLastTime
|
jmp NotTheSameAsLastTime
|
||||||
ominx06
|
@
|
||||||
lda HowManyOnTheList2
|
lda HowManyOnTheList2
|
||||||
sta PositionOnTheList
|
sta PositionOnTheList
|
||||||
NotTheSameAsLastTime
|
NotTheSameAsLastTime
|
||||||
; increase appropriate counter
|
; increase appropriate counter
|
||||||
txa
|
txa
|
||||||
cpx #$30
|
cpx #$30
|
||||||
bcs SecondList
|
bcs DefenceList
|
||||||
ldy HowManyOnTheList1
|
ldy HowManyOnTheList1
|
||||||
sta NubersOfWeaponsL1,y
|
sta IndexesOfWeaponsL1,y
|
||||||
inc HowManyOnTheList1
|
inc HowManyOnTheList1
|
||||||
bne NextLineOfTheList
|
bne NextLineOfTheList
|
||||||
SecondList
|
DefenceList
|
||||||
ldy HowManyOnTheList2
|
ldy HowManyOnTheList2
|
||||||
sta NubersOfWeaponsL2,y
|
sta IndexesOfWeaponsL2,y
|
||||||
inc HowManyOnTheList2
|
inc HowManyOnTheList2
|
||||||
; If everything is copied then next line
|
; If everything is copied then next line
|
||||||
NextLineOfTheList
|
NextLineOfTheList
|
||||||
clc
|
adw xbyte #40
|
||||||
lda xbyte
|
|
||||||
adc #40
|
|
||||||
sta xbyte
|
|
||||||
bcc TooLittleCash
|
|
||||||
inc xbyte+1
|
|
||||||
TooLittleCash
|
TooLittleCash
|
||||||
NoWeapon
|
NoWeapon
|
||||||
|
|
||||||
@@ -550,18 +577,48 @@ DoNotIncHigher2
|
|||||||
; screen clearing at each list refresh
|
; screen clearing at each list refresh
|
||||||
; (it was very ugly - I checked it :)
|
; (it was very ugly - I checked it :)
|
||||||
|
|
||||||
|
bit isInventory ;
|
||||||
|
bpl ChoosingItemForPurchase
|
||||||
|
|
||||||
|
lda whichList
|
||||||
|
bne PositionDefensive
|
||||||
|
|
||||||
|
; calculate positionOnTheList from the activeWeapon (offensives)
|
||||||
|
ldx tankNr
|
||||||
|
lda activeWeapon,x
|
||||||
|
ldy #0
|
||||||
|
@
|
||||||
|
cmp IndexesOfWeaponsL1,y
|
||||||
|
beq ?weaponfound
|
||||||
|
iny
|
||||||
|
cpy #48 ; maxOffensiveWeapons
|
||||||
|
bne @-
|
||||||
|
; not found apparently?
|
||||||
|
; TODO: check border case (the last weapon)
|
||||||
|
ldy #0
|
||||||
|
beq ?weaponFound ; jmp
|
||||||
|
PositionDefensive
|
||||||
|
jsr calcPosDefensive
|
||||||
|
|
||||||
|
|
||||||
|
?weaponFound
|
||||||
|
; weapon index in Y
|
||||||
|
sty positionOnTheList
|
||||||
|
|
||||||
; Here we have all we need
|
; Here we have all we need
|
||||||
; So choose the weapon for purchase ......
|
; So choose the weapon for purchase ......
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
ChoosingItemForPurchase
|
ChoosingItemForPurchase
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
|
|
||||||
jsr PutLitteChar ; Places pointer at the right position
|
jsr PutLitteChar ; Places pointer at the right position
|
||||||
jsr getkey
|
jsr getkey
|
||||||
ldx escFlag
|
ldx escFlag
|
||||||
seq:rts
|
seq:jmp WaitForKeyRelease ; like jsr ... : rts
|
||||||
cmp #$2c ; Tab
|
cmp #$2c ; Tab
|
||||||
jeq ListChange
|
jeq ListChange
|
||||||
|
cmp #$06 ; cursor left
|
||||||
|
jeq ListChange
|
||||||
cmp #$0c ; Return
|
cmp #$0c ; Return
|
||||||
sne:rts
|
sne:rts
|
||||||
cmp #$e
|
cmp #$e
|
||||||
@@ -600,8 +657,7 @@ EndUpX
|
|||||||
PurchaseKeyDown
|
PurchaseKeyDown
|
||||||
lda WhichList
|
lda WhichList
|
||||||
beq GoDown1
|
beq GoDown1
|
||||||
inc PositionOnTheList
|
inc:lda PositionOnTheList
|
||||||
lda PositionOnTheList
|
|
||||||
cmp HowManyOnTheList2
|
cmp HowManyOnTheList2
|
||||||
bne EndGoDownX
|
bne EndGoDownX
|
||||||
ldy HowManyOnTheList2
|
ldy HowManyOnTheList2
|
||||||
@@ -609,8 +665,7 @@ PurchaseKeyDown
|
|||||||
sty PositionOnTheList
|
sty PositionOnTheList
|
||||||
jmp ChoosingItemForPurchase
|
jmp ChoosingItemForPurchase
|
||||||
GoDown1
|
GoDown1
|
||||||
inc PositionOnTheList
|
inc:lda PositionOnTheList
|
||||||
lda PositionOnTheList
|
|
||||||
cmp HowManyOnTheList1
|
cmp HowManyOnTheList1
|
||||||
bne MakeOffsetDown
|
bne MakeOffsetDown
|
||||||
ldy HowManyOnTheList1
|
ldy HowManyOnTheList1
|
||||||
@@ -632,18 +687,31 @@ EndGoDownX
|
|||||||
|
|
||||||
; swapping the displayed list and setting pointer to position 0
|
; swapping the displayed list and setting pointer to position 0
|
||||||
ListChange
|
ListChange
|
||||||
|
mva #0 OffsetDL1
|
||||||
|
|
||||||
lda WhichList
|
lda WhichList
|
||||||
eor #$01
|
eor #$01
|
||||||
sta WhichList
|
sta WhichList
|
||||||
bne SecondSelected
|
bne DeffensiveSelected
|
||||||
|
|
||||||
mwa #ListOfWeapons WeaponsListDL
|
mwa #ListOfWeapons WeaponsListDL
|
||||||
jmp @+
|
lda isInventory
|
||||||
SecondSelected
|
beq @+
|
||||||
mwa #ListOfDefensiveWeapons WeaponsListDL
|
; inventory
|
||||||
|
jsr calcPosOffensive
|
||||||
|
jmp ChoosingItemForPurchase
|
||||||
@
|
@
|
||||||
lda #$00
|
mva #0 PositionOnTheList
|
||||||
sta PositionOnTheList
|
jmp ChoosingItemForPurchase
|
||||||
sta OffsetDL1
|
|
||||||
|
DeffensiveSelected
|
||||||
|
mwa #ListOfDefensiveWeapons WeaponsListDL
|
||||||
|
lda isInventory
|
||||||
|
beq @+
|
||||||
|
jsr calcPosDefensive
|
||||||
|
jmp ChoosingItemForPurchase
|
||||||
|
@
|
||||||
|
mva #0 positionOnTheList
|
||||||
jmp ChoosingItemForPurchase
|
jmp ChoosingItemForPurchase
|
||||||
|
|
||||||
.endp
|
.endp
|
||||||
@@ -652,24 +720,23 @@ SecondSelected
|
|||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
.proc PurchaseWeaponNow
|
.proc PurchaseWeaponNow
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
weaponPtr = temp
|
bit isInventory
|
||||||
isPriceZero = tempXRoller
|
bmi inventorySelect
|
||||||
|
|
||||||
lda WhichList
|
lda WhichList
|
||||||
bne PurchaseDeffensive
|
bne PurchaseDeffensive
|
||||||
|
|
||||||
; here we purchase the offensive weapon
|
; here we purchase the offensive weapon
|
||||||
ldy PositionOnTheList
|
ldy PositionOnTheList
|
||||||
lda NubersOfWeaponsL1,y
|
lda IndexesOfWeaponsL1,y
|
||||||
jmp PurchaseAll
|
jmp PurchaseAll
|
||||||
PurchaseDeffensive
|
PurchaseDeffensive
|
||||||
ldy PositionOnTheList
|
ldy PositionOnTheList
|
||||||
lda NubersOfWeaponsL2,y
|
lda IndexesOfWeaponsL2,y
|
||||||
PurchaseAll
|
PurchaseAll
|
||||||
; after getting weapon number the routine is common for all
|
; after getting weapon index the routine is common for all
|
||||||
ldx tanknr
|
ldx tanknr
|
||||||
tay ; weapon number is in Y
|
tay ; weapon index is in Y
|
||||||
beq @+
|
|
||||||
sec
|
sec
|
||||||
lda moneyL,x ; substracting from posessed money
|
lda moneyL,x ; substracting from posessed money
|
||||||
sbc WeaponPriceL,y ; of price of the given weapon
|
sbc WeaponPriceL,y ; of price of the given weapon
|
||||||
@@ -678,61 +745,117 @@ PurchaseAll
|
|||||||
sbc WeaponPriceH,y
|
sbc WeaponPriceH,y
|
||||||
sta moneyH,x
|
sta moneyH,x
|
||||||
|
|
||||||
; save info about price == 0
|
positiveMoney
|
||||||
lda WeaponPriceL,y
|
|
||||||
ora WeaponPriceH,y
|
|
||||||
sta isPriceZero
|
|
||||||
|
|
||||||
|
|
||||||
; now we have to get address of
|
; now we have to get address of
|
||||||
; the table of the weapon of the tank
|
; the table of the weapon of the tank
|
||||||
; and add appropriate number of shells
|
; and add appropriate number of shells
|
||||||
|
|
||||||
lda TanksWeaponsTableL,x
|
lda TanksWeaponsTableL,x
|
||||||
sta weaponPtr
|
sta weaponPointer
|
||||||
lda TanksWeaponsTableH,x
|
lda TanksWeaponsTableH,x
|
||||||
sta weaponPtr+1
|
sta weaponPointer+1
|
||||||
|
|
||||||
clc
|
clc
|
||||||
lda (weaponPtr),y ; and we have number of posessed bullets of the weapon
|
lda (weaponPointer),y ; and we have number of posessed bullets of the weapon
|
||||||
adc WeaponUnits,y
|
adc WeaponUnits,y
|
||||||
sta (weaponPtr),y ; and we added appropriate number of bullets
|
sta (weaponPointer),y ; and we added appropriate number of bullets
|
||||||
cmp #100 ; but there should be no more than 99 bullets
|
cmp #100 ; but there should be no more than 99 bullets
|
||||||
bcc LessThan100
|
bcc LessThan100
|
||||||
lda #99
|
lda #99
|
||||||
sta (weaponPtr),y
|
sta (weaponPointer),y
|
||||||
LessThan100
|
LessThan100
|
||||||
sty LastWeapon ; store last purchased weapon
|
sty LastWeapon ; store last purchased weapon
|
||||||
; because we must put screen pointer next to it
|
; because we must put screen pointer next to it
|
||||||
|
|
||||||
; additional check for unfinished game
|
mva #0 PositionOnTheList ; to move the pointer to the top when no more monies
|
||||||
; if weapon was free (price == $0)
|
|
||||||
; then have nothing...
|
|
||||||
lda isPriceZero
|
|
||||||
bne @+
|
|
||||||
lda #0
|
|
||||||
sta (weaponPtr),y
|
|
||||||
@
|
|
||||||
jmp Purchase.AfterPurchase
|
jmp Purchase.AfterPurchase
|
||||||
|
|
||||||
|
inventorySelect
|
||||||
|
lda whichList
|
||||||
|
bne invSelectDef
|
||||||
|
|
||||||
|
ldy PositionOnTheList
|
||||||
|
lda IndexesOfWeaponsL1,y
|
||||||
|
ldx tankNr
|
||||||
|
sta activeWeapon,x
|
||||||
|
jmp WaitForKeyRelease ; rts
|
||||||
|
|
||||||
|
invSelectDef
|
||||||
|
ldy PositionOnTheList
|
||||||
|
lda IndexesOfWeaponsL2,y
|
||||||
|
tay
|
||||||
|
ldx tankNr
|
||||||
|
sta ActiveDefenceWeapon,x
|
||||||
|
; decrease number of defensives
|
||||||
|
lda TanksWeaponsTableL,x
|
||||||
|
sta weaponPointer
|
||||||
|
lda TanksWeaponsTableH,x
|
||||||
|
sta weaponPointer+1
|
||||||
|
lda (weaponPointer),y
|
||||||
|
sec
|
||||||
|
sbc #1
|
||||||
|
sta (weaponPointer),y
|
||||||
|
|
||||||
|
lda DefensiveEnergy,y
|
||||||
|
sta ShieldEnergy,x
|
||||||
|
jmp WaitForKeyRelease ; rts
|
||||||
|
|
||||||
|
.endp
|
||||||
|
; -----------------------------------------------------
|
||||||
|
.proc calcPosDefensive
|
||||||
|
; calculate positionOnTheList from the activeWeapon (defensives)
|
||||||
|
ldx tankNr
|
||||||
|
lda ActiveDefenceWeapon,x
|
||||||
|
beq ?noWeaponActive
|
||||||
|
ldy #0 ; min defensive weapon
|
||||||
|
@
|
||||||
|
cmp IndexesOfWeaponsL2,y
|
||||||
|
beq ?weaponfound
|
||||||
|
iny
|
||||||
|
cpy #8*2 ; maxDefensiveWeapon
|
||||||
|
bne @-
|
||||||
|
; not found apparently?
|
||||||
|
; TODO: check border case (the last weapon)
|
||||||
|
?noWeaponActive
|
||||||
|
ldy #0
|
||||||
|
?weaponFound
|
||||||
|
sty positionOnTheList
|
||||||
|
rts
|
||||||
.endp
|
.endp
|
||||||
|
|
||||||
|
.proc calcPosOffensive
|
||||||
|
; calculate positionOnTheList from the activeWeapon (defensives)
|
||||||
|
ldx tankNr
|
||||||
|
lda ActiveWeapon,x
|
||||||
|
beq ?noWeaponActive
|
||||||
|
ldy #0 ; min defensive weapon
|
||||||
|
@
|
||||||
|
cmp IndexesOfWeaponsL1,y
|
||||||
|
beq ?weaponfound
|
||||||
|
iny
|
||||||
|
cpy #8*5 ; maxOffensiveWeapon
|
||||||
|
bne @-
|
||||||
|
; not found apparently?
|
||||||
|
; TODO: check border case (the last weapon)
|
||||||
|
?noWeaponActive
|
||||||
|
ldy #0
|
||||||
|
?weaponFound
|
||||||
|
sty positionOnTheList
|
||||||
|
rts
|
||||||
|
.endp
|
||||||
|
; -----------------------------------------------------
|
||||||
.proc PutLitteChar
|
.proc PutLitteChar
|
||||||
; first let's cleat both lists from little chars
|
; first let's clear both lists from little chars
|
||||||
mwa #ListOfWeapons xbyte
|
mwa #ListOfWeapons xbyte
|
||||||
ldx #52 ; there are 52 lines total
|
ldx #52 ; there are 52 lines total
|
||||||
ldy #$00
|
ldy #$00
|
||||||
EraseLoop
|
EraseLoop
|
||||||
lda #$00
|
tya ; lda #$00
|
||||||
sta (xbyte),y
|
sta (xbyte),y
|
||||||
clc
|
adw xbyte #40
|
||||||
lda xbyte
|
|
||||||
adc #40
|
|
||||||
sta xbyte
|
|
||||||
bcc ominx02
|
|
||||||
inc xbyte+1
|
|
||||||
ominx02
|
|
||||||
dex
|
dex
|
||||||
bpl EraseLoop
|
bpl EraseLoop
|
||||||
|
|
||||||
; now let's check which list is active now
|
; now let's check which list is active now
|
||||||
lda WhichList
|
lda WhichList
|
||||||
beq CharToList1
|
beq CharToList1
|
||||||
@@ -742,13 +865,7 @@ ominx02
|
|||||||
ldx PositionOnTheList
|
ldx PositionOnTheList
|
||||||
beq SelectList2 ; if there is 0 we add nothing
|
beq SelectList2 ; if there is 0 we add nothing
|
||||||
AddLoop2
|
AddLoop2
|
||||||
clc
|
adw xbyte #40
|
||||||
lda xbyte
|
|
||||||
adc #40
|
|
||||||
sta xbyte
|
|
||||||
bcc ominx03
|
|
||||||
inc xbyte+1
|
|
||||||
ominx03
|
|
||||||
dex
|
dex
|
||||||
bne AddLoop2
|
bne AddLoop2
|
||||||
SelectList2
|
SelectList2
|
||||||
@@ -770,13 +887,7 @@ CharToList1
|
|||||||
ldx PositionOnTheList
|
ldx PositionOnTheList
|
||||||
beq SelectList1 ; if there is 0 we add nothing
|
beq SelectList1 ; if there is 0 we add nothing
|
||||||
AddLoop1
|
AddLoop1
|
||||||
clc
|
adw xbyte #40
|
||||||
lda xbyte
|
|
||||||
adc #40
|
|
||||||
sta xbyte
|
|
||||||
bcc ominx04
|
|
||||||
inc xbyte+1
|
|
||||||
ominx04
|
|
||||||
dex
|
dex
|
||||||
bne AddLoop1
|
bne AddLoop1
|
||||||
SelectList1
|
SelectList1
|
||||||
@@ -787,13 +898,7 @@ SelectList1
|
|||||||
ldx OffsetDL1
|
ldx OffsetDL1
|
||||||
beq SetWindowList1 ; if zero then add nothing
|
beq SetWindowList1 ; if zero then add nothing
|
||||||
LoopWindow1
|
LoopWindow1
|
||||||
clc
|
adw xbyte #40
|
||||||
lda xbyte
|
|
||||||
adc #40
|
|
||||||
sta xbyte
|
|
||||||
bcc ominx05
|
|
||||||
inc xbyte+1
|
|
||||||
ominx05
|
|
||||||
dex
|
dex
|
||||||
bne LoopWindow1
|
bne LoopWindow1
|
||||||
SetWindowList1
|
SetWindowList1
|
||||||
@@ -805,8 +910,8 @@ SetWindowList1
|
|||||||
ldy #>EmptyLine
|
ldy #>EmptyLine
|
||||||
lda OffsetDL1
|
lda OffsetDL1
|
||||||
beq NoArrowUp
|
beq NoArrowUp
|
||||||
ldx #<MoreUp
|
ldx #<MoreUp
|
||||||
ldy #>MoreUp
|
ldy #>MoreUp
|
||||||
NoArrowUp
|
NoArrowUp
|
||||||
stx MoreUpdl
|
stx MoreUpdl
|
||||||
sty MoreUpdl+1
|
sty MoreUpdl+1
|
||||||
@@ -819,8 +924,8 @@ NoArrowUp
|
|||||||
bmi NoArrowDown
|
bmi NoArrowDown
|
||||||
cmp OffsetDL1
|
cmp OffsetDL1
|
||||||
bcc NoArrowDown
|
bcc NoArrowDown
|
||||||
ldx #<MoreDown
|
ldx #<MoreDown
|
||||||
ldy #>MoreDown
|
ldy #>MoreDown
|
||||||
NoArrowDown
|
NoArrowDown
|
||||||
stx MoreDowndl
|
stx MoreDowndl
|
||||||
sty MoreDowndl+1
|
sty MoreDowndl+1
|
||||||
@@ -1200,6 +1305,8 @@ space dta d" "
|
|||||||
;that's easy because we have number of tank
|
;that's easy because we have number of tank
|
||||||
;and xtankstableL and H keep X position of a given tank
|
;and xtankstableL and H keep X position of a given tank
|
||||||
|
|
||||||
|
;save vars (messed when printing...)
|
||||||
|
|
||||||
lda xtankstableL,y
|
lda xtankstableL,y
|
||||||
sta temp
|
sta temp
|
||||||
lda xtankstableH,y
|
lda xtankstableH,y
|
||||||
@@ -1320,12 +1427,12 @@ DOTNcharloop
|
|||||||
asl
|
asl
|
||||||
clc
|
clc
|
||||||
adc TextPositionX
|
adc TextPositionX
|
||||||
sta Xdraw
|
sta dx
|
||||||
lda #0
|
lda #0
|
||||||
adc TextPositionX+1
|
adc TextPositionX+1
|
||||||
sta Xdraw+1
|
sta dx+1
|
||||||
lda TextPositionY
|
lda TextPositionY
|
||||||
sta ydraw
|
sta dy
|
||||||
jsr PutChar4x4
|
jsr PutChar4x4
|
||||||
|
|
||||||
inc TextCounter
|
inc TextCounter
|
||||||
@@ -1343,6 +1450,7 @@ DOTNcharloop
|
|||||||
;address in LineAddress4x4
|
;address in LineAddress4x4
|
||||||
;starting from LineXdraw, LineYdraw
|
;starting from LineXdraw, LineYdraw
|
||||||
|
|
||||||
|
|
||||||
ldy #0
|
ldy #0
|
||||||
sty LineCharNr
|
sty LineCharNr
|
||||||
|
|
||||||
@@ -1355,8 +1463,8 @@ TypeLine4x4Loop
|
|||||||
beq EndOfTypeLine4x4
|
beq EndOfTypeLine4x4
|
||||||
|
|
||||||
sta CharCode4x4
|
sta CharCode4x4
|
||||||
mwa LineXdraw Xdraw
|
mwa LineXdraw dx
|
||||||
mva LineYdraw Ydraw
|
mva LineYdraw dy
|
||||||
mva #1 plot4x4color
|
mva #1 plot4x4color
|
||||||
jsr PutChar4x4 ;type empty pixels as well!
|
jsr PutChar4x4 ;type empty pixels as well!
|
||||||
adw LineXdraw #4
|
adw LineXdraw #4
|
||||||
@@ -1372,10 +1480,6 @@ EndOfTypeLine4x4
|
|||||||
.proc AreYouSure
|
.proc AreYouSure
|
||||||
;using 4x4 font
|
;using 4x4 font
|
||||||
|
|
||||||
;save vars (messed in TypeLine4x4)
|
|
||||||
mwa Xdraw xk
|
|
||||||
mva Ydraw yc
|
|
||||||
|
|
||||||
mva #4 ResultY ; where seppuku text starts Y-wise on the screen
|
mva #4 ResultY ; where seppuku text starts Y-wise on the screen
|
||||||
|
|
||||||
;top frame
|
;top frame
|
||||||
@@ -1405,7 +1509,7 @@ EndOfTypeLine4x4
|
|||||||
skip01
|
skip01
|
||||||
|
|
||||||
;clean
|
;clean
|
||||||
mva #3 dx
|
mva #3 di
|
||||||
mva #4 ResultY
|
mva #4 ResultY
|
||||||
@
|
@
|
||||||
mva #1 plot4x4color
|
mva #1 plot4x4color
|
||||||
@@ -1415,23 +1519,16 @@ skip01
|
|||||||
jsr TypeLine4x4
|
jsr TypeLine4x4
|
||||||
adb ResultY #4 ;next line
|
adb ResultY #4 ;next line
|
||||||
|
|
||||||
dec dx
|
dec di
|
||||||
bne @-
|
bne @-
|
||||||
|
|
||||||
|
|
||||||
quit_areyousure
|
quit_areyousure
|
||||||
;restore vars
|
|
||||||
mva yc Ydraw
|
|
||||||
mwa xk Xdraw
|
|
||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
;--------------------------------
|
;--------------------------------
|
||||||
.proc DisplaySeppuku
|
.proc DisplaySeppuku
|
||||||
;using 4x4 font
|
;using 4x4 font
|
||||||
|
|
||||||
;save vars (messed in TypeLine4x4)
|
|
||||||
mwa Xdraw xk
|
|
||||||
mva Ydraw yc
|
|
||||||
|
|
||||||
mva #20 fs ; temp, how many times blink the billboard
|
mva #20 fs ; temp, how many times blink the billboard
|
||||||
seppuku_loop
|
seppuku_loop
|
||||||
@@ -1459,7 +1556,7 @@ seppuku_loop
|
|||||||
|
|
||||||
;clean seppuku
|
;clean seppuku
|
||||||
|
|
||||||
mva #3 dx
|
mva #3 di
|
||||||
mva #4 ResultY
|
mva #4 ResultY
|
||||||
@
|
@
|
||||||
mwa #lineClear LineAddress4x4
|
mwa #lineClear LineAddress4x4
|
||||||
@@ -1468,16 +1565,13 @@ seppuku_loop
|
|||||||
jsr TypeLine4x4
|
jsr TypeLine4x4
|
||||||
adb ResultY #4 ;next line
|
adb ResultY #4 ;next line
|
||||||
|
|
||||||
dec dx
|
dec di
|
||||||
bne @-
|
bne @-
|
||||||
|
|
||||||
dec fs
|
dec fs
|
||||||
jne seppuku_loop
|
jne seppuku_loop
|
||||||
|
|
||||||
quit_seppuku
|
quit_seppuku
|
||||||
;restore vars
|
|
||||||
mva yc Ydraw
|
|
||||||
mwa xk Xdraw
|
|
||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
;--------------------------------
|
;--------------------------------
|
||||||
@@ -1690,8 +1784,6 @@ FinishResultDisplay
|
|||||||
bpl @-
|
bpl @-
|
||||||
|
|
||||||
adw temp #NamesOfWeapons
|
adw temp #NamesOfWeapons
|
||||||
ldy #6 ; from 6th character
|
|
||||||
|
|
||||||
ldy #15
|
ldy #15
|
||||||
@
|
@
|
||||||
lda (temp),y
|
lda (temp),y
|
||||||
@@ -1699,6 +1791,39 @@ FinishResultDisplay
|
|||||||
dey
|
dey
|
||||||
bpl @-
|
bpl @-
|
||||||
|
|
||||||
|
;---------------------
|
||||||
|
;displaying name of the defence weapon (if active)
|
||||||
|
;---------------------
|
||||||
|
lda #$08 ; (
|
||||||
|
sta textbuffer+80+22
|
||||||
|
lda #$09 ; )
|
||||||
|
sta textbuffer+80+39
|
||||||
|
lda ActiveDefenceWeapon,x
|
||||||
|
bne ActiveDefence
|
||||||
|
; clear brackets
|
||||||
|
lda #$00 ; space
|
||||||
|
sta textbuffer+80+22
|
||||||
|
sta textbuffer+80+39
|
||||||
|
lda #47 ; no weapon name
|
||||||
|
ActiveDefence
|
||||||
|
sta temp ;get back number of the weapon
|
||||||
|
mva #0 temp+1
|
||||||
|
; times 16 (because this is length of weapon name)
|
||||||
|
ldy #3 ; shift left 4 times
|
||||||
|
@
|
||||||
|
aslw temp
|
||||||
|
dey
|
||||||
|
bpl @-
|
||||||
|
|
||||||
|
adw temp #NamesOfWeapons
|
||||||
|
|
||||||
|
ldy #15
|
||||||
|
@
|
||||||
|
lda (temp),y
|
||||||
|
sta textbuffer+40+40+23,y
|
||||||
|
dey
|
||||||
|
bpl @-
|
||||||
|
|
||||||
;---------------------
|
;---------------------
|
||||||
;displaying the energy of a tank
|
;displaying the energy of a tank
|
||||||
;---------------------
|
;---------------------
|
||||||
@@ -1709,6 +1834,31 @@ FinishResultDisplay
|
|||||||
mwa #textbuffer+48 displayposition
|
mwa #textbuffer+48 displayposition
|
||||||
jsr displaybyte
|
jsr displaybyte
|
||||||
|
|
||||||
|
;---------------------
|
||||||
|
;displaying the energy of a tank shield (if exist)
|
||||||
|
;---------------------
|
||||||
|
; clear (if no shield)
|
||||||
|
lda #$00 ; space
|
||||||
|
sta textbuffer+40+10
|
||||||
|
sta textbuffer+40+11
|
||||||
|
sta textbuffer+40+12
|
||||||
|
sta textbuffer+40+13
|
||||||
|
; check shield energy and display it
|
||||||
|
ldx TankNr
|
||||||
|
lda ActiveDefenceWeapon,x
|
||||||
|
beq NoDefenceWeapon
|
||||||
|
lda ShieldEnergy,x
|
||||||
|
beq NoShieldEnergy
|
||||||
|
sta decimal ; displayed value
|
||||||
|
lda #$08 ; (
|
||||||
|
sta textbuffer+40+10
|
||||||
|
mwa #textbuffer+40+11 displayposition
|
||||||
|
jsr displaybyte
|
||||||
|
lda #$09 ; )
|
||||||
|
sta textbuffer+40+13
|
||||||
|
NoDefenceWeapon
|
||||||
|
NoShieldEnergy
|
||||||
|
|
||||||
;=========================
|
;=========================
|
||||||
;display Force
|
;display Force
|
||||||
;=========================
|
;=========================
|
||||||
@@ -1717,7 +1867,7 @@ FinishResultDisplay
|
|||||||
sta decimal
|
sta decimal
|
||||||
lda ForceTableH,x
|
lda ForceTableH,x
|
||||||
sta decimal+1
|
sta decimal+1
|
||||||
mwa #textbuffer+40+34 displayposition
|
mwa #textbuffer+40+36 displayposition
|
||||||
jsr displaydec
|
jsr displaydec
|
||||||
|
|
||||||
;=========================
|
;=========================
|
||||||
@@ -1729,9 +1879,9 @@ FinishResultDisplay
|
|||||||
lda AngleTable,x
|
lda AngleTable,x
|
||||||
bmi AngleToLeft
|
bmi AngleToLeft
|
||||||
lda #$7f ; (tab) character
|
lda #$7f ; (tab) character
|
||||||
sta textbuffer+40+23
|
sta textbuffer+40+25
|
||||||
lda #0 ;space
|
lda #0 ;space
|
||||||
sta textbuffer+40+20
|
sta textbuffer+40+22
|
||||||
lda #90
|
lda #90
|
||||||
sec
|
sec
|
||||||
sbc AngleTable,x
|
sbc AngleTable,x
|
||||||
@@ -1748,12 +1898,12 @@ AngleToLeft
|
|||||||
lda BarrelTableL,y
|
lda BarrelTableL,y
|
||||||
sta CharCode
|
sta CharCode
|
||||||
lda #$7e ;(del) char
|
lda #$7e ;(del) char
|
||||||
sta textbuffer+40+20
|
sta textbuffer+40+22
|
||||||
lda #0 ;space
|
lda #0 ;space
|
||||||
sta textbuffer+40+23
|
sta textbuffer+40+25
|
||||||
|
|
||||||
AngleDisplay
|
AngleDisplay
|
||||||
mwa #textbuffer+40+21 displayposition
|
mwa #textbuffer+40+23 displayposition
|
||||||
jsr displaybyte
|
jsr displaybyte
|
||||||
|
|
||||||
;=========================
|
;=========================
|
||||||
@@ -1763,9 +1913,9 @@ AngleDisplay
|
|||||||
lda Wind+3 ; highest byte of 4 byte wind
|
lda Wind+3 ; highest byte of 4 byte wind
|
||||||
bmi DisplayLeftWind
|
bmi DisplayLeftWind
|
||||||
lda #$7f ; (tab) char
|
lda #$7f ; (tab) char
|
||||||
sta textbuffer+80+28
|
sta textbuffer+80+20
|
||||||
lda #0 ;space
|
lda #0 ;space
|
||||||
sta textbuffer+80+25
|
sta textbuffer+80+17
|
||||||
beq DisplayWindValue
|
beq DisplayWindValue
|
||||||
DisplayLeftWind
|
DisplayLeftWind
|
||||||
sec ; Wind = -Wind
|
sec ; Wind = -Wind
|
||||||
@@ -1776,14 +1926,14 @@ DisplayLeftWind
|
|||||||
sbc temp+1
|
sbc temp+1
|
||||||
sta temp+1
|
sta temp+1
|
||||||
lda #$7e ;(del) char
|
lda #$7e ;(del) char
|
||||||
sta textbuffer+80+25
|
sta textbuffer+80+17
|
||||||
lda #0 ;space
|
lda #0 ;space
|
||||||
sta textbuffer+80+28
|
sta textbuffer+80+20
|
||||||
DisplayWindValue
|
DisplayWindValue
|
||||||
:4 lsrw temp ;divide by 16 to have a nice value on a screen
|
:4 lsrw temp ;divide by 16 to have a nice value on a screen
|
||||||
lda temp
|
lda temp
|
||||||
sta decimal
|
sta decimal
|
||||||
mwa #textbuffer+80+26 displayposition
|
mwa #textbuffer+80+18 displayposition
|
||||||
jsr displaybyte
|
jsr displaybyte
|
||||||
|
|
||||||
;=========================
|
;=========================
|
||||||
@@ -1791,7 +1941,7 @@ DisplayWindValue
|
|||||||
;=========================
|
;=========================
|
||||||
lda CurrentRoundNr
|
lda CurrentRoundNr
|
||||||
sta decimal
|
sta decimal
|
||||||
mwa #textbuffer+80+14 displayposition
|
mwa #textbuffer+80+7 displayposition
|
||||||
jsr displaybyte ;decimal (byte), displayposition (word)
|
jsr displaybyte ;decimal (byte), displayposition (word)
|
||||||
|
|
||||||
rts
|
rts
|
||||||
|
|||||||
+13
-9
@@ -30,6 +30,8 @@ RoundNrDisplay
|
|||||||
;=====================================================
|
;=====================================================
|
||||||
variablesStart ; zeroing starts here
|
variablesStart ; zeroing starts here
|
||||||
;=====================================================
|
;=====================================================
|
||||||
|
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
|
sfx_effect .ds 1
|
||||||
@@ -47,7 +49,7 @@ moneyH ;we place zero at the end of prices and money
|
|||||||
;and have range from 0 to 99990 (not too much)
|
;and have range from 0 to 99990 (not too much)
|
||||||
;money players have (maybe one more byte is needed?)
|
;money players have (maybe one more byte is needed?)
|
||||||
.DS [MaxPlayers]
|
.DS [MaxPlayers]
|
||||||
moneyL
|
moneyL
|
||||||
.DS [MaxPlayers]
|
.DS [MaxPlayers]
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
gainH ;how much money player gets after the round
|
gainH ;how much money player gets after the round
|
||||||
@@ -66,6 +68,8 @@ looseL
|
|||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
Energy
|
Energy
|
||||||
.DS [MaxPlayers]
|
.DS [MaxPlayers]
|
||||||
|
ShieldEnergy
|
||||||
|
.DS [MaxPlayers]
|
||||||
EnergyDecrease .DS 1
|
EnergyDecrease .DS 1
|
||||||
eXistenZ
|
eXistenZ
|
||||||
.DS [MaxPlayers]
|
.DS [MaxPlayers]
|
||||||
@@ -95,6 +99,8 @@ 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
|
||||||
|
.DS [MaxPlayers]
|
||||||
WeaponDepleted .DS 1 ; if 0 deactivate the weapon and switch to Baby Missile
|
WeaponDepleted .DS 1 ; if 0 deactivate the weapon and switch to Baby Missile
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
|
|
||||||
@@ -114,7 +120,7 @@ MaxWind .ds 1 ;
|
|||||||
WindOrientation .DS 1 ;(0-right,1-left)
|
WindOrientation .DS 1 ;(0-right,1-left)
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
Counter .DS 1 ;temporary Counter for outside loops
|
Counter .DS 1 ;temporary Counter for outside loops
|
||||||
HitFlag .DS 1 ;1 when missile hit anything
|
HitFlag .DS 1 ;$ff when missile hit ground, $00 when no hit, $01-$06 tank index+1 when hit tank
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
xtankstableL ;X positions of tanks (lower left point)
|
xtankstableL ;X positions of tanks (lower left point)
|
||||||
.DS [MaxPlayers]
|
.DS [MaxPlayers]
|
||||||
@@ -239,14 +245,12 @@ temptankNr .DS 1
|
|||||||
|
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
;Variables from textproc.s65
|
;Variables from textproc.s65
|
||||||
; tables with numbers of weapons on the right lists
|
; tables with indexes of weapons on the right lists
|
||||||
; to be honest - I do not know at the moment what the above
|
|
||||||
; comment was supposed to mean...
|
|
||||||
; OK (2022) so, L1 is list of offensive weapons, L2 - defensive
|
; OK (2022) so, L1 is list of offensive weapons, L2 - defensive
|
||||||
NubersOfWeaponsL1
|
IndexesOfWeaponsL1
|
||||||
.ds 8*5 ; :(8*5) .by $ff
|
.ds 8*5 ; max 40 offensive weapons. this is wrong, should be 48, still only 32 defined.
|
||||||
NubersOfWeaponsL2
|
IndexesOfWeaponsL2
|
||||||
.ds 8*2 ; :(8*2) .by $ff
|
.ds 8*2 ; max 16 defensive weapons.
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
|
|
||||||
; variables storing amount of weapons on the first and second
|
; variables storing amount of weapons on the first and second
|
||||||
|
|||||||
+208
-44
@@ -102,14 +102,7 @@ VOID
|
|||||||
jsr xmissile
|
jsr xmissile
|
||||||
|
|
||||||
; soil must fall down now! there is no other way...
|
; soil must fall down now! there is no other way...
|
||||||
|
|
||||||
;first clean the offensive text...
|
|
||||||
ldy TankNr
|
|
||||||
mva #0 plot4x4color
|
|
||||||
jsr DisplayOffensiveTextNr
|
|
||||||
|
|
||||||
; hide tanks or they fall down with soil
|
; hide tanks or they fall down with soil
|
||||||
|
|
||||||
lda TankNr
|
lda TankNr
|
||||||
pha
|
pha
|
||||||
mva #1 Erase
|
mva #1 Erase
|
||||||
@@ -130,6 +123,7 @@ VOID
|
|||||||
mva LeapFrogAngle Angle
|
mva LeapFrogAngle Angle
|
||||||
|
|
||||||
mva #sfx_funky_hit sfx_effect
|
mva #sfx_funky_hit sfx_effect
|
||||||
|
sbw ytraj+1 #$05 ; next missiles start point goes 5 pixel UP to prevent multiple explosion at one point if tank is hit (4 pixels tank height + 1)
|
||||||
jsr Flight
|
jsr Flight
|
||||||
lda HitFlag
|
lda HitFlag
|
||||||
beq EndOfLeapping
|
beq EndOfLeapping
|
||||||
@@ -159,6 +153,7 @@ VOID
|
|||||||
ror Force
|
ror Force
|
||||||
mva LeapFrogAngle Angle
|
mva LeapFrogAngle Angle
|
||||||
mva #sfx_funky_hit sfx_effect
|
mva #sfx_funky_hit sfx_effect
|
||||||
|
sbw ytraj+1 #$05 ; next missiles start point goes 5 pixel UP to prevent multiple explosion at one point if tank is hit (4 pixels tank height + 1)
|
||||||
jsr Flight
|
jsr Flight
|
||||||
lda HitFlag
|
lda HitFlag
|
||||||
beq EndOfLeapping
|
beq EndOfLeapping
|
||||||
@@ -178,16 +173,12 @@ EndOfLeapping
|
|||||||
.proc funkybomb ;
|
.proc funkybomb ;
|
||||||
mva #sfx_baby_missile sfx_effect
|
mva #sfx_baby_missile sfx_effect
|
||||||
mwa xtraj+1 xtrajfb
|
mwa xtraj+1 xtrajfb
|
||||||
mwa ytraj+1 ytrajfb
|
sbw ytraj+1 #$05 ytrajfb ; funky missiles start point goes 5 pixel UP to prevent multiple explosion at one point if tank is hit (4 pixels tank height + 1)
|
||||||
inc FallDown2
|
inc FallDown2
|
||||||
;central Explosion
|
;central Explosion
|
||||||
mva #21 ExplosionRadius
|
mva #21 ExplosionRadius
|
||||||
jsr CalculateExplosionRange0
|
jsr CalculateExplosionRange0
|
||||||
jsr xmissile
|
jsr xmissile
|
||||||
|
|
||||||
ldy TankNr
|
|
||||||
mva #0 plot4x4color
|
|
||||||
jsr DisplayOffensiveTextNr
|
|
||||||
|
|
||||||
lda TankNr
|
lda TankNr
|
||||||
pha
|
pha
|
||||||
@@ -663,12 +654,39 @@ DistanceCheckLoop
|
|||||||
adc #1
|
adc #1
|
||||||
:3 asl
|
:3 asl
|
||||||
tay
|
tay
|
||||||
|
; check shields
|
||||||
|
lda ActiveDefenceWeapon,x
|
||||||
|
cmp #57 ; one hit shield
|
||||||
|
beq UseShield
|
||||||
|
cmp #58 ; shield with energy and parachute
|
||||||
|
beq UseShieldWithEnergy
|
||||||
|
cmp #59 ; shield with energy
|
||||||
|
beq UseShieldWithEnergy
|
||||||
|
cmp #61 ; Auto Defence (it works only if hit ground next to tank. Tank hit is handled in Flight proc)
|
||||||
|
beq UseShieldWithEnergy
|
||||||
|
cmp #56 ; Mag deflector (it works only if hit ground next to tank. Tank hit is handled in Flight proc)
|
||||||
|
beq UseShieldWithEnergy
|
||||||
jsr DecreaseEnergyX
|
jsr DecreaseEnergyX
|
||||||
|
jmp EndOfDistanceCheckLoop
|
||||||
|
UseShieldWithEnergy
|
||||||
|
jsr DecreaseShieldEnergyX
|
||||||
|
cpy #0 ; is necessary to reduce tenk energy ?
|
||||||
|
beq ShieldCoveredTank
|
||||||
|
jsr DecreaseEnergyX
|
||||||
|
ShieldCoveredTank
|
||||||
|
lda ShieldEnergy,x
|
||||||
|
jne EndOfDistanceCheckLoop
|
||||||
|
ShieldEnergy0 ; deactivate if no energy. it's like use one hit shield :)
|
||||||
|
UseShield
|
||||||
|
mva #1 Erase
|
||||||
|
phx
|
||||||
|
jsr DrawTankShield
|
||||||
|
plx
|
||||||
|
mva #0 ActiveDefenceWeapon,x ; deactivate defense weapons
|
||||||
TankIsNotWithinTheRange
|
TankIsNotWithinTheRange
|
||||||
EndOfDistanceCheckLoop
|
EndOfDistanceCheckLoop
|
||||||
txa
|
txa
|
||||||
bne DistanceCheckLoop
|
jne DistanceCheckLoop
|
||||||
mva #sfx_silencer sfx_effect
|
mva #sfx_silencer sfx_effect
|
||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
@@ -740,7 +758,7 @@ UpNotYet
|
|||||||
sbc #1
|
sbc #1
|
||||||
sta ydraw
|
sta ydraw
|
||||||
;check tank collision prior to PLOT
|
;check tank collision prior to PLOT
|
||||||
sty HitFlag
|
sty HitFlag ; set to 0
|
||||||
|
|
||||||
jsr CheckCollisionWithTank
|
jsr CheckCollisionWithTank
|
||||||
|
|
||||||
@@ -1007,13 +1025,11 @@ ContinueToCheckMaxForce2
|
|||||||
; $f3 - shift+key
|
; $f3 - shift+key
|
||||||
|
|
||||||
notpressed
|
notpressed
|
||||||
lda TRIG0S
|
|
||||||
beq notpressed
|
|
||||||
lda SKSTAT
|
lda SKSTAT
|
||||||
cmp #$ff
|
cmp #$ff
|
||||||
beq checkJoy
|
jeq checkJoy
|
||||||
cmp #$f7 ; SHIFT
|
cmp #$f7 ; SHIFT
|
||||||
beq checkJoy
|
jeq checkJoy
|
||||||
|
|
||||||
lda kbcode
|
lda kbcode
|
||||||
and #%10111111 ; SHIFT elimination
|
and #%10111111 ; SHIFT elimination
|
||||||
@@ -1026,6 +1042,18 @@ notpressed
|
|||||||
;---esc pressed-quit game---
|
;---esc pressed-quit game---
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
@
|
||||||
|
cmp #$0d ; I
|
||||||
|
bne @+
|
||||||
|
callInventory
|
||||||
|
mva #$ff isInventory
|
||||||
|
jsr Purchase
|
||||||
|
mva #0 escFlag
|
||||||
|
jsr DisplayStatus
|
||||||
|
jsr SetMainScreen
|
||||||
|
jsr DrawTanks
|
||||||
|
jsr WaitForKeyRelease
|
||||||
|
jmp BeforeFire
|
||||||
@
|
@
|
||||||
cmp #$8e
|
cmp #$8e
|
||||||
jeq CTRLPressedUp
|
jeq CTRLPressedUp
|
||||||
@@ -1064,10 +1092,17 @@ notpressedJoy
|
|||||||
;fire
|
;fire
|
||||||
lda TRIG0S
|
lda TRIG0S
|
||||||
jeq pressedSpace
|
jeq pressedSpace
|
||||||
|
mva #$ff pressTimer ; stop counting frames
|
||||||
jmp notpressed
|
jmp notpressed
|
||||||
|
|
||||||
;
|
;
|
||||||
pressedUp
|
pressedUp
|
||||||
|
lda pressTimer
|
||||||
|
spl:mva #0 pressTimer ; if >128 then reset to 0
|
||||||
|
cmp #25 ; 1/2s
|
||||||
|
bcs CTRLPressedUp
|
||||||
|
|
||||||
|
|
||||||
;force increaseeee!
|
;force increaseeee!
|
||||||
ldx TankNr
|
ldx TankNr
|
||||||
inc ForceTableL,x
|
inc ForceTableL,x
|
||||||
@@ -1104,6 +1139,11 @@ CTRLPressedUp
|
|||||||
|
|
||||||
|
|
||||||
pressedDown
|
pressedDown
|
||||||
|
lda pressTimer
|
||||||
|
spl:mva #0 pressTimer ; if >128 then reset to 0
|
||||||
|
cmp #25 ; 1/2s
|
||||||
|
bcs CTRLPressedDown
|
||||||
|
|
||||||
mva #sfx_set_power_1 sfx_effect
|
mva #sfx_set_power_1 sfx_effect
|
||||||
|
|
||||||
ldx TankNr
|
ldx TankNr
|
||||||
@@ -1197,6 +1237,13 @@ CTRLpressedTAB
|
|||||||
pressedSpace
|
pressedSpace
|
||||||
;=================================
|
;=================================
|
||||||
;we shoot here!!!
|
;we shoot here!!!
|
||||||
|
mva #0 pressTimer ; reset
|
||||||
|
jsr WaitForKeyRelease
|
||||||
|
lda pressTimer
|
||||||
|
cmp #25 ; 1/2s
|
||||||
|
bcs fire
|
||||||
|
jmp callInventory
|
||||||
|
fire
|
||||||
RTS
|
RTS
|
||||||
.endp
|
.endp
|
||||||
|
|
||||||
@@ -1269,9 +1316,20 @@ AfterStrongShoot
|
|||||||
sbc #$00
|
sbc #$00
|
||||||
sta ytraj+2
|
sta ytraj+2
|
||||||
|
|
||||||
|
; checking if the shot is underground (no Flight but Hit :) )
|
||||||
|
ldy #0
|
||||||
|
adw xtraj+1 #mountaintable temp
|
||||||
|
lda ytraj+1
|
||||||
|
cmp (temp),y ; check collision witch mountains
|
||||||
|
bcs ShotUnderGround
|
||||||
jsr Flight
|
jsr Flight
|
||||||
mva #1 color
|
mva #1 color
|
||||||
rts
|
rts
|
||||||
|
ShotUnderGround
|
||||||
|
mwa xtraj+1 xdraw ; but why not XHit and YHit !!!???
|
||||||
|
mwa ytraj+1 ydraw
|
||||||
|
mva #$ff HitFlag
|
||||||
|
rts
|
||||||
.endp
|
.endp
|
||||||
|
|
||||||
|
|
||||||
@@ -1285,9 +1343,13 @@ AfterStrongShoot
|
|||||||
sta Parachute
|
sta Parachute
|
||||||
|
|
||||||
; let's check if the given tank has got the parachute
|
; let's check if the given tank has got the parachute
|
||||||
lda #$35 ; parachute
|
ldx TankNr
|
||||||
jsr HowManyBullets
|
lda ActiveDefenceWeapon,x
|
||||||
beq TankFallsX
|
cmp #54 ; parachute
|
||||||
|
beq ParachuteActive
|
||||||
|
cmp #58 ; scheld witch energy and parachute
|
||||||
|
bne TankFallsX
|
||||||
|
ParachuteActive
|
||||||
inc Parachute
|
inc Parachute
|
||||||
TankFallsX
|
TankFallsX
|
||||||
; coordinates of the first pixel under the tank
|
; coordinates of the first pixel under the tank
|
||||||
@@ -1489,6 +1551,11 @@ EndOfFall
|
|||||||
; first we clear parachute on the screen
|
; first we clear parachute on the screen
|
||||||
mva #1 Erase
|
mva #1 Erase
|
||||||
ldx TankNr
|
ldx TankNr
|
||||||
|
lda ActiveDefenceWeapon,x
|
||||||
|
cmp #54 ; deactivate weapon only if parachute (53)
|
||||||
|
bne NoParachuteWeapon
|
||||||
|
mva #0 ActiveDefenceWeapon,x ; deactivate defence weapon (parachute)
|
||||||
|
NoParachuteWeapon
|
||||||
lda #$34
|
lda #$34
|
||||||
sta CharCode
|
sta CharCode
|
||||||
lda Ytankstable,x
|
lda Ytankstable,x
|
||||||
@@ -1501,10 +1568,8 @@ EndOfFall
|
|||||||
sta xdraw+1
|
sta xdraw+1
|
||||||
jsr TypeChar
|
jsr TypeChar
|
||||||
mva #0 Erase
|
mva #0 Erase
|
||||||
; now we can deduct one parachute from the list of weapons
|
ldx TankNr
|
||||||
|
jsr DrawTankNr ; redraw tank after erase parachute (exactly for redraw leaky schield :) )
|
||||||
lda #$35 ; parachute
|
|
||||||
jsr DecreaseWeapon
|
|
||||||
ThereWasNoParachute
|
ThereWasNoParachute
|
||||||
mva #sfx_silencer sfx_effect
|
mva #sfx_silencer sfx_effect
|
||||||
rts
|
rts
|
||||||
@@ -1536,7 +1601,8 @@ ThereWasNoParachute
|
|||||||
noSmokeTracer
|
noSmokeTracer
|
||||||
sty SmokeTracerFlag
|
sty SmokeTracerFlag
|
||||||
|
|
||||||
RepeatIfSmokeTracer
|
RepeatIfSmokeTracer
|
||||||
|
RepeatFlight
|
||||||
mwa ytraj+1 Ytrajold+1
|
mwa ytraj+1 Ytrajold+1
|
||||||
mwa xtraj+1 Xtrajold+1
|
mwa xtraj+1 Xtrajold+1
|
||||||
mva #%01000000 drawFunction
|
mva #%01000000 drawFunction
|
||||||
@@ -1775,8 +1841,6 @@ EndOfFlight
|
|||||||
jsr unPlot
|
jsr unPlot
|
||||||
mwa xcircle xdraw
|
mwa xcircle xdraw
|
||||||
mwa ycircle ydraw
|
mwa ycircle ydraw
|
||||||
; mwa XHit xdraw
|
|
||||||
; mva YHit ydraw
|
|
||||||
|
|
||||||
ldy SmokeTracerFlag
|
ldy SmokeTracerFlag
|
||||||
beq EndOfFlight2
|
beq EndOfFlight2
|
||||||
@@ -1785,7 +1849,71 @@ EndOfFlight
|
|||||||
jmp SecondFlight
|
jmp SecondFlight
|
||||||
EndOfFlight2
|
EndOfFlight2
|
||||||
mva #0 tracerflag ; don't know why
|
mva #0 tracerflag ; don't know why
|
||||||
rts
|
|
||||||
|
; and now check for defensive-aggressive weapon
|
||||||
|
lda HitFlag
|
||||||
|
jeq NoHitAtEndOfFight ; RTS only !!!
|
||||||
|
jmi NoTankHitAtEndOfFight
|
||||||
|
; tank hit - check defensive weapon of this tank
|
||||||
|
tax
|
||||||
|
dex ; index of tank in X
|
||||||
|
lda ActiveDefenceWeapon,x
|
||||||
|
cmp #61 ; Auto Defence
|
||||||
|
beq AutoDefence
|
||||||
|
cmp #56 ; Mag Deflector
|
||||||
|
bne NoDefence
|
||||||
|
MagDeflector
|
||||||
|
; now run defensive-aggressive weapon - Mag Deflector!
|
||||||
|
; get tank position
|
||||||
|
clc
|
||||||
|
lda xtankstableL,x
|
||||||
|
adc #$04 ; almost in tak center :)
|
||||||
|
sta XHit
|
||||||
|
lda xtankstableH,x
|
||||||
|
adc #$00
|
||||||
|
sta XHit+1
|
||||||
|
lda #$ff ; change to ground hit (we hope)
|
||||||
|
sta HitFlag
|
||||||
|
bit random ; left or right deflection ?
|
||||||
|
bpl RightDeflection
|
||||||
|
LeftDeflection
|
||||||
|
sbw XHit #18 ; 18 pixels to right and explode...
|
||||||
|
bit XHit+1 ; if off-screen ...
|
||||||
|
bpl EndOfMagDeflector ; hit of course but we need RTS
|
||||||
|
adw XHit #36 ; change to right :)
|
||||||
|
jmp EndOfMagDeflector
|
||||||
|
RightDeflection
|
||||||
|
adw XHit #18 ; 18 pixels to right and explode...
|
||||||
|
cpw XHit screenwidth ; if off-screen ...
|
||||||
|
bcs EndOfMagDeflector ; hit of course but we need RTS
|
||||||
|
sbw XHit #36 ; change to left
|
||||||
|
EndOfMagDeflector
|
||||||
|
mwa XHit xdraw ; why? !!!
|
||||||
|
NoTankHitAtEndOfFight
|
||||||
|
NoHitAtEndOfFight
|
||||||
|
NoDefence
|
||||||
|
rts ; END !!!
|
||||||
|
AutoDefence
|
||||||
|
; now run defensive-aggressive weapon - Auto Defence!
|
||||||
|
sbb #255 LeapFrogAngle Angle ; swap angle (LeapFrogAngle - because we have strored angle in this variable)
|
||||||
|
lsrw Force ; Force = Force / 2 - becouse earlier we multiplied by 2
|
||||||
|
mva #1 Erase ; now erase shield
|
||||||
|
phx
|
||||||
|
jsr DrawTankShield
|
||||||
|
jsr DrawTankShieldHorns
|
||||||
|
plx
|
||||||
|
lda #$00
|
||||||
|
sta Erase
|
||||||
|
sta ActiveDefenceWeapon,x ; deactivate used Auto Defence
|
||||||
|
sta ShieldEnergy,x
|
||||||
|
sta xtraj ; prepare coordinates
|
||||||
|
sta ytraj
|
||||||
|
sta xtraj+2
|
||||||
|
sta ytraj+2
|
||||||
|
mwa XHit xtraj+1
|
||||||
|
sbw YHit #5 ytraj+1
|
||||||
|
mva #1 color
|
||||||
|
jmp RepeatFlight ; and repeat Fight
|
||||||
.endp
|
.endp
|
||||||
|
|
||||||
.proc SecondFlight
|
.proc SecondFlight
|
||||||
@@ -2157,7 +2285,7 @@ MIRValreadyAll
|
|||||||
mva tempor2 TankNr
|
mva tempor2 TankNr
|
||||||
mva #0 Erase
|
mva #0 Erase
|
||||||
jsr SoilDown2
|
jsr SoilDown2
|
||||||
mva #1 HitFlag
|
mva #$ff HitFlag ; but why ??
|
||||||
;jsr drawtanks
|
;jsr drawtanks
|
||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
@@ -2168,7 +2296,7 @@ MIRValreadyAll
|
|||||||
; Check collision with Tank :)
|
; Check collision with Tank :)
|
||||||
; xdraw , ydraw - coordinates of the checked point
|
; xdraw , ydraw - coordinates of the checked point
|
||||||
; results:
|
; results:
|
||||||
; HitFlag - 1 - hit, 0 - no hit
|
; HitFlag - $ff - hit ground, 0 - no hit, 1-6 - hit tank (index+1)
|
||||||
; XHit , YHit - coordinates of hit
|
; XHit , YHit - coordinates of hit
|
||||||
; X - index of the hit tank
|
; X - index of the hit tank
|
||||||
|
|
||||||
@@ -2176,31 +2304,40 @@ MIRValreadyAll
|
|||||||
CheckCollisionWithTankLoop
|
CheckCollisionWithTankLoop
|
||||||
lda eXistenZ,x
|
lda eXistenZ,x
|
||||||
beq DeadTank
|
beq DeadTank
|
||||||
|
; first we test top and bottom (same with and without shield!)
|
||||||
|
lda ytankstable,x
|
||||||
|
cmp ydraw ; check range
|
||||||
|
bcc BelowTheTank ;(ytankstable,ytankstable+3)
|
||||||
|
sbc #4 ; we must rewrite EndOfTheBarrelY table or remove Y correction completely to "bold" tank !!!
|
||||||
|
cmp ydraw
|
||||||
|
bcs OverTheTank
|
||||||
|
; with or without shield ?
|
||||||
|
lda ShieldEnergy,x
|
||||||
|
bne CheckCollisionWithShieldedTank ; tank with shield is bigger :)
|
||||||
|
|
||||||
lda xtankstableH,x
|
lda xtankstableH,x
|
||||||
cmp xdraw+1
|
cmp xdraw+1
|
||||||
bne Condition01
|
bne @+
|
||||||
lda xtankstableL,x
|
lda xtankstableL,x
|
||||||
cmp xdraw
|
cmp xdraw
|
||||||
Condition01
|
@
|
||||||
bcs LeftFromTheTank ;add 8 double byte
|
bcs LeftFromTheTank ;add 8 double byte
|
||||||
|
; now we use Y as low byte and A as high byte of checked position (right edge of tank)
|
||||||
|
; it is tricky but fast and much shorter
|
||||||
clc
|
clc
|
||||||
adc #8
|
adc #8
|
||||||
tay
|
tay
|
||||||
lda xtankstableH,x
|
lda xtankstableH,x
|
||||||
adc #0
|
adc #0
|
||||||
cmp xdraw+1
|
cmp xdraw+1
|
||||||
bne Condition02
|
bne @+
|
||||||
cpy xdraw
|
cpy xdraw
|
||||||
Condition02
|
@
|
||||||
bcc RightFromTheTank
|
bcc RightFromTheTank
|
||||||
|
TankHit
|
||||||
lda ytankstable,x
|
inx
|
||||||
cmp ydraw ; check range
|
stx HitFlag ; index of hit tank+1
|
||||||
bcc BelowTheTank ;(ytankstable,ytankstable+3)
|
dex
|
||||||
sbc #4
|
|
||||||
cmp ydraw
|
|
||||||
bcs OverTheTank
|
|
||||||
mva #1 HitFlag
|
|
||||||
mwa xdraw XHit
|
mwa xdraw XHit
|
||||||
mwa ydraw YHit
|
mwa ydraw YHit
|
||||||
rts ; in X there is an index of the hit tank
|
rts ; in X there is an index of the hit tank
|
||||||
@@ -2213,6 +2350,33 @@ DeadTank
|
|||||||
cpx NumberOfPlayers
|
cpx NumberOfPlayers
|
||||||
bne CheckCollisionWithTankLoop
|
bne CheckCollisionWithTankLoop
|
||||||
rts
|
rts
|
||||||
|
CheckCollisionWithShieldedTank
|
||||||
|
; now we use Y as low byte and A as high byte of checked position (left right edgs of shield)
|
||||||
|
; it is tricky but fast and much shorter
|
||||||
|
lda xtankstableL,x
|
||||||
|
sec
|
||||||
|
sbc #4 ; 5 pixels more on left side
|
||||||
|
tay
|
||||||
|
lda xtankstableH,x
|
||||||
|
sbc #0
|
||||||
|
; bmi ShieldOverLeftEdge ; I do not know whether to check it. Probably not :) !!!
|
||||||
|
cmp xdraw+1
|
||||||
|
bne @+
|
||||||
|
cpy xdraw
|
||||||
|
@
|
||||||
|
bcs LeftFromTheTank
|
||||||
|
tya ;add 16 double byte
|
||||||
|
clc
|
||||||
|
adc #16
|
||||||
|
tay
|
||||||
|
lda xtankstableH,x
|
||||||
|
adc #0
|
||||||
|
cmp xdraw+1
|
||||||
|
bne @+
|
||||||
|
cpy xdraw
|
||||||
|
@
|
||||||
|
bcc RightFromTheTank
|
||||||
|
bcs TankHit
|
||||||
.endp
|
.endp
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
CalculateExplosionRange0
|
CalculateExplosionRange0
|
||||||
|
|||||||
Reference in New Issue
Block a user