From 7bd71053742e0b7ae74d36a44b640839e5d0e7f7 Mon Sep 17 00:00:00 2001 From: Pecusx Date: Sun, 3 Jul 2022 15:16:58 +0200 Subject: [PATCH] AI uses defensives --- ai.asm | 76 ++++++++++++++++++++++++++++++++++++++++++++------ constants.asm | 16 +++++++++++ scorch.asm | 4 +++ scorch.xex | Bin 40287 -> 40425 bytes 4 files changed, 87 insertions(+), 9 deletions(-) diff --git a/ai.asm b/ai.asm index 74db4ea..d3549c7 100644 --- a/ai.asm +++ b/ai.asm @@ -150,7 +150,47 @@ loop .endp ;---------------------------------------------- Poolshark .proc - + ; defensives + ldx TankNr + ; address of weapons table (for future use) + lda TanksWeaponsTableL,x + sta temp + lda TanksWeaponsTableH,x + sta temp+1 + ; if low energy ten use battery + lda Energy,x + cmp #30 + bcs EnoughEnergy + ; lower than 30 units - check battery + ldy #ind_Battery________ + lda (temp),y + beq NoBatteries + ; we have batteries - use one + clc + sbc #1 + sta (temp),y + lda #99 + sta Energy,x +NoBatteries +EnoughEnergy + ; use best defensive :) + ; first check check if any is in use + lda ActiveDefenceWeapon,x + bne DefensiveInUse + ldy #64 ;the last defensive weapon +@ + dey + cpy #ind_Battery________ ;first defensive weapon (White Flag nad Battery - never use) + beq NoUseDefensive + lda (temp),y + beq @- + tya + ; activate defensive weapon + sta ActiveDefenceWeapon,x + lda DefensiveEnergy,y + sta ShieldEnergy,x +NoUseDefensive +DefensiveInUse firstShoot ;find nearest tank neighbour jsr MakeLowResDistances @@ -321,27 +361,45 @@ SorryNoPurchase ;---------------------------------------------- ShooterPurchase .proc - mva #4 tempXroller; number of purchases to perform - + ; first try to buy defensives + mva #2 tempXroller; number of offensive purchases to perform ldx TankNr -loop +@ + randomize 49 55 + jsr TryToPurchaseOnePiece + dec tempXroller + bne @- + + ; and now offensives + mva #4 tempXroller; number of offensive purchases to perform + ldx TankNr +@ randomize 1 14 jsr TryToPurchaseOnePiece dec tempXroller - bne loop + bne @- rts .endp ;---------------------------------------------- PoolsharkPurchase .proc - mva #8 tempXroller; number of purchases to perform - + ; first try to buy defensives + mva #3 tempXroller; number of offensive purchases to perform ldx TankNr -loop +@ + randomize 49 61 + jsr TryToPurchaseOnePiece + dec tempXroller + bne @- + + ; and now offensives + mva #8 tempXroller; number of purchases to perform + ldx TankNr +@ randomize 1 30 jsr TryToPurchaseOnePiece dec tempXroller - bne loop + bne @- rts .endp diff --git a/constants.asm b/constants.asm index 98d315e..d016510 100644 --- a/constants.asm +++ b/constants.asm @@ -542,6 +542,22 @@ PurchaseMeTable ;weapons good to be purchased by the robot dta 0 ;"----------------" ; 45 dta 0 ;"----------------" ; 46 dta 0 ;"----------------" ; 47 + dta 0 ;"White Flag " ; 48 + dta 1 ;"Battery " ; 49 + dta 0 ;"Bal Guidance " ; 50 + dta 0 ;"Horz Guidance " ; 51 + dta 0 ;"Vert Guidance " ; 52 + dta 0 ;"Lazy Boy " ; 53 + dta 1 ;"Parachute " ; 54 + dta 1 ;"Strong Parachute" ; 55 + dta 1 ;"Mag Deflector " ; 56 + dta 1 ;"Shield " ; 57 + dta 1 ;"Force Shield " ; 58 + dta 1 ;"Heavy Shield " ; 59 + dta 0 ;"Super Mag " ; 60 + dta 1 ;"Auto Defense " ; 61 + dta 0 ;"Fuel Tank " ; 62 + dta 0 ;"Nuclear Winter " ; 63 ;------------------------------------------------- diff --git a/scorch.asm b/scorch.asm index e4c6429..c8cf91b 100644 --- a/scorch.asm +++ b/scorch.asm @@ -311,12 +311,16 @@ SettingEnergies jsr SetMainScreen jsr ColorsOfSprites + lda #0 + sta colpf2s ; status line "off" + sta colpf1s jsr drawmountains ;draw them jsr drawtanks ;finally draw tanks mva #0 TankSequencePointer ;---------round screen is ready--------- + mva #TextForegroundColor colpf1s ; status line "on" rts .endp diff --git a/scorch.xex b/scorch.xex index 8fa205c9931525cd22db3f5e404a7bbbffb8052d..e0eca409da9d648926f9224b416754ca8cdc6114 100644 GIT binary patch delta 14035 zcmbVz31AdO_V*mQ3CVCeAdyC7H7i0`IYtnHl_P;BoZ`XZD2EJ?a0n_2bV$-%N#jg9 z99_*Y*+7SMNM|Pygt*Rvx?mL-h6B5_TeU0s3oFZq7eGf4n(|NDIb(%tor zdiAR6)jNv6y>4mxoyEUqsAaKqbnVcO%rjO^WX?OaRX+V+OyzU*+01B@m}j0E2?%&^?@alxPSNn?wxe{ zb(ddyq(ZU>4oVySlJ}q#*e`9Yki7fp%crkNZbpv-?9(?ScTWdietaW>^y6z3iQWHe z)dVWM*4t_{uN1Pfe;wEIlpGd~$xwR;MH1UGPK|*8s;R=e%6IwV0R3udGzUWTh`zw` zHA!9QeM|DbCwb3H>Sgb@l4|u{lhg&?FD2FNZI+lzlf13yqaK4{COpq*&oiID$Sl~v z+&>Xrov{d~EzEN-7$fEj)kJ(cOHBDwjq$!Gh0JyJwkxMBetV=rkE-WvSDo5wpMB#e zlJ^tIsfp6r#gf|wZla|2hSbdK%h}x%$_fK}B)*^`@Rp=o*^KefY>XV3$e~XtGSrtj zxPf^nor%h3Hm=m-KM3~G*a;?O1sC3un0b#KEPxz}kGba3`jAjMKIY28Jee7kQQ4K~F=YjNy)opb zN!I4cAuIFY3rYd+Ej4W^2w>D!rt_S}g0h0IcT4&=ikC0wU<>_YM9{a;jg-WxCi}AN zZp3Z1yArnP-_dtyU&HTjq4PhhJ)sUmbLXW{H09i_-u7){p;CAjoTISj3fV!AV&-

9RvRSYk-;#EumlfCpeu*Obr9cHm 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 UKRRlK^s3~U(f#OB;Y#xV1@ByA7ytkO delta 13951 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μQfzY0sT z3dI*3!8?%}!bFUi$dI_&@3>i+hjwZmPFynS(KD2FNHu?0+3WMcD_{G3Fntw2d;70H zX4(7grcYw|eP5iv^owQef@M!_-0b?}Zr`Dcm(90Kn7w9ww!3zJ(`n-kWA9$}g0$yv zUq&R{zG&H2T7CTNzv2@Y+_%*E%)0fP_*V}!{_VqNL!@=|ohh>)%ijK{10Q_*uPf$= znB;pNd~s*Zd&f`z%QSky#vOY;`*}>t!nAeyv~DZ=*%taq2tM