// This file was decompiled using SASCM.ini published by GTAG (http://gtag.gtagaming.com/opcode-database) on 14.6.2013
{$CLEO .cs}

//-------------MAIN---------------
thread 'CANNON' 
0000: NOP 
wait 0 
100@ = audiostream.Load3D("CLEO\APC\APC.MP3")
wait 0

:CANNON_11
32@ = 200
wait 0 
if 
   Actor.DrivingVehicleType($PLAYER_ACTOR, #BMPR)
else_jump @CANNON_11 
0@ = Actor.CurrentCar($PLAYER_ACTOR)
0A97: 4@ = car 0@ struct 
4@ += 2380 
0A97: 5@ = car 0@ struct 
5@ += 2384 
Model.Load(#MOLOTOV)
Model.Load(1551)
038B: load_requested_models 

:CANNON_94
wait 0 
if and
   Model.Available(#MOLOTOV)
   Model.Available(1551)
else_jump @CANNON_94 
0407: store_coords_to 7@ 8@ 9@ from_car 0@ with_offset 0.0 0.0 1.1 
2@ = Object.Create(1551, 7@, 8@, 9@)
3@ = Object.Create(1551, 7@, 8@, 9@)
0681: attach_object 2@ to_car 0@ with_offset 0.0 0.0 1.1 rotation 0.0 0.0 0.0 
069A: attach_object 3@ to_object 2@ with_offset 0.0 0.0 0.0 rotation 0.0 0.0 0.0 
Object.CollisionDetection(2@) = False
Object.SetImmunities(2@, 1, 1, 1, 1, 1)
Object.CollisionDetection(3@) = False
Object.SetImmunities(3@, 1, 1, 1, 1, 1)
053F: set_car 0@ tires_vulnerability 0 
Car.SetImmunities(0@, 1, 0, 0, 1, 1)
0224: set_car 0@ health_to 10000

:CANNON_302
wait 0 
if 
   Actor.Driving($PLAYER_ACTOR)
else_jump @CANNON_3572 
0A8C: write_memory 12045956 size 4 value 2147483647 virtual_protect 0 
if 
83CA:   not object 1@ exists 
0AA0: gosub_if_false @CANNON_1940 
0A8D: 9@ = read_memory 4@ size 4 virtual_protect 0 
0A8D: 7@ = read_memory 5@ size 4 virtual_protect 0 
7@ *= 180.0 
9@ *= 180.0 
7@ /= 3.141593                              
9@ /= 3.141593 
0681: attach_object 2@ to_car 0@ with_offset 0.0 0.0 1.1 rotation 0.0 0.0 9@ 
069A: attach_object 3@ to_object 2@ with_offset 0.0 0.0 0.0 rotation 7@ 0.0 0.0 
068D: get_camera_position_to 16@ 17@ 18@ 
0400: store_coords_to 10@ 11@ 12@ from_object 3@ with_offset 0.0 5000.0 0.0 
0063: 10@ -= 16@ // (float) 
0063: 11@ -= 17@ // (float) 
0063: 12@ -= 18@ // (float) 
050A: 19@ = distance_between_XYZ 10@ 11@ 12@ and_XYZ 0.0 0.0 0.0 
19@ /= 10.0 
0073: 10@ /= 19@ // (float) 
0073: 11@ /= 19@ // (float) 
0073: 12@ /= 19@ // (float) 
0400: store_coords_to 7@ 8@ 9@ from_object 3@ with_offset 0.0 6.487 6.0 
25@ = 0 

:CANNON_653
005B: 7@ += 10@ // (float) 
005B: 8@ += 11@ // (float) 
005B: 9@ += 12@ // (float) 
if 
86BD:   not no_obstacles_between 16@ 17@ 18@ and 7@ 8@ 9@ solid 1 car 1 actor 1 object 0 particle 0 
else_jump @CANNON_903 
0063: 7@ -= 10@ // (float) 
0063: 8@ -= 11@ // (float) 
0063: 9@ -= 12@ // (float) 
10@ *= 0.05 
11@ *= 0.05 
12@ *= 0.05 
25@ = 0 

:CANNON_779
005B: 7@ += 10@ // (float) 
005B: 8@ += 11@ // (float) 
005B: 9@ += 12@ // (float) 
if 
86BD:   not no_obstacles_between 16@ 17@ 18@ and 7@ 8@ 9@ solid 1 car 1 actor 1 object 0 particle 0 
else_jump @CANNON_875 
0063: 7@ -= 10@ // (float) 
0063: 8@ -= 11@ // (float) 
0063: 9@ -= 12@ // (float) 
jump @CANNON_896 

:CANNON_875
25@ += 1 
  25@ > 20 
else_jump @CANNON_779 

:CANNON_896
jump @CANNON_924 

:CANNON_903
25@ += 1 
  25@ > 50 
else_jump @CANNON_653 

:CANNON_924
0400: store_coords_to 10@ 11@ 12@ from_object 3@ with_offset 0.0 6.487 6.0 
050A: 19@ = distance_between_XYZ 7@ 8@ 9@ and_XYZ 10@ 11@ 12@ 
19@ /= 850.0 
006B: 19@ *= 19@ // (float) 
19@ *= 10.0 
0063: 9@ -= 19@ // (float) 
068D: get_camera_position_to 16@ 17@ 18@ 
0063: 7@ -= 16@ // (float) 
0063: 8@ -= 17@ // (float) 
0063: 9@ -= 18@ // (float) 
050A: 19@ = distance_between_XYZ 7@ 8@ 9@ and_XYZ 0.0 0.0 0.0 
19@ /= 5.0 
0073: 7@ /= 19@ // (float) 
0073: 8@ /= 19@ // (float) 
0073: 9@ /= 19@ // (float) 
005B: 7@ += 16@ // (float) 
005B: 8@ += 17@ // (float) 
005B: 9@ += 18@ // (float) 
04D5: create_corona_at 7@ 8@ 9@ radius 0.05 type 1 flare 0 RGB 0 192 0 
0400: store_coords_to 7@ 8@ 9@ from_object 3@ with_offset 0.0 5000.0 -20.0 
068D: get_camera_position_to 16@ 17@ 18@ 
0063: 7@ -= 16@ // (float) 
0063: 8@ -= 17@ // (float) 
0063: 9@ -= 18@ // (float) 
050A: 19@ = distance_between_XYZ 7@ 8@ 9@ and_XYZ 0.0 0.0 0.0 
19@ /= 5.0 
0073: 7@ /= 19@ // (float) 
0073: 8@ /= 19@ // (float) 
0073: 9@ /= 19@ // (float) 
005B: 7@ += 16@ // (float) 
005B: 8@ += 17@ // (float) 
005B: 9@ += 18@ // (float) 
04D5: create_corona_at 7@ 8@ 9@ radius 0.05 type 9 flare 0 RGB 0 192 0 
if 
03CA:   object 1@ exists 
else_jump @CANNON_1369 
059F: get_object 1@ velocity_in_direction 16@ 17@ 18@ 

:CANNON_1369
if 
  150 > 32@ 
else_jump @CANNON_1442 
0400: store_coords_to 7@ 8@ 9@ from_object 3@ with_offset 0.0 6.487 6.0 
09E5: create_flash_light_at 7@ 8@ 9@ RGB_mask 1024 768 256 radius 25.0 

:CANNON_1442
if 
  32@ > 200
else_jump @CANNON_302    
if 
0AB0:   key_pressed 1
else_jump @CANNON_302 
if 
03CA:   object 1@ exists 
else_jump @CANNON_1505 
Object.Destroy(1@)

:CANNON_1505
066D: 6@ = attach_particle "tank_fire" to_object 3@ with_offset 0.0 2.5 0.206 type 1 
064C: make_particle 6@ visible 
066D: 200@ = attach_particle "explosion_door" to_object 3@ with_offset 0.0 2.5 0.206 type 1 
064C: make_particle 200@ visible 
097B: play_audio_at_object 3@ event 1157 
0407: store_coords_to 7@ 8@ 9@ from_car 0@ with_offset 0.0 0.0 0.0 
Audiostream.LinkToCar(100@, 0@)
Audiostream.PerformAction(100@, PLAY)
1@ = Object.Create(#MOLOTOV, 7@, 8@, 9@)
Object.SetImmunities(1@, 1, 1, 1, 1, 1)
0906: set_object 1@ mass_to 1.0 // float 
0908: set_object 1@ turn_mass_to 1000000.0 // float 
069A: attach_object 1@ to_object 3@ with_offset 0.0 6.487 6.0 rotation -90.0 0.0 0.0 
Object.CollisionDetection(1@) = True
0682: detach_object 1@ 0.0 0.0 0.0 collision_detection 0 
04D9: object 1@ set_scripted_collision_check 1 
08D2: object 1@ scale_model 1.5 
0A98: 8@ = object 1@ struct 
8@ += 152 
0A8C: write_memory 8@ size 4 value 1.0 virtual_protect 0 
0400: store_coords_to 7@ 8@ 9@ from_object 1@ with_offset 0.0 0.0 0.0 
0400: store_coords_to 10@ 11@ 12@ from_object 1@ with_offset 0.0 0.0 3000.0 
0063: 10@ -= 7@ // (float) 
0063: 11@ -= 8@ // (float) 
0063: 12@ -= 9@ // (float) 
06A2: get_car 0@ velocity_in_direction_XYZ 7@ 8@ 9@ 
005B: 7@ += 10@ // (float) 
005B: 8@ += 11@ // (float) 
005B: 9@ += 12@ // (float) 
0400: store_coords_to 13@ 14@ 15@ from_object 3@ with_offset 0.0 6.487 6.0 
059F: get_object 1@ velocity_in_direction 16@ 17@ 18@ 
Object.Throw(1@, 7@, 8@, 9@)
32@ = 0 
jump @CANNON_302 

:CANNON_1940
0400: store_coords_to 7@ 8@ 9@ from_object 1@ with_offset 0.0 0.0 0.0 
if 
84DA:   not has_object 1@ collided 
else_jump @CANNON_2039 
050A: 19@ = distance_between_XYZ 13@ 14@ 15@ and_XYZ 7@ 8@ 9@ 
0063: 7@ -= 13@ // (float) 
0063: 8@ -= 14@ // (float) 
0063: 9@ -= 15@ // (float) 
jump @CANNON_2245 

:CANNON_2039
0A8D: 23@ = read_memory 12010644 size 4 virtual_protect 0 
23@ += 4 
0A8D: 23@ = read_memory 23@ size 4 virtual_protect 0 
24@ = 0 

:CANNON_2079
0A8D: 22@ = read_memory 23@ size 1 virtual_protect 0 
23@ += 1 
if and
  22@ >= 0 
  128 > 22@ 
else_jump @CANNON_2169 
005A: 22@ += 24@ // (int) 
if and
803B:   not  0@ == 22@ // (int) 
   not Car.Wrecked(22@)
0897:   car 22@ collided_with_object 1@ 
else_jump @CANNON_2169     
0407: store_coords_to 120@ 130@ 140@ from_car 22@ with_offset 0.0 0.0 0
020C: create_explosion_with_radius 12 at 120@ 130@ 140@


:CANNON_2169
24@ += 256 
  24@ > 27904 
else_jump @CANNON_2079 
050A: 19@ = distance_between_XYZ 16@ 17@ 18@ and_XYZ 0.0 0.0 0.0 
0087: 7@ = 16@ // (float) 
0087: 8@ = 17@ // (float) 
0087: 9@ = 18@ // (float) 

:CANNON_2245
0073: 7@ /= 19@ // (float) 
0073: 8@ /= 19@ // (float) 
0073: 9@ /= 19@ // (float) 
if 
04E7:   object 1@ in_water 
else_jump @CANNON_2292 
Object.Destroy(1@)
return 

:CANNON_2292
20@ = 0.0 
21@ = 4 
if and
84DA:   not has_object 1@ collided 
06BD:   no_obstacles_between 16@ 17@ 18@ and 13@ 14@ 15@ solid 1 car 1 actor 1 object 0 particle 0 
else_jump @CANNON_2828 

:CANNON_2355
0025:   19@ > 20@ // (float) 
else_jump @CANNON_2821 
005B: 13@ += 7@ // (float) 
005B: 14@ += 8@ // (float) 
005B: 15@ += 9@ // (float)  
20@ += 1.0 
21@ += 1 
if 
  21@ == 5 
else_jump @CANNON_2814 
09E5: create_flash_light_at 13@ 14@ 15@ RGB_mask 1024 768 256 radius 25.0 
21@ = 0 
0A8D: 23@ = read_memory 12010644 size 4 virtual_protect 0 
23@ += 4 
0A8D: 23@ = read_memory 23@ size 4 virtual_protect 0 
24@ = 0 

:CANNON_2557
0A8D: 22@ = read_memory 23@ size 1 virtual_protect 0 
23@ += 1 
if and
  22@ >= 0 
  128 > 22@ 
else_jump @CANNON_2791 
005A: 22@ += 24@ // (int) 
25@ = Car.Model(22@)
if or
0820:   model 25@ heli 
081F:   model 25@ plane 
081E:   model 25@ boat 
else_jump @CANNON_2791 
if and
803B:   not  0@ == 22@ // (int) 
01AF:   car 22@ sphere 0 in_sphere 13@ 14@ 15@ radius 7.5 7.5 7.5 
else_jump @CANNON_2791 
005B: 16@ += 7@ // (float) 
005B: 17@ += 8@ // (float) 
005B: 18@ += 9@ // (float) 
097A: play_audio_at 16@ 17@ 18@ event 1159 
020C: create_explosion_with_radius 12 at 16@ 17@ 18@
Object.Destroy(1@)
return 

:CANNON_2791
24@ += 256 
  24@ > 27904 
else_jump @CANNON_2557 

:CANNON_2814
jump @CANNON_2355 

:CANNON_2821
jump @CANNON_3527 

:CANNON_2828
0025:   19@ > 20@ // (float) 
else_jump @CANNON_3527 
0087: 16@ = 13@ // (float) 
0087: 17@ = 14@ // (float) 
0087: 18@ = 15@ // (float) 
0063: 16@ -= 7@ // (float) 
0063: 17@ -= 8@ // (float) 
0063: 18@ -= 9@ // (float) 
005B: 13@ += 7@ // (float) 
005B: 14@ += 8@ // (float) 
005B: 15@ += 9@ // (float) 
if or
04DA:   has_object 1@ collided 
81AF:   not car 0@ sphere 0 in_sphere 13@ 14@ 15@ radius 5.0 5.0 2.5 
else_jump @CANNON_3100 
if 
86BD:   not no_obstacles_between 16@ 17@ 18@ and 13@ 14@ 15@ solid 1 car 1 actor 1 object 0 particle 0 
else_jump @CANNON_3100 
005B: 16@ += 7@ // (float) 
005B: 17@ += 8@ // (float) 
005B: 18@ += 9@ // (float) 
097A: play_audio_at 16@ 17@ 18@ event 1159 
020C: create_explosion_with_radius 12 at 16@ 17@ 18@  
Object.Destroy(1@)
return 

:CANNON_3100
20@ += 1.0 
21@ += 1 
if 
  21@ == 5 
else_jump @CANNON_3520 
09E5: create_flash_light_at 13@ 14@ 15@ RGB_mask 1024 768 256 radius 25.0 
21@ = 0 
0A8D: 23@ = read_memory 12010644 size 4 virtual_protect 0 
23@ += 4 
0A8D: 23@ = read_memory 23@ size 4 virtual_protect 0 
24@ = 0 

:CANNON_3263
0A8D: 22@ = read_memory 23@ size 1 virtual_protect 0 
23@ += 1 
if and
  22@ >= 0 
  128 > 22@ 
else_jump @CANNON_3497 
005A: 22@ += 24@ // (int) 
25@ = Car.Model(22@)
if or
0820:   model 25@ heli 
081F:   model 25@ plane 
081E:   model 25@ boat 
else_jump @CANNON_3497 
if and
803B:   not  0@ == 22@ // (int) 
01AF:   car 22@ sphere 0 in_sphere 13@ 14@ 15@ radius 7.5 7.5 7.5 
else_jump @CANNON_3497 
005B: 16@ += 7@ // (float) 
005B: 17@ += 8@ // (float) 
005B: 18@ += 9@ // (float) 
097A: play_audio_at 16@ 17@ 18@ event 1159 
020C: create_explosion_with_radius 12 at 16@ 17@ 18@ 
Object.Destroy(1@)
return 

:CANNON_3497
24@ += 256 
  24@ > 27904 
else_jump @CANNON_3263 

:CANNON_3520
jump @CANNON_2828 

:CANNON_3527
0400: store_coords_to 13@ 14@ 15@ from_object 1@ with_offset 0.0 0.0 0.0 
059F: get_object 1@ velocity_in_direction 16@ 17@ 18@ 
return 

:CANNON_3572
0A8C: write_memory 12045956 size 4 value 0 virtual_protect 0 
if 
03CA:   object 1@ exists 
else_jump @CANNON_3606 
Object.Destroy(1@)

:CANNON_3606
Object.Destroy(2@)
Object.Destroy(3@)
Model.Destroy(#MOLOTOV)
Model.Destroy(1551)
jump @CANNON_11 
0509: 13@ = distance_between_XY 14@ 15@ and_XY 0.0 0.0 
0073: 14@ /= 13@ // (float) 
0073: 15@ /= 13@ // (float) 
0509: 13@ = distance_between_XY 14@ 15@ and_XY 0.0 1.0 
16@ = 0 

:CANNON_3698
13@ /= 2.0 
006B: 13@ *= 13@ // (float) 
0087: 15@ = 13@ // (float) 
13@ *= -1.0 
13@ += 1.0 
01FB: 13@ = square_root 13@ 
13@ *= -1.0 
13@ += 1.0 
006B: 13@ *= 13@ // (float) 
005B: 13@ += 15@ // (float) 
01FB: 13@ = square_root 13@ 
16@ += 1 
  16@ > 11 
else_jump @CANNON_3698 
13@ *= 4096.0 
13@ /= 3.141529 
13@ *= 180.0 
if 
  14@ > 0.0 
else_jump @CANNON_3888 
13@ *= -1.0 
13@ += 360.0 

:CANNON_3888
return        
