Compare commits
66 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4fe360d63c | |||
| c9ceb58117 | |||
| e10514debd | |||
| 2907fe7a91 | |||
| a0d5d22e74 | |||
| 1ea62798c8 | |||
| 42facad64e | |||
| 2c98d73877 | |||
| 4ae4403448 | |||
| 242bc4586c | |||
| eda0e65189 | |||
| 8613854f80 | |||
| 1c277b0e6f | |||
| 623c9c9583 | |||
| ce55bf0d97 | |||
| 537f88e4c6 | |||
| 9aaa4fec69 | |||
| 67b5dfb110 | |||
| 4200e60d47 | |||
| 7324203925 | |||
| 634c2f83e9 | |||
| 18f88705e5 | |||
| fe6bd17a66 | |||
| 1d8f26d562 | |||
| 2bb8a743e1 | |||
| 708a7b4aa9 | |||
| 8153670711 | |||
| ab140ed5ca | |||
| cc3e2d1845 | |||
| 98e866abdd | |||
| ffa748fb68 | |||
| de047779ce | |||
| 3c685b2811 | |||
| c86dcd7c59 | |||
| f924868459 | |||
| 2992bd40b3 | |||
| b19d218670 | |||
| 8ab450ff48 | |||
| 5e2ab7f206 | |||
| cd69bf22db | |||
| ff8c4d9329 | |||
| 83e128a1b5 | |||
| cc8688263a | |||
| b5bf6ecc30 | |||
| e2c85c98c2 | |||
| c47a22a833 | |||
| cd4275226a | |||
| cb270be865 | |||
| 7df1d5eff9 | |||
| c3f6e2399d | |||
| 598860b7d0 | |||
| c1aa177767 | |||
| eb7f6369de | |||
| 41900d7671 | |||
| 6a6689b9b7 | |||
| 836c67afcf | |||
| 1b983b8d92 | |||
| 53e9f89012 | |||
| cf40bf905d | |||
| 91b613f166 | |||
| eace9eb5cf | |||
| 4c6b56a1e2 | |||
| 7b86fc98cd | |||
| 186cacf5ba | |||
| 031416b8e6 | |||
| 1394524a26 |
@@ -47,6 +47,35 @@ With the advent of fujinet (https://fujinet.online/) we are thinking about makin
|
||||
|
||||
## Changes:
|
||||
|
||||
###### Build 145
|
||||
2022-06-26
|
||||
Possibly last round of weapon additions!
|
||||
@Pecusx added
|
||||
- working White Flag -- it is a way to give up while not making opponents richer!
|
||||
- Battery - a must for every tank with low energy.
|
||||
- Strong Parachute - like a normal parachute, but stronger (it has energy and can work more than once)
|
||||
- Nuclear Winter - a quick and efficient solution to global worming, err, warning, WARMING!
|
||||
@mikerro added new SFX and in-game-tunes.
|
||||
- Pressing [S] turns on/off SFX (when aiming). Pressing [M] turns on/off in-game tunes.
|
||||
Tickets closed:
|
||||
- https://github.com/pkali/scorch_src/issues/54 - holding joystick up or down longer speeds up force change. It makes playing with joystick much nicer.
|
||||
- https://github.com/pkali/scorch_src/issues/76 - a beginning of visual tweaks by Adam
|
||||
- infinite defensive weapons purchase bug fixed, to chagrin of some...
|
||||
|
||||
###### Build 144
|
||||
2022-06-19
|
||||
Father's day release comes with the most anticipated new feature: defensive weapons. Thanks to @Pecus we have 5 completely new weapons and a more reasonably working parachute. The stub of the 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 the "I" key or short-pressing fire. Select the weapon to use by moving the joystick or cursor keys right. Switch between offensive and defensive weapons by moving the joystick left. Fire/escape to quit inventory.
|
||||
|
||||
Another significant playability change is #54 - it is not finished yet, but keeping the joystick up or down makes force increase/decrease faster. Also - short press of fire calls Inventory, long press fires the shell. The timings are experimental, please let me know if 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
|
||||
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 :)
|
||||
|
||||
@@ -73,7 +73,7 @@ pmg .ds $0300
|
||||
eif
|
||||
|
||||
song_data
|
||||
ins 'mmm_16.lzs'
|
||||
ins 'mmm_16.lzs'
|
||||
song_end
|
||||
|
||||
POKEY = $D200
|
||||
@@ -456,7 +456,7 @@ quit
|
||||
ini main
|
||||
; ---
|
||||
|
||||
opt l-
|
||||
;opt l-
|
||||
|
||||
.MACRO SPRITES
|
||||
missiles
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
+60
-36
@@ -14,9 +14,9 @@ dliColorsFore
|
||||
TextBackgroundColor = $02 ; REAL constans - use: LDA #TextBackgroundColor
|
||||
TextForegroundColor = $0c
|
||||
CashOptionL ;(one zero less than on the screen)
|
||||
.by 0,<200,<500,<800,<1000
|
||||
.by 0,<200,<800,<1200,<2000
|
||||
CashOptionH
|
||||
.by 0,>200,>500,>800,>1000
|
||||
.by 0,>200,>800,>1200,>2000
|
||||
GravityTable .by 10,20,25,30,40
|
||||
MaxWindTable .by 5,20,40,70,99
|
||||
RoundsTable .by 10,20,30,40,50
|
||||
@@ -514,7 +514,8 @@ EndOfTheBarrelY
|
||||
.by 6,6,6,6,6,6,6,6,6
|
||||
.by 5,5,5,5,5,5,5,5,5,5
|
||||
.by 4,4,4,4,4,4,4,4,4,4,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
|
||||
@@ -526,7 +527,8 @@ EndOfTheBarrelY
|
||||
.by 0,0,0,0 ; not used
|
||||
|
||||
; 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 5,5,5,5,5,5,5,5,5,5
|
||||
.by 6,6,6,6,6,6,6,6,6
|
||||
@@ -593,13 +595,14 @@ WeaponPriceH ; weapons prices (tables with prices of weapons)
|
||||
.by >price______________45
|
||||
.by >price______________46
|
||||
.by >price______________47
|
||||
.by >price_Heat_Guidance__
|
||||
.by >price_White_Flag_____
|
||||
.by >price_Battery________
|
||||
.by >price_Bal_Guidance___
|
||||
.by >price_Horz_Guidance__
|
||||
.by >price_Vert_Guidance__
|
||||
.by >price_Lazy_Boy_______
|
||||
.by >price_Parachute______
|
||||
.by >price_Battery________
|
||||
.by >price_StrongParachute
|
||||
.by >price_Mag_Deflector__
|
||||
.by >price_Shield_________
|
||||
.by >price_Force_Shield___
|
||||
@@ -607,8 +610,7 @@ WeaponPriceH ; weapons prices (tables with prices of weapons)
|
||||
.by >price_Super_Mag______
|
||||
.by >price_Auto_Defense___
|
||||
.by >price_Fuel_Tank______
|
||||
.by >price_Contact_Trigger
|
||||
.by >price_White_Flag_____
|
||||
.by >price_Nuclear_Winter_
|
||||
|
||||
WeaponPriceL
|
||||
.by <price_Baby_Missile___
|
||||
@@ -659,13 +661,14 @@ WeaponPriceL
|
||||
.by <price______________45
|
||||
.by <price______________46
|
||||
.by <price______________47
|
||||
.by <price_Heat_Guidance__
|
||||
.by <price_White_Flag_____
|
||||
.by <price_Battery________
|
||||
.by <price_Bal_Guidance___
|
||||
.by <price_Horz_Guidance__
|
||||
.by <price_Vert_Guidance__
|
||||
.by <price_Lazy_Boy_______
|
||||
.by <price_Parachute______
|
||||
.by <price_Battery________
|
||||
.by <price_StrongParachute
|
||||
.by <price_Mag_Deflector__
|
||||
.by <price_Shield_________
|
||||
.by <price_Force_Shield___
|
||||
@@ -673,8 +676,7 @@ WeaponPriceL
|
||||
.by <price_Super_Mag______
|
||||
.by <price_Auto_Defense___
|
||||
.by <price_Fuel_Tank______
|
||||
.by <price_Contact_Trigger
|
||||
.by <price_White_Flag_____
|
||||
.by <price_Nuclear_Winter_
|
||||
|
||||
;-------------------------------------------------
|
||||
; how many units (bulletd) of a given weapon we get for a given price
|
||||
@@ -731,13 +733,14 @@ WeaponUnits
|
||||
.by 0 ;_____________45
|
||||
.by 0 ;_____________46
|
||||
.by 0 ;_____________47
|
||||
.by 6 ;Heat_Guidance__
|
||||
.by 1 ;White_Flag___48
|
||||
.by 3 ;Battery________
|
||||
.by 2 ;Bal_Guidance___
|
||||
.by 5 ;Horz_Guidance__
|
||||
.by 5 ;Vert_Guidance__
|
||||
.by 2 ;Lazy_Boy_______
|
||||
.by 8 ;Parachute______
|
||||
.by 10 ;Battery________
|
||||
.by 2 ;StrongParachute
|
||||
.by 2 ;Mag_Deflector__
|
||||
.by 3 ;Shield_________
|
||||
.by 3 ;Force_Shield___
|
||||
@@ -745,8 +748,7 @@ WeaponUnits
|
||||
.by 2 ;Super_Mag______
|
||||
.by 1 ;Auto_Defense___
|
||||
.by 10 ;Fuel_Tank______
|
||||
.by 25 ;Contact_Trigger
|
||||
.by 1 ;_____________63
|
||||
.by 1 ;Nuclear_Winter_
|
||||
|
||||
PurchaseMeTable ;weapons good to be purchased by the robot
|
||||
;the comment is an index in the tables
|
||||
@@ -809,8 +811,8 @@ WeaponSymbols
|
||||
.by $58,$59,$5a,$5b,$60,$7b,$7c,$7d
|
||||
.by $20,$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 $3b,$3c,$3d,$3e,$3f,$5e,$5f,$00
|
||||
.by $5f,$1c,$03,$06,$1d,$0a,$1b,$1b ; defensives
|
||||
.by $1e,$3b,$3c,$3d,$3e,$3f,$5e,$7d
|
||||
|
||||
; Names of weapons (16 chars long)
|
||||
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"----------------" ; 45
|
||||
dta d"----------------" ; 46
|
||||
dta d"----------------" ; 47
|
||||
dta d" " ; 47 ; special (no weapon) name to simplify display
|
||||
|
||||
dta d"Heat Guidance " ; 48 ($30)
|
||||
dta d"Bal Guidance " ; 49
|
||||
dta d"Horz Guidance " ; 50
|
||||
dta d"Vert Guidance " ; 51
|
||||
dta d"Lazy Boy " ; 52
|
||||
dta d"Parachute " ; 53
|
||||
dta d"Battery " ; 54
|
||||
dta d"Mag Deflector " ; 55
|
||||
dta d"Shield " ; 56
|
||||
dta d"Force Shield " ; 57
|
||||
dta d"Heavy Shield " ; 58
|
||||
dta d"Super Mag " ; 59
|
||||
dta d"Auto Defense " ; 60
|
||||
dta d"Fuel Tank " ; 61
|
||||
dta d"Contact Trigger " ; 62
|
||||
dta d"White Flag " ; 63
|
||||
dta d"White Flag " ; 48 ($30)
|
||||
dta d"Battery " ; 49
|
||||
dta d"Bal Guidance " ; 50
|
||||
dta d"Horz Guidance " ; 51
|
||||
dta d"Vert Guidance " ; 52
|
||||
dta d"Lazy Boy " ; 53
|
||||
dta d"Parachute " ; 54 - no energy
|
||||
dta d"Strong Parachute" ; 55 - with energy (earlier Battery)
|
||||
dta d"Mag Deflector " ; 56 - with shield and energy
|
||||
dta d"Shield " ; 57 - shield for one shot - no energy
|
||||
dta d"Force Shield " ; 58 - shield with energy and parachute
|
||||
dta d"Heavy Shield " ; 59 - shield with energy
|
||||
dta d"Super Mag " ; 60
|
||||
dta d"Auto Defense " ; 61 - with shield and energy
|
||||
dta d"Fuel Tank " ; 62
|
||||
dta d"Nuclear Winter " ; 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 99 ; Strong Parachute
|
||||
.by 99 ; 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 ; Nuclear Winter
|
||||
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
|
||||
joyToKeyTable
|
||||
; .by 00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15
|
||||
@@ -900,5 +919,10 @@ scrcodes
|
||||
dta d"qrstuvwx"
|
||||
dta d"yz123456"
|
||||
dta d"7890." ; "-"
|
||||
;-----------------------------------
|
||||
gameOverSpritesTop
|
||||
; end of the Gover sprites by number of players
|
||||
; 1 2 3 4 5 6
|
||||
.by 130,130,136,142,148,154
|
||||
|
||||
.endif
|
||||
|
||||
+90
-16
@@ -59,22 +59,87 @@ price______________44 = 0
|
||||
price______________45 = 0
|
||||
price______________46 = 0
|
||||
price______________47 = 0
|
||||
price_Heat_Guidance__ = $ffff ;_48_($30)
|
||||
price_Bal_Guidance___ = $ffff ;_49
|
||||
price_Horz_Guidance__ = $ffff ;_50
|
||||
price_Vert_Guidance__ = $ffff ;_51
|
||||
price_Lazy_Boy_______ = $ffff ;_52
|
||||
price_Parachute______ = 1100 ;_53
|
||||
price_Battery________ = $ffff ;_54
|
||||
price_Mag_Deflector__ = $ffff ;_55
|
||||
price_Shield_________ = $ffff ;_56
|
||||
price_Force_Shield___ = $ffff ;_57
|
||||
price_Heavy_Shield___ = $ffff ;_58
|
||||
price_Super_Mag______ = $ffff ;_59
|
||||
price_Auto_Defense___ = $ffff ;_60
|
||||
price_Fuel_Tank______ = $ffff ;_61
|
||||
price_Contact_Trigger = $ffff ;_62
|
||||
price_White_Flag_____ = $0 ;_63
|
||||
price_White_Flag_____ = $0 ;_48_($30)
|
||||
price_Battery________ = 300 ;_49
|
||||
price_Bal_Guidance___ = $ffff ;_50
|
||||
price_Horz_Guidance__ = $ffff ;_51
|
||||
price_Vert_Guidance__ = $ffff ;_52
|
||||
price_Lazy_Boy_______ = $ffff ;_53
|
||||
price_Parachute______ = 234 ;_54
|
||||
price_StrongParachute = 1000 ;_55
|
||||
price_Mag_Deflector__ = 245 ;_56
|
||||
price_Shield_________ = 112 ;_57
|
||||
price_Force_Shield___ = 268 ;_58
|
||||
price_Heavy_Shield___ = 375 ;_59
|
||||
price_Super_Mag______ = $ffff ;_60
|
||||
price_Auto_Defense___ = 512 ;_61
|
||||
price_Fuel_Tank______ = $ffff ;_62
|
||||
price_Nuclear_Winter_ = 1000 ;_63
|
||||
;Weapon indexes (numbers)
|
||||
ind_Baby_Missile___ = 0
|
||||
ind_Missile________ = 1
|
||||
ind_Baby_Nuke______ = 2
|
||||
ind_Nuke___________ = 3
|
||||
ind_LeapFrog_______ = 4
|
||||
ind_Funky_Bomb_____ = 5
|
||||
ind_MIRV___________ = 6
|
||||
ind_Death_s_Head___ = 7
|
||||
ind_Napalm_________ = 8
|
||||
ind_Hot_Napalm_____ = 9
|
||||
ind_Tracer_________ = 10
|
||||
ind_Smoke_Tracer___ = 11
|
||||
ind_Baby_Roller____ = 12
|
||||
ind_Roller_________ = 13
|
||||
ind_Heavy_Roller___ = 14
|
||||
ind_Riot_Charge____ = 15
|
||||
ind_Riot_Blast_____ = 16
|
||||
ind_Riot_Bomb______ = 17
|
||||
ind_Heavy_Riot_Bomb = 18
|
||||
ind_Baby_Digger____ = 19
|
||||
ind_Digger_________ = 20
|
||||
ind_Heavy_Digger___ = 21
|
||||
ind_Baby_Sandhog___ = 22
|
||||
ind_Sandhog________ = 23
|
||||
ind_Heavy_Sandhog__ = 24
|
||||
ind_Dirt_Clod______ = 25
|
||||
ind_Dirt_Ball______ = 26
|
||||
ind_Ton_of_Dirt____ = 27
|
||||
ind_Liquid_Dirt____ = 28
|
||||
ind_Dirt_Charge____ = 29
|
||||
ind_Earth_Disrupter = 30
|
||||
ind_Plasma_Blast___ = 31
|
||||
ind_Laser__________ = 32
|
||||
ind______________33 = 0
|
||||
ind______________34 = 0
|
||||
ind______________35 = 0
|
||||
ind______________36 = 0
|
||||
ind______________37 = 0
|
||||
ind______________38 = 0
|
||||
ind______________39 = 0
|
||||
ind______________40 = 0
|
||||
ind______________41 = 0
|
||||
ind______________42 = 0
|
||||
ind______________43 = 0
|
||||
ind______________44 = 0
|
||||
ind______________45 = 0
|
||||
ind______________46 = 0
|
||||
ind______________47 = 0
|
||||
ind_White_Flag_____ = 48
|
||||
ind_Battery________ = 49
|
||||
ind_Bal_Guidance___ = 50
|
||||
ind_Horz_Guidance__ = 51
|
||||
ind_Vert_Guidance__ = 52
|
||||
ind_Lazy_Boy_______ = 53
|
||||
ind_Parachute______ = 54
|
||||
ind_StrongParachute = 55
|
||||
ind_Mag_Deflector__ = 56
|
||||
ind_Shield_________ = 57
|
||||
ind_Force_Shield___ = 58
|
||||
ind_Heavy_Shield___ = 59
|
||||
ind_Super_Mag______ = 60
|
||||
ind_Auto_Defense___ = 61
|
||||
ind_Fuel_Tank______ = 62
|
||||
ind_Nuclear_Winter_ = 63
|
||||
;--------------------------------
|
||||
; names of RMT instruments (sfx)
|
||||
;--------------------------------
|
||||
@@ -106,3 +171,12 @@ sfx_keyclick = $18 ;y
|
||||
sfx_shoot = $19 ;z
|
||||
sfx_seppuku = $1a ;1
|
||||
sfx_liquid_dirt = $1b ;2
|
||||
sfx_battery = $1c ;3
|
||||
sfx_white_flag = $1d ;4
|
||||
;--------------------------------
|
||||
; RMT songs (lines)
|
||||
;--------------------------------
|
||||
song_silencio = $00
|
||||
song_end_round = $02
|
||||
song_ingame = $06
|
||||
song_game_over = $0b
|
||||
|
||||
+14
-6
@@ -104,7 +104,7 @@ OptionsScreen
|
||||
OptionsHere
|
||||
; 0123456789012345678901234567890123456789
|
||||
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"Wind : 1B 3B 5B 7B 9B "
|
||||
dta d"Rounds : 10 20 30 40 50 "
|
||||
@@ -136,7 +136,9 @@ WeaponsDescription
|
||||
dta d" - Defensive/Offensive weapon "
|
||||
dta d" "
|
||||
dta d"Space"*
|
||||
dta d" - Purchase "
|
||||
dta d" - "
|
||||
purchaseActivate
|
||||
dta d"Purchase "
|
||||
dta d"Return"*
|
||||
dta d" - Finish "
|
||||
EmptyLine
|
||||
@@ -166,11 +168,17 @@ NamesOfLevels
|
||||
textbuffer
|
||||
; 0123456789012345678901234567890123456789
|
||||
dta d"Player: "
|
||||
dta d"Energy: Angle: Force: "
|
||||
dta d" Round: Wind: "
|
||||
dta d"Energy: Angle: Force: "
|
||||
dta d"Round: Wind: "
|
||||
textbuffer2
|
||||
dta d"Player: Cash: "
|
||||
dta d"Player: Cash: 0 " ; ZERO TO MAKE YOU RICHER ON THE SCREEN
|
||||
dta d"----------------------------------------"
|
||||
|
||||
;---------------------------------------------------
|
||||
activateText
|
||||
dta d"Activate"
|
||||
activateTextEnd
|
||||
purchaseText
|
||||
dta d"Purchase"
|
||||
purchaseTextEnd
|
||||
|
||||
.endif
|
||||
|
||||
+144
-16
@@ -262,8 +262,7 @@ CheckCollisionDraw
|
||||
sbc #1
|
||||
sta YHit
|
||||
sty YHit+1
|
||||
;mwa ydraw YHit
|
||||
mva #1 HitFlag
|
||||
mva #$ff HitFlag
|
||||
StopHitChecking
|
||||
jmp ContinueDraw
|
||||
@
|
||||
@@ -364,7 +363,7 @@ endcircleloop
|
||||
rts
|
||||
.endp
|
||||
;----
|
||||
splot8 .proc
|
||||
.proc splot8
|
||||
; plot xcircle+XC,ycircle+YC
|
||||
; plot xcircle+XC,ycircle-YC
|
||||
; plot xcircle-XC,ycircle-YC
|
||||
@@ -463,7 +462,7 @@ splot8 .proc
|
||||
.endp
|
||||
|
||||
;--------------------------------------------------
|
||||
clearscreen .proc
|
||||
.proc clearscreen
|
||||
;--------------------------------------------------
|
||||
|
||||
lda #$ff
|
||||
@@ -477,7 +476,7 @@ clearscreen .proc
|
||||
rts
|
||||
.endp
|
||||
;-------------------------------*------------------
|
||||
placetanks .proc
|
||||
.proc placetanks
|
||||
;--------------------------------------------------
|
||||
ldx #(MaxPlayers-1) ;maxNumberOfPlayers-1
|
||||
lda #0
|
||||
@@ -588,20 +587,20 @@ UnequalTanks
|
||||
;-------------------------------------------------
|
||||
.proc drawtanks
|
||||
;-------------------------------------------------
|
||||
lda tanknr
|
||||
lda TankNr
|
||||
pha
|
||||
ldx #$00
|
||||
stx tanknr
|
||||
stx TankNr
|
||||
|
||||
DrawNextTank
|
||||
jsr drawtanknr
|
||||
inc tanknr
|
||||
ldx tanknr
|
||||
inc TankNr
|
||||
ldx TankNr
|
||||
Cpx NumberOfPlayers
|
||||
bne DrawNextTank
|
||||
|
||||
pla
|
||||
sta tankNr
|
||||
sta TankNr
|
||||
|
||||
rts
|
||||
.endp
|
||||
@@ -642,6 +641,7 @@ DrawTankNrX
|
||||
sta xdraw+1
|
||||
lda ytankstable,x
|
||||
sta ydraw
|
||||
mva #0 ydraw+1
|
||||
|
||||
jsr TypeChar
|
||||
|
||||
@@ -654,11 +654,11 @@ DrawTankNrX
|
||||
rorw xbyte ; divide by 2 (carry does not matter)
|
||||
lda xbyte
|
||||
clc
|
||||
adc #$24 ; P/M to graphics offset
|
||||
adc #PMOffset+1 ; P/M to graphics offset
|
||||
cpx #$4 ; 5th tank are joined missiles and offset is defferent
|
||||
bne NoMissile
|
||||
clc
|
||||
adc #$0C
|
||||
adc #$0C ; missile offset offset
|
||||
NoMissile
|
||||
sta hposp0,x
|
||||
; vertical position
|
||||
@@ -690,10 +690,45 @@ ZeroesToGo
|
||||
sta (xbyte),y
|
||||
dey
|
||||
bne ClearPM
|
||||
|
||||
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 #ind_Shield_________ ; one shot shield
|
||||
beq ShieldDraw
|
||||
cmp #ind_Force_Shield___ ; shield with energy and parachute
|
||||
beq ShieldDraw
|
||||
cmp #ind_Heavy_Shield___ ; shield with energy
|
||||
beq ShieldDraw
|
||||
cmp #ind_Auto_Defense___ ; Auto Defence
|
||||
beq DrawTankShieldWihHorns
|
||||
cmp #ind_Mag_Deflector__ ; Mag Deflector
|
||||
beq DrawTankShieldWihHorns
|
||||
cmp #ind_White_Flag_____ ; White Flag
|
||||
beq DrawTankFlag
|
||||
bne NoShieldDraw
|
||||
ShieldDraw
|
||||
jsr DrawTankShield.DrawInPosition
|
||||
NoShieldDraw
|
||||
DoNotDrawTankNr
|
||||
rts
|
||||
DrawTankShieldWihHorns
|
||||
jsr DrawTankShield.DrawInPosition
|
||||
jsr DrawTankShieldHorns
|
||||
rts
|
||||
DrawTankFlag
|
||||
lda #$5E ; flag symbol
|
||||
sta CharCode
|
||||
lda Ytankstable,x
|
||||
sec
|
||||
sbc #8
|
||||
sta ydraw
|
||||
lda XtanksTableL,x
|
||||
sta xdraw
|
||||
lda XtanksTableH,x
|
||||
sta xdraw+1
|
||||
jsr TypeChar
|
||||
rts
|
||||
.endp
|
||||
|
||||
; -------------------------------------
|
||||
@@ -718,6 +753,88 @@ tankflash_loop
|
||||
rts
|
||||
.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
|
||||
;--------------------------------------------------
|
||||
@@ -1349,7 +1466,7 @@ EndPutChar
|
||||
; ------------------------------------------
|
||||
.proc PutChar4x4
|
||||
; 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: plot4x4color (0/1)
|
||||
; all pixels are being drawn
|
||||
@@ -1403,7 +1520,7 @@ GetUpper4bits
|
||||
bpl CopyChar
|
||||
|
||||
; calculating coordinates from xdraw and ydraw
|
||||
mwa xdraw xbyte
|
||||
mwa dx xbyte
|
||||
|
||||
lda xbyte
|
||||
and #$7
|
||||
@@ -1414,7 +1531,7 @@ GetUpper4bits
|
||||
rorw xbyte
|
||||
;---
|
||||
ldy xbyte
|
||||
lda ydraw ; y = y - 3 because left lower.
|
||||
lda dy ; y = y - 3 because left lower.
|
||||
sec
|
||||
sbc #3
|
||||
tax
|
||||
@@ -1465,4 +1582,15 @@ EndPut4x4
|
||||
rts
|
||||
.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
|
||||
+162
-79
@@ -36,7 +36,7 @@
|
||||
;we decided it must go in 'English' to let other people work on it
|
||||
|
||||
.macro build
|
||||
dta d"143" ; number of this build (3 bytes)
|
||||
dta d"145" ; number of this build (3 bytes)
|
||||
.endm
|
||||
|
||||
icl 'definitions.asm'
|
||||
@@ -55,26 +55,33 @@
|
||||
.zpvar xc .word
|
||||
.zpvar temp .word ;temporary word for the most embeded loops only
|
||||
.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 xtempDRAW .word ;same as above for XDRAW routine
|
||||
.zpvar ytempDRAW .word ;same as above for XDRAW routine
|
||||
.zpvar tempor2 .byte
|
||||
;--------------temps used in circle 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 fy .byte
|
||||
.zpvar xk .word
|
||||
.zpvar fs .byte
|
||||
.zpvar yc .byte ;ycircle - temporary for circle
|
||||
.zpvar dx .word
|
||||
.zpvar tempor2 .byte
|
||||
.zpvar dy .word
|
||||
.zpvar dd .word
|
||||
.zpvar di .word
|
||||
.zpvar dp .word
|
||||
.zpvar modify .word
|
||||
;----------------------------
|
||||
.zpvar weaponPointer .word
|
||||
.zpvar dliCounter .byte
|
||||
.zpvar pressTimer .byte
|
||||
.zpvar NTSCcounter .byte
|
||||
;.zpvar dliA .byte
|
||||
;.zpvar dliX .byte
|
||||
;.zpvar dliY .byte
|
||||
|
||||
;* RMT ZeroPage addresses
|
||||
.zpvar p_tis .word
|
||||
.zpvar p_trackslbstable .word
|
||||
@@ -103,7 +110,7 @@
|
||||
;Game loading address
|
||||
ORG $3000
|
||||
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
|
||||
;-----------------------------------------------
|
||||
@@ -130,16 +137,10 @@ START
|
||||
; for the round #1 shooting sequence is random
|
||||
|
||||
MainGameLoop
|
||||
VDLI DLIinterruptText ; jsr SetDLI for text (purchase) screen
|
||||
|
||||
jsr CallPurchaseForEveryTank
|
||||
|
||||
; issue #72 (glitches when switches)
|
||||
mva #0 dmactl
|
||||
lda dmactls
|
||||
and #$fc
|
||||
;ora #$02 ; 2=normal, 3 = wide screen width, 0 = no screen
|
||||
sta dmactls
|
||||
|
||||
jsr GetRandomWind
|
||||
|
||||
@@ -166,7 +167,8 @@ MainGameLoop
|
||||
; Results are number of other deaths
|
||||
; before the player dies itself
|
||||
|
||||
|
||||
lda #song_end_round
|
||||
jsr RmtSongSelect
|
||||
jsr DisplayResults
|
||||
|
||||
;check demo mode
|
||||
@@ -239,6 +241,7 @@ skipzeroing
|
||||
|
||||
inc CurrentRoundNr
|
||||
mva #0 dmactl ; issue #72
|
||||
jsr RmtSongSelect
|
||||
mva #sfx_silencer sfx_effect
|
||||
jmp MainGameLoop
|
||||
|
||||
@@ -253,6 +256,9 @@ skipzeroing
|
||||
; the shooting angle is randomized
|
||||
; of course gains an looses are zeroed
|
||||
|
||||
lda #song_ingame
|
||||
jsr RmtSongSelect
|
||||
|
||||
lda #0
|
||||
tax
|
||||
@ sta singleRoundVars,x
|
||||
@@ -300,19 +306,14 @@ SettingEnergies
|
||||
jsr calculatemountains ;let mountains be easy for the eye
|
||||
;jsr calculatemountains0 ;only for tests - makes mountains flat and 0 height
|
||||
|
||||
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
|
||||
|
||||
jsr SetMainScreen
|
||||
jsr ColorsOfSprites
|
||||
|
||||
jsr drawmountains ;draw them
|
||||
jsr drawtanks ;finally draw tanks
|
||||
|
||||
mva #0 TankSequencePointer
|
||||
;--------------------round screen is ready---------
|
||||
;---------round screen is ready---------
|
||||
rts
|
||||
.endp
|
||||
|
||||
@@ -418,6 +419,22 @@ ManualShooting
|
||||
seq:rts
|
||||
|
||||
AfterManualShooting
|
||||
; defensive weapons without flight handling
|
||||
ldx TankNr
|
||||
lda ActiveDefenceWeapon,x
|
||||
cmp #ind_White_Flag_____ ; White Flag
|
||||
beq ShootWhiteFlag
|
||||
cmp #ind_Nuclear_Winter_
|
||||
bne StandardShoot
|
||||
ShootAtomicWinter
|
||||
; --- nuclear winter ---
|
||||
jsr NuclearWinter
|
||||
jmp NextPlayerShoots ; and we skip shoot
|
||||
ShootWhiteFlag
|
||||
; --- white flag ---
|
||||
jsr WhiteFlag
|
||||
jmp NextPlayerShoots ; and we skip shoot
|
||||
StandardShoot
|
||||
inc noDeathCounter
|
||||
|
||||
jsr DecreaseWeaponBeforeShoot
|
||||
@@ -428,6 +445,10 @@ AfterManualShooting
|
||||
|
||||
ShootNow
|
||||
jsr Shoot
|
||||
;here we clear offensive text (after a shoot)
|
||||
ldy TankNr
|
||||
mva #0 plot4x4color
|
||||
jsr DisplayOffensiveTextNr
|
||||
|
||||
lda HitFlag ;0 if missed
|
||||
beq missed
|
||||
@@ -439,9 +460,9 @@ ShootNow
|
||||
|
||||
continueMainRoundLoopAfterSeppuku
|
||||
;here we clear offensive text (after a shoot)
|
||||
ldy TankNr
|
||||
mva #0 plot4x4color
|
||||
jsr DisplayOffensiveTextNr
|
||||
;ldy TankNr
|
||||
;mva #0 plot4x4color
|
||||
;jsr DisplayOffensiveTextNr
|
||||
|
||||
|
||||
AfterExplode
|
||||
@@ -454,14 +475,12 @@ AfterExplode
|
||||
@
|
||||
|
||||
;temporary tanks removal (would fall down with soil)
|
||||
mva TankNr tempor2
|
||||
mva #1 Erase
|
||||
jsr drawtanks
|
||||
mva tempor2 TankNr
|
||||
mva #0 Erase
|
||||
lda FallDown2
|
||||
beq NoFallDown2
|
||||
jsr SoilDown2;
|
||||
jsr SoilDown2
|
||||
|
||||
NoFallDown2
|
||||
;here tanks are falling down
|
||||
@@ -649,7 +668,7 @@ MetodOfDeath
|
||||
|
||||
;--------------------------------------------------
|
||||
.proc DecreaseEnergyX
|
||||
;Decreases energy of player nr X
|
||||
;Decreases energy of player nr X by the value Y
|
||||
;increases his financial loss
|
||||
;increases gain of tank TankNr
|
||||
;--------------------------------------------------
|
||||
@@ -687,6 +706,33 @@ NotNegativeEnergy
|
||||
rts
|
||||
.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
|
||||
lda #0
|
||||
@@ -707,7 +753,7 @@ NotNegativeEnergy
|
||||
.endp
|
||||
|
||||
;--------------------------------------------------
|
||||
GetRandomWind .proc
|
||||
.proc GetRandomWind
|
||||
;in: MaxWind (byte)
|
||||
;out: Wind (word)
|
||||
;uses: _
|
||||
@@ -736,31 +782,50 @@ GetRandomWind .proc
|
||||
.endp
|
||||
|
||||
;--------------------------------------------------
|
||||
PMoutofScreen .proc
|
||||
.proc PMoutofScreen
|
||||
;--------------------------------------------------
|
||||
lda #$00 ; let all P/M disappear
|
||||
:8 sta hposp0+#
|
||||
rts
|
||||
.endp
|
||||
;--------------------------------------------------
|
||||
.proc ColorsOfSprites
|
||||
lda TankColoursTable ; colours of sprites under tanks
|
||||
sta COLPM0S
|
||||
lda TankColoursTable+1
|
||||
sta COLPM1S
|
||||
lda TankColoursTable+2
|
||||
sta COLPM2S
|
||||
lda TankColoursTable+3
|
||||
sta COLPM3S
|
||||
LDA TankColoursTable+4
|
||||
STA COLPF3S ; joined missiles (5th tank)
|
||||
rts
|
||||
.endp
|
||||
|
||||
;--------------------------------------------------
|
||||
.proc WeaponCleanup;
|
||||
; 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
|
||||
lda #$0
|
||||
@
|
||||
sta TanksWeapon1,x
|
||||
ldx #$3f ; TODO: maxweapons
|
||||
@ lda #$0
|
||||
cpx #48 ; White Flag
|
||||
bne @+
|
||||
lda #99
|
||||
@ sta TanksWeapon1,x
|
||||
sta TanksWeapon2,x
|
||||
sta TanksWeapon3,x
|
||||
sta TanksWeapon4,x
|
||||
sta TanksWeapon5,x
|
||||
sta TanksWeapon6,x
|
||||
dex
|
||||
sne:lda #99
|
||||
bpl @-
|
||||
beq setBmissile
|
||||
bpl @-1
|
||||
rts
|
||||
setBmissile
|
||||
lda #99
|
||||
bne @-
|
||||
.endp
|
||||
|
||||
;--------------------------------------------------
|
||||
@@ -823,18 +888,6 @@ SetunPlots
|
||||
lda #$10 ; P/M priorities (bit 4 joins missiles)
|
||||
sta gtictls
|
||||
jsr PMoutofScreen
|
||||
lda TankColoursTable ; temporary colours of sprites under tanks
|
||||
sta COLPM0S
|
||||
lda TankColoursTable+1
|
||||
sta COLPM1S
|
||||
lda TankColoursTable+2
|
||||
sta COLPM2S
|
||||
lda TankColoursTable+3
|
||||
sta COLPM3S
|
||||
LDA TankColoursTable+4
|
||||
STA COLPF3S ; joined missiles (5th tank)
|
||||
mva #0 hscrol
|
||||
|
||||
|
||||
;let the tanks be visible!
|
||||
ldx #(maxPlayers-1)
|
||||
@@ -854,6 +907,7 @@ ClearResults
|
||||
bne ClearResults
|
||||
|
||||
mva #1 CurrentRoundNr ;we start from round 1
|
||||
mva #6 NTSCcounter
|
||||
|
||||
; RMT INIT
|
||||
lda #$f0 ;initial value
|
||||
@@ -862,18 +916,18 @@ ClearResults
|
||||
lda #$ff ;initial value
|
||||
sta sfx_effect
|
||||
;
|
||||
ldx #<MODUL ;low byte of RMT module to X reg
|
||||
ldy #>MODUL ;hi byte of RMT module to Y reg
|
||||
lda #0 ;starting song line 0-255 to A reg
|
||||
jsr RASTERMUSICTRACKER ;Init
|
||||
lda #0
|
||||
jsr RmtSongSelect
|
||||
;
|
||||
VMAIN VBLinterrupt,6 ;jsr SetVBL
|
||||
|
||||
rts
|
||||
.endp
|
||||
|
||||
DLIinterruptGraph .proc
|
||||
pha
|
||||
;--------------------------------------------------
|
||||
.proc DLIinterruptGraph
|
||||
;sta dliA
|
||||
;sty dliY
|
||||
pha
|
||||
phy
|
||||
ldy dliCounter
|
||||
lda dliColorsBack,y
|
||||
@@ -884,41 +938,63 @@ DLIinterruptGraph .proc
|
||||
sta COLPF1
|
||||
sty COLPF2
|
||||
inc dliCounter
|
||||
ply
|
||||
;ldy dliY
|
||||
;lda dliA
|
||||
ply
|
||||
pla
|
||||
rti
|
||||
.endp
|
||||
|
||||
DLIinterruptText .proc
|
||||
pha
|
||||
;--------------------------------------------------
|
||||
.proc DLIinterruptText
|
||||
;sta dliA
|
||||
pha
|
||||
sta WSYNC
|
||||
mva #TextBackgroundColor colpf2
|
||||
mva #TextForegroundColor colpf3
|
||||
pla
|
||||
;lda dliA
|
||||
pla
|
||||
DLIinterruptNone
|
||||
rti
|
||||
.endp
|
||||
|
||||
VBLinterrupt .proc
|
||||
;--------------------------------------------------
|
||||
.proc VBLinterrupt
|
||||
pha
|
||||
phx
|
||||
phy
|
||||
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
|
||||
bmi lab2
|
||||
asl @ ; * 2
|
||||
tay ;Y = 2,4,..,16 instrument number * 2 (0,2,4,..,126)
|
||||
ldx #0 ;X = 0 channel (0..3 or 0..7 for stereo module)
|
||||
lda #0 ;A = 12 note (0..60)
|
||||
jsr RASTERMUSICTRACKER+15 ;RMT_SFX start tone (It works only if FEAT_SFX is enabled !!!)
|
||||
;
|
||||
lda #0 ;A = 0 note (0..60)
|
||||
bit noSfx
|
||||
smi:jsr RASTERMUSICTRACKER+15 ;RMT_SFX start tone (It works only if FEAT_SFX is enabled !!!)
|
||||
|
||||
lda #$ff
|
||||
sta sfx_effect ;reinit value
|
||||
;
|
||||
lab2
|
||||
jsr RASTERMUSICTRACKER+3 ;1 play
|
||||
; ------- RMT -------
|
||||
|
||||
exitVBL
|
||||
ply
|
||||
plx
|
||||
pla
|
||||
@@ -934,9 +1010,7 @@ lab2
|
||||
bne @-
|
||||
rts
|
||||
.endp
|
||||
|
||||
|
||||
|
||||
;--------------------------------------------------
|
||||
.proc RandomizeSequence
|
||||
; in: NumberOfPlayers
|
||||
; out: TankSequence
|
||||
@@ -986,7 +1060,7 @@ UsageLoop
|
||||
rts
|
||||
.endp
|
||||
;----------------------------------------------
|
||||
RandomizeAngle .proc ;
|
||||
.proc RandomizeAngle
|
||||
; routine returns in A
|
||||
; a valid angle for the tank's barrel.
|
||||
; X is not changed
|
||||
@@ -1009,7 +1083,7 @@ RandomizeAngle .proc ;
|
||||
rts
|
||||
.endp
|
||||
;----------------------------------------------
|
||||
RandomizeForce .proc
|
||||
.proc RandomizeForce
|
||||
; routine returns in ForceTable/L/H
|
||||
; valid force of shooting for TankNr
|
||||
; in X must be TankNr
|
||||
@@ -1054,7 +1128,6 @@ LimitForce
|
||||
rts
|
||||
|
||||
.endp
|
||||
|
||||
;----------------------------------------------
|
||||
.proc MoveBarrelToNewPosition
|
||||
jsr DrawTankNr
|
||||
@@ -1088,7 +1161,7 @@ rotateLeft
|
||||
BarrelPositionIsFine
|
||||
rts
|
||||
|
||||
.endp
|
||||
.endp
|
||||
|
||||
;----------------------------------------------
|
||||
.proc SortSequence ;
|
||||
@@ -1218,19 +1291,19 @@ notpressedJoyGetKey
|
||||
getkeyend
|
||||
mvx #sfx_keyclick sfx_effect
|
||||
rts
|
||||
|
||||
|
||||
.endp
|
||||
|
||||
;--------------------------------------------------
|
||||
getkeynowait .proc;
|
||||
.proc getkeynowait
|
||||
;--------------------------------------------------
|
||||
jsr WaitForKeyRelease
|
||||
lda kbcode
|
||||
and #$3f ;CTRL and SHIFT ellimination
|
||||
rts
|
||||
.endp
|
||||
|
||||
;--------------------------------------------------
|
||||
WaitForKeyRelease .proc
|
||||
.proc WaitForKeyRelease
|
||||
;--------------------------------------------------
|
||||
lda JSTICK0
|
||||
and #$0f
|
||||
@@ -1244,7 +1317,16 @@ WaitForKeyRelease .proc
|
||||
rts
|
||||
.endp
|
||||
|
||||
|
||||
;--------------------------------------------------
|
||||
.proc RmtSongSelect
|
||||
;--------------------------------------------------
|
||||
; starting song line 0-255 to A reg
|
||||
bit noMusic
|
||||
spl:lda #song_silencio
|
||||
ldx #<MODUL ;low byte of RMT module to X reg
|
||||
ldy #>MODUL ;hi byte of RMT module to Y reg
|
||||
jmp RASTERMUSICTRACKER ;Init, :RTS
|
||||
.endp
|
||||
;----------------------------------------------
|
||||
icl 'weapons.asm'
|
||||
;----------------------------------------------
|
||||
@@ -1266,6 +1348,7 @@ TankFont
|
||||
;----------------------------------------------
|
||||
icl 'variables.asm'
|
||||
;----------------------------------------------
|
||||
|
||||
; reserved space for RMT player
|
||||
.ds $0320
|
||||
.align $100
|
||||
@@ -1274,7 +1357,7 @@ TankFont
|
||||
|
||||
MODUL equ $b000 ;address of RMT module
|
||||
opt h- ;RMT module is standard Atari binary file already
|
||||
ins "artwork/sfx/scorch_trial0e_stripped.rmt" ;include music RMT module
|
||||
ins "artwork/sfx/scorch_trial0f_stripped.rmt" ;include music RMT module
|
||||
opt h+
|
||||
;
|
||||
;
|
||||
|
||||
BIN
Binary file not shown.
+401
-191
@@ -8,7 +8,7 @@
|
||||
;----------------------------------------
|
||||
|
||||
;--------------------------------------------------
|
||||
Options .proc
|
||||
.proc Options
|
||||
;--------------------------------------------------
|
||||
; start-up screen - options, etc.
|
||||
; this function returns:
|
||||
@@ -201,14 +201,9 @@ OptionsYLoop
|
||||
;-------------------------------------------
|
||||
; call of the purchase screens for each tank
|
||||
.proc CallPurchaseForEveryTank
|
||||
jsr PMoutofScreen
|
||||
mwa #PurchaseDL dlptrs
|
||||
lda dmactls
|
||||
and #$fc
|
||||
ora #$02 ; normal screen width
|
||||
sta dmactls
|
||||
|
||||
mva #0 TankNr
|
||||
sta isInventory
|
||||
@
|
||||
ldx TankNr
|
||||
lda SkillTable,x
|
||||
@@ -231,17 +226,29 @@ AfterManualPurchase
|
||||
;--------------------------------------------------
|
||||
.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)
|
||||
; that is buying weapons now (from 0).
|
||||
; Rest of the data is taken from appropriate tables
|
||||
; 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
|
||||
|
||||
ldx tankNr
|
||||
lda TankStatusColoursTable,x
|
||||
sta colpf2s
|
||||
|
||||
|
||||
; we are clearing list of the weapons
|
||||
mva #$ff LastWeapon
|
||||
mva #$00 WhichList
|
||||
@@ -265,6 +272,8 @@ NextChar03
|
||||
; here we must jump in after each purchase
|
||||
; to generate again list of available weapons
|
||||
AfterPurchase
|
||||
|
||||
; current cash display
|
||||
mva #sfx_purchase sfx_effect
|
||||
ldx tanknr
|
||||
lda moneyL,x
|
||||
@@ -277,32 +286,44 @@ AfterPurchase
|
||||
; in xbyte there is the address of the line that
|
||||
; is being processed now
|
||||
mwa #ListOfWeapons xbyte
|
||||
ldx #$00 ; number of the checked weapon
|
||||
stx HowManyOnTheList1 ; amounts of weapons (shells, bullets) in both lists
|
||||
stx HowManyOnTheList2
|
||||
stx PositionOnTheList
|
||||
ldx #$00 ; index of the checked weapon
|
||||
stx HowManyOnTheListOff ; amounts of weapons (shells, bullets) in both lists
|
||||
stx HowManyOnTheListDef
|
||||
|
||||
; 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
|
||||
|
||||
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
|
||||
jeq NoWeapon
|
||||
; checking if we can afford buying this weapon
|
||||
|
||||
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
|
||||
ldx temp
|
||||
lda moneyH,y
|
||||
cmp WeaponPriceH,x
|
||||
bne CheckWeapon01
|
||||
bne @+
|
||||
lda moneyL,y
|
||||
cmp WeaponPriceL,x
|
||||
CheckWeapon01
|
||||
@
|
||||
jcc TooLittleCash
|
||||
|
||||
; we have enough cash and the weapon can be
|
||||
; added to the list
|
||||
stx temp ; number of weapon will be necessary later
|
||||
|
||||
; first parentheses and other special chars
|
||||
; (it's easier this way)
|
||||
@@ -322,58 +343,65 @@ CheckWeapon01
|
||||
lda #16 ; "0"
|
||||
sta (xbyte),y
|
||||
|
||||
; now symbol of the weapon
|
||||
lda WeaponSymbols,x
|
||||
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
|
||||
;now number of units (shells) to be purchased
|
||||
adw xbyte #23 displayposition ; 23 chars from the beginning of the line
|
||||
lda WeaponUnits,x
|
||||
sta decimal
|
||||
jsr displaybyte
|
||||
ldx temp ;getting back number of the weapon
|
||||
ldx temp ;getting back index of the weapon
|
||||
|
||||
; and now price of the weapon
|
||||
clc
|
||||
lda xbyte
|
||||
adc #27 ; 27 chars from the beginning of the line
|
||||
sta displayposition
|
||||
lda xbyte+1
|
||||
adc #$00
|
||||
sta displayposition+1
|
||||
adw xbyte #27 displayposition ; 27 chars from the beginning of the line
|
||||
lda WeaponPriceL,x
|
||||
sta decimal
|
||||
lda WeaponPriceH,x
|
||||
sta decimal+1
|
||||
jsr displaydec
|
||||
|
||||
lda temp ;getting back number of the weapon
|
||||
pha ;and saving it on the stack
|
||||
jmp notInventory
|
||||
|
||||
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
|
||||
sta decimal
|
||||
|
||||
pla
|
||||
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
|
||||
adw xbyte #1 displayposition
|
||||
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 !!!!
|
||||
ldx temp ;weapon number
|
||||
mva #0 temp+1 ; this number is only in X
|
||||
; times 16 (it's length of the names of weapons)
|
||||
ldy #3 ; Rotate 4 times
|
||||
@@ -383,55 +411,54 @@ CheckWeapon01
|
||||
dey
|
||||
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
|
||||
iny
|
||||
cpy #(16+6)
|
||||
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
|
||||
; present the weapon purchased recently,
|
||||
; the pointer must point to it.
|
||||
|
||||
bit lastWeapon
|
||||
bpl @+ ; if == $ff => first run, jump to top
|
||||
mva #0 PositionOnTheList
|
||||
beq NotTheSameAsLastTime
|
||||
@
|
||||
cpx LastWeapon
|
||||
bne NotTheSameAsLastTime
|
||||
lda WhichList
|
||||
bne ominx06
|
||||
lda HowManyOnTheList1
|
||||
bne @+
|
||||
lda HowManyOnTheListOff
|
||||
sta PositionOnTheList
|
||||
jmp NotTheSameAsLastTime
|
||||
ominx06
|
||||
lda HowManyOnTheList2
|
||||
@
|
||||
lda HowManyOnTheListDef
|
||||
sta PositionOnTheList
|
||||
NotTheSameAsLastTime
|
||||
; increase appropriate counter
|
||||
txa
|
||||
cpx #$30
|
||||
bcs SecondList
|
||||
ldy HowManyOnTheList1
|
||||
sta NubersOfWeaponsL1,y
|
||||
inc HowManyOnTheList1
|
||||
bcs DefenceList
|
||||
ldy HowManyOnTheListOff
|
||||
sta IndexesOfWeaponsL1,y
|
||||
inc HowManyOnTheListOff
|
||||
bne NextLineOfTheList
|
||||
SecondList
|
||||
ldy HowManyOnTheList2
|
||||
sta NubersOfWeaponsL2,y
|
||||
inc HowManyOnTheList2
|
||||
DefenceList
|
||||
ldy HowManyOnTheListDef
|
||||
sta IndexesOfWeaponsL2,y
|
||||
inc HowManyOnTheListDef
|
||||
; If everything is copied then next line
|
||||
NextLineOfTheList
|
||||
clc
|
||||
lda xbyte
|
||||
adc #40
|
||||
sta xbyte
|
||||
bcc TooLittleCash
|
||||
inc xbyte+1
|
||||
adw xbyte #40
|
||||
TooLittleCash
|
||||
NoWeapon
|
||||
|
||||
@@ -464,7 +491,7 @@ WeHaveOffset
|
||||
; of the first erased char.
|
||||
; (multiplying taken from book of Ruszczyc 'Assembler 6502'
|
||||
|
||||
lda HowManyOnTheList1
|
||||
lda HowManyOnTheListOff
|
||||
sta xbyte+1 ; multiplier (temporarily here, it will be erased anyway)
|
||||
lda #$00 ; higher byte of the Result
|
||||
sta xbyte ; lower byte of the Result
|
||||
@@ -507,7 +534,7 @@ DoNotIncHigher1
|
||||
|
||||
; Multiply number on list 1 by 40 and set address
|
||||
; of the first erased char.
|
||||
lda HowManyOnTheList2
|
||||
lda HowManyOnTheListDef
|
||||
sta xbyte+1 ; multiplier
|
||||
lda #$00 ; higher byte of the Result
|
||||
sta xbyte ; lower byte of the Result
|
||||
@@ -550,18 +577,48 @@ DoNotIncHigher2
|
||||
; screen clearing at each list refresh
|
||||
; (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
|
||||
; So choose the weapon for purchase ......
|
||||
;--------------------------------------------------
|
||||
ChoosingItemForPurchase
|
||||
;--------------------------------------------------
|
||||
|
||||
jsr PutLitteChar ; Places pointer at the right position
|
||||
jsr getkey
|
||||
ldx escFlag
|
||||
seq:rts
|
||||
seq:jmp WaitForKeyRelease ; like jsr ... : rts
|
||||
cmp #$2c ; Tab
|
||||
jeq ListChange
|
||||
cmp #$06 ; cursor left
|
||||
jeq ListChange
|
||||
cmp #$0c ; Return
|
||||
sne:rts
|
||||
cmp #$e
|
||||
@@ -600,20 +657,18 @@ EndUpX
|
||||
PurchaseKeyDown
|
||||
lda WhichList
|
||||
beq GoDown1
|
||||
inc PositionOnTheList
|
||||
lda PositionOnTheList
|
||||
cmp HowManyOnTheList2
|
||||
inc:lda PositionOnTheList
|
||||
cmp HowManyOnTheListDef
|
||||
bne EndGoDownX
|
||||
ldy HowManyOnTheList2
|
||||
ldy HowManyOnTheListDef
|
||||
dey
|
||||
sty PositionOnTheList
|
||||
jmp ChoosingItemForPurchase
|
||||
GoDown1
|
||||
inc PositionOnTheList
|
||||
lda PositionOnTheList
|
||||
cmp HowManyOnTheList1
|
||||
inc:lda PositionOnTheList
|
||||
cmp HowManyOnTheListOff
|
||||
bne MakeOffsetDown
|
||||
ldy HowManyOnTheList1
|
||||
ldy HowManyOnTheListOff
|
||||
dey
|
||||
sty PositionOnTheList
|
||||
MakeOffsetDown
|
||||
@@ -632,18 +687,31 @@ EndGoDownX
|
||||
|
||||
; swapping the displayed list and setting pointer to position 0
|
||||
ListChange
|
||||
mva #0 OffsetDL1
|
||||
|
||||
lda WhichList
|
||||
eor #$01
|
||||
sta WhichList
|
||||
bne SecondSelected
|
||||
bne DeffensiveSelected
|
||||
|
||||
mwa #ListOfWeapons WeaponsListDL
|
||||
jmp @+
|
||||
SecondSelected
|
||||
mwa #ListOfDefensiveWeapons WeaponsListDL
|
||||
lda isInventory
|
||||
beq @+
|
||||
; inventory
|
||||
jsr calcPosOffensive
|
||||
jmp ChoosingItemForPurchase
|
||||
@
|
||||
lda #$00
|
||||
sta PositionOnTheList
|
||||
sta OffsetDL1
|
||||
mva #0 PositionOnTheList
|
||||
jmp ChoosingItemForPurchase
|
||||
|
||||
DeffensiveSelected
|
||||
mwa #ListOfDefensiveWeapons WeaponsListDL
|
||||
lda isInventory
|
||||
beq @+
|
||||
jsr calcPosDefensive
|
||||
jmp ChoosingItemForPurchase
|
||||
@
|
||||
mva #0 positionOnTheList
|
||||
jmp ChoosingItemForPurchase
|
||||
|
||||
.endp
|
||||
@@ -652,24 +720,23 @@ SecondSelected
|
||||
;--------------------------------------------------
|
||||
.proc PurchaseWeaponNow
|
||||
;--------------------------------------------------
|
||||
weaponPtr = temp
|
||||
isPriceZero = tempXRoller
|
||||
bit isInventory
|
||||
bmi inventorySelect
|
||||
|
||||
lda WhichList
|
||||
bne PurchaseDeffensive
|
||||
|
||||
; here we purchase the offensive weapon
|
||||
ldy PositionOnTheList
|
||||
lda NubersOfWeaponsL1,y
|
||||
lda IndexesOfWeaponsL1,y
|
||||
jmp PurchaseAll
|
||||
PurchaseDeffensive
|
||||
ldy PositionOnTheList
|
||||
lda NubersOfWeaponsL2,y
|
||||
lda IndexesOfWeaponsL2,y
|
||||
PurchaseAll
|
||||
; after getting weapon number the routine is common for all
|
||||
; after getting weapon index the routine is common for all
|
||||
ldx tanknr
|
||||
tay ; weapon number is in Y
|
||||
beq @+
|
||||
tay ; weapon index is in Y
|
||||
sec
|
||||
lda moneyL,x ; substracting from posessed money
|
||||
sbc WeaponPriceL,y ; of price of the given weapon
|
||||
@@ -678,61 +745,141 @@ PurchaseAll
|
||||
sbc WeaponPriceH,y
|
||||
sta moneyH,x
|
||||
|
||||
; save info about price == 0
|
||||
lda WeaponPriceL,y
|
||||
ora WeaponPriceH,y
|
||||
sta isPriceZero
|
||||
|
||||
|
||||
positiveMoney
|
||||
; now we have to get address of
|
||||
; the table of the weapon of the tank
|
||||
; and add appropriate number of shells
|
||||
|
||||
lda TanksWeaponsTableL,x
|
||||
sta weaponPtr
|
||||
sta weaponPointer
|
||||
lda TanksWeaponsTableH,x
|
||||
sta weaponPtr+1
|
||||
sta weaponPointer+1
|
||||
|
||||
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
|
||||
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
|
||||
bcc LessThan100
|
||||
lda #99
|
||||
sta (weaponPtr),y
|
||||
sta (weaponPointer),y
|
||||
LessThan100
|
||||
sty LastWeapon ; store last purchased weapon
|
||||
; because we must put screen pointer next to it
|
||||
|
||||
; additional check for unfinished game
|
||||
; if weapon was free (price == $0)
|
||||
; then have nothing...
|
||||
lda isPriceZero
|
||||
bne @+
|
||||
lda #0
|
||||
sta (weaponPtr),y
|
||||
@
|
||||
mva #0 PositionOnTheList ; to move the pointer to the top when no more monies
|
||||
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
|
||||
cmp #ind_Battery________
|
||||
bne NotBattery
|
||||
; if activate battery, we do it differently
|
||||
mva #sfx_battery sfx_effect
|
||||
mva #99 Energy,x
|
||||
bne DecreaseDefensive ; bypass activation
|
||||
NotBattery
|
||||
cmp #ind_White_Flag_____
|
||||
bne NotWhiteFlag
|
||||
cmp ActiveDefenceWeapon,x
|
||||
bne NoDeactivateWhiteFlag
|
||||
mva #sfx_white_flag sfx_effect
|
||||
lda #$00 ; if try to activate activated White Flag then deactivate Defence
|
||||
sta ActiveDefenceWeapon,x
|
||||
sta ShieldEnergy,x
|
||||
beq DefActivationEnd
|
||||
NotWhiteFlag
|
||||
NoDeactivateWhiteFlag
|
||||
sta ActiveDefenceWeapon,x
|
||||
DecreaseDefensive
|
||||
; 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
|
||||
DefActivationEnd
|
||||
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
|
||||
cpy howManyOnTheListDef
|
||||
bcs ?noWeaponActive
|
||||
sty positionOnTheList
|
||||
rts
|
||||
.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
|
||||
cpy howManyOnTheListOff
|
||||
bcs ?noWeaponActive
|
||||
sty positionOnTheList
|
||||
rts
|
||||
.endp
|
||||
; -----------------------------------------------------
|
||||
.proc PutLitteChar
|
||||
; first let's cleat both lists from little chars
|
||||
; first let's clear both lists from little chars
|
||||
mwa #ListOfWeapons xbyte
|
||||
ldx #52 ; there are 52 lines total
|
||||
ldy #$00
|
||||
EraseLoop
|
||||
lda #$00
|
||||
tya ; lda #$00
|
||||
sta (xbyte),y
|
||||
clc
|
||||
lda xbyte
|
||||
adc #40
|
||||
sta xbyte
|
||||
bcc ominx02
|
||||
inc xbyte+1
|
||||
ominx02
|
||||
adw xbyte #40
|
||||
dex
|
||||
bpl EraseLoop
|
||||
|
||||
; now let's check which list is active now
|
||||
lda WhichList
|
||||
beq CharToList1
|
||||
@@ -742,13 +889,7 @@ ominx02
|
||||
ldx PositionOnTheList
|
||||
beq SelectList2 ; if there is 0 we add nothing
|
||||
AddLoop2
|
||||
clc
|
||||
lda xbyte
|
||||
adc #40
|
||||
sta xbyte
|
||||
bcc ominx03
|
||||
inc xbyte+1
|
||||
ominx03
|
||||
adw xbyte #40
|
||||
dex
|
||||
bne AddLoop2
|
||||
SelectList2
|
||||
@@ -770,13 +911,7 @@ CharToList1
|
||||
ldx PositionOnTheList
|
||||
beq SelectList1 ; if there is 0 we add nothing
|
||||
AddLoop1
|
||||
clc
|
||||
lda xbyte
|
||||
adc #40
|
||||
sta xbyte
|
||||
bcc ominx04
|
||||
inc xbyte+1
|
||||
ominx04
|
||||
adw xbyte #40
|
||||
dex
|
||||
bne AddLoop1
|
||||
SelectList1
|
||||
@@ -787,13 +922,7 @@ SelectList1
|
||||
ldx OffsetDL1
|
||||
beq SetWindowList1 ; if zero then add nothing
|
||||
LoopWindow1
|
||||
clc
|
||||
lda xbyte
|
||||
adc #40
|
||||
sta xbyte
|
||||
bcc ominx05
|
||||
inc xbyte+1
|
||||
ominx05
|
||||
adw xbyte #40
|
||||
dex
|
||||
bne LoopWindow1
|
||||
SetWindowList1
|
||||
@@ -805,13 +934,13 @@ SetWindowList1
|
||||
ldy #>EmptyLine
|
||||
lda OffsetDL1
|
||||
beq NoArrowUp
|
||||
ldx #<MoreUp
|
||||
ldy #>MoreUp
|
||||
ldx #<MoreUp
|
||||
ldy #>MoreUp
|
||||
NoArrowUp
|
||||
stx MoreUpdl
|
||||
sty MoreUpdl+1
|
||||
; the same, bu scrolling down
|
||||
lda HowManyOnTheList1
|
||||
lda HowManyOnTheListOff
|
||||
ldx #<EmptyLine
|
||||
ldy #>EmptyLine
|
||||
sec
|
||||
@@ -819,8 +948,8 @@ NoArrowUp
|
||||
bmi NoArrowDown
|
||||
cmp OffsetDL1
|
||||
bcc NoArrowDown
|
||||
ldx #<MoreDown
|
||||
ldy #>MoreDown
|
||||
ldx #<MoreDown
|
||||
ldy #>MoreDown
|
||||
NoArrowDown
|
||||
stx MoreDowndl
|
||||
sty MoreDowndl+1
|
||||
@@ -1200,6 +1329,8 @@ space dta d" "
|
||||
;that's easy because we have number of tank
|
||||
;and xtankstableL and H keep X position of a given tank
|
||||
|
||||
;save vars (messed when printing...)
|
||||
|
||||
lda xtankstableL,y
|
||||
sta temp
|
||||
lda xtankstableH,y
|
||||
@@ -1320,12 +1451,12 @@ DOTNcharloop
|
||||
asl
|
||||
clc
|
||||
adc TextPositionX
|
||||
sta Xdraw
|
||||
sta dx
|
||||
lda #0
|
||||
adc TextPositionX+1
|
||||
sta Xdraw+1
|
||||
sta dx+1
|
||||
lda TextPositionY
|
||||
sta ydraw
|
||||
sta dy
|
||||
jsr PutChar4x4
|
||||
|
||||
inc TextCounter
|
||||
@@ -1343,6 +1474,7 @@ DOTNcharloop
|
||||
;address in LineAddress4x4
|
||||
;starting from LineXdraw, LineYdraw
|
||||
|
||||
|
||||
ldy #0
|
||||
sty LineCharNr
|
||||
|
||||
@@ -1355,8 +1487,8 @@ TypeLine4x4Loop
|
||||
beq EndOfTypeLine4x4
|
||||
|
||||
sta CharCode4x4
|
||||
mwa LineXdraw Xdraw
|
||||
mva LineYdraw Ydraw
|
||||
mwa LineXdraw dx
|
||||
mva LineYdraw dy
|
||||
mva #1 plot4x4color
|
||||
jsr PutChar4x4 ;type empty pixels as well!
|
||||
adw LineXdraw #4
|
||||
@@ -1372,10 +1504,6 @@ EndOfTypeLine4x4
|
||||
.proc AreYouSure
|
||||
;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
|
||||
|
||||
;top frame
|
||||
@@ -1405,7 +1533,7 @@ EndOfTypeLine4x4
|
||||
skip01
|
||||
|
||||
;clean
|
||||
mva #3 dx
|
||||
mva #3 di
|
||||
mva #4 ResultY
|
||||
@
|
||||
mva #1 plot4x4color
|
||||
@@ -1415,23 +1543,16 @@ skip01
|
||||
jsr TypeLine4x4
|
||||
adb ResultY #4 ;next line
|
||||
|
||||
dec dx
|
||||
dec di
|
||||
bne @-
|
||||
|
||||
|
||||
quit_areyousure
|
||||
;restore vars
|
||||
mva yc Ydraw
|
||||
mwa xk Xdraw
|
||||
rts
|
||||
.endp
|
||||
;--------------------------------
|
||||
.proc DisplaySeppuku
|
||||
;using 4x4 font
|
||||
|
||||
;save vars (messed in TypeLine4x4)
|
||||
mwa Xdraw xk
|
||||
mva Ydraw yc
|
||||
|
||||
mva #20 fs ; temp, how many times blink the billboard
|
||||
seppuku_loop
|
||||
@@ -1459,7 +1580,7 @@ seppuku_loop
|
||||
|
||||
;clean seppuku
|
||||
|
||||
mva #3 dx
|
||||
mva #3 di
|
||||
mva #4 ResultY
|
||||
@
|
||||
mwa #lineClear LineAddress4x4
|
||||
@@ -1468,24 +1589,22 @@ seppuku_loop
|
||||
jsr TypeLine4x4
|
||||
adb ResultY #4 ;next line
|
||||
|
||||
dec dx
|
||||
dec di
|
||||
bne @-
|
||||
|
||||
dec fs
|
||||
jne seppuku_loop
|
||||
|
||||
quit_seppuku
|
||||
;restore vars
|
||||
mva yc Ydraw
|
||||
mwa xk Xdraw
|
||||
rts
|
||||
.endp
|
||||
;--------------------------------
|
||||
.proc DisplayResults ;
|
||||
;displays results of the round
|
||||
;using 4x4 font
|
||||
jsr RoundOverSprites
|
||||
|
||||
|
||||
mva #sfx_smoke_cloud sfx_effect
|
||||
mva #1 plot4x4color
|
||||
|
||||
;centering the result screen
|
||||
@@ -1515,6 +1634,8 @@ quit_seppuku
|
||||
beq @+ ;unconditional jump, because TypeLine4x4 ends with beq
|
||||
|
||||
GameOver4x4
|
||||
lda #song_game_over
|
||||
jsr RmtSongSelect
|
||||
mwa #LineGameOver LineAddress4x4
|
||||
mwa #((ScreenWidth/2)-(8*4)) LineXdraw
|
||||
mva ResultY LineYdraw
|
||||
@@ -1690,8 +1811,6 @@ FinishResultDisplay
|
||||
bpl @-
|
||||
|
||||
adw temp #NamesOfWeapons
|
||||
ldy #6 ; from 6th character
|
||||
|
||||
ldy #15
|
||||
@
|
||||
lda (temp),y
|
||||
@@ -1699,6 +1818,39 @@ FinishResultDisplay
|
||||
dey
|
||||
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
|
||||
;---------------------
|
||||
@@ -1709,6 +1861,31 @@ FinishResultDisplay
|
||||
mwa #textbuffer+48 displayposition
|
||||
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
|
||||
;=========================
|
||||
@@ -1717,7 +1894,7 @@ FinishResultDisplay
|
||||
sta decimal
|
||||
lda ForceTableH,x
|
||||
sta decimal+1
|
||||
mwa #textbuffer+40+34 displayposition
|
||||
mwa #textbuffer+40+36 displayposition
|
||||
jsr displaydec
|
||||
|
||||
;=========================
|
||||
@@ -1729,9 +1906,9 @@ FinishResultDisplay
|
||||
lda AngleTable,x
|
||||
bmi AngleToLeft
|
||||
lda #$7f ; (tab) character
|
||||
sta textbuffer+40+23
|
||||
sta textbuffer+40+25
|
||||
lda #0 ;space
|
||||
sta textbuffer+40+20
|
||||
sta textbuffer+40+22
|
||||
lda #90
|
||||
sec
|
||||
sbc AngleTable,x
|
||||
@@ -1748,12 +1925,12 @@ AngleToLeft
|
||||
lda BarrelTableL,y
|
||||
sta CharCode
|
||||
lda #$7e ;(del) char
|
||||
sta textbuffer+40+20
|
||||
sta textbuffer+40+22
|
||||
lda #0 ;space
|
||||
sta textbuffer+40+23
|
||||
sta textbuffer+40+25
|
||||
|
||||
AngleDisplay
|
||||
mwa #textbuffer+40+21 displayposition
|
||||
mwa #textbuffer+40+23 displayposition
|
||||
jsr displaybyte
|
||||
|
||||
;=========================
|
||||
@@ -1763,9 +1940,9 @@ AngleDisplay
|
||||
lda Wind+3 ; highest byte of 4 byte wind
|
||||
bmi DisplayLeftWind
|
||||
lda #$7f ; (tab) char
|
||||
sta textbuffer+80+28
|
||||
sta textbuffer+80+20
|
||||
lda #0 ;space
|
||||
sta textbuffer+80+25
|
||||
sta textbuffer+80+17
|
||||
beq DisplayWindValue
|
||||
DisplayLeftWind
|
||||
sec ; Wind = -Wind
|
||||
@@ -1776,14 +1953,14 @@ DisplayLeftWind
|
||||
sbc temp+1
|
||||
sta temp+1
|
||||
lda #$7e ;(del) char
|
||||
sta textbuffer+80+25
|
||||
sta textbuffer+80+17
|
||||
lda #0 ;space
|
||||
sta textbuffer+80+28
|
||||
sta textbuffer+80+20
|
||||
DisplayWindValue
|
||||
:4 lsrw temp ;divide by 16 to have a nice value on a screen
|
||||
lda temp
|
||||
sta decimal
|
||||
mwa #textbuffer+80+26 displayposition
|
||||
mwa #textbuffer+80+18 displayposition
|
||||
jsr displaybyte
|
||||
|
||||
;=========================
|
||||
@@ -1791,7 +1968,7 @@ DisplayWindValue
|
||||
;=========================
|
||||
lda CurrentRoundNr
|
||||
sta decimal
|
||||
mwa #textbuffer+80+14 displayposition
|
||||
mwa #textbuffer+80+7 displayposition
|
||||
jsr displaybyte ;decimal (byte), displayposition (word)
|
||||
|
||||
rts
|
||||
@@ -1815,5 +1992,38 @@ NextChar02
|
||||
rts
|
||||
.endp
|
||||
;-------------------------------------------------
|
||||
.proc RoundOverSprites
|
||||
; fill sprites with bytes
|
||||
ldy numberOfPlayers
|
||||
dey
|
||||
lda gameOverSpritesTop,y
|
||||
sta temp
|
||||
|
||||
; clean the whole sprite
|
||||
lda #0
|
||||
tax
|
||||
@ sta PMGraph+$400,x
|
||||
sta PMGraph+$500,x
|
||||
dex
|
||||
bne @-
|
||||
|
||||
; set background
|
||||
lda #$ff
|
||||
ldx #100 ; top of the sprites
|
||||
@ sta PMGraph+$400,x
|
||||
sta PMGraph+$500,x
|
||||
inx
|
||||
cpx temp
|
||||
bne @-
|
||||
GOSbeg = 112
|
||||
mva #GOSbeg hposp0
|
||||
mva #GOSbeg+12 hposp0+1
|
||||
|
||||
mva #15 COLPM0S
|
||||
sta COLPM1S
|
||||
|
||||
rts
|
||||
.endp
|
||||
;-------------------------------------------------
|
||||
|
||||
.endif
|
||||
+16
-10
@@ -19,6 +19,8 @@ seppukuVal .by 75
|
||||
skilltable ; computer controlled players' skills (1-8), 0 - human (no cleaning, ticket #30)
|
||||
.DS [MaxPlayers]
|
||||
;----------------------------------------------------
|
||||
noMusic .by 0 ; 0 - play music, $ff - do not play music
|
||||
noSfx .by 0 ; 0 - play SFX, $ff - do not play SFX
|
||||
; 4x4 text buffer
|
||||
ResultLineBuffer
|
||||
dta d" ", $ff
|
||||
@@ -30,6 +32,8 @@ RoundNrDisplay
|
||||
;=====================================================
|
||||
variablesStart ; zeroing starts here
|
||||
;=====================================================
|
||||
isInventory .ds 1 ; 0 - purchase, $ff - inventory
|
||||
;--------------
|
||||
drawFunction .ds 1 ; 0 - plot, %10000000 - LineLength (N), %01000000 - DrawCheck (V)
|
||||
;--------------
|
||||
sfx_effect .ds 1
|
||||
@@ -66,6 +70,8 @@ looseL
|
||||
;----------------------------------------------------
|
||||
Energy
|
||||
.DS [MaxPlayers]
|
||||
ShieldEnergy
|
||||
.DS [MaxPlayers]
|
||||
EnergyDecrease .DS 1
|
||||
eXistenZ
|
||||
.DS [MaxPlayers]
|
||||
@@ -95,6 +101,8 @@ NewAngle .DS 1
|
||||
|
||||
ActiveWeapon ;number of the selected weapon
|
||||
.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
|
||||
;----------------------------------------------------
|
||||
|
||||
@@ -114,7 +122,7 @@ MaxWind .ds 1 ;
|
||||
WindOrientation .DS 1 ;(0-right,1-left)
|
||||
;----------------------------------------------------
|
||||
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)
|
||||
.DS [MaxPlayers]
|
||||
@@ -239,22 +247,20 @@ temptankNr .DS 1
|
||||
|
||||
;----------------------------------------------------
|
||||
;Variables from textproc.s65
|
||||
; tables with numbers of weapons on the right lists
|
||||
; to be honest - I do not know at the moment what the above
|
||||
; comment was supposed to mean...
|
||||
; tables with indexes of weapons on the right lists
|
||||
; OK (2022) so, L1 is list of offensive weapons, L2 - defensive
|
||||
NubersOfWeaponsL1
|
||||
.ds 8*5 ; :(8*5) .by $ff
|
||||
NubersOfWeaponsL2
|
||||
.ds 8*2 ; :(8*2) .by $ff
|
||||
IndexesOfWeaponsL1
|
||||
.ds 8*5 ; max 40 offensive weapons. this is wrong, should be 48, still only 32 defined.
|
||||
IndexesOfWeaponsL2
|
||||
.ds 8*2 ; max 16 defensive weapons.
|
||||
;----------------------------------------------------
|
||||
|
||||
; variables storing amount of weapons on the first and second
|
||||
; list and pointer position
|
||||
|
||||
HowManyOnTheList1
|
||||
HowManyOnTheListOff
|
||||
.DS 1
|
||||
HowManyOnTheList2
|
||||
HowManyOnTheListDef
|
||||
.DS 1
|
||||
PositionOnTheList ; pointer position on the list being displayed
|
||||
.DS 1
|
||||
|
||||
+381
-78
@@ -33,7 +33,7 @@ ExplosionRoutines
|
||||
.word VOID-1 ;napalm
|
||||
.word VOID-1 ;hotnapalm
|
||||
.word tracer-1
|
||||
.word VOID-1 ;smoketracer
|
||||
.word tracer-1 ;smoketracer
|
||||
.word babyroller-1
|
||||
.word roller-1
|
||||
.word heavyroller-1
|
||||
@@ -57,6 +57,7 @@ ExplosionRoutines
|
||||
.word laser-1
|
||||
|
||||
VOID
|
||||
tracer
|
||||
rts
|
||||
.endp
|
||||
; ------------------------
|
||||
@@ -102,14 +103,7 @@ VOID
|
||||
jsr xmissile
|
||||
|
||||
; 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
|
||||
|
||||
lda TankNr
|
||||
pha
|
||||
mva #1 Erase
|
||||
@@ -130,6 +124,7 @@ VOID
|
||||
mva LeapFrogAngle Angle
|
||||
|
||||
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
|
||||
lda HitFlag
|
||||
beq EndOfLeapping
|
||||
@@ -159,6 +154,7 @@ VOID
|
||||
ror Force
|
||||
mva LeapFrogAngle Angle
|
||||
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
|
||||
lda HitFlag
|
||||
beq EndOfLeapping
|
||||
@@ -178,17 +174,13 @@ EndOfLeapping
|
||||
.proc funkybomb ;
|
||||
mva #sfx_baby_missile sfx_effect
|
||||
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
|
||||
;central Explosion
|
||||
mva #21 ExplosionRadius
|
||||
jsr CalculateExplosionRange0
|
||||
jsr xmissile
|
||||
|
||||
ldy TankNr
|
||||
mva #0 plot4x4color
|
||||
jsr DisplayOffensiveTextNr
|
||||
|
||||
lda TankNr
|
||||
pha
|
||||
mva #1 Erase
|
||||
@@ -273,10 +265,6 @@ NoLowerCircle
|
||||
rts
|
||||
.endp
|
||||
; ------------------------
|
||||
.proc tracer
|
||||
rts
|
||||
.endp
|
||||
; ------------------------
|
||||
.proc babyroller
|
||||
inc FallDown2
|
||||
mva #11 ExplosionRadius
|
||||
@@ -663,12 +651,39 @@ DistanceCheckLoop
|
||||
adc #1
|
||||
:3 asl
|
||||
tay
|
||||
; check shields
|
||||
lda ActiveDefenceWeapon,x
|
||||
cmp #ind_Shield_________ ; one hit shield
|
||||
beq UseShield
|
||||
cmp #ind_Force_Shield___ ; shield with energy and parachute
|
||||
beq UseShieldWithEnergy
|
||||
cmp #ind_Heavy_Shield___ ; shield with energy
|
||||
beq UseShieldWithEnergy
|
||||
cmp #ind_Auto_Defense___ ; Auto Defence (it works only if hit ground next to tank. Tank hit is handled in Flight proc)
|
||||
beq UseShieldWithEnergy
|
||||
cmp #ind_Mag_Deflector__ ; Mag deflector (it works only if hit ground next to tank. Tank hit is handled in Flight proc)
|
||||
beq UseShieldWithEnergy
|
||||
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
|
||||
EndOfDistanceCheckLoop
|
||||
txa
|
||||
bne DistanceCheckLoop
|
||||
jne DistanceCheckLoop
|
||||
mva #sfx_silencer sfx_effect
|
||||
rts
|
||||
.endp
|
||||
@@ -740,7 +755,7 @@ UpNotYet
|
||||
sbc #1
|
||||
sta ydraw
|
||||
;check tank collision prior to PLOT
|
||||
sty HitFlag
|
||||
sty HitFlag ; set to 0
|
||||
|
||||
jsr CheckCollisionWithTank
|
||||
|
||||
@@ -1007,13 +1022,11 @@ ContinueToCheckMaxForce2
|
||||
; $f3 - shift+key
|
||||
|
||||
notpressed
|
||||
lda TRIG0S
|
||||
beq notpressed
|
||||
lda SKSTAT
|
||||
cmp #$ff
|
||||
beq checkJoy
|
||||
jeq checkJoy
|
||||
cmp #$f7 ; SHIFT
|
||||
beq checkJoy
|
||||
jeq checkJoy
|
||||
|
||||
lda kbcode
|
||||
and #%10111111 ; SHIFT elimination
|
||||
@@ -1026,6 +1039,23 @@ notpressed
|
||||
;---esc pressed-quit game---
|
||||
rts
|
||||
|
||||
@
|
||||
cmp #$0d ; I
|
||||
bne @+
|
||||
callInventory
|
||||
; Hide all tanks - after inventory they may have other shapes
|
||||
mva #1 Erase
|
||||
jsr DrawTanks
|
||||
mva #0 Erase
|
||||
;
|
||||
mva #$ff isInventory
|
||||
jsr Purchase
|
||||
mva #0 escFlag
|
||||
jsr DisplayStatus
|
||||
jsr SetMainScreen
|
||||
jsr DrawTanks
|
||||
jsr WaitForKeyRelease
|
||||
jmp BeforeFire
|
||||
@
|
||||
cmp #$8e
|
||||
jeq CTRLPressedUp
|
||||
@@ -1048,6 +1078,10 @@ jumpFromStick
|
||||
jeq pressedSpace
|
||||
cmp #$2c
|
||||
jeq pressedTAB
|
||||
cmp #$25 ; M
|
||||
jeq pressedM
|
||||
cmp #$3e ; S
|
||||
jeq pressedS
|
||||
jmp notpressed
|
||||
checkJoy
|
||||
;------------JOY-------------
|
||||
@@ -1064,10 +1098,17 @@ notpressedJoy
|
||||
;fire
|
||||
lda TRIG0S
|
||||
jeq pressedSpace
|
||||
mva #$ff pressTimer ; stop counting frames
|
||||
jmp notpressed
|
||||
|
||||
;
|
||||
pressedUp
|
||||
lda pressTimer
|
||||
spl:mva #0 pressTimer ; if >128 then reset to 0
|
||||
cmp #25 ; 1/2s
|
||||
bcs CTRLPressedUp
|
||||
|
||||
|
||||
;force increaseeee!
|
||||
ldx TankNr
|
||||
inc ForceTableL,x
|
||||
@@ -1104,6 +1145,11 @@ CTRLPressedUp
|
||||
|
||||
|
||||
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
|
||||
|
||||
ldx TankNr
|
||||
@@ -1193,10 +1239,33 @@ CTRLpressedTAB
|
||||
jsr WaitForKeyRelease
|
||||
jmp BeforeFire
|
||||
|
||||
pressedM
|
||||
; have you tried turning the music off and on again?
|
||||
lda #$ff
|
||||
eor:sta noMusic
|
||||
lda #song_ingame
|
||||
jsr RmtSongSelect
|
||||
jsr WaitForKeyRelease
|
||||
jmp BeforeFire
|
||||
|
||||
pressedS
|
||||
; have you tried turning sfx off and on again?
|
||||
lda #$ff
|
||||
eor:sta noSfx
|
||||
jsr WaitForKeyRelease
|
||||
jmp BeforeFire
|
||||
|
||||
|
||||
pressedSpace
|
||||
;=================================
|
||||
;we shoot here!!!
|
||||
mva #0 pressTimer ; reset
|
||||
jsr WaitForKeyRelease
|
||||
lda pressTimer
|
||||
cmp #25 ; 1/2s
|
||||
bcc fire
|
||||
jmp callInventory
|
||||
fire
|
||||
RTS
|
||||
.endp
|
||||
|
||||
@@ -1225,7 +1294,7 @@ RandomizeOffensiveText
|
||||
|
||||
ldx TankNr
|
||||
lda ActiveWeapon,x
|
||||
cmp #$20 ; laser
|
||||
cmp #ind_Laser__________ ; laser
|
||||
bne NotStrongShoot
|
||||
mva #0 color
|
||||
lda #7
|
||||
@@ -1269,9 +1338,20 @@ AfterStrongShoot
|
||||
sbc #$00
|
||||
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
|
||||
mva #1 color
|
||||
rts
|
||||
ShotUnderGround
|
||||
mwa xtraj+1 xdraw ; but why not XHit and YHit !!!???
|
||||
mwa ytraj+1 ydraw
|
||||
mva #$ff HitFlag
|
||||
rts
|
||||
.endp
|
||||
|
||||
|
||||
@@ -1285,9 +1365,15 @@ AfterStrongShoot
|
||||
sta Parachute
|
||||
|
||||
; let's check if the given tank has got the parachute
|
||||
lda #$35 ; parachute
|
||||
jsr HowManyBullets
|
||||
beq TankFallsX
|
||||
ldx TankNr
|
||||
lda ActiveDefenceWeapon,x
|
||||
cmp #ind_Parachute______ ; parachute
|
||||
beq ParachuteActive
|
||||
cmp #ind_StrongParachute ; strong parachute
|
||||
beq ParachuteActive
|
||||
cmp #ind_Force_Shield___ ; shield witch energy and parachute
|
||||
bne TankFallsX
|
||||
ParachuteActive
|
||||
inc Parachute
|
||||
TankFallsX
|
||||
; coordinates of the first pixel under the tank
|
||||
@@ -1355,6 +1441,44 @@ ItStillFalls
|
||||
FallDiagonally
|
||||
NoFallingDown
|
||||
ParachutePresent
|
||||
; check parachute type
|
||||
lda ActiveDefenceWeapon,x
|
||||
cmp #ind_StrongParachute ; strong parachute
|
||||
bne OneTimeParachute
|
||||
; decreasing energy of parachute - if the vertical fall, substract 2
|
||||
; and if at an angle then substract 1
|
||||
ldy #1 ; how much energy to substract
|
||||
lda IfFallDown
|
||||
and #1
|
||||
beq NoFallingDown2
|
||||
ldx TankNr
|
||||
jsr DecreaseShieldEnergyX
|
||||
cpy #0 ; is necessary to reduce tenk energy ?
|
||||
beq @+
|
||||
jsr DecreaseEnergyX
|
||||
@
|
||||
ldy #1
|
||||
lda IfFallDown
|
||||
and #6
|
||||
bne FallDiagonally2
|
||||
ldx TankNr
|
||||
jsr DecreaseShieldEnergyX
|
||||
cpy #0 ; is necessary to reduce tenk energy ?
|
||||
beq @+
|
||||
jsr DecreaseEnergyX
|
||||
@
|
||||
; check energy of parachute
|
||||
|
||||
lda ShieldEnergy,x
|
||||
bne OneTimeParachute
|
||||
mva #0 Parachute
|
||||
mva #0 ActiveDefenceWeapon,x ; deactivate defence weapon (parachute)
|
||||
; and now we must clear parachute symbol
|
||||
mva #1 Erase
|
||||
jsr DrawTankParachute
|
||||
FallDiagonally2
|
||||
NoFallingDown2
|
||||
OneTimeParachute
|
||||
; we must set flag meaning that the tank was falling down
|
||||
; because later maybe the number of parachutes will decrease
|
||||
; (if there were parachutes and they were ON)
|
||||
@@ -1362,7 +1486,7 @@ ParachutePresent
|
||||
lda Parachute
|
||||
ora #2 ; we set bit nr 1 (nr 0 means that parachute is present)
|
||||
sta Parachute
|
||||
|
||||
testowanie
|
||||
; storing last direction of falling
|
||||
; (it is not necessarily the direction from the previous
|
||||
; iteraction, so we must check directional bits before storing)
|
||||
@@ -1410,17 +1534,7 @@ NotRightEdge
|
||||
beq DoNotClearParachute
|
||||
; here we clear the parachute
|
||||
ldx TankNr
|
||||
lda #$34
|
||||
sta CharCode
|
||||
lda Ytankstable,x
|
||||
sec
|
||||
sbc #8
|
||||
sta ydraw
|
||||
lda XtanksTableL,x
|
||||
sta xdraw
|
||||
lda XtanksTableH,x
|
||||
sta xdraw+1
|
||||
jsr TypeChar
|
||||
jsr DrawTankParachute
|
||||
DoNotClearParachute
|
||||
mva #0 Erase
|
||||
ldx TankNr
|
||||
@@ -1463,17 +1577,7 @@ DoesNotFallRight
|
||||
|
||||
; here we draw parachute
|
||||
ldx TankNr
|
||||
lda #$34
|
||||
sta CharCode
|
||||
lda Ytankstable,x
|
||||
sec
|
||||
sbc #8
|
||||
sta ydraw
|
||||
lda XtanksTableL,x
|
||||
sta xdraw
|
||||
lda XtanksTableH,x
|
||||
sta xdraw+1
|
||||
jsr TypeChar
|
||||
jsr DrawTankParachute
|
||||
DoNotDrawParachute
|
||||
lda EndOfTheFallFlag
|
||||
jeq TankFallsX
|
||||
@@ -1489,7 +1593,25 @@ EndOfFall
|
||||
; first we clear parachute on the screen
|
||||
mva #1 Erase
|
||||
ldx TankNr
|
||||
lda #$34
|
||||
lda ActiveDefenceWeapon,x
|
||||
cmp #ind_Parachute______ ; deactivate weapon only if parachute (54)
|
||||
bne NoParachuteWeapon
|
||||
mva #0 ActiveDefenceWeapon,x ; deactivate defence weapon (parachute)
|
||||
NoParachuteWeapon
|
||||
jsr DrawTankParachute
|
||||
mva #0 Erase
|
||||
ldx TankNr
|
||||
jsr DrawTankNr ; redraw tank after erase parachute (exactly for redraw leaky schield :) )
|
||||
ThereWasNoParachute
|
||||
mva #sfx_silencer sfx_effect
|
||||
rts
|
||||
.endp
|
||||
|
||||
;--------------------------------------------------
|
||||
.proc DrawTankParachute
|
||||
;Tank number in X
|
||||
;--------------------------------------------------
|
||||
lda #$34 ; parachute symbol
|
||||
sta CharCode
|
||||
lda Ytankstable,x
|
||||
sec
|
||||
@@ -1500,16 +1622,8 @@ EndOfFall
|
||||
lda XtanksTableH,x
|
||||
sta xdraw+1
|
||||
jsr TypeChar
|
||||
mva #0 Erase
|
||||
; now we can deduct one parachute from the list of weapons
|
||||
|
||||
lda #$35 ; parachute
|
||||
jsr DecreaseWeapon
|
||||
ThereWasNoParachute
|
||||
mva #sfx_silencer sfx_effect
|
||||
rts
|
||||
rts
|
||||
.endp
|
||||
|
||||
;--------------------------------------------------
|
||||
.proc Flight ; Force(byte.byte), Wind(0.word)
|
||||
; Angle(byte) 128=0, 255=maxright, 0=maxleft
|
||||
@@ -1537,6 +1651,7 @@ noSmokeTracer
|
||||
sty SmokeTracerFlag
|
||||
|
||||
RepeatIfSmokeTracer
|
||||
RepeatFlight
|
||||
mwa ytraj+1 Ytrajold+1
|
||||
mwa xtraj+1 Xtrajold+1
|
||||
mva #%01000000 drawFunction
|
||||
@@ -1775,8 +1890,6 @@ EndOfFlight
|
||||
jsr unPlot
|
||||
mwa xcircle xdraw
|
||||
mwa ycircle ydraw
|
||||
; mwa XHit xdraw
|
||||
; mva YHit ydraw
|
||||
|
||||
ldy SmokeTracerFlag
|
||||
beq EndOfFlight2
|
||||
@@ -1785,7 +1898,71 @@ EndOfFlight
|
||||
jmp SecondFlight
|
||||
EndOfFlight2
|
||||
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 #ind_Auto_Defense___ ; Auto Defence
|
||||
beq AutoDefence
|
||||
cmp #ind_Mag_Deflector__ ; 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
|
||||
|
||||
.proc SecondFlight
|
||||
@@ -2157,18 +2334,108 @@ MIRValreadyAll
|
||||
mva tempor2 TankNr
|
||||
mva #0 Erase
|
||||
jsr SoilDown2
|
||||
mva #1 HitFlag
|
||||
mva #$ff HitFlag ; but why ??
|
||||
;jsr drawtanks
|
||||
rts
|
||||
.endp
|
||||
|
||||
; -------------------------------------------------
|
||||
.proc WhiteFlag
|
||||
; -------------------------------------------------
|
||||
; This routine is run from inside of the main loop
|
||||
; and replaces Shoot and Flight routines
|
||||
; X and TankNr - index of shooting tank
|
||||
; -------------------------------------------------
|
||||
mva #sfx_death_begin sfx_effect
|
||||
jsr FlashTank ; first we flash tank
|
||||
mva #1 Erase
|
||||
jsr DrawTankNr ; and erase tank
|
||||
mva #0 Erase
|
||||
ldx TankNr
|
||||
sta Energy,x ; clear tank energy
|
||||
sta eXistenZ,x ; erase from existence
|
||||
sta LASTeXistenZ,x ; to prevent explosion
|
||||
sta ActiveDefenceWeapon,x ; deactivate White Flag
|
||||
jsr PMoutofScreen
|
||||
jsr drawtanks ; for restore PM
|
||||
mva #sfx_silencer sfx_effect
|
||||
rts
|
||||
.endp
|
||||
|
||||
; -------------------------------------------------
|
||||
.proc NuclearWinter
|
||||
; -------------------------------------------------
|
||||
; This routine is run from inside of the main loop
|
||||
; and replaces Shoot and Flight routines
|
||||
; X and TankNr - index of shooting tank
|
||||
; -------------------------------------------------
|
||||
mva #sfx_sandhog sfx_effect
|
||||
ldy #0 ; byte counter (from 0 to 39)
|
||||
NextColumn
|
||||
; big loop - we repat internal loops for each column of bytes
|
||||
sty magic
|
||||
ldx #120 ; line counter (from 0 to 60 )
|
||||
; first loop - inverse column of bytes for a while
|
||||
ldy magic
|
||||
NextLine1
|
||||
jsr InverseScreenByte
|
||||
dex
|
||||
dex
|
||||
bpl NextLine1
|
||||
;
|
||||
wait ; wait uses A and Y
|
||||
; second loop - inverse again and put random "snow" to column of bytes
|
||||
ldx #120
|
||||
ldy magic
|
||||
mva #$55 magic+1
|
||||
NextLine2
|
||||
jsr InverseScreenByte
|
||||
lda random
|
||||
ora magic+1
|
||||
and (temp),y
|
||||
sta (temp),y
|
||||
lda magic+1
|
||||
eor #$ff
|
||||
sta magic+1
|
||||
dex
|
||||
dex
|
||||
bpl NextLine2
|
||||
; and go to next column
|
||||
iny
|
||||
cpy #40
|
||||
bne NextColumn
|
||||
; and we have "snow" :)
|
||||
lda #0
|
||||
ldx TankNr
|
||||
sta ActiveDefenceWeapon,x ; deactivate Nuclear Winter
|
||||
|
||||
sta RangeLeft ; whole screen in range of soil down
|
||||
sta RangeLeft+1
|
||||
mwa #screenwidth RangeRight
|
||||
jsr SoilDown2
|
||||
jsr drawtanks ; for restore PM
|
||||
rts
|
||||
|
||||
; in order to optimize the fragment repeated in both internal loops
|
||||
; we save 15 bytes :)
|
||||
InverseScreenByte
|
||||
lda LineTableL,x
|
||||
sta temp
|
||||
lda LineTableH,x
|
||||
sta temp+1
|
||||
lda (temp),y
|
||||
eor #$ff
|
||||
sta (temp),y
|
||||
rts
|
||||
.endp
|
||||
|
||||
; -------------------------------------------------
|
||||
.proc CheckCollisionWithTank
|
||||
; -------------------------------------------------
|
||||
; Check collision with Tank :)
|
||||
; xdraw , ydraw - coordinates of the checked point
|
||||
; 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
|
||||
; X - index of the hit tank
|
||||
|
||||
@@ -2176,31 +2443,40 @@ MIRValreadyAll
|
||||
CheckCollisionWithTankLoop
|
||||
lda eXistenZ,x
|
||||
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
|
||||
cmp xdraw+1
|
||||
bne Condition01
|
||||
bne @+
|
||||
lda xtankstableL,x
|
||||
cmp xdraw
|
||||
Condition01
|
||||
@
|
||||
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
|
||||
adc #8
|
||||
tay
|
||||
lda xtankstableH,x
|
||||
adc #0
|
||||
cmp xdraw+1
|
||||
bne Condition02
|
||||
bne @+
|
||||
cpy xdraw
|
||||
Condition02
|
||||
@
|
||||
bcc RightFromTheTank
|
||||
|
||||
lda ytankstable,x
|
||||
cmp ydraw ; check range
|
||||
bcc BelowTheTank ;(ytankstable,ytankstable+3)
|
||||
sbc #4
|
||||
cmp ydraw
|
||||
bcs OverTheTank
|
||||
mva #1 HitFlag
|
||||
TankHit
|
||||
inx
|
||||
stx HitFlag ; index of hit tank+1
|
||||
dex
|
||||
mwa xdraw XHit
|
||||
mwa ydraw YHit
|
||||
rts ; in X there is an index of the hit tank
|
||||
@@ -2213,6 +2489,33 @@ DeadTank
|
||||
cpx NumberOfPlayers
|
||||
bne CheckCollisionWithTankLoop
|
||||
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
|
||||
;--------------------------------------------------
|
||||
CalculateExplosionRange0
|
||||
|
||||
Reference in New Issue
Block a user