Moving gate

From GTAMods Wiki
Revision as of 11:46, 18 April 2010 by Spaceeinstein (talk | contribs) (added alternate format)
Jump to navigation Jump to search

This is a code snippet of a moving gate in Sanny Builder's format and should work in GTA III, Vice City, and San Andreas. This code is based on the moving gates, including the sound it makes, in GTA III. Remember to read the tutorial on how to create a thread before proceeding to implement this code.

:GATE
0007: 4@ = 298.0 // initial x position
0007: 5@ = -313.6 // initial y position
0007: 6@ = 11.0 // initial z position
0007: 7@ = 304.0 // final x position
0007: 8@ = -313.6 // final y position
0007: 9@ = 11.0 // final z position
03A4: name_thread 'GATE' 
// you can use any object you want but make sure it's defined before creating it
029B: 0@ = init_object #ELECTRICGATE at 4@ 5@ 6@ 
01C7: remove_object_from_mission_cleanup_list 0@ 
0177: set_object 0@ z_angle_to 0.0 // remember to set the angle of your gate

:GATE_101
0001: wait 250 ms 
00D6: if 
0256:   player $PLAYER_CHAR defined 
004D: jump_if_false @GATE_472 
00D6: if 
// use other area check opcodes for more precision and options
00FE:   actor $PLAYER_ACTOR 0 4@ 5@ 6@ radius 5.0 5.0 5.0 
004D: jump_if_false @GATE_306 
00D6: if 
0039:   1@ == 0 
004D: jump_if_false @GATE_189 
//018C: play_sound 92 at 4@ 5@ 6@ // uncomment for III
//018C: play_sound 3 at 4@ 5@ 6@ // uncomment for VC
//097B: play_audio_at_object 0@ event 1100 // uncomment for SA
0006: 1@ = 1 

:GATE_189
00D6: if 
834E:   not move_object 0@ to 7@ 8@ 9@ speed 0.1 0.1 0.0 flag 0 
004D: jump_if_false @GATE_242 
0001: wait 0 ms 
0002: jump @GATE_189 

:GATE_242
00D6: if 
0039:   2@ == 1 
004D: jump_if_false @GATE_274 
0006: 3@ = 0 
0006: 2@ = 0 

:GATE_274
00D6: if 
0039:   3@ == 0 
004D: jump_if_false @GATE_299 
//018C: play_sound 93 at 7@ 8@ 9@ // uncomment for III
//018C: play_sound 3 at 7@ 8@ 9@ // uncomment for VC
//097B: play_audio_at_object 0@ event 1101 // uncomment for SA
0006: 3@ = 1 // integer values 

:GATE_299
0002: jump @GATE_472 

:GATE_306
00D6: if 
0039:   1@ == 1 
004D: jump_if_false @GATE_324 
//018C: play_sound 92 at 7@ 8@ 9@ // uncomment for III
//018C: play_sound 3 at 7@ 8@ 9@ // uncomment for VC
//097B: play_audio_at_object 0@ event 1100 // uncomment for SA

:GATE_324
00D6: if 
834E:   not move_object 0@ to 4@ 5@ 6@ speed 0.1 0.1 0.0 flag 1 
004D: jump_if_false @GATE_377 
0001: wait 0 ms 
0002: jump @GATE_324 

:GATE_377
01BB: store_object 0@ position_to 10@ 11@ 12@ 
00D6: if 
0039:   3@ == 1 
004D: jump_if_false @GATE_465 
0006: 2@ = 1 
00D6: if and
0045:   10@ == 4@ 
0045:   11@ == 5@ 
0045:   12@ == 6@ 
004D: jump_if_false @GATE_465 
//018C: play_sound 93 at 4@ 5@ 6@ // uncomment for III
//018C: play_sound 3 at 4@ 5@ 6@ // uncomment for VC
//097B: play_audio_at_object 0@ event 1101 // uncomment for SA
0006: 3@ = 0 
0006: 2@ = 0 

:GATE_465
0006: 1@ = 0 

:GATE_472
0002: jump @GATE_101

A direct copy and paste will create a moving gate at the Spand Express company in Vice City.

Alternate format

The following code is exactly the same as the code above. It is just formatted differently.

:GATE
0007: 4@ = 298.0 // initial x position
0007: 5@ = -313.6 // initial y position
0007: 6@ = 11.0 // initial z position
0007: 7@ = 304.0 // final x position
0007: 8@ = -313.6 // final y position
0007: 9@ = 11.0 // final z position
03A4: name_thread 'GATE' 
// you can use any object you want but make sure it's defined before creating it
029B: 0@ = init_object #ELECTRICGATE at 4@ 5@ 6@ 
01C7: remove_object_from_mission_cleanup_list 0@ 
0177: set_object 0@ z_angle_to 0.0 // remember to set the angle of your gate
var
4@ : float
5@ : float
6@ : float
10@ : float
11@ : float
12@ : float
end
while true
    wait 250 ms
    if
        0256:   player $PLAYER_CHAR defined
    then
        if
            00FE:   actor $PLAYER_ACTOR 0 4@ 5@ 6@ radius 5.0 5.0 5.0
        then
            if
                1@ == 0
            then
                //018C: play_sound 92 at 4@ 5@ 6@ // uncomment for III
                //018C: play_sound 3 at 4@ 5@ 6@ // uncomment for VC
                //097B: play_audio_at_object 0@ event 1100 // uncomment for SA
                1@ = 1
            end
            while if 834E:   not move_object 0@ to 7@ 8@ 9@ speed 0.1 0.1 0.0 flag 0
                wait 0 ms
            end
            if
                2@ == 1
            then
                3@ = 0
                2@ = 0
            end
            if
                3@ == 0
            then
                //018C: play_sound 93 at 7@ 8@ 9@ // uncomment for III
                //018C: play_sound 3 at 7@ 8@ 9@ // uncomment for VC
                //097B: play_audio_at_object 0@ event 1101 // uncomment for SA
                3@ = 1
            end
        else
            if
                1@ ==1
            then
                //018C: play_sound 92 at 7@ 8@ 9@ // uncomment for III
                //018C: play_sound 3 at 7@ 8@ 9@ // uncomment for VC
                //097B: play_audio_at_object 0@ event 1100 // uncomment for SA
            end
            while if 834E:   not move_object 0@ to 4@ 5@ 6@ speed 0.1 0.1 0.0 flag 1
                wait 0 ms
            end
            01BB: store_object 0@ position_to 10@ 11@ 12@
            if
                3@ == 1
            then
                2@ = 1
                if
                    10@ == 4@
                    11@ == 5@
                    12@ == 6@
                then
                    //018C: play_sound 93 at 4@ 5@ 6@ // uncomment for III
                    //018C: play_sound 3 at 4@ 5@ 6@ // uncomment for VC
                    //097B: play_audio_at_object 0@ event 1101 // uncomment for SA
                    3@ = 0
                    2@ = 0
                end
                1@ = 0
            end                
        end
    end
end