Times, trials, and turbulence.
Monthly Archives: October 2007
Skirmish Online: More than a generic shooter?
I certainly hope so! As the newly installed poll system on the sidebar indicates, it’s going to be a little more than Team-Red versus Team-Blue. 🙂
Skirmish — which is still a very Work-In-Progress name — will embody the conflict between the two most widespread factions in the world: G.E.N. and C.Y.B.
Skirmish is to take place on Earth, although in a very different Earth than what we are familiar with today. The goal is to construct a much colder and mechanical environment than older iterations have been, and to capture that these two factions have all but replaced the previously known human race. The game is to introduce the (arguably) final chapter of the conflict between these two sides, and the players are to play a role in deciding which of these factions, after years of combat, will inherit the Earth, and be declared superior.
GEN represents the ideal of perfecting the human genome through science and prolific genetic engineering into what constitutes their vision of the perfect human. This changed over time to become the hunt for developing the perfect soldier, once CYB entered the scene. In terms of weaponry, GEN focuses on improving and re-engineering existing modern warfare devices: heavy assault rifles, large explosives, massive machineguns, and nearly every variety of cannon.
CYB aims to be the symbol of human perfection by means of cybernetic and mechanical augmentation. Humans are inherently flawed — technology is clearly the route to creating the perfect human being. Soldiers are implanted with vision enhancement, muscle amplifiers, and other devices to greatly increase their abilities. CYB sees traditional slug-based weapons as inferior, and continues to develop weapons that launch searing-hot plasma rounds, rather than metal projectiles. Although GEN holds the power of innovating on established weapon technology, CYB continues to invent new and odd weaponry to bring to the battlefield.
No “official” story has been written up, but this is the gist of the two factions that the players are able to join the ranks of. The idea of “what is a perfect human?” is meant to be a prevalent item in the storyline and atmosphere, and hopefully the environment itself will show clear signs of the world falling apart around these factions as they frantically search for what each of them believes to be the true route to perfecting humanity.
In terms of gameplay, this will equate to a shooter-styled game with lots of room for interesting quirks and innovations to the genre. CYB opens the door to a lot of neat new types of weapons and implants, while GEN allows for interesting modifications to be made to the ideas of modern weapons that we’re familiar with. Each faction will also get a couple of neat quirks that will set them apart from eachother even further.
Hopefully this gives you a bit of a glimpse at what direction Skirmish is boldly heading in. 🙂
Oh, and you can finally fire Firearm type weapons. 😛
(Above: No particle engine to spice it up, but the functionality is finally implemented for firearms and usable items.)
Jobs & Co-Op
Now that I’ve finally finished all six of my interviews, we get to see tomorrow if I get any job offers, and from whom. I had interviews from Sony Creative Software, Harris Corporation, Research In Motion, GEOREF Systems, and two at the University itself.
Sony and Harris Corp. were both graphics-based developer positions, so I’m vying for them the most. I think I’m in for a killer Winter term in any case. Expect a nice “woohoo job!” post within the next 24 hours. 🙂
Oh yes, I’m still working on this. I really wanted to be done this a long time ago, but it just seems to keep on dragging on. I clearly underestimated the size of this undertaking, and need to make efforts to be less overambitious in future articles. I’m going to try and cull off what I can of this one, but I want to accomplish most of what I set out to do.
I’m still trying to get a really nice optimization technique going so I can crank out some really nice speeds with Metaballs, but it’s rough-going. I am making nice progress, though:
I’ve already simplified out the square-rooting going on, and my current method is to do extra sampling in a spatial partitioned grid in order to escape a lot of unneeded overdraw in the unused parts of the screen. Still, ~40 FPS on a 3.0GHZ just isn’t acceptable for real-world game. Hopefully this won’t take too long!
Project Skirmish Rekindled
There’s quite a bit to talk about, too much for this one journal entry, so I’ll be sure to keep it short.
After all of that talking last night about getting back onto Skirmish development, I finally put in a good evening development session tonight, for the first time in a month. According to my auto-log files, the last development session I had was way way back on September 23rd. Far too long! 🙂
Tonight’s development saw the addition of the player animation system — which are linked directly to whatever Prop is currently being handled (eg. throwing a grenade, carrying a box, preparing to toss a rock) — as well as a big clean-up of the logging system and a dozen other little refactored items all around the codebase. Not a decisive night, but it certainly puts me yet another step forward towards the end goal.
At least I can throw my guns around with the proper animation now. 😛
(Above: Prop-throwing in action! Also spruced up the procedural maps a little.)
Now that a little grunt work was put in, the work to follow should end up offering leaps-and-bounds in terms of visual and functional progress. To be less cryptic, I’m referring to implementing weapons and the particle/effect engine. About time!
More news as it develops! </pun>
Article almost done!
That’s right. The written portion is nearly done, I just need to write up the parts about making other Meta-Shapes (covering donuts, ellipses, and squares), list/explain a few optimizations that can be done, and then write up the demos/examples that come with the article. This will be the long part. I really want to additionally include a “Meta-Playground” *snicker* that lets the reader toy with a bunch of different types of shapes and optimizations to get a feel of what all of the theory discussed looks like in an actual program. This might take longer than I originally thought, but I’m going to just keep hammering away at it, one day at a time. 🙂
With the article looming closer to completion and “Out-Of-My-Hair Status”, I’m getting warmed up for jumping head-first into Project Skirmish once again. After coming back to the code after so long — even if it’s only a couple of weeks — I find myself noticing lots of areas that could stand some refactoring, which only further proves that taking some time to step back from your code is always a healthy thing to do.
As I said in my interview a while back, taking a break from a project that starting to bore/frustrate/annoy you is a really wise thing to do. Trying to force it when it’s just not a good time is a sure-fire way to destroy the project altogether. For a while I was getting the jitters of “maybe I should can the project”, but a nice long walk (and lots of midterm studying!) did wonders. Things should get back into full swing after the article and my midterms are finished up. Exciting times ahead. 🙂
GameDev Activity and Number-of-Midterms are Inversely Proportional
Yes, it’s true. This is one of the reasons why the journal hasn’t been very active as of late. School has been sucking up unforgiving amounts of time, so the quantity of work that I’m able to get done has seen some detriment. Another factor may or may not be the recent release of HL2: Episode 2, Portal, and Team Fortress 2. Hmm. 🙂
Another factor is just the current state of game development at the moment. This article has been rough to write — I’ve never been gifted at writing them — which hasn’t been particularly motivating in making me want to work on a game. In fact, because I have this article still ‘on-the-go’, I don’t feel justified in focusing myself on working on a game, since I know that if I do, the article will never get done.
All that said, the article is finally starting to really come along. I have the hardest bulk of it done: explaining the equation and implementation, so now I can focus on more fun things to talk about, such as making different meta-shapes, looking at different optimizations, and talking about some cool ways in which Metaballs could fit into lots of of different types of games. I’m going to try and get the writing portion done by tomorrow night, which just leaves writing the demos, creating images, typesetting the formulas, and getting some folks to proof-read. I’m really solidly set on getting this thing finished and out the door, so my goal is being 100% by the end of the weekend.
What You Can Make if You Put Your Mind To It
I originally found the link on Lachlan’s development journal, so kudos to him for unearthing it for my jaw-dropping pleasure. 🙂
The name of the game is Machines at War, a Real-Time Strategy game that borrows from old favourites such as Command & Conquer and Total Annihilation. The graphics are top-notch, sound is good, polish is impressive, and it was all done by one man: design, programming, art, and mostly everything else. He started the project about a year ago, stuck with it for a year, and ended up with an extremely impressive product.
It’s impressive, but then again a rather horribly dangerous conclusion can be drawn by the wrong developer: “Oh wow, if one man can do this, so can I!”.
This is a wonderful attitude to have, but not if you’re walking blind. It’s true that with time, practice, patience, and some luck :), one can complete something of this calibre. However, if you only just finished writing a Tetris clone, you might be looking at this the wrong way. The author already has seven completed games to his name prior to taking on this project, all of which show a similar level of polish and professionalism. He didn’t just sit down and learn it as he went; it was an incremental process.
All in all, then, I’d like to come to two conclusions — both of which I find very motivating overall:
- Making an amazing game is not an overnight thing. You need to start small, and work your way upward in incremental steps. You’ll have that dream game eventually if you keep taking it step by step.
- Dedication and perseverance are indispensable tools for the hobbyist game developer. If you work on your game for even 4 or 5 hours a week on a consistent basis, you will complete your game.
From all of this I even further extrapolate the valuable lesson of:
Stick to your project, even if things get really rough. You’ll be infinitely better off making refactoring or design changes to what you already have than bailing on your work and starting over. Decide that you are going to make this game happen, keep on working on it whenever you can, and you are guaranteed to end up with a completed game.
Today saw more progress on my 3D rasterizer project. Clearly most readers aren’t nearly as fascinated by this topic as I am, so I’ll have to try and fit some more game development-y content in here rather soon. Yay or nay?
Step 2: Triangle rendering
After the tedious step of getting DirectDraw working, the main thing any rasterizer needs to be able to do is draw triangles. And fast. My algorithm is pretty fast, but the current code is only my first shot at it. As time goes by I’ll work on optimizing it further, and squeezing out as much performance as I can out of this. This and the below step are the workhorses of a 3D engine. I can venture into some detail about the algorithm I’m using if there is any interest.
Step 3: Vertex attribute interpolation
Sounds fancy, but what does it mean? Lots of values get interpolated — or “shaded across” — a given triangle, such as colour, surface normals, and texture coordinates. I’ve managed to implement per-vertex colours at this point, but have yet to abstract the values more so that it can be used to interpolate virtually any value across the triangle. What does this mean in terms of graphical shininess?
(Above: Gouraud-shaded triangles, using vertex attribute interpolation.)
If you are not already familiar with the joys of linear interpolation, I suggest you read up on it. It’s an indespensible technique that any game developer can easily benefit from. You’ve probably been using it for ages without even realizing it had a spiffy name!
Cleaning up my existing code, and figuring out how to turn this all into some kind of graphics pipeline. This will call for some research: probably looking at how OpenGL and Direct3D do their pipelining — fixed function, that is. Afterwards, implementing matrices will be the main task. This includes transformation matrices, the projection matrix, and a camera matrix. That’s when things start to look a little more interesting. 🙂
Hello! It’s been a while.
Recently I’ve fallen into a world that revolves around school and general self-education. This consists of classes, upcoming midterms, administrative (and programming) work for the uni’s GameDev Club, researching/writing my article, and now taking another spin at developing a software 3D rasterizer. In a nutshell, Project Skirmish is sitting at the back of the stove for the moment.
I’m still making slow progress on the game development article, but progress nonetheless. I’ve always had a hard time writing reports/essays/articles in the past, so I didn’t expect this one to be an exception. I would say that the article itself is half-way done, and I’ve begun playing with the demos/source that will come alongside it.
(Above: Example of naive implementation of Metaballs)
As I work on the article more and more, I find myself learning more and more about Metaballs and isosurfaces, which oftentimes means going back and changing chunks of things I previously wrote in order increase the overall accuracy. I don’t think I’m in too hot of water, since most of the articles on Metaballs I’ve read just explain how to get pretty-looking gooey balls on the screen, rather than understanding the math, ideas, and concepts behind them. I’m eager to bring a little more of that into the world with my article. 🙂
I wrote the basic beginnings of one of these several months ago, but a lack of understanding in the area of mathematical knowledge and low-level programming soon brought it to abandonment. With all that I’ve learned since those days, I’m very interested in writing a comprehensive 3D rasterizer to a much more complete degree. I’m in a very early stage of development, so I don’t even have a triangle to show yet. I’m hoping to document my progress here as it moves forward, though.
What is a 3D rasterizer? It’s a fancy term that means: “doing things to triangles that are drawn to the screen”. After cutting off a lot of other goodies, OpenGL and Direct3D are both 3D rasterizers, as are whatever library fuels the 3D games on N64/PS1/PS2/XBox/etcetera. Naturally, these implementations run on super-fast hardware designed for 3D rendering, so mine will be a software implementation. It will be particularly interesting to see what kinds of shortcuts and tricks I can pull off to optimize the speed running on the CPU alone. 🙂
Today’s work was the not-so-simple task of getting [the ancient] DirectDraw up and running. The casual reader might argue, “Why not use a higher-level library that abstracts DDraw’s ugliness, like Allegro or SDL?”. It’s true that Allegro and SDL (on Windows, at least) both use DirectDraw underneath the hood. However, it’s exactly true that both also abstract the video buffer access that they give, to some degree. Allegro is the slowest for direct pixel manipulation, while SDL is nearly twice as fast. From my initial tests with DirectDraw — after nearly 3 hours getting the thing initialized properly and reading archaic documentation — is much faster than either. Now that I’m as un-fillrate-limited as possible, reaching better framerates shouldn’t be as much out of the question.
(Above: Drawing the XOR texture per-pixel at about 1048 Frames-Per-Second)
Anyways, there is certainly a limit to how much can be said on the topic when I haven’t even drawn any 3D goodies on the screen yet. I’ll digress for the time being. 😉
Whew, it’s just been plain busy around here. Had a solid [Canadian] Thanksgiving with the family, which is always nice, although the bus ride home seldom is. Wasn’t able to focus on my assignments while at home, so I’ve been up to my neck in work so far this week. The worst of it is nearly over though, which will hopefully mean a little more activity on my end. 🙂
The article is moving, albeit slowly. It’s felt a little like a blockade that keeps me from pursuing any other gamedev-related activities concurrently, but that’s arguably a good thing. In any case, I hope to get it done very soon so I can slap it up on the ‘net and get back to work on Skirmish. Knowing my timing, this will occur just as I get into the middle of co-op interviews and midterms in the next couple of weeks. Whoops!
The GameDev Club is going well at the ‘ol university. It looks like we have a solid number of people interested in the club on a long-term basis; many more than any previous terms. It’s shaping up to be a very whirlwind term indeed. I’m learning more about XNA myself as I convert the old tutorial Powerpoints from SDL.NET over, as well as working on the engine for the Intermediate project that we’re making. Feeling a tad in over my head at this point with the workload, but it’ll all turn out swell. Right?
Things will (hopefully) get more lively around here by the end of the week. Just wait and see. 🙂
So, Jon caught me the other day for a fun little 2-hour interview, on the topics of game development, Membrane Massacre and Skirmish, as well as a few ‘fun facts’ about myself. I know I’m a bit of a gabber, but hopefully there’s an inspirational/motivational tidbit or two in there to make you want to jump into some juicy game development. 🙂