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