From 0820124f9fccf250959fb2b7101ff041c1e5c4ac Mon Sep 17 00:00:00 2001 From: pkali Date: Sat, 28 May 2022 21:43:55 -0400 Subject: [PATCH] LimitForce added #70 --- ai.asm | 25 ++++++++----------- scorch.asm | 59 +++++++++++++++++++++++--------------------- scorch.xex | Bin 37845 -> 37844 bytes textproc.asm | 4 +-- variables.asm | 9 ++++--- weapons.asm | 66 +++++++++++++++++++++++++------------------------- 6 files changed, 82 insertions(+), 81 deletions(-) diff --git a/ai.asm b/ai.asm index 4486f9d..b6389ca 100644 --- a/ai.asm +++ b/ai.asm @@ -33,7 +33,7 @@ loop ArtificialIntelligence .proc ; ; A - skill of the TankNr ; returns shoot energy and angle in -; EnergyTable/L/H and AngleTable +; ForceTable/L/H and AngleTable ;---------------------------------------------- asl tax @@ -77,24 +77,19 @@ Shooter .proc lda PreviousAngle,x clc adc #5 - bmi leftQuadrant + bmi @+ cmp #90 - bcc continue + bcc @+ lda #(-90) - bne continue -leftQuadrant - - - -continue +@ sta NewAngle lda PreviousEnergyL,x - sta EnergyTableL,x + sta ForceTableL,x lda PreviousEnergyH,x - sta EnergyTableH,x - + sta ForceTableH,x jmp endo + firstShoot ; compare the x position with the middle of the screen lda xTanksTableL,x @@ -108,7 +103,6 @@ firstShoot and #$1F clc adc #5 - ;lda #45 sta NewAngle jmp forceNow @@ -128,11 +122,12 @@ forceNow endo ldx TankNr ;this is possibly not necessary + jsr RandomizeForce.LimitForce lda NewAngle sta PreviousAngle,x - lda EnergyTableL,x + lda ForceTableL,x sta PreviousEnergyL,x - lda EnergyTableH,x + lda ForceTableH,x sta PreviousEnergyH,x ; choose the best weapon diff --git a/scorch.asm b/scorch.asm index 371e832..ab3b9eb 100644 --- a/scorch.asm +++ b/scorch.asm @@ -252,9 +252,9 @@ skipzeroing lda #0 tax @ - sta previousAngle,x + sta singleRoundVars,x inx - cpx #(singleRoundVarsEnd-PreviousAngle) + cpx #(singleRoundVarsEnd-singleRoundVars) bne @- ldx #5 @@ -271,13 +271,13 @@ SettingEnergies ; anything in eXistenZ table means that this tank exist ; in the given round lda #<1000 - sta MaxEnergyTableL,x + sta MaxForceTableL,x lda #>1000 - sta MaxEnergyTableH,x + sta MaxForceTableH,x lda #<350 - sta EnergyTableL,x + sta ForceTableL,x lda #>350 - sta EnergyTableH,x + sta ForceTableH,x ;lda #(255-45) ;it does not look good when all tanks have @@ -505,9 +505,9 @@ B0 DEY BNE LP0 ror ROR L1 - STA MaxEnergyTableH,x + STA MaxForceTableH,x lda L1 - sta MaxEnergyTableL,x + sta MaxForceTableL,x dex bpl SeteXistenZ @@ -982,7 +982,7 @@ RandomizeAngle .proc ; .endp ;---------------------------------------------- RandomizeForce .proc -; routine returns in EnergyTable/L/H +; routine returns in ForceTable/L/H ; valid force of shooting for TankNr ; in X must be TankNr ; low and high randomize boundary passed as word value @@ -990,36 +990,41 @@ RandomizeForce .proc ; RandBoundaryHigh ;---------------------------------------------- - lda MaxEnergyTableL,x - sta temp - lda MaxEnergyTableH,x - sta temp+1 -GetRandomAgain lda RANDOM - ; gets values in range(256,765) sta temp2 - lda RANDOM ; :) + lda RANDOM and #%00000011 ;(0..1023) sta temp2+1 cpw RandBoundaryLow temp2 - bcs GetRandomAgain + bcs RandomizeForce cpw RandBoundaryHigh temp2 - bcc GetRandomAgain + bcc RandomizeForce - cpw temp temp2 - bcs EnergyInRange - - mwa temp temp2 - -EnergyInRange lda temp2 - sta EnergyTableL,x + sta ForceTableL,x lda temp2+1 - sta EnergyTableH,x - + sta ForceTableH,x + +;--------- +LimitForce +; in X must be TankNr +; cuts force to MaxForceTable + lda MaxForceTableH,x + cmp ForceTableH,x + bne @+ + lda MaxForceTableL,x + cmp ForceTableL,x +@ bcs @+ + + lda MaxForceTableL,x + sta ForceTableL,x + lda MaxForceTableH,x + sta ForceTableH,x +@ rts + .endp ;---------------------------------------------- diff --git a/scorch.xex b/scorch.xex index da88c9205993eadd28ed48bf9e56380534448276..4759a233f7ea5a576cdddd7101b2b25e12399d4d 100644 GIT binary patch delta 12338 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 delta 12340 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