Overloaded and still bit shifting

Ugh, I’m freaking tired. Started the day off computing what changes would be needed for setting up nmake based builds of Stargella, and everything has been on a snow ball since then.

I spent a considerable amount of time cursing at the MSDN Library over some very shotty docs, and realising that despite the overall quality of MSVC, the actual build tools behind it, has to amount to the stupidest ones I’ve ever seen. Although to be fair, the very first C compiler probably was worse, but this isn’t the ’70s :-P.

The depreciation of Code::Blocks for building things, and switching to appropriate make systems should mate more smoothly to my work flow. It also pisses me off that after all these years, the best tools for the job haven’t improved much. Unlike the typical morons^H^H^H^H^H^Hprogrammers I’ve had to suffer, I also know how to cook up a build set that shouldn’t be an almighty pain in the neck, just to use on another computer then my own work station. Applying basics of computer science to software construction, many hours; having to use tools that quadruple your work load, priceless!

As soon as I battle test one last makefile for MS’s nmake, all should be ready for committing to the repo. Then I can worry about the next goal, a proper merge of the common and system modules into a central core, shuffling the Windows builds to using DLLs (to match the unix builds), and integrate PCC into the unix build stack. (For ease of compiling dependencies, only MSVC is supported on Windows: MinGW users are on their own).

During the course of the day, I’ve also done plenty of the server admin loop, and have serviced more interupts today, then my processor sees in a week of abuse.

and all while carrying on several conversations, hahaa!

Got to enjoy one of my favourite films, Planes, Trains, & Automobiles.  In it’s own way, it’s an extremely well done film. Critically, what can anyone say, but it’s an awfully small world with a lot of ground to cross. Sense of humour required :-P.

Combine the tightest prick this side of Chicago with the worlds most annoying shower curtain salesman, and the inevitable twists of fate, and you’ve got the holiday trip home from hell. Much of the things that go wrong for Neal Page and Del Griffith, you could only choose to laugh at or cry about, if they ever happened to you, which they finally break down laughing on the “Highway”, once things finally go up in flames. It’s just something you’ve gotta sit through and watch to enjoy, while being thankful you’re not these two poor schleppen.

For how little it’s been on air over the past decade, I’ve been very happy to see it on often this past year. The movie also illustrate one of the few things, I actually like about English:

Car Rental Agent: [cheerfully] Welcome to Marathon, may I help you?

Neal: Yes. 

Car Rental Agent: How may I help you? 

Neal: You can start by wiping that fucking dumb-ass smile off your rosey, fucking, cheeks! Then you can give me a fucking automobile: a fucking Datsun, a fucking Toyota, a fucking Mustang, a fucking Buick! Four fucking wheels and a seat! 

Car Rental Agent: I really don’t care for the way you’re speaking to me. 

Neal: And I really don’t care for the way your company left me in the middle of fucking nowhere with fucking keys to a fucking car that isn’t fucking there. And I really didn’t care to fucking walk down a fucking highway and across a fucking runway to get back here to have you smile in my fucking face. I want a fucking car RIGHT FUCKING NOW!

Car Rental Agent: May I see your rental agreement? 

Neal: I threw it away. 

Car Rental Agent: Oh boy. 

Neal: Oh boy, what? 

Car Rental Agent: You’re fucked!

You can stream together arbitrary amounts of profanity, until you finally calm down lol.

Gimped from the start, but still an [SAS] man

From Game Scores Volume I

Annoyingly gimped in the first 15 seconds of the game, yet somehow managing to limp through one of the largest RvS missions, and doing it faster then I’ve seen some 4 man elements do it too, lol. Over the years, I’ve actually seen people take over 20 minutes to do that map, even when in a ‘hustle’.
I was supposed to be training Bajorq a bit on RvS, but ubi interfered, so I guess I got all the practice time :-S.

Well here I sit, working out my plans for the weekend. After sorting a few things on the spot, and spending some time on what I’ll just call a spurt of stuff to hammer out, so I doubt tonight will be highly productive. It’s the little bit of rest I get before I have to get cracking away on stuff in the morning.

Besides digging into a few thousand pages worth of book, in the chopping block includes:

  • Compile and test X.Org 7.5 on Dixie.
  • Finish my review of PC-BSD 8.
  • Complete the new auxiliary “Snipers” path on my Private Airport (kai) map.
  • A few SAS related details I won’t mention here
  • Get the plots sorted for the next 3 live ops (;)

Also, there’s something I have been meaning to do for awhile, refactoring the common and system modules of Stargella. The idea I’m thinking of, is merging them into a singluar “core”,  and numerous other related changes. Mostly in relation to compiler support and hooking in the render module. Two points of research, being to depreciate the FreeBSD/GCC builds with Code::Blocks in favour of a recursive GNU Make, and perhaps also NMake for Microsoft’s compiler. I would also like to experiment with supporting the Portable C Compiler (pcc), which entails either system modifications to FreeBSDs header files, or some redesign work on the games code.

I have multiple compilers available to me, several versions of GNU, the legendary PCC and Watcom compilers, and the express edition of MS Visual C++ 9.0. The only supported compilers for my project, are GCC and MSVC, under unix and windows based systems respectively. When ever possible things should be usable with most (reasonably) standards compliant C compilers. Not that Microsoft’s compiler is one. The main reason I don’t do mingw or watcom builds under Windows, is it’s just easier to go a strict MSVC route, when it comes to handling the dependencies. If it wasn’t for that, I would actually go as far as supporting as many compilers as possible.

One thing that really pisses me off, is even after 40 years or so, stitching together makefiles by hand is still one of the best ways to build stuff o/

Thoughts of ‘home’

Now this old article from Joel Spolsky makes me think of what it’s like to be here, *and* trying to get work done. Managing computer work flow is simple, at best, just tell everyone to go to hell or sign off the IM. After so many years of being on the Internet, I can usually juggle multiple tabs without any real loss to getting stuff done. Having to get up and respond to an interrupt, and usually being interrupted twice more on the way back to my console on the other hand, is something that occurs so frequently I’ve almost a spider sense about it…

If I had a penny for every time I’ve been shafted that way, for lack of being able to escape to a private bunker, I would have enough cash to pay off the national debt!

Experience shows me one fact: I am most productive when I’m camped in front of a laptop, all is quiet in the world, NO interrupts, no morons to wait on hand and foot, nada, not even a music stream. Oh, that and realising the clocks changed from PM to AM, and I’m still coding smoothly xD.

I’ve nether yet fallen off the earth, or finally laid down and died; I’ve just been busier then a Japanese beaver doing over time.

After catching the opening segment three or four times, I’ve finally gotten to watch a classic western. It has about as much to do with historical fact, as my big toe has with rocket propulsion, but never the less it’s a good portrayal.

In a cavern, in a canyon,
Excavating for a mine
Dwelt a miner forty niner,
And his daughter Clementine.

Oh my darling, Oh my darling,
Oh my darling, Clementine,
You are lost and gone forever,
Dreadful sorry, Clementine.

Light she was and like a fairy,
And her shoes were number nine,
Herring boxes, without topses,
Sandals were for Clementine.

Drove she ducklings to the water
Ev’ry morning just at nine,
Stubbed her toe against a splinter,
Fell into the foaming brine.

Ruby lips above the water,
Blowing bubbles, soft and fine,
But, alas, I was no swimmer,
So I lost my Clementine.

In a corner of the churchyard,
Where the myrtle boughs entwine,
Grow the roses and the posies,
Fertilized by Clementine.

Then the miner, forty-niner,
Soon began to peak and pine,
Thought he oughter join his daughter,
Now he’s with his Clementine.

In my dreams she still doth haunt me,
Robed in garments soaked in brine;
How in life I used to hug her,
Now she’s dead, and I draw the line.

Like wise followed up with Gunfight at the O.K. Corral and Crimson Tide.

A technical and pseudo psychological peek into Raven Shields AI


In putting the last touches on Private Airport (kai), I’ve been spending some more time to study how the games Artificial Intelligence works, special thanks to [SAS]_Maj_WIZ for pointing out a more thorough list of developer diagnostics ;). Since this is the closest look I’ve taken at Rainbows AI in about 5 years, and an even closer study of Terrorist and Hostage behaviour, I think it’s only fair to make a journal entry about it.

Here is a summery of my findings, and annotations about theories I’ve maintained for years:

The laser eyebrow problem

From the standing position, the source of each pawns aim is directly behind the skull, roughly where the head would be if the pawns stood erectly (like a tango). The point of aim, passes directly though eye level. When crouched the point is roughly near to behind the collar bone, and passes through the lower nasal cavity. In prone, it is much the same.

In real life (and any decent shooting game), that aim point should be chained to the weapon in the players hands.

How Tangos Fire Out Their Ass

Experiments with ShowFOV and GunDirection, demonstrate that there is no real connection between pawn animations, where the AI is looking, and where the AI is actually aiming; or as I have been saying for years, What You See Is Not Always What You Get. The most humerus moment in my testing, occurred with the Rear Guard “Facing” the rear but covering the elements front. My research shows that even if Rainbow is aiming at the target, they fail to engage terrorists outside their point of view. I.e. in the case of that rear guard, if a tango had walked up behind the element: it would’ve taken a moment for his aim point to realign with his field of view, resulting in the death of 2/3 the Rainbow AI element!

In short, this means that the AI walks around much like a Tank with an independent turret, only the artificial intelligence is riding in the drivers seat, not the gunners. Coincidentally, this is why the game has no real concept of muzzle clearance (as I have also been saying for years).

This may explain some of the more rolling on the floor laughing moments that often occur, when a “How close can you go” opportunity crops up in game. To prove a point, I cornered a tango in a corner and had him empty his magazine into me. Side stepping away and deactivating GOD mode, he was able to fire several rounds point blank into my pawn, before his aim point rotated to my new position – I died once the aim point got to me, not when the animations showed him shooting me.

Also it seems that hostages always seem to aim directly at Rainbow, but luckily the terrorist AI doesn’t notice that (or they would always see us comming).

So far, these tests satisfactory seem to prove that my ~6 years old hypothesis, about the “Tango firing out of his arse” problem being is indeed codified into Raven Shield by design. Between network latency, the (usual) use of unreliable UDP communication methods for multiplayer game play, and the systems divergent means of rendering and applying these actions (seeing, aiming, firing, hitting), suggest that there is no way to solve the aforementioned (annoying) problem without fundamental changes to the way Raven Shield works. Since that is not viable, one can only look at working around the problem; even with more processing power then a Cray XT5 super computer, you also need a very high throughput network link between clients and server, likely to an extend that is unobtainable over the modern internet.

In laymen’s terms, this means no matter how good your computer hardware or internet connection is,  the computer will always be able to cheat you. Should that change, most likely it will be so far in the future, we will be dead by then.

On the upside, I do believe that why the game is like this, was probably done in order to give the player more ‘time’ to shoot first (yes, some tangos have very slow reaction times: this appears why). It also appears to explain many of the discrepancies between common online play, single player, and LAN parties. However it is also worth noting, that this may have instead occurred due to limitations of the Unreal Engine (2) or Raven Shields own design and implementation.

Interesting Note: Now that an illegal RvS 1.60 SDK is available on the internet, it may be possible for cheaters to develop a method to take advantage of these problems. Imagine walking up on some one in Adversarial because you think they are looking away, then they shoot you out their arse ;). Luckily the engine has some respectable counter messures to such becoming (more) common.

Looking at the AIs skills

One of the very few things, that I have ever been able to praise Rainbow Six 3: Raven Shield for, is that the Rainbow AI often “Appears” to be covering their sectors, even if they totally suck at room clearing. In fact, their room clearing behaviour suggests that either the AI engine is extremely limited, or the game was made by people who know as much about CQB as the average RvS player, that is: absolutely nothing.

Since there is no connection (see above) between where the character on screen is looking (seeing), and where they are aiming (pointing), this means What You See Is Really Not What You Get. Have you ever seen in Single Player, where Rainbow is looking straight at a tango and gets owned without a shot? This is why. It is also why we can do the same to tangos online.

Terrorist movement is closer to What You See Is What You Get, then Rainbows; IMHO the movement for Rainbow was done to ‘look’ more realistic then it actually is (or the AI programmer sucked even worse then everything thinks). They also seem to have a tendency to remain fixed on hostages with their aimpoint, even while walking around a fair distance away. Ever got first sight on a tango, shot him trice, only to curse at him “Magically” shooting the hostage with barely a twitch? Yeah baby… he had that gun pointed at the hostage, all the while he was looking into your eyes.

Every type of AI in the game, demonstrates very poor skills at getting around the maps. I remember when I first started learning about pathing in Unreal Engines, I couldn’t help but think, “We’re still living in a dark age”… and that’s all I will say on that lol.

Hostage behaviour, well, what can I say… what you see is exactly what you get: a stupid slug. On the upside, the terrorists do not show any signs of being aware to hostages; this is why for example, if a Rainbow goes down while escorting, and the hostage becomes a prisoner again, the terrorist may continue walking past. All the fancy stuff about the tangos shooting the hostage, is a mixture of the games rudimentary AI, and things that map designer has programmed.

Since I don’t believe in taking advantage of the map design, or exploiting things I shouldn’t know in real life about the missions, I will not make a closer study of that kind of stuff, nor will I tell others much about it. If you want to figure out how to take even that (ugly) edge over the game, you can go learn how RvS works for yourself. Beat it punk.

I just study the mechanics and psychology of the games AI, you know, the whole know your enemy thing. In actual ops with SAS, I tend to employ more knowledge of human psychological behaviour then how the game was designed. That is both by intention

A Random Bullet Test

A tango surrendered and I fired a shot into his head, the round should have impacted his hand (placed on his head). There was a blood puff and a bullet hole in the wall directly behind his head, however the tango survived. Weapon used was an M16A2 at approximately 350-450 unreal units.

This suggests that terrorists have no brains, since the angle means the bullet must have penetrated his skull, and his hand (I pray) being all that slowed the high velocity FMJ round down enough to prevent a kill. Suggesting that any hit box modifiers applied, were for a ‘hand’ (arm) shot rather then a head shot.

N.B. other tests I have done over the years suggest this kind of problem and the ballistics model used, is why sniper rifles may incur a two-shot requirement on tango kills, and the exaggerated effects of JHP/FMJ selection on SWAT 4.

Anyone still awake and scratching their heads?



All this is based on roughly 6+ years of playing the game, much more then trivial knowledge of such matters, and being a very, highly observant individual.

Oh Brother, Where Art Thou Noggin?

With the questions my brother has been asking me about his computer, and his “Plans” for rebuilding her into a higher end machine, I’m starting to wonder how he even got one built in the first place… what was it, in one ear and out the other? lol.

And I am the moron, who was barred from building his own computer !?

Marc Espie on portability

Marc Espie on portability: “
A short while ago, Marc Espie (espie@) wrote to the ports mailinglist with a short rant about autoconf. His mail gives good insights into the problems porters face when dealing with GNU software, especially those using autoconf.”

This actually describes one of the many reasons I despise working a lot of other ‘programmers’ in this world, many of whom exhibit even greater levels of brain injury then that post takes as examples.
In my not so humble opinion: GNU autotools is either a good idea gone horrible wrong (in practice), or a royal brain fuck that just got out of hand. Users who can use such tools properly, seem to be falling by attrition to younger developers, many of whom (in my experinces anyway) wouldn’t know portability if it strung them on the keester like sitting on a scorpion. The GNU build system can an extremely good tool chain to work with, or it can be your worst freaking nightmare; a lot of people just don’t seem to care any more. My policy has always been, to support what I use (BSD/Win), and trying to minimise the heartache of getting code built on another platform.
Although the GNU project is perhaps the largest distributor of infectious disease on the Internet, I blame the developer idiocy I see around me, on the youth and not on the software. Most “Old wizards” seem to actually know their tools…..

Mario: Treat your tools like a friend. Keep ’em by you. Never let ’em down, and they’re always at your side.

Luigi: Hey, Mario, how is it that for every situation that could possibly come up, you always got a saying about tools? 

Mario: I got ’em from Papa. 

Both: He got ’em from Grandpapa!