; ************************** RUMBLE KING *********************** ; by Georg Schnabel ; ; ************************************************************** ; Rumble King v1.0 ; designed for rumble tournaments ; ************************************************************** #config scanner=4 #config weapon=2 #config engine=2 #config armor=2 #config heatsinks=2 #def WallPTR ; ********************* INITIALIZATION ************************ ; Initialize Direction int 2 cmp ex, 500 ja !rightHalf !leftHalf mov WallPTR,0 ipo P_COMPASS, ax mov bx, 192 sub bx, ax jbe !initdir !RightHalf mov WallPTR, 2 ipo P_COMPASS, ax mov bx, 64 sub bx, ax !initdir opo P_STEERING, bx !START ; ********************** DRIVING CONTROL ********************** cmp [00], 100 jeq 23 opo P_THROTTLE, 100 :23 cmp [8],0 jeq 24 opo P_STEERING, 64 int 13 :24 ; ************************* SCAN CONTROL ************************ opo P_ARC, 2 opo P_TAIM, 0 ipo P_SCAN, ax cmp ax, 1600 jb !SCAN opo P_TAIM, 128 ipo P_SCAN, ax cmp ax, 1600 jb !SCAN ; ************************ Normal target acquisition ****************** #def scanarc mov scanarc, 64 opo P_TAIM, 64 !nscan opo P_ARC, scanarc ipo P_SCAN, ax cmp ax, 1600 ja !START mov ax @3 ; Get accuracy add ax 202 ; move it to 2010-2014 range je ax jne ax :200 xor ax ax ; ax = 0 sub ax scanarc ; ax = 0-arc opo 12 ax ; turn turret left je 210 jne 210 :201 xor ax ax ; ax = 0 sub ax scanarc ; ax = 0-arc sar ax 1 ; ax = (0-arc)/2 opo 12 ax ; turn turret left je 210 jne 210 :202 je 210 jne 210 :203 mov ax scanarc ; ax = arc shr ax 1 ; ax = arc/2 opo 12 ax ; turn turret right je 210 jne 210 :204 mov ax scanarc ; ax = arc opo 12 ax ; turn turret right :210 cmp scanarc 2 ; compare arc to 2 jle !FIRE ; If arc <= 2, then skip shrinking it. shr scanarc 2 ; cut our arc to 1/4 size je !nscan jne !nscan !FIRE ipo P_HEAT, ax cmp ax, 100 ja !START mov ax, [6] add ax, 32 and ax, 255 shr ax, 6 cmp ax, 1 ; 32-96 jne !lPred mov ax, [13] shr ax, 7 opo P_TROTATE, ax jeq !zPred !lPred cmp ax, 3 ; 160-224 jne !zPred mov ax, [13] shr ax, 7 neg ax opo P_TROTATE, ax !zPred int 11 cmp fx, 200 jb !nShoot int 10 cmp dx, 2 jbe !RNDFIRE !nShoot opo P_FIRE, @03 opo P_FIRE, @03 opo P_FIRE, @03 jeq !START jne !START ; ************************ SCAN DECISION ******************************* !SCAN ipo P_SCAN, ax cmp ax, 1600 ja !START cmp [07], 10 ; not moving, maybe Hideaway??? jbe !MAXFIRE cmp [13], 5 ; moves as fast as Rumbleking jbe !MAXFIRE ipo P_HEAT, ax cmp ax, 250 ja !SCAN mov ax, @03 opo P_FIRE, ax inc ax opo P_FIRE, ax sub ax, 2 opo P_FIRE, ax jmp !START !MAXFIRE ipo P_HEAT, ax cmp ax, 250 ja !START ipo P_SCAN, ax cmp ax, 1600 ja !START opo P_TROTATE, @03 ipo P_SCAN, ax opo P_FIRE, @03 opo P_FIRE, @03 jeq !MAXFIRE jne !MAXFIRE !RNDFIRE ipo P_HEAT, ax cmp ax, 250 ja !START opo P_FIRE, -4 opo P_FIRE, -2 opo P_FIRE, 0 opo P_FIRE, 2 opo P_FIRE, 4 jeq !START jne !START