; Yes yes, I know, very neet and orginized :-) ; Its easier for me to code this way, thats all ; Especially since its already Spehgetti code, ; Might as well make it look good. #config Scanner=4 #config Weapon=3 #config Armor=3 #config Engine=0 #def metersTillTurn #def turn ; Opcode/ Operand 1 Operand 2 Cycles Comment ;label Set turn -48 ; evade direction Mov AX 1 ; 1 KeepShift on Int I_KEEPSHIFT ; 2 !ScanForTarget Out P_Throttle 100 ; 4 Full speed ahead! :3 ; Medium scan, target lost Out P_ScanArc 64 ; 4 Full field of vision !ScanAgain In P_Scan AX ; 5 Scan for enemy Shr AX 14 ; 1 Divided by 16364 ; 0 means found ; 1 means not found Jeq AX ; 0 Jne AX ; 0 (Save one cycle over JMP) :1 ; Wide scan, target not Found Out P_Ofs_Turret 128 ; 4 Jeq !ScanAgain ; 0 Jne !ScanAgain ; 0 (Save one cycle over JMP) :0 ; Wide scan, target found Mov AX @3 ; 1 Get accuracy Add AX, 102 ; 1 100 = -2, 101 = -1 etc.. Jeq AX ; 0 Jne AX ; 0 (Save one cycle over JMP) :100 ; Wide scan accuracy -2 Out P_Ofs_Turret -52 ; 4 Rotate turret Jeq !MediumScan ; 0 Jne !MediumScan ; 0 (Save one cycle over JMP) :101 ; Wide scan accuracy -1 Out P_Ofs_Turret -26 ; 4 Rotate turret Jeq !MediumScan ; 0 Jne !MediumScan ; 0 (Save one cycle over JMP) :103 ; Wide scan accuracy 1 Out P_Ofs_Turret 26 ; 4 Rotate turret Jeq !MediumScan ; 0 Jne !MediumScan ; 0 (Save one cycle over JMP) :104 ; Wide scan accuracy 2 Out P_Ofs_Turret 52 ; 4 Rotate turret :102 ; Wide scan accuracy 0 !MediumScan :5 ; Small scan, target lost Out P_ScanArc 26 ; 4 Reduce scan arc In P_Scan AX ; 5 Scan for enemy Shr AX 14 ; 1 Divided by 16364 Add AX 2 ; 1 2 means found ; 3 means not found Jeq AX ; 0 Jne AX ; 0 (Save one cycle over JMP) :2 ; Medium scan, target found Mov AX @3 ; 1 Get accuracy Add AX, 202 ; 1 200 = -2, 201 = -1 etc.. Jeq AX ; 0 Jne AX ; 0 (Save one cycle over JMP) :200 ; Medium scan accuracy -2 Out P_Ofs_Turret -22 ; 4 Rotate turret Jeq !SmallScan ; 0 Jne !SmallScan ; 0 (Save one cycle over JMP) :201 ; Medium scan accuracy -1 Out P_Ofs_Turret -11 ; 4 Rotate turret Jeq !SmallScan ; 0 Jne !SmallScan ; 0 (Save one cycle over JMP) :203 ; Medium scan accuracy 1 Out P_Ofs_Turret 11 ; 4 Rotate turret Jeq !SmallScan ; 0 Jne !SmallScan ; 0 (Save one cycle over JMP) :204 ; Medium scan accuracy 2 Out P_Ofs_Turret 22 ; 4 Rotate turret :202 ; Medium scan accuracy 0 !SmallScan :11 Out P_ScanArc 11 ; 4 Reduce scan arc In P_Scan AX ; 5 Scan for enemy Shr AX 14 ; 1 Divided by 16364 Add AX 4 ; 1 4 means found ; 5 means not found Jeq AX ; 0 Jne AX ; 0 (Save one cycle over JMP) :4 ; Small scan, target found Mov AX @3 ; 1 Get accuracy Add AX, 302 ; 1 300 = -2, 301 = -1 etc.. Jeq AX ; 0 Jne AX ; 0 (Save one cycle over JMP) :300 ; Small scan accuracy -2 Out P_Ofs_Turret -8 ; 4 Rotate turret Jeq !TargetAquired ; 0 Jne !TargetAquired ; 0 (Save one cycle over JMP) :301 ; Small scan accuracy -1 Out P_Ofs_Turret -4 ; 4 Rotate turret Jeq !TargetAquired ; 0 Jne !TargetAquired ; 0 (Save one cycle over JMP) :303 ; Small scan accuracy 1 Out P_Ofs_Turret 4 ; 4 Rotate turret Jeq !TargetAquired ; 0 Jne !TargetAquired ; 0 (Save one cycle over JMP) :304 ; Small scan accuracy 2 Out P_Ofs_Turret 8 ; 4 Rotate turret :302 ; Small scan accuracy 0 !TargetAquired Out P_Throttle 80 ; 4 Make sure were moving Out P_ScanArc 2 ; 4 Reduce scanarc In P_Scan AX ; 5 Get target info Shr AX 14 ; 1 Divided by 16364 Add AX 10 ; 1 10 means found ; 11 means not found Jeq AX ; 0 Jne AX ; 0 (Save one cycle over JMP) :10 Mov AX @2 ; 1 Get turret offset Add AX Turn ; 1 Evade fire but... Out P_Steering AX ; 4 ...Follow that car! Mov AX @3 ; 1 Get accuracy Out P_Ofs_Turret AX ; 4 Turn toward target Cmp metersTillTurn meters ; 1 Time to turn? Jge !noTurn ; 0 Neg turn ; 1 Yes Set metersTillTurn meters ; 1 Number of meters until ; flip evade Add metersTillTurn 100 ; In 20 meters !noTurn ; No Cmp @7 15 ; 1 Is a slow or stopped target? Jle 500 ; If so, fire strait, ; if not... Mov BX @6 ; 1 Get heading Shr BX 3 ; 1 Divid by eight Add BX 500 ; 1 500-531 Jeq BX ; 0 Jne BX ; 0 (Save one cycle over JMP) :531 :515 :500 Mov AX 0 Jeq !GetHeat Jne !GetHeat :501 :514 Mov AX 1 Jeq !GetHeat Jne !GetHeat :502 :503 :512 :513 Mov AX 2 Jeq !GetHeat Jne !GetHeat :504 :505 :510 :511 Mov AX 3 Jeq !GetHeat Jne !GetHeat :506 :507 :508 :509 Mov AX 4 Jeq !GetHeat Jne !GetHeat :516 :517 :529 :530 Mov AX -1 Jeq !GetHeat Jne !GetHeat :518 :528 Mov AX -2 Jeq !GetHeat Jne !GetHeat :519 :520 :526 :527 Mov AX -3 Jeq !GetHeat Jne !GetHeat :521 :522 :523 :524 :525 Mov AX -4 !GetHeat In P_Heat BX ; 4 Get heat Shr BX 7 ; 1 Divid by 128 Add BX 20 ; 1 ; 20 = cold (0 - 127) ; 21 = warm (128 - 255) ; 22 = hot (256-511) Jeq BX ; 0 Jne BX ; 0 (Save one cycle over JMP) :20 OUT P_Overburn 1 ; 4 Cool enough to hit hard Out P_Fire AX ; 7 Attack OUT P_Overburn 0 ; 4 Turn it off Sar AX 1 ; 1 Narrow attack just incase Out P_Fire AX ; 7 Attack Jeq !TargetAquired ; 0 Jne !TargetAquired ; 0 (Save one cycle over JMP) :21 Xor DX 1 ; 1 Toggle DX Sar AX DX ; 1 Narrow attack every other ; Shot, encase of slow ; target Out P_Fire AX ; 7 Attack Jeq !TargetAquired ; 0 Jne !TargetAquired ; 0 (Save one cycle over JMP) :22 ; To hot to fire Jeq !TargetAquired ; 0 Jne !TargetAquired ; 0 (Save one cycle over JMP)