Developers Log 010

"How I made a video game, did not market it, and got a fully predictable result."

So here's the rub. I work full time as a web developer at a local community college. I got the crazy idea to make video games when I did some freelance web work for a local indie. I wanted to do contract art for them, but they didn't like my portfolio. Which is fair. Even though I went to art school I've been working as a web developer for a long time, so my illustration portfolio is not great.

I made enough money doing freelance web work that my equipment is pretty much paid for. My full time job pays the bills, keeps the family fed, and my Xbox flush in fresh games. I grabbed a pro license for Game Maker Studio to help a buddy out with his top down shooter which never released. No biggie. I'll just do this myself.

I started exploring tutorials to learn how to code in Game Maker which led me to Tom Francis' How to Make a Game with No Experience YouTube playlist. Thanks Tom!

Following Tom's tutorials led to my first prototype. I began to use Game Makers' physics engine and that's where my prototype diverged from Tom's tutorials. I coded, made art, read documentation, haunted forums, Googled solutions for a year and made Zero G Fighter.

I learned along the way that:

If you don't destroy your particle systems properly you create a massive memory leak for several months and your game doesn't work right for many people you may share it with. I learned how to use global variables incorrectly. (Don't worry I've learned from that mistake). I learned that enumerators and arrays aren't that scary once you figure them out.

I've learned that making a game by yourself isn't that hard. Connecting with people, play testing, taking feedback, and making your game better and better through relentless polish is really damned hard. Making your game stand out from the thousands of other indie games and devs just like you is really hard unless you devote as much energy to communicating about your game as you do to making it.

And I knew this. I read Gamasutra, I follow video game news, I watch GDC presentations when they are made available. I failed to communicate and I failed to follow through on polishing my game to the best it could be.

In January 2016, I self published Zero G Fighter on and allowed folks to pay what they wish for it. To this date and without marketing (other than some occasional posts to Twitter) Zero G Fighter has received 1092 views on and a total of 80 downloads. Two downloads converted into sales totaling $6.99.

This past September I picked up the UWP module for Game Maker Studio for a significantly reduced price via a Humble Bundle. I created a UWP app, submitted to Microsoft, passed cert, and quietly launched the game on the Windows store for Windows 10 PC's. The game has received one sale totaling $1.99.

I'm not devastated by lack of sales. I have a full time job. I'm gonna be alright. What I did was make a game, not very well, did not have patience with the development of the game, and then bumbled my way through the publishing process with little to no forethought. I'm not special in this regard.

Ultimately I made a game and I published it. Zero G Fighter is out there. I am glad it's out there, and I am proud of it.

Zero G Fighter - Developers Log 009

ZGF Mobile Development Continues.

Play tests on mobile devices are going well.  Button's are way too large in the screen shots below so I am continuing to iterate on the UI design. The big achievement is that all weapons and abilities are working very much like it's PC counterpart.

I Didn't Even Know ZGF Was Broken! But Now I'm fixing it.

Over the weekend I learned something crucial about how particle effects should be implemented in Game Maker. Much to my chagrin, Zero G Fighter has had a significant memory leak for the majority of it's development. (More like a raging memory river.) I was not cleaning particles and particle systems properly when done with them, so all of that info was hanging out in memory until the game choked and died. It's a real rookie mistake and I didn't notice anything out of the ordinary because MY PC was chugging along just fine.

I could kick myself 'cause my play testers where reporting poor performance and I just wasn't connecting the dots.

The leaks are being plugged. It a significant task but a new beta build will be made available to play testers and contributors later this week.

Zero G Fighter - Developers Log 008

While Zero G Fighter is not officially at 1.0 you can purchase early access to my fully operation battle station- er I mean Video Game is available at

Why Publish on

Zero G Fighter is content and feature complete. There are some lingering bugs and quality of life issues that I need to address but I wanted to get a purchasable version of the game out there to the public.. Early access allows folks to play the game and receive updates with each new build that is published. In the near future I have plans to expand ZGF's foot print to Game Maker: Player, maybe even Steam. But both of those market places require a review or community approval process. allows me to self publish as I see fit.

Why isn't the game free?

I have worked on Zero G Fighter as a second job for a year. This represents time away from family, chores, gaming, leisure and recreational activity, and also time that used to be allocated to paid freelance web development. Building ZGF is actually a loss of income for me even though I hope it is a better investment of my time and efforts in the long term.

I know I'm not alone out here in the wild. I know there are thousands of aspiring devs who want to make a living or augment their income with independently developed games. Those devs and I are not going to accomplish that by making games for free.

Maybe it will be better if I let Ron Swanson explain.

So Now What?

Over the next few weeks I hope to squash bugs, polish, and expand Zero G Fighter's footprint to other online market places. I have even contracted a developer and friend I worked with at a previous job to work on a mobile version of Zero G Fighter. I have played a working version on my Kindle and I'm really excited by the results.

Until next time...



Zero G Fighter - Developers Log 007

Development on Zero G Fighter has shifted gears. Instead of pushing content, art, and new game play features (which often results in shiny screenshots or animated gifs) I now spend the majority of my time with menus, buttons, and save and load scripts.

This week I will debug and implement the final save system. For a feature that is just supposed to just save the last played level and a few variables to load into the next level it has really been a pain in the ass. Beware the "Cannot open another file (maximum exceeded)" error. I'm still working on trouble shooting that one.

So while the work doesn't result in visibly exciting things to share, it is really exciting to check off these tasks and move ever closer to finishing Zero G Fighter.

Development Tasks Completed

  • A new enemy and event type has been added to Skirmish Mode
  • A mission summary screen detailing kill count and score has been added to the successful completion of skirmish mode
  • Options Menu is complete and works but has a few bugs.
  • Music is fully integrated and the background music files were revised to be more seamless. (Thanks Albert!)
  • Save script has been rewritten to carry more variable from one play session to the next

Upcoming Development Tasks

  • Trouble shoot an debug save load scripts
  • trouble shoot and debug options/preferences scripts
  • Eliminate the "Cannot open another file (maximum exceeded)" error
  • Revisit the game pad inputs and improve the overall game pad feel


Zero G Fighter - Developers Log 006

There is a light at the end of this tunnel.

I can barely see it. But I know it's there.

Big thanks to Mr. Albert James ( Shortly after posting Zero G Fighter to the Game Maker Forum thread for alpha projects, Albert approached me with links and a request to check out his original music tracks. I had already been listening to a library of royalty free audio and music in an attempt to find some background music to go with the game and I was kinda iffy about my options. Albert's work blew that stock audio out of the water.  There were several tracks I just knew would compliment the tone and feel of Zero G Fighter perfectly.

I was already in the process of planning an IndieGoGo campaign to raise funds to help get a few business side items going. I quickly decided to switch the focus of the campaign and make licensing the music the priority. Sink or swim ZGF was gonna have some nice tunes.

In the end I succeeded in raising funds for the music. Albert and I have completed a mutually beneficial business transaction and background music has been added to the game. In fact, a Zero G Fighter demo featuring the new music is available on IndieDB.

Oh yeah also, Zero G Fighter is on IndieDB.

Development Tasks Completed

  • MUSIC! Music has been added to the game.
  • Enemies now have a chance to drop power orbs for shield energy and swarm rocket energy
  • Mission text and objectives have been added to most of the stages
  • Several stages have been revised
  • Views and Viewport code rewritten
  • Bugs squashed

Upcoming Development Tasks

  • Add Music and Gamepad preferences to main menu
  • Make a Game trailer
  • Address outstanding bugs and unfinished assets

Zero G Fighter - Developers Log 005

For the last week I've had to scroll further and further down the task list to find outstanding items to work on. This is a good problem to have. As more items are ticked off little details spring to life in the game that make the whole thing feel more complete and robust.

I'm currently playing through the campaign missions and evaluating each one for revisions, enhancements, or totally redesign. This includes expounding upon mission text and objectives to be more immersive. While the game is still very much an arcade game I want the mission text and in game objectives to feel connected and give the player a sense of purpose.


I've also added controls diagrams that illustrate the keyboard and mouse controls or the gamepad controls depending on which is being use at the time. The game pad controls are still ... not great. I could very well be working on getting gamepad feel just right up until the game launches so I've stopped working on that for a time to push other areas that need attention.

So, work on he game continues but it's productive work that get's me closer and closer to a finished game.

Development Tasks Completed

  • HUD elements highlight when abilities are ready for use
  • All Skirmish mode special events are active
  • Events include Escort, VIP Target, and Enemy Surge
  • Allied Corvette in the escort missions is more vulnerable
  • Mission Failed and Mission restart messaging is clearly communicated
  • Allied Corvette's turrets are little smarter and fend off enemies more successfully
  • Reavers will now chase and attack allied Corvette
  • Enemy Fighters chase and attack allied Corvette
  • All asteroids and ship debris can be destroyed with any weapon or ability
  • When a target is designated Distance to target is now displayed in the top right HUD
  • Swarm missiles will favor chasing enemy fighter's until you are in close proximity to larger enemies. Then they will target the larger enemy.

Upcoming Development Tasks

  • More Play Testing and Campaign Mission Evaluation
  • Write and integrate mission text and objectives
  • Music, I'm working on the licensing but this will be coming soon.
  • Continue iterating on gamepad feel.

That's all for now.


Zero G Fighter - Developers Log 004

I had planned from the beginning to add game pad support to ZGF. However, 8 months of pixel art, level building, and programming went by before I got around to it. So this past week I decided to integrate the game pad and start coding the inputs so you could fly and shoot using a controller. The first thing that happened was ...I broke my game.

Then I slowly molded the inputs into a shape roughly resembling something like inputs that you would expect from an actual playable video game. I'll go into a little bit of detail here:

First, some background INFO.

ZGF's default inputs use a keyboard and mouse. WASD controls the ships thrusters while the vessel and it's weapons platforms always orient toward the mouse. The mouse is displaying a custom reticle sprite. You move by firing the forward thrusters with W and you fly toward the reticle. Release W and you continue to drift on that vector as you would expect in a zero g, friction-less environment. You change course by placing the reticle where you want to go and use the appropriate thruster(s) to propel the ship into a new vector.

You aim weapons by placing the reticle on a target and shoot by clicking the left mouse button to fire the primary weapons. Clicking the right mouse button fires the secondary weapon which, by default, is a guided missile. I say "guided" because the missile object also orients toward the mouse reticle so you can lead the missile and change its path allowing you to shoot around space debris or adjust aim mid flight.

ZGF is top down shooter so you would expect it to behave like a twin stick shooter. But that's not actually the case. W,A,S,D controls forward, left, aft, and right thrusters respectively. When the front of the ship is oriented toward the top of the screen this feels natural and intuitive. When the ship is oriented toward the bottom on the screen the inputs are reversed from the action you see on the screen. Early on this was intentional, I was thinking about the WASD keys as being tied to the position of thrusters on the player's ship not as vectors the player intends to move.

I've stuck with this design decision thus far though it seems counter intuitive to the feedback I have received. But that's practically a subject for it's own blog post.

Now Back to Game Pad Inputs

Using an old Xbox 360 controller and a wireless adapter my first task was to figure out how to make the ship rotate and orient toward the direction of the right joy stick axis. This was not as easy you would think. At first I tried a script that would move the mouse cursor on the screen so I was essentially trying to replicate the mouse controls with the joy stick. Ultimately this failed because I could not get the movement of the reticle to feel fluid and precise. So I switched gears did some research and after reading a wonderful blog post from the YoYoGames Tech Blog. I wrote a script that captures the horizontal and vertical axis information from the joystick in a variable and then create a point direction that the ship and it's weapons platforms orient toward. This worked but with mixed results. the rotation is jerky, it is not fluid, and target acquisition was garbage. (This wrecked bullet orientation. You literally could not shoot in the direction of what you were shooting at, but I fixed it.)

I eventually created a hybrid solution. I created a reticle object that I tied to the position of the player's ship using lenghtdir() to place the reticle 300 pixels in front of the ship. However, when the right joy stick is engaged the H and V axis are captured and create a new point direction for the reticle relative to the ship. The reticle basically rotates in a circle around the craft with a radius of three hundred pixels. The ship's smooth rotation script kicks in and the vessel rotates smoothly toward the direction of the reticle. Target acquisition was immediately improved, the rotation of the vessel is smooth, but the reticle movement is still a little jerky. Overall I'm very pleased with the solution but I'll continue to work on it to get it feeling smooth and effortless

My second task was mapping face buttons and triggers to weapons and abilities. This was not difficult and was executed very well.

Next, I modified my existing menus so that they could be navigated and selected with game pad inputs. This was not difficult and was executed very well.

Finally I had to address the propulsion of the ship using the left joy stick. Like the right stick I first captured horizontal and vertical axis information in a variable and used that info in Game Maker's physics_apply_local_force(); function to propel the ship. After some tinkering and inverting the Y axis in code I was able to propel the craft using the right joystick.

However, all was not well. The joy stick controls behaved like the WASD controls.  Pressing up on the joystick applied force to the rear of the vessel propelling it forward. This is all well and good when the vessel is oriented toward the top of the screen. But like the WASD controls the action on the screen is inverted when the vessel faces the bottom. The confusion caused by this inversion felt way worse than it did using a keyboard and mouse. It was so bad I had to disconnect the controller and play through a few missions with keyboard and mouse to remind myself that my game is not a broken hunk of junk.

I resolved this issue by switching the method in which I apply force to the ship. I ditched the physics_apply_local_force(); function and used the physics_apply_force(); function instead. The difference here is that the "local" version of this function applies force to the same relative point and direction of the object regardless of the object's orientation in the world space. The physics_apply_force(); will apply force to the object in the direction indicated by the H axis and V axis of the joy stick. The game pad input is now tied to the direction the player wishes to travel instead of the positions of imaginary thrusters.

I have transformed my zero gravity space combat game into a twin stick shooter.

Now, If I can figure out how to draw the appropriate thruster sprites based on vector and orientation so that when thrusters animate they match the ship movement logically. Then I will be satisfied with the game pad setup.

Development Tasks Completed

  • You can now fly and shoot fairly well with a game pad.

Upcoming Development Tasks

  • Create an Options menu to toggle game pad on and off
  • Remake pause menu to support game pad navigation
  • Continue improving game feel while using a game pad.

Until next time...