MHQuake 2005-28-04 Release
==========================

No bonuses this time, just straight up engine and source.  I'm not sure if this is a sufficient leap forward to warrant a release, but I haven't released in a good while so here it is anyway.  Consider it an interim maintenance release.  There's a whole load of stuff on the horizon that just isn't ready yet, so please be patient for it.

I feel strange releasing this right now, because I'm not really too happy with it.  A lot of the really cool stuff I had written didn't quite work out right, and time was getting tight, so I just rounded up what was working and put together a release build.  See my Brief Rant below for more info on this.  Nothing active in here, however, should be broken.

So load your Nailgun, turn on Word Wrap, and get that little hamster that lives in your GPU spinning in his wheel.

New stuff in this release includes:

Detail textures
---------------
Based on my Q2 code, these are optional and configured from the Video menu.  I haven't multitextured them cos I use Vertex Arrays for most of my drawing these days - doing so actually runs *slower*!!!

Emboss mapping
--------------
This is basically the tutorial I posted to quakesrc.org with a few (very) minor tweaks.  It's a much more subtle effect.  I confess that the filter given in that tutorial was really only intended to show off the effect, and not seriously meant to be used.  This makes maps load a bit more slowly.  Embossing is really only switched on for the regular world texes - any external texes, fullbrights, skins, etc don't have it.

Fixed TGA Flipping
------------------
With the obligatory dolphin pun (*groan* - make him stop!)  Cheers to shadow for the heads up.

Added Direct X 8.1 SDK Files
----------------------------
The main ones I use are now added to the release.  I've compiled without any references to SDK paths in my compiler options, and it works perfectly fine.  I've deliberately used the 8.1 files rather than 9.0c because 8.1 is actually significantly faster!

Added PNG Loading
-----------------
Easy peasy.  I've made PNG the default texture type - if it can't find one, it looks for TGA/BMP/JPG then PCX, if it can't find any of these it just uses the native Quake texture.

Configurable Gun Z
------------------
Ranger wanted it, and it took all of half a minute to do.

Improved Cvar Management
------------------------
Setting Cvars is a lot more efficient - I've added the ability to set them directly rather than having to go searching for a string.  All Cvar setting (with 1 or 2 exceptions) now goes through this system.

Improved Texture Management
---------------------------
Texture management is now fully linked-list based rather than the old static array.  Caps on the number of textures have been removed.

Texture Checksumming
--------------------
I've replaced the old CRC with MD5, cos some textures were actually giving matching CRCs despite being very different.  This may well be contributing to the slow load times - maybe I'll use MD5 as a fallback only if other parameters match...

Ripped out 3/4 TMU Render Paths
-------------------------------
These were not nice.  They actually ran slower (for me) than doing blends over the top, and then the TMUs got horribly confused, resulting in weirdness like what used to happen in the start map.  Multitextured Vertex Arrays are a real bee-hatch to code!  I *could* put the work in, but it would likely result in marginal gain for a lot of effort, and quite frankly, I'd rather have a solid and stable engine.

Fixed Z-Fighting
----------------
This was really noticable on the platform in e1m1 leading to the Quad secret (you know, the bit where you have to shoot the planet).  It's fixed now.

Shadows
-------
MHQuake finally gets shadows.  They're fairly basic right now, using Mr G's stencil tutorial (cheers!) with the usual MH tweaks and stuff.  Very fast though - I hit on an idea for cutting down on a whole load of the work needed to draw them.  These are gonna get a lot more work done on them in time to come.

Vertex Lighting Option
----------------------
It's back and this time it's not going away until it's kicked total butt.  This was more of an interesting thing to write than really seriously intended to be used.  I was messing around one day and suddenly realised a really really easy way of doing this that involved minimal code additions and was way better than my previous version of Vertex Light (3??? years ago).

Improved Particles
------------------
Gun barrels now smoke like chimneys!  Nice.  Also, so many people hated the rocket trail sparks so much that I've finally gotten round to removing them and writing a decent effect.  I'm glad too, they were right.  Finally, blood was never good in this version of the engine, so I redid it a little.

Other Stuff
-----------
There's also some basic ground work done on Anisotropic Filtering (you can always set this from your cards control panel if you really want it anyway).  Some basic decal code ripped from Tenebrae that's not integrated (to be honest, if I can't draw them on brush models as well as on the world, I'm not interested.)  And a few more things that totally escape me.  Oh, the perils of writing readmes in a last minute rush...


A Brief Rant On The Code Being An Absolute Mess
===============================================
I went through a lot of experimental stuff in dragging this engine up to it's current state.  MHQuake is now at the stage where I feel that I've pushed the basic limitations of the Quake data formats as far as I can go with them.  Unless I get sudden inspiration from anywhere, anything else would be just tweaking and fiddling.  That doesn't mean I'm leaving off though.  My Direct 3D/.NET experiments have been very useful because they gave me an alternate way of looking at things.  I don't know if I'll ever consider that code to be fit for release, but I have learned a lot from building it, and am now ready to go forward with trying out some totally different ways of doing things.

I've left a lot of my experimental code in this release.  Someone may find it useful, and might even be able to get it working properly.  For the most part, it's either commented out or lurking in functions that aren't called.  Have a search for SurfContainsPoint, OpenGL_1_5 and CHAIN_GUNSHOT to see some of it.


Bugs/etc
========

Should be very few now.  There will be some stuff you may not like, but hey!  It's *my* engine <grin>.  And guess what?  It likely won't function as a server, and possibly may have trouble connecting to other servers.  This is something I desperately want to get working properly.  I'd also like to make it able to connect to QW servers, but am not sure what's involved.

There's some work to be done on standards adherence too.  Particularly when it comes to loading external texes - there seems to be loads of places to load them from, and I want to cover them all.  Darkplaces, TomazQuake, QMB and now JoeQuake seem to be the primary standards.

I'm also not entirely sure about the status of the VC++ 6 project.  My VC++ 6 installation is badly mangled, so I need to reinstall and get back to this from the very start.  VS .NET 2003 compiles just fine.


Benchmarks
==========

I've all but given up on benchmarks.  They serve a purpose in that they let me see if any new feature has made the engine run slower, but your PC will of course be different to mine, so they'll mean nothing to you.

For the record, I'm up from 225 FPS in the last release to 240.  Turning detail textures on drops it to about 170 to 175.  The 3 TMU version of detail textures I had written (and removed, yet again) ran at about 160.


