Shiny Object Syndrome

I have a severe case of shiny object syndrome.  I am constantly getting distracted by new and exciting things that catch my eye.  Having stated three days ago that I was going to work on a simple game I soon got distracted by Johnny Chung Lee’s Wii Remote Projects. This guy is a legend. He takes affordable, commonplace technology and makes it do fantastic things.

In particular he has a project titled Head Tracking for Desktop VR Displays using the Wii Remote. If you haven’t seen it already you really need to check out that link. The effect created by the program is amazing. As soon as I watched it my mind was filled with all sorts of gameplay ideas. I imagined a FPS in which you could actually duck, jump, dodge bullets and look around. Then I decided that a boxing game using the technology would be terrific.

It would be a little like Wii boxing, except your ducking and dodging would be controlled by real motions, leaving the wiimote/nunchuck movements to correspond only to the punching. Then I figured you probably only needed two LEDs for the glasses, so why not make a pair of gloves with LEDs in the knuckles and just track the actual hand movements. I realised this wouldn’t work very well though. You’d probably need one Wiimote tracking the glasses and one Wiimote tracking the gloves. This way you could have 2 LEDs on each glove, one at the first and one at the last knuckle on each hand. This way the game could track the motion of the hands, including their rotation and distance from the screen.

I almost popped up and wrote a post on how I was going to make the greatest, most interactive games ever. But I’m not.

I’m going to stick to my plan.

I’m going to continue writing my engine and develop a simple, somewhat boring little vehicle shooter. I’m going to get something done. And THEN I’ll look into moving on to something shiny. As much as I love the technology that is presented in the videos, it can wait.

But man, a little creativity and you could do some awesome, unexpected things with the Wii. A lot of the ideas are commercially unviable though. Particularly the head tracking. As unbelievably cool as it is, you can’t really produce a game that requires a custom peripheral (the glasses) and two Wiimotes to play a single player game. It’s really not feasible.

Hopefully once I’ve got my simple game up and running I’ll be able to re-visit some of these ideas.

As a quick update, I now have an XML loader to read settings files. Well, I say “XML” loader. It’s a lot more simple than that, and in no way standards compliant. At the moment it would choke as soon as it got near a comment tag, empty tag or one of those XML definition tags (you know… “<?xml”…) It does what I need it to, though. Settings files are loading in nicely, and I’ll update the code if I need to.

I’ve also been doing some re-factoring, removed some dependencies on the Graphics Interface and started getting the DirectX interface up and running. I’m going to make it a DX9 interface. I initially thought I would look into DX10, because that’s all shiny and modern, but not many people have Vista yet. There really aren’t many compelling reasons to upgrade. I’m pretty sure I have a rant stored up in me about changing interfaces solely for the sake of changing them.

I certainly have much rage about the newer versions of MsOffice. At least there’s OpenOffice. That thing rocks.

Incidentally, I tried dictating this post using Vista’s in-built speech recognition functionality. That got frustrating quickly.

Press Space! Now! Aw… too late… you died.

Dear game designers of the world,

You seem to be putting Quicktime Events in more and more games these days. Please stop it.

How exactly did we get to the point where we look back on Dragon’s Lair and think “Wow… what a pinnacle of gameplay… every title from now on should emulate this”? The game has been remade in DVD Video form! That is not an example of great gameplay.

There’s really a problem if you decide that putting the player in a timed simon-says sequence will make your game more exciting. You should go back and look at your core gameplay.

They’re popping up everywhere. I believe Shenmue probably started the recent revival, followed by the immensely successful God Of War. I guess they were implemented as well as they could be in these games, but now everyone’s copying them and not always with the same success.

Star Wars: The Force Unleashed is one recent game to use them, and cock them up in a major way.

Who honestly sat there, played that game and decided that halfway through a battle it would be a great idea to pop into a QTE with absolutely no warning? Who could possibly believe that suddenly switching the context of the buttons while you’re busy mashing them in combat would feel natural and fun? To make matters worse, the buttons that you’re happily reaming with great success suddenly cause you to instantly fail and replenish an enemy’s health if you don’t hit the right ones at the right time. It’s just plain stupid.

I’ve heard it argued that they’re a good way to show off a really cool moment that couldn’t be done in game. But if you really need to have your character do something awesome outside of the player’s control I’d still much prefer it was done with a passive cutscene. I’m sure Kratos does some awesome stuff in God of War, but I was too busy watching for the stupid button prompts to be able to take in what was actually happening animation-wise.

Not to mention the fact that you’ve sometimes got to do it more than once to get the sequence down, because it has no relevance or coherence with the rest of the game.

Even the little in-game ones annoy me. I really didn’t have a better gaming experience because I had to hammer a button in order to open a chest, door, etc. A single press would have suited me fine.

In summary, I think they’re a massive step backwards in game design. I think they’re lazy and unintuitive. Please stop putting them in games.

Sincerely,

Daniel Punch

When you think you know better than everyone else…

As I wrote in an earlier post, my game project has a number of interfaces that allow new platforms to be developed for with relative ease.

At least, that’s the theory. In practice, it seems like I have the OpenGL interface I’ve been working on a little too tightly integrated with the rest of the application. But I’m remedying that.

Very early on I looked at the project that I did with a few other students as part of our final year project, and at a number of programs I’d come across through work, and I decided that the common practice of implementing a virtual interface class for a platform interface was pointless.

Basically, I figured you were using code to replace documentation. Why generate extra V Table lookups and slow down your application (albeit ever so slightly) just so that the compiler throws an error if your interfaces don’t match perfectly? You’re only ever going to have one interface per build configuration.

So that’s what I did. I simply named the different interfaces exactly the same thing and modified the include paths for the different configurations. And it worked fine, until I actually started trying to write a new graphics interface.

I’m not even changing platforms at the moment, I just decided to write a new DirectX interface. All the commercial games I’ve come into contact with are using DirectX and OpenGL isn’t really keeping up with the latest trends, so I figured I should give it a go. It’s been something of a headache, but it’s also been a good test of the code’s structure.

I’ve decided to get a very basic build going for another platform entirely (not sure which yet) and keep it compiling while I work on the PC version. I think it’s probably the only way to ensure that things aren’t getting too tightly coupled.

Not sure if I’m going to buckle and write a virtual interface class. At the moment things are compiling,and it seems like too much pointless effort. I’ll see how I feel when it comes to porting the code for real.

Updates

Wow. This has been sorely neglected. I’ve still got those draft posts kicking around. They’re still not going to be published.

Work’s fantastic. For anyone hoping to get into the games industry but wondering if they’ll really like it once they’re there, it is worth it. There can be a lot of work, it’s somewhat volatile at the moment (but aren’t all industries currently?), but it’s a lot of fun. I’ve been doing this for 4 months now (yeah… real veteran…) and the sheen’s not wearing off.

My home project’s been almost as neglected as this Blog. But I’m finally starting to do some work on it every now and then. I’ve got a plan again, which is nice. I’ve decided to begin by making a vehicular combat game, using a spacecraft that kind of hovers around a 3D world. I’m hoping to get it to feel a little like the old Asteroids games, with that slightly loose-feeling movement. Then aiming and firing with the mouse.

The main reason I’m going with this design is that it should be pretty easy to implement. It will let me iron out some bugs in the code I’ve been working on, give me somewhere to test the physics I’ve implemented and give me a reason to get my act together and write the rest of the collision detection code (at the moment I only have sphere tests going).

Eventually I’d like to make a bit of a 3D brawler. I love martial arts and its associated entertainment products. I’ve been playing through a bunch of Beat ‘Em Ups recently and I’ve got some ideas I’d like to try out. Unfortunately that’s a little harder to code and requires a lot of animation and humanesque art assets. I’m not an artist. Good quality and free spaceship models are easy to come by. Fully rigged/animated characters are not.

Still, if the vehicle section works well I might be able to build a more human-oriented game that uses it, like a shooter or brawler in which you can enter vehicles. It’s worth a try. At the moment I just want to get the spaceship movement working.

Speaking of playing fighting games, I’ve found two that I flat out love. The first is the venerable River City Ransom. I never had a chance to play this before but the game’s awesome. Despite only being played with 2 action buttons there are a lot of things you can do. I havent’ finished it yet. It turns out that if you don’t beat some of the characters in the right order you can’t get into the school at the end. That sucks.

The other game I’ve been enjoying is Gekido. It’s got some good ideas, and a better fighting system than most 3D brawlers. I also find it impressive that game seems to have been made by a very small team of core developers (as in, around 2).

OK. Don’t know if that counts as an update, but it’s a start.

Later,

Punch

Unwanted

I got a letter today from another game company that I applied for while I was waiting to hear from Blue Tongue. This company was great to me, they were very helpful and returned my emails extremely quickly.

I sat their test and apparently did quite well, getting around 80% (seems like I’m getting better… the first test I ever took I got around 30%…). They asked to do a phone interview, which I agreed to, and then two hours later I received my job offer from Blue Tongue. So I sent the other guys a friendly email thanking them for everything, but informing them that I would not be pursuing the opportunity any further.

Then a letter showed up from them today, and it contained the following:

“Unfortunately, at this stage we are unable to offer you a position at <The Company>. After viewing your credentials, we have determined that your qualifications do not suit our needs at this time……”

I’m guessing it’s just a form letter that they send around to all applicants (which I actually really appreciate… good communication and treating applicants as if they’re worth your time are two little things that go a long way towards building goodwill for your company…)

But I thought it was a little funny, like a kid saying “Nu-uh… I didn’t want to play with you. You’re not good enough!”

Anyhow. These guys really were great to deal with and I hope they manage to find the staff they need. Apparently there’s a real shortage at the moment. I guess that may have worked in my favour, but I’ve developed some good programming knowledge over the last year and a half or so of full-time employment. Hopefully if I apply myself and remain dedicated I’ll do some pretty fantastic work for my new employers.

That’s the plan, anyway.

Enslaved by a lizard

Aw. Yeah.

So it’s been a while since I last posted. I have two draft posts sitting around that were meant to be updates on my projects, but as I went to write a post about an aspect of the project I would realise that something should have been fixed, and would run off and do so, rendering my carefully crafted post no longer accurate.

Still, at least the blog is helping me stay on track.

Anyhow. The extended absence has been filled with adventure.

You may recall that in an earlier post I mentioned that I always wanted to be a game programmer.

In fact, anyone who has had the misfortune of talking to me for any period of time will have worked out pretty quickly that I want to be a game programmer.

Some time ago, I submitted an application with a game company in Melbourne. They sent me a programming test. I did not do very well in it. They then followed it up with a phone interview that I must have done better with, gave me another shot at a test, flew me to Melbourne for an interview and then kept me waiting for a few weeks.

I hate waiting.

But now, after much hard work, after many false starts and shattered hopes… I am finally there. I have accepted a position with the groovy Melbourne company BlueTongue Entertainment.

 

BlueTongue Logo

I’m very excited. These guys are responsible for the upcoming game, “De Blob“. Of all the game trailers I’ve watched in her presence, this game is the only one that my fiancée has seen the gameplay video and gotten excited about the game. She even suggested that we buy a Wii so that we could play it. So it’s nice to know that, beyond just generically supporting me in my endeavours, she is actually genuinely excited that I’ll be working in a company that she appreciates.

In other news, it’s sad to hear that “Kwari“, a game by local Canberra company Micro Forte was cancelled recently. Micro Forte are one of Australia’s longest standing game companies (in fact, they may well be the oldest one around). I never had a lot to do with anyone there, but I did have an interview there once and, despite the somewhat negative experience that ensued (yeah… I got about 30% on their programming test…), everyone I talked to seemed genuinely talented and enthusiastic about what they were doing.

The company’s had a bit of bad luck with their recent projects. I hope things start turning in their favour again. They’ve always been good to the limited Canberra game scene, supporting the AIE and initiatives like the Canberra Games Festival.

Ok. That’s all for now. I’ll try and post something on my project’s progress at some stage (although nothing much has happened… what with getting the job, looking at houses and a wedding in two weeks I’m not really a lord of leisure right now…)

Assassin’s Creed

Wow, so I finally got to play Assassin’s Creed, since it got released on PC on Thursday.

My interest had started to wane a little. I first got excited about it a couple of years ago when I saw a trailer. When it finally got released there were average to great reviews, so I wasn’t sure how good it would be, but I didn’t actually get to play it until last week.

I love it. This is a game that I’ve wanted for a long time. It’s not perfect, but it is great.

It seems that Ubisoft read the reviews of AC as well, and in the interim between the console and PC versions they’ve taken steps to address a number of the issues people had with the game, which I have a lot of respect for.

Assassin’s Creed

A few years back, while I was training in Aikido, I discussed an idea for a game with my little brother. My idea involved vampires, the clichéd wonders of B-grade movies and games alike.

The basic gameplay elements that I wanted to see were great environment interactions (because I’d been playing Prince of Persia: Sands of Time and also Total Overdose, both of which are excellent and should be played by everyone). I wanted to be able to run up a wall, leap off it, slide down banisters and generally cause mayhem.

AC has amazing environment interactions, although sadly most of them don’t really feature in the combat. Stranglehold was a better fit for my environment interaction combat desires. More on that in a later post.

But the free-running in AC is pure fun. At first it seems like you don’t really have control over it, but the game does an excellent job of interpreting your commands into smooth, fluid, awesome movements and it doesn’t really matter in the end that you’re not pushing a jump button every time you want to leap from one area to another.

The next element I wanted in my game was the option to be either stealthy or just go completely bad ass and lay waste to bad guys. I’ve played the Hitman series with some regularity, but I have yet to finish an instalment because I just get really annoyed at how limiting the game gets. Even if there are multiple ways to complete a hit, you still really have to follow one path that a game designer thought of, and if you screw up and get seen then you essentially have to start over. The first game was a little more lenient, and I got up to the final level, but number 2 was just too restrictive for me (if you like you can exchange the word “restrictive” for the word “difficult”… both fit…) and I quickly got bored.

AC on the other hand lets me do the stealth thing when I want. It’s downright awesome to stalk someone through the streets by free-running just above their heads, then dropping down in a secluded space to dispatch them. But it also lets me just lay into the guards without any significant punishment, provided I can win the fight. I like the combat too.

Which brings me to the third thing that I wanted in my game, and ties back into the Aikido comment above. Aikido is an art that focuses on blending with attackers, using their strength against them to perform some downright nifty throws and locks. If you’ve never trained in Aikido, just seen videos, I can assure you that when done properly it’s not as fake as it looks. If you don’t go with a throw in an easy flowing manner (that can look fake on video) you end up in a lot of pain very quickly.

I wanted a game where you had basic brawler moves, so you could bludgeon thugs like in any old beat-em-up. But I devised a control scheme that used:

  • Left mouse button to attack
  • Holding the right mouse button would block
  • When an enemy threw an attack and you were in a defensive stance, you’d have a small window in which you could click to begin an Aikido counter. Then, at various points in the attack, you could click the attack button again to add an atemi and increase the effectiveness of the counter.

This is, in essence, exactly the same as the fighting system in AC (although it’s not Aikido… as far as I can tell it’s Madeupido…). And it’s almost as awesome in reality as it was in my mind. I’m a little annoyed that someone else came up with it and implemented it before I could, but the chances of me having the resources to make a game that animation intensive any time soon are pretty slim. I’m glad I got to experience it.

The Director’s Cut version seems to remove a lot the complaints people had. After the first few missions you no longer have to manually travel between your base and the cities… which is a welcome relief. The open world bits were, to me, kind of pointless. I just rode a horse for 10mins and tried to get away from the ever increasing crowd of guards who seemed very upset that I was galloping along the road. Plus there is a wider variety of information gathering tasks, which keep things interesting.
In short, Assassin’s Creed is a game I wish I’d made. It’s a game I’ve wanted to see for years, even before I knew that it was in production. It’s a classy technological marvel and it’s a lot of fun.

It also validates the ridiculous amount of money I spent on my PC.

My Project, Part 1

This is really the main purpose of this blog, for me to document the development of my game project.

I have always wanted to be a games programmer, since I was about 11 and first played Prince of Persia (which, incidentally, is a fantastic use of the PSP DosBox port). It’s why I became a Software Engineer in the first place. But it turns out that just attending Uni and doing OK in your classes doesn’t make you a great programmer, and it certainly doesn’t (on its own) give you the ability to be a games programmer. Sadly I didn’t learn this until after graduating, applying for a bunch of programming positions and failing their tests hardcore.

I really don’t like doing programming tests. Not necessarily because of the people setting them or the tests that they set (I’ve had some negative experiences but they’ve generally been rare), but a written test is just not a particularly realistic scenario in which to test the ability of a candidate. I get really tense during tests and seem to forget everything. I did one a little while ago that I think I may have answered 70% of the questions in. I had great difficulty writing the code in a word processor. The next day, when I was more relaxed, I re-did a few of the questions that were giving me trouble. It took me 5 minutes, they compiled first time and worked correctly after one minor change. Sadly the answer I submitted was incomplete (but completely broken).

I realise that companies have to select their candidates somehow, it just annoys me that I seem completely inept at the chosen method. I guess I’ll get there in the end, after much practice. At least I’m building up a collection of tests that I can use for study.

Anyway. On to my project.

It started as an entry into the Gamedev Four Elements competition. But that was really just a motivator. I want to learn as much as I can about games programming, and the best way to do that is with a project.

Very early on I decided that I wanted to write as much of the code on my own as I possibly could, even if I was essentially just re-typing it from a tutorial or textbook. I guess the theory is I hear and I forget. I see and I remember. I do and I understand.” This is not an efficient way to get a program written, but I decided that since it was about learning I wasn’t going to care about how much time it took, or how much more complete it would be if I used someone else’s code.

Right now I have a skeletal framework done. It uses a bunch of interfaces, in particular it uses a:

  • Platform interface
    • This abstracts the platform-specific tasks like creating a timer and creating threads. I currently have a Windows interface only.
  • Graphics interface
    • This abstracts the calls to a graphics API. Theoretically, I should be able to exchange the OpenGL interface I’m currently working on with another (e.g. a DirectX interface), recompile and it will all just work (I tried this in the early stages, and it worked well).
  • Input interface
    • This abstracts the input system. Eventually, I plan that you will do something like “if (input_.Fire())” and it will completely abstract which key/button is being pressed, so you’ll be able to use the one interface for joystick, keyboard, game pad, etc.
    • I currently have a DirectInput interface.
  • Audio interface
    • This abstracts the audio system and is responsible for the loading and playing of audio files. I don’t currently have an audio interface, but I’ve used DirectX’s audio system in the past, so I’m thinking of using OpenAl so that I can get some different experience.
  • Render surface
    • This is a bit of an odd one. I didn’t want it to be part of the Graphics Interface, because I wanted it to be more flexible than just rendering to a standard Window (or whatever display the platform used). It should also be possible to have multiple different Render Surfaces active at one time. Sadly, at the moment it is very much just a wrapper around the standard Win32 window functionality. Hopefully in the future I’ll abstract it a bit more.

I’m also considering a Physics interface, so that I can plug in ODE, Havok, Newton, Bullet, whatever. At the moment, however, I’m writing my own physics. I know, it’s a long, hard process and my results probably won’t be as good as if I just used someone else’s engine, but ever since I started playing with ODE I’ve wanted to know how it’s all done. If this were a project that needed to be done on a schedule, I’d plug in a 3rd party engine and just run with it (probably Bullet, I like it the most of the free engines I’ve used… I haven’t tried Havok, but I’m excited that it’s now being offered for free… have to see what that’s like in May…). Since I’m doing this to learn, I really just wanted to have a go.

I have to say, it’s been a lot of fun so far. At the moment things fall. That’s it. No collision yet. Oh, I also have springs. Which is kind of nifty. I started with the book “Physics for Game Programmers“, but I didn’t find that it was that much use in a general sense. It covers a lot of specific equations, but it doesn’t help you if you’re trying to work out how to write a general physics simulation environment. Once I have the basics in place I’ll go back to it. I did use it to implement a Runge-Kutta integrator, and use that to implement some basic springs, but I’m not using that code at the moment.

I moved on to reading online articles, in particular Chris Hecker’s articles from the Game Developer Magazine. These are great articles, and I learnt a lot, but they didn’t go into as much detail as I wanted. I’m still a fairly fresh software engineer, and I didn’t do all that well at maths or physics during my schooling, so I needed something a little more in-depth before I could really write a decent system.

So I moved onto the book “Game Physics Engine Development” by Ian Millington. The Amazon reviews for this book were pretty good, but the opinion of it on Gamedev was very low. Having read through about half of it, I don’t know why it got such a bashing. I think that the people at Gamedev were just beyond its content and hoping for something else.

As a beginner I personally love it. It’s well written, it contains exactly the content I was hoping and it walks you through creating a basic Physics Engine that you can then update and modify yourself later. I highly recommend it.

When it comes to the code, I don’t agree with all of the author’s choices but he always explains his reasons and he points out alternatives and sources of further information. I do feel that he perhaps skims over some of the maths and simplifies it a little too much, but that information is well covered on the Internet and in any other games programming text book, so it’s not of major concern.

And that’s pretty much what I’m up to so far. I’m about halfway through the book (I’ve read further ahead than I’ve implemented) and I’m enjoying it immensely. I’m focussing on the physics implementation at the moment. Once that’s at a basic but working stage, I’ll move on to other areas and making a simple game. I’m not sure if I’ll keep going with my 4E6 idea, which was a kind of management-strategy game. I think I’ll probably do a simple action game first.

Well, that’s a pretty long post. I hope I’ll be able to make more frequent updates from now on. I need a new way to keep motivated, and this could well be it.

- Punch

Missed deadline

Gamedev’s Four Elements VI Contest has now ended. I’m a little sad that my entry never got to any sort of playable stage. Looking through the entries that were completed, it seems like my plans got a little more grandiose than most people’s. Maybe I’ll post my ideas at a later stage. They’re not really all that huge, but there is an easy way and a hard way to do things. In my spare time, I generally choose the hard way. More on that later.

Still, a lot of the games entered are pretty fun. And, most importantly, they’re complete. That’s a hard thing to accomplish, no matter how big you make the scale of your game. Congrats to anyone who got an entry in.

I’m still glad that I set the goal of putting something together for the competition. It did a lot for me.

I got a lot of code written, so now I have a good code base that I’m still working on. It’s hard to motivate yourself to write code in your spare time when you do it all day at work. I thought about a lot of problems, encountered a whole bunch of new concepts and generally learnt a massive amount.

It’s funny. When I finished uni I thought I was good. It was naive and stupid, but I was so proud that the little team I was involved with had made a full (if terrible) game that ran on the Playstation2. I was proud of my assignments and thought I really had what it took to be a great Software Engineer.

Many failed interviews and tests later, I realised that I had no clue.

Now I’ve been employed as a C++ Software Engineer for over a year. I’ve read countless articles and bits of many books (am I the only one who can’t actually sit down and read a text book? I tend to read enough to get a general idea of the content, then just return and grab what I need when the need arises). I’ve reached a point where (some) people ask me questions at work, and generally I can at least discuss solutions with them.

But for all this, all I’ve really learnt is that I don’t really know anything yet. I have so much that I want to explore. I find all sorts of crazy little things you can do that make me stop and say “No way!” like the massive nerd raised on Bill and Ted that I am. I want to get in and have a go at programming everything. There’s always something new to learn and I look forward to the constant improvement that the engineering field seems to encourage.

It’s a shame I didn’t have this attitude in Uni, really.

I was going to write about what I’m working on at the moment, but this post is long enough. I’ll write another one.

Happy New Year

Wow. I just realised that I started this up again last year and then promptly ignored it. Sounds about right.

Turns out that once you get engaged, you get pretty busy. Who’d have thought?

So everything’s messed up a bit, because I just re-installed Wordpress. That means that I’ve lost all of the website contents from last year, which is very sad. Fortunately I’d really only written one post, which essentially just said that I was going to write posts.

Anyhow, it’s up and running (again) and I’ll get some posts up soon(ish).

- Punch