Times, trials, and turbulence.
Monthly Archives: July 2007
Next Up to Bat
Brand new project on the rise! I didn’t try all that hard to break away from the overhead shooter genre, so it will be following somewhat along that vein. Since I’m without internet, I decided that now would be a fantastic opportunity to create a small(ish) game that allowed me to flex myself outside of the conventional boundries that all of my games thus far have constrained themselves by. This new project aims to introduce several new systems and areas that none of my games to this point have explored:
Storyline. All five of my released games focus on mindless violence, more or less. Admiral Overalls was about as close as I’ve gotten to a game with a story, and that was just a blurb of text at the start and end of the game. I’d love a game that actually told a story, and being able to offer the players a character who really has a meaning and purpose in the world s/he is in.
Hand-crafted levels. Procedurally-generated content has been the cornerstone of all of my games to date, excluding Admiral Overalls, which Dean actually developed the levels for. Procedural content is neat, but we still aren’t at the point where it can replace the warm feel of a human touch. Being able to custom-tailor levels for more interesting and in-depth situations is something that randomized levels cannot do, and I’m excited to be able to bring to the table.
NPCs and Dialog. Flat-out, I’ve never finished a game that had NPCs in it, or dialog between the player and other characters. I really enjoy both creative writing and writing dialog — which I haven’t invested time in in far too long 😦 — so I’m looking really forward to getting into this. Dean and me agree that a Shadowrun/Morrowind-èsque conversation system would probably work the best for this game, whereas the player selects conversation items from a list when engaging in dialog with another character. The inclusion of dialog will also open the door to the clever insertion of intermittant witty humour, which I’ve sadly had to leave out of other projects. 🙂
Atmosphere. This one is the prime goal, which is really a byproduct of the above items and other things, such as general game polish. Atmosphere is that nice tingly feeling you get when you really feel like you’re part of that world, where you feel like your presence is actually making an impact in that game world. When I played through the project of another developer, Ravuya, and his game, Glow, I realized after blowing the guts out of the last boss that this feeling really was attainable even within hobbyist games such as ours.
But most of all, the rule I’m following for developing this game is KISS: Keep It Simple, Stupid! Projects tend to fail because the author bites off more than they can programmatically chew, which I’m confident was the case for my last couple of drop-offs over the last few months. Although it means I’m sacrificing some code cleanliness for ease-of-programming, it’s a trade-off I’m willing to make. The code is still far cleaner than the mess known as Membrane Massacre, so I think I’m safe. 😉
Screenshots? I guiltily admit that I’m writing from work right now, so I don’t have screenshots to display at the moment. I haven’t even talked about what the game is about, either! Hopefully I can shed some light on both of these items in my next entry, which hopefully will start becoming more and more frequent. Work is finally winding down in this final month (August), so I can start to get back in the swing of things when uni rolls around this September.
I’ve realized that with the previous title I gave my right-hand sidebar, “Respected Developers”, that I likely had of insulted a number of people inadvertantly. It now holds the more apt title of, “Exceptional Developers”, which I think is more accurate. I refer to the folks who work their arses off on game development to no end; even more maniacally than the average (but still awesome) developer. If I were to make a list of “respected developers” I would probably run out of webspace trying to list all of you. I deeply respect all of you folks — you know who you are! 🙂
The truth comes out: when I spoke so confidently about pushing forward with Skirmish regardless of my lack of internet, I was fairly confident that I would manage to locate an alternate ISP within a week or so. After some research, it turns out that Rogers is the only ISP in my town. Crud. This means that I really am stuck without the internet for the next 25 days. What is one to do?
Skirmish Online is moving to the backburner. It’s just impractical for me to try and push an online game forward when I don’t even have the internet, simply due to the nature of the game. Me and Draffurd (Dean; my artistic comrade) have pondered on a nice fun project to embark on in the meantime. It will likely share some glaring similarities to Skirmish, despite it being an offline game, simply due to the overhead-shooter mindset I’m still stuck in. Knowing my somewhat sketchy track record as of late, I’ll be a little careful before talking about it in detail. I’m more than a little peeved at continuously building up hype on a project and then moving over to something else.
On another interesting note, I’ve finally begun to explore Linux territory. With my extra harddrive simply collected dust (and bittorrents), it was high-time to pop on Ubuntu and begin a learning experience. I’ve always been interested by Linux, although somewhat driven back because of the “ego hardcore Linux elitists” stereotype-folks that seem to follow it around. I can’t speak for all of the many distros, but the Ubuntu community seems very close-knit and newbie-friendly. The OS itself is remarkably user friendly, and so far has proved to be a wonderful introduction to Linux. Since my CS courses this Fall use *nix exclusively, this will serve as a great opportunity to get my feet sufficiently wet in the *nix world.
Settling Down & Starting Up
The insane summer curriculum writing at work is finally settling down; today is the final day that the 100 writers are in our building — thank goodness. Next week only the lead writers are in, which is no big deal. What this means is less agonizing overtime, and more time to cram gamedev into my spare time. It’s also (more or less) at the point where I only have one more month to go in my co-op term over here. I’m working until the very end of August, so it’ll be more than a little tight getting all of my stuff moved in back at Waterloo for the start of the term on September 10th.
Speaking of next term, this Fall is going to be fantastic. I’m moving in with two friends from last-year’s residence, and we’re all pretty much pure-bred computer folk; our place isn’t too far from campus, either. I have a whopping three CS classes this term (although I suspect I’ll have even more in later years), where I’ll be learning mainly about low-level programming (assembly, machine code, OS low-level management stuff), logic (logic gates, symbolic logic, and all of that jazz), and programming languages themselves — we even get to write our own compiler+language! Tossed in with that is an introductory physics course centred around dynamics, which will be a huge help for the rigid body dynamics for Skirmish (and maybe this new project..). I’m also taking German again, which is cool in the sense that I don’t need a justifying sentence to back it up. 😛
More updates (and hopefully soon screenshots) to come, with greater frequency. Things are revving up around here!
Hello again! It’s been far too long since my last entry, although I can’t make up for it at the moment. I feel a tad guilty for writing this entry while at work, but my home internet has been out for a little while. Why, you ask? Because some bumpkin jumped onto our wireless router — for which I am to blame for neglecting to secure with WEP — and starting spamming out crud to Rogers’ DNS servers. As a result, they called me up and told me that our internet service has been suspended — for a month! A month which we are still paying them for, I might add. Anyways, the result is the same: no internet access at home. This should make developing an online game reasonably challenging. 🙂
However, I seem to be able to pick up one of the neighbours’ router on my laptop wirelessly, so I’m going to sneak on here and there (in a ninja-èsque manner) to post entries here and check up on my email. I expect it to be a tough month. Hopefully Bell will get their DSL up here soon so we can migrate away from the Rogers folks.
Regardless of being devoid of the internet, I still plan on pushing forward full-speed with Skirmish. There is still plenty of non-networking work to be done, which will be able to occupy me for the month. Currently I’m working on the rigid body dynamics for the Object model I mentioned in my last entry, which I’ll hopefully be able to talk about more in another entry (tonight?).
Thanks for bearing with me, and I hope you catch most of you on MSN in a month or sooner. 🙂
EDIT: Okay, these smilies are utterly destroying the margins/formatting. I’ll either have to go cold-turkey on smilies, or find a fix somewhere.
Okay, this is neat. Maybe not from the perspective of your average gamer, but I think that fellow developers respect a good chunk of decent code design. I know I do.
Prior to recently (read: all work preceeding (and including) Membrane Massacre), writing good code just wasn’t something that I bothered with. To me, finishing the game quickly was more important. Or rather, it used to be. As a result — I’m sure you all know — this resulted in tons of ugly hacks here and there, redundant code, and a handful of virtually untraceable bugs. I’m sure I’ve done a pretty good job of hiding this shameful facts in my games thus far, but this item keeps on coming back to haunt me whenever I attempt to take on a large project such as Skirmish: bad code drags me down. For small to medium games I can generally get away with it; even Membrane Massacre, a 5-month-long excursion, managed to reach completion with fairly hackish code. I don’t think I would be able to add much more to it at this point, but I’m starting to dislike the idea of “just barely surviving game completion”. What is one to do?
Writing a long-term online game is an extremely challenging process. In previous attempts I’ve never gotten to the “full-blown” stage with the public masses in running amok, but I can tell how challenging it must be from my experience making only to the very beginnings of beta testing: it’s rough. Luckily nearly all of the work at the beginning is self-centric, that is, as a developer AND producer, I only need to worry about my game, its design, and its code. That means there’s no hackers out ruining the game for players, or DoS attacks, or annoying emails about wanting to get unbanned, or any of the innumerable people-based chores that always crop up. With code and design being the forefront, it’s important that I don’t make any big mistakes. Or even small ones. A hack here and there for the duration of five months certainly adds up, and results in the whole game falling in on itself. I’ve had this happen on my two prior attempts at an online game, and statistically, I’m technically getting better. 😉 My last attempt at Skirmish (dubbed “Old Skirmish”) was a five-month-long whirlwind adventure that taught me heaps upon heaps about writing an online game. It taught me that planning things out from the beginning — or at least before you try and implement it — is an absolutely pinnacle step along the way. Like they say, “measure twice, cut once”.
So this time I’m taking the longer way around. I’ve been careful with the code that I’ve written so far, and have closely thought through my data structures and object-orientation before I leaped in to write code, and am quite pleased with how ‘cleanly’ things are progressing. It certainly takes much longer to get anything functional to show, but it pays off in stability and room for future expansion.
Sliding in to the beef of this entry, I’d like to talk a little about one particular item: the Skirmish Object Model. The general idea is that there is a base ‘Object’ class from which everything else that exists ‘physically’ within the game world (sans the literal map tiles) derives from. The benefit? Redundant code is severely reduced, rewrites and refactors aren’t needed (much?), the networking code becomes greatly simplified, and more flexibility overall with how objects in the world work. Everything in the game world branches off from the Object in a fairly simple manner:
- Stealth & Detectors
Now, you’d probably like to know what it is that you’re looking at. What is an Object, again? “An Object is any entity within the game that has a graphical representation and follows the rules/laws of the physical game world”. In a sense, pretty much everything is an Object. To touch on some of the object types:
A Prop is any object that serves no intended purpose other than decoration. This is pretty much all of the ‘map objects’, such as crates, chairs, desks, couches, potted plants, and so forth. Each prop has its own set of physical traits (weight, friction, etc) and health. The result of this is that (more or less) all props can be picked up by the player (to be simply moved, or thrown at someone/something), and all props can be destroyed. It certainly won’t be Half-Life 2 sort of physics, but this will go a long way in creating a dynamic environment.
A Bullet is the physical object created by a Firearm when the player uses it. Like all other Objects, Bullets follow the same set of physical rules as everything else. However, they tend to dish out considerable damage to anything they strike, be it a Player, a Prop, or anything else.
An Item is any Object that can be taken from the ground and placed into a Player’s inventory, or vice versa. Most of the classes deriving from the Item are self-explanatory, so I’ll leave them at that.
Due to the nature of these relationship, it would be (in theory) possible for a Player to pick up a live, activated thrown grenade from the ground and place it in his inventory. This would not be advisable, but it’s neat possibilities like this are made possible with the Object Model. In addition, fun games like ‘Chair Wars’ could be hosted by players just for kicks. Things like this are what have made games like Halo so much fun online even for people who don’t play seriously: you can screw around with the objects and physics with other people. 🙂 I’m exciting about utilizing this particular ‘extra’.
I didn’t cover a lot of the innards of the Object Model that I have planned, but hopefully this whets your appetite. I’m really excited to start throwing potted plants at testers. I hope you’re all equally excited to catch them with your heads. 🙂
For those of you unaware, I’m currently on my four-month co-op term from the university, working at the Ministry of Education here in Ontario. The commute down to (and back from) Toronto pulls a lot out of me each day, so developing Skirmish on the side has been a difficult talk. Still, during the week I manage to fit in two hours overall during my to-and-fro train rides, and sometimes a little in the evening too. The weekend is where progress tends to shine the most, however, and this weekend hasn’t been an exception.
In terms of development status, Skirmish Online is still in the very early stages. The core engine is the primary area of development, so the focus is on the foundation systems like graphics routines, data structures, implementing the map system, starting the particle engine, and so forth. The only traces of actual ‘gameplay material’ is insofar that the basic Player physics are implemented (ie. moving, animation, and collisions with the map). I’m very eager to get started on the gameplay, but there’s plenty of work ahead before I get to that.
All of that said, this weekend saw three items meet implementation:
- The ResPak resource package format, with runtime loading and image definitions.
- Bitmap fonts; including (semi-)optimized rendering, nifty colour gradients, and outlines.
- The basics of the logging system, including toggleable info-channels and file ouput in coloured HTML format.
Okay, what does all of this mean?
First of all, a “ResPak” is a fancy name for a big honkin’ ZIP archive full of resource data (images, sounds, music tracks). Thanks to Java’s Zip-Stream classes, this wasn’t too hard to implement. Inside each ResPak is a definitions file containing information about each resource inside the ResPak, so the game knows more about how the (currently only images) items work. For images, it defines the in-game handle for the image, the frame width/height (for spritesheets), and the transparency colour to use. A simplified system — which was the goal to avoid the need to write unnecessary editors and the like. Simple, but totally functional. There’s very little in terms of security in it, but it’s just not needed since modifying the resources won’t give any players an unfair advantage. Heck, call it “moddability” instead. 😉
Next up, the bitmap fonts are exactly what they sound like. I’m currently taking advantage of the wonderful AngelCode Bitmap Font Generator, which defines a nice easy-to-parse file format and PNG images for me to read in and use. The idea is that each glyph (or letter, rather) is defined as a piece of the overall ‘alphabet texture’ mapped onto a square ‘billboard’. So when a desired string is to be outputted, the billboards are just strung together and drawn to the screen. Of course, I couldn’t resist the temptation to add some extra glitz, such as some nice colour gradients and custom-colour outlines to spazz things up. I think it’ll go a long way in getting that ‘extra polish’ feel by the end:
(Click to enlarge)
Finally, the logging system, which isn’t really too much to speak about. It’s just a simple static class that lets you make calls like:
Log.write("File not found!", LOGCHAN_ERROR);
The idea is that the log data that is stored will be used to save logs to disk, write out data to the in-game chat console (chat messages, game events, etc), or output to System.out for the console-based dedicated server, in a reasonably flexible manner so that each output form can have its own set of channels it wishes to subscribe to.
And alas, tomorrow is Monday. It will certainly be a long one, but hopefully I’ll be awake enough to move forward with the next steps of development. Until next time!
I can feel programmers around the globe cringing as I heartlessly invoke the clichè “Hello World” blog title. I am sorry, for what it’s worth. 🙂
This is my first entry into what will be henceforth known as my development journal, extending from the inflexible confines of my previous dev-journal on GameDev.Net. I only just recently purchased an account through DreamHost, and managed to neatly one-click-install this journal. So far I’ve been finding WordPress far more intuitive and dynamic than the text-editor-èsque system of GD.NET. Hopefully I’ll be able to spice up the CSS a little bit to break out beyond the journal template that I’ve chosen. I’ll need to get on creating my website first, however!
So if you aren’t from the GD.NET crowd and are a little curious about what lies beneath this internet-laden mask I wear, give the freshly-written About page a look-see, and read of my exploits. And please, share your own below in a comment. There’s nothing like a breezy “hello!” on one’s first journal entry.
This journal will be aimed at detailing the programming and game development related adventures in my life, as well as the primary development source for information about my current (ambitious!) project, Skirmish Online, an online team-oriented topdown action game. Feel free to ask about that, too. I’m very eager to get a community started for the game, despite how early the game is in terms of development. To whet your appetite, below is a screen-capture of the last iteration of Skirmish, which, although a noble attempt, suffered from design oopsies and insufficient code design.
The in-development Skirmish Online I refer to now will resemble the shown captures visually, and offer even deeper and more rewarding gameplay. I encourage you keep on reading subsequent posts to learn of my intentions for the game.
This being my first entry, I’ll cut it short and thank you again for reading. I hope that you continue to visit to hear about exciting updates to the development of Skirmish, and intentions of joining in on public testing once it commences.