mirror of
https://github.com/pkali/scorch_src.git
synced 2026-05-20 22:34:21 +02:00
Besto of the best laser
And code ordering.
This commit is contained in:
+251
@@ -890,6 +890,257 @@ ShieldVisible
|
|||||||
bne @-
|
bne @-
|
||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
|
;--------------------------------------------------
|
||||||
|
.proc DrawTankParachute
|
||||||
|
;Tank number in X
|
||||||
|
;--------------------------------------------------
|
||||||
|
lda #$34 ; parachute 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
|
||||||
|
|
||||||
|
;--------------------------------------------------
|
||||||
|
.proc TankFalls;
|
||||||
|
;--------------------------------------------------
|
||||||
|
lda #0
|
||||||
|
sta PreviousFall ; bit 7 - left, bit 6 - right
|
||||||
|
sta EndOfTheFallFlag
|
||||||
|
sta Parachute
|
||||||
|
mva #2 FallingSoundBit ; another trick for only one sfx initialization in loop
|
||||||
|
|
||||||
|
; let's check if the given tank has got the parachute
|
||||||
|
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
|
||||||
|
; sound only if really falls
|
||||||
|
lda Parachute
|
||||||
|
and FallingSoundBit ; bit 1
|
||||||
|
beq NoFallingSound
|
||||||
|
mva #0 FallingSoundBit
|
||||||
|
mva #sfx_shield_off sfx_effect
|
||||||
|
NoFallingSound
|
||||||
|
; clear previous position
|
||||||
|
mva #1 Erase
|
||||||
|
jsr DrawTankNr
|
||||||
|
; and the parachute (if present)
|
||||||
|
lda Parachute
|
||||||
|
and #01
|
||||||
|
beq DoNotClearParachute
|
||||||
|
; here we clear the parachute
|
||||||
|
ldx TankNr
|
||||||
|
jsr DrawTankParachute
|
||||||
|
DoNotClearParachute
|
||||||
|
mva #0 Erase
|
||||||
|
ldx TankNr
|
||||||
|
lda EndOfTheFallFlag ; We only get byte below the tank if still falling
|
||||||
|
bne NoGroundCheck
|
||||||
|
; coordinates of the first pixel under the tank
|
||||||
|
ldx TankNr
|
||||||
|
lda XtankstableL,x
|
||||||
|
sta xdraw
|
||||||
|
lda XtankstableH,x
|
||||||
|
sta xdraw+1
|
||||||
|
lda Ytankstable,x
|
||||||
|
clc
|
||||||
|
adc #1 ; in this point the comment helped us! For the very first
|
||||||
|
; time in our lives! Tada! It opens a new chapter!!!
|
||||||
|
sta ydraw
|
||||||
|
;
|
||||||
|
; UnderTank1 ; byte under tank
|
||||||
|
; UnderTank2 ; byte under tank reversed (for simple check right direction)
|
||||||
|
lda #08
|
||||||
|
sta temp ; Loop Counter
|
||||||
|
ByteBelowTank
|
||||||
|
jsr point
|
||||||
|
beq EmptyPoint2
|
||||||
|
sec
|
||||||
|
ror UnderTank2
|
||||||
|
sec
|
||||||
|
bcs ROLPoint2
|
||||||
|
EmptyPoint2
|
||||||
|
clc
|
||||||
|
ror UnderTank2
|
||||||
|
clc
|
||||||
|
ROLPoint2
|
||||||
|
rol UnderTank1
|
||||||
|
inw xdraw
|
||||||
|
dec temp
|
||||||
|
bne ByteBelowTank
|
||||||
|
NoGroundCheck
|
||||||
|
ldx TankNr
|
||||||
|
lda UnderTank1
|
||||||
|
bne NoFallingDown
|
||||||
|
; Tank falling down ----
|
||||||
|
lda Parachute
|
||||||
|
and #1
|
||||||
|
bne ParachutePresent
|
||||||
|
; decreasing energy
|
||||||
|
ldy #2 ; how much energy to substract
|
||||||
|
jsr DecreaseEnergyX
|
||||||
|
ParachutePresent
|
||||||
|
; check parachute type
|
||||||
|
lda ActiveDefenceWeapon,x
|
||||||
|
cmp #ind_StrongParachute ; strong parachute
|
||||||
|
bne OneTimeParachute
|
||||||
|
; decreasing energy of parachute
|
||||||
|
ldy #2 ; how much energy to substract
|
||||||
|
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
|
||||||
|
OneTimeParachute
|
||||||
|
lda Parachute
|
||||||
|
ora #2 ; we set bit nr 1 (nr 0 means that parachute is present)
|
||||||
|
sta Parachute
|
||||||
|
; tank is falling down - modify coorinates
|
||||||
|
lda Ytankstable,x
|
||||||
|
clc
|
||||||
|
adc #1
|
||||||
|
sta Ytankstable,x
|
||||||
|
jmp EndOfFCycle
|
||||||
|
NoFallingDown
|
||||||
|
; check direction (left or right)
|
||||||
|
ldy #7 ; SlideLeftTable length -1 (from 0 to 7)
|
||||||
|
@ lda SlideLeftTable,y
|
||||||
|
cmp UnderTank1
|
||||||
|
beq FallingRight
|
||||||
|
cmp UnderTank2
|
||||||
|
beq FallingLeft
|
||||||
|
dey
|
||||||
|
bpl @-
|
||||||
|
bmi NoLeftOrRight
|
||||||
|
FallingLeft
|
||||||
|
; tank is falling left
|
||||||
|
bit PreviousFall ; bit 6 - right
|
||||||
|
bvs EndLeftFall
|
||||||
|
; we finish falling left if the tank reached the edge of the screen
|
||||||
|
lda XtanksTableL,x
|
||||||
|
bne NotLeftEdge
|
||||||
|
lda XtanksTableH,x
|
||||||
|
beq EndLeftFall
|
||||||
|
NotLeftEdge
|
||||||
|
; tank is falling left - modify coorinates
|
||||||
|
clc
|
||||||
|
lda XtankstableL,x
|
||||||
|
adc #1
|
||||||
|
sta XtankstableL,x
|
||||||
|
lda XtankstableH,x
|
||||||
|
adc #0
|
||||||
|
sta XtankstableH,x
|
||||||
|
mva #%10000000 PreviousFall ; set bit 7 - left
|
||||||
|
bne EndOfFCycle
|
||||||
|
FallingRight
|
||||||
|
; tank is falling right
|
||||||
|
bit PreviousFall ; bit 7 - left
|
||||||
|
bmi EndRightFall
|
||||||
|
; we finish falling right if the tank reached the edge of the screen
|
||||||
|
clc
|
||||||
|
lda XtanksTableL,x
|
||||||
|
adc #$08 ; we'll check right side of the char
|
||||||
|
sta temp
|
||||||
|
lda XtanksTableH,x
|
||||||
|
adc #0
|
||||||
|
sta temp+1
|
||||||
|
cpw temp #screenwidth
|
||||||
|
beq EndRightFall
|
||||||
|
; tank is falling right - modify coorinates
|
||||||
|
sec
|
||||||
|
lda XtankstableL,x
|
||||||
|
sbc #1
|
||||||
|
sta XtankstableL,x
|
||||||
|
lda XtankstableH,x
|
||||||
|
sbc #0
|
||||||
|
sta XtankstableH,x
|
||||||
|
mva #%01000000 PreviousFall ; set bit 6 - right
|
||||||
|
bne EndOfFCycle
|
||||||
|
EndLeftFall
|
||||||
|
EndRightFall
|
||||||
|
NoLeftOrRight
|
||||||
|
inc EndOfTheFallFlag ; after this is shouldn't fall
|
||||||
|
EndOfFCycle
|
||||||
|
; draw tank on new position
|
||||||
|
jsr DrawTankNr ; ew have TankNr in X (I hope :) )
|
||||||
|
; checking is parachute present and if so, draw it
|
||||||
|
lda Parachute
|
||||||
|
cmp #3 ; parachute and falling
|
||||||
|
bne DoNotDrawParachute
|
||||||
|
; here we draw parachute
|
||||||
|
ldx TankNr
|
||||||
|
jsr DrawTankParachute
|
||||||
|
wait ; onli if tank with patachute
|
||||||
|
RapidFalling
|
||||||
|
DoNotDrawParachute
|
||||||
|
lda EndOfTheFallFlag
|
||||||
|
jeq TankFallsX
|
||||||
|
; Tank falling down already finished, but it is not sure that
|
||||||
|
; the horizontal coordinate is even.
|
||||||
|
; If it is odd then it must be corrected because otherwise
|
||||||
|
; P/M graphics background would not look OK
|
||||||
|
ldx TankNr
|
||||||
|
lda XtanksTableL,x
|
||||||
|
and #$01
|
||||||
|
beq EndOfFall ; if it is even then it is the end
|
||||||
|
; and if not, we push it one pixel the way it was falling before
|
||||||
|
lda #%10000000 ; set "virtual ground" for right falling
|
||||||
|
ldy #%00000001
|
||||||
|
bit PreviousFall
|
||||||
|
bmi ForceFallLeft
|
||||||
|
tay ; tricky - replaces ldy #%10000000
|
||||||
|
lda #%00000001 ; set "virtual ground" for left falling
|
||||||
|
ForceFallLeft
|
||||||
|
sta UnderTank1
|
||||||
|
sty UnderTank2
|
||||||
|
jne TankFallsX
|
||||||
|
EndOfFall
|
||||||
|
mva #1 Erase
|
||||||
|
ldx TankNr
|
||||||
|
; if tank was falling down having parachute,
|
||||||
|
; we must deduct one parachute
|
||||||
|
lda Parachute
|
||||||
|
cmp #$03 ; was falling down and the parachute
|
||||||
|
bne NoParachuteWeapon
|
||||||
|
; first we check type of parachute
|
||||||
|
lda ActiveDefenceWeapon,x
|
||||||
|
cmp #ind_Parachute______ ; deactivate weapon only if parachute (54)
|
||||||
|
bne NoParachuteWeapon
|
||||||
|
mva #0 ActiveDefenceWeapon,x ; deactivate defence weapon (parachute)
|
||||||
|
NoParachuteWeapon
|
||||||
|
; now we clear parachute on the screen if present
|
||||||
|
lda Parachute
|
||||||
|
and #01
|
||||||
|
beq ThereWasNoParachute
|
||||||
|
jsr DrawTankParachute
|
||||||
|
ThereWasNoParachute
|
||||||
|
mva #0 Erase
|
||||||
|
ldx TankNr
|
||||||
|
jsr DrawTankNr ; redraw tank after erase parachute (exactly for redraw leaky schield :) )
|
||||||
|
mva #sfx_silencer sfx_effect
|
||||||
|
rts
|
||||||
|
|
||||||
|
.endp
|
||||||
|
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
.proc ClearPMmemory
|
.proc ClearPMmemory
|
||||||
|
|||||||
BIN
Binary file not shown.
@@ -197,6 +197,7 @@ vx03 .DS [5]
|
|||||||
MirvDown .DS [5] ; is given missile down?
|
MirvDown .DS [5] ; is given missile down?
|
||||||
MirvMissileCounter .DS 1 ; missile Counter (mainly for X)
|
MirvMissileCounter .DS 1 ; missile Counter (mainly for X)
|
||||||
SmokeTracerFlag .DS 1 ; if Smoketracer
|
SmokeTracerFlag .DS 1 ; if Smoketracer
|
||||||
|
LaserFlag .DS 1 ; $ff if Laser
|
||||||
XposFlag .DS 1 ; bullet positon X (0 - on screen , %1000000 - off-screen)
|
XposFlag .DS 1 ; bullet positon X (0 - on screen , %1000000 - off-screen)
|
||||||
YposFlag .DS 1 ; bullet positon Y (0 - on screen , %1000000 - over the screen , %0100000 - under the screen)
|
YposFlag .DS 1 ; bullet positon Y (0 - on screen , %1000000 - over the screen , %0100000 - under the screen)
|
||||||
;----------------------------------------------------
|
;----------------------------------------------------
|
||||||
|
|||||||
+15
-261
@@ -655,7 +655,8 @@ DiggerCharacter
|
|||||||
.endp
|
.endp
|
||||||
; ------------------------
|
; ------------------------
|
||||||
.proc laser
|
.proc laser
|
||||||
; but where are xdraw and ydraw ???? !!!!
|
; in xdraw and ydraw we have hit point coordinates
|
||||||
|
; from Shoot/Flight procedures (invisible flight)
|
||||||
; ------------------------
|
; ------------------------
|
||||||
ldx TankNr
|
ldx TankNr
|
||||||
lda AngleTable,x
|
lda AngleTable,x
|
||||||
@@ -1464,16 +1465,17 @@ RandomizeOffensiveText
|
|||||||
mva #1 plot4x4color
|
mva #1 plot4x4color
|
||||||
jsr DisplayOffensiveTextNr
|
jsr DisplayOffensiveTextNr
|
||||||
|
|
||||||
|
mva #0 LaserFlag ; $ff - Laser
|
||||||
ldx TankNr
|
ldx TankNr
|
||||||
lda ActiveWeapon,x
|
lda ActiveWeapon,x
|
||||||
cmp #ind_Laser__________ ; laser
|
cmp #ind_Laser__________ ; laser
|
||||||
bne NotStrongShoot
|
bne NotStrongShoot
|
||||||
; Laser: very strong - invisible - shot for laser beam end coordinates
|
; Laser: (not)very strong - invisible - shot for laser beam end coordinates
|
||||||
mva #0 color
|
mva #0 color
|
||||||
lda #7
|
lda #1
|
||||||
sta Force
|
sta Force
|
||||||
sta Force+1
|
sta Force+1
|
||||||
|
mva #$ff LaserFlag ; $ff - Laser
|
||||||
bne AfterStrongShoot
|
bne AfterStrongShoot
|
||||||
NotStrongShoot
|
NotStrongShoot
|
||||||
lda ForceTableL,x
|
lda ForceTableL,x
|
||||||
@@ -1528,257 +1530,6 @@ ShotUnderGround
|
|||||||
rts
|
rts
|
||||||
.endp
|
.endp
|
||||||
|
|
||||||
;--------------------------------------------------
|
|
||||||
.proc TankFalls;
|
|
||||||
;--------------------------------------------------
|
|
||||||
lda #0
|
|
||||||
sta PreviousFall ; bit 7 - left, bit 6 - right
|
|
||||||
sta EndOfTheFallFlag
|
|
||||||
sta Parachute
|
|
||||||
mva #2 FallingSoundBit ; another trick for only one sfx initialization in loop
|
|
||||||
|
|
||||||
; let's check if the given tank has got the parachute
|
|
||||||
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
|
|
||||||
; sound only if really falls
|
|
||||||
lda Parachute
|
|
||||||
and FallingSoundBit ; bit 1
|
|
||||||
beq NoFallingSound
|
|
||||||
mva #0 FallingSoundBit
|
|
||||||
mva #sfx_shield_off sfx_effect
|
|
||||||
NoFallingSound
|
|
||||||
; clear previous position
|
|
||||||
mva #1 Erase
|
|
||||||
jsr DrawTankNr
|
|
||||||
; and the parachute (if present)
|
|
||||||
lda Parachute
|
|
||||||
and #01
|
|
||||||
beq DoNotClearParachute
|
|
||||||
; here we clear the parachute
|
|
||||||
ldx TankNr
|
|
||||||
jsr DrawTankParachute
|
|
||||||
DoNotClearParachute
|
|
||||||
mva #0 Erase
|
|
||||||
ldx TankNr
|
|
||||||
lda EndOfTheFallFlag ; We only get byte below the tank if still falling
|
|
||||||
bne NoGroundCheck
|
|
||||||
; coordinates of the first pixel under the tank
|
|
||||||
ldx TankNr
|
|
||||||
lda XtankstableL,x
|
|
||||||
sta xdraw
|
|
||||||
lda XtankstableH,x
|
|
||||||
sta xdraw+1
|
|
||||||
lda Ytankstable,x
|
|
||||||
clc
|
|
||||||
adc #1 ; in this point the comment helped us! For the very first
|
|
||||||
; time in our lives! Tada! It opens a new chapter!!!
|
|
||||||
sta ydraw
|
|
||||||
;
|
|
||||||
; UnderTank1 ; byte under tank
|
|
||||||
; UnderTank2 ; byte under tank reversed (for simple check right direction)
|
|
||||||
lda #08
|
|
||||||
sta temp ; Loop Counter
|
|
||||||
ByteBelowTank
|
|
||||||
jsr point
|
|
||||||
beq EmptyPoint2
|
|
||||||
sec
|
|
||||||
ror UnderTank2
|
|
||||||
sec
|
|
||||||
bcs ROLPoint2
|
|
||||||
EmptyPoint2
|
|
||||||
clc
|
|
||||||
ror UnderTank2
|
|
||||||
clc
|
|
||||||
ROLPoint2
|
|
||||||
rol UnderTank1
|
|
||||||
inw xdraw
|
|
||||||
dec temp
|
|
||||||
bne ByteBelowTank
|
|
||||||
NoGroundCheck
|
|
||||||
ldx TankNr
|
|
||||||
lda UnderTank1
|
|
||||||
bne NoFallingDown
|
|
||||||
; Tank falling down ----
|
|
||||||
lda Parachute
|
|
||||||
and #1
|
|
||||||
bne ParachutePresent
|
|
||||||
; decreasing energy
|
|
||||||
ldy #2 ; how much energy to substract
|
|
||||||
jsr DecreaseEnergyX
|
|
||||||
ParachutePresent
|
|
||||||
; check parachute type
|
|
||||||
lda ActiveDefenceWeapon,x
|
|
||||||
cmp #ind_StrongParachute ; strong parachute
|
|
||||||
bne OneTimeParachute
|
|
||||||
; decreasing energy of parachute
|
|
||||||
ldy #2 ; how much energy to substract
|
|
||||||
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
|
|
||||||
OneTimeParachute
|
|
||||||
lda Parachute
|
|
||||||
ora #2 ; we set bit nr 1 (nr 0 means that parachute is present)
|
|
||||||
sta Parachute
|
|
||||||
; tank is falling down - modify coorinates
|
|
||||||
lda Ytankstable,x
|
|
||||||
clc
|
|
||||||
adc #1
|
|
||||||
sta Ytankstable,x
|
|
||||||
jmp EndOfFCycle
|
|
||||||
NoFallingDown
|
|
||||||
; check direction (left or right)
|
|
||||||
ldy #7 ; SlideLeftTable length -1 (from 0 to 7)
|
|
||||||
@ lda SlideLeftTable,y
|
|
||||||
cmp UnderTank1
|
|
||||||
beq FallingRight
|
|
||||||
cmp UnderTank2
|
|
||||||
beq FallingLeft
|
|
||||||
dey
|
|
||||||
bpl @-
|
|
||||||
bmi NoLeftOrRight
|
|
||||||
FallingLeft
|
|
||||||
; tank is falling left
|
|
||||||
bit PreviousFall ; bit 6 - right
|
|
||||||
bvs EndLeftFall
|
|
||||||
; we finish falling left if the tank reached the edge of the screen
|
|
||||||
lda XtanksTableL,x
|
|
||||||
bne NotLeftEdge
|
|
||||||
lda XtanksTableH,x
|
|
||||||
beq EndLeftFall
|
|
||||||
NotLeftEdge
|
|
||||||
; tank is falling left - modify coorinates
|
|
||||||
clc
|
|
||||||
lda XtankstableL,x
|
|
||||||
adc #1
|
|
||||||
sta XtankstableL,x
|
|
||||||
lda XtankstableH,x
|
|
||||||
adc #0
|
|
||||||
sta XtankstableH,x
|
|
||||||
mva #%10000000 PreviousFall ; set bit 7 - left
|
|
||||||
bne EndOfFCycle
|
|
||||||
FallingRight
|
|
||||||
; tank is falling right
|
|
||||||
bit PreviousFall ; bit 7 - left
|
|
||||||
bmi EndRightFall
|
|
||||||
; we finish falling right if the tank reached the edge of the screen
|
|
||||||
clc
|
|
||||||
lda XtanksTableL,x
|
|
||||||
adc #$08 ; we'll check right side of the char
|
|
||||||
sta temp
|
|
||||||
lda XtanksTableH,x
|
|
||||||
adc #0
|
|
||||||
sta temp+1
|
|
||||||
cpw temp #screenwidth
|
|
||||||
beq EndRightFall
|
|
||||||
; tank is falling right - modify coorinates
|
|
||||||
sec
|
|
||||||
lda XtankstableL,x
|
|
||||||
sbc #1
|
|
||||||
sta XtankstableL,x
|
|
||||||
lda XtankstableH,x
|
|
||||||
sbc #0
|
|
||||||
sta XtankstableH,x
|
|
||||||
mva #%01000000 PreviousFall ; set bit 6 - right
|
|
||||||
bne EndOfFCycle
|
|
||||||
EndLeftFall
|
|
||||||
EndRightFall
|
|
||||||
NoLeftOrRight
|
|
||||||
inc EndOfTheFallFlag ; after this is shouldn't fall
|
|
||||||
EndOfFCycle
|
|
||||||
; draw tank on new position
|
|
||||||
jsr DrawTankNr ; ew have TankNr in X (I hope :) )
|
|
||||||
; checking is parachute present and if so, draw it
|
|
||||||
lda Parachute
|
|
||||||
cmp #3 ; parachute and falling
|
|
||||||
bne DoNotDrawParachute
|
|
||||||
; here we draw parachute
|
|
||||||
ldx TankNr
|
|
||||||
jsr DrawTankParachute
|
|
||||||
wait ; onli if tank with patachute
|
|
||||||
RapidFalling
|
|
||||||
DoNotDrawParachute
|
|
||||||
lda EndOfTheFallFlag
|
|
||||||
jeq TankFallsX
|
|
||||||
; Tank falling down already finished, but it is not sure that
|
|
||||||
; the horizontal coordinate is even.
|
|
||||||
; If it is odd then it must be corrected because otherwise
|
|
||||||
; P/M graphics background would not look OK
|
|
||||||
ldx TankNr
|
|
||||||
lda XtanksTableL,x
|
|
||||||
and #$01
|
|
||||||
beq EndOfFall ; if it is even then it is the end
|
|
||||||
; and if not, we push it one pixel the way it was falling before
|
|
||||||
lda #%10000000 ; set "virtual ground" for right falling
|
|
||||||
ldy #%00000001
|
|
||||||
bit PreviousFall
|
|
||||||
bmi ForceFallLeft
|
|
||||||
tay ; tricky - replaces ldy #%10000000
|
|
||||||
lda #%00000001 ; set "virtual ground" for left falling
|
|
||||||
ForceFallLeft
|
|
||||||
sta UnderTank1
|
|
||||||
sty UnderTank2
|
|
||||||
jne TankFallsX
|
|
||||||
EndOfFall
|
|
||||||
mva #1 Erase
|
|
||||||
ldx TankNr
|
|
||||||
; if tank was falling down having parachute,
|
|
||||||
; we must deduct one parachute
|
|
||||||
lda Parachute
|
|
||||||
cmp #$03 ; was falling down and the parachute
|
|
||||||
bne NoParachuteWeapon
|
|
||||||
; first we check type of parachute
|
|
||||||
lda ActiveDefenceWeapon,x
|
|
||||||
cmp #ind_Parachute______ ; deactivate weapon only if parachute (54)
|
|
||||||
bne NoParachuteWeapon
|
|
||||||
mva #0 ActiveDefenceWeapon,x ; deactivate defence weapon (parachute)
|
|
||||||
NoParachuteWeapon
|
|
||||||
; now we clear parachute on the screen if present
|
|
||||||
lda Parachute
|
|
||||||
and #01
|
|
||||||
beq ThereWasNoParachute
|
|
||||||
jsr DrawTankParachute
|
|
||||||
ThereWasNoParachute
|
|
||||||
mva #0 Erase
|
|
||||||
ldx TankNr
|
|
||||||
jsr DrawTankNr ; redraw tank after erase parachute (exactly for redraw leaky schield :) )
|
|
||||||
mva #sfx_silencer sfx_effect
|
|
||||||
rts
|
|
||||||
|
|
||||||
.endp
|
|
||||||
|
|
||||||
;--------------------------------------------------
|
|
||||||
.proc DrawTankParachute
|
|
||||||
;Tank number in X
|
|
||||||
;--------------------------------------------------
|
|
||||||
lda #$34 ; parachute 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
|
|
||||||
;--------------------------------------------------
|
;--------------------------------------------------
|
||||||
.proc Flight ; Force(byte.byte), Wind(0.word)
|
.proc Flight ; Force(byte.byte), Wind(0.word)
|
||||||
; Angle(byte) 128=0, 255=maxright, 0=maxleft
|
; Angle(byte) 128=0, 255=maxright, 0=maxleft
|
||||||
@@ -1802,7 +1553,7 @@ ThereWasNoParachute
|
|||||||
ldy #0
|
ldy #0
|
||||||
ldx TankNr
|
ldx TankNr
|
||||||
lda ActiveWeapon,x
|
lda ActiveWeapon,x
|
||||||
cmp #11 ; Smoke tracer
|
cmp #ind_Smoke_Tracer___ ; Smoke tracer
|
||||||
bne noSmokeTracer
|
bne noSmokeTracer
|
||||||
iny
|
iny
|
||||||
noSmokeTracer
|
noSmokeTracer
|
||||||
@@ -1961,6 +1712,8 @@ Loopi
|
|||||||
sbc vy+3
|
sbc vy+3
|
||||||
sta ytraj+2
|
sta ytraj+2
|
||||||
|
|
||||||
|
bit LaserFlag ; no gravity if Laser
|
||||||
|
bmi NoGravity
|
||||||
;vy=vy-g (again without least significant byte of vy)
|
;vy=vy-g (again without least significant byte of vy)
|
||||||
sec
|
sec
|
||||||
lda vy+1
|
lda vy+1
|
||||||
@@ -1979,9 +1732,9 @@ Loopi
|
|||||||
lda ActiveWeapon,x
|
lda ActiveWeapon,x
|
||||||
cmp #ind_MIRV___________ ; MIRV
|
cmp #ind_MIRV___________ ; MIRV
|
||||||
jeq MIRVdownLoop
|
jeq MIRVdownLoop
|
||||||
|
NoGravity
|
||||||
StillUp
|
StillUp
|
||||||
|
|
||||||
|
|
||||||
clc ;xtraj=xtraj+vx (skipping least significant byte of vx)
|
clc ;xtraj=xtraj+vx (skipping least significant byte of vx)
|
||||||
lda xtraj ;here of course Fight to right
|
lda xtraj ;here of course Fight to right
|
||||||
adc vx+1
|
adc vx+1
|
||||||
@@ -1993,12 +1746,15 @@ StillUp
|
|||||||
adc vx+3
|
adc vx+3
|
||||||
sta xtraj+2
|
sta xtraj+2
|
||||||
|
|
||||||
|
bit LaserFlag ; no wind if Laser
|
||||||
|
bmi NoWind
|
||||||
clc
|
clc
|
||||||
.rept 4
|
.rept 4
|
||||||
lda vx+#
|
lda vx+#
|
||||||
adc Wind+#
|
adc Wind+#
|
||||||
sta vx+#
|
sta vx+#
|
||||||
.endr
|
.endr
|
||||||
|
NoWind
|
||||||
mwa xtrajold+1 xdraw
|
mwa xtrajold+1 xdraw
|
||||||
mwa ytrajold+1 ydraw
|
mwa ytrajold+1 ydraw
|
||||||
mwa xtraj+1 xbyte
|
mwa xtraj+1 xbyte
|
||||||
@@ -2019,10 +1775,8 @@ nowait
|
|||||||
lda HitFlag
|
lda HitFlag
|
||||||
bne Hit
|
bne Hit
|
||||||
; --- only for Laser
|
; --- only for Laser
|
||||||
ldx TankNr
|
bit LaserFlag
|
||||||
lda ActiveWeapon,x
|
bpl NoCheckEdgesForLaser
|
||||||
cmp #ind_Laser__________ ; Laser
|
|
||||||
bne NoCheckEdgesForLaser
|
|
||||||
; If laser fires, edges of the screen finish "flying" and laser hits.
|
; If laser fires, edges of the screen finish "flying" and laser hits.
|
||||||
lda ytraj+2
|
lda ytraj+2
|
||||||
bmi LaserHitEdge
|
bmi LaserHitEdge
|
||||||
|
|||||||
Reference in New Issue
Block a user