From 992130f267a0961fce5720cf17049c946426dc89 Mon Sep 17 00:00:00 2001 From: pkali Date: Sun, 24 Jul 2022 09:19:03 -0400 Subject: [PATCH] WIP: barrels anew --- constants.asm | 112 ++++++++++++++++++++-------------------- grafproc.asm | 135 +++++++++++++++++++++++++----------------------- scorch.asm | 14 ++--- scorch.xex | Bin 41616 -> 41425 bytes variables.asm | 19 ++++--- weapons.asm | 140 +++++++++++++++++++++++++++----------------------- 6 files changed, 223 insertions(+), 197 deletions(-) diff --git a/constants.asm b/constants.asm index 8b12e22..192eb5e 100644 --- a/constants.asm +++ b/constants.asm @@ -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 ;------------------------------------------------- diff --git a/grafproc.asm b/grafproc.asm index 4a7d21b..c21a1bc 100644 --- a/grafproc.asm +++ b/grafproc.asm @@ -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 diff --git a/scorch.asm b/scorch.asm index cc69038..53afad3 100644 --- a/scorch.asm +++ b/scorch.asm @@ -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 diff --git a/scorch.xex b/scorch.xex index a752062e4e580a33907b213ddfcc92b36b05cfdb..129c7e05cad58ab19db180f7c3fa689ead15679d 100644 GIT binary patch delta 15952 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 Db|^b- delta 16107 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

=k(a^a-k4&}9LjV$n>YupNWyLEq@hGr>xK{it z?_xpT}eW%KOEm6H?ltPN|^nQ{sLt{OT`Y=S^Qba{S91RZf!` zS0dPPhA(RHVB|cWa_yFc-oJviiKF_s*M)1PCTMcd^H_d5LBrZa=c~--yh7z&!mBLQ zpK$z!1OgkxUg8NX5i^TM;Wh0!u&$${qoRp&rBCVm**0xIdr>M94W4bvYczbdO?ic$ zh6#IxDzDPhf281wm(ZlZM8xx6qxOsqR#4>iP~NY(xg zE}@K$p19fLvR}7RE6kXR0%|E`6j$9P0oUIV;&~c*iu$MMmrv2~7>M%z^Hd!MY2JT& z5W+~1=>1I;m%|Hb6>i5r_E@rW8?QAa6(q;jv4-LrTv{uR2A9@=Ln_Ra3LeSKaAkDQn7El~t5|NawHFBo*xea>C&bgLvIyoR-sLu(;*TDnYNtag;kSUgG-k_$ z(h2&1XQ@@%g7fnhsWi8WFBM}Owq$fyRU-{rRYyxKUo&hRzXd#caFv)!RXZ8(KdMtI zvUSGRX}Z)p2t9^ZWL47qoixi!^LNp#tu+7l)S0!7=KE;Yi!`6mtnD`?L-Svz`L#4ZK=Wmq-++k8@7bm^ zQ0}gd^;J_}9X8oB)dncFlFq262+rblC!JA;*Aghm*`uKj9NGTvQ10-D*@dk;{7SYT z2E~N;h3q|3*Bn#F!d_(=s?7~sCNK0`qOQXyejpme&mQWi9QH9S`F0|Ryd{^@)z@nI zt5l2mCtouEoP85eszZe7GL239xyE#b{aeMfs_#U)JNXX3#e7kp^>Rbc#Pb1+Sqc2nBaW zhY|wu?lCyLM~CVH!%^E79PjUp_Tg$$iXWQ??k@E&!X6XCO)%^aA<=Dt#R@IMxp5;d zrZ*6E04v{$@*=G)uef6CTxJG-dV${z;V6Zl4dEz-Uk-^}2_i*5u-{-^=fKG>G$vpX zZv-g8iiD9zi|jJ)MsSY`e1{!wEOs96x~GRad!oAB)I!|Y^0L#?TV>(dO~}a241Pe~ z|9}KW+nPQgKYc*(o004B%c!lHnVGm;oEs;k`R&a`Hc*|@kOO*=8AvMmODun6ZL*Vb zeBitKG{1Fyzhb7=$*f~Wrq+YP&Csg}dc`hk&FCAEi#p_ZFtdB>1oJKRC7>W$FS%w8-| z376OM-nBlb-{3ndj}N|6#Ao;J{co+m!|aUxzkFhPKGD6OsNRpc?_=uy7<)bj{o@_E zF~L(X+1Xp`=P$jiqkCG5`M=0~#k#ljKzp0$YxU<6^+NV1ZipJ_yxUpqAyUhiXX6t` zU32r?r8%3t)$jc6RMZeIW#O{i4dNf){^0EJUuEWRsX6$UuCtSVefzqCosBJDhQIH= z$}+?{=C%hP&VSrR_q^Qv-bbel+?2Ej*H-Q%)iryMef(Y0Eejm$HtgKp{AJ=znd^5o zpZFqSz{Fb?heVIf$}8p-^wk?Teohz^z&lxXM5zcL;LLSE`KvB%1VAi zJn2KdfAwP>?Qh8T z4`lm-T6;&GJyYIv*!AXo5#D^&NB$D^ycpGRSU4toyS(F_2y+W@$3=7bz~f?EmEm}a z<-BZUE=rqRTHA0abRlpmVABm=hLv<|;hxj)(9jZ2j|4`lC@!^+#byo1CpFbS@)X%?pu)}|$!{6XM z%(viT>WuJ!z^{B^e@nyR%;b&WthEuLIh?t&1%FaYa@hB+|D;(xfB^Pl$(|~QQo|zw zJ`|2mxb8X#W&g1j9Pk3xc$ZobFOO#s6yK_~FRz7CT2sy+G)O6DxjSY1blHhUu@8Rh zZ+OiYCGkgE@QjoAx6%H5skY&WZ@SciZ;SRlRQsMR`O>tPyS498k{Aby@yImbF-d}A zI0-#S@L46_kAB9(CgmD@{Uo`cZ<@w4MRIT*bw?LV>R@MAn=E&0mr)xv0pF=ZxU0F^ z9E_8~-|%k+A=Kf6{iFuy2_4}>?5nk9#|ew%P6)@LF{>0DDuFxnFmUv@{@NzP9{#_i zQ1XDxKnC`h9k(HN|ZI zSXS128 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 ;) )