Moving gate
Revision as of 06:05, 22 April 2010 by Spaceeinstein (talk | contribs)
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 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
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
// 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
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 and
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