summaryrefslogtreecommitdiff
path: root/TODO
blob: 5999254c1ba32d48b932ea0df0720dc905a403bc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
LEDGER  -*- mode: org; fill-column: 78 -*-

#+STARTUP: overview
#+ARCHIVE: TODO-OLD::
#+SEQ_TODO: TODO(@) STARTED(@) WAITING(@) DELEGATED(@) | DONE(@) DEFERRED(@) CANCELLED(@) WONTFIX(@) WORKSFORME(@) INVALID(@) DUPLICATE(@) NOTE
#+TAGS: FEATURE(f) DOCS(d) BUILD(b)
#+CATEGORY: Chess

* TODO [#B] display: Make it possible to "highlight the last move"
* TODO [#B] display: Make highlight colors easily customizable
* DONE [#B] ics: Make a refresh act like an assert
  - State "DONE"       [2008-08-29 Fri 06:28]
  Compare with our current known board and trigger an error if it doesn't
  match the refresh.


chess-autosave
- this module currently isn't working at all!
- doesn't support undoing of moves

chess-clock
- sometimes, the clock gets shut off (while playing on ICS) for no
  reason that I can determine

chess-irc
- if I move before my opponent has connected, I get a symbol assertion
  about "value"

chess-network
- does not work at all!

chess-gnuchess
- triggers a Lisp error when I resign

chess-ics
- takebacks still aren't working 100%; when I submit a takeback
  request manually, and the other side accepts, my client doesn't know
  what to do with it
- accept of a match request doesn't seem to be working always
- resuming adjourned games does not work at all
- not detecting forfeit by disconnection at the moment

chess-display
- although chess-display-side-to-move is using faces, the Black/White
  text doesn't show the face in the modeline
- sometimes the final event of a game doesn't change the modeline,
  like CHECKMATE, or FLAG FELL
- if I win a game, it still reports CHECKMATE incorrect; if I'm white,
  it does so on the last ply (per display)
- need a "save this game to a PGN file/database" command

chess-engine
- if I say "y" to accepting something from my opponent (new game,
  takeback, etc), I get left with an hourglass cursor
- if no chess engine is available, there is no nice message being
  printed

chess-ply
- detect games drawn by three-fold repetition and the 50 move rule
  (Note, FIDE rules define that a draw must be claimed by one
   of the opponents, so we do not really need to do this on
   every move, just when a draw is requested.)

chess-pgn
- when saving a full game to the clipboard, it shouldn't need to save
  the FEN if it's starting from a standard position (this doesn't
  always happen)
- sometimes when clipping to the clipboard the final "*" is stuck to
  the text of the last move

chess-german
- complete translation

general
- add an 'install' target to the Makefile
- use more asserts throughout the code
- profile and mem profile
- elint all files
- add docstrings/texi content
- use checkdoc on all files

These are features scheduled for future 2.x releases.

----------------------------------------------------------------------

			   General Features

- Use TrueType or other chess fonts for displaying positions; this
  might be the best way of displaying positions on Windows

- Enable the chat module, and base its interface on what TNT does

- Merge chess-announce and chess-sound, and use style modules on top
  of the underlying module

- Create a generic chess-output interface, for outputting games to a
  particular format (PGN, HTML, LaTeX, etc)

- Display in the modeline which game in the database we're in, and
  what the positional evaluation is

- Add a `force' event for forcing an engine to move, and a command
  from chess-display to send this event

- If you are playing a puzzle game, and the engine is thinking, and
  you hit space to move to the next puzzle, then when the last move is
  finally received from the engine it causes an error.

- Clean up chess.el, and let people override the chess-default-* lists

- Write chess-descriptive.el, and have the code in general use
  chess-ply-to-string and chess-string-to-ply, so that users can use
  descriptive notationas an alternative to algebraic.
  (NOTE: this might proof problematic since descriptive move notation
   is ambigious if we don't have the full game information, since
   we need to destinguish between QR KR QN and KN.  So chess-descriptive-to-ply
   would need to use a game object as reference, rather than just a position.)

- Change chess-announce/sound so that it reads from the text rendition
  of the move; this way it will work with either descriptive or
  algebraic notation.  Also, chess-announce and chess-sound can be
  collapsed into one module, with different "styles" of announcing.

- Make ( create variations in a display, and keys to move into and out
  of them.  At the moment, variations are supported programmatically,
  but not in the UI.

- Make a display read-only mode, which allows people to view/browse
  but not alter a game.  This could be used for remoting displays in
  order that people on other X servers might observe a game.

- Implement the "50 moves after irreversible" draw rule in chess-ply

- Port the code to XEmacs

- Find a way to display pieces on Windows platforms, or at least
  document how to build XPM support into Emacs for Windows

- Add a way to include the chess-ucb module in the list of default
  modules created via M-x chess.  Right now there is no facility for
  having two engines associated with a single game (and chess-link
  is not what we want in this case).

----------------------------------------------------------------------

			      ICS Client

- Add a completion function against logged in users

- Copy some of ics.el's nicer functionality into chess-ics.el

----------------------------------------------------------------------

			       PGN Mode

Maybe pgn-mode could just allow normal editing, and bind some keys
to do special things. e.g., the mouse binding could work as normal,
SPC could update the display. So if you do

1 e4 SPC
you get the move displayed. Some binding could do redisplay anyway, e.g. C-l?
Then, one could enter variations or such simply with ( or { and
the display would update automatically.
e.g., you do 
( 15.e5 SPC Nf3 SPC )
and you'd get three display updates, on e5 SPC, you get that
ply, then the second one, and on ) you get the position before the 
variation. Move point into the variation again, and hit C-l and you
get the pos where point is on.

There should be a forward-ply and backward-ply, maybe something like
M-f / M-b, and C-u M-f for two plies forward?

Very nice would be a pcomplete-based completion fascility, so
simply hit TAB at any point, and you get the right completion.
Example:

[Event ...]

TAB 1.TAB ...

On first tab, the move number is inserted. On second, you get
all possible moves in that position.

----------------------------------------------------------------------

			    Chess by Mail

- Add support for adjournments; also, implement this is such a way
  that an e-mail or postal game is basically a game that's adjourned
  after every move; use BBDB if available

- Use MIME attachments (application/x-chess-pgn) for sending e-mail
  chess games back and forth.

----------------------------------------------------------------------

			 Database Interaction

- Enable UI commands in chess-display to interact with databases.  As
  of 2.0, this support is programmatic only.

- Follow what `edit-env' does, in order to make chess-query.el.

----------------------------------------------------------------------

			  Training/Tutorials

- Write a scripted chess-tutorial.

- Allow the opponent to give hints.

- Add a warning mode that will use the results of an analysis to warn
  the user (and ask for confirmation) before doing something that
  might lead to an inferior position.

- Add a chess tutor program, to teach people how to play chess

----------------------------------------------------------------------

			  Analysis features

- Add slots to each position for keeping track of positional
  evaluation (these values can be automatically determined when
  parsing ICS12)

- Add an engine function for obtaining an evaluation of the current
  position.  Then, allow M-x chess to startup a non-game oriented
  engine, solely for the purpose of submitting position evaluations,
  and displaying the result in the modeline.  (Also, look at crafty's
  kibitzing feature).

- Add a Map command, that will colorize the squares depending on
  whether they are reachable by either side.  Green if reachable by
  you, Red if by your opponent, and blue if by both.  With a prefix
  argument, colorize only the squares that have pieces on them.  This
  is a stable modes that remains in effect until turned off.  It also
  requires the ability to pass a color to the chessboard highlighting
  routine.

- Using gnuplot-mode, allow evaluation trends to be plotted

- Add an analyze command that will indicate which pieces are defended,
  how well, which are attacked, which moves would increase
  defense/attack/both, etc.  Basically, everything that can be known
  about the current board, and one move ahead (on both sides).

----------------------------------------------------------------------

			   Other variations

- Need a way to play bughouse/crazyhouse games.

----------------------------------------------------------------------

			    Other features

- Keeping a player database in BBDB

- Managing a tournament, setting up pairings, calculating ratings