You can use code in a number of places within GameMaker: Studio, from objects, to rooms and instances, and there are a number of built in functions that make your life easier when programming,
however it is often necessary for you to create your own functions to do a specific task, or to condense a large section of code into a more manageable chunk, or even to be able to re-use a particular
code block in many different places. That is why GameMaker: Studio gives you the ability to create scripts.
Scripts are written using GML (the Game Maker Language, covered in the Reference section), which is the built-in programming
language that GameMaker: Studio uses. Once you become more familiar with GameMaker: Studio and want to use it to its fullest extent, it is advisable to start learning to use this language, as it
greatly expands your possibilities when creating games.
A script (like any built-in function) can take different input variables, with real, string, boolean and special values like all or noone being accepted, and these input variables are generally called
arguments, although they are also referred to as parameters. To execute a script from an object or a time line you can use the Execute
Script action , but you can also call it in a code box using the actual script name as if it were a function or even by using the GML function
script_execute. If you use the script action you can specify the script you want to execute, together with the up to five arguments, but if you are using the code editor to call a script, you can pass up to sixteen
arguments.
As mentioned above, you can pass a number of arguments to a script, and it will use these to perform the task you have written it for. To understand this better, take, for example, an action (or a code in GML) and think
about how it works... you place it in an event and specify a number of parameters and it will make your instance do something. Scripts are exactly the same, with the only difference being that you write them! Not only
can you pass arguments into a script, but you can also ask a script to return a value too (using the return keyword), so you can use them to build calculating methods (mathematical methods) or give
back an instance id after a complex collision detection or any number of things. Please note, however, that using return effectively ends the script, and so no code after it has been used will be executed,
and this means that a certain amount of thought has to go into how your scripts are structured.
You can save and load scripts from *.txt files into GameMaker: Studio and in this way you can create collections of scripts and store them for use in multiple projects. To load a script (or
a collection of scripts) into GameMaker: Studio, simply right-click on the scripts resource folder (or any sub-folder that you have created in that section) and select Add Existing Script. This
will open the file browser and you can select either a script *.gmx, or a *.txt file. They will then be loaded in to GameMaker: Studio.
For saving scripts it's a similar process, where you right-click on a script (or a script folder) and select Export Selected Script. This will open up a window asking you where to export to, and when you
click on "Okay", the script will be saved as a *.txt file, with the name of the file being the same as the name of the script. If you have selected multiple scripts in a folder, they will all be saved, each with the
name of the script they correspond to.
To create a script in your game, choose Create Script from the Resources menu, or right click on the scripts resource in the resource tree and select Create Script, or just click the create script
button on the toolbar at the top of the main GameMaker: Studio screen. Whatever method you choose will open the following window:
Note: The script editor window and the code editor window for objects have exactly the same functionality. The only difference between them is that the script editor has a name box whereas the
code editor has the choice of which instance is to run the code (self, other or object), just like the D'n'D actions.
When you open the script editor, you should first give your new script a name. This should be something sensible and easy to remember and recognise, and must not start with a number or have any symbols (except
the under-bar "_" symbol). The name you give the script is the one you will use later as a function in code. It is also a good idea to write some comments at the start of the script (see the above image) to outline the script
arguments and how it should be used, especially if you are going to work as part of a team, or plan on using many scripts in your game.
Once you have done that you can start to write your script using standard GML functions and variables, using the many options along the Toolbar at the top to help you in this process. Here is a brief explanation of what each of
the toolbar buttons does:
Confirm
This will close the script editor and save any changes you have made. Be aware that there are no confirmation messages asking if you want to save.
Load A Script From A File
This will open the standard window for loading a script that has previously been saved as a text file. This will replace the existing script with the loaded one.
Save Script
This will save your current script as a *.txt file, ready to be used in another game.
Print Script
This will open a standard windows dialogue where you can select a printer and print out your current script on paper.
Undo
This will undo the last action, and you can repeatedly undo consecutive actions with this button, but note that the number of undos that can be performed is limited to 16.
Redo
If you have used the undo function, you can use this to go back to the state that you undid. This is limited to the number of undos that you have done previously.
Cut
You can use this to "cut" a section of your code out of the script. This code is stored to the clipboard and can then be pasted into another part of the same script, another script resource or even into some other program, independent of GameMaker: Studio.
Copy
This button will copy the currently selected code into the clipboard for use in another place, either the same script, another script or even an alternate program.
Paste
You can use this button to paste whatever text you have previously stored in the clipboard (with cut, or copy) into the current script.
Search And Replace
Clicking this button will open the search/find and replace tab in the script editor. See below for more details.
Check Syntax
This button will toggle on and off the syntax checker of the script editor. When on, any errors in the code syntax will be highlighted in red (default) and a message will be displayed at the bottom of the editor explaining briefly what the problem is. Note that not all aspects can be tested at this stage but the syntax of your script will be tested, together with the existence of functions used.
Auto Complete
When this is switched on, if you pause when typing something an auto-complete window will pop up and you can then use the cursor keys or mouse to navigate to the function that you are looking for. The image below illustrates this:
![]()
There are a number of keyboard shortcuts to help you navigate around the script editor, and each one is designed to help you get the most from this powerful tool:
- By pressing f2 you get the code snippet pop-up, which permits you to select one of the commonly used code methods. You can define your own code snippets if you want to, saving them to the Local App Data directory (ie: C:\Users\MyUserName\AppData\Local\GameMaker-Studio) for future use using the name "snippets.txt". If there are no snippets defined then GameMaker: Studio will copy the defaults from the Roaming directory (ie: C:\Users\MyUserName\AppData\Roaming\GameMaker-Studio). You can edit this file with any text editor, and each snippet is on a separate line (there should be no blank lines). It starts with the name of the snippet (which is what is shown in the menu) followed by the colon (:) followed by the actual snippet of code. Use # for a newline and put the text that needs to be selected first between | symbols. See the examples that are already in the file in the Roaming directory to see how it is set up, and it is strongly recommended that you make a backup of it before you start changing anything, although the base file will be re-installed when you update GameMaker: Studio (but the Local App Data version will remain).
- You can use f7 and f8 to change the size of the font within the editor.
- If you press f10 you can toggle on or off the colour coding for your code.
- Press <CTRL> + F to call up the search, find and replace options (see below).
- If you are using multiple scripts, then you can press f12 (or click the Middle Mouse Button) when the mouse is over any of the other script names to have it opened in a new window, ready for editing. If no script is selected, then the manual will be opened.
- You can press <Shift> + f12 (or <Shift> and the Middle Mouse Button) when the mouse is over any selected text to have it open the Search In Scripts window, already populated with the selected text. You can also do this on a function (without selecting it) and the function will be used to populate the search feild of the window.
- You can use <Ctrl> + Z for undo and <Ctrl> + <Shift> + Z for redo.
- The arrow keys move you around in the text, and you can use <Ctrl> with the left and right arrow key to move to the beginning of the previous or next word. If you use <Ctrl> with the up and down arrows you also scroll the text.
- You can hold the <Shift> key and move with the arrow keys to select text.
- The <Home> key moves the cursor to the beginning of the line and the <End> key to the end of the line, and if you also hold <Ctrl> they move to the start and end of the script. Holding the <Shift> key you can select the text too.
- Use <TAB> to indent selected lines and <Shift> + <TAB> to unindent selected lines.
- Hold <Ctrl> with the <Backspace> or <Delete> key to delete until the beginning of the previous or next word.
- You can force the auto-complete window to appear if you have it switched off in the Scripts Preferences by pressing <Ctrl> + <Space>, and you can cancel it at anytime by pressing <ESC>.
- You can drag a selection with the mouse. (Use <Ctrl> to copy it.) The new location is immediately shown.
- You can scroll through the text with the mouse wheel and with <Ctrl> pressed the cursor scrolls with the text. As with previous shortcuts, holding the <Shift> key selects text.
Commenting your code is very important for maintaining productivity as it keeps things clear and separates sections of code in such a way that it is obvious what each part does and why it is there. It also means that if
you are working in a team then you can leave notes for other members and that they will know exactly what you have done or what a specific section of code is for. Even if you are a solo developer, leaving comments
for your code is important, especially if you have to leave the project and come back to it at a later date.
Commenting your code is simple, as you just have to use "//" before any line of text or you can comment out whole paragraphs by using "/* text here */". The following image illustrates a
script using both these methods:
If you are in the code editor, then you can also give your code box a title by making a comment for the first line using the following format:
///Your Comment Here!
This comment will then be used for the "name" of that codebox (this works for codeboxes added to Timelines too) as illustrated by the following image:
If you use make a comment in this way in the script editor, then the comment text will be used as the auto-complete text in the code editor when you type the script. So, in the example script image above
above we have the script "MovePlayer", and it starts with a "///" comment, which would then show in the code editor like this:
When creating larger games, you will often require many, many scripts and this can cause a certain amount of "clutter" in the resource tree, and it can be hard to keep track or organise the scripts in a coherent
fashion. To help with this, the Script Editor has child scripts available to you in the form of tabs. So, say you have a player object with a create script, a movement script, a collision script and a draw script.
Instead of placing them all in the resource tree, you would have a parent script, with its name being the one shown in the resource tree, and various child scripts. These child scripts are no
different to any other scripts in your game, and will work as they should. However they will not appear in the resource tree, and to access them you must first open the parent script.
To create a new child script you simply click on the empty tab that is always to the right of the current tab (if you can't see this, then try scrolling the rest of the tabs using the arrows in the top right corner). This will
create the new script which you should name, and it will be stored within the parent script when you close and save the script editor. You can also delete these scripts easily by clicking on the "cross" icon that you can
see on all the script tabs.
As you might have noticed, parts of the script text are coloured. The script editor "knows" about existing objects, built-in variables and functions, etc. and colour codes them accordingly. colour-coding helps a lot in
avoiding mistakes, in particular, you see immediately if you have misspelled some name or use a keyword as a variable, or have a syntax error. However, if you don't like the colour coding, in the
Preferences you can switch it on and off (you can also use F10) as well as customise the colours that are used.
When working with code, it is common that you will want to find some piece you have written in a large section and then replace it something different, or simply see at a glance where a line of code lies within the
function. To this end, the GameMaker: Studio script editor has a search, find and replace function that can be accessed by pressing the Search button in the toolbar. This will open up a panel on the right of
the code window which looks as follows:
You can type the find string at the top (note that in the code all occurrences of the find string are immediately shown with a yellow background), and you can indicate whether the search must be case sensitive,
which is normally what you want as variable and function names in GML are also case sensitive, and whether you want to only search for whole words. Note that the editor remembers your most recent searches,
and you can click on the drop down button to call them up and re-select them. With the buttons underneath the search string input you can now move to the previous, next, first, and last occurrence of the find string,
and this string will be selected in the text so that you can edit it.
You can also use this panel to replace anything that you have previously searched for by simply typing in the new code that is to be used and pressing one of the buttons that are highlighted underneath. Now you
can use the buttons to replace the previously selected, the next one to be selected, the first, the last or all occurrences of the code searched for. Note that since your scripts can be spread over multiple tabs in the
same category, you are also provided with a Replace in all tabs option which, when checked, will use the search and replace terms to parse all the scripts in all tabs for that category, rather only the one
currently selected.
The script editor permits you to bookmark a script so that you can open it directly from the IDE using a key combination rather than having to click through multiple windows and icons. This is a very handy way to
track script changes while testing your game, and is activated simply by moving the cursor to the line of the script you want to bookmark and the holding <Shift> + <Control> + <NUM>,
where <NUM> is a number from 1 to 9 on the keyboard. The script editor will now show your bookmark beside the code in the editor.
To open the bookmarked script again at any time, you should use the keyboard combination <Control> + <NUM>, where <NUM> is the number key of the bookmark.