!init #config scanner= 3 #config weapon= 3 #config armor= 4 #config engine= 0 #config heatsinks= 2 #def wpc #def ang #def turn ;how much to turn #def rh ;relative heading #def ts ;target speed #def o ;pos/neg offset flag #def off ;firing offset out 11, 100 ;full throttle. out 22, 8 ;lay mine, trigger 8. out 17, 64 ;128 degree scan arc. mov DX, 64 mov AX, 1 mov turn, 7 int 3 ;keepshift on. out 22, 8 ;lay mine, trigger 8. jmp !steer !path cmp @9, 250 ;Have we travelled 250 metres? jgr !steer ;if yes, steer. out 14, turn ;turn int 12 ;collisions? cmp FX, 0 jgr !crash ;if yes, respond to crash. jmp !scan !crash int 13 ;reset collision count. !steer int 19 ;clear meters count. jmp !checkpos ;steer. !scan out 11, 100 in 7, BX ;scan cmp BX, 1500 ;anyone in sight? jge !nonefound ;adjust scan arc to suit. jls !arcmodf ;modify arc & fire. !nonefound cmp DX, 64 ;Are we at maximum scan width already? je !flip ;if yes, flip turret. shl DX, 1 ;else, double DX and out 17, DX ;set new scans to DX width. jmp !path ;path !flip out 12, 125 ;turn turret 125 degrees. jmp !path ;path !arcmodf cmp DX, 2 ;is scan angle 2 degrees? jle !fire ;if yes, fire. Else: shr DX, 1 ;halve DX out 17, DX ;set scans to DX. cmp @3, 0 ;is enemy in centre? jgr !accright ;if right, respond jls !accleft ;if left, respond. shr DX, 1 out 17, DX ;quarter scan arc jmp !fast ;check if target is fast !accright out 12, DX ;turn radar right by scanarc. cmp @3, 2 ;is it out by +2? jls !fast ;if less, fast out 12, DX ;turn radar right by 200% scanarc. jmp !fast ;check if target is fast !accleft mov BX, DX ;set BX=scanarc neg BX ;and negate BX out 12, BX ;turn radar left by scanarc. cmp @3, -2 ;is it out by -2? jgr !fast ;if more, fast. out 12, BX ;turn radar left by 200% scanarc. jmp !fast ;check if target is fast !fast cmp @13, 768 ;is enemy moving very fast? jgr !fire ;if yes, fire jmp !scan ;else, scan. !fire out 12, @3 ;correct turret. in 2, BX ;check heat. cmp BX, 200 ;too hot? jgr !lock ;if yes, lock. Else: cmp @7, 0 ;Is target stationary? je !statfire ;if yes, fire at stationary target. Else: mov ts, @13 ;target speed mov rh, @6 ;relative heading cmp ts, 0 jge !ps neg ts add rh, 128 and rh, 255 !ps shr ts, 6 shl ts, 7 shr rh, 1 mov off, 1028 add off, ts add off, rh err off jmp !fireadj !statfire mov AX, 1 ; int 4 ;Overburn= on. out 15, 0 ;fire out 15, 0 ;fire out 15, 0 ;fire out 15, 0 ;fire mov AX, 0 ; int 4 ;Overburn = off. jmp !lock ;lock. !lock out 14, turn ;turn in 7, BX ;scan out 12, @3 ;adjust turret jmp !scan ;and scan. !checkpos mov wpc, 0 int 2 ;get x and y co-ordinates. cmp ex, 500 jls !wwall ;west side jge !ewall ;east side !wwall cmp fx, 500 jle !wwalln ;northwest jgr !wwalls ;southwest !wwalln cmp ex, fx ;closer to west or north wall? jle !wnq ;closer to west jgr !nwq ;closer to north !wwalls sub fx, 1000 neg fx ;distance rather than co-ord. cmp ex, fx ;closer to west or south wall? jle !wsq ;closer to west jgr !swq ;closer to south !ewall cmp fx, 500 jle !ewalln ;northeast jgr !ewalls ;southeast !ewalln sub ex, 1000 neg ex ;distance rather than co-ord. cmp ex, fx ;closer to east or north wall? jle !enq ;closer to east jgr !neq ;closer to north !ewalls cmp ex, fx ;closer to east or south wall? jge !esq ;closer to east jls !seq ;closer to south !wnq mov ang, 112 ;desired heading sub ang, @1 ;difference out 14, ang ;turn to desired heading neg turn jmp !scan !nwq mov ang, 80 ;desired heading sub ang, @1 ;difference out 14, ang ;turn to desired heading neg turn jmp !scan !wsq mov ang, 16 ;desired heading sub ang, @1 ;difference out 14, ang ;turn to desired heading neg turn jmp !scan !swq mov ang, 48 ;desired heading sub ang, @1 ;difference out 14, ang ;turn to desired heading neg turn jmp !scan !enq mov ang, 144 ;desired heading sub ang, @1 ;difference out 14, ang ;turn to desired heading neg turn jmp !scan !neq mov ang, 176 ;desired heading sub ang, @1 ;difference out 14, ang ;turn to desired heading neg turn jmp !scan !esq mov ang, 240 ;desired heading sub ang, @1 ;difference out 14, ang ;turn to desired heading neg turn jmp !scan !seq mov ang, 208 ;desired heading sub ang, @1 ;difference out 14, ang ;turn to desired heading neg turn jmp !scan !fireadj ;adjusted firing routine. out 12, [off] out 15, 0 ;fire w/ new angle. out 15, 0 ;fire w/ new angle. cmp @13, 500 ;enemy speed? jgr !lock ; out 15, 0 ;fire w/ new angle. out 15, 0 jmp !lock
0 comments:
Post a Comment