From 9eb0f8adffd85731eb365190f47b7bcb13e68ef9 Mon Sep 17 00:00:00 2001 From: Pecusx Date: Mon, 1 Aug 2022 21:54:41 +0200 Subject: [PATCH] Faster AI (and fixed) Correcion for barrel wider tjan tank (2 pixels) --- ai.asm | 56 ++++++++++++++++++++++++++++----------------------- grafproc.asm | 7 ++++--- scorch.xex | Bin 41532 -> 41575 bytes 3 files changed, 35 insertions(+), 28 deletions(-) diff --git a/ai.asm b/ai.asm index 362ff9d..12e4c19 100644 --- a/ai.asm +++ b/ai.asm @@ -605,7 +605,13 @@ skipThisPlayer ; in the appropriate variables (Angle and Force) ;---------------------------------------------- ; set initial Angle and Force values - mva #90 NewAngle + ; wind correction 90+(wind/8) + mwa Wind temp2 + :7 lsrw temp2 + clc + lda #90 + adc temp2 + sta NewAngle lda OptionsTable+2 ; selected gravity asl tay @@ -653,24 +659,24 @@ GroundHitInFirstLoopR lda xTanksTableL,y cmp XHit @ - bcc HitOnRightSideOfTargetR + bcs HitOnRightSideOfTargetR ; continue targeting - sec + clc lda NewAngle - sbc #5 ; 5 deg to right - cmp #15 - beq EndOfFirstLoopR + adc #5 ; 5 deg to right + cmp #(180-20) + bcs EndOfFirstLoopR ; if angle 180-20 or higher sta NewAngle jmp AimingRight NoHitInFirstLoopR ; Angle 5 deg to left and end loop - clc + sec lda NewAngle - adc #5 + sbc #5 sta NewAngle HitOnRightSideOfTargetR EndOfFirstLoopR - mva #5 temp2 ; set counter (5 turns) + mva #5 modify ; set counter (5 turns) SecondLoopR ; make test Shoot (Flight) jsr SetStartAndFlight @@ -694,10 +700,10 @@ GroundHitInSecondLoopR lda xTanksTableL,y cmp XHit @ - bcs HitOnLeftSideOfTargetR + bcc HitOnLeftSideOfTargetR ; continue targeting - inc NewAngle ; 1 deg to left - dec temp2 ; max 5 turns + dec NewAngle ; 1 deg to left + dec modify ; max 5 turns beq EndOfSecondLoopR jmp SecondLoopR HitOnLeftSideOfTargetR @@ -705,7 +711,7 @@ HitOnLeftSideOfTargetR sbw Force #5 NoHitInSecondLoopR ; Angle 1 deg to right and end loop - dec NewAngle + inc NewAngle EndOfSecondLoopR rts @@ -732,24 +738,24 @@ GroundHitInFirstLoopL lda xTanksTableL,y cmp XHit @ - bcs HitOnLeftSideOfTargetL + bcc HitOnLeftSideOfTargetL ; continue targeting - clc + sec lda NewAngle - adc #5 ; 5 deg to left - cmp #(180-15) - beq EndOfFirstLoopL + sbc #5 ; 5 deg to left + cmp #21 + bcc EndOfFirstLoopL ; if angle 180-20 or higher sta NewAngle jmp AimingLeft NoHitInFirstLoopL ; Angle 5 deg to right and end loop - sec + clc lda NewAngle - sbc #5 + adc #5 sta NewAngle HitOnLeftSideOfTargetL EndOfFirstLoopL - mva #5 temp2 ; set counter (5 turns) + mva #5 modify ; set counter (5 turns) SecondLoopL ; make test Shoot (Flight) jsr SetStartAndFlight @@ -773,10 +779,10 @@ GroundHitInSecondLoopL lda xTanksTableL,y cmp XHit @ - bcc HitOnRightSideOfTargetL + bcs HitOnRightSideOfTargetL ; continue targeting - dec NewAngle ; 1 deg to right - dec temp2 ; max 5 turns + inc NewAngle ; 1 deg to right + dec modify ; max 5 turns beq EndOfSecondLoopL jmp SecondLoopL HitOnRightSideOfTargetL @@ -784,7 +790,7 @@ HitOnRightSideOfTargetL sbw Force #5 NoHitInSecondLoopL ; Angle 1 deg to left and end loop - inc NewAngle + dec NewAngle EndOfSecondLoopL rts diff --git a/grafproc.asm b/grafproc.asm index 065c9c7..ae581e2 100644 --- a/grafproc.asm +++ b/grafproc.asm @@ -1028,9 +1028,10 @@ FallingLeft 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 + bne NotLeftEdge + lda XtanksTableL,x + cmp #2 ; 2 pixels correction due to a barrel wider than tank beq EndLeftFall NotLeftEdge ; tank is falling left - modify coorinates @@ -1055,7 +1056,7 @@ FallingRight lda XtanksTableH,x adc #0 sta temp+1 - cpw temp #screenwidth + cpw temp #screenwidth-2 ; 2 pixels correction due to a barrel wider than tank beq EndRightFall ; tank is falling right - modify coorinates sec diff --git a/scorch.xex b/scorch.xex index 248fca42671cf76a11a53f6e2c14ff1ee4df1ab3..39daa27469e27b914f79a469d4e13ccf01563ebd 100644 GIT binary patch delta 14636 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 WKQHgpI|j$Zos&9}ox@Ap82%3&d=0Vy delta 14628 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