WIP: barrels anew

This commit is contained in:
2022-07-24 09:19:03 -04:00
parent 1de19dfd26
commit 992130f267
6 changed files with 223 additions and 197 deletions
+56 -56
View File
@@ -227,62 +227,62 @@ BarrelTable
.by $04,$04,$04,$02,$02,$02,$02,$02,$02,$02,
.by $02,
EndOfTheBarrelX
; right angles from 0 (horizontally right) to 90 (up)
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,6,6,6,6,6,6,6,6,6,
.by 5,5,5,5,5,5,5,5,5,5,
.by 4,4,4,4,4,4,4,4,4,4,
;.by 4,
; left angles from 90 (vertical) to 180 (horizontally left)
.by 3,3,3,3,3,3,3,3,3,3,
.by 3,2,2,2,2,2,2,2,2,2,
.by 2,1,1,1,1,1,1,1,1,1,
.by 0,0,0,0,0,0,0,0,0,0,
.by 0,0,0,0,0,0,0,0,0,0,
.by 0,0,0,0,0,0,0,0,0,0,
.by 0,0,0,0,0,0,0,0,0,0,
.by 0,0,0,0,0,0,0,0,0,0,
.by 0,0,0,0,0,0,0,0,0,0,
.by 0
EndOfTheBarrelY
; right angles from 0 (horizontally right) to 90 (up)
; one pixel Up for fix problems with colision check
;.by 3,3,3,3,3,3,3,3,3,3,3,3,3,3
.by 4,4,4,4,4,4,4,4,4,4,
.by 4,4,4,4,4,4,4,4,4,4,
.by 4,4,4,4,4,4,4,5,5,5,
.by 5,5,5,5,5,5,5,6,6,6,
.by 6,6,6,6,6,6,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
;.by 7,
; left angles from 90 (vertical) to 180 (horizontally left)
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,7,7,7,7,7,
.by 7,7,7,7,7,6,6,6,6,6,
.by 6,6,6,6,5,5,5,5,5,5,
.by 5,5,5,5,4,4,4,4,4,4,
.by 4,4,4,4,4,4,4,4,4,4,
.by 4,4,4,4,4,4,4,4,4,4,
.by 4,
; one pixel Up for fix problems with colision check
;.by 3,3,3,3,3,3,3,3,3,3,3,3,3,3
;EndOfTheBarrelX
; ; right angles from 0 (horizontally right) to 90 (up)
;
; .by 7,7,7,7,7,7,7,7,7,7,
; .by 7,7,7,7,7,7,7,7,7,7,
; .by 7,7,7,7,7,7,7,7,7,7,
; .by 7,7,7,7,7,7,7,7,7,7,
; .by 7,7,7,7,7,7,7,7,7,7,
; .by 7,7,7,7,7,7,7,7,7,7,
; .by 7,6,6,6,6,6,6,6,6,6,
; .by 5,5,5,5,5,5,5,5,5,5,
; .by 4,4,4,4,4,4,4,4,4,4,
; ;.by 4,
;
; ; left angles from 90 (vertical) to 180 (horizontally left)
; .by 3,3,3,3,3,3,3,3,3,3,
; .by 3,2,2,2,2,2,2,2,2,2,
; .by 2,1,1,1,1,1,1,1,1,1,
; .by 0,0,0,0,0,0,0,0,0,0,
; .by 0,0,0,0,0,0,0,0,0,0,
; .by 0,0,0,0,0,0,0,0,0,0,
; .by 0,0,0,0,0,0,0,0,0,0,
; .by 0,0,0,0,0,0,0,0,0,0,
; .by 0,0,0,0,0,0,0,0,0,0,
; .by 0
;
;EndOfTheBarrelY
;; right angles from 0 (horizontally right) to 90 (up)
;
; ; one pixel Up for fix problems with colision check
; ;.by 3,3,3,3,3,3,3,3,3,3,3,3,3,3
; .by 4,4,4,4,4,4,4,4,4,4,
; .by 4,4,4,4,4,4,4,4,4,4,
; .by 4,4,4,4,4,4,4,5,5,5,
; .by 5,5,5,5,5,5,5,6,6,6,
; .by 6,6,6,6,6,6,7,7,7,7,
; .by 7,7,7,7,7,7,7,7,7,7,
; .by 7,7,7,7,7,7,7,7,7,7,
; .by 7,7,7,7,7,7,7,7,7,7,
; .by 7,7,7,7,7,7,7,7,7,7,
; ;.by 7,
;
;; left angles from 90 (vertical) to 180 (horizontally left)
;
; .by 7,7,7,7,7,7,7,7,7,7,
; .by 7,7,7,7,7,7,7,7,7,7,
; .by 7,7,7,7,7,7,7,7,7,7,
; .by 7,7,7,7,7,7,7,7,7,7,
; .by 7,7,7,7,7,6,6,6,6,6,
; .by 6,6,6,6,5,5,5,5,5,5,
; .by 5,5,5,5,4,4,4,4,4,4,
; .by 4,4,4,4,4,4,4,4,4,4,
; .by 4,4,4,4,4,4,4,4,4,4,
; .by 4,
; ; one pixel Up for fix problems with colision check
; ;.by 3,3,3,3,3,3,3,3,3,3,3,3,3,3
;-------------------------------------------------
+70 -65
View File
@@ -637,13 +637,7 @@ SkipHidingPM
sta CharCode
DrawTankNrX
ldx tanknr
lda xtankstableL,x
sta xdraw
lda xtankstableH,x
sta xdraw+1
lda ytankstable,x
sta ydraw
mva #0 ydraw+1
jsr SetupXYdraw
jsr TypeChar
@@ -760,12 +754,10 @@ DrawTankFlag
sec
sbc #8
sta ydraw
lda XtanksTableL,x
sta xdraw
lda XtanksTableH,x
sta xdraw+1
jsr SetupXYdraw.X
jsr TypeChar
NoShieldDraw
DrawBarrel
DoNotDrawTankNr
rts
.endp
@@ -801,13 +793,7 @@ tankflash_loop
;
; 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
jsr SetupXYdraw
DrawInPosition
mva #1 color
lda erase
@@ -900,10 +886,7 @@ ShieldVisible
sec
sbc #8
sta ydraw
lda XtanksTableL,x
sta xdraw
lda XtanksTableH,x
sta xdraw+1
jsr SetupXYdraw.X
jsr TypeChar
rts
.endp
@@ -953,10 +936,7 @@ DoNotClearParachute
bne NoGroundCheck
; coordinates of the first pixel under the tank
ldx TankNr
lda XtankstableL,x
sta xdraw
lda XtankstableH,x
sta xdraw+1
jsr SetupXYdraw.X
lda Ytankstable,x
clc
adc #1 ; in this point the comment helped us! For the very first
@@ -1909,7 +1889,7 @@ EndPut4x4
rts
.endp
; -------------------------------------
.proc _XtanksTableLHX
.proc SetupXYdraw
lda ytankstable,x
sta ydraw
mva #0 ydraw+1
@@ -1921,43 +1901,58 @@ X lda XtanksTableL,x
.endp
;--------------------------------------------------
.proc DrawBarrel
; X - tank number
;
; X - tankNr
; changes xdraw, ydraw, fx, fy
;--------------------------------------------------
jsr _XtanksTableLHX
jsr SetupXYdraw
;vx calculation
;vx = sin(90-Angle) for Angle <=90
;vx = -sin(Angle-90) for 90 < Angle <= 180
; erase previous barrel
;cos(Angle) (but we use sin table only so some shenanigans happen)
lda AngleTable,x
mva #0 color
lda previousBarrelAngle,x
sta Angle
tax
jsr DrawBarrelTech
mva #1 color
ldx TankNr
jsr SetupXYdraw
lda angleTable,x
sta Angle
jsr DrawBarrelTech
rts
.endp
;Angle works like this:
;0 'degrees' is horizontally right
;90 'degrees' is straight up
;180 horizontally left
; (we have to set goleft used in rolling weapons)
cpx #91
.proc DrawBarrelTech
; angle in Angle and A
mvx #0 goleft
cmp #91
bcc angleUnder90
;over 90
sec
txa ; lda # Angle
sbc #90
tax
jmp @+
; barrel start offset over 90deg
adw xdraw #6 xdraw
sbw ydraw #2 ydraw
mva #1 goleft
bpl @+ ; jmp @+
angleUnder90
mva #0 goleft
sec ; X = 90-Angle
lda #90
sbc Angle
tax
; barrel start offset under 90deg
adw xdraw #1 xdraw
sbw ydraw #2 ydraw
@
lda sintable,x ; cos(X)
sta vx
@@ -1967,18 +1962,16 @@ angleUnder90
;vy = sin(180-Angle) for 90 < Angle <= 180
;--
ldx Angle
cpx #91
lda Angle
cmp #91
bcc YangleUnder90
lda #180
sec
sbc Angle
tax
YangleUnder90
tax
lda sintable,x
sta vy
lda #0 ; all arithmetic to zero
@@ -1987,21 +1980,17 @@ YangleUnder90
sta fx
sta fy
; barrel start offset
adw xdraw #4 xdraw
sbw ydraw #4 ydraw
; draw by vx vy
; in each step
; 1. plot(xdraw, ydraw)
; 2. add vx and vy to 3 byte variables xdraw.fx, ydraw.fy
; 3 check length, if shorter, go to 1.
mva #5 yc ; barrel length
mva #1 color
@
jsr plot.MakePlot
mva #20 yc ; barrel length
barrelLoop
lda goleft
bne @+
clc
lda fx
adc vx
@@ -2012,23 +2001,39 @@ YangleUnder90
lda xdraw+1
adc #0
sta xdraw+1
clc
jmp ybarrel
@
sec
lda fx
sbc vx
sta fx
lda xdraw
sbc #0
sta xdraw
lda xdraw+1
sbc #0
sta xdraw+1
ybarrel
sec
lda fy
adc vy
sbc vy
sta fy
lda ydraw
adc #0
sbc #0
sta ydraw
lda ydraw+1
adc #0
sbc #0
sta ydraw+1
jsr plot.MakePlot
dec yc
bne @-
bne barrelLoop
mwa xdraw EndOfTheBarrelX
mva ydraw EndOfTheBarrelY
rts
.endp
+8 -6
View File
@@ -325,6 +325,13 @@ SettingEnergies
sta colpf2s ; status line "off"
sta colpf1s
lda #90 ; barrel fully erect
ldx #MaxPlayers-1
@ sta previousBarrelAngle,x
dex
bpl @-
jsr drawmountains ;draw them
jsr drawtanks ;finally draw tanks
@@ -789,12 +796,7 @@ NotNegativeShieldEnergy
lda #0 ; turn off defense weapons when hara-kiring
sta ActiveDefenceWeapon,x
sta ShieldEnergy,x
lda xtankstableL,x
sta xdraw
lda xtankstableH,x
sta xdraw+1
lda yTanksTable,x
sta ydraw
jsr SetupXYdraw
lda #1 ; Missile
jsr ExplosionDirect
jmp MainRoundLoop.continueMainRoundLoopAfterSeppuku
BIN
View File
Binary file not shown.
+12 -7
View File
@@ -100,10 +100,6 @@ MaxForceTableH
.DS [MaxPlayers]
;----------------------------------------------------
AngleTable ;Angle of the barrel of each tank during the round
.DS [MaxPlayers]
NewAngle .DS 1
;----------------------------------------------------
ActiveWeapon ;number of the selected weapon
.DS [MaxPlayers]
@@ -347,7 +343,18 @@ escFlag .ds 1
;--------------
CurrentResult
.DS 1
;--------------
;--------------
AngleTable ;Angle of the barrel of each tank during the round
.DS [MaxPlayers]
NewAngle ; used in AI
.DS 1
previousBarrelAngle
.DS [MaxPlayers]
EndOfTheBarrelX
.ds 2
EndOfTheBarrelY
.ds 1
;----------------------------------------------------
previousAngle
.DS [MaxPlayers]
previousEnergyL
@@ -356,8 +363,6 @@ previousLeftRange
.DS [MaxPlayers]
previousEnergyH
.DS [MaxPlayers]
previousRightAngle
.DS [MaxPlayers]
RandBoundaryLow
.ds 2
RandBoundaryHigh
+77 -63
View File
@@ -661,20 +661,25 @@ DiggerCharacter
ldx TankNr
lda AngleTable,x
tay
clc
lda xtankstableL,x
adc EndOfTheBarrelX,y ; correction of the end of the barrel point (X)
sta xbyte
lda xtankstableH,x
adc #0
sta xbyte+1
sec
lda ytankstable,x
sbc EndOfTheBarrelY,y ; correction of the end of the barrel point (Y)
sta ybyte
lda #$00
sbc #$00
sta ybyte+1
mwa EndOfTheBarrelX xbyte
mva EndOfTheBarrelY ybyte
mva #0 ybyte+1
;clc
;lda xtankstableL,x
;adc EndOfTheBarrelX,y ; correction of the end of the barrel point (X)
;sta xbyte
;lda xtankstableH,x
;adc #0
;sta xbyte+1
;sec
;lda ytankstable,x
;sbc EndOfTheBarrelY,y ; correction of the end of the barrel point (Y)
;sta ybyte
;lda #$00
;sbc #$00
;sta ybyte+1
mwa xdraw LaserCoordinate
mwa ydraw LaserCoordinate+2
@@ -1325,61 +1330,70 @@ CTRLPressedDown
jmp BeforeFire
pressedRight
ldx TankNr
lda AngleTable,x
sta previousBarrelAngle,x
lda pressTimer
spl:mva #0 pressTimer ; if >128 then reset to 0
cmp #25 ; 1/2s
bcs CTRLPressedRight
mva #sfx_set_power_2 sfx_effect
ldx TankNr
dec AngleTable,x
lda AngleTable,x
cmp #255 ; -1
jne BeforeFire
lda #180
lda #179
sta AngleTable,x
jmp BeforeFire
CTRLPressedRight
mva #sfx_set_power_2 sfx_effect
ldx TankNr
lda AngleTable,x
sta previousBarrelAngle,x
mva #sfx_set_power_2 sfx_effect
lda AngleTable,x
sec
sbc #4
sta AngleTable,x
cmp #4 ; smalles angle for speed rotating
cmp #4 ; smallest angle for speed rotating
jcs BeforeFire
lda #180
lda #179
sta AngleTable,x
jmp BeforeFire
pressedLeft
ldx TankNr
lda AngleTable,x
sta previousBarrelAngle,x
lda pressTimer
spl:mva #0 pressTimer ; if >128 then reset to 0
cmp #25 ; 1/2s
bcs CTRLPressedLeft
mva #sfx_set_power_2 sfx_effect
ldx TankNr
INC AngleTable,x
lda AngleTable,x
cmp #181
cmp #180
jne BeforeFire
lda #0
lda #1
sta AngleTable,x
jmp BeforeFire
CTRLPressedLeft
mva #sfx_set_power_2 sfx_effect
ldx TankNr
lda AngleTable,x
sta previousBarrelAngle,x
mva #sfx_set_power_2 sfx_effect
lda AngleTable,x
clc
adc #4
sta AngleTable,x
cmp #181-4
cmp #180-4
jcc BeforeFire
lda #0
lda #1
sta AngleTable,x
jmp BeforeFire
@@ -1498,21 +1512,26 @@ AfterStrongShoot
; to start where the tank's barrel ends
; (without it bullet would go from the left lower corner of the tank)
;ldx TankNr
ldy Angle
clc
lda xtankstableL,x
adc EndOfTheBarrelX,y ; correction of X
sta xtraj+1
lda xtankstableH,x
adc #$00
sta xtraj+2
sec
lda ytankstable,x
sbc EndOfTheBarrelY,y ; correction of Y
sta ytraj+1
lda #$00
sbc #$00
sta ytraj+2
mwa EndOfTheBarrelX xtraj+1
mva EndOfTheBarrely ytraj+1
mva #0 ytraj+2
;ldy Angle
;clc
;lda xtankstableL,x
;adc EndOfTheBarrelX,y ; correction of X
;sta xtraj+1
;lda xtankstableH,x
;adc #$00
;sta xtraj+2
;sec
;lda ytankstable,x
;sbc EndOfTheBarrelY,y ; correction of Y
;sta ytraj+1
;lda #$00
;sbc #$00
;sta ytraj+2
; checking if the shot is underground (no Flight but Hit :) )
ldy #0
@@ -1918,30 +1937,25 @@ AutoDefence
sta xtraj
sta ytraj
lda xtankstableL,x
sta xtraj+1
lda xtankstableH,x
sta xtraj+2
lda ytankstable,x
sta ytraj+1
lda #$00
sta ytraj+2
mwa EndOfTheBarrelX xbyte
mva EndOfTheBarrelY ybyte
mva #0 ybyte+1
ldy Angle
clc
lda xtraj+1
adc EndOfTheBarrelX,y ; correction of X
sta xtraj+1
lda xtraj+2
adc #0
sta xtraj+2
sec
lda ytraj+1
sbc EndOfTheBarrelY,y ; correction of Y
sta ytraj+1
lda ytraj+2
sbc #0
sta ytraj+2
; ldy Angle
; clc
; lda xtraj+1
; adc EndOfTheBarrelX,y ; correction of X
; sta xtraj+1
; lda xtraj+2
; adc #0
; sta xtraj+2
; sec
; lda ytraj+1
; sbc EndOfTheBarrelY,y ; correction of Y
; sta ytraj+1
; lda ytraj+2
; sbc #0
; sta ytraj+2
ldy #100 ; ???
mva #1 tracerflag ; I do not know (I mean I think I know ;) )