MGE | Part 2

Flash Rocks My World

The popularity of online Flash gaming was just taking off. It was like this platform was specifically made for me. 🙂 A platform where simple little games were played by millions of people every day, if not every hour. I was shocked that the programming language used (AS3) was surprisingly similar to the object driven code I’ve been working with in VB6 and BlitzMax. I downloaded FlashDevelop and thanks to a very easy port of MGE, I had some basic primitive demos/games finished in a matter of hours. I believe this was my first released flash game… Fun2Pop. Even more shocking was the income generated from that simple little game. I remember thinking… you gotta be crazy right? But looking back, it was just a matter of being in the right place at the right time. And I decided to take advantage of it.

Exploiting Myself

So knowing my biggest programming skill is the ability to hyper focus on smallish projects and rapidly develop them, I decided to bump out as many flash games as I can as quickly as possible. I think I was averaging 2 games a week for several months in a row, each game becoming a little more polished as the feature set for MGE/Flash was enhanced and took advantage of specific features Flash was capable of.

I don’t believe I was the first developer to exploit a very fast rendering technique in Flash that made it possible to render 100s if not 1000s of sprites on even low power PCs, but I think I was one of the few developers early on that released games using this technique. Before, I was using the .draw() routine which worked but was very slow. All of my early Flash games used .draw() for sprite rendering because the syntax was very close to what was already being interfaced in the engine via VB6 and BlitzMax. But then I read about a routine called “copyPixels()”.

The copyPixels() method is a quick and easy way of copying pixels from one BitmapData object to another.

I thought maybe I could use this in a similar way to how I did things on the Atari ST. Draw the background in one big fast memory move, and then draw sprites on top of the background. To my surprise it worked, and it worked very well. lol.. I started creating all these little demo routines that would draw a bunch of sprites on the screen. Dozens then hundreds, 20-30-60fps? Seriously??!!?!? wow… I was freaking out to be totally honest. It was basically identical to how I did things in VB6 before Direct X 8. No scaling, no rotation, no blending, etc. So long story short.. to get any useable effects on these sprites like rotation, scaling, fading, etc, I had to design a clever library of runtime fx routines that would build bitmapdata arrays of animated sprites. And then all I had to do was render this array as needed. The end result was a fluid 30 (or 60fps) plethora of sprites zipping around with basically any fx I wanted, including scaling, rotation, animation, fading in/out, etc.

Is This A Game?

While I was coding all these demos as a proof of concept I kept asking my wife, “does this look like a game to you?”. After adding a bunch of demo routines, I added a ship, score, added in some collision detection (things didn’t slow down at all!) OMG! and the next thing I know, for better or worse I’m calling this a game and it’s name is… “RetroShoot“. lol.. The game would go on to win Newgrounds daily best in April 2009 and would also go on to be played on a bunch of websites, by millions all over the world. Since I self published the game, I never expected anything financially from it.. lol.. it was never “exclusively sponsored” but wow.. did I sell a ton of site licenses. Financially I ended up being very lucky…. again… one of those right time, right place kind of things.

I would go on to use this new enhanced game engine on several Flash games, again exploiting the ability to render 1000s of sprites on the screen resulting in simplistic games with plenty of eye candy which was ideal for those short game diversions people loved to play in their browser…. at work. 🙂

Enter JV Games Part 2:

So once again, I get a call from my old Atari ST developer bud Vince and he tells me his team was hired to work on a project for both the Nintendo Wii and the Nintendo DS. He tells me he likes what I’ve done in the Flash world and perhaps we can exploit the code base of those games in the project they were hired to do. As it turns out the project is a multi mini game app, yep…once again right time right place, right up my alley. But this time Vince says he wants me to learn C+ so I can develop the 2D games and he can continue working on the 3D games and other parts of the app. We negotiate a fair price for my time, he buys me a cool Nintendo development kit, I start rapidly learning C+. The cool thing is… since he already ported my earlier PC game Christmas Clix to C+, my MGE engine is already in the source code! So all I have to do it start porting a few of my Flash games to work with the new graphics they designed for the app. We also designed some new games for the app, but it turned out to be fairly easy to get everything up and running. It was a fun project, it’s pretty cool seeing my name in the manual. 🙂

Around The World In 50 Games For The Wii

Games Around The World For The DS

Life After Flash

I had a very successful career programming Flash games. I remember discussing my Flash success with a few other developers and basically they were surprised I did so well. I mean… my games have never been technically amazing, they’re all pretty much short attention span diversions that are super easy to play. My brother always teases me and says “your games are all No Skill Needed“. lol.. And he’s right, maybe that’s why they were successful, they found an audience that didn’t want to think too much, they just wanted a quick simple escape from their everyday cerebral expectations.

As Flash was starting to lose it’s steam due to some potential security flaws I was able to continue earning revenue from my work by creating builds of my games for the new tablets being sold from Barnes & Nobel (Nook) and BlackBerry (Playbook). Looking back.. this was another one of those right place, right time moments. Just as these devices were becoming popular, I released a bunch… of apps on both devices. I had decent success on the Playbook but the audience potential was much larger on the Nook and wow… did my apps take off on that device. My apps were in the top 10 for quite a while on the Nook. Things were going great, but when sales of the Nook devices started slowing down Barnes & Nobel made the decision to include the Google Play Store on their device which opened up 1000s of free apps users could download and install. My sales (and I’m sure other Nook developers) came to a grinding stop pretty much overnight. I can’t complain, it was a very good run while it lasted.

Game Making With Game Maker

I took some time off after the Nook and Playbook sales crashed. At this point in my life my health is very much in a bad state. I had gained a lot of weight programming, sitting on my a$$ all day coding. Long story short a few years pass, I lose a ton of weight, and I decide to get back into programming. At the time I wasn’t very confident with sticking with Flash/AS3/Air SDK so I wanted to get involved with a game tool that had plenty of support. Game Maker seemed to be the language to check out. I had read where several ex Flash coders migrated to Game Maker and were very satisfied.

So I ported over MGE, added some new features to it and began as usual… coding a bunch of demos and smallish games. Everything was going great, performance on PC is fantastic. I posted some demos in the Game Maker forum and other users were very impressed with the demos and how quickly I seemed to be learning the language. I purchased the Mobile license and began testing on several mobile devices. To my surprise performance was not as good as AS3/Air SDK. I mention this to the developers and they basically say that PC performance is their main goal. Don’t get me wrong, mobile performance with Game Maker is ok, it’s just not as good as AS3/Air SDK. I decide Game Maker is not for me. Lucky for me Harman had already taken over the Air SDK from Adobe and had already published several updates of the SDK so my faith in AS3/Air SDK is restored.

Back To The Future

So at this point in the history of MGE (now for AS3/Air SDK) it’s been massively improved. I hired a developer a few years ago to code a custom hardware sprite batching rendering system utilizing Stage 3D that I could interface with MGE. I don’t use Starling btw. This allows me to go back in time and render my games exactly like I did on the Atari ST. The background gets drawn, then tile maps, then the sprites on top. Except now everything is a sprite and that means we get automatic hardware support for rotation, scaling, fades, alpha and other fx with basically a zero hit in performance. My project Swan Song has been using this updated MGE for a few years now and has proven stability, performance, on a variety of devices. I may release MGE to the public after project Swan Song has been released on all of the planned platforms. Even in 2024, I still think this is one of the best high level 2D game design tools available.

Or maybe it’s just my false ego acting up again.


Comments are closed.


Scroll Top