8-Bit Warrior Games + Design + Tutorials + Random


[TweenGMS] GameMaker Studio Tweening Engine

An enhanced version of TweenGMS is available on the GameMaker Marketplace

Download Page


Tween with Ease!

HTML5 Demo

[ Description ]
TweenGMS is an easy to use automated tweening engine for GameMaker:Studio. It can be used for easing character/camera movements, fades, rotations, animations, and much more.

[ Features ]
** No DLL required
** Step and delta timing
** Tween control groups
** Time scale manipulation
** Automatic memory management
** Tween event callback management
** Seemlessly supports persistent instances and persistent rooms
** Compatible with all platforms (Windows, Mac, iOS, Android, HTML5, Linux, Tizen, ...)

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.


[ScheduleGMS] Script and Events Scheduler for GameMaker: Studio

I recently finished up ScheduleGMS, a scripts and events scheduler for GameMaker: Studio.

I originally created it for personal use, but decided to clean it up and put it on the GameMaker Marketplace.

I think it's quite flexible, as it lets you schedule any script with arguments, as well as schedule any kind of event. Its support for delta timing (seconds) really fills in a gap with GameMaker's alarm system. Anyhow, check it out! I'm biased and think it's awesome! (Plus, any support would be greatly appreciated!)

Marketplace Listing


Schedule scripts and any type of event, easily, with a single line of code!

Set schedule timers using steps or seconds. Pass arguments to scheduled scripts without hassle. Pause, resume, cancel, or immediately finish any schedule. Want a schedule to repeat a set number of times? Easy! Want it to repeat endlessly? You can do that, too!

Give ScheduleGMS a go and make things easier in no time!


  • Step and delta timing
  • Supports scripts and events
  • Ability to supply arguments to scripts
  • Cancel, pause, resume, or finish schedules
  • Schedule control groups
  • Ability to repeat schedules a set number of times (or endlessly)
  • System-wide and schedule-specific time scale manipulation
  • Persistent room and persistent instance support
  • Useful support functions
  • Documentation and example project

[Code Example]

// Show message box "Hello" after 3 seconds 
schedule1 = ScheduleScript(id, true, 3, ShowMessage, "Hello");

// Call user event 1 after 30 steps
schedule2 = ScheduleEventUser(obj_Player, false, 30, 1);

// Execute mouse event after 5 seconds
schedule3 = ScheduleEvent(id, true, 5, ev_mouse, ev_left_release);

// Set schedules to repeat set number of times
ScheduleSetRepeat(schedule1, 2); // play twice
ScheduleSetRepeat(schedule2, 0); // play infinitely

// Manipulate schedule state

 // Have schedule immediately finish
Filed under: General No Comments

Dungeon Drop

Available for Android on Google Play

You control Slimey, a puddle of sentient dungeon ooze drawn to shiny gems and crazy speeds. Put your skills to the test. Dodge cold stone floors as you fall endlessly faster in your adventure. How long can you survive the drop into the deep dark dungeon?

-Addictive skill-based gameplay
-Carefully crafted tilt controls
-Compulsive gem collecting
-Colourful pixel art visuals
-Retro styled audio
-Online leaderboards



PixelCam – View Upscaler for GameMaker Studio

*** Warning: this resource is now outdated  and needs to be modified to reflect changes made to GameMaker Studio.

Download: PixelCam v0.26.1

I typically deal with pixel art in my projects. As such, I've found myself needing a way to effectively upscale low resolution graphics across various display types. This tool is the result of that need. Be aware that this tool is still experimental and only supports landscape orientations.

Simply create obj_PixelCam ONCE in your game's first initialization room and set its user-managed properties within its Create Event.


[GameMaker Studio] Blurry Surfaces… Why??

If you use interpolation for your game's graphic settings, drawing surfaces can appear blurrier than expected. This is due to graphics being interpolated (smoothed out) when they are drawn to a surface, then being interpolated a second time when the surface is drawn to the main view. There is a simple way to resolve this.

When drawing to a surface, interpolation can be temporarily turned off with texture_set_interpolation() and turned back on when you are finished drawing to the surface. The result is a sharper image when drawing the surface to the main view.

/*** DRAW EVENT ***/
// Set the surface for drawing

// Turn off interpolation

// Draw stuff to the surface
draw_sprite(spr_StrongBad, 0, 0);
draw_sprite(spr_HomeStar, 32, 100);

// Turn on interpolation

// Route drawing back to main view

// Draw the surface to the main view
draw_surface(0, 0);

You should now have a much crisper image when drawing with surfaces!



[DispatchGMS] Callback Dispatcher for GameMaker: Studio


DispatchGMS v0.50

DispatchGMS provides scripts which enable greater flexibility when dealing with callbacks.

The documentation and demo project will be expanded in the future to better showcase functionality.

Make sure to destroy dispatchers as described in the documentation. Otherwise, memory leaks will likely occur.
While you are at it, make sure to read the rest of the documentation as well... unless, of course, you're too cool for that kind of thing :P

[Dispatcher Scripts]


[Example Code]

Create Event
// Create new dispatcher and add two callbacks
onMousePress = DispatcherCreate();

// Add callback to dispatcher
DispatcherAdd(onMousePress, id, ShowMessage, "Mouse Button was pressed!");

// Add second callback to dispatcher and cache returned callback handle
cbAddNums = DispatcherAdd(onMousePress, id, AddNumbers, 2, 5);

// Remove second callback from dispatcher
DispatcherRemove(onMousePress, cbAddNums);

Mouse Button Pressed Event
// Execute dispatcher

Destroy Event
// Destroy and nullify dispatcher
onMousePress = DispatcherDestroy(onMousePress);

Room End Event
// Destroy and nullify dispatcher
onMousePress = DispatcherDestroy(onMousePress);