richb@sunaus.oz (Rich Burridge) (11/02/90)
As you've probably seen, Reve (an othello game) has just been posted to comp.sources.games. Between the time of sending it to Bill, and it's appearance in csg, several bugs have been fixed. These are listed below. Rather than post the patch for these right away, I'd also like to include fixes for any porting problems people have in trying to run Reve on other equipment. If you do have to make any changes to get Reve to *just* run on your machine, please send them to me, and I'll add them to this first patch. Obviously I'm also interested in bugs you find that aren't on the list below. In about a weeks time, I'll post this patch to comp.sources.games.bugs. ---------------- Changes/fixes (so far) in patch #1 are: * Time allocation function was out by 1. All the levels are shifted by 1. This explains why computer move selection at level 1 is so "slow". * The sandwich routine in makemove.c, was accessing out of bounds elements in the square array. * The play_reve routine in rev_ip.c, was accessing out-of bounds elements in the cpi, cpj and cpk arrays. * black_dpy and white_dpy were declared inconsistently in main.c and extern.h * If you select White->human, then Black->computer, Reve correctly plays the black computer move. If you then select Black->human followed by White->computer, Reve incorrectly made another move for black. There was a similar problem when starting a new game with Black being played by computer. * Fixed up a few other inconsistencies found by Saber-C. * Extraction of the optional X11 display names for the -b and -w options in get_options() was incorrect. * If you used the suggest button, to get the computer to suggest a move, it was decrementing the time allowed for the computer. * Adjusted entries 2191 and 2917 of the Reve edge stability table (in reve.edge2). * Added in the code for a new tree algorithm from Yves (rev_eval.c and rev_ip.c). * Added a -r command line option, which will write some computer move information to a reve.rs file after each computer move. This is probably only of use to people trying to improve the computer algorithm. The manual pages has been updated. * The computer move timing function in rev_ip.c now uses an alarm and signal, so should be independent of the machine it's running on. * Changed the variable "depth" to "level". As Reve now uses a timing function to calculate it's computer moves, "depth" is not a true indication of depth. * Changed all #include <strings.h> to #include string.h or strings.h depending upon whether SYSV was defined. * The amount of computer time left for moves is now stored for each move, so that if a move is undone against the computer, the previous time left value is restored. * Added in a -m command line line, which will start up Reve in monochrome only, even on a color screen. * The last move made is now shown by putting a black square around the piece on the board. This is updated when a new move is made. The manual pages have been changed to mention this. * The "last" panel button has been replaced with a "show all" panel button (and rearranged to be alphabetical), which displays all the valid moves at any particular time. This is very useful for beginners and for teaching purposes. The manual pages have been updated to reflect these changes. * Added in more hooks for two screen support for the X11 version. Here's the current TODO list: 1/ Finish off the X11 "two screens on two machines" version. The hooks are all in place, but not enough spare time... ~ The cursors in x11.c will need to be allocated for each screen separately. ~ In the process_event routine, only allow the FRAME_REPAINT event through if it's now this persons go. Otherwise output a panel message telling the user to wait her/his turn. ~ Changing the Black: and White: cyclic items should have a null effect if dtype is XTWO. Output a message to this effect. ~ If dtype is XTWO, then message and draw_piece should output to both screens. There are probably other routines where this should be the case. ~ There will be a few other places where certain routines will need to output to both displays if dtype is XTWO. 2/ 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. 3/ From Valerie Haecky <vmh@Eng> It might be nice to have an additional button for <help>. It pops up an alert, giving a short summary of the rules and explaining things, like how Difficulty is measured. 4/ With the XView version, disable MS_LEFT whilst the computer is having its move. At the moment, if you press the left mouse button while the computer is doing something, the server will hang. 5/ The color icon doesn't display properly with the XView version. 6/ There appears to be a bug with the X11 implementation on an IBM RS6000. When the computer moves a piece from the upper-left border to its place, a "trace" appears along its path. The color of this trace is the color of the background of the screen.