Skyling: Garden Defense is out!

In an earlier post, I mentioned the small indie game company I started. Well, my first indie game is out and available in the Windows 8 and Windows Phone online stores!

tumblr_inline_n54xx3hL5v1snej53.png tumblr_inline_n54xwel0tw1snej53.png

Please try it out. I’d love to hear your feedback!
More info at






Mighty Studios is Blooming!

mighty_logoAs my indie game, Bloom, is getting further along, I decided to setup a small company to house that effort. Mighty Studios, LLC has now been formed, and I’ll be moving most progress updates about the game under that banner. Check out for all the latest info on Bloom! Links to the facebook page, twitter feed, all all sorts of other ways to stay informed on the game can be found there. Check it out, and share your thoughts on the game. I look forward to hearing your feedback!



Bloom progress update

This is an early peek at Bloom, an indie game I’m currently working on in my spare time.

The Sky Islands have been invaded by Blight Critters. The once lush grounds have been completely deforested. Touch every square to return the island to bloom while avoiding the roaming creatures.

This is a sample test level. The final game will contain multiple levels with increasing difficulty, more enemies, traps and puzzles.

Progress is going much faster now that I’ve hit a good rhythm with sprite animation. I’m not totally happy with what I have in place, but I’m adding new animations at a daily rate now. That iteration time should help quality continue to improve. Game play is nearly complete for the basic mechanics. The game supports keyboard, joystick and touch-screen input – so it’s ready for a variety of devices. The next step is to add back the drop shadows to all the characters on the map, then start to work on audio. I’m also nearly ready to take the wraps off the website I’ve been putting together for the game. So much to do!

Old Skillz


First sprite in 18 years 🙂

Progress on the new version of the indie game is going great, but you can’t tell that by looking here. 🙂 I haven’t had any visuals to post, but I hope to soon. The new game is using a lot of very temp artwork that I’m now in the process of replacing. It’s playable and fun, but too ugly to show. To dust off some old skillz (I was a sprite animator in a former life) I animated a little character last night for the game. Not bad, but it still needs some work.

The good news is I think I’m only a few short weeks away from being able to post more screenshots and videos from the alpha version. I’m also in the process of setting up a website for the game so it can all be unveiled at once. Woot!

Abandoning XNA

maze_gameWell, I spent a lot of time working on my little maze game in XNA. So much time, in fact, that I exceeded the lifespan of XNA. 😦

XNA is still useful for targeting Xbox Live Arcade and Windows Phone 7, but both of those platforms will soon fade away.

To continue the game, I was faced with the decision of porting my XNA work to something like MonoGame or just starting over from scratch. As great as MonoGame appears to be, I decided to take the opportunity to restart (and rethink) the game.

I was having two fundamental issues with the XNA version of the game:

maze_game21) the idea of the player being the light source forced me to darken the map quite a bit to sell the effect. The levels were looking very drab and dark. Nothing like the Pac-Man and Q-Bert games I originally wanted to pay homage to.

new character models2) Because I was working in 3D, I was spending too much time building models and animating them in Blender. The end results were ‘OK’ but not great, and definitely not worth the time spent. Building all the models needed to finish the game was going to take me far too long. Remember: this is a hobby project – maybe just a couple hours of work time per week.

220px-MarblemadnessscreenshotTo fix my issues and speed up development, I made the decision to abandon the fancy lighting ideas and move to 2D. The new game would be an isometric 2D game that ‘feels’ 3D, like Q-Bert and Marble Madness, but still allow me to generate quick sprite animations rather than animated 3D models.

nickgutgameplayAfter all, I used to make sprites and tiled backgrounds for a living. It would be fun to see if I still have the mad pixel-pushing skillz of my earlier days. 🙂

The next task was to decide what language or toolset to develop in. After trying out a bunch of options, I decided to go with Game Maker Studio from YoYo Games. It’s a fairly robust all-in-one development kit for mobile apps and games. More importantly, it supports all flavors of phones and tablets as well as Mac and PC desktop. It even supports Steam. The price it also fairly manageable given all those potential distribution paths.

game_makerYes, I looked into Unity and Unreal. While I love Unreal and have worked with it in the past, I wanted something super simple and easy to use. Game Maker is very easy to pick up, and the YouTube community of user-made tutorials is excellent. So much so that my son (age 13) is also using Game Maker to build his own game.

Unity is also a current favorite. I’m very impressed by their community, tools, and asset store. Many friends have moved to Unity for their games, but I could not justify the price for my little homebrew title. For less than a third of the cost of a Unity Pro license, Game Maker can release to more potential platforms.

It’s not without it’s hiccups, though. For a development tool designed primarily for 2D game development, I would have hoped for richer 2D animation and object management tools. Still, for the price one can’t complain too much. They cover the basics, and you can handle the remaining details yourself in script. It has more than enough of the bases covered for my simple game.

In a little less than a week, I had the basic game up and running as an isometric 2D sprite game in Game Maker, and even added more features than the XNA title had. I don’t have any images worth posting yet, but I hope to soon.

Stay Tuned!

Gears of Wood: Tuning the CNC Machine.

WP_000435Previous posts on the CNC machine:

I’ve done a bit more tuning on the CNC machine, and it’s running better than ever. First, I discovered a bit of useful data regarding stepper motor torque and micro-stepping. micro steps allow you to get greater precision from your stepper. Steppers are fed pulses from the controller board, where each pulse moves the motor a fixed increment. In my case, the steppers I use take 200 steps per revolution. If you needed greater precision than that, you can use micro-steps to send pulses that move the motor a fraction of a step at a time. For example, if I used 8x microsteps on my motors that are normally 200 pulses per revolution, they would jump to 1600 pulses per revolution. The micro steps can get you extra precision, but as this data shows the cost in torque can be quite high. I hadn’t realized that when I first setup my control board.

To get the most out of my little SparkFun steppers, I need all the torque I can get. The EasyDrivers are set by default to use 8x micro steps, but that can be disabled by jumping a couple pins to ground (as explained on the EasyDriver site). I don’t need the extra precision of micro-steps from my rig, since the motors turn 14-20 threaded rod to drive the CNC along an axis. 14-20 rod is 20 revolutions per inch, or 0.787 revolutions per mm. So each pulse is only moving the rig 1/157th of a millimeter. That’s enough precision for me! So, I did a bit of soldering and set each of the three motor controllers to use full resolution steps – and I’m now operating at 100% torque. Well, as much as these little motors can push anyway.

Next, I upgraded GRBL to the latest ‘beta’ version to take advantage of the max speed settings they added. These little SparkFun steppers stall at speeds over ~225mm/min so I need to keep them capped at about 190mm/min. With the current stable version of GRBL (0.8c), I was encountering issues where the motion planner would occasionally use higher speeds than those present in the gcode being processed. If I was cutting something using gcode settings of 200mm/min, GRBL would occasionally create runs that topped over 300mm/min and stall the motors. This usually occurred on axis-aligned paths. Crazy, and a pain in the ass to debug! But, after experimenting with the beta version of 0.9a, and capping it’s max speed, the same gcode is now working as expected. Go figure!

These little steppers still need a lot of wind up time before getting to top speed. In the GRBL settings, I have to keep the acceleration limits very low to maintain accuracy. When I bring them higher, the cutting path loses all accuracy and I end up just cutting gibberish. If you are working with the same SparkFun stepper motors and EasyDriver boards, here’s the GRBL settings I arrived at today after a bunch of tuning. Keep in mind this is also for 14-20 threaded rod, so your settings may differ.

$0=157.480 (x, step/mm)
$1=157.480 (y, step/mm)
$2=157.480 (z, step/mm)
$3=190.000 (x v_max, mm/min)
$4=190.000 (y v_max, mm/min)
$5=190.000 (z v_max, mm/min)
$6=1.000 (x accel, mm/sec^2)
$7=1.000 (y accel, mm/sec^2)
$8=1.000 (z accel, mm/sec^2)
$9=30 (step pulse, usec)
$10=190.000 (default feed, mm/min)
$11=0 (step port invert mask, int:11000000)
$12=25 (step idle delay, msec)
$13=0.050 (junction deviation, mm)
$14=0.005 (arc tolerance, mm)
$15=3 (n-decimals, int)
$16=0 (report inches, bool)
$17=1 (auto start, bool)
$18=0 (invert step enable, bool)
$19=0 (hard limits, bool)
$20=0 (homing cycle, bool)
$21=0 (homing dir invert mask, int:00000000)
$22=25.000 (homing feed, mm/min)
$23=190.000 (homing seek, mm/min)
$24=100 (homing debounce, msec)
$25=10.000 (homing pull-off, mm)

I hope that saves you some time. Killed my whole afternoon!

But they payoff was worth it. I cut some gears out of 1/4″ birch as a precision test, and they turned out perfect. Here’s a shot of the gear drawing in SketchUp, and the CNC in action cutting out the gear assembly shown at the top of this post.


It turns smooth as silk. Very encouraging for some of the projects I have planned. 🙂

UPDATE 3/28/2013: I totally forgot to mention the speed gain achieved by removing microsteps. In the initial build, the axis travel was limited to 50mm per minute to maintain torque. With the new setup, I’m now running at 190mm per minute. Still slower than most CNCs of this size, but good enough for my homebrew work.

Updating the CNC Machine

This is a follow up on the last post about the CNC machine I recently built ( After a few weeks of putting the project on hold, I finally found time to make some improvements to the design.

The carriage on the overhead gantry had a bit too much flex on it, so I decided to stiffen it up. The new carriage runs a lot better, which will hopefully improve the accuracy of the machine. It’s still not as sturdy as it could be, but it’s much better than before.

To see the difference, have a look at the original carriage design:


This is a basic design where the carriage piece is built from two perpendicular C-shaped clamps. One clamp is gripping the Y axis rail, and the other  is gripping the Z axis rail. The wood blocks holding the skate bearings have slots cut in them for the mounting bolts to pass through, making them adjustable. To set the tension, you squeeze the clamp on the rail using a second pipe clamp, then tighten the bolts to hold the tension.

I made this assembly more adjustable than it needs to be. In the picture above, you can see the extra spacers added for adjustment nuts to fine tune the position of the skate blocks. This air gap proved to be a bad flex point, so it needed to change. There is also no real adjustment needed to set the skate blocks into the proper position, so the design was really overkill.

You can also see that the threaded rod passes through fixed wood blocks, into which I had imbedded 1/4” thread couplers. These caged coupler nuts riding on the threaded rod is what pushes the carriage along the rails. After using the machine for a while, it was clear that having the threaded rod pass through these fixed blocks was a tuning nightmare. If the carriage was not plumb, these blocks would bend the threaded rod and make it harder for the motor to spin them. After all the thought I put into adjusting the skate blocks, not being able to adjust the push blocks was a big oversight.

Luckily, the new carriage design fixes both issues.

First, I stopped by my local Ace Hardware and found these awesome bits. These are 14-20 threaded stop nuts, which are essentially 1/4” nuts with a bulkhead flange. I also found rubber washers that matched. These replace the old couplWP_000415ing nuts that were causing me so much grief.

In the second picture, I’m showing the new push block these nuts are mounted onto. The rubber washer is sandwiched between the block and the nut, which is held in place with three set screws. The assembly is screwed in tight, but not so that it is completely squashing the rubber washer. This rubber gasket provides just enough wiggle room for the nut to ride along the threaded rod even if the carriage is slightly off plumb.


You can also see the two lag screws which are used to mount the block sitting in oversized holes. This is also for ease of assembly and adjustment. In the final assembly, the lag screws will have fender washers to clamp the block down. The Oversized holes let me adjust the position of the block until it’s just right, then lock it all down.WP_000418

These last two pictures show the final build of the new carriage. Note that the old air gaps are gone making the carriage one solid piece. Each axis now also has a new push block on it’s threaded rod using the improved stop nut design.

The end result has much less flex, and no binding of the threaded rod.

Can’t wait to get some carving done!


Previous posts on the CNC machine:

Next Post: