All AI tanks works but...

This commit is contained in:
Pecusx
2022-07-31 18:35:51 +02:00
parent 1945dd5e88
commit d7501b5c7c
4 changed files with 181 additions and 14 deletions
+175 -8
View File
@@ -57,11 +57,23 @@ AIRoutines
.word Shooter-1 ;Shooter .word Shooter-1 ;Shooter
.word Poolshark-1 ;Poolshark .word Poolshark-1 ;Poolshark
.word Tosser-1 ;Tosser .word Tosser-1 ;Tosser
.word Tosser-1 ;Chooser .word Chooser-1 ;Chooser
.word Tosser-1 ;Spoiler .word Spoiler-1 ;Spoiler
.word Cyborg-1 ;Cyborg .word Cyborg-1 ;Cyborg
.word Tosser-1 ;Unknown .word Unknown-1 ;Unknown
;----------------------------------------------
.proc Unknown
; random robotank (from Poolshark to Cyborg)
randomize 4 13
and #%11111110
tay
lda AIRoutines+1,y
pha
lda AIRoutines,y
pha
rts
.endp
;---------------------------------------------- ;----------------------------------------------
.proc Moron .proc Moron
jsr RandomizeAngle jsr RandomizeAngle
@@ -154,6 +166,7 @@ loop
.endp .endp
;---------------------------------------------- ;----------------------------------------------
.proc Poolshark .proc Poolshark
jsr UseBatteryOrFlag
; defensives ; defensives
jsr PoolsharkDefensives jsr PoolsharkDefensives
firstShoot firstShoot
@@ -213,8 +226,7 @@ AngleTable ; 16 bytes ;ba w $348b L$3350
.by 18,26,34,43,50,58,66,74 .by 18,26,34,43,50,58,66,74
.endp .endp
;---------------------------------------------- ;----------------------------------------------
.proc PoolsharkDefensives .proc UseBatteryOrFlag
; defensives
; if low energy ten use battery ; if low energy ten use battery
lda Energy,x lda Energy,x
cmp #30 cmp #30
@@ -238,6 +250,10 @@ NoBatteries
lda #ind_White_Flag_____ lda #ind_White_Flag_____
sta ActiveDefenceWeapon,x sta ActiveDefenceWeapon,x
EnoughEnergy EnoughEnergy
rts
.endp
;----------------------------------------------
.proc PoolsharkDefensives
; use best defensive :) ; use best defensive :)
; but not allways ; but not allways
randomize 1 3 randomize 1 3
@@ -268,6 +284,7 @@ DefensiveInUse
.endp .endp
;---------------------------------------------- ;----------------------------------------------
.proc Tosser .proc Tosser
jsr UseBatteryOrFlag
; use best defensive :) ; use best defensive :)
jsr TosserDefensives jsr TosserDefensives
; Toosser is like Poolshark but allways uses defensives ; Toosser is like Poolshark but allways uses defensives
@@ -301,23 +318,173 @@ NoUseDefensive
rts rts
.endp .endp
;---------------------------------------------- ;----------------------------------------------
.proc Cyborg .proc Chooser
; like cyborg but more randomizing force
jsr UseBatteryOrFlag
; use defensives like Tosser ; use defensives like Tosser
jsr TosserDefensives jsr TosserDefensives
; now select best target ; now select best target
jsr FindBestTarget1 jsr FindBestTarget3
sty TargetTankNr sty TargetTankNr
; aiming ; aiming
jsr TakeAim ; direction still in A (0 - left, >0 - right) jsr TakeAim ; direction still in A (0 - left, >0 - right)
lda #0
; choose the best weapon
lda TanksWeaponsTableL,x
sta temp
lda TanksWeaponsTableH,x
sta temp+1
ldy #ind_LeapFrog_______ ;the last offensive weapon to use
loop
dey
lda (temp),y
beq loop
tya
sta ActiveWeapon,x sta ActiveWeapon,x
; randomizing force +-100
sbw Force #100 RandBoundaryLow
bpl NotNegativeEnergy
mwa #1 RandBoundaryLow
NotNegativeEnergy
adw Force #100 RandBoundaryHigh
jsr RandomizeForce
lda ForceTableH,x
bne HighForce
; if Force lower than 256 - set weapon to Baby Missile (for security :) )
lda #ind_Baby_Missile___
sta ActiveWeapon,x
HighForce
rts
.endp
;----------------------------------------------
.proc Spoiler
; like cyborg but little randomizing force
jsr UseBatteryOrFlag
; use defensives like Tosser
jsr TosserDefensives
; now select best target
jsr FindBestTarget3
sty TargetTankNr
; aiming
jsr TakeAim ; direction still in A (0 - left, >0 - right)
; choose the best weapon
lda TanksWeaponsTableL,x
sta temp
lda TanksWeaponsTableH,x
sta temp+1
ldy #ind_LeapFrog_______ ;the last offensive weapon to use
loop
dey
lda (temp),y
beq loop
tya
sta ActiveWeapon,x
; randomizing force +-50
sbw Force #50 RandBoundaryLow
bpl NotNegativeEnergy
mwa #1 RandBoundaryLow
NotNegativeEnergy
adw Force #50 RandBoundaryHigh
jsr RandomizeForce
lda ForceTableH,x
bne HighForce
; if Force lower than 256 - set weapon to Baby Missile (for security :) )
lda #ind_Baby_Missile___
sta ActiveWeapon,x
HighForce
rts
.endp
;----------------------------------------------
.proc Cyborg
jsr UseBatteryOrFlag
; use defensives like Tosser
jsr TosserDefensives
; now select best target
jsr FindBestTarget3
sty TargetTankNr
; aiming
jsr TakeAim ; direction still in A (0 - left, >0 - right)
; choose the best weapon
lda TanksWeaponsTableL,x
sta temp
lda TanksWeaponsTableH,x
sta temp+1
ldy #ind_LeapFrog_______ ;the last offensive weapon to use
loop
dey
lda (temp),y
beq loop
tya
sta ActiveWeapon,x
lda Force lda Force
sta ForceTableL,x sta ForceTableL,x
lda Force+1 lda Force+1
sta ForceTableH,x sta ForceTableH,x
bne HighForce
; if Force lower than 256 - set weapon to Baby Missile (for security :) )
lda #ind_Baby_Missile___
sta ActiveWeapon,x
HighForce
rts rts
.endp .endp
;----------------------------------------------
.proc FindBestTarget3
; find target with lowest energy
; X - shooting tank number
; returns target tank number in Y and
; direcion of shoot in A (0 - left, >0 - right)
;----------------------------------------------
jsr MakeLowResDistances
lda #$ff
sta temp2 ; max possible energy
sta tempor2 ; direction of shoot
;ldx TankNr
ldy NumberOfPlayers
dey
loop01
cpy TankNr
beq skipThisPlayer
lda eXistenZ,y
beq skipThisPlayer
lda LowResDistances,x
cmp LowResDistances,y
bcs EnemyOnTheLeft
;enemy on the right
lda Energy,y
cmp temp2 ; lowest
bcs lowestIsLower
sta temp2
sty temp2+1 ; number of the closest tank
inc tempor2 ; set direction to right
bne lowestIsLower
EnemyOnTheLeft
lda Energy,y
cmp temp2 ; lowest
bcs lowestIsLower
sta temp2
sty temp2+1 ; number of the closest tank
lowestIsLower
skipThisPlayer
dey
bpl loop01
; now we have number of the farthest tank in temp2+1
; and direction (0 - left, >0 - right) in tempor2
; let's move them to registers
; in temp2 we have energy of target
ldy temp2+1
lda tempor2
rts
.endp
;---------------------------------------------- ;----------------------------------------------
.proc FindBestTarget2 .proc FindBestTarget2
; find farthest tank neighbour ; find farthest tank neighbour
+5 -5
View File
@@ -420,6 +420,8 @@ DoNotFinishTheRound
ldx tankNr ldx tankNr
lda TankStatusColoursTable,x lda TankStatusColoursTable,x
sta colpf2s ; set color of status line sta colpf2s ; set color of status line
jsr PutTankNameOnScreen
jsr DisplayStatus
lda SkillTable,x lda SkillTable,x
beq ManualShooting beq ManualShooting
@@ -428,9 +430,7 @@ RoboTanks
; robotanks shoot here ; robotanks shoot here
; TankNr still in X ; TankNr still in X
jsr ArtificialIntelligence jsr ArtificialIntelligence
jsr PutTankNameOnScreen ;pause 30
jsr DisplayStatus
pause 30
ldx TankNr ldx TankNr
jsr MoveBarrelToNewPosition jsr MoveBarrelToNewPosition
lda kbcode lda kbcode
@@ -476,7 +476,7 @@ StandardShoot
jsr DecreaseWeaponBeforeShoot jsr DecreaseWeaponBeforeShoot
jsr DisplayStatus jsr DisplayStatus
ldx TankNr ; ldx TankNr
dec Energy,x ; lower energy to eventually let tanks commit suicide dec Energy,x ; lower energy to eventually let tanks commit suicide
ShootNow ShootNow
@@ -1221,7 +1221,7 @@ MoveBarrel
mva #sfx_set_power_2 sfx_effect mva #sfx_set_power_2 sfx_effect
jsr DrawTankNr jsr DrawTankNr
jsr DisplayStatus.displayAngle jsr DisplayStatus.displayAngle
ldx TankNr ; ldx TankNr
mva #1 Erase mva #1 Erase
PAUSE 1 PAUSE 1
jsr DrawTankNr.BarrelChange jsr DrawTankNr.BarrelChange
BIN
View File
Binary file not shown.
+1 -1
View File
@@ -2094,7 +2094,7 @@ VerticallyUp
AngleDisplay AngleDisplay
mwa #textbuffer+40+23 displayposition mwa #textbuffer+40+23 displayposition
jsr displaybyte jsr displaybyte
ldx TankNr
rts rts
.endp .endp
;------------------------------------------------- ;-------------------------------------------------