#config scanner=4 #config weapon=3 #config armor=1 #config engine=1 #config heatsinks=3 #config shield=0 #def evasionState MOV evasionState, 100 MOV AX 1 INT I_KEEPSHIFT CALL !doEvasion !scanArc64 OUT P_SCANARC 64 !rescan64 OUT P_THROTTLE 100 IN P_SCAN AX MOV BX @3 ADD BX 6402 JNE BX JEQ BX :6402 CMP AX MAXINT JNE !scanArc16 OUT P_OFS_TURRET 128 CALL !doEvasion JEQ !rescan64 :6400 ; -2 OUT P_OFS_TURRET -52 JNE !scanArc8 JEQ !scanArc8 :6404 ; 2 OUT P_OFS_TURRET 52 JNE !scanArc8 JEQ !scanArc8 :6401 ; -1 OUT P_OFS_TURRET -32 JNE !scanArc16 JEQ !scanArc16 :6403 ; 1 OUT P_OFS_TURRET 32 JNE !scanArc16 JEQ !scanArc16 !scanArc16 OUT P_SCANARC 16 MOV CX 100 !rescan16 IN P_SCAN AX MOV BX @3 ADD BX 1602 JNE BX JEQ BX :1602 CMP AX MAXINT JEQ !scanArc64 JNE !scanArc4 :1600 ; -2 OUT P_OFS_TURRET -13 JNE !scanArc4 JEQ !scanArc4 :1604 ; 2 OUT P_OFS_TURRET 13 JNE !scanArc4 JEQ !scanArc4 :1601 ; -1 OUT P_OFS_TURRET -8 JNE !scanArc4 JEQ !scanArc4 :1603 ; 1 OUT P_OFS_TURRET 8 JNE !scanArc4 JEQ !scanArc4 !scanArc8 OUT P_SCANARC 8 MOV CX 100 !rescan8 IN P_SCAN AX MOV BX @3 ADD BX 802 JNE BX JEQ BX :802 CMP AX MAXINT JEQ !scanArc16 JNE !scanArc4 :800 ; -2 OUT P_OFS_TURRET -7 JNE !scanArc4 JEQ !scanArc4 :804 ; 2 OUT P_OFS_TURRET 7 JNE !scanArc4 JEQ !scanArc4 :801 ; -1 OUT P_OFS_TURRET -4 JNE !scanArc4 JEQ !scanArc4 :803 ; 1 OUT P_OFS_TURRET 4 JNE !scanArc4 JEQ !scanArc4 !scanArc4 OUT P_SCANARC 4 !rescan4 OUT P_THROTTLE CX !justrescan4 CALL !doEvasion IN P_SCAN AX IN P_HEAT DX MOV BX @3 ADD BX 402 JNE BX JEQ BX :402 CMP AX MAXINT JEQ !scanArc16 OUT P_FIRE 0 CMP DX 150 JGR !justRescan4 MOV BX 1 ADD AX 50 CMP AX 500 JGR !justrescan4 MOV CX -75 !fireAgain OUT P_FIRE BX OUT P_FIRE 0 NEG BX ADD AX 40 CMP AX 250 JLE !fireAgain OUT P_SHIELDS 0 JGR !justrescan4 :400 ; -2 OUT P_OFS_TURRET -3 CMP DX 230 JGR !rescan4 OUT P_FIRE -4 JNE !rescan4 JEQ !rescan4 :404 ; 2 OUT P_OFS_TURRET 3 CMP DX 230 JGR !rescan4 OUT P_FIRE 4 JNE !rescan4 JEQ !rescan4 :401 ; -1 OUT P_OFS_TURRET -1 CMP DX 230 JGR !rescan4 OUT P_FIRE -2 JNE !rescan4 JEQ !rescan4 :403 ; 1 OUT P_OFS_TURRET 1 CMP DX 130 JGR !rescan4 OUT P_FIRE 2 JNE !rescan4 JEQ !rescan4 #def x #def y !doEvasion JNE evasionState JEQ evasionState :100 ; find closest edge INT I_LOCATE MOV x EX SUB x 500 MOV y FX SUB y 500 CMP x 0 JGR !xOkay NEG x !xOkay CMP Y 0 JGR !yOkay NEG y !yOkay CMP x y JGE !horizontalEdge MOV evasionState 200 IN EX P_COMPASS RET