minor optimizations
kropcore provides a rect of changed area on field after each move so UIs can redraw the field selectively
floodfill() replaced back with a stack-based approach since the array-based one was about 1000x slower
floodfill() fix
replaced floodfill() by a version that does not rely on stack
removed dead lines
internal bitfield modified so walls are marked with only one bit
replaced binary magic values by nice defines
moved okp import-export routines to okp.c
player names moved out of kropcore to keep it as small as possible
playablefieldx and playablefieldy are 8 bit now, for consistency with other members of the kropki_game struct
field dimensions are passed as unsigned char to save memory on tiny platforms
core files renamed to fit 8+3 filenames
ai_proto fix
adjusted tigran settings so it does not burn cpu that much
copyright date bump
duplicate wall searching finds also reversed wall (wall A-B is the same thing as wall B-A)
nicer ring to mark the dot last placed on playfield + colors are passed as uint32_t types
user language auto-detection
renamed LANG_LAST to LANG_ERR for future use as an error indicator
automated last-version detection
list tar.* and zip files in the archive
wording improvement
download is local + styling improvements + minor rewording
split addWall() with a separate findWall() routine for better readability and possible future reusage
freezed v0.4 to tags
fixed build documentation to reflect the filename change of the windows makefile
improved wording
hints are rendered with a bigger margin from the mouse cursor for better readability
styling improvements
improved wording
renamed Makefile.win to Makefile.mingw
preinit coordinates in case ui_menu() gets a list where first entry has RELPOS set
remove default case so I still get warnings about enum coverage in the future should new cases be added
added a default enum case to shut gcc warnings
initialize variables to shut gcc warnings
object files are declared only once for better consistency
replaced obsolete gettimeofday() by clock_gettime()
added missing headers so mingw does not complain
explicit array type
do not build genan - ai_proto is not used anyway
removed dead symlink
tigran does not discards fields with only 1 liberty
do not build genan - ai_proto is not used anyway
cosmetic code changes
improved translations
doc improvements
hints are computed using a common definition + added hints for language selection
tigran: early prunning of branches that yield poor results
debug flags are controlled from within the makefile
do not analyze fields that are almost captured by opponent, unless they lead to an immediate win
if no last move found, rely on g->playablefieldx,g->playablefieldy
fixed finding playable fields on almost-full games
inline (unsafe) KROPKI_GETPOS for faster queries when boundaries checks are not needed
configurable lastmove to add or not AI moves into list
AI-controlled fields highligthing for debug purposes
compute opp index once and reuse
added an AI reset to tigran
improved description, decreased fieldslookup and increased lastmoves count, also ignoring analysis of 0,0 corners
simpler election of interesting moves: choose fields moving spirally around last moves
fixed saving own moves in history array
tigran analyze lists of fields instead of looking at multiple speparate boxes
agregate analysis of same field for multiple boxes
cosmetic reorganization of the playconf menu
default opponent is Tigran now
note about new AIs
kropki_setpos() acceots a NO_WALLS flag to bypass walls creation, thus speeding up AI computations
ai_tigran chooses a random solution among all equally good solutions
seed the random generator so AIs can rely on rand()
tigran: do not analyze a 0,0 move - it is never usefull
tigran looks at last n moves + implemented multithreaded analysis
lots of Tigran fixes
added experimental AI Tigran
experimental minmax-like computations within karl
kropki_copygame() allows ignoring wall creation for faster processing of AI simulations
mcts field selection looks farther only when close fields are not available
proto AI replaced by Karl
mcts election looks at wins/loss counters + a single pass of immediate wins is computed
bugfixes
fixed counting (and locating) playable fields: a newly-captured field could be reported as "playable"
ai_karl draft syntax fixes
const-ified the game argument in two functions
ai_karl draft
debug log about loaded resume state contains some extra info
reset nextplayer in okp-loaded games that are ended
always scan playfield from top left to bottom right for consistency
take care to fill playablefields, playablefieldx and playablefieldy with proper values when initing a new game or loading a game from okp
kropki_setposforce() removed, functionally replaced by kropki_pass()
removed kropki_getpoints() for simpler API: app is expected to look directly into the game struct
optimization: calculating points no longer requires a playfield scan, points are precomputed during new-walls analysis
optimization: look for new walls only if new area got captured
optimized findfirstfreefield() so it looks for a precomputed position instead of scanning the field
added new AI prototype
constify argument of kropki_findfirstfreefield()
computing playable fields left in kropki game stats, may be useful for some progress stats indicator
translations of the Dumbo AI mouseover hint
added a hint system for menus, used right away for providing a short description of the Dumbo AI
okp resume state contains the types of players now