;By Leper 12/09/2000 ;This robot is my best yet :)) ; ;I have worked out "the angle", using some trig and guess work, this ;makes BigLeper able to hit targets accuratly from some distance away #config scanner= 4 #config weapon= 2 #config armor= 2 #config engine= 3 #config heatsinks= 1 #config mines= 0 #config shield= 0 #def scanarc #def speed #def max_heat #def angle_1 #def angle_2 #def angle_3 #def angle_4 #def angle_5 #def angle_6 #def angle_7 #def angle_8 ;start up opo 22, 16 opo 11, 100 ;go mov scanarc, 64 mov speed, 100 mov max_heat, 250 mov ax, 1 int 3 ;keep shift opo 17, scanarc opo 22, 16 !start ipo 7, ax ;scan cmp ax, 1500 ;target jls !target jgr !no_target :100 cmp @0, 0 ;moving? je !stopped int 2 cmp ex, 250 jls !wall_left cmp ex, 750 jgr !wall_right cmp fx, 250 jls !wall_top cmp fx, 750 jgr !wall_bottom opo 14, 6 je !start jne !start ;********************************* ; * ;Wall avoiding * ; * ;********************************* !wall_left cmp @1, 128 ;desired heading is not towards wall so leave it jls !start int 19 ;resets meters travelled counter ipo 3, ax cmp ax, 192 jls !anticlockwise jge !clockwise !wall_right cmp @1, 128 ;heading not towards wall jgr !start int 19 ;resets meters travelled counter ipo 3, ax cmp ax, 64 jls !anticlockwise jge !clockwise !wall_top int 19 ;resets meters travelled counter ipo 3, ax cmp ax, 64 jls !clockwise cmp ax, 192 jgr !anticlockwise jmp !moving !wall_bottom int 19 ;resets meters travelled counter ipo 3, ax cmp ax, 128 jls !anticlockwise jge !clockwise !clockwise opo 14, 66 je !moving jne !moving !anticlockwise opo 14, -66 je !moving jne !moving !moving cmp @9, 16 opo 11, speed jls !moving jae !start ;******************************** !stopped opo 14, 32 neg speed opo 11, speed je !start jne !start ;******************************** ; ;targetting ; ;******************************** !target cmp scanarc, 4 je !firing mov bx, 202 add bx, @3 jne bx :200 ;@3 = -2 mov cx, scanarc neg cx opo 12, cx shr scanarc, 1 opo 17, scanarc je 100 jne 100 :201 ;@3 = -1 mov cx, scanarc shr cx, 1 neg cx opo 12, cx shr scanarc, 1 opo 17, scanarc je 100 jne 100 :202 ;@3 = 0 shr scanarc, 1 opo 17, scanarc je 100 jne 100 :203 ;@3 = 1 mov cx, scanarc shr cx, 1 opo 12, cx shr scanarc, 1 opo 17, scanarc je 100 jne 100 :204 ;@3 = 2 opo 12, scanarc shr scanarc, 1 opo 17, scanarc je 100 jne 100 !no_target cmp scanarc, 64 je !flip shl scanarc, 1 ;double scanarc opo 17, scanarc ;set it je 100 jne 100 !flip opo 12, 128 je 100 jne 100 ;******************************** !firing ipo 2, ax cmp ax, max_heat jgr !too_hot cmp @13, 325 jls !target_slow cmp @13, 425 jls !target_normal jae !target_fast :300 ipo 7, ax int 9 cmp fx, 0 je !target_stopped jls !target_reverse ;target in reverse cmp ex, 8 jls !enemy_forward cmp ex, 32 jls !enemy_tb_right cmp ex, 96 jls !enemy_right cmp ex, 128 jls !enemy_tb_right je !enemy_forward cmp ex, 160 jls !enemy_tb_left cmp ex, 224 jls !enemy_left cmp ex, 248 jls !enemy_tb_left jae !enemy_forward !enemy_tb_right ipo 7, ax opo 12, angle_3 ;turn turret to the magic angle opo 15, @3 opo 15, @3 je !steering jne !steering !enemy_right ipo 7, ax opo 12, angle_1 ;turn turret to the magic angle opo 15, @3 opo 15, @3 je !steering jne !steering !enemy_forward opo 15, @3 opo 15, @3 opo 15, @3 opo 14, 32 je !start jne !start !enemy_left ipo 7, ax opo 12, angle_2 opo 15, @3 opo 15, @3 je !steering jne !steering !enemy_tb_left ipo 7, ax opo 12, angle_4 opo 15, @3 opo 15, @3 je !steering jne !steering !target_stopped int 4 opo 15, @3 opo 15, @3 opo 15, @3 mov ax, 0 int 4 je !steering jne !steering !target_reverse cmp ex, 8 jls !enemy_forward_r cmp ex, 32 jls !enemy_tb_left_r cmp ex, 96 jls !enemy_left_r cmp ex, 128 jls !enemy_tb_left_r je !enemy_forward_r cmp ex, 160 jls !enemy_tb_rightR cmp ex, 224 jls !enemy_right_r cmp ex, 248 jls !enemy_tb_rightR jae !enemy_forward_r !enemy_tb_rightR ipo 7, ax opo 12, angle_7 ;turn turret to the magic angle opo 15, @3 opo 15, @3 je !steering jne !steering !enemy_right_r ipo 7, ax opo 12, angle_5 ;turn turret to the magic angle opo 15, @3 opo 15, @3 je !steering jne !steering !enemy_forward_r opo 15, @3 opo 15, @3 opo 14, 32 je !start jne !start !enemy_left_r ipo 7, ax opo 12, angle_6 opo 15, @3 opo 15, @3 je !steering jne !steering !enemy_tb_left_r ipo 7, ax opo 12, angle_8 opo 15, @3 opo 15, @3 je !steering jne !steering ;******************************** ; * ;Steering * ; * ;******************************** !steering cmp ax, 600 jls !too_close cmp ax, 900 jgr !too_far cmp @2, 128 jls !lower jae !higher !lower cmp @2, 64 jls !below64 mov ax, @2 sub ax, 64 opo 14, ax je !start jne !start !below64 mov ax, 64 sub ax, @2 neg ax opo 14, ax je !start jne !start !higher cmp @2, 196 jgr !above196 mov ax, 256 sub ax, @2 sub ax, 90 neg ax opo 14, ax je !start jne !start !above196 mov ax, 256 sub ax, @2 sub ax, 90 neg ax opo 14, ax je !start jne !start !too_close cmp @2, 64 jls !move_away_1 cmp @2, 196 jgr !move_away_2 je !start jne !start !move_away_1 opo 14, -96 je !start jne !start !move_away_2 opo 14, 96 je !start jne !start !too_far cmp @2, 64 jls !start cmp @2, 196 jgr !start cmp @2, 128 jls !move_towards_1 mov ax, @2 sub ax, 32 opo 14, ax je !start jne !start !move_towards_1 mov ax, 256 sub ax, @2 sub ax, 32 neg ax opo 14, ax je !start jne !start ;******************************** !too_hot opo 14, 96 opo 11, speed je 100 jne 100 ;******************************** !target_slow cmp cx, 1 je 300 mov cx, 1 mov angle_1, 4 mov angle_2, -4 mov angle_3, 3 mov angle_4, -3 mov angle_5, 3 mov angle_6, -3 mov angle_7, 2 mov angle_8, -2 je 300 jne 300 !target_normal cmp cx, 2 je 300 mov cx, 2 mov angle_1, 5 mov angle_2, -5 mov angle_3, 4 mov angle_4, -4 mov angle_5, 4 mov angle_6, -4 mov angle_7, 3 mov angle_8, -3 je 300 jne 300 !target_fast cmp cx, 3 je 300 mov angle_1, 7 mov angle_2, -7 mov angle_3, 5 mov angle_4, -5 mov angle_5, 6 mov angle_6, -6 mov angle_7, 4 mov angle_8, -4 mov cx, 3 je 300 jne 300