RSS My Blogs  (0 - 10 of 18)

If you already programmed in COM, feel free to skip the article. Yep. Nothing interesting for you here.

If you're a coder that has some experience with previous game engines but you're new to Unity, then read on.

So. Two programs and a technology for software development. And a picture:COM object and interfaces

That's a COM object. Our target is "Outer Object". It imlements several interfaces, the circles labeled A, B ...

In terms of inheritance, you could do that by deriving the class describing. Now of course, there are some problems when all them interface implement a function with the same signature, say void Update(): which Update() should be called in your case? The one from A? Or B? Or C? I personally don't like C, as a vitamin at least it is sour.

This is where COM ... comes in place. In COM, if you want to implement an interface on an object, you'll get a new instance of a class. That means that somehow, in your objects, you'll have at least three class instances, one that implements the functionality of A, one for B, well, you get the point.

Why the frowned face? Oh, stupid me, I forgot something: from now on, your object is no longer an instance of one class. No. That's gone. Think of it as a collection of classes, each working together to provide functionality for one object.

Now I can hear you saying: "But what if I need to use functionality from Interface A in the implementation of Interface B? How can I reach one functionality from the other?"

In all technologies that implement an object modeling mechanism (yep, that's the OM from COM), there will always be a mechanism to go from one interface to the other. In COM, it is called "QueryInterface". In Unity, you GetComponent.

Now it makes sense. This is why the First Person Controller prefab in Unity looks like this:

Unity's fps controller



You'll see that I underlined two components (get used to the term if you plan to use Unity). If you double click them, you'll end up looking at some C# code. Each of the scripts describe a class, each having a Start() and Update() function. Several components, working to define one object.
And here's another thing about COM: you can re-use components:

camera



The Mouse Look script is the shared component here.

That's it. Don't say I didn't warn you, if you know COM this was not a surprise.

Got a message from BiosKiller, the admin at the Russian Bears forum. He'll be bringing his fellow players on the AvP2 TF server they run this Sunday, at about 21:00 GMT. This is one day and one hour later than our usual testing schedule.

Last time we had a 10 people server, it felt great. I say let's join the game and give the bears a serious run for their flag ;) Worst case scenario we'll just have a great time.

If this is your first time playing AvP2 TF in a long time, then make sure you have the 1.1.2 version (released on 2010-02-12):

Download AvP2 TF version 1.1.2 installer

This is especially valid when the code you're writting will be used/extended by others.Here's what you should do if your plan is to piss off your co-workers:

  • Do not document parameter values. That will definitely cause grief among other developers. Imagine them debugging through the code, trying to figure out what did they do wrong. I mean when invoking one of your methods, one thing that the will do when that method fails is to ask themselves if, perhaps, the parameters they used on your method were wrong. Imagine their face turning red, then blue, then green, sweeping through all the colors of the rainbow when finding that if , or switch-case, or whatever hardcoded construct you placed there. YAY!
  • Hardcode naming rules for input/output file names. That's another good one. Place that string comparison/splitting/parsing for file names in the most hidden spot in the CPP code. Then, when the work mate uses your function, they'll never figure out why their parameter/config/input file is not loaded.
  • Do not write anything resembling documentation in the header files. Heck, if possible, also remove the name of the parameters. I mean if it doesn't make any use for the compiler, why bother?
  • Write multiple statements in one line. This comes really handy, and will allow you to see the entire function in one screen. Don't bother about making it easy for debugging, your code is so good there will be no debugging. So, remember, always do this:

if(condition) return; // this is good!

instead of:

if(condition) // this is bad!
return;

And these steps will make you one of the most popular developers in your company!

Sure, you can take the easy answer: older games had a better game play. But it's more complicated than this. Developers want to make games that keep the player interested. The more interest, the longer the shelf life, thus more money comming in from selling the game. Keeping that in mind, here comes reason 1:

1) Hardware
Back then, computers were very far from the computers today. The reolution of the display would usually be QVGA (320 x 240), reaching at most the full VGA resolution (640 x 480). As for special effects, bare in ming the resolutions mentioned above were used even before DirectX or OpenGL appear. So sorry, but no, no fancy graphics.
Now, in order to keep the players interested, developers choosed to add a lot of story to the games back then. Basically, poor graphics (although that was easily masked by the novelty factor of computer games themselves) led to good stories.
The benefit of this is that it cultivated certain expectations from the people playing those games. And this leads to the second reason why old games are better:

2) People
And I mean the people asking this question. Yes, you.
Because you've been playing the 'old games' that 'are better' than the new ones, your own expectations from a game were molded by those early games you have played. This means that from each game you pick up, you expect a story from it. And let's face it, most games today don't tell stories anymore.

Further more, your first gamming experience is the most influential factor. You played the first UT, and of course, all the following (UT2k3, UT2k4, UT3) suck. You played the first Half Life game, and HL2 just didn't bring the same satisfaction. Or perhaps you played the first AvP game on PC and felt depressed by the cartoony and lack of atmosphere from Monolith's AvP2.
The list can go on and on. The point is that the very first games we played imprinted in us a set of expectations. Expectations that didn't change in time.

But games do. They have to. Game making is a billion dollar business. So any developer will always target the largest market. That usually translates into an age segment. An age segment you are no longer in.
And since the kids today saw their first game using at least DX9 rendering, you can bet their expectation is of super cool graphics.

And you can bet they'll say that UT3, Crysis and the Halo series are the best games ever.

As a team leader, don't ever, ever say stuff like:
"I think the explanations above are enough" or "I think that this task is now clear enough" or "This is a trivial task, it doesn't need any more explanations". Especially if the task mentioned is new for the unfortunate guy that get's to hear/read those words.

And you know why you shoud not say that? Well, here's how that can be interpreted by the person reading them:

  • I really don't want to spend more time explaining this
  • Although I'm saying the task is clear, I don't think I explained it well enough, and I just don't want tobe bothered for more details
  • My time is more important that yours, so I will not spend the extra time to make sure you really, REALLY know what you have to do

If you want to build a team, well, way to go there! Might as well tell the guy "You suck!". Or better, "I suck as a leader". You don't know if the person in front of you understood. And if you have a feeling that your explanations were vague (and trust me, you know when you're being vague) then tell the person: "I think this is not actually enough, I need more time to prepare a better requirement/functional spec/design document\". And even better, "If there are questions, feel free to contact me, I'll make some time to explain it". But never, ever shut off the communication channels to the people you lead. Because that's the effect of those first three sentences.

I hope we're clear on that ;)

Falling short

Herr_Alien Blog

Remember the game I posted the intro? You know, Codename: Outbreak. You may know it as 'Project Venom'. Well, Monday I failed. I couldn't rise up to my own and my friend's expectation. I fell short:


So I didn't fell short, I fell actually 12 meters down that bloody ladder. I think I almost made a hole in the floor because of the impact.And Moose_Head thought that was funny! Here are his words from the e-mails we exchanged after that ill-fated day:

I will encode one clip of some superb action for your viewing pleasure.

I have to tell you man, I have to try hard not to wake my dad with my laughter when I watch that clip. :D Oh man, I've got tears in my eyes right now, I mean really!

Cheers man, and thanks for cheering me up! :)


And another one:

I think what does it [make this funny] is three things:
1) It looks like you're doing a bomb, (you know the edge of swimming pool dive).
2) Your gun goes of when you miss. And
3) You state that it was "Not funny", which of course makes it even more funny! :D

Sorry man, I know it can't be that funny, but it just got me. :)

So there you go, if you ever want to illustrate a co-op tactical shoter being funny as hell, point them here.

Well, that's what Henley stated in one of the podcasts some time ago. Thing is, mod drama is the best ever drama, with one exception: when it hits you.

Well, it didn't hit me, but it did affect the AvP2 community.

Here are the facts:

  • a modder, (we'll call him Mr. Orange, in a Reservoir Dogs style) develops a mod for AvP2. It becomes popular and people adopt it. The mod also uses an online file to filter out some of the people that used to hack the game. Like a simpler version of punkbuster, but based on IPs.
  • among other changes, Mr. Orange added text (let's call it 'credits'), more like "this is my server, you must respect admin" and stuff like that.
  • a person who runs a game server and also utilizes this mod (let's call him Mr. White) decides to remove that text and replace it with a different message.
  • Mr. Orange utilizes the 'punkbuster' mechanism and 'locks' everybody out
  • from the initial 39 active servers, now only 6 remained online. The number is increasing steadily, as people configure the mod to disregard the 'punkbuster' mechanism, or even ditch Mr. Orange's mod entirely.

I understand to some extent Mr. Orange: somebody removed his 'credits' from his mod, and he's angry about it. I say to some extent because I am fully aware that when somebody downloads a mod, he can do whatever he chooses to do. Because of this I preffer to state in the readme that they are explicitly allowed to use the mod or any parts of it in their own mods. I save myself from disappintment this way.

But I'm straying. So, I do understand Mr. Orange to some extent. What I don't understand is why did he feel the need to take out all this frustration on the other members of the community. I mean ok, somebody stripped the 'credits' from the mod, talk to that guy. Sort it out. If he doesn't comply, then write a nasty article about him, find his home address and break one of his windows. But don't take it out on innocent people. We've seen how that can go: [insert any political/military rant here].

What Mr. Orange did is basically abuse the fact that his mod is widely used. But this abuse seems to be also the reason why the mod might also become the least used AvP2 mod. Because for what it is worth it, we're going to give Mr. Orange and his mod a run for their money.

Or should I say: "This is cpt. Wilson. Eberything is fine. Situation is under our control."

Pretty stupid, I know. But for a game released in 2001, I found "Codename: Outbreak" to be a very advanced game. Seriously.In single player, you have an AI unit escorting you everywhere you go. And I mean everywhere: this guy (I choose Joker to be my wingman) will climb ladders, follow you, go prone. Heck, you can even issue orders to him:

  • F5 - cover me
  • F6 - charge
  • F7 - hold ground
  • F8 - toggles hold fire and fire at will

But besides the AI, there was something in this game the GSC guys kept and used also in STALKER: an inventory system and a carrying weight limit. So you can't carry thousands of bullets: you become just too heavy.

Still, there is something that was not ported to STALKER, and this is the reason I re-installed this old game: cooperative multiplayer. Yep, the very same word Henley had troubles with, the very same concept behind Irongrip: Warlord or L4D, but this time also having a story behind it.

So, yours trully (call me Prof for the time being :) ) will try to run a coop match with Moose_Head. I'm thinking also at setting some of the missions to take part during night time. Just to add a challenge :)

Don't ask me how I stumbled across this video file, I just did. After I saw it, I knew it I have to share it with you guys. This also proves that AvP2 was and yes, still is a good game. You can find it on youtube here, and as the youtube page mentions, it was uploaded sometimes in 2008. That is 7 years after the game was launched. But enough of me, let's hear it from lllstrikesmember2:

He's working his way through the first levels, and boy, he's having some fun! It triggered memories way back in 2001 when I got to play it for the first time.Ok, I didn't get scared at all the same moments he did, but man, I also got my heart pounding in several ocasions while playing this game.

So yes, AvP2 - rock on!

When you release a mod/game, you lose some of the control you once had on it. You can't even make bug fixes without properly advertising the bug fix, especialy if the fix will break the compatibility with the older versions of your game.This is a tough lesson. And a bad way to start an article. But I hope the next (true) story will shed some light.It all started with AvP2's new master server. Sierra closed the official master server for AvP2, so we decided to make a server of our own, and thus to give the game longer legs. We ended up interfacing the game client and the game server to a nifty DLL. The game information structure passed between the DLL and the game client has the game has the game mode encoded as a number: 0 - Single Player, 1 - DM, 2 - Team DM and so on. Plain AvP2 has a total of 7 game modes, mapped from 0 to 6. All things good so far.The player however doesn't see these numbers. When searching for an internet games, it sees "DM", or "Team DM", or "Evac". You get the picture:


The way we did that is by using an array of strings. At position 1 we had "DM", at position 2 we had "Team DM" and so on. So when the data structure from the DLL we made would come in, having m_nGameType set to 1, we would display m_pGameDesc[m_nGameType], which would be "DM". Again, all good and well.But we don't make any checks to see if m_nGameType is between 0 and 6. That is bad. So far, the master server had in it's data base only plain AvP2 servers, with game types from the normal 7 game types. So the input will always be between 0 and 6, I told myself. No need to make a check here. Again, this is bad, and here's why:AvP2 Fortress has new game modes. CTF, One Flag CTF, Assault and War were translated to numbers from 7 to 10. Here's what happened Saturday: (1) I fire up the Fortress server, for beta testing purpses. (2) A guy opens AvP2 and searches for internet games. When receiving the game information, the game type would be higher than 6. This means addressing memory outside the array. In plain gamer language "ZOMG, the game crashed!".This is an expensive mistake to fix. It will require a new client shell. The download will be fairly small (under 1MB), but it will not be compatible with the previous versions of the mod. So, the proper way to do it is by advertising the patch in advance. Set up a delivery date ahead enough, so that most members of the community would be aware of it. Basically do everything you can to make the transition easier.Meanwhile, I have to restrict myself from starting Fortress servers. As I said before, now that the server is up, I can't start to make experiments like that. This is not a toy anymore, this is the tool people use to play online. And I have no right to hinder them in doing that.