I Just Collided

So far I’ve managed to finish 4 “stories” (or features) for my new game. Stories are in the range of “moving & enemies that hunt you” and today I was supposed to start doing collisions. It appears that getting physics working is not as simple as I expected. The (quite) simple things that I need are: collisions with objects (so that player character won’t go through walls…), possibility to make headshots (and then cutting it off) and basic player movement.

They are pretty simple features if you think, but even getting collisions and basic player movement is giving me a headache. Ogre community has several different physics libs that are well supported… but even them have all sorts of tiny issues (at least that’s my “first impression”). I took some first steps to find a framework that handles them, but the guy I asked was offering bit too high price for me – so I’ll need to dig more.

I’m really surprised that getting this type of “basic stuff” requires so much time – but I suppose that’s natural when dealing with “graphics engine & additional libraries”, not a full featured game engine.

Sony Drops PlayStation 3 Development Kit Cost

Sony has made a price cut for the Playstation 3 Development kit.

Sony is also rolling out new software development features, debugging tools, and support for applications such as ProDG and its SN tool suite. The pirce cut will see the PlayStation 3 Reference Tool fall in cost to ¥950,000 in Japan, $10,250 in North America and €7,500 for European developers.

The price will keep hobbyists away, yet the price is very low for companies to get into Playstation 3 development. Microsoft is keeping their XNA development kit free (which is nice for indies) – although the AAA dev kit for Xbox still costs much more. It’s quite interesting to see how the developers reacts to this news.

Maybe indies won’t care… but bigger studios might be interested.

Spotted via GameSpot. See also the press release at GamesIndustry.

Update: I was referring to XNA when mentioning that Microsoft dev kit – now updated post

The Best Way to Learn New Stuff

If you really want to learn something, then the best way to do that is to start working on that something and also spend some time learning the theoretical part.

I remember reading something about object oriented programming some years ago, but that was only book knowledge. Reading books made me aware of such thing as “composition” or “inheritance”. But book knowledge really cannot beat practice – I never really used that knowledge anywhere, and wasn’t really learning.

This week I’ve read some more about inheritance and composition. I created some of the game’s first classes, and that’s where this stuff really goes to my mind. I’m not going to suggest that I’m a c++ expert after couple of days coding, but I have learned great deal about how classes should work and when composition can be useful. At least if I compare my current c++ knowledge to what it was one month ago, there’s a huge difference.

I read some c++ books, studied object oriented programming and now applied that knowledge in practice.

There’s a Japanese proverb that fits to this situation quite well.

Vision without action is a daydream. Action without vision is a nightmare.

Just reading books will mean no finished code. Not reading books (about best programming practises, design patterns, you name it) and simply trying to start from scratch would probably lead to a one big mess – at least for those who are new to the language. Combining theory and practice might yield the best results. And for at least in my case this seems to be working pretty well.

And Now To the Tricky Naming Conventions

I’ve been looking for some generally accepted way to name class member variables. This article might go bit technical, but I try to keep it as understandable as possible.

It’s quite amazing how many different ways people can define variables. Basically there are people who stick “a” to parameter prefix. There are people who use “m_speed” or “_speed” or “speed_” or “mSpeed” to define speed of some object in the game. There are also people who stick letters for constants, pointers (and various other stuff) in the prefix – but I won’t go there.

My attempt to find some “generally accepted” way (in c++/object oriented programming) was bit like jumping from a flying airplane without a parachute. In both cases it will lead to one big mess.

I have some pretty good naming systems (practical and revealing names playing key roles), but I wanted to ask you readers. What kind of naming conventions are you using (to define member variables and other) in your team?

How to Be a Stupid Producer And Waste Everybody’s Time

I’m sure you know many people who master the art of being stupid. Here’s one additional way to act like an idiot. This article is based on an almost true story.

I heard about this guy who always said that everybody should schedule a meeting with him, not use email to contact him. Perhaps his inbox was so full of emails that he couldn’t find time to reply to them. Anyway, the bottom line was: he always wanted people to find time for a meeting instead of asking stuff via email.

Well, I’m sure in some situations that might work well if emails require replying and re-replying all the time, instead of just taking time to sit down and have conversation where plans are agreed.

But this was not the case here.

In fact, the guy was so busy that he was always in some meetings. People ended up emailing him to agree about a meeting time (but couldn’t ask their questions via email since the guy insisted that meeting time would need to be agreed), and then he would reply back saying “that’s not good for me, how about this time?”. Then the other person got his reply and saw that the suggested time was bad, and sent another suggestion. This continued for some time until it was seen that there were good time available after 2 weeks. Too bad the situation needed to be resolved this week, so that kind of didn’t work.

Also, the other person only wanted to know “if the producer has faxed the signed copy of contract” (or something like that) so that the other guy could continue his work. The producer didn’t want to get bothered via email (nor phone I suppose – or at least he was being so busy that he couldn’t answer anyway), but insisted of scheduling a meeting (yet he agreed to schedule meetings via email!)

Perhaps he needs a secretary or something, but “scheduling a face-to-face meeting” (via email) instead of “dealing with some issues via email” won’t save his time. And I really don’t know why he keeps doing this.

Want to Become a Christmas Marketing Agent? Get Some $$$

My friend Jake is after an agent for his Holiday Bonus game. Here’s a quick quote from his announcement:

Therefore, I’m looking for someone to be my Agent (not publisher as I want to retain the contracts and rights) and contact lots of portals for me to see if they will accept my game. I’m offering 10% of all royalties received from any new portals that accept my game (PC and Mac – except for Apple.com as I’ll contact them myself) for an 18 month time period.

So far the game has sold 850+ copies, and easily sells 20+ copies a month, but HUNDREDS sell at Christmas time when the portals promote it. So far the royalties have exceeded $4000 and a good relaunch on multiple portals could easily beat that this year. The download to sales conversion rate on BFG is over 1% for example – that’s pretty good!

Basically he needs somebody who would contact portals and handle deals with them. He has explained how the system goes at the game producer forums – job board.

If you want to take the job, then act quickly – since Christmas is just behind the corner…

Update: Jake just informed me that he has now got the agent.

How Good Shoes Can Boost Your Productivity

I’m ill today. I have a horrible flu: I’m sneezing all the time, I feel bit faint and have some sort of fewer. My brain doesn’t work at the moment (at least it feels that way): I cannot think any complex issues. I have spent some hours staring my game code today, but couldn’t really put my mind into it.

Basically cold and productivity doesn’t go together. When you are ill, you simply are not 100% effective.

And that’s where the good shoes come to play.

The reason I’m ill today is (most likely) because I wore wet, leaky shoes the last weekend while I was driving a long distance. In addition it was close to zero celcius degrees outside. My feet were wet, and I managed to get myself a cold.

Thanks to those leaky shoes I’m now in such condition that my productivity isn’t at the level where it should be.

Do yourself a favor. Take care of your health.

Buy good shoes.

Online Documentation Is Great Unless…

…your internet connection happens to get cut off.

I experienced that today (luckily was taking day off – so it didn’t really matter). There were several hours long maintenance work being done by our internet service provider, and I couldn’t access anywhere. My game development relies heavily on the Ogre3D online documentation, Wiki and their community forums.

If the Internet connection is not available, then the docs won’t be available.

What are you doing to deal with this kind of issue?

Incremental Development – How It’s Working For Me

Russell – one of the moderators – posed a question in the thread about “how incremental development is working for me”. The first day has been fine (great if you ask me, but I try to hold my enthusiasm ;) and I’ve managed to do what I estimated for today (and already learned great deal about how Ogre/C++ handles classes and stuff).

Perhaps this short video clip (2MB, MPG format) gives you a picture what’s going on.

I managed to get a dummy player character (casting stencil shadows) to move (good old ASWD) and rotate (nicely with mouse). Did couple of additional hours today (but won’t be working with the game for two days) so it’s a nice start.

Incremental Development

I’m taking the weekend off, but here’s a scheduled post about the game production approach I’m taking. I’m taking totally different way of doing the new game. Instead of having a big plans, and long list of to-do items I’m going to do incremental development. My first step is to get one player on the “level” (level here meaning “floor with Ogre sample texture”) – and make it possible for the player to eliminate the enemies.

After that I shall make the player move. After that I might add bullets. After that, perhaps a barrel in the level. One by one. I’m not going to “add 19 different enemies, 85 different guns, and 8 different particle effects” in the next release. I’m using some elements from “extreme game production” (or “extreme programming”) approach. I have many feature ideas, but now I’m going to focus on incremental development – and in such manner that the game can is in playable shape from the very beginning.

I’m approaching the game production by doing incremental development – adding small features one by one, and learning as I go.

I have checked out competition in the field and have rough design for the game (and ideas how my game will be different), but I want to hear player feedback from the very beginning – and make the game playable right from the beginning. I’m not going to “spend 6 months doing the engine first”. My goal is to get from “yearly scheduling” to “weekly” (and daily!) scheduling. I will look in the future (that’s what the ideas are for), but I won’t spend two weeks doing “groundwork for framework to get things possible in the future”. I take an approach where I will build the framework as I go. I’m simply picking the stuff that I need right now, and worry about how to get other stuff (for example, sounds or particles) when it’s time for that.