---------------------------
Short history of Rival
---------------------------

I started writing Rival in the early 1990s and stopped working on it in 1996.  I did make a few tweaks up until about 2001 when I stopped work on it altogether and concentrated on building a correspondence chess site instead (http://www.redhotpawn.com).

I was inspired to dust off the code again in 2006 as I wanted to make it compatible with the UCI protocol so that I could test its strength against other engines.

I think the code is beyond salvation.  I have a severe case of code-envy when I look at the quality of the source for other engines available for download and compare it to my own, but without shame the source code for the original DOS and Windows GUI-based versions is available at the Rival download site at http://www.redhotpawn.com/rival

I guess I'll make the source for the pure UCI version available also at some point, but it is still bleeding from being ripped away from the GUI and will need a few band aids to make it halfway presentable.

---------------------------
Some facts about the engine
---------------------------

I started writing Rival before I was aware of the concept of bitboards, and as such, the internal data structures are array-based.

Rival is written in C++ and uses the standard full-width alpha-beta algorithm.

It uses Verified Null Move Pruning with a reduction of three.  Prior to starting work on the UCI version Rival was using regular Null Move Pruning with a reduction of two, and then I came across a paper here http://www.cs.biu.ac.il/~davoudo/pubs/vrfd_null.html and added the idea to the code to see what would happen and early indications were good (it certainly didn't seem to do any damage anyway) so I have left it in.

Rival uses check, pawn push and recapture extensions.

The old version of Rival was using Fail High Reductions but I have removed these from the UCI version as every time I analysed a 'blunder', I would invariably find FHR looking guilty in the corner.  I have no doubt that FHR need to be reintroduced but I need to do a bit of experimenting first. 

There is a null-move quiescence search which considers only captures and advancing pawns.

The evaluation function is really awful, which wouldn't be so bad if it weren't for the fact that it is also quite bloated and slow.  I sometimes think it does more harm than good.

If only there were more hours in each day to play with the code.

----------
Change Log
----------

1.18
----
- More tweaks to evaluation function.  Removed null move reduction changes added in 1.12.

1.17
----
- Tweaked pawn structure evaluation

1.15
----
- Improved move ordering selection in Quiesce


1.15
----
- Fixed bug which sometimes caused a crash when a draw by repetition was found

1.14.2
------
- Removed the need to have the Microsoft .NET framework installed to run Rival.

1.14
----
- Changes to the evaluation function particularly around king safety and pawn structure.

1.12
----
- Increased null move search reduction depth by one ply for each ply greater than DepthRemaining = 5.  Seemed a suicidal thing to do, but it is recognisably stronger than Rival 1.11 which uses R=3 over the whole tree.  Don't know why.
- Under regular time controls the program will now use more time that originally intended if it suddenly feels unsatisfied with its move choice.
- Corrected problem when engine was asked to search to a fixed depth.

1.11
----
Added a couple of seconds breathing space for time controls to try to stop Rival losing on time due to over-agressive time usage.

1.10
----
Fixed a bug introduced in an earlier version that caused Rival not to be able to recognise draws by repetition.
