004F: create_thread SNAKENOS00

:SNAKENOS00
0001: wait  0 ms
00D6: if  0
0241:   player $PLAYER_CHAR in_remote_mode
004D: jump_if_false SNAKENOS00B
0484: @0 = player $PLAYER_CHAR rc_car
0002: jump SNAKENOS00C

:SNAKENOS00B
00D6: if  0
00DF:   actor $PLAYER_ACTOR driving
004D: jump_if_false SNAKENOS40
03C0: @0 = actor $PLAYER_ACTOR car

:SNAKENOS00C
00D6: if  1
01F4:   car @0 flipped
01C1:   car @0 stopped
004D: jump_if_false SNAKENOS01
00AA: store_car @0 position_to @1 @2 @3
0174: @4 = car @0 z_angle
00AB: put_car @0 at @1 @2 @3
0175: set_car @0 z_angle_to @4

:SNAKENOS01
;;air brakes + left/right rotate
00D6: if  1
00E1:   key_pressed  0  6 ;; handbrake
00E1:   key_pressed  0  14 ;; brake/reverse
004D: jump_if_false SNAKENOS02
00D6: if  22
01F4:   car @0 flipped
01F3:   car @0 airborne
00E1:   key_pressed  0  17 ;; fire
004D: jump_if_false SNAKENOS01B
04BA: set_car @0 speed_instantly 0

:SNAKENOS01B
00D6: if  2
00E1:   key_pressed  0  5 ;; look left
004D: jump_if_false SNAKENOS01C
0174: @4 = car @0 z_angle
000B: @4 +=  5.0  ;; floating-point values
0175: set_car @0 z_angle_to  @4

:SNAKENOS01C
00D6: if  2
00E1:   key_pressed  0  7 ;; look right
004D: jump_if_false SNAKENOS02
0174: @4 = car @0 z_angle
000F: @4 -=  5.0  ;; floating-point values
0175: set_car @0 z_angle_to  @4

:SNAKENOS02
;;choppers
0441: @6 = car @0 model
00D6: if  6
8039:   NOT   @6 ==  417 ;; leviathan
8039:   NOT   @6 ==  425 ;; hunter
8039:   NOT   @6 ==  447 ;; seaspar
8039:   NOT   @6 ==  465 ;; rcraider
8039:   NOT   @6 ==  469 ;; sparrow
8039:   NOT   @6 ==  487 ;; maverick
8039:   NOT   @6 ==  488 ;; vcnmav
004D: jump_if_false SNAKENOS02B
00D6: if  3
8039:   NOT   @6 ==  497 ;; polmav
8039:   NOT   @6 ==  501 ;; rcgoblin
8039:   NOT   @6 ==  548 ;; cargobob
8039:   NOT   @6 ==  563 ;; raindanc
004D: jump_if_false SNAKENOS02B
;;planes
00D6: if  6
8039:   NOT   @6 ==  460 ;; skimmer
8039:   NOT   @6 ==  476 ;; rustler
8039:   NOT   @6 ==  511 ;; beagle
8039:   NOT   @6 ==  512 ;; cropdust
8039:   NOT   @6 ==  513 ;; stunt
8039:   NOT   @6 ==  519 ;; shamal
8039:   NOT   @6 ==  520 ;; hydra
004D: jump_if_false SNAKENOS02C
00D6: if  4
8039:   NOT   @6 ==  553 ;; nevada
8039:   NOT   @6 ==  577 ;; at400
8039:   NOT   @6 ==  592 ;; adrom
8039:   NOT   @6 ==  593 ;; dodo
8039:   NOT   @6 ==  464 ;; rcbaron
004D: jump_if_false SNAKENOS02C
;;bikes
00D6: if  2
8039:   NOT   @6 ==  509 ;; bike
8039:   NOT   @6 ==  510 ;; mtbike
8039:   NOT   @6 ==  481 ;; bmx
004D: jump_if_false SNAKENOS02D
;;motorbikes
00D6: if  5
8039:   NOT   @6 ==  461 ;; pcj600
8039:   NOT   @6 ==  462 ;; faggio
8039:   NOT   @6 ==  463 ;; freeway
8039:   NOT   @6 ==  448 ;; pizzaboy
8039:   NOT   @6 ==  468 ;; sanchez
8039:   NOT   @6 ==  471 ;; quad
004D: jump_if_false SNAKENOS02E
00D6: if  4
8039:   NOT   @6 ==  521 ;; fcr900
8039:   NOT   @6 ==  522 ;; nrg500
8039:   NOT   @6 ==  523 ;; copbike
8039:   NOT   @6 ==  581 ;; bf400
8039:   NOT   @6 ==  586 ;; wayfarer
004D: jump_if_false SNAKENOS02E
;;boats
00D6: if  5
8039:   NOT   @6 ==  539 ;; vortex
8039:   NOT   @6 ==  430 ;; predator
8039:   NOT   @6 ==  446 ;; sqalo
8039:   NOT   @6 ==  452 ;; speeder
8039:   NOT   @6 ==  453 ;; reefer
8039:   NOT   @6 ==  454 ;; tropic
004D: jump_if_false SNAKENOS02F
00D6: if  3
8039:   NOT   @6 ==  472 ;; coastg
8039:   NOT   @6 ==  473 ;; dinghy
8039:   NOT   @6 ==  484 ;; marquis
8039:   NOT   @6 ==  493 ;; jetmax
004D: jump_if_false SNAKENOS02F
;;trains
00D6: if  5
8039:   NOT   @6 ==  449 ;; tram
8039:   NOT   @6 ==  537 ;; freight
8039:   NOT   @6 ==  538 ;; streak
8039:   NOT   @6 ==  569 ;; freiflat
8039:   NOT   @6 ==  570 ;; streakc
8039:   NOT   @6 ==  590 ;; freibox
004D: jump_if_false SNAKENOS02G
0004: $SNVTYPE =  0  ;; cars
0002: jump SNAKENOS03

:SNAKENOS02B
0004: $SNVTYPE =  1  ;; choppers
0002: jump SNAKENOS03

:SNAKENOS02C
0004: $SNVTYPE =  2  ;; planes
0002: jump SNAKENOS03

:SNAKENOS02D
0004: $SNVTYPE =  3  ;; bikes
0002: jump SNAKENOS03

:SNAKENOS02E
0004: $SNVTYPE =  4  ;; motorbikes
0002: jump SNAKENOS03

:SNAKENOS02F
0004: $SNVTYPE =  5  ;; boats
0002: jump SNAKENOS03

:SNAKENOS02G
0004: $SNVTYPE =  6  ;; trains
0002: jump SNAKENOS03

:SNAKENOS03
;;remote mode
00D6: if  2
00E1:   key_pressed  0  11 ;; skip trip
00E1:   key_pressed  0  13 ;; camera
8241:   NOT    player $PLAYER_CHAR in_remote_mode
004D: jump_if_false SNAKENOS03B
00D6: if  2
8038:   NOT    $SNVTYPE ==  3 ;; bikes
8038:   NOT    $SNVTYPE ==  4 ;; motorbikes
8038:   NOT    $SNVTYPE ==  6 ;; trains
004D: jump_if_false SNAKENOS04
00D6: if  21
8038:   NOT    $SNVTYPE ==  5 ;; boats
00DD:   actor $PLAYER_ACTOR driving_vehicle_type 539 ;; vortex
004D: jump_if_false SNAKENOS04
03C0: @0 = actor $PLAYER_ACTOR car
0407: create_coordinate @7 @8 @9 from_car @0 offset 0.0  -2.0  0.0
0362: remove_actor $PLAYER_ACTOR from_car_and_place_at  @7 @8  @9
04D7: lock_actor $PLAYER_ACTOR in_current_position  1
0715: put_player $PLAYER_CHAR in_RC_mode_in_car @0  ; on foot version
04D6: enable_rc_car_detonation  0  ; or opcode 048Ah
048A: enable_rc_car_detonation  0  ; or opcode 04D6h
0004: $SNAKERC =  1  ;; integer values
0002: jump SNAKENOS04

:SNAKENOS03B
00D6: if  1
0241:   player $PLAYER_CHAR in_remote_mode
0038:   $SNAKERC ==  1 ;; integer values
004D: jump_if_false SNAKENOS04
0484: @0 = player $PLAYER_CHAR rc_car
00AA: store_car @0 position_to @1 @2 @3
00D6: if  0
00E1:   key_pressed  0  10 ;; no
004D: jump_if_false SNAKENOS03C
020B: explode_car @0
020C: create_explosion_with_radius  10 at @1 @2 @3

:SNAKENOS03C
00D6: if  21
00E1:   key_pressed  0  15 ;; exit
0119:   car @0 wrecked
004D: jump_if_false SNAKENOS04
0004: $SNAKERC =  0  ;; integer values
04DB: exit_rc_mode  ; on foot version
04D7: lock_actor $PLAYER_ACTOR in_current_position  0
0001: wait  50 ms

:SNAKENOS03D
00D6: if  0
00E1:   key_pressed  0  18 ;; horn
004D: jump_if_false SNAKENOS04
00A1: put_actor $PLAYER_ACTOR at  @1 @2 @3

:SNAKENOS04
;;raise vehicle
00D6: if  2
00E1:   key_pressed  0  6 ;; handbrake
00E1:   key_pressed  0  4 ;; weapon 2
00E1:   key_pressed  0  17 ;; fire
004D: jump_if_false SNAKENOS05
00AA: store_car @0 position_to @1 @2 @3
00D6: if  0
01F3:   car @0 airborne
004D: jump_if_false SNAKENOS04B
000B: @3 +=  .5  ;; floating-point values
00AB: put_car @0 at @1  @2  @3
0002: jump SNAKENOS05

:SNAKENOS04B
000B: @3 +=  4.0  ;; floating-point values
00AB: put_car @0 at @1  @2  @3

:SNAKENOS05         
;;sunk car fix - sort of
00D6: if  1
02BF:   car @0 sunk
8241:   NOT   player $PLAYER_CHAR in_remote_mode
004D: jump_if_false SNAKENOS06
00D6: if  2
80DD:   NOT   actor $PLAYER_ACTOR driving_vehicle_type 447 ;; seaspar
80DD:   NOT   actor $PLAYER_ACTOR driving_vehicle_type 460 ;; skimmer
8038:   NOT    $SNVTYPE ==  5 ;; integer values
004D: jump_if_false SNAKENOS06
0247: request_model  539
038B: load_requested_models
00D6: if  0
0248:   model  539 available
004D: jump_if_false SNAKENOS06
00AA: store_car @0 position_to @1 @2 @3
0174: @4 = car @0 z_angle
0362: remove_actor $PLAYER_ACTOR from_car_and_place_at  @1 @2  @3
01C3: remove_references_to_car @0  ;; Like turning a car into any random car
00A5: @0 = create_car  539 at @1 @2 @3
0175: set_car @0 z_angle_to @4
036A: put_actor $PLAYER_ACTOR in_car @0
0249: release_model  539

:SNAKENOS06
00D6: if  21
001A:    3 > $SNVTYPE ;; integer values
00DD:   actor $PLAYER_ACTOR driving_vehicle_type 539 ;; vortex
004D: jump_if_false SNAKENOS07
00D6: if  4
00E1:   key_pressed  0  5 ;; look left
00E1:   key_pressed  0  7 ;; look right
00E1:   key_pressed  0  4 ;; weapon2
80E1:   NOT   key_pressed  0  6 ;; handbrake
80E1:   NOT   key_pressed  0  18 ;; horn
004D: jump_if_false SNAKENOS06B
06E9: request_car_component  1008
038B: load_requested_models
00D6: if  0
06EA:   car_component_available 1008 
004D: jump_if_false SNAKENOS08
06E7: $SNAKENITRO = add_car_component 1008 to_car @0 
06EB: release_car_component 1008

:SNAKENOS06B
00D6: if  4
00E1:   key_pressed  0  5 ;; look left
00E1:   key_pressed  0  7 ;; look right
00E1:   key_pressed  0  8 ;; next radio
80E1:   NOT   key_pressed  0  6 ;; handbrake
80E1:   NOT   key_pressed  0  18 ;; horn
004D: jump_if_false SNAKENOS06C
06E9: request_car_component  1010
038B: load_requested_models
00D6: if  0
06EA:   car_component_available 1010 
004D: jump_if_false SNAKENOS08
06E7: $SNAKENITRO = add_car_component 1010 to_car @0 
06EB: release_car_component 1010

:SNAKENOS06C
00D6: if  4
00E1:   key_pressed  0  5 ;; look left
00E1:   key_pressed  0  7 ;; look right
00E1:   key_pressed  0  9 ;; prev radio
80E1:   NOT   key_pressed  0  6 ;; handbrake
80E1:   NOT   key_pressed  0  18 ;; horn
004D: jump_if_false SNAKENOS07
06E9: request_car_component  1009
038B: load_requested_models
00D6: if  0
06EA:   car_component_available 1009 
004D: jump_if_false SNAKENOS08
06E7: $SNAKENITRO = add_car_component 1009 to_car @0 
06EB: release_car_component 1009

:SNAKENOS07
00D6: if  2
0038:   $SNVTYPE ==  1 ;; integer values
8039:   NOT   @6 ==  465 ;; rcraider
8039:   NOT   @6 ==  501 ;; rcgoblin
004D: jump_if_false SNAKENOS08
0788: enable_heli @0 magnet  1 
        
:SNAKENOS08
;;set NOS type
0871: init_jump_table $SNVTYPE total_jumps  7  0 SNAKENOS08B  0 SNAKENOS08B jumps  1 SNAKENOS08C  2 SNAKENOS08D  3 SNAKENOS08E  4 SNAKENOS08F  5 SNAKENOS08G  6 SNAKENOS08H 

:SNAKENOS08B
0089: @1 = $SWNOS1  ;; floating-point values only
0002: jump SNAKENOS09

:SNAKENOS08C
0089: @1 = $SWNOS2  ;; floating-point values only
0002: jump SNAKENOS09

:SNAKENOS08D
0089: @1 = $SWNOS3  ;; floating-point values only
0002: jump SNAKENOS09

:SNAKENOS08E
0089: @1 = $SWNOS4  ;; floating-point values only
0002: jump SNAKENOS09

:SNAKENOS08F
0089: @1 = $SWNOS5  ;; floating-point values only
0002: jump SNAKENOS09

:SNAKENOS08G
0089: @1 = $SWNOS6  ;; floating-point values only
0002: jump SNAKENOS09

:SNAKENOS08H
0089: @1 = $SWNOS7  ;; floating-point values only

:SNAKENOS09
;;NOS check
00D6: if  21
0021:   @1 >  3.0  ;; floating-point values
0023:   1.0 > @1  ;; floating-point values
004D: jump_if_false SNAKENOS09B
0007: @1 =  1.22  ;; floating-point values
0002: jump SNAKENOS09D

:SNAKENOS09B
00D6: if  0
00E1:   key_pressed  0  18 ;; horn
004D: jump_if_false SNAKENOS10
0087: @2 = @1  ;; floating-point values only
000F: @2 -=  1.0  ;; floating-point values
0013: @2 *=  100.0  ;; floating-point values 
0092: @2 = float_to_integer @2  
03F0:  1
0341:  1
03E4:  0
0348:  0
045A:  25.0 25.0 "NUMBER" @2
00D6: if  0
00E1:   key_pressed  0  5 ;; look left
004D: jump_if_false SNAKENOS09C
000F: @1 -=  .01  ;; floating-point values
00D6: if  0
0023:   1.0 > @1  ;; floating-point values
004D: jump_if_false SNAKENOS09D
0007: @1 =  2.99  ;; floating-point values
0002: jump SNAKENOS09D

:SNAKENOS09C
00D6: if  0
00E1:   key_pressed  0  7 ;; look right
004D: jump_if_false SNAKENOS10
000B: @1 +=  .01  ;; floating-point values
00D6: if  0
0021:   @1 >  3.0  ;; floating-point values
004D: jump_if_false SNAKENOS09D
0007: @1 =  1.0  ;; floating-point values

:SNAKENOS09D
0871: init_jump_table $SNVTYPE total_jumps  7  0 SNAKENOS09E  0 SNAKENOS09E jumps  1 SNAKENOS09F  2 SNAKENOS09G  3 SNAKENOS09H  4 SNAKENOS09I  5 SNAKENOS09J  6 SNAKENOS09K

:SNAKENOS09E
0088: $SWNOS1 = @1  ;; floating-point values only
0002: jump SNAKENOS10

:SNAKENOS09F
0088: $SWNOS2 = @1  ;; floating-point values only
0002: jump SNAKENOS10

:SNAKENOS09G
0088: $SWNOS3 = @1  ;; floating-point values only
0002: jump SNAKENOS10

:SNAKENOS09H
0088: $SWNOS4 = @1  ;; floating-point values only
0002: jump SNAKENOS10

:SNAKENOS09I
0088: $SWNOS5 = @1  ;; floating-point values only
0002: jump SNAKENOS10

:SNAKENOS09J
0088: $SWNOS6 = @1  ;; floating-point values only
0002: jump SNAKENOS10

:SNAKENOS09K
0088: $SWNOS7 = @1  ;; floating-point values only

:SNAKENOS10
00D6: if  1
8038:   NOT    $SNVTYPE ==  3 ;; bikes
8038:   NOT    $SNVTYPE ==  6 ;; trains
004D: jump_if_false SNAKENOS40
02E3: @4 = car @0 speed        
;;chopper/plane NOS
00D6: if  21
0038:   $SNVTYPE ==  1 ;; choppers
0038:   $SNVTYPE ==  2 ;; planes
004D: jump_if_false SNAKENOS11
00D6: if  0
80DD:   NOT   actor $PLAYER_ACTOR driving_vehicle_type 520 ;; hydra
004D: jump_if_false SNAKENOS11
00D6: if  1
00E1:   key_pressed  0  16 ;; gas
00E1:   key_pressed  0  6 ;; handbrake
004D: jump_if_false SNAKENOS10B
0002: jump SNAKENOS20

:SNAKENOS10B
;;chopper/plane reverse
00D6: if 1 
00E1:   key_pressed  0  14 ;; brake/reverse
00E1:   key_pressed  0  17 ;; fire
004D: jump_if_false SNAKENOS40
0002: jump SNAKENOS20B

:SNAKENOS11
0002: jump SNAKENOS16

:SNAKENOS16
;;car/motorbike/boat NOS
00D6: if  1
00E1:   key_pressed  0  16 ;; gas
00E1:   key_pressed  0  17 ;; fire
004D: jump_if_false SNAKENOS16B
0002: jump SNAKENOS20

:SNAKENOS16B
;;car/motorbike/boat reverse
00D6: if  2
00E1:   key_pressed  0  14 ;; brake/reverse
00E1:   key_pressed  0  17 ;; fire
80E1:   NOT   key_pressed  0  6 ;; handbrake
004D: jump_if_false SNAKENOS40
0002: jump SNAKENOS20B

:SNAKENOS20
00D6: if  0
0023:   30.0 > @4  ;; floating-point values
004D: jump_if_false SNAKENOS20C
0007: @4 =  40.0  ;; floating-point values
0002: jump SNAKENOS20C

:SNAKENOS20B
00D6: if  0
0021:   @4 >  -30.0  ;; floating-point values
004D: jump_if_false SNAKENOS20C
0007: @4 =  -25.0  ;; floating-point values

:SNAKENOS20C
006B: @4 *= @1  ;; floating-point values
04BA: set_car @0 speed_instantly @4

:SNAKENOS40
0002: jump SNAKENOS00
