wxMaxThe title of this article says it all. I’m currently working on the next ‘iteration’ of Gunstyle with a fellow developer and over the past weekend we were in need of a GUI library to help develop our map editor. In the past maxGUI ‘worked’ more or less….emphasis on the less. The design of maxGUI left me with a bad taste in my mouth. It’s a procedural library that is cobbled together with some weak OO on top that didn’t provide much flexibility (not to mention it wasn’t exactly ‘native’ UI on different platforms). Either way, it was a good library for small projects and prototypes.

Now we’re working on something of a little bit bigger in scale, and needing a more heavy duty gui library to go with it. So we chose Brucey’s wxMax GUI Module for Blitzmax. Just picking it up over the weekend has been a joy to work with. It’s object-oriented from the get go so it’s a bit easier to integrate into already established OO code.  It also boasts being cross-platform (Win/Linux/Mac), but I’ve yet to test or need this functionality yet. It’s also wrapping a rather solid and established library, wxWidgets.

One of the main requirements was for us to develop a GUI around a game framework that would allow us to switch in and out of an editor on the fly. To test this type of functionality I whipped up a basic test file that switches from the standard Blitzmax graphics window to a wxMax GUI with a GLCanvas and back again several times. Below is the actual source for doing that type of switching, in case anyone wants to do something similar:


Framework wx.wxApp
Import brl.glmax2d
Import brl.standardio
Import wx.wxFrame
Import wx.wxPanel
Import wx.wxGLCanvas
Import wx.wxglmax2d
Import brl.max2d
Import wx.wxTimer
Import brl.pngloader

Global app:TestApp = New TestApp
Global imgTest:TImage
Global imgPath:String = “myTestImage.png”

SetGraphicsDriver(brl.GLMax2D.GLMax2DDriver()) ‘ needed in order for the normal gfx driver to run
SetGraphics(Graphics(800, 600)) ‘ set context back to main window

‘ test switching between max2D and wxMax
‘ while loading an image that is shared between the two modes
If FileType(imgPath) = 0 Then
Notify “invalid path for image. file does not exist”
End If

imgTest = LoadImage(imgPath)


Function RunBmaxGraphics()
SetGraphicsDriver(brl.GLMax2D.GLMax2DDriver()) ‘ needed in order for the normal gfx driver to run
SetGraphics(Graphics(800, 600)) ‘ set context back to main window
While Not(KeyHit(KEY_ESCAPE))
If KeyHit(KEY_D) Then
End If
DrawImage(imgTest, 100, 100)
End Function

Type TestApp Extends wxApp
Field frame:wxFrame
Field panel:wxPanel
Field canvas:TMax2DCanvas

Method OnInit:Int()
frame = New wxFrame.Create(,, “Test”, 0, 0, 1024, 768)

panel = New wxPanel.Create(frame, wxID_ANY, 160, 0, 1024, 768)
canvas = TMax2DCanvas(New TMax2DCanvas.Create(panel, wxID_ANY, GRAPHICS_BACKBUFFER | GRAPHICS_DEPTHBUFFER, 0, 0, 1024, 768))


Return True
End Method

End Type

Type GLFrame Extends wxFrame
Field canvas:TMax2DCanvas

Method OnInit()
canvas = TMax2DCanvas(New TMax2DCanvas.Create(Self, -1, GRAPHICS_BACKBUFFER | GRAPHICS_DEPTHBUFFER))
ConnectAny(wxEVT_CLOSE, OnClose)

End Method

Function OnClose(event:wxEvent)

End Function
End Type

Type TMax2DCanvas Extends wxGLCanvas
Field timer:wxTimer

Method OnInit()
timer = New wxTimer.Create(Self)
ConnectAny(wxEVT_TIMER, OnTick)
End Method

Method OnPaint(event:wxPaintEvent)
End Method

Method Render()
SetGraphics CanvasGraphics2D(Self)

DrawImage(imgTest, 100, 100)

End Method
Function OnTick(event:wxEvent)
End Function
End Type

The main benefit of the above setup is seen in the switching between ‘RunBmaxGraphics()‘ and ‘app.run()‘. I can switch from my normal game logic, to an editor logic, but still use the same rendering routines! Now I’m not 100% positive that resources such as TImage will persist after a graphics change (in my case they do, but I don’t think that’s universal) so you may be required to reload textures.

I just recently got back from the “Video Games Live!” concert. In short, it was AMAZING. If they are performing in your local area, no, your state I highly recommend you take the effort to make it to one of their shows. It’s an all day event of games, contests, and meeting other gamers that’s capped off with a fun and amazing performance.

I’ve settled into my new apartment and job and trying to get a decent schedule for working on my different game projects. For now my iPhone game is my ‘main’ project which I spend Monday through Friday working on in the evenings. Weekends I devote to side projects such as Gunstyle. Trying to make progress is getting increasingly harder as my time has become extremely limited to about 1 maybe 2 hours a night during the week. Trying to debug a complex issue in 1 hour is usually not possible for me. And the constant stopping/starting between 1 hour sessions a day apart really hurts productivity when trying to run down a difficult bug. In the end I’m still making progress at least, though a bit slower than a few months ago.

Cutting the Fat

Since I’ve moved I’ve kind of been borderline obsessed with planning, time management, and scheduling. Just a couple of things I’ve come across over the last few weeks that’s helped me:

  • When planning a development schedule for your ‘free time’ in the evenings, take how many hours you think you have to dedicate to a project and cut it in half, if not more. I’ve found that while there’s a 3-4 hour window of time it for me to do work, 2 of those hours are typically eaten by a) random phone calls from family/friends b) my cat c) misc chores that need to get done d) laziness.
  • Remove garbage from your life and daily routine. Over the past couple of weeks I’ve been very aggressive in stopping habits that simply waste time, or cutting back significantly on a lot of things.
    • TV? Cut. Only time it’s on is in mornings while eating breakfast.
    • RSS feeds? I’ve cut most of the spammy, useless news/time-waster ones. Every couple of days I scan my list and if I find a feed that I’m simply constantly putting aside from reading then I deem it not important enough to follow and it’s cut.
    • Games? Sadly, yes :<. My Xbox 360 currently isn’t even hooked up. On the weekends I play quick games of QuakeLive, DeFraG, Tribes 2, or any other multiplayer game. I choose multiplayer because the investment isn’t long term (like a 40-hour epic single player game) and it’s easy to ‘unplug’ from the game and any commitments to it.
    • THE REST OF THE FUCKING INTERNET. I’m still bad at this, but improving. If AIM is on or I stumble on a somewhat interesting link it becomes a HUGE time sink. When you are working on a project with extremely limited time the internet is your sworn enemy.

So in essence, as an indie developer with a day job I think an argument can be made that your most important asset is your time. Being a one man crew or a small team, you are working under very tight constraints and you constantly have to be on the look out for creating a more efficient production schedule. I have some nights where literally every minute counts because not finishing off a feature that night essentially means another day lost to that feature.

Estimating And Scheduling Times

Another issue I’ve come across lately is when it comes down to actual implementation details and estimating how long a feature will take to implement, I tend to draw a blank. Before, when I was on a less ‘strict’ schedule in college I would just work ‘until it was done’. Now with me working with a little more urgency and trying to put together weekly development plans it’s become an ever increasing problem. From the past couple of months here is what I gathered and hopefully may help someone else:

  • Take a task or feature and determine if it’s something you can do in one sitting. If not, break it even further down unil you think a single item can be done in one sitting/session.
  • I find that I over-estimate my coding abilities A LOT. My main flaw is I greatly under-estimate the time needed for debugging and optimization. I tend to finish the initial implementation of features fairly quickly, but then I spend the next 90% of the time debugging, optimizing, or tweaking it. And since this is usually not in the same session, I have to spend time reading my own code to get back up to speed on where I was prior to leaving it. I now take this into account when planning my weekly goals.

This post is pretty much an obvious ‘duh wtf’, but getting some of it into a list may help a few trying to find things to create that extra 30-minutes or hour so they can get just a tad bit closer to finishing their own game :). Adios.

Graduation is over :). Real world here I come.  Anyway, going to be moving in probably a month or so. In the meantime I’ve got a lot more time to focus on some of my game projects. My main focus is finishing up an iphone game and it’s coming along great! Whenever I play it I end up playing it for a lot longer than needed for testing, so hopefully that’s a good thing :). I’m still iterating on the gameplay and the aesthetics for it using placeholders and crappy programmer art. The current build in still shots looks like a ‘mess’ more or less. Won’t make for good app store screens looking like it is now because it’s too confusing. The very first version was very easy to distinguish the player from enemies because it simply had 3 colors (black, red, white). I may have to use that principle moving forward to help keep the confusion to a minimum.

The game is a tilt-controlled shoot-em up. Except the player cannot shoot directly :). So during the game the player only tilts the iPhone and never touches the screen. Two big wins here:

  1. Intuitive controls
  2. No fingers getting in the way of the screen.

In order to destroy enemies the player must run into power ups. When they hit one it sets off an explosion affecting an area around the power up. The basic one simply kills enemies in the blast radius, while others have more interesting effects.

So here’s a few screenshots of the game from very beginning to the current ‘messy’ build.


The above screen shows the very first prototype. Green boxes were pick ups. People that played it enjoyed it despite the really simplistic look.


The next iteration had some basic placeholder graphics and a static background placeholder image. The gameplay also introduced pre-configured wave shapes for enemies to spawn in. So in addition to random spawning enemies could try to attack in lines, surround you in a circle, etc. It upped the difficulty a bit so some tweaking was needed.


This next iteration was focused on gameplay improvements and additions. I added a new power up (a type of explosion that spread from enemy to enemy), and a combo system along with a few other things. The new power up was added to counter-act the difficult spawning patterns of the enemies and it proved useful. It was almost too useful.


And that brings us to the current build. I redid a lot of the graphics and went for a simple vector-art look. Unfortunately, the overall look tends to be very messy in screenshots and the color scheme is ‘meh’. Though I like the look of the enemies, the explosions (particularly the redone viral spreading explosion) could use some work. The blue enemies are enemies that were hit with a freeze power up. There were a few more power ups added. In general, the game feels more solid but visually feels less focused.

Those that are wondering where I got the placeholder background images from:

I do not intend to use them in the final game as they will be replace by original artwork.

I’ll have more on the game’s features in the coming weeks as things start to finalize.

It has been a while since my last blog post :(. If you’ve been following my twitter account though you’d know it’s still been a busy last couple of months. I’ve been developing things on several fronts lately. For one, I’ve been busy developing some supporting code to hook Opensteer into C4 in a more seamless matter and work with C4’s constructs in mind. It’s a project related to some school work, which has proven to be challenging and fun. Hopefully the students in the video game design class that I did this AI library for will find my work at least useful for their games.

In other news, I had a inspirational fever lately as I’ve come to understand a lot more of how physics and animation work due to a class I’m attending. I decided it’d be a fun spring break project if I could apply what I’ve learned to a simple 2D physics demo. Maybe it’ll grow to something more, but for now it’s more of an exploration and an excuse to work in Blitzmax again.

I’ve started the registration process for developing on the iPhone and it’s proven to be rather headache inducing lately with trying to get all the paperwork in order. After yet another delay, I won’t be able to start deploying apps on my iPhone for at least another 2 weeks. Damn. The iPhone game development venue seems promising, but the window is closing fast for anyone wishing to make a decent amount of money with minimal marketing effort. With the announcement of iPhone OS 3.0, and all the new features it’ll boast it makes the platform even more exciting to develop for. One of the more interesting development I think is the ability to ‘subscribe’ to apps and also buy additional content for particular apps. This type of business model would maybe give way to the first true ‘MMO’ (and I use the ‘Massively’ M loosely here) on the iPhone that can sustain itself? Interesting indeed.

Finally, I’m still chugging away at my Xbox Live Community Game. No idea when it’ll be done and there is no name for it yet. All I can pretty much say is it is a stylistic platformer. I recently got a parallax system working that I’m finally satisfied with. Also spent a couple of hours with Adam browsing music sites for potential audio soundtracks and we came up with some interesting possibilities. A lot of our musical choices leans more towards the ‘classical’ genre, so it’s not your typical uppity/pop/techno game music. I really hope as things solidify I’ll finally be able to post some media to show off the progress of my games. Until then, I’m focusing on finishing my last semester in school, looking for a developer job (preferably game industry related), and working on these game projects in the meantime.

I’ve decided to give this twitter thing a try. I’m going to try to keep that feed updated as much as possible on my progress throughout the several projects I’m involved with. I’m spread a little thin at the moment so trying to find time to come up with a substantial blog post is becoming increasingly difficult. I’ll try to come up with some blog posts when I hit some milestones for my projects in the future.


Yea, I’m a little late posting about the ‘new year’. My last post pretty much covered what I had to say about 2008. I’m still in flux at the moment getting settled into my new schedule for the semester. Just got off the phone with a colleague discussing potential themes, styles, and design goals for our upcoming XNA game. After spending 3-4 months prototyping the ideas we had in our heads I think we’ve cut the fat and finally have something we can focus on getting done.

Looks like this Spring I’ll be getting a heavy dosage of C++, C#, and Blitzmax. I’ll have a lot more emphasis on C++ since the majority my school work/research will be done in it. Gotta get back to working with Open Steer in C4 now. I leave you with a teaser…