2014-06-17
----------

### Major ###
*	Everything is released under the ISC license.

### Minor ###
*	All code related to growable C-strings (language files et c.)
	has been moved to a separate component called Gleipnir.

### Details ###
*	Compatibility with GNU Make (gmake) and BSD Make (pmake).
*	`DESTDIR`, `BINDIR` et c. are used according to convention.

### Bug fixes ###
*	`VERSION` is now `long` to avoid signed overflow.
*	Fixed a focus problem in X.

2014-03-15
----------
Fixed some real and false positives reported by Clang static analyzer.

2014-03-12
----------

### Major ###
*	The program has been split into these components:
	-	`core` is the base library (essentially unchanged).
	-	`aim` is the AI minimax library (essentially unchanged).
	-	`uicx` is the CLI / X interface (restructured but very
		similar).
*	The ruleset `path` argument has been replaced by `ui_theme`.
*	X interface:
	-	There is a console, allowing CLI commands in X.
	-	You can show possible moves of pieces by right-clicking.
	-	`ui_theme` is used instead of `path`.
*	CLI:
	-	There are more commands.
	-	The CLI always runs. X is started by a CLI command.
	-	Command file run by the CLI before reading `stdin`.
*	Localization is now done by (plain UTF-8 text) language files.
*	Several new rulesets by Damian Walker
	(`http://tafl.cyningstan.org.uk`).

### Minor ###
*	You can save, load and undo when a game has been lost.
*	You can change rulesets (as well as language and themes) while
	the program is running.

### Details ###
*	Ruleset file parsing is more lenient.
*	Multi-byte (UTF-8) string handling in X requires >= X11R5.
*	You no longer have to type in full paths for rulesets et c..
*	The manuals are written in markdown and then exported to roff.
*	`/etc/hnefataflrc` is no longer used.

### How to update your ruleset files ###
1.	Remove `path`.
2.	Optionally add `ui_theme` (see the manual). Existing themes:
	-	"20"
	-	"30"
	-	"40"
	-	"50"

2014-01-17
----------
*	`dbl_trap_squares` has been added for piece types, which is a
	bitmask of squares that can trigger double trap.

### How to update your ruleset files ###
*	Every piece which has `dbl_trap` *must* specify which squares
	can trigger double with `dbl_trap_squares`. The default value is
	0, which is acceptable iff `dbl_trap` is not enabled. If you
	want your rulesets to work like before, then the value of
	`dbl_tral_squares` should equal the value of `occupies` (but
	it's obviously not necessary for escaping pieces to have
	`dbl_trap_squares` indicate escape squares).

2014-01-11
----------
*	Piece and square types now have an optional `ui_bit` rule, which
	makes them look like another piece or square type in an
	interface.
*	Latrunculi ruleset based on Damian Walker's reconstruction.

### How to update an interface ###
*	The interface must call the function `ui_bit_square` or
	`ui_bit_piece` (in `ui.c`) to get the bit which is to be shown
	for any given piece or square bit (if possible).

2014-01-10
----------
*	Square types now have the rule `capt_sides_pieces`, which takes
	a bitmask parameter. The square `capt_sides` rule only applies
	to the pieces in the bitmask. (Suggestion by Damian Walker.)

### How to update your ruleset files ###
*	If you have any square type which overrides `capt_sides`, then
	that square type must now specify `capt_sides_pieces`. A square
	can not have `capt_sides` without `capt_sides_pieces`. This
	does not affect any previous official rulesets.

2014-01-04
----------

### Optimizations ###
*	The AI will determine if a game is lost due to the king being
	captured faster. (By Alexander Dolgunin.)
*	The AI will evaluate the board much faster if the ruleset file
	contains at most 1 piece with `escape` (which is the case in all
	normal Hnefatafl-like rulesets). (By Alexander Dolgunin.)

### Bug fixes ###
*	The computer player's hashing (`HT_AI_MINIMAX_HASH`) doesn't
	work like it should and sometimes causes a slowdown, so it is
	disabled by default and not recommended until it has been fixed.
*	Fixed a missing include. (By Alexander Dolgunin.)
*	Fixed a bug where you could load a saved game that is over (won
	or lost).

2014-01-01
----------
*	In case of weird graphical glitches, you can press "l" in XLib
	to repaint the whole window.
*	The program now exits properly when you close the window using
	a window manager's "close" button (`WM_DELETE_WINDOW`).

2013-12-30
----------
Fixed a possible bug.

2013-12-29
----------
Another AI optimization by Alexander Dolgunin has been implemented.

2013-12-26
----------
The AI is twice as fast thanks to an optimization by Alexander Dolgunin.

2013-12-21
----------
Due to the large amount of changes, this is an unstable version. If
there are no bugs, then it's a stable version. :)

### Major ###
*	Undo.
	-	CLI and XLib have the `u <number>` and `U` commands.
*	Save / load.
	-	CLI has the `w <file>` and `e <file>` commands.
	-	You can't load in XLib. Pressing `w` prints a save file
		to `stdout`.
	-	The `-e <file>` invocation parameter loads a saved game.

### Minor ###
*	In rulesets that don't involve escaping (such as petteia), the
	AI uses a slightly different position evaluation in order to not
	be completely worthless.
*	Rulesets now have two additional mandatory arguments:
	-	`id` -- used for saving and loading.
	-	`name` -- displayed to the player.
*	Setting the memory for hash table and collision lists is now
	done via invocation parameters. The old minimum allowed and
	default values are still the same.
	-	`-t` sets the hash table memory.
	-	`-c` sets the collision list memory.
*	The program now looks for default ruleset files (or symlinks to
	them) in the following locations:
	1.	`-r` invocation parameter.
	2.	`$HNEFATAFLRC`
	3.	`$HOME/.hnefataflrc`
	4.	`$HOME/.hnefatafl/hnefataflrc`
	5.	`/etc/hnefatafl`
	As a result:
	-	`$HOME/.hnefataflrc` is not created automatically when
		you run the program. Instead, `/etc/hnefatafl` is
		created by `make install` (and removed by `uninstall`).
	-	POSIX is no longer a dependency, not even optional.

### Details ###
*	Because of real or perceived problems with the GNU FDL, the
	manuals are now licensed under CC-BY-SA.
*	If you have both the CLI and XLib interfaces, and XLib fails to
	open the display (`DISPLAY` is not set, id est X is not
	running), then it will fall back to using the CLI automatically.
*	When reading any text, you can now use single (`'`) and double
	(`"`) quotes to stop space condensation and word splitting. This
	is necessary for saving and loading.
*	Ruleset files:
	-	The path separator (`/`) is appended between the data
		path and the filename for all data files now.
	-	The IDs for the pieces have been switched around in the
		default rulesets and XPM files to make them white and
		black in petteia and other rulesets that only have 2
		piece types.
*	Code cleanup.
	-	The `HT_*UNSAFE` silliness has been removed altogether
		in favor of `assert`s. Thus you can use `NDEBUG` now.
*	Simplified the build system.
	-	`src/makefile` should now be portable (except for the
		cleaning rules).
	-	`makefile` has been simplified with many unnecessary
		dependencies removed (for example, `awk` and `sed` have
		both been replaced by `ed`).
	-	All source files that are not optional modules are in
		`src/`. Optional modules are in sub-directories of
		`src/`. `bin/` and `obj/` do not exist anymore.
*	You can build the program without a user interface.
*	Because of the changes mentioned above, the following
	preprocessor options have been removed:
	-	`HT_POSIX`			(Unused)
	-	`HT_UNSAFE`			(`NDEBUG`)
	-	`HT_AI_MINIMAX_UNSAFE`		(`NDEBUG`)
	-	`HT_AI_MINIMAX_HASH_MEM_TAB`	(`-t` invocation)
	-	`HT_AI_MINIMAX_HASH_MEM_COL`	(`-c` invocation)

### How to update your ruleset files ###
1.	Remove the trailing path separator (`/`) from `path`.
2.	Add `id` and `name` at the top of the file.

2013-12-14
----------
*	Fixed a bug where the repetition rule would cause the game to
	think that the forbidden square is an obstacle that you can't
	move past. This affects all rulesets with the `forbid_repeat`
	rule. Many thanks to Alexander Dolgunin for spotting and fixing
	it.
*	A ruleset for petteia has been included.

2013-09-20
----------
*	Fixed a formatting error in the English manual and added contact
	information.
*	Default optimization level is now `-O3` (for no reason -- I am
	still convinced `-Ofast` is safe to use) and all compiler
	warnings are now disabled by default (the build will error out
	on empty compilation units when building without XLib, or with
	some other versions of GCC).
*	`cleanall` is now called `mrproper`, according to convention.

2013-05-27
----------
*	Additions to `config.mk` and `makefile` to facilitate packaging.
	`make install` also strips the binary now.

2013-05-24
----------
*	`-v` invocation prints more information about compile options.
*	Cleaned up `makefile` and `config.mk*`.

2013-05-15
----------
Fixed segmentation fault when starting UIX with no `$DISPLAY`.

2013-05-12
----------
Initial version. Undo / saving not implemented.

