
/*  @(#)TODO 1.28 94/01/27
 *
 *  Copyright (C) 1990 - 1994 - Rich Burridge & Yves Gallot.
 *  All rights reserved.
 *
 *  Permission is granted to copy this source, for redistribution
 *  in source form only, provided the news headers in "substantially
 *  unaltered format" are retained, the introductory messages are not
 *  removed, and no monies are exchanged.
 *
 *  Permission is also granted to copy this source, without the
 *  news headers, for the purposes of making an executable copy by
 *  means of compilation, provided that such copy will not be used
 *  for the purposes of competition in any othello tournaments, without
 *  prior permission from the authors.
 *
 *  No responsibility is taken for any errors on inaccuracies inherent
 *  either to the comments or the code of this program, but if reported
 *  (see README file), then an attempt will be made to fix them.
 */

Motif conversion problems.
==========================

* Fixup the Imakefile.

* Fixup the manual pages to reflect the new look, and remove all references
  to command line options and X resources that no longer exist.

* Get the draw_suggest() and draw_move() routines working correctly.

* Include in David Boll's gameplayer code for the main loop.

* Get the clocks to automatically display every second.

* Remove all the unwanted code in the common directory.

* Add online help text for all widgets.

* Finish negating HASPOLL and HASREVEPROC.

* Fixup the gcc compiler warnings for the network code.

* Get the network version working under Solaris 2.x between two Suns.


Known problems.
===============

*  Allow the computer to play itself. Currently this option is disabled,
   because of the inability with some of the graphics versions to interrupt
   it, once it's started.

*  From Tom Friedel <tpf@jdyx.atlanta.ga.us>
   When I use reve on a 16 bit display there are three lines for the icon.
   On 8 and 4 bit displays I have a few circles for the icon. The icon code
   appears to be hard-wired for mono or 8bit screen; it should use something
   like XGetImage instead.

*  From Robert Cohen <robert@anucsd.anu.edu.au>
   If you set a search depth then go back to a difficulty it doesn't seem to
   reset max_depth to 2.

*  From Robert Cohen <robert@anucsd.anu.edu.au>
   There's a couple of funnies about the behaviour of the amount of computer
   time left when you change level or undo moves. Changing levels doesnt
   affect the record of time left in the undo list so if you make a move at
   a low level, change to a high level, make a move and then undo, it thinks
   you have very little time left even though you are on a high level.
   Also changing levels resets the computer time to the entire quota for
   that level. Surely it should be relative to how far you are thru the game
   eg. half way thru the game gets 1/2 of the quota for that level.

*  From Valerie Haecky <vmh@Eng.Sun.COM>
   When entering a game using two human players, there is no way of making
   one of them pass. I tried to switch to computer mode for one move, and
   let the computer pass, but when I switch back to all human, reve dies
   spectacularly.
 
*  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
   The Imakefile compilation doesn't quite conform to normal
   "standards". The "reve_proc" program should compiled with
   a straightforward "make x11" command, but it doesn't actually
   end up getting compiled until you do a "make install" !
 
*  From Michael Glad <glad@daimi.aau.dk>
   If you use the 'undo' button, reve gets confused. If running at level 5,
   the effective level drops to an estimated 2.


Suggested enhancements.
=======================

*  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
   Supply a way of forcing the computer to move before its search is complete.
   This would be very handy at the higher levels.

   If we can actually see what moves have been though about so far, then you
   may no longer be left in the dark as to what the computer is doing (you can
   manually stop it thinking when it finds a really strong move for example).
   As an afterthought, I realised that it would be nice to know what ply
   level the search is currently up to.
 
   An even neater trick would be to number each square with its position in
   the best move list. You could either show this at the end of each ply or
   update in real-time (in which case, the numbered squares would need to be
   cleared when the ply search is deepened to avoid confusion - also some
   on-screen renumbering would have to be done on-the-fly).
 
*  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
   "New Game" should just undo the game right back to the start. That way
   a player can use the move forwards facility to replay the game easily
   right from the start. Of course, as soon as the player makes a new move,
   then s/he won't be able to replay the game any further.

*  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
   Countdown clocks for blitz games (first to hit 00:00:00 loses if the game
   is still in progress).

*  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
   From Valerie Haecky <vmh@Eng.Sun.COM>
   Board editing. A 'setup' mode, where you can place stones on the board
   (NOT moves). This is good for game analysis, puzzles, starting from a
   specific opening (like Reve always plays perpendicular, and no-one knows
   whether this is best, and it would be nice to set up other openings).
   It has to be stones, not moves, because puzzles don't always contain legal
   positions, and transcripts have bugs.

*  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
   A 'I will win/lose in x moves' announcement if a forced win/loss is
   detected.

*  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
   When you click on Quit and have actually made some moves/changes, then
   it would be nice to have a dialogue box pop up to say "Save game before
   Quitting ?" with Yes, No and Cancel buttons in the box. Perhaps this could
   be part of a .reverc/.Xresources setting, because some people might not
   like the intrusion. This should probably apply to the "New Game" button
   too come to think of it ("Save game before Restarting ?" in this case).

*  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
   Display the number of board positions searched so far. The frequency of
   update is up to taste really - perhaps when the best move found is
   updated. Tied in with this, you could give a "positions searched per
   second" rating when the computer finishes its search and makes its move.
   This would be a great measure of the speed of the machine/algorithm.

*  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
   Allow the level to be explicitly set in seconds per move (or perhaps
   minutes per game as it currently is) rather than having a fixed set of
   levels. The highest playing level could be called "Infinite" rather than
   "Tournament" and just plays until interrupted or the game end is detected.

*  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
   Implement an "Equality" play mode which matches the computer playing time
   exactly with the human's.

*  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
   Have a 3-D board option. It'd sure look great. You just need to angle the
   edges inward from bottom to top and draw elipses rather than circles.
   Taking this further, you come show a wood grained board, and a light
   source up above for ray shaded stones.

*  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
   If you intend to implement on-screen clocks (hopefully in HH:MM:SS
   format), then have options to reset them to zero at any time and also
   to stop them (effectively a "Pause" mode) - perhaps that could be tied
   in with iconification. Perhaps another option (or resource) to decide
   whether the clocks should be analog or digital.

*  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
   Show the four "blobs" at the edges of the four central squares (top-left
   of d4, top-right of d5, bottom-left of e4 and bottom-right of e5). No,
   I don't know why they're there on commercial Othello boards in the first
   place, except perhaps to mark the starting positions.

*  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
   Have some annoyingly intrusive comments during the game :-) Examples
   could be: "That was a really bad move", "I'm crushing you", "This
   position is boring", "Hurry up and make your move !" etc. etc.

   [Othello2, the predecesor of the graphics used in Reve, and posted to
    comp.sources.games last year, used to have this ability - Rich.]

*  Try to get online copies of the two paper referenced in the README file.
   Otherwise, add more comments to the computer strategy code.

*  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
   Allow the board to be rotated 90 degrees. The movelist will also have
   to be adjusted of course.

   [Board rotation is only necessary, if we also support a printing
    facility fro transcripts. For publishing games usually start
    on c4. Also, if we want an opening library composed from
    played games, or other learning mechanisms, we would have to
    normalize the board. For a playing tool, this is not necessary - vmh.]

*  From Soren Hein <shein@ferdowsi.berkeley.edu>
   Possible to give some strength indication of the levels? Maybe by
   analogy with chess ratings, if you're familiar enough with Elo-ratings
   to make guesses/comparisons.

*  From Soren Hein <shein@ferdowsi.berkeley.edu>
   There should be symmetry between the case when the human can't move
   and when there is only one move for them. Yet in one case the program just
   goes on, and in the other, it waits for the only move. I would like to
   give my OK to forfeit before the program takes its next move.

*  From Dan Bernstein <brnstnd@KRAMDEN.ACF.NYU.EDU>
   An idea which can possibly be incorporated:

   Along with each board keep two arrays size 100 (it's easier on the code
   to use artifical borders) of bytes. Each byte has a bit set if a player
   can take from that spot in the direction numbered by the bit. This turns
   out to be reasonably easy to maintain with the moves, and it makes legal
   move checks and actual flips so fast that the program runs about three
   times faster overall.

*  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
   Add in a move list window, which would contain a scrollable list of all
   the moves so far (plus evaluation for the computers moves).

*  From: robert@anucsd.anu.oz.au (Robert Cohen)
   In order to guage which of the machines you have available perform best as
   Reve servers, or to choose between different compilers or to choose which
   compiler switches to use, it would be useful to have a measure of how fast
   Reve runs. You could have a switch that makes reve evaluate a particular
   preset position to some set depth and then tells you how many positions a
   second it checked. You could call this a rhevestone :-).

   Also by checking the answer it got against what it was supposed to get,
   you would have a simple regression test for checking for compiler bugs
   on new architectures.

*  From: robert@anucsd.anu.oz.au (Robert Cohen) 
   A cute feature I noticed in the standard X11r4 othello is that it thinks
   during the humans move time. If the person is a slow player this could make
   an appreciable difference if only in giving reve quicker responses.

   From shein@ferdowsi.berkeley.edu (Soren Hein)
   Is there any way the computer could utilize the opponent's time too?
   (This would probably require major recoding. Something like first
   guessing at the opponent's move using a shallow search, and then using
   a shallow search to order the possible responses to aid the alpha-beta
   search to deeper levels, once it becomes the computer's move again.)

*  From: robert@anucsd.anu.oz.au (Robert Cohen)
   It would be nice to add a bit of variety to reve's play. This could be
   done in a variety of ways. A simple approach would be to add some minor 
   randomness to the evaluation function (optionally of course).
   A more sophisticated approach would be to allow the user to tailor the
   evaluation function. This could be either done as a fixed set of play styles
   eg aggressive, cautious, unpredictable etc or by allowing the user to
   change some numerical constants eg the weighting put on mobility by slider.
   Of course there would be a "tournament" setting to make reve play as well as
   possible.

*  From Michael Glad <glad@daimi.aau.dk>
   Perhaps there should be a facility a'la SUN's chesstool to use the
   interface of reve along with other othello programs. This would make it
   easier to let them compete with each other.

*  From Robert Cohen <robert@anucsd.anu.edu.au>
   A more general debugging system where there is a debugging print call you
   can make that has a detail parameter indicating how "detailed" this message
   is.  Then there would be a debugging window that by default would only
   display the least detailed information eg a list of moves made but you
   could set it to display the level of detail you wanted. Also you can get
   the debugging information of a potentially different detail level stored
   in a file. This would replace the current logging stuff.

*  From Thomas K. Bischoff <bisc@zellweger.ch>
   Notes for improving the notation used by load/save game.

   The 'save game' file format is to verbose. You don't need two columns.
    1,  <f-5>  [ note : 0 ]
    2,  <d-6>  [ note : 0 ]
    3,  <c-4>  [ note : 0 ]
    4,   -     [ note : 60 ]
    5,  <c-5>  [ note : 60 ]

   The standard notation for humans goes like this:
        +--+--+--+--+--+--+--+--+
        |55|42|41|40|36|34|54|53|
        +--+--+--+--+--+--+--+--+
        |58|57|43|39|35|13|52|19|
        +--+--+--+--+--+--+--+--+
        |47|46| 3| 4|11| 8|14|12|
        +--+--+--+--+--+--+--+--+
        |44|48| 5| W| B| 6| 9|16|
        +--+--+--+--+--+--+--+--+
        |49|33|22| B| W| 1|10|15|
        +--+--+--+--+--+--+--+--+
        |28|25|21| 2|30| 7|20|17|
        +--+--+--+--+--+--+--+--+
        |51|45|26|23|24|18|50|29|
        +--+--+--+--+--+--+--+--+
        |56|38|27|37|31|32|60|59|
        +--+--+--+--+--+--+--+--+

   In this notation the passes don't get a move number, so there are at
   most 60 moves.

   But in the text you see also a more chess like notation :
   55.a1 b2; 57.a3 pass; 59.a7 b7; 61.a8

   Add more info to the 'save game' file format. Like who played, what
   time limit/level, time left etc. This is important to get the computer
   playing at the correct level, and to use the correct amount of time
   left.

*  From Thomas K. Bischoff <bisc@zellweger.ch>
   Make the computer player chooseable for both sides(black and white). This
   would allow to test different computer algorithm against each other.
   This could be done by choosing a name in the prop panel, which is the name
   of the program which gets forked.


Items we're unlikely to implement.
==================================

*  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
   From Soren Hein <shein@ferdowsi.berkeley.edu>
   What about a 'Play Next Best' option? This would undo the last computer
   move and play the second best move found rather than the best one. If
   selected again, there would be another undo and the third best move would
   be made instead and so on, until the move list is exhausted. It's great
   for trying out different moves in the same position.
 
   [There is currently no ordering move list, because a search can be stopped
    by the alarm. Then the move list is only 1 or 2 moves length - Yves.]

*  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
   A display of the full tree for the best move rather than just the best
   move itself.

   [In my algorithm, it is impossible to have it. How do want to know, when
    you are in the tree, that it will be the best move ? And when you know it,
    it is impossible to know where you were in the tree - Yves.]

*  From Richard K. Lloyd <RKL@anduin.compsci.liverpool.ac.uk>
   A resign feature if the search shows a completely lost endgame.

   [Othello is not chess. The result is the disks differential, not win,
    tie or loss. And I don't know if it is a "completely lost endgame". I
    only know that if the opponent is perfect, then I will lose. A human
    player that should win at move 46 and doesn't use undo, can very easily
    lose - Yves.]
