Scripts

Scripts are the way in which GameMaker: Studio permits you to design your own functions.

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.

What Is A Script?

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.

Using Scripts

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.

Saving and Loading Scripts

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.

Creating A Script

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.

The Script Editor

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:



Keyboard Shortcuts

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:

Adding Comments and Naming Code Blocks

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:

Script Tabs

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.

Colour Coding

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.

Search, Find And Replace

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.

Bookmarks

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.


Back: Advanced Use Index
Next: Shaders
© Copyright YoYo Games Ltd. 2018 All Rights Reserved