Detect self-patching in pfPatcher
Don't lazy-load D3D9.dll

We already link against it, so that's just a waste of time. Also, cleanup
some unneeded ddraw includes. Remember that in Direct3D9, all devices can
render in windowed mode.
We don't support 3dfx cards...

Come on, man... They made some good cards, but they went out of business
in 1999! Ain't nobody got time fo' dat.
We only support DirectX 9...

If you have less than 11MB VRAM or need to use the ref implementation,
then you are using a dinosaur and have no business even attempting to play
this game.
Wow, those cards are old...

Remove detection for cards that are don't support at LEAST DirectX 8.
There's no way they would even be able to get past Direct3DCreate9, so we
shouldn't need to worry about them... I hope.
Lots of cleanups to hsG3DeviceDelector
Get rid of obsolete readers/writes for device info
Remove some unused PS version stuff
Remove some obviously obsolete caps
Better management of TnLEnums and Direct3D9 object

Two of the big nasties, according to profiling, are the TnL enum and
creation of Direct3D objects. It turned out we were doing these things
several times (3 and 4 respectively) during the init process. So, now we
have an hsGDirect3D namespace and some smart pointers to manage them!
Merge pull request #354 from Hoikas/init-cleanup

Graphics Init Cleanup
Rewrite plUruLauncher

Welcome to the glorious new regime.
Client Image Flag

This argument works just like it does in Guild Wars. It checks all the
files (using Cyan's evil "Internal" and "External" manifests) for changes.
Expect this to take a decent amount of time.
Game Repair Mode

This adds a license-stopgap "feature" ... You can now update only the game
data by using the -Repair argument on the launcher. You'll need to specify
a stripped down MOULa server.ini with the GateKeeperSrv keys/host.
Redist Updating

This is the crowning feature: the whole point of this exercise. You can
now update redists from the client launcher itself. To activate this
functionality, you will need to flag the file 0x10 in the manifest. I
recommend listing your redists in the patcher manifests.
Hack around hidden/dead MessageBoxes :(

So, it appears that once our dialog is created, the DialogBox windowproc
is nuked. So, to hack around this, any errors that occur while it is open
are cached and reported out after we close everything down. It sucks, but
it works. I blame Microsoft.
Merge pull request #353 from Hoikas/new-launcher

Unified Patcher (Part 2: Nuke eap)
Send the right RefMsg, please...

So this is interesting. If you disable Planar Reflections and visit an age with a DCM, you will crash after a few minutes. This is because plDynamicCamMap is sending the wrong plRefMsg to the plLayer. This does nothing (aside from waste time), so we keep sending the ref again and again and again and again until we get some weird heap corruption and KABLOOOOOOOOOOOEY!
Fix several format errors detected via vararg-template voodoo
Merge pull request #368 from zrax/format_errors

Fix several C-style string format parameter errors detected via vararg-template voodoo