Main Page » My Games » Villainmad »

2011/12/30 (Villainmad): The Last Update of the Year

Created: / Modified:

Always use secure-HTTP / Secure HTTP / Permanent Link

So, in the final 25 hours of 2011, an update. Here is source, binaries, .Net if you have Windows, Mono if you don't (or regardless), OpenAL if you don't have it. This time, I am including the source of my build of OpenTK, since I've made a couple of changes (search "Entire Solution" for "Muffin"), specifically adding in 1. a bit which makes gamepads actually work, and 2. giving the Color4 struct (see below) a few more constructors. (As an aside, I'm using a nightly build of OpenTK instead of the last "official" release; it isn't working on my Windows XP laptop for some reason, which indicates to me that it's decidedly less-compatible, so let me know if you have any problems.)

Biggest changes, in no particular order:

  • I figured out that QuickFont already has color-text-at-runtime, so I'm using that.
  • I replaced the aforementioned Color4 and Color3 with a new struct called ColorGroup (which can have an arbitrary number of colors), and discovered that OpenTK has its own implementation of System.Drawing.Color, which is already called Color4; I'm moving away from a dependency on the System.Drawing namespace and into the use of OpenTK's stuff and my own things.
  • I've gotten rid of the dependency on OpenTK.Compatibility.dll, which I was only using for one thing, and which I found a more "correct" way of doing.
  • Stage-layers are now entire objects (called StageLayer, as it happens), and you can do a lot more things with them, such as drawing things in the reverse order, which is to say the "oldest" objects are drawn in front of the "newest" objects; I've demonstrated this with the bullets in the stress-test.
  • Extensive use of an interface I made called IDisposableCheck, which is like IDisposable except that it tells you if it has been disposed. For example, I have re-added the option of associating queued-commands with an IDisposableCheck, so that the command will automatically cancel itself if its disposable been disposed.
  • Screen fade in/out (fade to black, in other words).
  • Loading screens, not that I'm loading much yet.
  • And, of course, a particle system!

Hitting X on your keyboard (or whatever your personal Fire2 is) in the bullet-stress-test will now flash the playing-field red, and subsequently spawn an orange fireworks effect. Colliding with a bullet also spawns a miniature burst of particles, and the spinning square-thing which appears at the beginning is also firing particles behind it. Yeah, I didn't really make more than one kind of particle (well, two, actually: one of which is designed to simply fire trails of the other kind behind it); I was just demonstrating for myself that the system worked, not trying to win awards or anything.

End-Of-Year Reflections

So ... I started work on this game over a year ago. I suppose I haven't been as furiously diligent as I could have been; I mean, the config looks pretty much the same way it has for ages! I dunno, the July timeframe does look a bit unreasonably-near, especially if I run into any more slumps of creativity like I did for a couple months there.

I've noticed that there's pretty much two modes I go into when I'm programming this game: there's the binge, in which I focus on programming and related activities for hours on end with minimal distractions (and, in fact, very little interaction with anything else); and then there's the distraction, in which I pretty much pick at it while I'm technically busy with other things. I also have difficulty with Getting Started, whether it's an entirely new project or just a major addition to an existing one (i.e. the Config screen). Not to mention I can see how I might burn myself out on this pacing. I can honestly say I'm feeling a bit ... daunted by this.

But y'know what, nothing to do but just keep moving forward. This is the philosophy of "speedbump, not roadblock" taken to its extreme. Can't stop now!

I'm still somewhat in the planning stages of the game itself, but I think there'll be an "arcade mode" with 6 stages, and an "endless mode" where you play through all of them in increasing difficulty until you can't live anymore. I've always known what the ending screens will look like, and I currently know what the enemies and special effects and shottypes will be like. So ... I officially have An Idea Of What This Will Look Like When I'm Done. Nowhere near the point where I can actually use this information, though.

Todo List

  • Update the front page to be informative in any way whatsoever.
  • Finish working on the config! (Bits of this may have to wait until OpenTK has better support for gamepads.)
  • Text/language services
  • Use more of QuickFont's features; hack QuickFont to have more of its own features (i.e. it has no idea how to do things like "if it's Arabic text, revers the character-order").
  • Saving score and replays!
  • Longer-term than Villainmad: More advanced audio-queuing functions.
  • Longer-term than Villainmad: 3D backgrounds!
  • Current projected release-date: July 2012

3 Comments (auto-closed) (rss feed)


I program much the same way, binge and distraction. I've been known to go entire day programming without eating or drinking anything on some cases.

Dizzy H. Muffin

Yeah, I remarked on that earlier on Twitter, and another programmer highfived at me.

(Thanks for ... confirming that OpenAL is required, by the way!)


Woot, happy new one boss man~

gonna have to try the game later though....