Tips Tricks - [PDF Document] (2024)

  • 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

Top Articles
Latest Posts
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.