Jump to content

My Mission Script Tutorial


JAB HacksouL

Recommended Posts

I have been using Sanny Builder 3.04 to edit and modify the MAIN.SCM since late August. Yes, a whole 2 months! Many of you are now scratching you head saying wtf is this JABhacksoul going to teach me? I have been using it forever!!

Well, put your ego on hold and check out my tutorial and you just might see something you like. This is NOT a Sanny or CLEO tutorial but I will be using Sanny as the editor compiler. I will try to stick with the original SASCM and not use the Sanny Opcodes although they operate much the same.

Part 1 - Setting up your work area.

After installing Sanny Builder, I have myself a complete copy of my GTA SA on in a seperate folder named: "M:\Rockstar Games\GTA San Andreas Modded" so my workarea is set to "M:\Rockstar Games\GTA San Andreas Modded\data\script" and it might sound like overkill but inside this directory I have created a folder called Backup and it contains an original SCM and SCRIPT.IMG

Next I copied the stripped.txt from the "Sanny Builder 3\data\sa" folder and made it read only. I made a text file called snippets.txt where I keep any code I find useful on the internet forums. Now I can load the stripped main and start a new file with it. When making a new file use a name that allows you to remember the mission. Avoid using generic names like Mission05.

Part 2 - Study the MAIN.SCM

Decompile the MAIN.SCM and keep it available to use as a study guide. Let's look at the various parts and layout.

Part A - The Defined Objects

DEFINE OBJECTS 389
DEFINE OBJECT SANNY BUILDER 3.04	  
DEFINE OBJECT INFO					 // Object number -1
DEFINE OBJECT KEYCARD				  // Object number -2
DEFINE OBJECT AD_FLATDOOR			  // Object number -3

This is models that are being defined as objects in the game. For example the first line tells the program there are 389 objects in this list. The object INFO are those little question mark icon pick ups and they are assigned an object number of 1 by the location in this listing. Adding some unknown object to the top would have the effect of shifting all the objects value up one. So if you plan to add any objects it should be done at the bottom.

Down at line number 759 you can see this:

0107: $2706 = create_object #AD_FLATDOOR at 1833.36 -1995.45 12.5 
or
$2706 = Object.Create(#AD_FLATDOOR, 1833.36, -1995.45, 12.5)

Where they install about 12 of these flatdoors. Without this code certain doors will be missing in the game.

Part B - The Defined Missions.

DEFINE MISSIONS 135
DEFINE MISSION 0 AT @INITIAL		   // Initial 1
DEFINE MISSION 1 AT @INITIL2		   // Initial 2
DEFINE MISSION 2 AT @INTRO			 // Intro
DEFINE MISSION 3 AT @NONE			  // Video Game: They Crawled From Uranus

These are the games 135 missions and you will notice they start numbering them at zero so they end at 134. The first two missions are not real missions at all they set up a bunch of variables and stats, place guns and other pickups, and just get the game up to start. Mission 2 is ran automatically when you start begin a new game. This is where CJ gets off his plane and is grabbed by Tenpenny. Then you must bike home.

You will notice the next mission is a mini game. Everything you do from shopping, getting a tat, going to the bar and shooting pool are all missions.

Part C - External Script Missions.

DEFINE EXTERNAL_SCRIPTS 78 // Use -1 in order not to compile AAA script
DEFINE SCRIPT PLAYER_PARACHUTE AT @PLCHUTE // 0
DEFINE SCRIPT PARACHUTE AT @PARACH	 // 1
DEFINE SCRIPT BCESAR2 AT @BCESAR2	  // 2
DEFINE SCRIPT BCESAR3 AT @COKEC		// 3

These are just like the missions above but are compiled to the SCRIPT.IMG as a bunch of individual scm files. For example the parachute is a mini mission and is placed outside the MAIN.SCM read from the SCRIPT.IMG These are some basic things you do from going to the gym or getting a phone call from Cesar about the drugs.

Part D - The MAIN thread or loop

//-------------MAIN---------------
03A4: name_thread 'MAIN'  
016A: fade 0 time 0 
042C: set_total_missions_to 147 
030D: set_max_progress 187 
0997: set_total_respect_points_to 1339 
01F0: set_max_wanted_level_to 6

The main thread starts around line 617 and has a thread ID of 'MAIN' just like a mission thread with one exception; there is no call to end this thread. It continues to loop forever. Next the fade 0 is to make the screen turn black and the time it takes to turn black in thousandths of a second so 1000 is one second. To fade up from black we just say fade 1 and give the time. Then it goes on to set up the stats.

Part E - The Rest

The missions follow the main and are accessed by the code inside the main. Accessing the External scripts are slightly different than the missions contained inside the main.scm but now let's look at a stripped scm.

Part 3 - The Stripped Main

DEFINE MISSIONS 0
//DEFINE MISSION {ID} 0 AT {LABEL} @
DEFINE EXTERNAL_SCRIPTS 0 // Use -1 in order not to compile AAA script
//DEFINE SCRIPT {NAME}  AT {LABEL} @
DEFINE UNKNOWN_EMPTY_SEGMENT 0
DEFINE UNKNOWN_THREADS_MEMORY 0

{$VERSION 3.0.0000}
var
$PLAYER_CHAR: Player
end // var 
03A4: name_thread 'MAIN' 
01F0: set_max_wanted_level_to 6 
0111: toggle_wasted_busted_check 0 
00C0: set_current_time_hours_to 8 minutes_to 0 
04E4: unknown_refresh_game_renderer_at 2488.56 -1666.84 
03CB: set_rendering_origin_at 2488.56 -1666.84 13.38 
0053: $PLAYER_CHAR = create_player #NULL at 2488.56 -1666.84 13.38 
01F5: $PLAYER_ACTOR = create_player_actor $PLAYER_CHAR 
07AF: $PLAYER_GROUP = player $PLAYER_CHAR group 
0373: set_camera_directly_behind_player 
01B6: set_weather 0 
0001: wait 0 ms 
087B: set_player $PLAYER_CHAR clothes_texture "PLAYER_FACE" model "HEAD" body_part 1 
087B: set_player $PLAYER_CHAR clothes_texture "JEANSDENIM" model "JEANS" body_part 2 
087B: set_player $PLAYER_CHAR clothes_texture "SNEAKERBINCBLK" model "SNEAKER" body_part 3 
087B: set_player $PLAYER_CHAR clothes_texture "VEST" model "VEST" body_part 0 
070D: rebuild_player $PLAYER_CHAR 
01B4: toggle_player $PLAYER_CHAR can_move 1 
016A: fade 1 time 0 
04BB: select_interior 0 
0629: change_integer_stat 181 to 4 
016C: restart_if_wasted_at 2027.77 -1420.52 15.99 angle 137.0 town_number 0 
016D: restart_if_busted_at 1550.68 -1675.49 14.51 angle 90.0 town_number 0 
0180: set_on_mission_flag_to $ONMISSION 
0004: $DEFAULT_WAIT_TIME = 250
03E6: remove_text_box 

// put your create_thread commands here

:MAIN_LOOP
0001: wait $DEFAULT_WAIT_TIME ms
00BF: $TIME_HOURS = current_time_hours, $TIME_MINS = current_time_minutes
0002: jump @MAIN_LOOP

That's it, there are some things I want to point out. That op code 087B will dress up CJ otherwise if you left this out he will be in his underwear. The obscure line that reads:

0629: change_integer_stat 181 to 4

Makes it ok to run all over the 4 cities without getting stars on your head. Lowering the value will make travel a pain. If you play this, you will quickly notice how much the MAIN.SCM does in the game. There will be no pickups so the only weapons are the ones the cops have. There are no bribes but you can beat up enough peds to collect $100 and drive to a paint and spray to get the stars off. But that's is about it. No gangs, nothing to buy, can't even save, and no real money. Not much fun.

Part 4 - Building your first mission from the stripped main.

Part A - Save Game Pickup

I am just going to add most of my commands below the stripped main above. In this simple example we are going to make a save game pick up, a weapon pickup, and interact with a ped.

Starting above the line: ":MAIN_LOOP" I am going to add this:

0213: $My_Save = create_pickup #PICKUPSAVE type 15 at 230.5896 74.5512 1005.0391 
0570: $Marker_Save = create_asset_radar_marker_with_icon 35 at 1560.68 -1675.49 14.51

The first line created a pickup item out of model #PICKUPSAVE this is the spinning blue diskette model you could use any model like a cop bribe. Type 15 will respawn the 3 numbers that follow are the X Y Z location of the LSPD near the desks.

The second line is a radar icon value 35 makes the disk (safe house) appear on the radar. Notice the Z value of the interior is over 1000 high? The interiors are nicknamed "Heavens" because you are not really inside the building at all. When you fade out and in the game teleports you not only to a new location but another dimension of the game. When you enter an interior your radar goes blank and all the icons disappear.

Just because you made a pickup and a way to locate it the game won't save just yet. Now inside the main loop just above the line: 0002: jump @MAIN_LOOP add this:

00D6: if 
0214:   pickup $My_Save picked_up 
004D: jump_if_false @MAIN_SAVE_END
03D8: show_save_screen 
:MY_SAVE_CHECK
0001: wait 0 ms 
00D6: if 
83D9:   not save_done 
004D: jump_if_false @MAIN_SAVE_END
0002: jump @MY_SAVE_CHECK
:MAIN_SAVE_END

The first 3 lines ask if the player has picked up the $My_Save item then it shows the save game screen. The last part simply waits until the game is saved or the user cancels. The game then saves at this point with the player's location and stats.

Part B - Weapon Pickup

Back up where we added the Save Game pickup we add this line:

0213: $My_Gun = create_pickup #DESERT_EAGLE type 15 at 508.0762 -71.8294 998.7578

This places the Desert Eagle pistol inside the Bar. You will find it near the booth on the left. Again this doesn't allow you to have the gun.

In the main loop add:

00D6: if 
0214:   pickup $My_Gun picked_up 
004D: jump_if_false @MAIN_GUN_END
0247: load_model #DESERT_EAGLE
038B: load_requested_models 
:MY_GUN_CHECK
0001: wait 0 ms 
00D6: if 
0248:   model #DESERT_EAGLE available 
004D: jump_if_false @MY_GUN_CHECK
01B2: give_actor $PLAYER_ACTOR weapon 24 ammo 85  
:MAIN_GUN_END

Now at this point you can actually save the game and get a real cool pistol in a bar with 85 rounds of ammo. Now that you picked up a weapon the mission will be simple "Kill a Pedestrian".

We are going to make a standard mission marker below the line you added the gun pickup.

02A7: $Marker_Mission = create_icon_marker_and_sphere 47 at 2073.5681 -1620.5205 13.5469
$ONMISSION = 0

Mission marker OPcode 02A7 shows the icon on the radar at all times until you begin the mission. Again the fist number is the icon design and the 3 remaining are X Y and Z location. 47 is Zero's Mission but I could have used any.

Now in the main loop we cut to the mission thread like this:

00D6: if and
0038:   $ONMISSION == 0 
00ED:   actor $PLAYER_ACTOR 0 near_point 2073.5681 -1620.5205 radius 1.0 1.0 on_foot 
004D: jump_if_false @MAIN_MISSION_END 
0417: start_mission 0 
:MAIN_MISSION_END

Here two conditions are checked if you omit the on mission check then the mission will run over and over and you could end up with a clone army just prior to the game crashing. The second check is to see if the actor is standing in the mission sphere at X Y.

Up at the very top edit this:

DEFINE MISSIONS 0
//DEFINE MISSION {ID} 0 AT {LABEL} @

to this:

DEFINE MISSIONS 1
DEFINE MISSION 0 AT @KILLONE

At the very bottom we add the new thread:

:KILLONE 
03A4: name_thread 'KILLONE'

This is the first mission thread and threads run with each other. The mission loop is still looping and during this time you can still go to the bar get the gun or go to the police station and save. But remember the game only saves the stats and not the mission.

Now we add this:

$ONMISSION = 1 
:KILL_ME
0001: wait 0 ms
04C4: store_coords_to 1@ 2@ 3@ from_actor $PLAYER_ACTOR with_offset  0.0  0.0  0.0
08E5: get_actor_in_sphere 1@ 2@ 3@ radius 150.0 handle_as 24@
00D6: if 
0019:   24@ > 0
004D: jump_if_false @KILL_ME 
0187: 39@ = create_marker_above_actor 24@
07E0: set_marker 39@ type_to 0
0165: set_marker 39@ color_to 0

The $ONMISSION = 1 line shuts down that start mission otherwise we could have 100 missions running. We get the location of the play and store them in 1@ 2@ and 3@ then look for an ped with a model value greater than 0. 24@ becomes our target and a RED marker is placed over his head. The type 0 is an enemy threat. Type 1 is a friend.

 
:KILL_LOOP
0001: wait 0 ms 
00D6: if 
0112:   wasted_or_busted  
004D: jump_if_false @KILL_CHECK
0002: jump @KILL_END

This checks to see if you got killed or arrested on the mission.

:KILL_CHECK
00D6: if 
0118:   actor 24@ dead 
004D: jump_if_false @KILL_LOOP

Meanwhile this checks to see if your target is alive

 
:KILL_SUCCESS
01E3: show_text_1number_styled GXT 'M_PASS' number 2000 time 5000 style 1 
0109: player $PLAYER_CHAR money += 2000 
0164: disable_marker $Marker_Mission
0164: disable_marker 39@

This shuts down the markers and gives you $2000.

:KILL_END
00D8: mission_cleanup 
004E: end_thread

And finally we end the mission by cleaning it up and destroying the thread. Try compiling what you have and above all else study the code. I am attaching the working demo.txt to this tutorial. I hopes this helps you understand the San Andreas mission code.

demo.zip

JAB B)

Edited by JAB HacksouL
Link to comment
Share on other sites

When do you plan to be the CEO of R*?

This clears up a few questions I had about the syntax & when time allows I'll be able to use this for some of my own

mods. Weapons & vehicles I have pretty much figured out but now I see how to make a dealer drop better weapons

(already have them dropping about $12k).

Keep at it, you obviously have some talent.

Link to comment
Share on other sites

When do you plan to be the CEO of R*?

This clears up a few questions I had about the syntax & when time allows I'll be able to use this for some of my own

mods. Weapons & vehicles I have pretty much figured out but now I see how to make a dealer drop better weapons

(already have them dropping about $12k).

Keep at it, you obviously have some talent.

Thanks for your kind words. No plans for R* yet, but my immediate plan is to get the Tenpenny Stories completed by end of November or early December. That will be open source ;) meaning I will include my scm source code with notes. The next project is for 2009 I want to make an SCM that makes the source code (if that is possible). In short you would use the game itself to make the mod. Stand CJ where you want to place an object, pickup or ped and press a key. The code you need would appear on the screen and you could Alt+TAB to Sanny and plug it in. It would work even better if you ran a windowed mod. I don't believe there is a way for the SCM to write the file but that would be cool.

JAB B)

Link to comment
Share on other sites

Thanks for your kind words. No plans for R* yet, but my immediate plan is to get the Tenpenny Stories completed by end of November or early December. That will be open source ;) meaning I will include my scm source code with notes. The next project is for 2009 I want to make an SCM that makes the source code (if that is possible). In short you would use the game itself to make the mod. Stand CJ where you want to place an object, pickup or ped and press a key. The code you need would appear on the screen and you could Alt+TAB to Sanny and plug it in. It would work even better if you ran a windowed mod. I don't believe there is a way for the SCM to write the file but that would be cool.

JAB B)

NICE! :) I won't be able to wait long for that one!

Link to comment
Share on other sites

awesome :l, make 1 4 GTAIII possibly?

I know GTA III coding isn't much different I will see what is or is not possible. For anyone interested, the way I got the idea for the project, I was showing my Dad a mod I had finished and he said, "Too bad it isn't an interpretative language or an in-game assembler." He explained the two are like this:

We are coding at the lowest level using the Op Codes, the next level up would be the interpretative language which is where 1 line of code is a whole procedure.

For example this:

 
Pickup DesertEagle with 85 rounds at 508.0762 -71.8294 998.7578 once on mission 10

or this:

Pickup DesertEagle with 85 rounds at Bar1 forever on mission main

would replace this:

0213: $My_Gun = create_pickup #DESERT_EAGLE type 15 at 508.0762 -71.8294 998.7578
--------SEE CODE ABOVE------
00D6: if
0214:   pickup $My_Gun picked_up
004D: jump_if_false @MAIN_GUN_END
0247: load_model #DESERT_EAGLE
038B: load_requested_models
:MY_GUN_CHECK
0001: wait 0 ms
00D6: if
0248:   model #DESERT_EAGLE available
004D: jump_if_false @MY_GUN_CHECK
01B2: give_actor $PLAYER_ACTOR weapon 24 ammo 85  
:MAIN_GUN_END

The compiler's job would be to read plain english and convert it to code. Right now we are writing out most of the code. Seemann has done a few things to help us, using what is called keywords and classes but they just reword the same line not entire procedures. This would be a major undertaking and would require an entire library of procedures to be created. So you can see why I didn't choose this for a project. But if there is a team out there GO FOR IT DUDES!!

Next there is the "in-game" assembler (or in-game editor) which is where I said hey that might work. There is no need to create a compiler since one exists. There is the GTX database that can be used to display lines to the screen, and using panel options I could have pop-up menus that ask the obvious questions. It would start up at CJ's house and you could just move around town telling it where you want to place something or set down walk paths for peds. You could jump in a car and record a driving sequence. However unless I am wrong there is no way to write the lines out to a text file using a code from the SCM. They would display to the screen and you would have to type them in manually.

Now before you get all excited, this is just at the idea stage and there hasn't been anything done and most likely I won't be starting this until January 2009. I did manage to make a panel that tells you CJ's X Y Z location and zAngle but I couldn't get it to display a decimal point and that is really all it does. You can get the code in this thread.

JAB B)

Link to comment
Share on other sites

  • 2 weeks later...
  • 6 years later...

when i try compile this code..its popup a error.....incorrect number of condition. 8 max.... help me to fix this code plzzzz.... :)

 

 
//-------------MAIN---------------
thread 'MRN' 
wait 0 
 
:MRN_15
wait 0 
if 
   Player.Defined($PLAYER_CHAR)
jf @MRN_15 
wait 0 
if 
   Player.Defined($PLAYER_CHAR)
jf @MRN_15 
if 
0AB0:   key_pressed 57 
jf @MRN_15 
Model.Load(#ARMY)
Model.Load(#WMYBOUN)
Model.Load(#RANCHER)
 
:MRN_85
wait 0 
if and
   Model.Available(#ARMY)
   Model.Available(#WMYBOUN)
   Model.Available(#RANCHER)
   Model.Available(#RANCHER)
   Model.Available(#RANCHER)
   Actor.Driving($PLAYER_ACTOR)
84A7:   not actor $PLAYER_ACTOR driving_boat 
89AE:   not actor $PLAYER_ACTOR driving_train 
84C8:   not actor $PLAYER_ACTOR driving_flying_vehicle 
jf @MRN_85 
fade 0 500 
wait 1000 
$CJ = Actor.CurrentCar($PLAYER_ACTOR)
$ANGLE = Actor.Angle($PLAYER_ACTOR)
04C4: store_coords_to $X $Y $Z from_actor $PLAYER_ACTOR with_offset 0.0 -15.0 0.0 
04C4: store_coords_to $X2 $Y2 $Z2 from_actor $PLAYER_ACTOR with_offset 0.0 -30.0 0.0 
04C4: store_coords_to $X3 $Y3 $Z3 from_actor $PLAYER_ACTOR with_offset 0.0 -45.0 0.0 
$CAR = Car.Create(#RANCHER, $X, $Y, $Z)
Car.SetImmunities($CAR, 1, 1, 1, 1, 1)
Car.Angle($CAR) = $ANGLE
0397: enable_car $CAR siren 1 
$CAR2 = Car.Create(#RANCHER, $X2, $Y2, $Z2)
Car.SetImmunities($CAR2, 1, 1, 1, 1, 1)
Car.Angle($CAR2) = $ANGLE
0397: enable_car $CAR2 siren 1 
$CAR3 = Car.Create(#RANCHER, $X3, $Y3, $Z3)
Car.SetImmunities($CAR3, 1, 1, 1, 1, 1)
Car.Angle($CAR3) = $ANGLE
0397: enable_car $CAR3 siren 1 
$M1 = Actor.CreateAsDriver(Mission1, #ARMY, $CAR)
$M2 = Actor.CreateAsPassenger(Mission1, #ARMY, $CAR, 0)
$M3 = Actor.CreateAsPassenger(Mission1, #ARMY, $CAR, 1)
$M4 = Actor.CreateAsPassenger(Mission1, #ARMY, $CAR, 2)
$M5 = Actor.CreateAsDriver(Mission1, #WMYBOUN, $CAR2)
$M6 = Actor.CreateAsPassenger(Mission1, #WMYBOUN, $CAR2, 0)
$M7 = Actor.CreateAsPassenger(Mission1, #WMYBOUN, $CJ, 0)
$M8 = Actor.CreateAsDriver(Mission1, #ARMY, $CAR3)
Actor.GiveWeaponAndAmmo($M1, M4, 9999)
Actor.GiveWeaponAndAmmo($M2, M4, 9999)
Actor.GiveWeaponAndAmmo($M3, M4, 9999)
Actor.GiveWeaponAndAmmo($M4, M4, 9999)
Actor.GiveWeaponAndAmmo($M5, M4, 9999)
Actor.GiveWeaponAndAmmo($M6, M4, 9999)
Actor.GiveWeaponAndAmmo($M7, M4, 9999)
Actor.Health($M1) = 1000
Actor.Health($M2) = 1000
Actor.Health($M3) = 1000
Actor.Health($M4) = 1000
Actor.Health($M5) = 1000
Actor.Health($M6) = 1000
Actor.Health($M7) = 1000
Actor.Health($M8) = 1000
Actor.WeaponAccuracy($M1) = 100
Actor.WeaponAccuracy($M2) = 100
Actor.WeaponAccuracy($M3) = 100
Actor.WeaponAccuracy($M4) = 100
Actor.WeaponAccuracy($M5) = 100
Actor.WeaponAccuracy($M6) = 100
Actor.WeaponAccuracy($M7) = 100
07AF: $PLAYER_GROUP = player $PLAYER_CHAR group 
0630: put_actor $PLAYER_ACTOR in_group $PLAYER_GROUP as_leader 
0631: put_actor $M7 in_group $PLAYER_GROUP 
07F8: car $CAR follow_car $CJ radius 12.0 
07F8: car $CAR2 follow_car $CAR radius 12.0 
07F8: car $CAR3 follow_car $CAR2 radius 12.0 
Car.SetMaxSpeed($CAR, 150.0)
Car.SetMaxSpeed($CAR2, 150.0)
Car.SetMaxSpeed($CAR3, 150.0)
0229: set_car $CAR primary_color_to 0 secondary_color_to 0 
0229: set_car $CAR2 primary_color_to 0 secondary_color_to 0 
0229: set_car $CAR3 primary_color_to 0 secondary_color_to 0 
00AE: set_car $CAR traffic_behaviour_to 1 
00AE: set_car $CAR2 traffic_behaviour_to 1 
00AE: set_car $CAR3 traffic_behaviour_to 1 
wait 2000 
fade 1 250 
wait 2000 
01EB: set_traffic_density_multiplier_to 0.0 
Model.Destroy(#ARMY)
Model.Destroy(#WMYBOUN)
Model.Destroy(#RANCHER)
04C0: create_roadblock_in_area_cornerA $X $Y $Z cornerB $X1 $Y1 $Z1 type 3 
 
:MRN_900
wait 0 
if 
0AB0:   key_pressed 57 
jf @MRN_926 
jump @MRN_1326 
 
:MRN_926
wait 0 
if 
044B:   actor $PLAYER_ACTOR on_foot 
0449:   actor $M1 in_a_car 
jf @MRN_958 
jump @MRN_990 
 
:MRN_958
wait 0 
if 
0449:   actor $PLAYER_ACTOR in_a_car 
044B:   actor $M1 on_foot 
jf @MRN_900 
jump @MRN_1119 
 
:MRN_990
wait 0 
04C0: create_roadblock_in_area_cornerA $X1 $Y1 $Z1 cornerB $X $Y $Z type 4 
05CD: AS_actor $M1 exit_car $CAR 
05CD: AS_actor $M2 exit_car $CAR 
05CD: AS_actor $M3 exit_car $CAR 
05CD: AS_actor $M4 exit_car $CAR 
05CD: AS_actor $M5 exit_car $CAR2 
05CD: AS_actor $M6 exit_car $CAR2 
0631: put_actor $M1 in_group $PLAYER_GROUP 
0631: put_actor $M2 in_group $PLAYER_GROUP 
0631: put_actor $M3 in_group $PLAYER_GROUP 
0631: put_actor $M4 in_group $PLAYER_GROUP 
0631: put_actor $M5 in_group $PLAYER_GROUP 
0631: put_actor $M6 in_group $PLAYER_GROUP 
jump @MRN_900 
 
:MRN_1119
wait 0 
06C9: remove_actor $M1 from_group 
06C9: remove_actor $M2 from_group 
06C9: remove_actor $M3 from_group 
06C9: remove_actor $M4 from_group 
06C9: remove_actor $M5 from_group 
06C9: remove_actor $M6 from_group 
05CB: AS_actor $M1 enter_car $CAR as_driver 2000 ms 
05CA: AS_actor $M2 enter_car $CAR passenger_seat 0 time 2000 
05CA: AS_actor $M3 enter_car $CAR passenger_seat 1 time 2000 
05CA: AS_actor $M4 enter_car $CAR passenger_seat 2 time 2000 
0772: AS_actor $M5 run_to_car $CAR2 60000 ms stop_at_distance 5.0 
0772: AS_actor $M6 run_to_car $CAR2 60000 ms stop_at_distance 5.0 
wait 5000 
05CB: AS_actor $M5 enter_car $CAR2 as_driver 2000 ms 
05CA: AS_actor $M6 enter_car $CAR2 passenger_seat 0 time 2000 
wait 2000 
07F8: car $CAR follow_car $CJ radius 8.0 
07F8: car $CAR2 follow_car $CAR radius 8.0 
Car.SetMaxSpeed($CAR, 300.0)
Car.SetMaxSpeed($CAR2, 300.0)
jump @MRN_900 
 
:MRN_1326
wait 0 
fade 0 500 
wait 1000 
Actor.DestroyInstantly($M1)
Actor.DestroyInstantly($M2)
Actor.DestroyInstantly($M3)
Actor.DestroyInstantly($M4)
Actor.DestroyInstantly($M5)
Actor.DestroyInstantly($M6)
Actor.DestroyInstantly($M7)
Car.Destroy($CAR)
Car.Destroy($CAR2)
Car.Destroy($CAR3)
01EB: set_traffic_density_multiplier_to 1.0 
wait 1000 
fade 1 500 
jump @MRN_15 
 
Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...