Difference between revisions of "Moving gate"

From GTAMods Wiki
Jump to navigation Jump to search
(New page: This is a code snippet of a moving gate. This code is in Sanny Builder's format and should work in GTA III, Vice City, and San Andreas. This code is based on the moving gat...)
 
 
(6 intermediate revisions by the same user not shown)
Line 1: Line 1:
This is a code snippet of a moving gate. This code is in [[Sanny Builder]]'s format and should work in [[GTA III]], [[Vice City]], and [[San Andreas]]. This code is based on the moving gates 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 valid
0007: 6@ = 11.0 // initial z position
+
                      //  use object's IDE number in CLEO instead
0007: 7@ = 304.0 // final x position
+
INITI_X = 298.0       // initial x position
0007: 8@ = -313.6 // final y position
+
INITI_Y = -313.6       // initial y position
0007: 9@ = 11.0 // final z position
+
INITI_Z = 11.0         // initial z position
03A4: name_thread 'GATE'
+
ANGLE = 0.0            // angle of your gate
// you can use any object you want but make sure it's defined before creating it
+
FINAL_X = 304.0       // final x position
029B: 0@ = init_object #ELECTRICGATE at 4@ 5@ 6@
+
FINAL_Y = -313.6       // final y position
01C7: remove_object_from_mission_cleanup_list 0@
+
FINAL_Z = 11.0         // final z position
0177: set_object 0@ z_angle_to 0.0 // remember to set the angle of your gate
 
  
:GATE_101
+
gate_sfx1 = 1@
0001: wait 1000 ms
+
not_clunked_yet = 2@
00D6: if
+
gate_sfx2 = 3@
0256:  player $PLAYER_CHAR defined
+
objectx = 4@
004D: jump_if_false @GATE_472
+
objecty = 5@
00D6: if
+
objectz = 6@
// use other area check opcodes for more precision and options
+
end
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@  
 
0006: 1@ = 1
 
  
:GATE_189
+
// create gate object
00D6: if
+
029B: 0@ = init_object OBJECT at INITI_X INITI_Y INITI_Z
834E:   not move_object 0@ to 7@ 8@ 9@ speed 0.1 0.1 0.0 flag 0
+
01C7: remove_object_from_mission_cleanup_list 0@
004D: jump_if_false @GATE_242
+
0177: set_object 0@ z_angle_to ANGLE
0001: wait 0 ms
 
0002: jump @GATE_189
 
  
:GATE_242
+
while true
00D6: if  
+
    wait 250 ms
00392@ == 1
+
    if
004D: jump_if_false @GATE_274
+
        0256:   player $PLAYER_CHAR defined
0006: 3@ = 0
+
    then
0006: 2@ = 0  
+
        if
 
+
            // use other area check opcodes for more precision and options
:GATE_274
+
            00FEactor $PLAYER_ACTOR in_sphere 0 near_point INITI_X INITI_Y INITI_Z radius 5.0 5.0 5.0
00D6: if  
+
        then
0039:  3@ == 0  
+
            if
004D: jump_if_false @GATE_299
+
                gate_sfx1 == 0
//018C: play_sound 93 at 7@ 8@ 9@
+
            then
0006: 3@ = 1 // integer values
+
                //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
:GATE_299
+
                //097B: play_audio_at_object 0@ event 1100      // uncomment for SA
0002: jump @GATE_472
+
                gate_sfx1 = 1
 
+
            end
:GATE_306
+
            while if 834E:   not move_object 0@ to FINAL_X FINAL_Y FINAL_Z speed 0.1 0.1 0.0 flag 0
00D6: if  
+
                wait 0 ms
0039:  1@ == 1  
+
            end
004D: jump_if_false @GATE_324
+
            if
//018C: play_sound 92 at 7@ 8@ 9@
+
                not_clunked_yet == 1
 
+
            then
:GATE_324
+
                gate_sfx2 = 0
00D6: if  
+
                not_clunked_yet = 0
834E:  not move_object 0@ to 4@ 5@ 6@ speed 0.1 0.1 0.0 flag 1  
+
            end
004D: jump_if_false @GATE_377
+
            if
0001: wait 0 ms  
+
                gate_sfx2 == 0
0002: jump @GATE_324
+
            then
 
+
                //018C: play_sound 93 at FINAL_X FINAL_Y FINAL_Z // uncomment for III
:GATE_377
+
                //018C: play_sound 3 at FINAL_X FINAL_Y FINAL_Z  // uncomment for VC
01BB: store_object 0@ position_to 10@ 11@ 12@
+
                //097B: play_audio_at_object 0@ event 1101      // uncomment for SA
00D6: if  
+
                gate_sfx2 = 1
0039:  3@ == 1  
+
            end
004D: jump_if_false @GATE_465
+
        else
0006: 2@ = 1  
+
            if
00D6: if and
+
                gate_sfx1 == 1
0045:  10@ == 7@
+
            then
0045:  11@ == 8@
+
                //018C: play_sound 92 at FINAL_X FINAL_Y FINAL_Z // uncomment for III
0045:  12@ == 9@
+
                //018C: play_sound 3 at FINAL_X FINAL_Y FINAL_Z  // uncomment for VC
004D: jump_if_false @GATE_465
+
                //097B: play_audio_at_object 0@ event 1100      // uncomment for SA
//018C: play_sound 93 at 4@ 5@ 6@
+
            end
0006: 3@ = 0  
+
            while if 834E:  not move_object 0@ to INITI_X INITI_Y INITI_Z speed 0.1 0.1 0.0 flag 1
0006: 2@ = 0  
+
                wait 0 ms
 
+
            end
:GATE_465
+
            01BB: store_object 0@ position_to objectx objecty objectz
0006: 1@ = 0  
+
            if
 
+
                gate_sfx2 == 1
:GATE_472
+
            then
0002: jump @GATE_101
+
                not_clunked_yet = 1
 +
                if and
 +
                    objectx == INITI_X
 +
                    objecty == INITI_Y
 +
                    objectz == 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
 +
                    gate_sfx2 = 0
 +
                    not_clunked_yet = 0
 +
                end
 +
                gate_sfx1 = 0
 +
            end
 +
        end
 +
    end
 +
end
 
</source>
 
</source>
A direct copy and paste will create a moving gate at the Spand Express company in Vice City.
 
 
[[Category:Code Snippets]]
 
[[Category:Code Snippets]]

Latest revision as of 00:14, 16 March 2012

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 valid
                       //  use object's IDE number in CLEO instead
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

gate_sfx1 = 1@
not_clunked_yet = 2@
gate_sfx2 = 3@
objectx = 4@
objecty = 5@
objectz = 6@
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
                gate_sfx1 == 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
                gate_sfx1 = 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
                not_clunked_yet == 1
            then
                gate_sfx2 = 0
                not_clunked_yet = 0
            end
            if
                gate_sfx2 == 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
                gate_sfx2 = 1
            end
        else
            if
                gate_sfx1 == 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 objectx objecty objectz
            if
                gate_sfx2 == 1
            then
                not_clunked_yet = 1
                if and
                    objectx == INITI_X
                    objecty == INITI_Y
                    objectz == 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
                    gate_sfx2 = 0
                    not_clunked_yet = 0
                end
                gate_sfx1 = 0
            end
        end
    end
end