8-Bit Warrior Games + Design + Tutorials + Random


Insane Number Run (Made with GameMaker)

Insane Number Run

Available on iOS, Android, and Kongregate.

I recently finished up work on a new game, Insane Number Run, for Happy Bacon Studios.  It is a relatively simple game where you must, counting up, reveal all hidden numbers in order.  Its development started with the intent to make a small game with a quick production cycle but, like many projects, it took longer than expected to polish things and have it feel "just right". For those curious, it was created using GameMaker: Studio, which generally makes development an enjoyable experience.

Feel free to check it out. Reviews are appreciated! :)



[PersistGMS v0.2.0] – Custom Room Persistence for GameMaker: Studio (EXPERIMENTAL)


Currently, it should only be used for smaller projects or learning purposes.
Documentation can be found in the 'Create Event' of obj_PersistentManager.



.gmz Example Project (outdated)



PersistGMS provides a foundation for custom room persistence in GameMaker. It is designed to be easy to use. Simply add the objects you want to remain persistent for each room to a list contained in obj_PersistentManager. For now, only the x/y values of persistent objects are recorded, but this can easily be extended to suit specific needs.

Feel free to check out the example project, or download and directly import obj_PersistentManager.object.gmx into your own project. There is no need to download additional scripts or .dll files.

Designed to work across all target platforms (Windows, Mac, Linux, iOS, Android, HTML5).
Feel free to report any bugs or design issues you face.

Persistent Action!


Tagged as: , , , No Comments

TweenGMS – GameMaker: Studio Tweening Engine

TweenGMS is a feature-rich tweening engine for GameMaker: Studio which is both easy-to-use and flexible. With nearly 3 years of development, it offers many essential and advanced features powered by an optimised codebase.

Quickly improve the look of your games by tweening movements, fades, rotations, animations, paths, stats, and much more!

Available on GameMaker Marketplace:

TweenGMS Pro / TweenGMS Lite

HTML5 Demo

[ Features ]

  • Fire-and-forget tweening
  • Step and seconds(delta) timing
  • Time scale contol (global and per-tween)
  • Play modes (once,bounce,patrol,loop,repeat)
  • State control (pause,resume,stop,finish,reverse)
  • View, tile, path, background, and data structure support
  • Automatic memory and persistence handling
  • Advanced callback system
  • Custom variable easing
  • Delayed tweens
  • Control groups
  • Heavily optimised
  • Clean and organised
  • Supports all platforms
  • Examples and game project included
  • And more...


Original Free Version  (Unsupported)

Twitter Dev Log


If building HTML5 games with GameMaker: Studio, be sure to check out JCHTML5, which includes TweenGMS, to help make things even easier when developing for the web.


Candy Crash – A Halloween Game

I recently had a sudden urge to make a Halloween game. As a result, I quickly whipped something together in about three days. Enjoy all its super amazingness+1!

It is Halloween night!
Well past your bedtime, you have landed the biggest score of candy ever. However, on your way back home, you have tripped and spilled your candy all over. Already high on too much sugar, your imagination goes wild as you find yourself caught in a monster mash.

You must recover as much candy as you can before you are overcome by your wild fears of ghosts, ghouls, vampire bats and spooky graveyards.

Local Scoreboard
Solid Touch Controls
Fun Challenging Atmosphere
A Kid in a Ninja Costume!
Pumpkins and Jack-o'-lanterns!

HTML5 Version
Play Now

Available for Android devices via
Google Play
Direct APK download

Available for iOS devices via

Available for Windows via
Direct Download

Available for Mac via
Direct Download


[Game Maker] Grid Movement -PART 2- Collision Detection

If you find this tutorial helpful, please consider showing support by trying my latest game
Insane Number Run
Insane Number Run***

Accompanying video tutorial. Suggested to watch in fullscreen at quality of 480p or higher:

If you have not already done so, I highly suggest going through Part 1 of this tutorial series as what follows will be based upon its existing code. Links to other lessons can be found here:
Part 1: The Basics
Part 3: Character Animation

An editable gmk for this lesson can be downloaded here: Part 2 Download

1) Create a new object, naming it obj_grid

2) Create a new object, naming it obj_block

3) Assign obj_block a 32x32 sprite

Our obj_grid instance is going to manage our grid's collision information. It will initialize and hold a 2-dimensional array for storing locational information in our rooms. We will use the number 0 to represent an empty location, and the number 1 to represent a wall

4) Inside obj_grid, Add Event -> Create create, then add a piece of code code containing:

var i, j; // Not required but helps speed up 'for loop'

// Use the room's height and width divided by grid size (32) to
// initialize grid with 0
for (i = 0; i <= (room_width div 32); i += 1)
   for (j = 0; j <= (room_height div 32); j += 1)
      cells[i,j] = 0;

// This 'with()' statement will cycle through all obj_block instances
// within our rooms and use their relative x/y properties
   // Use block's x/y divided by grid size to set relative location
   // in cells[x,y] array to 1
   other.cells[x div 32, y div 32] = 1; // 'other' refers to obj_grid

   // For performance, we can remove the instance


Now we are going to add some conditionals to our keyboard_check() blocks from part 1 to see if the corresponding direction next to our player is free. The code to be added will be marked by the comments '// <- ADD'

5) Inside obj_player -> Step step -> piece of code code, modify to match:

if (isMoving == false)
    if (keyboard_check(vk_right))
        if (obj_grid.cells[(x div 32) + 1, y div 32] == 0) // 


With this work done, we can now set up our room with walls to run into. Before doing so, make sure you have a 32x32 background tile to represent as a wall.

6) Go ahead and add the wall tiles to our test room, anywhere you like, making sure to use a 32x32 grid size in the room editor's settings.

7) Place obj_block instances on top of the tiles you just placed

8) After selecting the room's 'Settings' tab near the top, find and click the button titled 'Creation code'. Once doing so, add this code:


There! Making sure you have obj_player in the room, go ahead and run your level. Your player should now properly detect the walls you have set out. Notice that the actual wall instances are removed, and only the more efficient background tiles remain.

Again, feel free to contact me with any comments or questions.
Happy coding!