Difference between revisions of "Create a mission"
(→CLEO Mission) |
|||
(11 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
− | + | This tutorial will show you the basic steps on how to '''create a simple mission''' in the <code>[[main.scm]]</code> using the latest version of [[Sanny Builder]]. This tutorial applies to [[GTA III]], [[Vice City]], and [[San Andreas]]. This tutorial assumes that you know how to [[Create a thread|create simple scripts]] so it is recommended that you start practicing with them before attempting to create a mission. There are many ways to create a mission so to simplify this for beginners, the rest of the article will show the basic structure of creating a working mission. | |
− | ==Define your mission== | + | |
− | First define your mission. Find | + | == Define your mission == |
− | < | + | First define your mission. Find: |
+ | <syntaxhighlight lang="scm">DEFINE MISSIONS</syntaxhighlight> | ||
Increment that number by one. Scroll down until you see the last defined mission. Define your mission below it. | Increment that number by one. Scroll down until you see the last defined mission. Define your mission below it. | ||
− | < | + | <syntaxhighlight lang="scm">DEFINE MISSION {xxx} AT @simple_mission</syntaxhighlight> |
− | + | where {xxx} is the mission index, one more from the previous mission. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | ==Insert your | + | == Insert your trigger == |
− | + | Next create a script that will trigger your mission to start. Find: | |
− | < | + | <syntaxhighlight lang="scm">create_thread</syntaxhighlight> |
− | + | Insert before it: | |
− | < | + | <syntaxhighlight lang="scm">004F: create_thread @mission_trigger</syntaxhighlight> |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | : | + | Find: |
− | + | <syntaxhighlight lang="scm">//-------------Mission 0---------------</syntaxhighlight> | |
− | + | That is where the MAIN section ends and the first mission begins. Insert your trigger code between that: | |
+ | <syntaxhighlight lang="scm">:mission_trigger | ||
+ | while true | ||
+ | 0001: wait 0 | ||
+ | if | ||
+ | 0256: player $PLAYER_CHAR defined | ||
+ | then | ||
+ | if | ||
+ | $ONMISSION == 0 | ||
+ | then | ||
+ | if | ||
+ | // Condition to start your mission | ||
+ | then | ||
+ | 0417: start_mission {xxx} | ||
+ | $ONMISSION = 1 | ||
+ | end | ||
+ | end | ||
+ | end | ||
+ | end</syntaxhighlight> | ||
+ | where {xxx} is your mission index or the label of your mission. | ||
− | : | + | == Insert your mission == |
− | // | + | Lastly insert your mission. If you are using GTA III or Vice City, scroll all the way to the end of the file to insert your mission. If you are using San Andreas, find |
− | + | <syntaxhighlight lang="scm" style="overflow: auto;">//-------------External script 0 (PLAYER_PARACHUTE)---------------</syntaxhighlight> | |
+ | That is where the last mission ends and the first external script starts. Insert your mission between that: | ||
+ | <syntaxhighlight lang="scm">:simple_mission | ||
+ | 03A4: name_thread 'MISSA' | ||
+ | 0050: gosub @simple_mission_begin | ||
+ | if | ||
+ | 0112: wasted_or_busted | ||
+ | then | ||
+ | 0050: gosub @simple_mission_failed | ||
+ | end | ||
+ | 0050: gosub @simple_mission_cleanup | ||
+ | 004E: end_thread | ||
+ | |||
+ | :simple_mission_begin | ||
+ | // Place the contents of your mission | ||
+ | 0051: return | ||
− | : | + | :simple_mission_failed |
− | // | + | // Died or got busted during your mission |
0051: return | 0051: return | ||
+ | :simple_mission_cleanup | ||
+ | // Clean up the contents of your mission so you can end it | ||
+ | $ONMISSION = 0 | ||
+ | 00D8: mission_cleanup | ||
+ | 0051: return</syntaxhighlight> | ||
+ | This structure is required to allow the mission to end when you get wasted or busted while the mission is running. | ||
+ | |||
+ | == Save your changes == | ||
+ | Finally, after you have finished all the necessary changes, compile the file you are working on. As usual, in order to play the game with the modification, you must start a new game or else the game can crash. Check out the [http://gtaforums.com/forum/109-tutorials/ Tutorial Forum] for more in-depth tutorials or the [http://gtaforums.com/forum/317-coding/ Mission Coding Forum] for further help on coding. | ||
+ | |||
+ | ==CLEO Mission== | ||
+ | |||
+ | First of all, in order to make a CLEO mission two files are required: A .cs file which will trigger the mission this file usually includes conditions. Also, you need a .cm file which contains the code of the mission. | ||
+ | |||
+ | ===Example=== | ||
+ | |||
+ | '''Mission Trigger''' | ||
+ | |||
+ | It contains some conditions and if they are true the mission is eventually triggered. | ||
+ | <source lang="scm"> | ||
+ | {$CLEO .cs} | ||
+ | |||
+ | 0000: NOP | ||
+ | |||
+ | while true | ||
+ | wait 0 | ||
+ | if and | ||
+ | $ONMISSION == 0 | ||
+ | player.defined(0) | ||
+ | then | ||
+ | if | ||
+ | // your conditions | ||
+ | then | ||
+ | 0004: $ONMISSION = 1 | ||
+ | 0A94: start_custom_mission "MyMission" | ||
+ | end | ||
+ | end | ||
+ | end</source> | ||
+ | Firstly, this script checks if the player is on a mission and if he is defined. Finally if your conditions are true too the mission script is triggered. | ||
+ | |||
+ | '''0A94:''' start_custom_mission '''"MyMission"''' | ||
+ | : 0A94 is used to start the mission the parameter must match to the mission name without the .cm extension because the opcode will search for the file with the extension .cm. The parameter can also contain the directory of the file (starting from game\CLEO) example <nowiki>"Missions\MyMission".</nowiki> | ||
+ | |||
+ | '''Mission Script''' | ||
+ | <source lang="scm"> | ||
+ | {$CLEO .cm} | ||
+ | |||
+ | :MissionStart | ||
+ | 03A4: name_thread "TEST" | ||
+ | gosub @MissionBegin | ||
+ | if | ||
+ | wasted_or_busted | ||
+ | then | ||
+ | gosub @MissionFailed | ||
+ | end | ||
+ | gosub @MissionCleanup | ||
+ | end_thread | ||
+ | |||
+ | :MissionBegin | ||
+ | // Place the contents of your mission | ||
+ | return | ||
+ | |||
+ | :MissionFailed | ||
+ | // Died or got busted during your mission | ||
+ | return | ||
+ | |||
:MissionCleanup | :MissionCleanup | ||
− | // | + | // Clean up the contents of your mission so you can end it |
− | + | $ONMISSION = 0 | |
− | + | mission_cleanup | |
− | + | return | |
− | + | </source> | |
− | + | '''{$CLEO .cm}''' | |
− | + | : This CLEO directive is used because we want the file to be compiled as a CLEO Mission(.cm). | |
− | + | Also in a .cm script you can use up to 1022 + 2 timers local variables instead of 32 + 2 timers.<br> | |
+ | '''NOTE''' | ||
+ | : In order to end a CLEO mission script you have to use '''004E: end_thread''' instead of '''0A93: end_custom_thread''' which is used in normal CLEO scripts. | ||
− | + | == External Links == | |
+ | * {{GTAF|section|109|Tutorial Forum}} | ||
+ | * {{GTAF|403790|Mission Coding for Dummies!}} – tutorial by {{U|Dutchy3010}} | ||
− | {{SA | + | {{N|SA|VC|3}} |
+ | [[Category:Mission Scripting]][[Category:Code Snippets]] |
Latest revision as of 07:44, 22 July 2015
This tutorial will show you the basic steps on how to create a simple mission in the main.scm
using the latest version of Sanny Builder. This tutorial applies to GTA III, Vice City, and San Andreas. This tutorial assumes that you know how to create simple scripts so it is recommended that you start practicing with them before attempting to create a mission. There are many ways to create a mission so to simplify this for beginners, the rest of the article will show the basic structure of creating a working mission.
Contents
Define your mission
First define your mission. Find:
DEFINE MISSIONS
Increment that number by one. Scroll down until you see the last defined mission. Define your mission below it.
DEFINE MISSION {xxx} AT @simple_mission
where {xxx} is the mission index, one more from the previous mission.
Insert your trigger
Next create a script that will trigger your mission to start. Find:
create_thread
Insert before it:
004F: create_thread @mission_trigger
Find:
//-------------Mission 0---------------
That is where the MAIN section ends and the first mission begins. Insert your trigger code between that:
:mission_trigger
while true
0001: wait 0
if
0256: player $PLAYER_CHAR defined
then
if
$ONMISSION == 0
then
if
// Condition to start your mission
then
0417: start_mission {xxx}
$ONMISSION = 1
end
end
end
end
where {xxx} is your mission index or the label of your mission.
Insert your mission
Lastly insert your mission. If you are using GTA III or Vice City, scroll all the way to the end of the file to insert your mission. If you are using San Andreas, find
//-------------External script 0 (PLAYER_PARACHUTE)---------------
That is where the last mission ends and the first external script starts. Insert your mission between that:
:simple_mission
03A4: name_thread 'MISSA'
0050: gosub @simple_mission_begin
if
0112: wasted_or_busted
then
0050: gosub @simple_mission_failed
end
0050: gosub @simple_mission_cleanup
004E: end_thread
:simple_mission_begin
// Place the contents of your mission
0051: return
:simple_mission_failed
// Died or got busted during your mission
0051: return
:simple_mission_cleanup
// Clean up the contents of your mission so you can end it
$ONMISSION = 0
00D8: mission_cleanup
0051: return
This structure is required to allow the mission to end when you get wasted or busted while the mission is running.
Save your changes
Finally, after you have finished all the necessary changes, compile the file you are working on. As usual, in order to play the game with the modification, you must start a new game or else the game can crash. Check out the Tutorial Forum for more in-depth tutorials or the Mission Coding Forum for further help on coding.
CLEO Mission
First of all, in order to make a CLEO mission two files are required: A .cs file which will trigger the mission this file usually includes conditions. Also, you need a .cm file which contains the code of the mission.
Example
Mission Trigger
It contains some conditions and if they are true the mission is eventually triggered.
{$CLEO .cs}
0000: NOP
while true
wait 0
if and
$ONMISSION == 0
player.defined(0)
then
if
// your conditions
then
0004: $ONMISSION = 1
0A94: start_custom_mission "MyMission"
end
end
end
Firstly, this script checks if the player is on a mission and if he is defined. Finally if your conditions are true too the mission script is triggered.
0A94: start_custom_mission "MyMission"
- 0A94 is used to start the mission the parameter must match to the mission name without the .cm extension because the opcode will search for the file with the extension .cm. The parameter can also contain the directory of the file (starting from game\CLEO) example "Missions\MyMission".
Mission Script
{$CLEO .cm}
:MissionStart
03A4: name_thread "TEST"
gosub @MissionBegin
if
wasted_or_busted
then
gosub @MissionFailed
end
gosub @MissionCleanup
end_thread
:MissionBegin
// Place the contents of your mission
return
:MissionFailed
// Died or got busted during your mission
return
:MissionCleanup
// Clean up the contents of your mission so you can end it
$ONMISSION = 0
mission_cleanup
return
{$CLEO .cm}
- This CLEO directive is used because we want the file to be compiled as a CLEO Mission(.cm).
Also in a .cm script you can use up to 1022 + 2 timers local variables instead of 32 + 2 timers.
NOTE
- In order to end a CLEO mission script you have to use 004E: end_thread instead of 0A93: end_custom_thread which is used in normal CLEO scripts.
External Links
- GTAForums: Tutorial Forum
- GTAForums: Mission Coding for Dummies! – tutorial by Dutchy3010