GameMaker Studio Book Tips & Tricks
Ben Tyers
Copyright 2014 Ben Tyers GamePublishing.net
ISBN-13: 978-1495947384
ISBN-10: 1495947386
DEDICATION
Many thanks to Mark Overmars, creator of the originalGameMaker
CONTENTS
Contents
Advert System.....................................................................................................................................................1
Basic AI................................................................................................................................................................2
Blood Effect.........................................................................................................................................................4
Blood Effect 2......................................................................................................................................................6
ChangeSize..........................................................................................................................................................8
Cheat System.......................................................................................................................................................9
Check Point System............................................................................................................................................13
Car Drift.............................................................................................................................................................14
Circular Health 2................................................................................................................................................16
Circular Text.......................................................................................................................................................17
Clickable Text.....................................................................................................................................................19
Countdown Bar..................................................................................................................................................20
Countdown Clock...............................................................................................................................................22
Day NightEngine................................................................................................................................................24
Disappearing Platform.......................................................................................................................................27
Do-until.............................................................................................................................................................28
Dragging Object.................................................................................................................................................29
Draw Array Contents in Boxes............................................................................................................................30
Dual View..........................................................................................................................................................31
Ellipse Movement..............................................................................................................................................33
Fire Effect..........................................................................................................................................................34
Flashing Sprite...................................................................................................................................................36
For.....................................................................................................................................................................39
Glowing Sprite...................................................................................................................................................40
Grid Slowly Move...............................................................................................................................................42
GameMaker Studio Book
vi
Health As Bars...................................................................................................................................................44
Heat Seeking Missile / Bullet Example...............................................................................................................45
Jet Pack.............................................................................................................................................................46
Keep Object In Room.........................................................................................................................................47
Key and Door.....................................................................................................................................................48
Keyboard On Screen..........................................................................................................................................49
Keyboard Simple Movement Code Multi-Directional......................................................................................56
LaserEffect........................................................................................................................................................57
Line ofSight.......................................................................................................................................................58
Load / Save System............................................................................................................................................60
Local Time - Real Time Clock Example................................................................................................................62
Marquee Effect.................................................................................................................................................63
Map..................................................................................................................................................................64
Mist Effect.........................................................................................................................................................65
Motion Trail......................................................................................................................................................66
Mouse Over Button Effect.................................................................................................................................67
Mouse Over Button Effect 2..............................................................................................................................68
Mouse Pointer Point Direction..........................................................................................................................69
Moving Background...........................................................................................................................................70
Moving Cloud Effect..........................................................................................................................................71
Moving Platform 2.............................................................................................................................................72
Multi Key Press..................................................................................................................................................73
Move and Rotate...............................................................................................................................................75
Moving Platform...............................................................................................................................................76
Multiple Collision..............................................................................................................................................77
Multiple Press (Devices)....................................................................................................................................78
Nested if-else....................................................................................................................................................79
GameMaker Studio Book
vii
Path Finding.......................................................................................................................................................80
Platform & Change Direction.............................................................................................................................82
Platform Jumping...............................................................................................................................................83
Player Lock.........................................................................................................................................................84
Point To Nearest................................................................................................................................................85
Point Direction Movement.................................................................................................................................86
Power Bar..........................................................................................................................................................87
Power Up...........................................................................................................................................................89
Pushing Block.....................................................................................................................................................90
Radar.................................................................................................................................................................91
Random Numbers and Algorithms.....................................................................................................................94
Random Word From A Text File.........................................................................................................................96
Random Word From Array.................................................................................................................................98
Real Time Clock Example....................................................................................................................................99
Remove Sprite Background..............................................................................................................................100
Repeat.............................................................................................................................................................102
Room Transition..............................................................................................................................................103
Rotating Background........................................................................................................................................104
Score Example.................................................................................................................................................105
Score With Leading Zeros.................................................................................................................................106
Scrolling Credits...............................................................................................................................................107
Shooting Alarm................................................................................................................................................108
Sliding Bar........................................................................................................................................................109
Slowly Move....................................................................................................................................................111
Smoke Effect....................................................................................................................................................112
Snap To Grid....................................................................................................................................................113
Snow and Rain Effect.......................................................................................................................................114
GameMaker Studio Book
viii
Sniper Effect.....................................................................................................................................................115
Soft Ball Physics................................................................................................................................................117
Sound Effects...................................................................................................................................................122
Sprite Rotate Example1.................................................................................................................................124
Sprite Rotate Example2.................................................................................................................................125
Swap Objects....................................................................................................................................................126
Switch..............................................................................................................................................................128
Text Above Sprite.............................................................................................................................................129
Teleport System...............................................................................................................................................130
Text With a Border / Shadow............................................................................................................................131
Text Menu System............................................................................................................................................132
Turret Rotating.................................................................................................................................................134
Turret Rotate System 2.....................................................................................................................................136
Typewriter Effect..............................................................................................................................................140
Unlock System..................................................................................................................................................141
Weapon Array.................................................................................................................................................143
While...............................................................................................................................................................146
Windows Shake Effect......................................................................................................................................147
With.................................................................................................................................................................148
Wrap Around Room.........................................................................................................................................149
ACKNOWLEDGMENTS
Thanks To All These People, For Helping Me With This Book andAllowing Me To Re-Use Some Of Their Code. Thanks also to the GMZfor answering my questions in a timely manner.
In Alphabetical Order
05GREL2 64 DIGITS AMORBIS
CAHARKNESS CPSGAMES GMEXPERT
LEANDRO SACCOLETTO ISMAVATAR MANUEL777
NEHEMEK AMADOR ROKAN
SIMON DONKERS SMASH GAMES
TREVOR MADGE T. WESTENDORP
WDALPHIN2 YELLOWAFTERLIFE
ZARNIWOOOP
Special Thanks to Alesia Buonomo For Proof Reading
Thanks to Alexander For The Technical Review
1
Advert System A simple system to create and show your ownadverts, great for directing players to your website or app storepage.
Youll need to assign a sprite with 4 sub images for thisexample.
Create Event
alarm[0]=60;
ad_number=0;
total_adverts=4;;
Alarm[0] Event
ad_number++;
if ad_number==total_adverts
{
ad_number=0;
}
alarm[0]=60;
Left Released Event
if ad_number=0 url_open("www.google.com");
if ad_number=1 url_open("www.bing.com");
if ad_number=2 url_open("www.gamemakerbook.com");
if ad_number=3 url_open("www.bbc.com");
Draw Event
draw_sprite(adverts,ad_number,x,y);
GameMaker Studio Book
2
Basic AI A top down example of a very basic AI code.
This example assumes you have a player object, obj_player andsolid walls.
Step Event
GameMaker Studio Book
3
Ball Bounce
This little code helps reduce likelihood of a bouncing ballbecoming stuck.
Just add the following the collision event of the ball withanother object Collision Event
move_bounce_all( true);
x=xprevious;
y=yprevious;
GameMaker Studio Book
4
Blood Effect This cool code draws a top down blood splattereffect
This assumes you have:
Object obj_blood with 3 or more small blood sub-images
Object obj_blood_2 with one larger image
obj_blood
Create Event
speed = random(4)+4; //Give out a random speed.
friction = 0.3; //Make the gore slow down from friction.
direction = random(360); //Random Direction
image_angle = random(360); //Random Angle
image_single = random(image_number-1); //Pick a random look.
image_xscale = random(1); //Random Size
image_yscale = image_xscale; //Restrain Proportions (aspectratio)
fade = true; //Whether to fade the gore out or not.
Step Event
image_angle += speed/2; //Spin according to speed.
if fade=true{image_alpha -= 0.01;} //Fade out if relevant.
if image_alpha
GameMaker Studio Book
5
Object obj_blood_2
Create Event
fade = true; //Whether to fade the gore out or not.;
Step Event
if fade=true{image_alpha -= 0.01;} //Fade out if relevant.
if image_alpha
GameMaker Studio Book
6
Blood Effect 2 Creates a blood explosion with blood on screeneffect using particles
Create Event
globalvar flow;
Alarm [0] Event
visible = true;//as needed
Script blood
// example blood(50,50); or blood(x,y);
spotX = argument0;
spotY = argument1;
flow = part_system_create();
droplet = part_type_create();
spatter = part_type_create();
b_color = c_red;
part_type_shape(droplet,pt_shape_pixel)
part_type_size(droplet,0.10,0.10,0.05,0)
part_type_color1(droplet,b_color)
part_type_alpha2(droplet,1,0)
part_type_speed(droplet,1,6,0,0)
part_type_direction(droplet,-30,210,0,10)
part_type_gravity(droplet,0.2,270)
part_type_orientation(droplet,90,90,0,0,1)
part_type_life(droplet,30,40)
GameMaker Studio Book
7
part_type_death(droplet, 1, spatter)
part_type_shape(spatter,pt_shape_disk)
part_type_size(spatter,0.3,0.3,.05,0)
part_type_scale(spatter,.35,.35)
part_type_color2(spatter,make_color_rgb(255, 0, 0),make_color_rgb(192, 0,
0))
part_type_alpha2(spatter,.15,0)
part_type_speed(spatter,0,0,0,0)
part_type_direction(spatter,0,0,0,0)
part_type_gravity(spatter,0,270)
part_type_life(spatter,50,60)
wound = part_emitter_create(flow);
part_system_depth(flow, -25);
part_emitter_region(flow,wound,spotX+10,spotX+22,spotY+10,spotY+22,ps_shape_
line ,ps_distr_gaussian);
effect_create_above(ef_explosion, spotX +16, spotY + 16, .5,c_red);
effect_create_above(ef_flare, spotX +16, spotY + 16, 25,c_orange);
obj_blood.visible=false;
part_emitter_burst(flow,wound,droplet,500);
obj_blood.alarm[0] = 120;
Example usage:
blood(x,y);
GameMaker Studio Book
8
Change Size
Youll need two additional objects for this to work, obj_grow andobj_shrink
Step Event
if (instance_place(x,y,obj_grow))
{
if (image_xscale < 2) //or whatever size you want
{
image_xscale += 0.5;
image_yscale += 0.5;
}
}
else if (instance_place(x,y,obj_shrink))
{
if (image_xscale >0.5)//or whatever size you want
{
image_xscale -= 0.5;
image_yscale -= 0.5;
}
}
To destroy obj_grow / obj_shrink, but the following in theircreate event
if (instance_place(x,y,obj_player)) instance_destroy();
GameMaker Studio Book
9
Cheat System Allows user to enter a cheat code using thekeyboard. Suitable for Windows Exports only.
Create Event
keyallowed=true;
Alarm[10] Event
keyallowed=true;
Step Event
if keyallowed=true
{
if keyboard_check(ord('A')) {cheatstring+="A"; alarm[10]=5;
keyallowed=false;}
if keyboard_check(ord('B')) {cheatstring+="B"; alarm[10]=5;
keyallowed=false;}
if keyboard_check(ord('C')) {cheatstring+="C"; alarm[10]=5;
keyallowed=false;}
if keyboard_check(ord('D')) {cheatstring+="D"; alarm[10]=5;
keyallowed=false;}
GameMaker Studio Book
10
if keyboard_check(ord('E')) {cheatstring+="E"; alarm[10]=5;
keyallowed=false;}
if keyboard_check(ord('F')) {cheatstring+="F"; alarm[10]=5;
keyallowed=false;}
if keyboard_check(ord('G')) {cheatstring+="G"; alarm[10]=5;
keyallowed=false;}
if keyboard_check(ord('H')) {cheatstring+="H"; alarm[10]=5;
keyallowed=false;}
if keyboard_check(ord('I')) {cheatstring+="I"; alarm[10]=5;
keyallowed=false;}
if keyboard_check(ord('J')) {cheatstring+="J"; alarm[10]=5;
keyallowed=false;}
if keyboard_check(ord('K')) {cheatstring+="K"; alarm[10]=5;
keyallowed=false;}
if keyboard_check(ord('L')) {cheatstring+="L"; alarm[10]=5;
keyallowed=false;}
if keyboard_check(ord('M')) {cheatstring+="M"; alarm[10]=5;
keyallowed=false;}
if keyboard_check(ord('N')) {cheatstring+="N"; alarm[10]=5;
keyallowed=false;}
if keyboard_check(ord('O')) {cheatstring+="O"; alarm[10]=5;
keyallowed=false;}
if keyboard_check(ord('P')) {cheatstring+="P"; alarm[10]=5;
keyallowed=false;}
if keyboard_check(ord('Q')) {cheatstring+="Q"; alarm[10]=5;
keyallowed=false;}
if keyboard_check(ord('R')) {cheatstring+="R"; alarm[10]=5;
keyallowed=false;}
if keyboard_check(ord('S')) {cheatstring+="S"; alarm[10]=5;
keyallowed=false;}
if keyboard_check(ord('T')) {cheatstring+="T"; alarm[10]=5;
keyallowed=false;}
if keyboard_check(ord('U')) {cheatstring+="U"; alarm[10]=5;
keyallowed=false;}
GameMaker Studio Book
11
if keyboard_check(ord('V')) {cheatstring+="V"; alarm[10]=5;
keyallowed=false;}
if keyboard_check(ord('W')) {cheatstring+="W"; alarm[10]=5;
keyallowed=false;}
if keyboard_check(ord('X')) {cheatstring+="X"; alarm[10]=5;
keyallowed=false;}
if keyboard_check(ord('Y')) {cheatstring+="Y"; alarm[10]=5;
keyallowed=false;}
if keyboard_check(ord('Z')) {cheatstring=""; alarm[10]=5;keyallowed=false;}
}
if cheatstring="SPEED"
{
speedcheat=true;
cheatstring="";
}
Draw Event [as needed]
draw_text(x,y,cheatstring);
if speedcheat=true
{
draw_text(100,100,"speed cheat active");
}
GameMaker Studio Book
12
This Book Is Available Now as Paperback or PDF at:www.GameMakerBook.com
GameMaker Studio Book
13
Check Point System This simple code remembers the location ofthe last checkpoint the player touched and spawns there when
dead.
Assumes you have an object obj_checkpoint with sprite set (likeimage above for example) . Also assumes sprite
origin as center for both checkpoint and player object
Player Object
Create Event Example
lives=5;
checkpoint_x=50;
checkpoint_y=50;
x=checkpoint_x;
y=checkpoint_y;
Step Event
x+=4*(keyboard_check(vk_right)-keyboard_check(vk_left));
y+=4*(keyboard_check(vk_down)-keyboard_check(vk_up));
if keyboard_check(ord('D'))// or your own trigger/death code
{
lives-=1;
x=checkpoint_x;
y=checkpoint_y;
}
Collision with Object obj_checkpoint
checkpoint_x=other.x;
checkpoint_y=other.y;
GameMaker Studio Book
14
Car Drift
Creates car control with drift effect.
Youll need a car sprite pointing right for this example.
Create Event
car_speed=0
direction=0
tire_rot=0
friction=1
drift=0
Step Event
if keyboard_check(ord("W")){if car_speed0{car_speed-=.5;}
else if car_speed>-3{car_speed-=.05}}
if ! keyboard_check(ord("S")) && !keyboard_check(ord("W"))
{if car_speed.5
car_speed-=.2;
else car_speed=0;
}
if keyboard_check(vk_space) {if abs(car_speed)>0.7
{
car_speed-=sign(car_speed)*0.7
}
Else car_speed = 0;
GameMaker Studio Book
15
}
if keyboard_check(ord("D")){if tire_rot>-40{tire_rot-=5;}}
if keyboard_check(ord("A"))
{if tire_rot0 image_angle+=car_speed/30*tire_rot;
else
if car_speed360 image_angle=0;
if image_angle30 && speed>6.5 drift=1
if tire_rot6.5 drift=1
if abs(((((image_angle-direction) mod 360)+540) mod360)-180)
GameMaker Studio Book
16
Circular Health 2
This example assumes a health value between 0 and 100inclusive.
Script: draw_circle_health2
//x,y,radius,value,colour1,colour2,outline)
//draw_circle_part_color(200,200,health,c_red,c_red);
// 0 1 2 3 4
//draw background in colour argument4
draw_set_color(argument4);
draw_circle(argument0,argument1,185/4,0);
//draw propotion in colour argument 3
draw_set_color(argument3);
draw_circle(argument0,argument1,(85+argument2)/4,0);
//draw outlines and health value
draw_set_color(c_black);
draw_circle(argument0,argument1,(185/4)+1,1);
draw_circle(argument0,argument1,(85/4)-1,0);
draw_set_color(c_white);
draw_set_font(font_health);
draw_set_halign(fa_center);
draw_set_valign(fa_center);
draw_text(argument0,argument1,health);
Example Usage (in Draw Event):
//x,y,radius,value,colour1,colour2,outline)
//draw_circle_part_color(200,200,health,c_red,c_red);
// 0 1 2 3 4
draw_circle_health2(200,200,health,c_blue,c_red);
GameMaker Studio Book
17
Circular Text Draws text in a moving circle.
Script: draw_text_circular
/*
draw_text_circular(x,y,string,xscale,yscale,speed,rad,firangle,sec angle)
----------------------------------------------------------------------------
-----------------------------------------------
x - X position
y - Y position
string - The text you want to show
xscale - The width of the text
yscale - The height of the text
speed - The speed in which the text rotates. This must be avarible declared
in the step event
rad - The radius of the circle.
fir angle - The direction of the first character in thetext.
sec angle - The direction of the angle relative to the first.Moves
clockwise. Set to 360 to make a full circle
----------------------------------------------------------------------------
-----------------------------------------------
other info:
This function sets the halign to fa_center and the valign tofa_top.
The basic idea is to seperate every character and give it a x/yposition and
an angle value, then draw it
V.1.0
GameMaker Studio Book
18
*/
var xx,yy,text,xs,ys,dd,length,dir,a,b,bb,tt,dir;
xx=argument0;
yy=argument1;
text=argument2;
argument2 = text;
xs=argument3;
ys=argument4;
dd=argument5
length=argument6;
dir=min(argument7,argument8);
dir2=max(argument7,argument8);
tt=string_length(text)
a=+1;
b=0;
bb=b;
repeat(tt) {pos[b]=string_char_at(text,a); a+=1; b+=1;}
b=0;
bb=b;
draw_set_valign(fa_top);
draw_set_halign(fa_center);
repeat(tt){draw_text_transformed(xx+lengthdir_x(length,dir+dd),
yy+lengthdir_y(length,dir+dd),pos[bb],xs,ys,dir-90+dd); bb+=1;dir-=dir2/tt;
}
Example Usage:
Object obj_text
Create Event
ss=0;
Step Event
ss+=0.25;
Draw Event
draw_text_circular(200,200,"Example CircularText",1,1,ss,90,90,180);
GameMaker Studio Book
19
Clickable Text
Script Code draw_text_click
///draw_text_click(x,y,string,margin,hover_color,hover_transparency);
var c;
c = draw_get_color();
var sx,sy,ex,ey;
sx = argument0-argument3;
sy = argument1-argument3;
ex = argument0+argument3+string_width(argument2);
ey = argument1+argument3+string_height(argument2);
var h;
h = (mouse_x>=sx && mouse_y>=sy &&mouse_x
GameMaker Studio Book
20
Countdown Bar This example creates a counting down bar, greatfor visualizing temporary power ups.
Youll need two sprites for this spr_countdown_bar1 610x30 pixels(background) and spr_countdown_bar2 590x20 pixels.
Create Event
maxcount=600;
count=maxcount;
Step Event
count-=1;
if(count
GameMaker Studio Book
21
This Book Is Available Now as Paperback or PDF at:www.GameMakerBook.com
GameMaker Studio Book
22
Countdown Clock
Create Event
// Set Your Time Start Time
seconds = 20; //Set The Starting Seconds
minutes = 1; //Set The Starting minutes
hours = 0; //Set The Starting hours
alarm[0]=room_speed; //Set alarm for one second (room_speed)
Alarm Event
seconds-=1;
if seconds < 0// checks if seconds is less than 0
{
seconds = 59;//resest seconds
minutes -=1;// take one off minutes
}
if minutes < 0 // check if minutes less than 0
{
minutes = 59;// resiest minutes
hours -=1;//take one of hours
}
alarm[0]=room_speed;//reset alarm
if seconds==0 && minutes==0 && hours==0 // checkif countdown has reached
00:00:00
GameMaker Studio Book
23
{
// Do Something, for example@
room_goto(room_game_over);
}
Draw Event
show_hours=string_repeat("0", 2-
string_length(string(hours)))+string(hours);//if single digitadd a leading
show_minutes=string_repeat("0", 2-
string_length(string(minutes)))+string(minutes);//if singledigit add a
leading 0
show_seconds=string_repeat("0", 2-
string_length(string(seconds)))+string(seconds);//if singledigit add a
leading 0
draw_text(view_xview+5,view_yview+5,"Time: " + show_hours + ":"+
show_minutes + ":" + show_seconds);//draw variables
GameMaker Studio Book
24
Day Night Engine
Changes background depending on time of day. Assumes you have abackground set.
Create Event
global.daytime = 0;
hour = date_get_hour(date_current_datetime());
minu = date_get_minute(date_current_datetime());
sec = date_get_second(date_current_datetime());
fase = 0;
to = 1;
color = c_black;
col = 0;
red = 0;
alarm[0] = room_speed;
GameMaker Studio Book
25
Step Event
sec +=30;//More than 30 to set the time too fast, or directlyreplace "sec"
for "minu"
if sec > 60
{
sec = 0;
minu += 1;
}
if minu > 59
{
minu = 0;
hour += 1;
}
if hour > 23
hour = 0;
hh = (hour)+(minu/60);
to = -1;
if hour > 12
{
hh = (hour-12)+(minu/60);
to = 1;
}
fase = ((12-hh)/12)
if to = 1
fase = 1-((12-hh)/12);
if to = -1
fase*=1.6;
if hour = 18
red = ((minu)/60)*255;
if hour = 19
red = 255-(((minu)/60)*255);
if fase < 0.5 //Day
global.daytime = 0;
else if fase < 0.64 //Morning
global.daytime = 0.5;
else //Night
global.daytime = 1;
Draw Event
GameMaker Studio Book
26
if fase < 0.5
col = make_color_rgb(255,255,255);
else if fase < 0.6
{
ff = (fase-0.5)*10;
col = make_color_rgb(255-(ff*31),255-(ff*79),255-(ff*111));
}
else if fase < 0.7
{
ff = (fase-0.6)*10;
col = make_color_rgb(224-(ff*65),176-(ff*17),144+(ff*94));
}
else
col = make_color_rgb(159,159,238);
draw_set_color(c_white);
show_hours=string_repeat("0", 2-
string_length(string(hour)))+string(hour);//if single digit adda
show_minutes=string_repeat("0", 2-
string_length(string(minu)))+string(minu);//if single digit
show_seconds=string_repeat("0", 2-
string_length(string(sec)))+string(sec);//if single digit
draw_text(view_xview+5,view_yview+5,"Time: " + show_hours + ":"+
show_minutes + ":" + show_seconds);//draw variables
draw_set_color(col);
background_blend = col;
GameMaker Studio Book
27
Disappearing Platform A simple disappearing platform.
Youll need to assign a sprite to your object. Create Event
image_alpha=1;
disappear_speed=0.01;//how quicly to disappear
Step Event
if image_alpha
GameMaker Studio Book
28
Do-until
Basic explanation of the structure do-until.
That is the basic structure of do-until:
do{
code 1;
}until( statement 1);
First, the code 1 is executed. After the statement 1 is checked.If it is true, the loop ends. But if it is false, the code 1 isexecuted again and this process continue until the statement 1. Thecode 1 is always executed at least once.
First example:
do{
y+=1;
}until( not place_free(x,y) or y>200);
In this example, a object is shifted by 1 in the y-directionuntil it collides with a solid instance or its position is higherthan 200.
Second example: do{
image_alpha-=0.05;
}until(image_alpha
GameMaker Studio Book
29
Dragging Object Allows click and drag of objects
Create
dragging=true;
Step Event
if(dragging==true)
{
with(self)
{
x+=mouse_x-x;
y+=mouse_y-y;
}
}
Left Pressed Event
instance=instance_position(mouse_x,mouse_y,self);
dragging=true;
Global Left Released Button
dragging=false;
GameMaker Studio Book
30
Draw Array Contents in Boxes Useful if you wish to check valuesfor debugging, or if required to draw them in game.
Showing contents of array drawn on the screen.
Create Event (if needed, provided here for examplepurposes).
var i,j;
for (i = 0; i < 10; i++)
{
for (j = 0;j < 10; j++)
{
array[i,j] = i*j;
}
}
Draw Event
var i,j;
for i= 0; I < 10; i++)
{
for (j= 0; j < 10; j++)
{
cellsize=32
xpos=i*cellsize
ypos=j*cellsize
border=8
draw_rectangle(border+xpos,border+ypos,
border+xpos+cellsize, border+ypos+cellsize,2);
draw_text(border+xpos+5,border+ypos+12,array[i,j]);
}
}
GameMaker Studio Book
31
Dual View Allows you to keep two objects in the view by zoomingin and out.
This example assumes you have two objects, obj_player1 andobj_player2. You will also need to create a view in
your room, for example view[0] width and height of 400 and checkthe enable views checkbox.
Script: view_control
var o1, o2, x1, x2, y1, y2, vw, vh, vb, vscale;
o1 = argument0; x1 = o1.x; y1 = o1.y
o2 = argument1; x2 = o2.x; y2 = o2.y
vb = argument2; vw = view_wport; vh = view_hport;
vscale = max(1, abs(x2 - x1) / (vw - vb * 2), abs(y2 - y1) / (vh- vb * 2))
view_wview = vscale * vw
view_hview = vscale * vh
view_xview = (x1 + x2 - view_wview) / 2
view_yview = (y1 + y2 - view_hview) / 2
Example usage:
Place the following in the step event of a control object:
view_control(obj_player1, obj_player2, 150);// where 150 is roomborder from
object
GameMaker Studio Book
32
This Book Is Available Now as Paperback or PDF at:www.GameMakerBook.com
GameMaker Studio Book
33
Ellipse Movement
This code shows how to make a elliptical pattern .
This code just a basic concept of Analytic geometry to make aobject moves counterclockwise in a ellipse with parameters rx andry, centered in the point (xc,yc), with angular speed angle_speed.In the case r1=r2, the case reduces to a circle.
Create Event
angle=0;
rx=16;
ry=24;
angle_speed=0.05*pi;
xc=xstart;
yc=ystart;
End Step Event
x=xc+rx*cos(angle);
y=yc-ry*sin(angle);
angle+=angle_speed;
if(angle>2*pi) angle-=2*pi;
else if(angle
GameMaker Studio Book
34
Fire Effect
Youll need to assign a sprite to your object. Script fire
//example fire(x,y);
spotX = argument0;
spotY = argument1;
flow = part_system_create();
flame = part_type_create();
smoke = part_type_create();
part_type_shape(flame,pt_shape_flare) // the fire
part_type_size(flame,0.5,0.8,0.30,0)
part_type_scale(flame,0.10,0.10)
part_type_color3(flame,c_white,c_yellow,c_red)
part_type_alpha3(flame,1,0.70,.30)
part_type_speed(flame,0.20,.50,0,0)
part_type_direction(flame,0,359,0,20)
part_type_gravity(flame,0.10,90)
part_type_orientation(flame,0,180,0,0,1)
GameMaker Studio Book
35
part_type_blend(flame,1)
part_type_life(flame,1,40)
part_type_shape(smoke,pt_shape_smoke) // where there's fire,there's smoke
part_type_size(smoke,1,1,0,0)
part_type_scale(smoke,0.25,0.25)
part_type_color2(smoke,c_gray, c_black)
part_type_alpha3(smoke,0.30,0.2,0.1)
part_type_speed(smoke,0.25,0.25,0,0)
part_type_direction(smoke,0,359,0,0)
part_type_gravity(smoke,0.10,90)
part_type_orientation(smoke,0,359,0,1,1)
part_type_blend(smoke,0)
part_type_life(smoke,60,60)
part_type_death(flame,1,smoke)
wound = part_emitter_create(flow);
part_system_depth(flow, -25);
part_emitter_region(flow,wound,spotX+8,spotX+24,spotY+16,spotY+32,ps_shape
_line ,ps_distr_gaussian);
part_emitter_stream(flow,wound,flame,1);
GameMaker Studio Book
36
Flashing Sprite A simple method of making a flashing sprite.
Youll need to assign a sprite to your object. Create Event
flashon=false;
flashing=false;
flashingspeed=5;
flashinglength=100;
Step Event
if flashing==true
{
flashingspeed++;
if flashingspeed mod 5=0
{
flashon=true;
}
else
{
flashon=false;
}
else
{
flashon=false;
}
GameMaker Studio Book
37
if flashingspeed==flashinglength
{
flashing=false;
flashon=false;
flashingspeed=0;
}
Draw Event
if flashon==false
{
image_blend=c_white
}
else
{
image_blend=c_yellow;
}
draw_self();
This will make the sprite flash when flashing=true for the timeof flashinglength at the speed flashing speed.
GameMaker Studio Book
38
Following Object
This example assumes you have two objects with sprites assigned,obj_player and obj_follow.
Object obj_player
Step Event
x+=4*(keyboard_check(vk_right)-keyboard_check(vk_left));
y+=4*(keyboard_check(vk_down)-keyboard_check(vk_up));
Object obj_follow
Create Event
point=obj_player;
Step Event
dir = point_direction( x, y, point.x, point.y );
x = point.x - lengthdir_x( 32, dir );
y = point.y - lengthdir_y( 32, dir );
GameMaker Studio Book
39
For
That is the basic structure of for:
for(statement 1; condition ; statement 2)
{
code 1;
}
First is executed the statement 1 (normaly initialize avariable) and is check the condition, if the condition is false,the loop ends. But if it is true, the code 1 is executed. Afterthat, the stament 3 (normaly is a variable increment or anythingthat can turn the loop main condition false). Lets show a simpleexample:
var i;
for(i=0;i
GameMaker Studio Book
40
Glowing Sprite
This example creates a glowing border around a transparentbackgrounded sprite.
Script: draw_glow
//draw_glow(border,sprite,subimage,xpos,ypos,color);
if glow=true
{
border=argument0;
draw_set_blend_mode(bm_add);
draw_sprite_ext(argument1,argument2,argument3-border,argument4-
border,1,1,0,argument5,0.8);
draw_sprite_ext(argument1,argument2,argument3-
border,argument4+border,1,1,0,argument5,0.8);
draw_sprite_ext(argument1,argument2,argument3+border,argument4-
border,1,1,0,argument5,0.8);
draw_sprite_ext(argument1,argument2,argument3+border,argument4+border,1,1,0,
argument5,0.8);
draw_set_blend_mode(bm_normal);
}
GameMaker Studio Book
41
This Book Is Available Now as Paperback or PDF at:www.GameMakerBook.com
GameMaker Studio Book
42
Grid Slowly Move
This code snaps an object to a grid
Script: move_slowly
/*argument0=x pos, argument1=y pos,argument2=targetx
argument3=targety, argument4=distance, argument5=speed*/
if point_distance(argument0, argument1, argument2, argument3)>
argument4 //if the mouse is outside a certain reach/5 of theobject
{
move_towards_point(argument2, argument3, argument5);
//move towards mouse_x, mouse_y in the speed of 5
}
else
{
speed=0;
move_snap(grid_size,grid_size);
}
GameMaker Studio Book
43
Create Event
grid_size=50;//required
Step Event
//example to make move
target_x=floor(mouse_x/grid_size)*grid_size;
target_y=floor(mouse_y/grid_size)*grid_size;
snap_distance=3;
move_speed=5;
Eample
slowly_move(x,y,target_x,target_y,snap_distance,move_speed);
GameMaker Studio Book
44
Health As Bars This little bit of code will draw your health asbars.
Health As Bars
Create Event
///Draw Health as Bars
var number_of_bars, healthbar, width, height, xpos,ypos,gap;
healthbar=health div 10;//change 10 to value you wish each barto represent
width=20;//width of each bar
height=20;//height of each bar
xpos=100;//change this to change draw location
ypos=100;//change this to change draw location
gap=5;
Draw Event
///Draw Health as Bars
draw_set_color(c_red);
for (number_of_bars = 0; number_of_bars < healthbar;number_of_bars +=1;)
{
draw_set_color(c_red);
draw_rectangle(xpos+width*number_of_bars+(number_of_bars*gap),0+ypos,
xpos+width*number_of_bars+width+(number_of_bars*gap),height+
ypos,false)//false fills the rectangle
}
GameMaker Studio Book
45
Heat Seeking Missile / Bullet Example
This example assumes have a bullet sprite, 16x2 pixels, examplebelow:
Also assumes you have an enemy parent object, obj_enemy.
obj_bullet
Create Event
target = instance_nearest(x, y, obj_enemy);
speed=5;
alarm[0]=50;
alarm[0] = 60; // Life of missile targetting
friction = -0.1;
range=600;
Alarm 0 Event
target = noone;
Step Event
target = noone;
if (instance_exists(target)) {
diff = angle_diff(point_direction(x, y, target.x, target.y),
direction);
direction += sign(diff) * min(abs(diff), 4);
}
if (distance_to_object(obj_enemy)>range)
{instance_destroy();}
GameMaker Studio Book
46
Jet Pack
A simple jet pack engine. Add this to your player object, withsprite.
Create Event
gravity_direction=270;
gravity=0.1;
Step Event
if keyboard_check(ord('W'))
{
effect_create_above(ef_spark, x, y+16, 1, c_green);
vspeed-=0.3;
}
if keyboard_check(ord('A'))
{
hspeed-=0.3;
}
if keyboard_check(ord('D'))
{
hspeed+=0.3;
}
if vspeed
GameMaker Studio Book
47
Keep Object In Room This bit of code keeps the object in theroom, stopping it from leaving by the sides or top and bottom.
This code assumes sprite origin set as center. You can use thiscode if you views present.
End Step Event
if x(room_height-sprite_height/2)y=room_height-sprite_height/2;
GameMaker Studio Book
48
Key and Door
This example assumes you have two objects with sprites assigned,obj_red_door and obj_red_key.
Object Player
Create Event
red_key=false;
Step Event
x+=4*(keyboard_check(vk_right)-keyboard_check(vk_left));
y+=4*(keyboard_check(vk_down)-keyboard_check(vk_up));
Collision With obj_red_door
if red_key=false
{
x=xprevious;
y=yprevious;
}
if red_key=true
{
with(other){instance_destroy();}
}
Collision With obj_red_key
red_key=true;
with(other){instance_destroy();}
GameMaker Studio Book
49
Keyboard On Screen
This example creates a room with a keyboard that can be used toenter text and numbers
This example required sprites, each with 4 sub images as shownbelow:
spr_button:
spr_enter:
spr_space:
GameMaker Studio Book
50
Object Button
Create Event
activated = true;
letter = "A";
image_speed = 0;
image_index = activated;
global.word="";
draw_sprite_ext(argument1,argument2,argument3+border,argument4+border,1,1,0,
argument5,0.8);
draw_set_blend_mode(bm_normal);
}
Step Event
if(activated){
//if the mouse hovers above the button
if(mouse_x>=x && mouse_x=y &&
mouse_y
GameMaker Studio Book
51
Object obj_enter
Create Event
activated = true;
image_speed = 0;
image_index = activated;
Step Event
if(activated){
//if the mouse hovers above the button
if(mouse_x>=x && mouse_x=y &&
mouse_y
GameMaker Studio Book
52
Object obj_space
Create Event
activated = true;
image_speed = 0;
image_index = activated;
Step Event
if(activated){
//if the mouse hovers above the button
if(mouse_x>=x && mouse_x=y &&
mouse_y
GameMaker Studio Book
53
Object obj_set_up_keyboard
Create Event
//creating all the buttons
//numbers
var alphabet = "1234567890";
for(i = 0; i
GameMaker Studio Book
54
var bt = instance_create(88+i*32+(8*i), 160, obj_button);
bt.letter = string_char_at(alphabet, i+1);
}
//Special Characters
var alphabet = "@-_";
for(i = 0; i
GameMaker Studio Book
55
This Book Is Available Now as Paperback or PDF at:www.GameMakerBook.com
GameMaker Studio Book
56
Keyboard Simple Movement Code Multi-Directional Detects keypresses and makes an object move. This code will allow diagonalmovement.
Code
if keyboard_check(ord('A'))
{
hspeed = -5;
}
if keyboard_check(ord('D'))
{
hspeed = 5;
}
if keyboard_check(ord('W'))
{
vspeed = -5;
}
if keyboard_check(ord('S'))
{
vspeed = 5;
}
if keyboard_check(vk_nokey)
{
vspeed = 0;
hspeed = 0;
}
You could also do this using:
if keyboard_check(vk_left). . .
if keyboard_check(vk_right). . .
if keyboard_check(vk_up). . .
if keyboard_check(vk_down). . .
If you want just up/down/left/right and no diagonal movement usethis: x+=4*(keyboard_check(vk_right)-keyboard_check(vk_left));
y+=4*(keyboard_check(vk_down)-keyboard_check(vk_up));
GameMaker Studio Book
57
Laser Effect
Script draw_laser
draw_set_color(make_color_rgb(irandom(255),irandom(255),irandom(255)));
draw_line_width(argument0, argument1, argument2, argument3,5);
draw_set_color(c_lime);
draw_line(argument0+1,argument1+1,argument2,argument3);
draw_line(argument0+1,argument1-1,argument2,argument3);
draw_line(argument0-1,argument1+1,argument2,argument3);
draw_line(argument0-1,argument1-1,argument2,argument3);
draw_line(argument0,argument1,argument2,argument3);
effect_create_above(ef_spark, argument2, argument3, 1,
choose(c_red,c_orange));
Draw Event Example
draw_laser(x,y,mouse_x,mouse_y);
GameMaker Studio Book
58
Line of Sight This nifty little code checks wether an object ishidden from view or not.
This assumes you have three objects obj_player, obj_wall,obj_enemy. This example looks for a line of site from
enemy to player. This example assumes sprite origins ascenter.
Code for object obj_enemy
Create Event
hidding=false;
Step Event
ifcollision_line(x,y,obj_player.x,obj_player.y,obj_wall,true,true){
draw_line(x,y,obj_player.x,obj_player.y);
hidding=true;
}
else
{
hidding=false;
}
Draw Event
GameMaker Studio Book
59
draw_self();
if hidding
{
draw_text(x,y,"Hidden");
}
else
{
draw_text(x,y,"Can See");
draw_line(x,y,obj_player.x,obj_player.y);//shows line greatfor
testing
GameMaker Studio Book
60
Load / Save System This code allows you to save / loadvariables.
To save:
ini_open( savedata.ini );
ini_write_real( level_section, level, global.level );
ini_write_real( distance_section, distance, global.distance);
ini_close();
This will store the current values of global.level andglobal.distance. If the values were 3 and 287, then the created inifile would look like:
[level_section]
level=3
[distance_section]
distance=287
To load:
ini_open("savedata.ini");
global.level = ini_read_real("level_section", "level", 1);
global.distance = ini_read_real("distance_section", "distance",0);
ini_close();
This would load the values stored in the ini file. If no fileexists it will use the default values provided (in this case
the numbers 1 and 0 after the last comma).
GameMaker Studio Book
61
This Book Is Available Now as Paperback or PDF at:www.GameMakerBook.com
GameMaker Studio Book
62
Local Time - Real Time Clock Example
Create Event
// use code below, or load data from saved file
seconds = 0;
minutes = 0;
hours = 0;
alarm[0]=room_speed;
Alarm Event
seconds++;
if seconds > 59
{
seconds = 0;
minutes +=1 ;
}
if minutes > 59
{
minutes = 0;
hours +=1;
}
alarm[0]=room_speed;
Draw Event
show_hours=string_repeat("0",2-string_length(string(hours)))
+string(hours);
show_minutes=string_repeat("0",2-string_length(string(minutes)))
+string(minutes);
show_seconds=string_repeat("0",2-string_length(string(seconds)))
+string(seconds);
draw_text(view_xview+5,view_yview+5,"Time: " + show_hours + ":"+ show_minutes + ":" + show_seconds);
GameMaker Studio Book
63
Marquee Effect This example creates scrolling text.
Example of text with border
Create Event
var position,width,text,last,first;
position = 1;
width = 20;
alarm = 25;
text = "Scrolling Text Example ";
Alarm[0] Event
position += 1;
if position > string_length(text) { position = 1 };
alarm = 25;
Draw Event
last = min(position+width,string_length(text)+1);
first = max(0,position+width-last);
draw_text(x,y,string_copy(text,position,last-
position)+string_copy(text,0,first));
GameMaker Studio Book
64
Map
Assumes you have a sprite, spr_map, 6x6 pixels in solid red. Anda wall parent object obj_wall_parent(no sprite required).
Draw Event (control object)
var d,a,xx,yy;
xx = Player_Obj.x;
yy = Player_Obj.y;
with(obj_wall_parent)
{
d = point_distance(xx,yy,x,y);
if(d
GameMaker Studio Book
65
Mist Effect Creates a darkening red colour over the screen basedon the players health.
Assumes you have a sprite, spr_blood, 20x20 pixels colouredred.
Example Usage
Create Event (control object)
health=100;
alpha=0;
Step Event
if keyboard_check(ord('A')){health-=1;}
if keyboard_check(ord('D')){health+=1;}
alpha=1-(0.5+(health/200));
Draw Event
draw_sprite_ext( spr_blood, 0, 1, 1, room_width/20,room_height/20, 0,
c_red, alpha);
draw_text(100,100,health);
GameMaker Studio Book
66
Motion Trail Create a motion trail effect
Youll need a sprite a transparent circle inside.
Create Event
t = 0;
tm = 16;
speed = 10 + random(5);
_direction = -5 + random(10);
Draw Event
t = min(t + 1, tm);
for (i = t; i > 1; i -= 1)
{
tx[i] = tx[i-1];
ty[i] = ty[i-1];
ta[i] = ta[i-1];
ti[i] = ti[i-1];
}
tx[1] = x;
ty[1] = y;
ta[1] = direction;
ti[i] = image_index;
direction += _direction;
for (i = 1; i
GameMaker Studio Book
67
Mouse Over Button Effect Changes sprite if mouse over or pressedon object.
This example uses a sprite with 3 different submiages,0=nomouse, 1=mouse over and 2=mouse pressed
Step Event
if(mouse_x>=x && mouse_x=y &&
mouse_y
GameMaker Studio Book
68
Mouse Over Button Effect 2 Changes sprite if mouse over orpressed on object.
This example assumes sprite origin at top left.
Create Event
Mouse_over=false;
Step Event
if(mouse_x>=x && mouse_x=y &&
mouse_y
GameMaker Studio Book
69
Mouse Pointer Point Direction Draws a mouse cursor pointing indirection of movement.
This Example assumes sprite pointing right with origin ascenter.
Step Event
move_towards_point(mouse_x,mouse_y,point_distance(x,y,mouse_x,mouse_y)/6);
Draw Event
window_set_cursor(cr_none);//hides default
draw_sprite_ext(sprite_index,0,x,y,1,1,point_direction
(xprevious,yprevious,x,y),c_white,1);
//Note: use window_set_cursor(cr_default); to allow drawingdefault cursor
again.
GameMaker Studio Book
70
Moving Background
Set a background for your room and make it move with thefollowing code.
Example Usage
Step Event
if keyboard_check(vk_left)
{
background_hspeed = -2;
}
if keyboard_check(vk_right)
{
background_hspeed = 2;
}
GameMaker Studio Book
71
Moving Cloud Effect Creates a cool effect of moving clouds.
This example uses two objects, the cloud object and a spawningcontrol object.
Object obj_cloud ( with cloud sprite assigned).
Create Event
motion_set(90,0.5+random(2));
Step Event
if y
GameMaker Studio Book
72
Moving Platform 2 Another way of creating a moving platform.
This example uses two objects, obj_block and obj_platform. Withobj_block assign a 32x32 pixel sprite and uncheck the visiblebutton in the object properties. For this example obj_platform is96x32 pixels.
Platform Object obj_platform
Create Event
motion_set(0,3);
Collision with obj_block
hspeed *= -1;
Just place obj_platform between 2 obj_blocks, and the platformwill happily bounce back and forth.
Example:
GameMaker Studio Book
73
Multi Key Press
This little script detects two key presses and returns true orfalse
Script: both_pressed
if keyboard_check(ord(argument0)) &&keyboard_check(ord(argument1))
{
return(true);
}
else
{
return(false);
}
Example Usage (in Step Event):
if both_pressed('Z','X')
{
//Do Something
}
else
{
//Do Something Else
}
GameMaker Studio Book
74
This Book Is Available Now as Paperback or PDF at:www.GameMakerBook.com
GameMaker Studio Book
75
Move and Rotate Moves in direction pointing.
Assumes you have a right-facing sprite assigned to the object,with origin as center. Step Event
image_angle=direction;
if speed>10
{
speed=10;
}
if speed0 speed-=0.1;
if speed
GameMaker Studio Book
76
Moving Platform A simple moving platform.
Youll need to assign a sprite to your object.
Create Event
distance=200;
moving="right";
start_x=x;
Step Event
if moving="right" x+=4;
if moving="left" x-=4;
if x=start_x+distance moving="left";
if x=start_x moving="right";
Can also be used as up/down movement, just change x to y, andright and left to down and up. If you have multiple platforms thatmove different distances, just set the above as a parent object andin the create event of the child objects set distance asrequired.
GameMaker Studio Book
77
Multiple Collision Makes sure multiple items are destroyed uponcollision.
Collision Event (Put in a balls collision event withobj_target_parent).
with(obj_target_parent){
if(instance_place(x,y,other.id){
instance_destroy();
}
Youll to create an object obj_target_parent , no sprite or codeis needed. Just set obj_target_parent as parent of your objectsthat can be destroyed. For example if a ball hits more than oneobject on a collision, all objects it touches at that time withparent set will be destroyed.
GameMaker Studio Book
78
Multiple Press (Devices) Some mobile devices allow detection ofyou touching five different places on screen simultaneously.This
example allows you to visualize these places.
Assumes you have a sprite assigned for objectobj_finger_mark.
Step Event in Control Object obj_control
for (i = 0; i < 5; i += 1; )
{
if device_mouse_check_button(i, mb_lef;
{
instance_create(device_mouse_raw_x(i),device_mouse_raw_y(i),
obj_finger_mark);
}
}
Just set obj_target_parent as parent of your objects, so forexample if a ball hits more than one object on a collision, allwill be destroyed.
GameMaker Studio Book
79
Nested if-else How to know and use correctly a nestedif-else.
Normaly when we code a action with several cases of if to check,the usual options are using:
if(condition1){action1;}
else{
if(condition2){action2;}
else{
if(condition3){action3;}
else {action4;}
}
}
Or using the switch statement.
The second option only work with conditions that are base in ==(like x==2 , action==stand) and can make comparation with onesingle variable. And the first one can be a chore to work.
So we can use a structure that looks a better case of switch andmore compact and easy to implement and edit.Lets look in thefollowing example.
if(x6){y=1;}
else if(x==3 or x==4){y=2;}
else {y=3;}
}
}
Using the way is easier to work with and it is more flexible touse condition.Plus, if one of the condition is fulfilled, the nextconditions are skipped.
GameMaker Studio Book
80
Path Finding Path finding is when you you calculate a pathbetween two point in a room or map.
Usually youll want to find a path that avoids things like wallsor trees.
This example shows how to do simple path finding by avoidingwalls.
Above: Example Room For Testing
This example assumes you have three objects with spritesassigned:
obj_wall 32x32 pixels
obj_finish 32x32 pixels
obj_player with sprite named spr_player 16x16 face with 16x16border ie:
Object obj_player
Create Event
dir=direction;
Begin Step Event
dir=direction
grid=mp_grid_create(0,0,room_width/32,room_height/32,32,32);
path=path_add();
mp_grid_add_instances(grid,obj_wall,1)
mp_grid_path(grid,path,x,y,obj_finish.x,obj_finish.y,1);
path_start(path,2,'',1);
Draw Event
draw_sprite_ext(spr_player,0,x,y,1,1,dir,c_white,1);
GameMaker Studio Book
81
This Book Is Available Now as Paperback or PDF at:www.GameMakerBook.com
GameMaker Studio Book
82
Platform & Change Direction A quick way to make an objectchange direction.
Code
hspeed*=-1;
Can also be used with vspeed. Just put it in the event you want,like mouse button or collision event.
This can also be used to make a moving platform changedirection. Just put an invisible object to the left and right whereyou want the range of the platform to be.
GameMaker Studio Book
83
Platform Jumping
This code allows a player to jump once or twice.
Create Event
gravity_direction=270;
gravity=0.5;
friction=0.2;
jump=1;
max_jumps=2;// change this to 1 for single jump
Step Event
if keyboard_check_pressed(vk_space)and max_jumps >0
{
vspeed -= 10
max_jumps -= 1
}
Collison with obj_floor
max_jumps=2;
if vspeed > 0 && !place_free(x,y+vspeed)
{
move_contact(270);
vspeed = 0;
}
GameMaker Studio Book
84
Player Lock In some cases, you want that the user dont havecontrol over player, when he is hurt, in a cutscene , a pause
screen or in other situations. To have a better control of whenyou can move the player or not. We are going
using a flag variable control_lock that has 2 values: False ifyou the user has full control over the player, or true if
the players control is locked. Consider an example that theobj_player, hit by a moving ball obj_ball, it loses
control for 60 steps. Below is an example:
Create Event with obj_ball
control_lock=false;
Collision Event with obj_ball
If(control_lock==false){
control_lock=true;
alarm[0]=60;
}
Step Event
If(control_lock==true)exit;
if(keyboard_check(vk_right))x+=4;
if(keyboard_check(vk_left))x-=4;
Alarm[0] event
control_lock=false;
So in the Step event, if control lock is true, the exitstatement is executed, skipping all the code after this.
GameMaker Studio Book
85
Point To Nearest Point to nearest object.
This example assumes have a sprite pointing right and a targetobject obj_target.
Create Event
turn_speed = 0;
sight_dist = 200; // Length of the field of view
sight_angle = 15; // Width of the field of view
Step Event
var target, diff;
target = instance_nearest(x, y, obj_target);
if (instance_exists(target)) {
// Make the turret slowly turn to the nearest enemy
turn_speed += sign(angle_diff(point_direction(x, y, target.x,target.y),
image_angle)) * 0.2;
if (abs(turn_speed) > 3) turn_speed = sign(turn_speed) *3;
}
else {
// Make it stop when there is no enemy
turn_speed -= sign(turn_speed) * 0.2;
}
image_angle += turn_speed;
GameMaker Studio Book
86
Point Direction Movement This little nugget of a code will makea sprite look in the direction its moving.
Create Event
mirror=false;
Step Event
if keyboard_check(vk_left)
{
mirror=true;
//Plus any movement code
}
if keyboard_check(vk_right)
{
mirror=false;
//Plus any movement code
}
Draw Event
if mirror=true
{
image_xscale=-1;
}
else
{
image_xscale=1;
}
Draw_self();//as required
GameMaker Studio Book
87
Power Bar
Upon key press power bar goes up and down then gives value toglobal.powerreturn. Sets global.powerreturn as
-1 when not in use (in your code check that not -1 and afterusing in your code set back to -1 when done using).
Create Event
mult = 1;
powerbar = 0;
global.powerreturn=-1;
Step Event
if keyboard_check(ord('Z'))
{
powerbar += 5*mult;
if powerbar >= 100 || powerbar
GameMaker Studio Book
88
if keyboard_check_released(ord('Z'))
{
global.powerreturn=powerbar;
show_message(global.powerreturn);
}
Draw Event
draw_text(6,120,powerbar);
draw_set_color(c_red);
draw_rectangle(0,100-powerbar,25,100,0)
draw_set_color(c_black);
draw_rectangle(0,0,25,100,1);
GameMaker Studio Book
89
Power Up Creates a temporary power up.
Create Event
power_up=false;
Alarm Event
power_up=false;
Step Event
if keyboard_check(ord('P')) && power_up=false
{
power_up=true;
alarm[0]=4*room_speed;
}
// sets power_up when active
Draw Event
if power_up=true
{
draw_text(50,50,"POWER UP");
}
else
{
draw_text(50,50,"NO POWER UP");
}
GameMaker Studio Book
90
Pushing Block A simple method for pushing a block by aplayer.
This example assumes you have a player sprite and blocksprite.
Player Step Event (provided for example, replace with your ownmovement code as required
if keyboard_check(vk_left)x-=5;
if keyboard_check(vk_right)x+=5;
Block Step Event
if place_meeting(x+5,y,obj_player)if place_free(x-5,y){if
keyboard_check(vk_left){x-=5}}
if place_meeting (x-5,y,obj_player) if place_free(x+5,y){ifkeyboard_check
(vk_right) {x+=5}}
Can also be used on y axis, just copy and paste and change thexs to ys.
GameMaker Studio Book
91
Radar This cool code draws a radar and position of enemies inrelation to the player.
This assumes you have:
Object Player_Obj with sprite assigned
Object Enemy_Parent with no sprite
Object Obj_Enemy with sprite and parent set as Enemy_Parent
Sprite RadarBlip (2x2 pixels in red)
Code for object Player_Obj
Step Event
//replace with your movement code as needed
x+=4*(keyboard_check(vk_right)-keyboard_check(vk_left));
y+=4*(keyboard_check(vk_down)-keyboard_check(vk_up));
Radar Object Radar_Obj
GameMaker Studio Book
92
Create Event
//Initialize Variables
indexCount = 0; //iterates the index for the enemyIndex
radarX = 0; //the corrosponding X coord of the playerShip
radarY = 0; //the corrosponding Y coord of the playerShip
maxEnemies = 0;
radar_sweep_angle=2;
Draw Event
//stop here if no player
if (!instance_exists(Player_Obj))
{
exit;
}
//local vars for easy access in the with() and to preventcreating variables
in the instances
var d,a,xx,yy;
xx = Player_Obj.x;
yy = Player_Obj.y;
with(Enemy_Parent)
{
//how far
d = point_distance(xx,yy,x,y);
//in range
if( d < 3000 && d > 1500) // This will set theblips to the outside
edge, creating a lingering effect
{
//convert radar range to radar display radius
d = 75;
//angle to target
a = point_direction(xx,yy,x,y)
//draw relative to center of radar using simplifiedlengthdir
function
draw_sprite(RadarBlip, 0, view_xview[0]+75 +lengthdir_x(d,a),
view_yview[0]+75 + lengthdir_y(d,a));
}
else if(d
GameMaker Studio Book
93
d = d/1500*75;
a = point_direction(xx,yy,x,y)
draw_sprite(RadarBlip, 0, view_xview[0]+75 +lengthdir_x(d,a),
view_yview[0]+75 + lengthdir_y(d,a));
}
}
GameMaker Studio Book
94
Random Numbers and Algorithms
The random algorithms are normaly used to add diversity andextra difficult for the game to avoid it turn linear andpredictable. The most simple case is the function choose function,that pick randomly one of his arguments. If, for example, you has aboss with 3 attack pattern set by the variable attack, a way to useis put in the bosss event (that can be in Alarm Event, forexample)
Alarm[0] Event
attack=choose(1,1,1,2,2,3);
With repeat numbers, we raise the probability of this specificattack. In this case, attack pattern 1 is more common and attackpattern 3 is more rare. Note that this function accepts upto 16options. In this case 1 has 3/6 (50%) chance, 2 a 2/6 (33%) chanceand 3 a 1/6 (17%) chance. We can use function like random(x) (thatreturns randomly a real number (with decimals) between 0 and x, notincluding x), random_range(x1,x2) (that returns randomly a realnumber between x1 and x2, not including x2), and theirs respectivesversions that return only integer numbers(whole numbers)(irandom(x) and irandom_range(x1,x2)). For example lets place anobject in a random placee in the room:
Create Event
x=floor(random(room_width));
y=floor(random(room_height));
This will make the object start at a random x / y position.floor rounds the number down to a whole number. You could also useceiling which would round up or round to round to nearest wholenumber.
For the purposes of making games easier to create and testGameMaker will always generate the same random numbers each time agame is played. For example if in your game you rolled a dice 5times and got 5 3 1 6 3 2, the next time you played youd also get 53 1 6 3 2. Depending on your game you may want different numberseach time. To do this use:
randomize();
There may times, for example you have randomly generated level,that you want to be the same each time, you can use:
random_set_seed(number);
You could set a new seed for each level, for example:random_set_seed(level), where level is the level number as aninteger.
GameMaker Studio Book
95
This Book Is Available Now as Paperback or PDF at:www.GameMakerBook.com
GameMaker Studio Book
96
Random Word From A Text File This example shows how to select arandom word from a text file.
Script
var file;
if(file_exists(working_directory + "dictionary.txt")){
//open the dictionary file
file = file_text_open_read(working_directory +"dictionary.txt");
if(file == -1){
//if loading the file failed return -1
return -1; //will end the script
}
var wordList, wordNumber = 0;
//make a list containing all words of the dictionary
while(!file_text_eof(file)){
wordList[wordNumber] = file_text_read_string(file);
file_text_readln(file);
wordNumber++;
GameMaker Studio Book
97
}
file_text_close(file);
return wordList[irandom(wordNumber-1)]; //return a randomword
}
To get a word use:
word = newWord();
This uses an included file, dictionary.txt , an example of thecontents is below:
CHEESE
BACON
MELON
POTATO
MUSHROOM
GameMaker Studio Book
98
Random Word From Array Chooses a random word from an array.
Script random_word
var array_word;
array_word[0]="CHEESE";
array_word[1]="BACON";
array_word[2]="BREAD";
array_word[3]="MUSTARD";
array_word[4]="CAKE";
array_word[5]="CHOCOLATE";
array_word[6]="PIE";
array_word[7]="ORANAGE";
array_word[8]="BANANA";
array_word[9]="COFFEE";
size=array_length_1d(array_word)-1;
return array_word[irandom(size)];Change as required
Example Usage:
Word=random_word();
GameMaker Studio Book
99
Real Time Clock Example
Create Event
minute=0;
second=0;
hour=0;
Step Event
minute=current_minute;
hour=current_hour;
second=current_second;
Draw Event
draw_text(x,y,string(hour)+string(":")+string(minute)+string(":")+string(second));
GameMaker Studio Book
100
Remove Sprite Background
Sprite with background removed
This is a quick and easy way to remove a background.
Open the sprite editor and select Erase a Color
Then erase the background colour
GameMaker Studio Book
101
This Book Is Available Now as Paperback or PDF at:www.GameMakerBook.com
GameMaker Studio Book
102
Repeat
That is the basic structure of repeat:
repeat(n)
{
code 1;
}
In this way, the code is repeated n times. With this form, itcan group the same code that would be typed again in n-1 times. Itcan be used easily to created n instances randomly placed, using inarrays or data structures.
First example:
repeat(8)
with(instance_create(x,y,obj_snow_splatter)) {
speed=1;
direction=irandom_range(1,360);
}
With this one, is created 8 particles that moves in randomlydirections with speed 1.
Second example:
Var n;
n=choose(1,2,3);
repeat(n){
x+=10;
}
With his one the code x+=10; is repeated in n time, that is setrandomly between 1 and 3.
GameMaker Studio Book
103
Room Transition An easy to way to fade in and out of rooms.
For this code youll need a sprite 20x20 pixels coloured black,spr_fade.
Create Event
image_alpha=0;
Step Event
image_alpha+=0.01;
if image_alpha>1
{
// do something (go to a room for example)
instance_destroy();
}
Draw Event
draw_sprite_ext( spr_fade, 0, 1, 1, room_width/20,room_height/20, 0, 0,
image_alpha );
This should also work if youre using views, but may need someadjustment. To fade in change start the alpha as 1 and reduce inthe step event, and change the conditional to check for
GameMaker Studio Book
104
Rotating Background A demonstration of a rotatingbackground.
Youll need a background assigned to the room to see this effect.Youll also need to views.
Create Event
angle=0;
Step Event
angle+=1;
if angle>359 angle=0;
Draw Event
view_angle[0]=angle;
GameMaker Studio Book
105
Score Example
This examples assumes you have an object obj_coin with spriteassigned.
Object obj_player
Create Event
score=0;
Step Event
x+=4*(keyboard_check(vk_right)-keyboard_check(vk_left));
y+=4*(keyboard_check(vk_down)-keyboard_check(vk_up));
Collision with object obj_coin
with (other) instance_destroy();
score+=1;
Draw Event
draw_text(50,50,"Score:="+string(score));
draw_self();
GameMaker Studio Book
106
Score With Leading Zeros
Draw Event
str = string(score);
draw_text(x, y, string_repeat("0",6-string_length(str))+str);
GameMaker Studio Book
107
Scrolling Credits Allows you to swap object positions thorughclicking
Create Event
text[0]="This Text Floats Up";
text[1]="And Fade Outs at Top Of Screen";
text[2]="Great For Providing Inoformation";
text[3]="Or Display Game Credits";
text[4]="When It's Done";
text[5]="Program It To Do Something";
total_lines=array_length_1d(text);
i=room_height;
p=0;
h=1;
title=room_first;
Draw Event
draw_set_color(c_black);
draw_set_halign(fa_center);
draw_set_valign(fa_middle);
draw_set_font(font0);///set your font here
h=i/100;
draw_set_alpha(h);
draw_text_ext(room_width/2,i,text[p],20,room_width-20);
if keyboard_check(vk_enter) i-=5; else i-=2
if itotal_lines then
{//do something, go to room/restart for example}
GameMaker Studio Book
108
Shooting Alarm
This code sets an alarm to limit how often a player canshoot.
Create Event
can_shoot=true;
Alarm[0] Event
can_shoot=true;
Step Event
if can_shoot=true
{ //do something}
else
{//do something else}
Global Left Button
if can_shoot=true
{
alarm[0]=room_speed*3;
can_shoot=false;
}
Draw Event
//Provided for testing purposes/example
if can_shoot=true
{ draw_text(50,50,"Can Shoot"); }
else
{draw_text(50,50,"Can't Shoot");}
GameMaker Studio Book
109
Sliding Bar Allows user to change/set values using a sliding barwith button.
This example assumes you have two sprites, spr_sliderTrack solidblack 4*4 pixels, and spr_sliderMark solid red
4*8 pixels.
Object obj_slider
Create Event
minValue = self.x - (sprite_width / 2);
maxValue = self.x + (sprite_width / 2);
curValue = 0.5;
length = maxValue - minValue;
isSliding = false;
Step Event
if(mouse_check_button_pressed(mb_left) &&position_meeting(mouse_x,
mouse_y, self))
{
isSliding = true;
}
if(mouse_check_button_released(mb_left))
{
isSliding = false;
}
if(isSliding) {
curValue = (mouse_x - minValue) / length;
if(mouse_x < minValue) {
curValue = 0;
}
if(mouse_x > maxValue)
{
curValue = 1;
GameMaker Studio Book
110
}
}
switch(function)
{
case "mainVolume": sound_global_volume(curValue); break;
}
Draw Event
draw_self();
draw_sprite(spr_sliderMark, 0, (length * curValue) + minValue,y);
draw_text(x, y+10, string(curValue));
When you place object obj_slider in the room click on a cornerand stretch
out as needed, for example:
GameMaker Studio Book
111
Slowly Move
Two methods to make an object slowly move to a position
Method 1
Step Event
movement_speed=25;//Higher Number Makes Slower Speed
target_x=mouse_x;//or other target position
target_y=mouse_y;//or other target position
x +=( target_x-x)/ movement_speed; //target position-currentposition
y +=( target_y-y)/ movement_speed; //target position-currentposition
Method 2
Script slowly_move
/*argument0=x pos, argument1=y pos,argument2=targetx
argument3=targety, argument4=distance, argument5=speed*/
if point_distance(argument0, argument1, argument2, argument3)> argument4
//if the mouse is outside a certain reach/5 of the object
{
move_towards_point(argument2, argument3, argument5); //movetowards
mouse_x, mouse_y in the speed of 5
}
else speed = 0;
Example, in a step event:
target_x=mouse_x;
target_y=mouse_y;
slowly_move(x,y,target_x,target_y,0,5);
GameMaker Studio Book
112
Smoke Effect
A simple code to create a falling and fading effect
Showing Smoke Effect
Create Event
motion_set(90,2);
Step Event
image_alpha-=0.02;
if image_alpha
GameMaker Studio Book
113
Snap To Grid
Create Event
grid_size=50;//required
grid_x=round(room_width div grid_size)+1;//used in example todraw grid
grid_y=round(room_height div grid_size)+1;//used in example todraw grid
Step Event
x=grid_size*(round(mouse_x div grid_size));
y=grid_size*(round(mouse_y div grid_size));
Draw Event
draw_self();//as required
///draw a grid example
var i,j;
draw_set_color(c_black);
for (i = 0; i < grid_x; i += 1)
{
{
for (j = 0; j < grid_y; j += 1)
{
draw_rectangle(i*grid_size,j*grid_size,i*grid_size+49,j*grid_size+49,1);
}
}
}
There is also an built function
move_snap(grid_size,grid_size);
Though youll probably find the script better as it detects whichgrid to position, not an approximation.
GameMaker Studio Book
114
Snow and Rain Effect Creates a beautiful snow / rain effect.
Just create an object and put this in the step or drawevent.
Code
effect_create_above(ef_snow,irandom(room_width), -100,random(4)+0.1,
c_white);
Just change ef_snow to ef_rain for a rain effect.
GameMaker Studio Book
115
Sniper Effect Blacks out the screen except small gun site.
Youll need a sprite a transparent circle inside.
Draw Event
draw_set_color(c_black);
draw_sprite(sprite_index,image_index,mouse_x,mouse_y);
draw_rectangle(0,0,mouse_x-sprite_xoffset,room_height,false);
draw_rectangle(mouse_x-
sprite_xoffset+sprite_width,0,room_width,room_height,false);
draw_rectangle(0,0,room_width,mouse_y-sprite_yoffset,false);
draw_rectangle(0,mouse_y-
sprite_yoffset+sprite_height,room_width,room_height,false);
GameMaker Studio Book
116
This Book Is Available Now as Paperback or PDF at:www.GameMakerBook.com
GameMaker Studio Book
117
Soft Ball Physics Creates a squashy bouncy ball effect:
This example assumes you have object obj_solid_parent with asprite assigned.
Youll also need a obj_ball with a ball sprite (128x128 pixels)with transparent background.
Object Ball
Draw Event
texture=sprite_get_texture(spr_ball,0);
radius=48;
quality=50;
bounce=1;
image_xscale=radius/80;
image_yscale=image_xscale;
gravity_direction=270;
gravity=.5;
scr_blob(texture,radius,bounce,quality,obj_solid_parent);
Script scr_blob
GameMaker Studio Book
118
//scr_blob(texture,radius,bounce,quality
Tips Tricks - [PDF Document] (2024)
References
- https://documents.pub/document/tips-tricks-563dcec4a573b.html
- https://en.annas-archive.org/md5/6525c76966c134267d429e105d3a3e79
Top Articles
Cheeseburger Quiche Recipe with Ground Beef - These Old Cookbooks
Zucchini and Ground Beef Casserole Recipe - Food.com
Cr.org/Convertfilm
portland for sale "herman miller" - craigslist
Aphy3D Cake Revenge
Custom units creation - War Thunder Wiki
Top 5 Free Classified Posting Sites in The USA 2024 - wpWax
2012 Toyota Camry Hybrid for sale - Puyallup, WA - craigslist
Joinaspca.org Adoption Cats
A Song from the Divines Vol. XIX - TheSingingSword
Pickpocketing Vyres
Wowkino Sait
Latest Posts
Giant Italian Easy Meatball Recipe (+ Video) - Don't Waste the Crumbs
The Best Keto Sloppy Joes Recipe • Low Carb with Jennifer
Article information
Author: Ouida Strosin DO
Last Updated:
Views: 6411
Rating: 4.6 / 5 (56 voted)
Reviews: 95% of readers found this page helpful
Author information
Name: Ouida Strosin DO
Birthday: 1995-04-27
Address: Suite 927 930 Kilback Radial, Candidaville, TN 87795
Phone: +8561498978366
Job: Legacy Manufacturing Specialist
Hobby: Singing, Mountain biking, Water sports, Water sports, Taxidermy, Polo, Pet
Introduction: My name is Ouida Strosin DO, I am a precious, combative, spotless, modern, spotless, beautiful, precious person who loves writing and wants to share my knowledge and understanding with you.