;Robot's name : NovaBot ;Author : (c) Georg Schnabel (GreatGeorge) ;Author's Country : Austria ;Author's E-mail : georg.schnabel@mycity.at ;Date of completion : 5/28/2001 (MM/TT/YY) ;Class : Heavy Weight ;Tournament : Standard ;Version : v1.0 (Typ A) ; ;Comment: ;a new generation sniper, the firing routines are heavily ;optimized. In my point of view this is the best sniper bot ;ever written for AT-Robots. See him blasting his opponents ;away and don't cry :-) ;*************************************************************** #msg Still alive? ; ************************************** ; ; ROBOT CONFIGURATION ; ; ************************************** ; #config scanner=3 #config weapon=4 #config heatsinks=2 #config mines=0 #config armor=2 #config engine=1 jmp !SETUP ; ************************************** ; ; TARGET PREDICTION TABLE (TPT) ; ; ************************************** ; ; (TPT-const 2600) *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 257, 257, 257 *257, 257, 257, 257 *257, 257, 257, 257 *257, 257, 257, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 255, 255, 255 *255, 255, 255, 255 *255, 255, 255, 255 *255, 255, 255, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 257, 257 *257, 257, 257, 257 *257, 257, 257, 257 *257, 257, 257, 257 *257, 257, 257, 257 *257, 257, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 256, 255, 255 *255, 255, 255, 255 *255, 255, 255, 255 *255, 255, 255, 255 *255, 255, 255, 255 *255, 255, 256, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 257, 257, 257 *257, 257, 257, 258 *258, 258, 258, 258 *258, 258, 258, 258 *258, 257, 257, 257 *257, 257, 257, 256 *256, 256, 256, 256 *256, 256, 256, 256 *256, 255, 255, 255 *255, 255, 255, 254 *254, 254, 254, 254 *254, 254, 254, 254 *254, 255, 255, 255 *255, 255, 255, 256 *256, 256, 256, 256 *256, 256, 256, 256 *257, 257, 257, 257 *258, 258, 258, 258 *258, 258, 258, 258 *258, 258, 258, 258 *258, 258, 258, 258 *257, 257, 257, 257 *256, 256, 256, 256 *256, 256, 256, 256 *255, 255, 255, 255 *254, 254, 254, 254 *254, 254, 254, 254 *254, 254, 254, 254 *254, 254, 254, 254 *255, 255, 255, 255 *256, 256, 256, 256 *256, 256, 256, 257 *257, 257, 257, 258 *258, 258, 258, 258 *259, 259, 259, 259 *259, 259, 259, 259 *258, 258, 258, 258 *258, 257, 257, 257 *257, 256, 256, 256 *256, 256, 256, 255 *255, 255, 255, 254 *254, 254, 254, 254 *253, 253, 253, 253 *253, 253, 253, 253 *254, 254, 254, 254 *254, 255, 255, 255 *255, 256, 256, 256 *256, 256, 256, 257 *257, 257, 258, 258 *258, 259, 259, 259 *259, 259, 259, 259 *259, 259, 259, 259 *259, 259, 259, 258 *258, 258, 257, 257 *257, 256, 256, 256 *256, 256, 256, 255 *255, 255, 254, 254 *254, 253, 253, 253 *253, 253, 253, 253 *253, 253, 253, 253 *253, 253, 253, 254 *254, 254, 255, 255 *255, 256, 256, 256 *256, 256, 257, 257 *257, 258, 258, 258 *259, 259, 259, 259 *260, 260, 260, 260 *260, 260, 260, 260 *259, 259, 259, 259 *258, 258, 258, 257 *257, 257, 256, 256 *256, 256, 255, 255 *255, 254, 254, 254 *253, 253, 253, 253 *252, 252, 252, 252 *252, 252, 252, 252 *253, 253, 253, 253 *254, 254, 254, 255 *255, 255, 256, 256 *256, 256, 257, 257 *258, 258, 258, 259 *259, 259, 260, 260 *260, 260, 260, 260 *260, 260, 260, 260 *260, 260, 259, 259 *259, 258, 258, 258 *257, 257, 256, 256 *256, 256, 255, 255 *254, 254, 254, 253 *253, 253, 252, 252 *252, 252, 252, 252 *252, 252, 252, 252 *252, 252, 253, 253 *253, 254, 254, 254 *255, 255, 256, 256 *256, 256, 257, 257 *258, 258, 259, 259 *259, 260, 260, 260 *260, 261, 261, 261 *261, 261, 261, 260 *260, 260, 260, 259 *259, 259, 258, 258 *257, 257, 256, 256 *256, 256, 255, 255 *254, 254, 253, 253 *253, 252, 252, 252 *252, 251, 251, 251 *251, 251, 251, 252 *252, 252, 252, 253 *253, 253, 254, 254 *255, 255, 256, 256 *256, 256, 257, 257 *258, 258, 259, 259 *260, 260, 260, 261 *261, 261, 261, 261 *261, 261, 261, 261 *261, 260, 260, 260 *259, 259, 258, 258 *257, 257, 256, 256 *256, 256, 255, 255 *254, 254, 253, 253 *252, 252, 252, 251 *251, 251, 251, 251 *251, 251, 251, 251 *251, 252, 252, 252 *253, 253, 254, 254 *255, 255, 256, 256 *256, 256, 257, 258 *258, 259, 259, 260 *260, 261, 261, 261 *261, 262, 262, 262 *262, 262, 262, 261 *261, 261, 261, 260 *260, 259, 259, 258 *258, 257, 256, 256 *256, 256, 255, 254 *254, 253, 253, 252 *252, 251, 251, 251 *251, 250, 250, 250 *250, 250, 250, 251 *251, 251, 251, 252 *252, 253, 253, 254 *254, 255, 256, 256 *256, 256, 257, 258 *258, 259, 260, 260 *261, 261, 261, 262 *262, 262, 262, 262 *262, 262, 262, 262 *262, 261, 261, 261 *260, 260, 259, 258 *258, 257, 256, 256 *256, 256, 255, 254 *254, 253, 252, 252 *251, 251, 251, 250 *250, 250, 250, 250 *250, 250, 250, 250 *250, 251, 251, 251 *252, 252, 253, 254 *254, 255, 256, 256 *256, 257, 257, 258 *259, 259, 260, 260 *261, 261, 262, 262 *262, 263, 263, 263 *263, 263, 263, 262 *262, 262, 261, 261 *260, 260, 259, 259 *258, 257, 257, 256 *256, 255, 255, 254 *253, 253, 252, 252 *251, 251, 250, 250 *250, 249, 249, 249 *249, 249, 249, 250 *250, 250, 251, 251 *252, 252, 253, 253 *254, 255, 255, 256 *256, 257, 257, 258 *259, 260, 260, 261 *261, 262, 262, 263 *263, 263, 263, 263 *263, 263, 263, 263 *263, 262, 262, 261 *261, 260, 260, 259 *258, 257, 257, 256 *256, 255, 255, 254 *253, 252, 252, 251 *251, 250, 250, 249 *249, 249, 249, 249 *249, 249, 249, 249 *249, 250, 250, 251 *251, 252, 252, 253 *254, 255, 255, 256 *256, 257, 258, 258 *259, 260, 260, 261 *262, 262, 263, 263 *263, 264, 264, 264 *264, 264, 264, 263 *263, 263, 262, 262 *261, 260, 260, 259 *258, 258, 257, 256 *256, 255, 254, 254 *253, 252, 252, 251 *250, 250, 249, 249 *249, 248, 248, 248 *248, 248, 248, 249 *249, 249, 250, 250 *251, 252, 252, 253 *254, 254, 255, 256 *256, 257, 258, 258 *259, 260, 261, 261 *262, 263, 263, 263 *264, 264, 264, 264 *264, 264, 264, 264 *263, 263, 263, 262 *261, 261, 260, 259 *258, 258, 257, 256 *256, 255, 254, 254 *253, 252, 251, 251 *250, 249, 249, 249 *248, 248, 248, 248 *248, 248, 248, 248 *249, 249, 249, 250 *251, 251, 252, 253 *254, 254, 255, 256 *256, 257, 258, 259 *259, 260, 261, 262 *262, 263, 264, 264 *264, 265, 265, 265 *265, 265, 265, 264 *264, 264, 263, 262 *262, 261, 260, 259 *259, 258, 257, 256 *256, 255, 254, 253 *253, 252, 251, 250 *250, 249, 248, 248 *248, 247, 247, 247 *247, 247, 247, 248 *248, 248, 249, 250 *250, 251, 252, 253 *253, 254, 255, 256 *256, 257, 258, 259 *260, 261, 261, 262 *263, 263, 264, 264 *265, 265, 265, 265 *265, 265, 265, 265 *264, 264, 263, 263 *262, 261, 261, 260 *259, 258, 257, 256 *256, 255, 254, 253 *252, 251, 251, 250 *249, 249, 248, 248 *247, 247, 247, 247 *247, 247, 247, 247 *248, 248, 249, 249 *250, 251, 251, 252 *253, 254, 255, 256 *256, 257, 258, 259 *260, 261, 262, 262 *263, 264, 264, 265 *265, 266, 266, 266 *266, 266, 266, 265 *265, 264, 264, 263 *262, 262, 261, 260 *259, 258, 257, 256 *256, 255, 254, 253 *252, 251, 250, 250 *249, 248, 248, 247 *247, 246, 246, 246 *246, 246, 246, 247 *247, 248, 248, 249 *250, 250, 251, 252 *253, 254, 255, 256 *256, 257, 258, 259 *260, 261, 262, 263 *264, 264, 265, 265 *266, 266, 266, 266 *266, 266, 266, 266 *265, 265, 264, 264 *263, 262, 261, 260 *259, 258, 257, 256 *256, 255, 254, 253 *252, 251, 250, 249 *248, 248, 247, 247 *246, 246, 246, 246 *246, 246, 246, 246 *247, 247, 248, 248 *249, 250, 251, 252 *253, 254, 255, 256 *256, 257, 258, 259 *260, 261, 262, 263 *264, 265, 265, 266 *266, 267, 267, 267 *267, 267, 267, 266 *266, 265, 265, 264 *263, 262, 261, 260 *259, 258, 257, 256 *256, 255, 254, 253 *252, 251, 250, 249 *248, 247, 247, 246 *246, 245, 245, 245 *245, 245, 245, 246 *246, 247, 247, 248 *249, 250, 251, 252 *253, 254, 255, 256 *256, 257, 258, 259 *261, 262, 263, 263 *264, 265, 266, 266 *267, 267, 267, 267 *267, 267, 267, 267 *266, 266, 265, 264 *263, 263, 262, 261 *259, 258, 257, 256 *256, 255, 254, 253 *251, 250, 249, 249 *248, 247, 246, 246 *245, 245, 245, 245 *245, 245, 245, 245 *246, 246, 247, 248 *249, 249, 250, 251 *253, 254, 255, 256 *256, 257, 258, 260 *261, 262, 263, 264 *265, 265, 266, 267 *267, 268, 268, 268 *268, 268, 268, 267 *267, 266, 265, 265 *264, 263, 262, 261 *260, 258, 257, 256 *256, 255, 254, 252 *251, 250, 249, 248 *247, 247, 246, 245 *245, 244, 244, 244 *244, 244, 244, 245 *245, 246, 247, 247 *248, 249, 250, 251 *252, 254, 255, 256 *256, 257, 259, 260 *261, 262, 263, 264 *265, 266, 267, 267 *268, 268, 268, 268 *268, 268, 268, 268 *267, 267, 266, 265 *264, 263, 262, 261 *260, 259, 257, 256 *256, 255, 253, 252 *251, 250, 249, 248 *247, 246, 245, 245 *244, 244, 244, 244 *244, 244, 244, 244 *245, 245, 246, 247 *248, 249, 250, 251 *252, 253, 255, 256 *256, 257, 259, 260 *261, 262, 263, 264 *265, 266, 267, 268 *268, 269, 269, 269 *269, 269, 269, 268 *268, 267, 266, 265 *264, 263, 262, 261 *260, 259, 257, 256 *256, 255, 253, 252 *251, 250, 249, 248 *247, 246, 245, 244 *244, 243, 243, 243 *243, 243, 243, 244 *244, 245, 246, 247 *248, 249, 250, 251 *252, 253, 255, 256 *256, 258, 259, 260 *261, 263, 264, 265 *266, 267, 268, 268 *269, 269, 269, 270 *270, 269, 269, 269 *268, 268, 267, 266 *265, 264, 263, 261 *260, 259, 258, 256 *256, 254, 253, 252 *251, 249, 248, 247 *246, 245, 244, 244 *243, 243, 243, 242 *242, 243, 243, 243 *244, 244, 245, 246 *247, 248, 249, 251 *252, 253, 254, 256 *256, 258, 259, 260 *262, 263, 264, 265 *266, 267, 268, 269 *269, 270, 270, 270 *270, 270, 270, 269 *269, 268, 267, 266 *265, 264, 263, 262 *260, 259, 258, 256 *256, 254, 253, 252 *250, 249, 248, 247 *246, 245, 244, 243 *243, 242, 242, 242 *242, 242, 242, 243 *243, 244, 245, 246 *247, 248, 249, 250 *252, 253, 254, 256 *256, 258, 259, 260 *262, 263, 264, 266 *267, 268, 268, 269 *270, 270, 270, 271 *271, 270, 270, 270 *269, 268, 268, 267 *266, 264, 263, 262 *260, 259, 258, 256 *256, 254, 253, 252 *250, 249, 248, 246 *245, 244, 244, 243 *242, 242, 242, 241 *241, 242, 242, 242 *243, 244, 244, 245 *246, 248, 249, 250 *252, 253, 254, 256 *256, 258, 259, 261 *262, 263, 265, 266 *267, 268, 269, 270 *270, 271, 271, 271 *271, 271, 271, 270 *270, 269, 268, 267 *266, 265, 263, 262 *261, 259, 258, 256 *256, 254, 253, 251 *250, 249, 247, 246 *245, 244, 243, 242 *242, 241, 241, 241 *241, 241, 241, 242 *242, 243, 244, 245 *246, 247, 249, 250 *251, 253, 254, 256 *256, 258, 259, 261 *262, 264, 265, 266 *267, 268, 269, 270 *271, 271, 272, 272 *272, 272, 271, 271 *270, 269, 268, 267 *266, 265, 264, 262 *261, 259, 258, 256 *256, 254, 253, 251 *250, 248, 247, 246 *245, 244, 243, 242 *241, 241, 240, 240 *240, 240, 241, 241 *242, 243, 244, 245 *246, 247, 248, 250 *251, 253, 254, 256 *256, 258, 259, 261 *263, 264, 265, 267 *268, 269, 270, 271 *271, 272, 272, 272 *272, 272, 272, 271 *271, 270, 269, 268 *267, 265, 264, 263 *261, 259, 258, 256 *256, 254, 253, 251 *249, 248, 247, 245 *244, 243, 242, 241 *241, 240, 240, 240 *240, 240, 240, 241 *241, 242, 243, 244 *245, 247, 248, 249 *251, 253, 254, 256 ; ************************************** ; ; TURRET CORRECTION TABLE (TCT) ; ; ************************************** ; ; (TCT-const 1.5) *0, 0, 0, 0 *0, 0, 0, 0 *0, 0, 0, 0 *0, 0, 1, 1 *1, 1, 1, 1 *1, 1, 1, 1 *1, 1, 1, 1 *1, 1, 1, 1 *1, 1, 1, 1 *1, 1, 1, 1 *1, 1, 1, 1 *1, 1, 1, 1 *1, 1, 1, 1 *1, 1, 1, 1 *1, 1, 1, 1 *1, 1, 1, 1 *2, 1, 1, 1 *1, 1, 1, 1 *1, 1, 1, 1 *1, 1, 1, 1 *1, 1, 1, 1 *1, 1, 1, 1 *1, 1, 1, 1 *1, 1, 1, 1 *1, 1, 1, 1 *1, 1, 1, 1 *1, 1, 1, 1 *1, 1, 1, 1 *1, 1, 1, 0 *0, 0, 0, 0 *0, 0, 0, 0 *0, 0, 0, 0 *0, 0, 0, 0 *0, 0, 0, 0 *0, 0, 0, 0 *0, 0, -1, -1 *-1, -1, -1, -1 *-1, -1, -1, -1 *-1, -1, -1, -1 *-1, -1, -1, -1 *-1, -1, -1, -1 *-1, -1, -1, -1 *-1, -1, -1, -1 *-1, -1, -1, -1 *-1, -1, -1, -1 *-1, -1, -1, -1 *-1, -1, -1, -1 *-1, -1, -1, -1 *-2, -1, -1, -1 *-1, -1, -1, -1 *-1, -1, -1, -1 *-1, -1, -1, -1 *-1, -1, -1, -1 *-1, -1, -1, -1 *-1, -1, -1, -1 *-1, -1, -1, -1 *-1, -1, -1, -1 *-1, -1, -1, -1 *-1, -1, -1, -1 *-1, -1, -1, -1 *-1, -1, -1, 0 *0, 0, 0, 0 *0, 0, 0, 0 *0, 0, 0, 0 ; ************************************** ; ; USEFUL VARS ; ; ************************************** ; #def WTURNR #def TRPRED_TBL #def TRPRED_IDX #def TUCORR_TBL #def TUCORR_IDX #def TDSP #def TRDEG #def TRSPD #def TRRNG #def SCANARC #def RANGE #def HEAT ; ************************************** ; ; SETUP ; ; ************************************** ; !SETUP or ax, 1 int I_KEEPSHIFT mov WTURNR, 32 mov TRPRED_TBL, 1028 mov TUCORR_TBL, 3140 mov SCANARC, 64 opo P_MINELAYER, 20 opo P_MINELAYER, 20 opo P_ARC, SCANARC opo P_SHUTDOWN, 400 ; ************************************** ; ; DRIVE CONTROL ; ; ************************************** ; !DRIVE ; - KEEP AWAY FROM WALLS - ; int I_LOCATE !LW cmp ex, 200 ja !RW !LDIR cmp @1, 128 jb !UW opo P_STEERING, WTURNR jae !LDIR !RW cmp ex, 800 jb !UW !RDIR cmp @1, 128 ja !UW opo P_STEERING, WTURNR jbe !RDIR !UW cmp fx, 200 ja !DW !UDIR cmp @1, 64 jb !UTMP cmp @1, 192 jb !SPDCHECK !UTMP opo P_STEERING, WTURNR jae !UDIR !DW cmp fx, 800 jb !SPDCHECK !DDIR cmp @1, 192 ja !SPDCHECK cmp @1, 64 jb !SPDCHECK !DTMP opo P_STEERING, WTURNR jae !DDIR ; - SPEED CONTROL - ; !SPDCHECK cmp [0], 100 jeq !NOACC opo P_STEERING, 30 opo P_THROTTLE, 100 !NOACC ; ************************************** ; ; SCANNING CONTROL ; ; ************************************** ; !SCAN ipo P_SCAN, RANGE cmp RANGE, 1500 jb !FOUND cmp SCANARC, 64 jb !WIDE opo P_TROTATE, 128 jae !DRIVE !WIDE shl SCANARC, 1 opo P_ARC, SCANARC jb !SCAN !FOUND ; - FIRE MODE DECISION - ; cmp @13, 0 jls !NEGSPD cmp SCANARC, 2 jgr !POS_TRNEAR cmp @13, 600 jgr !QFIRE cmp @13, 30 jgr !PFIRE jls !SFIRE !POS_TRNEAR cmp RANGE, 250 ja !SHRINK cmp @13, 600 jls !SHRINK cmp SCANARC, 32 jbe !QNFIRE ja !SHRINK !NEGSPD cmp SCANARC, 2 jgr !NEG_TRNEAR cmp @13, -600 jls !QFIRE cmp @13, -30 jls !PFIRE jgr !SFIRE !NEG_TRNEAR cmp RANGE, 250 ja !SHRINK cmp @13, -600 jgr !SHRINK cmp SCANARC, 32 jbe !QNFIRE ; - SHRINK SCANARC - ; !SHRINK cmp @3, -1 jls !nAcc2 jeq !nAcc1 cmp @3, 1 jeq !pAcc1 jgr !pAcc2 cmp SCANARC, 4 ja !shr2 shr SCANARC, 1 opo P_ARC, SCANARC jbe !SCAN !shr2 shr SCANARC, 2 opo P_ARC, SCANARC ja !SCAN !nAcc2 mov dx, SCANARC neg dx opo P_TROTATE, dx shr SCANARC, 1 opo P_ARC, SCANARC jls !SCAN !nAcc1 shr SCANARC, 1 mov dx, SCANARC neg dx opo P_TROTATE, dx opo P_ARC, SCANARC jeq !SCAN !pAcc1 shr SCANARC, 1 opo P_TROTATE, SCANARC opo P_ARC, SCANARC jeq !SCAN !pAcc2 opo P_TROTATE, SCANARC shr SCANARC, 1 opo P_ARC, SCANARC jgr !SCAN ; ************************************** ; ; HEAT CONTROL ; ; ************************************** ; !HEATCHECK ipo P_HEAT, HEAT cmp HEAT, 150 jb !DRIVE ipo P_RAND, ax and ax, 64 sub ax, 32 opo P_STEERING, ax cmp [0], 100 jeq !HnoAcc opo P_STEERING, 34 opo P_THROTTLE, 100 !HnoAcc ipo P_SCAN, RANGE cmp RANGE, 1500 jb !hFOUND cmp SCANARC, 64 jb !hWIDE opo P_TROTATE, 128 jae !HEATCHECK !hWIDE shl SCANARC, 1 opo P_ARC, SCANARC jb !HEATCHECK !hFOUND cmp SCANARC, 2 jgr !hSHRINK cmp @13, 30 jgr !hCENTER cmp @13, -30 jgr !SFIRE !hCENTER opo P_TROTATE, @3 jeq !HEATCHECK jne !HEATCHECK !hSHRINK cmp @3, -1 jls !hnAcc2 jeq !hnAcc1 cmp @3, 1 jeq !hpAcc1 jgr !hpAcc2 cmp SCANARC, 4 ja !hshr2 shr SCANARC, 1 opo P_ARC, SCANARC jbe !HEATCHECK !hshr2 shr SCANARC, 2 opo P_ARC, SCANARC ja !HEATCHECK !hnAcc2 mov dx, SCANARC neg dx opo P_TROTATE, dx shr SCANARC, 1 opo P_ARC, SCANARC jls !HEATCHECK !hnAcc1 shr SCANARC, 1 mov dx, SCANARC neg dx opo P_TROTATE, dx opo P_ARC, SCANARC jeq !HEATCHECK !hpAcc1 shr SCANARC, 1 opo P_TROTATE, SCANARC opo P_ARC, SCANARC jeq !HEATCHECK !hpAcc2 opo P_TROTATE, SCANARC shr SCANARC, 1 opo P_ARC, SCANARC jgr !HEATCHECK ; ***************************************** ; ; "PREDICTION" - FIRE MODE ; ; ***************************************** ; !PFIRE ipo P_SCAN, TRRNG cmp TRRNG, 1500 ja !HEATCHECK mov TRSPD, @13 mov TRDEG, @6 cmp @13, 0 ja !pSpd neg TRSPD add TRDEG, 128 and TRDEG, 255 !pSpd shr TRSPD, 5 shr TRDEG, 2 shl TRSPD, 6 mov TRPRED_IDX, TRPRED_TBL add TRPRED_IDX, TRSPD add TRPRED_IDX, TRDEG mov TUCORR_IDX, TUCORR_TBL add TUCORR_IDX, @2 mov TDSP, [TRPRED_IDX] add TDSP, [TUCORR_IDX] opo P_TROTATE, TDSP opo P_FIRE, @3 opo P_FIRE, @3 opo P_FIRE, @3 jeq !PFIRE jne !PFIRE ; ***************************************** ; ; "SLOW TARGET" - FIRE MODE ; ; ***************************************** ; !SFIRE or ax, 1 int I_OVERBURN !SLOOP ipo P_HEAT, HEAT cmp HEAT, 350 ja !SEND ipo P_SCAN, RANGE cmp RANGE, 1500 ja !SEND opo P_FIRE, @3 cmp @13, 30 ja !SEND cmp @13, -30 jls !SEND opo P_TROTATE, @3 jeq !SLOOP jne !SLOOP !SEND xor ax, ax int I_OVERBURN jeq !HEATCHECK jne !HEATCHECK ; *********************************************** ; ; "VERY FAST ENEMY" - FIRE MODE ; ; *********************************************** ; !QFIRE ipo P_SCAN, RANGE cmp RANGE, 1500 ja !HEATCHECK mov TRSPD, @13 mov TRDEG, @6 cmp TRSPD, 0 ja !pSpd1 neg TRSPD add TRDEG, 128 and TRDEG, 255 !pSpd1 shr TRSPD, 5 shr TRDEG, 2 shl TRSPD, 6 mov TRPRED_IDX, TRPRED_TBL add TRPRED_IDX, TRSPD add TRPRED_IDX, TRDEG mov TUCORR_IDX, TUCORR_TBL add TUCORR_IDX, @2 mov TDSP, [TRPRED_IDX] add TDSP, [TUCORR_IDX] opo P_TROTATE, TDSP opo P_FIRE, @3 opo P_FIRE, @3 jeq !QFIRE jne !QFIRE ; ***************************************** ; ; "FAST TARGET NEAR" - FIRE MODE ; ; ***************************************** ; !QNFIRE ipo P_HEAT, HEAT cmp HEAT, 360 ja !HEATCHECK ipo P_SCAN, RANGE cmp RANGE, 250 ja !HEATCHECK mov TRSPD, @13 mov TRDEG, @6 cmp TRSPD, 0 ja !pSpd2 neg TRSPD add TRDEG, 128 and TRDEG, 255 !pSpd2 shr TRSPD, 5 shr TRDEG, 2 shl TRSPD, 6 mov TRPRED_IDX, TRPRED_TBL add TRPRED_IDX, TRSPD add TRPRED_IDX, TRDEG mov dx, @3 cmp SCANARC, 32 jne !ARC16 sal dx, 4 jeq !QNROT !ARC16 cmp SCANARC, 16 jne !ARC8 sal dx, 3 jeq !QNROT !ARC8 cmp SCANARC, 8 jne !ARC4 sal dx, 2 jeq !QNROT !ARC4 sal dx, 1 !QNROT add dx, [TRPRED_IDX] opo P_TROTATE, dx opo P_FIRE, @3 jeq !QNFIRE jne !QNFIRE