Difference between revisions of "Create a script"
m (→See Also) |
(→Conditions: using consistent examples) |
||
Line 30: | Line 30: | ||
== Conditions == | == Conditions == | ||
Conditional opcodes checks whether the action is performed rather than to perform the action. In Sanny Builder, they are noted by spaces between the opcode and the description of the opcode. Conditions start with IF statements that checks if an action is performed. | Conditional opcodes checks whether the action is performed rather than to perform the action. In Sanny Builder, they are noted by spaces between the opcode and the description of the opcode. Conditions start with IF statements that checks if an action is performed. | ||
− | <source lang="scm">: | + | <source lang="scm">:MyThread |
0001: wait 0 ms | 0001: wait 0 ms | ||
00D6: if | 00D6: if | ||
− | // Conditional opcode | + | 00E1: player 0 pressed_key 4 // Conditional opcode |
− | |||
004D: jump_if_false @CheckEnd | 004D: jump_if_false @CheckEnd | ||
// Command | // Command | ||
:CheckEnd | :CheckEnd | ||
− | 0002: jump @ | + | 0002: jump @MyThread</source> |
− | For IF statements with more than one conditions, you need to either add ''and'' or ''or'' after '' | + | This shows if '''one''' condition (if key 4 is pressed in this example) is met, the command will be performed. Otherwise, the code will skip the command and jump to label ''CheckEnd''. |
+ | |||
+ | For IF statements with more than one conditions, you need to either add ''and'' or ''or'' after ''if''. | ||
'''if and''' means if all of the conditions are met. | '''if and''' means if all of the conditions are met. | ||
− | <source lang="scm">: | + | <source lang="scm">:MyThread |
0001: wait 0 ms | 0001: wait 0 ms | ||
00D6: if and | 00D6: if and | ||
− | + | 00E1: player 0 pressed_key 4 // First condition | |
− | 00E1: player 0 pressed_key 4 | + | 00E1: player 0 pressed_key 19 // Second condition |
− | // | ||
− | 00E1: player 0 pressed_key 19 | ||
004D: jump_if_false @CheckEnd | 004D: jump_if_false @CheckEnd | ||
// Command | // Command | ||
:CheckEnd | :CheckEnd | ||
− | 0002: jump @ | + | 0002: jump @MyThread</source> |
− | This | + | This shows that if '''all''' conditions (if both keys 4 and 19 are pressed in this example) are met, the command will be performed. Otherwise, the code will skip the command and jump to label ''CheckEnd''. |
'''if or''' means if either one of these conditions are met. | '''if or''' means if either one of these conditions are met. | ||
− | <source lang="scm">: | + | <source lang="scm">:MyThread |
0001: wait 0 ms | 0001: wait 0 ms | ||
00D6: if or | 00D6: if or | ||
− | // First condition | + | 00E1: player 0 pressed_key 4 // First condition |
− | + | 00E1: player 0 pressed_key 19 // Second condition | |
− | // Second condition | ||
− | |||
004D: jump_if_false @CheckEnd | 004D: jump_if_false @CheckEnd | ||
// Command | // Command | ||
:CheckEnd | :CheckEnd | ||
− | 0002: jump @ | + | 0002: jump @MyThread</source> |
− | This | + | This shows that if '''either''' condition (if either key 4 or key 19 is pressed in this example) is met, the command will be performed. Otherwise, the code will skip the command and jump to label ''CheckEnd''. |
− | Opcodes normally starts with the number ''0'', but conditional opcodes can start with the number ''8''. This checks if the condition is ''' | + | Opcodes normally starts with the number ''0'', but conditional opcodes can start with the number ''8''. This checks if the condition is '''not''' performed. |
<source lang="scm"> | <source lang="scm"> | ||
− | + | 00E1: player 0 pressed_key 4 // IS pressed | |
− | + | 80E1: not player 0 pressed_key 4 // is NOT pressed</source> | |
== Final Notes == | == Final Notes == |
Revision as of 02:15, 22 February 2011
Creating a simple thread is one of the first steps in understanding how to code. This article will show you the basic steps on how to create the simplest thread using Sanny Builder. It should work for GTA 3, Vice City, and San Andreas.
Contents
Create your thread
First create your thread using opcode 004F (or create_thread command). Find
create_thread
Insert before it
004F: create_thread @mythread
mythread is an arbitrary label. You can name the label with anything.
Insert your contents
Next you have to insert the contents into your thread. Find
//-------------Mission 0---------------
That is where the MAIN section ends and the first mission begins. Insert your contents between it. The simplest format of a thread have this format
:mythread
// Insert your contents here
004E: end_thread
The contents can include simple opcodes or longer threads like in the examples of creating a ped and creating a vehicle.
Thread names
Your thread can have a name. Use opcode 03A4 to name your thread. It is essential if you need to end your thread from another part of the script with opcode 0459.
Loops
The example above shows you a thread that ends straight away. If you want the thread to run continuously, you have to loop the thread. For the most part, looping the thread requires opcode 0001 (or wait command) to be placed somewhere within the loop or else the game will crash. There are exceptions but it is safer to have it. The simplest loop has this format
:mythread
0001: wait 0 ms
// Insert your contents here
0002: jump @mythread
This thread will repeat itself indefinitely so be careful what you put in it.
Conditions
Conditional opcodes checks whether the action is performed rather than to perform the action. In Sanny Builder, they are noted by spaces between the opcode and the description of the opcode. Conditions start with IF statements that checks if an action is performed.
:MyThread
0001: wait 0 ms
00D6: if
00E1: player 0 pressed_key 4 // Conditional opcode
004D: jump_if_false @CheckEnd
// Command
:CheckEnd
0002: jump @MyThread
This shows if one condition (if key 4 is pressed in this example) is met, the command will be performed. Otherwise, the code will skip the command and jump to label CheckEnd.
For IF statements with more than one conditions, you need to either add and or or after if.
if and means if all of the conditions are met.
:MyThread
0001: wait 0 ms
00D6: if and
00E1: player 0 pressed_key 4 // First condition
00E1: player 0 pressed_key 19 // Second condition
004D: jump_if_false @CheckEnd
// Command
:CheckEnd
0002: jump @MyThread
This shows that if all conditions (if both keys 4 and 19 are pressed in this example) are met, the command will be performed. Otherwise, the code will skip the command and jump to label CheckEnd.
if or means if either one of these conditions are met.
:MyThread
0001: wait 0 ms
00D6: if or
00E1: player 0 pressed_key 4 // First condition
00E1: player 0 pressed_key 19 // Second condition
004D: jump_if_false @CheckEnd
// Command
:CheckEnd
0002: jump @MyThread
This shows that if either condition (if either key 4 or key 19 is pressed in this example) is met, the command will be performed. Otherwise, the code will skip the command and jump to label CheckEnd.
Opcodes normally starts with the number 0, but conditional opcodes can start with the number 8. This checks if the condition is not performed.
00E1: player 0 pressed_key 4 // IS pressed
80E1: not player 0 pressed_key 4 // is NOT pressed
Final Notes
Using this format requires you to start a new game. If you do not understand what is being said here, try looking into the Tutorial Forum for more in-depth tutorials or the Mission Coding Forum on how to understand this.