8-Bit Warrior Games + Design + Tutorials + Random


Sokoban Mega Mine

I recently finished work on Sokoban Mega Mine for Happy Bacon Games. It is the first game I have created with GameMaker: Studio which makes use of its 3D functionality. Learned lots!

It is available for Android on Google Play and HTML5 via Itch.io or Kongregate. If you're into puzzle games, go check it out! :)



Harry High Dive

I recently finished up work on a new mobile game, "Harry High Dive". I have been working on it part time as the programmer since last September(?) and have finally managed to put the finishing touches on it. Even "simple" projects can take much longer than expected when adding time for polish.

Anyhow, feel free to check it out! It is currently available for Android devices on Google Play, but will also be available for iOS soon enough!


Filed under: General No Comments

[ScheduleGMS] Script and Events Scheduler for GameMaker: Studio

GameMaker 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

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



[DispatchGMS] Callback Dispatcher for GameMaker: Studio


Available on the GameMaker Marketplace

DispatchGMS is a callback dispatcher which allows for greater flexibility when managing custom events or extending existing ones.

Multiple callbacks can be added to a single dispatcher and later executed from a single script call. Each script callback can be supplied up to 13 arguments. Additionally, when invoked, a dispatcher can, optionally, override previously set callback script arguments.


  • Add or insert multiple callbacks into a single dispatcher
  • Various ways to remove callbacks as needed (callback id, script, target, all)
  • Ability to override script callback arguments when invoking dispatcher
  • Enable/Disable dispatchers or specific callbacks
  • "Dynamic Event" scripts allow you to easily adapt dispatchers to existing object events
  • Check if dispatchers contain a specific script or target instance

[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);