Wednesday, November 21, 2007

Heavy Iron Programming Challenge

We’ve added a programming challenge to the Heavy Iron site. People wanting to apply for a programming position can either send in their resume as usual, or have a go at our programming challenge. Doing the challenge is a good way of showing off your coding skills, and it’s also fun. (Well, I find it fun:)

The challenge takes the form of a C++ program we’ve written, which isn’t working as well as it could. It’s quite fun and graphical in nature.

To try the challenge, go to the Heavy Iron site, click ‘Now Hiring’ on the main page, then click on ‘Programming’ on the right hand side and follow the instructions.

Monday, October 08, 2007

Intel Threading Challenge

Intel are running a programming challenge based around the area of multi-threading. They pose a programming problem, and you submit code which solves the problem using multi-threading.
Winners of the rounds get cash, and the overall winner gets an Apple laptop.

It's worth having a go, because:
  • Often, not many people apply because it requires effort. So your chances of winning are reasonable.
  • You'll likely learn something, or at least dust off your skills.
  • It's good to mention at interview, and gives you some more demo code.
  • Being able to think of problems in terms of multiple threads/cores is becoming highly important, and a desired skill.

Sunday, September 30, 2007

WorkflowProfiler v1.1

I've made a couple of minor changes to WorkflowProfiler.
  • The 'From' field now defaults to including the username, as well as the machine name.
  • There was a minor bug with the 'Text1' user string field. All user strings were starting with the character '1'.
  • There was a '/' character missing in the C# example in the readme file.

We're now starting to use it at Heavy Iron, and getting some interesting results. I've been wanting this type of usage data for years... :)

Saturday, September 29, 2007

Zero Punctuation Game Review

I just came across the 'Zero Punctuation' reviews on Escapist Magazine. Very funny stuff. Here's a recent review of Peggle, a casual game.


Sunday, September 02, 2007

Announcing WorkflowProfiler

I just finished writing WorkflowProfiler. It’s a freeware program for event logging across a network.

Normally, if you have a group of people using an application which was created in house, it’s very difficult to objectively state how well the application is performing.

  • How often does it crash?
  • How much time do users spend waiting for lengthy operations to finish?
  • How often do users use certain pieces of functionality?

WorkflowProfiler allows you to gather this type of information, by allowing you to fire events to a server from each user’s machine, using a command line operation. The server collects this information, and produces HTML reports to summarize the information.

Knowing things like how often crashes happen, or how much time is being wasted, allows you to quantify how much money you’re losing as a result of the problems, and prioritise what should be worked upon to best improve productivity.

WorkflowProfiler is useful for any industry, but here are some examples of how it could help answer questions about the workflow of a game developer:

  • How often does the editor crash?
  • How many times per day do people launch the game?
  • How long do we spend waiting for the editor to create game data files?
  • How long do we spend converting sound or video to compressed formats?
  • How long do we spend getting the latest data from source control?
  • Does anyone still use the ‘wipe all caches’ button, since we told them they didn’t need to?
  • How long do we spend waiting for lightmaps to be created?
  • Etc.

Tuesday, July 31, 2007

Game Developer Map

I've started my own little Google map of local game development studios.
I'm not trying to map the world with it, but I think I'll perhaps build up a list of all the commercial games studios in California.

If your studio is missing, drop me a post or email...

Monday, July 30, 2007

Buy n Large

If you've not been there yet, head on over to http://www.buynlarge.com/.

Sunday, July 15, 2007

Mio C220 GPS First Impressions

I recently bought my first GPS for the car, a Mio C220. What first attracted me to it was that, at $199, it was the cheapest one :). I then read some reviews online, and people seemed pretty happy with it.

What you get
It’s a pocket sized device, with a color touch screen, and a 400MHz processor. The map comes loaded on a standard removable SD card. It’s pre-loaded with the map for North America, but it comes with a DVD with more maps. It comes with a car charger and a suction cup for sticking it to your windscreen. It’s also got a built in speaker for giving directions.

Impressions
  • The UI was a bit confusing at first, but you get used to it pretty quickly.
  • The touch screen works pretty well, though it’s best if you’re using your little finger and are not driving. Using fat fingers and driving at the same time is a recipe for surprise lane changes.
  • The big thing I initially missed was a ‘text to speech’ function. Instead of saying ‘In 100 yards, take the 66 north’ it says ‘In 100 yards, turn right’. This can be frustrating as freeway turns are often on the same side of the road and close together. At first I had issues which would have been helped if it had said the name / direction of the road to take. However, you gradually improve about ‘seeing’ how far distances are, glancing at the map screen, and generally interpreting what it wants you to do.
  • One of the things that a review said was that it had a quick screen update time. I’d say the screen updates at between 5-10 frames per second. The result is good. I wouldn’t want one which updated slower.
  • The device is pretty small and lightweight, which is nice. Some other GPS devices have bigger screens. That would be nice, but I think the C220 is about big enough.
  • Some other GPS devices can play MP3’s or show photos etc. Personally I’m not a big fan of cross over devices. I like phones which just call people, cameras which just take pictures, and fridges which don’t know when I’m out of yogurt. So I actually like that this GPS just serves one purpose. It means I’m not paying for more than I want, and the manufacturer didn’t have to compromise on the creation of the device, and could focus on its core task.
  • It doesn’t come with a USB cable. Though, the USB socket is a standard small socket, which I already have a cable for. Also I don’t anticipate needing to plug it in to my PC very often; just when I want to swap in the UK map for a visit home.
  • It also doesn’t come with a protective pouch. It’d be nice to have one for when you take it out of the car, as otherwise it just has an exposed screen.
  • Overall, I like it very much. It takes a lot of the stress out of driving to new places.

Wednesday, July 11, 2007

This week in ducks...

Sorry the posts have dried up a bit lately. I'll get back to it soonish...

In the meantime, here's a fun bit of news about ducks. I'm a fan of ducks.

Monday, June 25, 2007

Getting Stuff Done - Weekly Time Budget

After you've broken down your goal and committed to it, and as an alternative to scheduling, my favourite way of getting stuff done is to decide to commit a certain amount of time per week to devote to a task. At the point that you commit to the work, you decide something like:

“Until the task is completely done, I’m going to spend 3 hours (180 minutes) per week, every week, tackling just this problem.”

Some observations and rules come from this:

  • You can make up this time any time you like. Before school, after work, on the weekend, staying up late one night etc. Within one week you have flexibility, you can front load or back load your week depending on how you’re feeling and your schedule.
  • Remember that the first few weeks will be easier to complete the time, as the task is new and interesting. Don’t go too high with the time commitment or it will become too hard to stick to.
  • When you’ve met your quota for the week, it’s nice to force yourself to take a break from it for the rest of the week. This means you’re ready to start the next week without being burnt out on the task.
  • Decide when your week is going to run from, to avoid you trying to cheat yourself by shifting it when you don’t want to work. For example, your week might start on Monday morning, with all the minutes needing to be done by the following Sunday night.

Friday, June 15, 2007

Bryce 5.5 is now free...

Gamasutra just announced that Bryce 5.5, the 3D modelling package, is now free to download.

Getting Stuff Done - Scheduling

So far, we’ve gone through the stages of deciding exactly what the goal is, and deciding whether we’re seriously committed to doing the work to meet it. The final thing we need to do is to provide some kind of ticking metronome to remind us to get it done.

The most common approach is to set up a schedule. It’s pretty simple:

  • There are a variety of programs you can use for scheduling, such as Open Workbench. If you’ve got less than 100 items in the list though, I recommend just using a spreadsheet.
  • Break down your goal into chunks, and predict/decide when you expect them to be complete.
  • Break down the tasks to a pretty fine level of granularity. When scheduling a large project, it's common to keep tasks under three days each.
  • You’re committing to doing your very best to meet the schedule, doing whatever effort it takes to hit the dates or beat them.
  • The schedule kind of takes the role of a person; someone telling you what is expected of you, beating the drum.
  • You can adapt the schedule if really needed, but you need the will power to not just stretch it out because you’re being lazy.

Sunday, June 10, 2007

Getting Stuff Done - Committing

Now that you’ve broken your goal down, are you really serious about doing the work required to get it done? Are you ready to commit to getting it done, regardless of how you’re often not going to enjoy it?
It will mean regular sacrifice (of either time, money or both). There will be times when:

  • You regret committing to it.
  • You feel you are wasting your time.
  • The amount of remaining work suddenly grows greatly.
  • The work is too tedious, and you’re surrounded by far more interesting things.

At these points, you’re going to have to keep on doing it regardless.

Take your time, and think carefully about your answer. If you consider the question and quickly get a strong ‘yes’, then you’re likely not thinking it through fully. Once you’re in, you’re promising to yourself that you’re going to do it. It’s like getting a dog, or getting married, or getting a tattoo. You’re committing to something which will bring please and pain, not just getting the upside.

Let me make something clear. If you decide to not commit, then that’s OK. You’ve just saved yourself from a lot of headaches, wasted time and pointless day dreaming. It also leaves you free to commit to something else.

If instead, you don’t make the decision, then you stay in a cycle of pipe dreaming and half baked attempts at chipping away at the task. You can delude yourself that you're getting something done, and brag about it to your friends, but over time your enthusiasm will likely fade and you'll stop doing it - because you're not committed to it.

So, take your time, perhaps a week or two if it's big, and then decide whether you're ready to commit.

Monday, June 04, 2007

Getting Stuff Done – Break down your goal

Let’s say that there’s something that you need to get done. Something challenging which will take up some time, like learning a new programming language, writing a game demo, starting a company, invading Poland, etc.

First, what is it that you’re wanting to do? Try and be as specific as you can. Write it down as if you were writing an email to ask someone else to do it. Break the high level goal down into some of the main stages.

Basic Goals

  • Learn CG.
  • Make a game, sell it and retire laughing.
  • Sort out my savings.

Better Goals

Learn CG

  • Download Ogre, run the samples, and find one to hack.
  • Read up on Ogre materials, and read some CG samples.
  • Make a cell shader effect and demo it by modifying the sample.
  • Write a cloth simulation and put the cell shader on it.
  • Test it out on a couple of friends’ machines.
  • Record a video of the output and put it on my resume site for employers to see.

Make a Pac man clone

  • Use my existing knowledge of Ogre and C++ to write a clone.
  • Use Blender to make the models/animations.
  • Get free sounds off the web, and play them with OpenAL.
  • Pay for some music off the web.
  • Polish and debug the game, including beta testing with friends.
  • Make a website, including forum and purchase page.
  • Get a friend to do the art for the website.
  • Release the game.
  • Make patches to fix issues.
  • Do lots of marketing work.
  • Retire rich.
  • Start laughing.

Sort out my savings

  • Talk to my family about how they save and what types of accounts they have.
  • Ask at work about how the pension scheme works, and decide whether I want to join.
  • Read the book on investing that I was given for my birthday.
  • Start an automated monthly deposit to my savings account.

Having a better idea of what’s involved with the task will help you work out whether the scope of work is appropriate, and let you see what you’re getting yourself into. If you’re starting to learn C and your overall goal is to ship a World of Warcraft killer, then you might want to think of some smaller goals to get you started.

Friday, May 25, 2007

Nudging

I just came across the concept of 'nudging'. Making a small change to how you're already doing things, to make a big difference.

I feel it can apply to the day to day running of a games studio (or any organization). If you can make it slightly easier for people to do the right thing (e.g. report a bug, schedule accurately, not check in compile errors) then it can have a big overall effect in your quality.

It's pretty common sense, but it's easy to lack that sometimes...

Sunday, May 20, 2007

Sketchup

Sketchup is a modelling tool which Google bought a little while ago. It’s used, in part, to create buildings and such for the Google Earth project. It’s not as sophisticated as something like Maya, but it’s easy to use to create simple static models. It comes in two forms, a free version, and a more feature rich version for $500. There’s also an SDK you can ask them for (email sdk@sketchup.com and they'll ask you to complete a Non Disclosure Agreement), which allows you to read sketchup files.

It occurred to me that the free version, and SDK, could be used as a level editor for simple home projects or shareware games.


The idea for how to build levels would be similar to how I said that Inkscape could be used. The general level geometry is built using the normal modelling tools, and then gameplay information is layered over the top. For example a box with a spider texture on it, would turn into a spider enemy in game, or an object with a wood texture, would become a wooden dynamic physics object. The limitations come when you want to do scripting, such as configuring a platform to move back and forth, or triggering an event when the player reaches a certain point.

As with using middleware, you should aim to bend your designs to fit with what you're given. Though the limitations might change the game you're making, the time saved in having such a stable and feature rich editor on day one would be massive.

Level editing aside, Sketchup is a lot of fun. If you’ve not had a play, I recommend watching this video, and having a play yourself. Also take note of the huge free collection of models in the warehouse.

There's a great 15 minute video which shows you the features here, and you can download Sketchup here (the free one is the button on the left).

Here's a timelapse view of someone building a house in sketchup...

{Edit May 2009} I just spotted on Jim's blog that exporters for XNA '.X' format are available for Sketchup. More on this at my newer post.

Saturday, May 12, 2007

Free Visual Studio - Update

Remember me saying that you can get a free copy of Visual Studio Standard by taking a couple of labcasts? Well I did it, paid the $11 shipping, and received my copy the other day!

It was a little strange at first. You complete the second labcast, there’s no confirmation that you’re going to get anything, and then two weeks later you get a mail with a link to the redemption page. Ohh, and make sure you use IE.

The Standard edition normally costs something like $300, so it’s a good deal. The offer is still running until June 30th / while supplies last, so you can still get your own copy.

(United States Only)

Tuesday, May 01, 2007

Summer Internship?

Just a quick note to say that Heavy Iron is looking for summer interns.

It's for any Software Engineering / Computer Science students interested in video game programming in C/C++. We are looking for solid C/C++ coders, with good problem solving ability, who can take on any technical challenges from bug fixing, to implementing new game features.

It's a paid, full-time position. I'd recommend it to students who are local (we're in Los Angeles, 5 mins north of LAX), as flying out and finding accommodation is a bit of a hassle.

If you'd like more information, you can mail me at mister_pope (at) hotmail dot com. (I live in fear of spam bots)

Saturday, April 28, 2007

Questions from a game programming student

A student at Full Sail recently mailed me some questions, so I thought I’d answer them as a blog post.

What is an average day in your life working at Heavy Iron Studios or just in the game industry?
I’ll answer this in a future post some time… Basically, for a programmer, it’s a lot of sitting and coding, but we also talk and joke around a bit. I like it…

Can you describe the type of people that you wish to work with and what personality traits make these people stand out to you?
The key attributes we look for are an ability to code C/C++, good problem solving ability, and a reasonable level of education / literacy.
On the personality front, we like to see people who are going to fit in. At Heavy Iron we’ve got quite a relaxed/friendly atmosphere, and the programmers are all helpful to each other. Working with people who think they’re the best programmer on the planet, or who don’t get along well with others isn’t something most people want. It’s best to be humble and friendly – if you are smarter than others, then you can help them improve, and if you’re not, then you’re open enough to learn.

How do you feel about accelerated technical education schools like mine?
Like any school, it really comes down to the individual. Going to Full Sail should allow you to put ‘Look - I’m educated’ on your resume, which will get your foot in the door. After that it’s down to the interview process to show you’ve got the skills. If you work hard on your course and do extra coding in your spare time for fun, then you’ve got as good a chance as anyone.

Do feel more people are hired for a specific area of expertise, or a general knowledge of all aspects in game programming?
Most people we hire are generalists. Our programmers tend to touch lots of areas of the game code, engine and tools, and so we want people who can quickly pick up anything. This doesn’t mean that we’d not want someone with a speciality however.
I’d say that to be a specialist in something you’d at least want one or two published commercial games where you worked on a specific feature from the ground up. Ideally you’d have written the same type of system more than once, from the ground up. That way you will have had chance to try different approaches to the solution.
For someone in your situation, I recommend not attempting to specialise too much to early on. Try touching everything once – rendering, sound, physics, AI, memory allocation, etc – and then find what you like. It’ll make you a better specialist if you’re a generalist first.

How can I stand out above all the other programmers out there?
If you could regurgitate live frogs, that would do it for me…
Just be as good as you can at what you do. Write games and demos in your spare time – and don’t let anything stop you (I’m waiting for my friend to work on it with me – I’m coming up with the worlds best idea – I’m going to draw the graphics first etc.). If your resume has a link to your site, and it shows things like simple games, use of physics API’s, graphics demos, shaders, then I think you should find it hard to not get a job. If you’ve not got those skills or demos, then get cracking – pick what interests you and start doing it. If you graduate and can’t get a job, then give yourself the 40 hour per week job of creating those demos. Your skills will improve and you’ll stand out!

What is your favorite game?
That’s tough. I’ll list a few, going backward through time.
- Resident Evil 4 on the Gamecube was absolutely fantastic, and it’s $20 new. Bargain!
- Command and Conquer and Total Annihilation were good.
- Captive for the Atari ST was good. (Think dungeon master but with Robots)
- ‘Elite’ was a space trading game from the 8 bit days. This was a great game. I’d say it’s the reason why about half of the game programmers in England got inspired to make games. (OK, I might be going a bit far, but I’m not alone.)
- Also, I think my favourite Heavy Iron game was ‘SpongeBob SquarePants: The Movie’. It’s a kids game, but it was a lot of fun to make and play.

Is there any other advice you can offer to an aspiring game developer?
Just the tips I’ve been posting. Oh, and I’ve said it before but – apply directly to studios instead of using recruiters. It saves the company money, which they like, and is also more personal.

Thursday, April 26, 2007

Moonpod Trailers

I'm getting quite into this posting videos from youtube mullarcky. My friends at Moonpod have posted trailers for their two games there, and I thought I'd join in with spreading the word...

Starscape


Mr. Robot


I'll get back into the swing of text based posts soon... I promise... :)

Saturday, April 21, 2007

Sumotori Dreams

As I think I mentioned, I like the fun-motion blog. It put me on to this free little game. Very impressive and very funny!



More pics and videos at the official page.

Tuesday, April 10, 2007

Getting a game programming job - What new programmers work on

A common question I get asked, is what do new programmers (or interns) work on? It varies between companies, projects and the individual, but generally it tends to include things like the following:

  • Firefighting. Coping with the constant flow of random issues that come up. This is good for learning all the different parts of the code base.
  • User interface for the front end, in-game pause menu, and the in game HUD.
  • Fixing ‘TRC’ issues. Things like making sure that the game does the right thing when the controller is pulled out.
  • Creating localized versions of the game.
  • Supporting internal tools, such as a level editor.
  • Working on graphical effects and sound effects.
  • Teaming up with someone with more experience on some part of the game, like the player code or enemies, and helping out where needed.

Sunday, April 01, 2007

Get a free copy of Visual Studio 2005 Standard

For a limited time, you can get a copy of Visual Studio 2005 Standard by taking two online labcasts. Cool!

Thursday, March 29, 2007

Excel Tips

Lately I’ve been spending a lot of time in Excel, and I thought I’d pass on a few tips. Hopefully I'll give you a tip you don't know :)
Open Excel at the same time, and try them out.


Dragging the current cell to extend to other cells
  • Select a cell, and key in either the name of a month, the name of a day, or a whole number.
  • Now put your mouse over the small black square in the bottom right corner of the cell, and drag it either vertically or horizontally over some more cells.
  • When you let go, Excel will fill the cells with a procession of appropriate values, if a pattern can be found. E.g. January, February, March, etc…

Fill Down
  • Select a cell, fill it with some text.
  • Now select that cell, and a series of cells below.
  • Now press ‘Ctrl D’
  • Et Voila, the value in the first cell is copied to the lower cells.
  • This is similar to dragging the small black square, as listed above, but this won’t spot sequences (which is often desirable) and can also done without using the mouse.

Format Painter
  • Next to the toolbar icons for copy and paste is ‘Format Painter’. I didn’t know what it was for a long time.
  • First, select a cell, put some text in it, color it, give it a border, make the text bold etc.
  • Now select another cell and just put some text in it.
  • Select the first cell, then click ‘Format Painter’, then click the second cell.
  • Hey presto – all the formatting information from the first cell is copied to the second. This also works for copying regions of formatting.
F2
  • Pressing F2 while a cell is selected allows you to edit the cell, without having to click on the edit box at the top of the screen. (This works in other places in Windows too, e.g. renaming a file in Explorer.)

Wednesday, March 21, 2007

ODE Determinism

A while ago I had a play with two free physics systems, ODE and Newton. I started by using ODE, and in this post will summarize my experiences with it.

After a while of flipping objects around I tried making a simulation. I specifically wanted the simulation to be deterministic, meaning that if I set the same simulation up twice and said ‘go’, the same sequence of events would happen. (E.g. A precariously balanced tower would always fall down one direction, let’s say left.)

I found that ODE wasn’t deterministic (E.g. the tower would unpredictably fall left or right each time). I dug through the forums and eventually found something quite interesting. When ODE collides two objects together, it generates multiple contact points. For efficiency and stability, it chooses the contact points it’s going to use randomly, and over time this statistically averages out to represent the full contact surface. At this point you might be scoffing, and saying that you wouldn’t do it that way. I say once you’ve written your own physics system and think it’s easy, then you can scoff :)

So I tried a hack. I tried calling “srand(0)” before the start of each simulation run. This should mean that for the same objects, and the same sized time step, the same sequence of events should happen, and when collisions happen, the same order of random numbers should be generated, meaning the simulation shouldn’t diverge. I tried this, and almost to my surprise it worked! The simulation would run the same way time after time.

However I then realized another facet of the determinism which I hadn’t foreseen. My simulation was deterministic, but if I added another physics object which was off in the distance, and not directly colliding with the main focus of the simulation then I would get a different deterministic result (E.g. the tower would always fall left, until you add a brick somewhere in the distance, and now the tower would fall right). The cause is that the new physics object is causing an extra collision, and therefore throwing off the sequence of random numbers.

The next hack I could do would be to change the Rand function which ODE uses to return a fixed number. This should cause all collisions to resolve the same way.

Unfortunately it was a while ago that I worked with ODE, and I can’t quite remember whether I tried the second hack. By this point the determinism problem and also problems getting objects to fully come to rest were frustrating me and so I decided to try out Newton.

Before I close I’d just like to say that though it may look like I’m giving ODE a hard time, there are lots of users of it, that many applications don’t need determinism, and that I’m delighted that the clever people who wrote it went to the trouble of doing so. Having played with bits of physics code I can appreciate the difficulty in building a physics library, and am grateful that I don’t have to write my own.

Monday, March 12, 2007

Mr Robot is unleashed!

My friends at Moonpod have recently released their second indie game 'Mr Robot'. I've mentioned their developer diary in the past, they're not currently writing it, but I'll let you know when they restart it.

Mr Robot is an interesting mix of old school isometric platforming and RPG turn based fighting. It's been getting some great reviews, and various 'game of the month' type accolades. I heartily recommend having a play of the free demo...

Tuesday, February 27, 2007

Getting a game programming job - Keep on coding after university

I’ve spoken before about the huge benefit of working on demos in your spare time. I’m going to say the same thing again in a different way in an attempt to spur a few more people into action.

I interview quite a few people who’ve been to university and done the courses, and quite likely were good at coding their assigned projects. However once university finishes they stop coding, and start looking for work. What happens is that if you don’t land a job quickly, your skills start to rust over. You can’t remember where the asterisks go, how big the data types are, the standard library functions etc. Sure, if you had google with you, you could work it out pretty quick, but that’s a weak defence in an interview. The longer you go without coding, the harder it becomes to make it past the phone interview.

Here’s a different picture. You have a phone interview or programming test at 2pm, and you just spent the last three weeks working on a 3D game demo. Now you’ll likely remember lots of stuff, you’ll be in a coding frame of mind, and you might even get a demo to show them.

Sounds obvious, but you’d be surprised how many people fall into this trap.

Tuesday, February 20, 2007

Perlin Noise

Perlin noise is a useful technique to be aware of when making games. It’s useful for creating apparently random ‘noise’, which is restricted to a range of numbers. Some potential uses in games are:

  • Make a random looking heightmap of a mountainous area, without going outside certain bounds.
  • Create the jagged line for a lightning bolt between two exact points.
  • Apply a subtle random wander to the game camera to make it look like the camera is hand held, while still pointing generally at the target.
  • Create a tiling plasma texture.

Perlin noise works by starting with a straight line and recursively bisecting it. Each bisection point is shifted some random amount from it’s initial position. Each recursion can specify a different range from the random offset. By varying the level of recursion and the shift range for the different recursion depths, you can get a range of different types of shape.

Actually, the above is just my simple/para-phrased understanding of Perlin. Here’s a better page which really goes into it in depth.

Saturday, February 17, 2007

Tuesday, February 13, 2007

Optimize Your PC Startup Time

Other than buying a new PC, I sometimes wonder how to speed up my PC and its startup time. It used to be quick, but through that mysterious alleged process of ‘windows machines getting slower over time’, it’s been getting pretty painful lately.

I decided to try and find the cause, and thought I’d document my attempts here, in the hopes of saving the world from upgrading their PC’s. (I’m all about saving the planet.)

Clean Up That Systray

I went through all the icons in my system tray, and uninstalled the ones which I wasn’t really using.

Instant Messaging

I was running Microsoft Messenger and Skype. I tried using task manager to see how much memory they use. The ‘Mem Usage’ column (‘View->Select Columns’) seems to be the current physical memory, which fluctuates too much to give you a useful number. The ‘VM Size’ seems pretty constant though. Messenger takes 26meg, and Skype takes 15meg. I decided to not start them by default, and install Trillian, and have that start by default instead. Trillian is a small download, works with Messenger, and looks like it might use less memory. That said, I found that it takes about the same as messenger, so it might not be much of a win. Still, I think that not having Skype on by default will save me something. Anyone that I talk to on Skype is also on my messenger list, so I can use Trillian to see if they are online.

Startup Folder

I had a look what was in my ‘Programs->Startup’ folder. I had ‘Google Updater, Adobe (Acrobat) Speed Launcher, and Juice (a podcasting program I’ve not really been using). I deleted all of these, as I decided they weren’t generally serving much purpose for me.

Internet Browser

Browser startup time was something that I was curious about. I experimented with IE7, Firefox and Opera. I found that they all opened up to my home page in about the same amount of time. The difference in perceived performance was pretty intangible, so I decided to stick with what I’m used to, which is Firefox.

“MSConfig”

OK, now I’m getting all hardcore and dangerous. I don’t recommend that novices play around with this application.

If you run MSConfig (‘Start->Run->type “msconfig” in the box’), there’s a tab called ‘Startup’ which lists a bunch of executables which run at startup. Looking down this list, I found plenty of things to turn off:

  • A version updater for ‘Musicmatch’ (mp3 player), which coincidentally was also causing me problems when shutting down windows.
  • “ITunes helper”, something that iTunes can live without.
  • “QTTask”, something that QuickTime player can live without.
  • A program which my bank gave me.
  • A web browser launcher which got installed during my broadband setup.
  • A printer software update program. (I’ve had the thing two years, it works fine, and the update never gives me new software. I left the printer spooler though.)
  • A program related to my old webcam.
  • A program which I accumulated at some point which supports a remote control for my DVD drive. No thanks.

Other Cleanup

Finally I’ll list a few other things that I like to do occasionally to keep the machine clean.
  • Run spyware and anti-virus scans.
  • Look through the ‘Add/Remove Programs’ list and delete things I’m not using.
  • Delete or move things off the desktop which I’m not using.
  • Empty the recycle bin.
  • Defrag.

The Result

So after all this messing about, is my machine much faster? I’d say it’s going mildly faster, but not so much. That said, I do have a nice feeling of cleanliness, knowing that I’ve cleaned up a bunch of stuff.

Wednesday, February 07, 2007

Scripting Languages - An Alternative

In the last couple of posts I’ve presented the pros and cons of using scripting languages such as LUA and Python in commercial games. To summarize, there are some powerful reasons for and against using them, and you need to think carefully about it before using them.

This time I’m going to present an alternative which is commonly used, but let me say up front that this method also has pros and cons, and I’m not attempting to say that this method is better than scripting languages.

Most games have some kind of editor for building levels. In these editors you shape the environment, and also fill the world with objects of different types. Some types of objects you might place might be, player start position, enemies, crates, trigger volumes, pickups etc. Each object will have some configurable properties. Enemies might have health and strength, crates might have a configurable number of gold coins in, etc.

The alternative to scripting languages comes in by these gameplay objects ‘sending messages’ when different events happen. In the properties for the object, you specify that when ‘X’ happens to the object, send a message called ‘Y’ to object ‘Z’. For instance, on the trigger volume object there might be an ‘on volume entered by player’ event, which could be configured to send a message called ‘Appear’ to another object called ‘Enemy62’.

This simple connecting of objects together using events and messages allows simple scripting of the game, and basically gives simple ‘if…then…’ functionality. There’s a lot of stuff missing though. What about variables, complex conditionals, timers, functions, passing parameters with messages etc? Well, you can tack these on by adding gameplay widgets which perform these goals, and generally follow the same theme of having an point-and-click style of scripting, rather than writing code.

Advantages

  • You don’t have the problem of novice programmers writing bad code.
  • You don’t have to use a third party scripting language (i.e. the stepping into someone else’s code problem) or have to write your own complex scripting language interpreter.
  • You can tack scripting onto your game using the level editor which you’ll need anyway.
  • You’d rarely have performance problems as this method doesn’t give script files which need interpreting, but also due to having a limiting simplicity, the amount of scripting is usually light.

Disadvantages

  • The power of the scripting ability is pretty limited. Normally you just get simple ‘if…then…’ type operations.
  • Just because you’re not giving them a coding language, it doesn’t stop the users from making convoluted scripts.
  • Reading how the game scripting works can be much harder, as instead of a single list of instructions, you have a sea of objects, each firing little messages at each other.
  • You’ll likely have a similar lack of IDE-like debugging tools for your scripts.

So there we go. Scripting languages – can’t live with them, can’t live without them.

Or something like that…

Wednesday, January 31, 2007

Scripting Languages – The Bad News

Last time I introduced what scripting languages such as LUA and Python are used for in games, and some of the positive aspects of using them. This time we’ll go through some of the negatives generally found with scripting languages. Note that each scripting language is different, and may not suffer from all the problems listed.
  • Non-programmers don’t make great programmers. As you often ask non-programmers to do the scripting, they will often make novice mistakes, need help writing simple code, or make really nasty code (spaghetti code, bad naming of variables and functions, heavy use of global variables, etc). This can result in a buggy game, and end up using programmer time as the programmers are called in to fix things.
  • Scripting languages often lack a sophisticated debugger, like the one the C programmers will be using. This makes things very tough for the scripter, as they have to resort to inefficient debugging methods such as doing ‘printf’s to show how far the script ran, and what values specific variables have.
  • Fixing warnings from the script compiler can be difficult for a non-programmer.
  • Though you might start off thinking that you’re only going to write a little code in the scripting language, you often end up writing more than you intended (e.g. enemy AI), and script execution (which is usually a lot slower than the execution of C code) becomes a performance bottleneck for your game.
  • As with any piece of middleware, you’re bringing in a large block of someone elses code. At some point you’ll likely need to track down a memory leak or otherwise debug inside the code. For example, you might be calling the scripting API incorrectly, which is causing a memory leak, so you discover that memory is leaking inside the scripting system, and start stepping in to it, to track down why. This can be difficult if the code is not written in an easy to understand manner.

It’s not a long list of negatives, but in combination, by the end of a project, these problems can cause a lot of headaches.

As you might expect, it’s too simple to just give scripting languages an overall thumbs up or down. The choice of whether to use them needs to be carefully made for each game. The particular scripting language, what it will be used for, and who will be using it all play big factors in making a decision.

Next time I’ll present a common alternative to using scripting languages.

Console comparison

I'm forever forgetting the differences in specs between PS3, Xbox360 and Wii. I've been meaning to write a comparison for a while, but thankfully found someone else has written one.

A couple of the most fun parts of the comparison are the CPU and Memory. Wii has about 1/8 of the memory of the other plats, and the Wii has a single core which is less than 1 GHz (as opposed to 6+ cores at 3.2 GHz). I still want a Wii mind you.

Monday, January 22, 2007

DOH!!!

I just upgraded to 'new blogger', and have managed to lose my template.

I have a copy of my old template, but it doesn't work with the new system, so it'll take me some time to track down what has changed...

If there's one thing I like about blogging, it's writing template html :( 

Scripting Languages - The Good News

 Many commercial games use scripting languages such as LUA or Python as part of their engine. Here’s a run down of what they’re used for, and some of the good points of using them.

  • Scripting languages are generally used for making ‘things happen’ in the game world. For example “when the player walks here, make the enemy appear”, “after this much time has passed, play this sound”, “if the enemy loses 50% of his health, tell him to start using his special attack move”.
  • Looking at these types of needs, you can see how they’d fit quite nicely into code. They read like if..then statements, followed by function calls. But it’s also pretty simple, it seems we could live without templates, intrinsics, header files, operator overloading, and other advanced language features.
  • To integrate the scripting engine into the game, and have the scripts be capable of doing useful things, the programmers have to wrap C/C++ functions in a way which makes them callable from the script. Also the programmers have to provide a way of launching scripts when certain events happen. To take the first example above, when the player enters a trigger volume, it must be capable of launching a script. In that script, the script would then make a call on the engine to tell a specific enemy (perhaps by a name in a string) to appear. A pseudo code script could look like this:
On_PlayerEnter_Volume44 ( )
{
EnemyAppear ( “Enemy62_Soldier” )
}

  • As the game is going to have lots of this type of game logic by the time it ships, it would be nice if we kept all this game specific hackery away from our nice clean game engine. Putting it into script files separate from the engine code makes the division nice and clear.
  • If you use a simple language, someone who’s not a programmer could write the scripts. This can save valuable programming time, and give the game designers greater control.
  • The scripting languages can either be interpreted at run time, or recompiled without the game engine stopping. This means that you could run the game once, and then repeatedly iterate on the scripts without having to restart the game. This can give a big saving on iteration time, compared with stopping the game, recompiling, and re-running.
  • As open source scripting languages have already been developed and used on many other products and platforms, you can very quickly integrate a feature rich scripting language into your game, without having to build and debug your own.
  • Scripting languages give you a bunch of basic features like variables, math functions, and string handling functions. These might sound like trivial features, but a common alternative to scripting languages struggles to replace these pieces of functionality.

Well that sounds great! You’d be crazy not to use them :)
Next time I’ll go through some of the down sides of using a scripting language.

I'm back!

Sorry for the infrequent posts over the last couple of months. I got married, my folks were in town for several weeks, and generally there was lots of stuff going on...

Now things have calmed down a bit, and I'm hoping to make more regular posts.

Mark. 

Monday, January 01, 2007

How to Pick a Games Console

So which console is the one to get? Xbox 360, PS3 or Wii?

Someone (I can’t remember who) once gave me the following simple piece of advice about how to pick which console to buy.

Work out which games you really want to play, and base your choice on that.

You inevitably end up wanting all consoles for different games, but if you think of a good number of games, you’ll hopefully start to see a pattern.