Difference between revisions of "Moving gate"

From GTAMods Wiki
Jump to navigation Jump to search
m
Line 1: Line 1:
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 [[Create a thread|how to create a thread]] before proceeding to implement this code.
+
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 [[Create a thread|how to create a thread]] before proceeding to implement this code.
 
<source lang="scm" line>
 
<source lang="scm" line>
:GATE
+
// set constants
0007: 4@ = 298.0 // initial x position
+
const
0007: 5@ = -313.6 // initial y position
+
OBJECT = #ELECTRICGATE // you can use any object you want but make sure it's defined before creating it
0007: 6@ = 11.0 // initial z position
+
INITI_X = 298.0       // initial x position
0007: 7@ = 304.0 // final x position
+
INITI_Y = -313.6       // initial y position
0007: 8@ = -313.6 // final y position
+
INITI_Z = 11.0         // initial z position
0007: 9@ = 11.0 // final z position
+
ANGLE = 0.0            // angle of your gate
03A4: name_thread 'GATE'
+
FINAL_X = 304.0       // final x position
// you can use any object you want but make sure it's defined before creating it
+
FINAL_Y = -313.6       // final y position
029B: 0@ = init_object #ELECTRICGATE at 4@ 5@ 6@
+
FINAL_Z = 11.0         // final z position
01C7: remove_object_from_mission_cleanup_list 0@
+
end
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 in_sphere 0 near_point 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
+
// create gate object
00D6: if
+
029B: 0@ = init_object OBJECT at INITI_X INITI_Y INITI_Z
0039:  2@ == 1
+
01C7: remove_object_from_mission_cleanup_list 0@
004D: jump_if_false @GATE_274
+
0177: set_object 0@ z_angle_to ANGLE
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
 
</source>
 
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.
 
<source lang="scm" line>
 
:GATE
 
4@ = 298.0 // initial x position
 
5@ = -313.6 // initial y position
 
6@ = 11.0 // initial z position
 
7@ = 304.0 // final x position
 
8@ = -313.6 // final y position
 
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
 
while true
 
     wait 250 ms
 
     wait 250 ms
Line 127: Line 25:
 
         if
 
         if
 
             // use other area check opcodes for more precision and options
 
             // use other area check opcodes for more precision and options
             00FE:  actor $PLAYER_ACTOR in_sphere 0 near_point 4@ 5@ 6@ radius 5.0 5.0 5.0
+
             00FE:  actor $PLAYER_ACTOR in_sphere 0 near_point INITI_X INITI_Y INITI_Z radius 5.0 5.0 5.0
 
         then
 
         then
 
             if
 
             if
 
                 1@ == 0
 
                 1@ == 0
 
             then
 
             then
                 //018C: play_sound 92 at 4@ 5@ 6@ // uncomment for III
+
                 //018C: play_sound 92 at INITI_X INITI_Y INITI_Z // uncomment for III
                 //018C: play_sound 3 at 4@ 5@ 6@ // uncomment for VC
+
                 //018C: play_sound 3 at INITI_X INITI_Y INITI_Z  // uncomment for VC
                 //097B: play_audio_at_object 0@ event 1100 // uncomment for SA
+
                 //097B: play_audio_at_object 0@ event 1100       // uncomment for SA
 
                 1@ = 1
 
                 1@ = 1
 
             end
 
             end
             while if 834E:  not move_object 0@ to 7@ 8@ 9@ speed 0.1 0.1 0.0 flag 0
+
             while if 834E:  not move_object 0@ to FINAL_X FINAL_Y FINAL_Z speed 0.1 0.1 0.0 flag 0
 
                 wait 0 ms
 
                 wait 0 ms
 
             end
 
             end
Line 149: Line 47:
 
                 3@ == 0
 
                 3@ == 0
 
             then
 
             then
                 //018C: play_sound 93 at 7@ 8@ 9@ // uncomment for III
+
                 //018C: play_sound 93 at FINAL_X FINAL_Y FINAL_Z // uncomment for III
                 //018C: play_sound 3 at 7@ 8@ 9@ // uncomment for VC
+
                 //018C: play_sound 3 at FINAL_X FINAL_Y FINAL_Z  // uncomment for VC
                 //097B: play_audio_at_object 0@ event 1101 // uncomment for SA
+
                 //097B: play_audio_at_object 0@ event 1101       // uncomment for SA
 
                 3@ = 1
 
                 3@ = 1
 
             end
 
             end
Line 158: Line 56:
 
                 1@ ==1
 
                 1@ ==1
 
             then
 
             then
                 //018C: play_sound 92 at 7@ 8@ 9@ // uncomment for III
+
                 //018C: play_sound 92 at FINAL_X FINAL_Y FINAL_Z // uncomment for III
                 //018C: play_sound 3 at 7@ 8@ 9@ // uncomment for VC
+
                 //018C: play_sound 3 at FINAL_X FINAL_Y FINAL_Z  // uncomment for VC
                 //097B: play_audio_at_object 0@ event 1100 // uncomment for SA
+
                 //097B: play_audio_at_object 0@ event 1100       // uncomment for SA
 
             end
 
             end
             while if 834E:  not move_object 0@ to 4@ 5@ 6@ speed 0.1 0.1 0.0 flag 1
+
             while if 834E:  not move_object 0@ to INITI_X INITI_Y INITI_Z speed 0.1 0.1 0.0 flag 1
 
                 wait 0 ms
 
                 wait 0 ms
 
             end
 
             end
             01BB: store_object 0@ position_to 10@ 11@ 12@
+
             01BB: store_object 0@ position_to 4@ 5@ 6@
 
             if
 
             if
 
                 3@ == 1
 
                 3@ == 1
Line 171: Line 69:
 
                 2@ = 1
 
                 2@ = 1
 
                 if and
 
                 if and
                     10@ == 4@
+
                     4@ == INITI_X
                     11@ == 5@
+
                     5@ == INITI_Y
                     12@ == 6@
+
                     6@ == INITI_Z
 
                 then
 
                 then
                     //018C: play_sound 93 at 4@ 5@ 6@ // uncomment for III
+
                     //018C: play_sound 93 at INITI_X INITI_Y INITI_Z // uncomment for III
                     //018C: play_sound 3 at 4@ 5@ 6@ // uncomment for VC
+
                     //018C: play_sound 3 at INITI_X INITI_Y INITI_Z  // uncomment for VC
                     //097B: play_audio_at_object 0@ event 1101 // uncomment for SA
+
                     //097B: play_audio_at_object 0@ event 1101       // uncomment for SA
 
                     3@ = 0
 
                     3@ = 0
 
                     2@ = 0
 
                     2@ = 0
 
                 end
 
                 end
 
                 1@ = 0
 
                 1@ = 0
             end              
+
             end
 
         end
 
         end
 
     end
 
     end

Revision as of 00:09, 22 November 2011

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.

// set constants
const
OBJECT = #ELECTRICGATE // you can use any object you want but make sure it's defined before creating it
INITI_X = 298.0        // initial x position
INITI_Y = -313.6       // initial y position
INITI_Z = 11.0         // initial z position
ANGLE = 0.0            // angle of your gate
FINAL_X = 304.0        // final x position
FINAL_Y = -313.6       // final y position
FINAL_Z = 11.0         // final z position
end

// create gate object
029B: 0@ = init_object OBJECT at INITI_X INITI_Y INITI_Z
01C7: remove_object_from_mission_cleanup_list 0@
0177: set_object 0@ z_angle_to ANGLE

while true
    wait 250 ms
    if
        0256:   player $PLAYER_CHAR defined
    then
        if
            // use other area check opcodes for more precision and options
            00FE:   actor $PLAYER_ACTOR in_sphere 0 near_point INITI_X INITI_Y INITI_Z radius 5.0 5.0 5.0
        then
            if
                1@ == 0
            then
                //018C: play_sound 92 at INITI_X INITI_Y INITI_Z // uncomment for III
                //018C: play_sound 3 at INITI_X INITI_Y INITI_Z  // 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 FINAL_X FINAL_Y FINAL_Z 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 FINAL_X FINAL_Y FINAL_Z // uncomment for III
                //018C: play_sound 3 at FINAL_X FINAL_Y FINAL_Z  // 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 FINAL_X FINAL_Y FINAL_Z // uncomment for III
                //018C: play_sound 3 at FINAL_X FINAL_Y FINAL_Z  // uncomment for VC
                //097B: play_audio_at_object 0@ event 1100       // uncomment for SA
            end
            while if 834E:   not move_object 0@ to INITI_X INITI_Y INITI_Z speed 0.1 0.1 0.0 flag 1
                wait 0 ms
            end
            01BB: store_object 0@ position_to 4@ 5@ 6@
            if
                3@ == 1
            then
                2@ = 1
                if and
                    4@ == INITI_X
                    5@ == INITI_Y
                    6@ == INITI_Z
                then
                    //018C: play_sound 93 at INITI_X INITI_Y INITI_Z // uncomment for III
                    //018C: play_sound 3 at INITI_X INITI_Y INITI_Z  // 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