FICS enhancements - ideas for discussion

FICS is the very nice (and free) online chess server. And while it is fairly good, there is also a room for improvement. Below I gathered some possible FICS improvements.

I update this from time to time, if there were issuetracker for FICS, I would be more than glad to put my suggestions there. And I know that FICS development stalled recently, but who knows what will happen in the future...

I am neither FICS author nor admin. I am just the experienced FICS player, who thinks that such a design sketch could be useful for discussion and for the authors consideration.

Major known problems

National characters handling

While full national characters support is probably hard to implement, it is very irritating that whenever I enter some Polish national character in eboard or xboard, I am immediately disconnected (I guess that either timeseal, or some server-side application crashes).

It would be nice if this bug could be corrected. Skipping unhandled characters would suffice.

In the longer term unicode support would of course be good idea to consider.

Interesting client-side workaround is being suggested - encoding unicode as numeric entities (Ӓ etc). But all mainstream clients would need to implement this (and remember about splitting the lines where necessary on the sender side and joining them back on the recipient side so the line length requirement is kept).

Easier registration

Registration process is rather complicated nowadays (fill and submit form, get one email, get next email, forbidden use of free email accounts). Considering the fact, that the guest login is very easy, it seems to be overkill.

I would suggest going into opposite direction: make registration very easy (fill and submit form, done, if really necessary send password via email to check its validity) but restrict the new players permissions for some time. In particular, new player chat abilities could be restricted (say, talk only to admins, channel 1 and the current opponent) until they play at least 10 games, or for a few days, or both.

Reclaim unused accounts

There are a lot of accounts whose owners played just a few games 10 years ago, or even have not played any game. Many of them have nice short handles which would be great to reuse.

The account not used for a long time should be removed and its handle returned to the pool. By the long time I mean:

  • 1 month for the player who failed to play any game,
  • 6 months for the player who played no more than 10 games,
  • 5 years for the establised player.

Of course such player could be notified via email in advance that he (or she) is going to lose the account unless he starts playing. Such an email could also contain the instruction how to recover the lost password.

Rename the handle

People who picked the handle they are unhappy with are stuck currently. They are not able to change the handle, and the are forbidden to abandon it and start from scratch.

In fact, they usually do the latter, and the initial accounts remain dead.

Account rename should be - simply and just - possible. It could be accompanied by the rating transfer and by freezing the first finger line for a few months, so it shows the old handle (in new account finger) and the new handle (in old account finger). For example:

1. Formerly StupidJohny.


1. Account closed, now playing as JohnMalcovich.

Fine-tune duplicate tracking

Quite a few players (including myself) had problems with oversimplistic algorithm FICS uses to detect duplicate accounts.

Contrary to what people from USA may think, the 1-1 mapping between the client PC and the IP address does not exist anymore. Especially in Europe quite a lot of internet providers use virtual networks and network-translation of addressess. The result is that the whole (sometimes large) network is exposed to the external world (including FICS) via one or just a few IP addressess.

Therefore the idea to automatically ban as dupes in case two accounts using the same IP played rated game is simply flawed.

I survived it myself - I invited a few colleagues to try FICS, and some time later they were all banned as my suspected dupes (some of them never played me, one played two or three rated games against me). It was finally cleared, but took some time and provided a lot of irritation.

How should one detect dupes? As in cases of other abuse, detecting it via simple query is unlikely. There must be a process in place, there must be a way to gather multiple evidence, there must be final human look at the reports before issuing a ban.

Force resume

In case some player is offered to resume adjourned game, he or she should not be able to start another game. That's it.

Limited time to finish adjourned game

The whole problem of disconnections, adjournments and adjudications takes quite a lot of effort, most questions to channel 1 etc.

Internet isn't that bad nowadays, and the concept of "if you failed to return within 1 hour, you loose", or similar, could really do. It could be overwritten for special cases (like TeamLeague games), but by default should work just so.

Games being played

Thematic games and tournaments

Thematic games (games with specified opening moves) are killer feature on correspondence servers and would be quite intereting also on FICS.

There are some signs of activities in this direction in FICS code (boards) but I do not think they go into the correct direction (there are thousands of valid openings nowadays, I can not imagine defining them all as boards). Instead, it would be nice if one could simply specify the initial position writing the list of initial moves or FEN line (in the form of additional seek or match parameter). There is slight risk that somebody would seek the game with unfair initial position, but in practice it is not likely to work (in particular, the opponent can always abort the game).

Commented seeks

Simply: let people add short comments to the seeks issued. They could be used to add some extra info for possible opponents (initially displayed by sought command, later on probably shown by interfaces). Some examples: searching partner for at least 6 games, please play Open Sicilian, only for established players.

CrazyHouse 960

Crazyhouse is reasonably popular, so it's shuffled variant would be nice to try too. Initial setup and castling should work as in wild fr, the rest should stay as in standard crazyhouse.

The game as such has already been proven as interesting on SchemingMind.

Atomic 960

As above, another interesting variant worth being added. Especially considering standard atomic is significantly spoiled by heavy opening theory. Initial setup and castling should work as in wild fr, the rest should stay as in standard atomic.

The game as such has already been proven as interesting on SchemingMind.

Game playing

Automatically adjourn when opponent disconnects

Probably most irritating FICS experience is to wait 15 minutes for the opponent move just to find that he has disconnected 15 minutes ago. And the questions about negative time belong to the most frequently asked by novices.

It would be very nice to have game adjourned automatically immediately after opponent disconnected. I imagine that I could get message like:

Your opponent has probably disconnected. The game has been adjourned.

Some heuristics would be needed here, but internet is fast nowadays so lag measured in minutes means disconnect.

If detecting this situation automatically is too difficult, it would be nice to have some command to check opponent status when in doubt, for example:


(resulting either in game adjournment and mesage like the one above or in the info that opponent is alive and playing). Internally it would require some kind of probe message handled by client software silently.

I guess that timeseal can cause some problems with this mechanism. But at the same time I think, that one could place some limits on the allowed lag and for instance assume disconnection if probe message gets no reply during - say - 2 minutes. After all, timeseal is here to reduce the lag impact on the blitz games, not to let the people lag 5 minutes each move.

Override 'play adjourned game' rule (available to mamer)

I happened to be forced to abort interesting game I adjourned because I met this game opponent in mamer tourney. It was also troublesome for tourney manager, who had to ask us for abort.

I think it would be better if mamer had permission to override this rule and mamer games were played as needed even if there is adjourned game between the paired players. Of course the technique could be implemented in general way, so every bot having some particular permission could use it.

Rating system

Liquidating the gap between blitz and standard ratings

At least among the lower rated players, there is usually 300-500 points difference between blitz and standard ratings. Whatever is the mathematical reason for this, it could make sense to work on making those ratings more correlated. Simple action like measuring what is the average difference among all established active players, and adding those 200 or 300 to all blitz ratings, could probably do.

Current difference makes it difficult to handle formula, kiblevel and similar variables reasonably.

Differentated wild ratings

At the very least Chess960 (wild fr) rating should be separated from the other wild ratings. In general, every established game should have its own rating and highly experimental games should simply remain unrated.

Distinguish Chess960 blitz from standard

Chess960 3 2 is fairly different from Chess960 30 0, not to mention slower controls. The game popularity is growing and distinguishing blitz and slow ratings for it would make sense.

Separate Standard and Rapid rankings

For standard chess, it would make sense to introduce new rating for the games where each player have at least 60 minutes / 40 moves. There are plenty of slow-time tournaments nowadays (stcbunch, teamleague, OCL) and they all would benefit from stable, slow-time rating (there are players who perform at slow games significantly better, than at 15 0).

As the terminology change could be confusing, I would leave name 'Standard' for rapid games and use name 'Slow', 'Long' or 'Thinking' for longer games.

Show only interesting rankings

It would be nice if I could set single configuration options telling which kind of chess I am interested in and have this option impacting default behaviour of:

  • best/rank family commands
  • finger
  • formula (non interesting games automatically rejected without writing formula for this task).


Bronstein clock

In addition to currently available standard and Fischer clocks, it would be nice to have Bronstein clock (clock with non-aggregating increment).

Bronstein clock work as following: player has some basic time and some increment. If he makes the move in time no longer than the increment, his main time does not change (but, contrary to the Fischer clock, does not grow!). If he spends more time, his main time is reduced by the 'extra' amount.

For instance, imagine we play 2&12 (I propose such notation, of course this is just one of plenty possible notations) Bronstein time game - 2 minutes of base time and 12 seconds of increment. Player spends 3 seconds on his move, so his clock does not change and stays being 2 minutes. Next player spends 14 seconds on his move, so his clock is reduced by 2 seconds (14-12) and is now 1:58. And so on.

Bronstein time similarly to Fischer time grants players some minimum for every move (no more flag in won ending) but comparing to the Fischer clock gives better responsivness: game is faster in the players perception, no more waiting 3 minutes for the opponent to move in 2 12 blitz, no more passive moves to accumulate time.

As I said above, I suggest &-notation:

seek 2&10
match Johny 1&5

and so on.

At the same time I think that the syntax 2+12 would suit Fischer clock slightly better than currently used 2 12. But it is rather bad idea to change it, considering it is so well established.

Hour-glass clock

Another interesting clock, which works just as its name suggests: every player gets some initial time (say, 1 minute), on every move the time spent by the opponent is added to the player own time.

Example: the game is started and both players have 1 minute on the clock. White spends 10 seconds thinking and makes the move. Black gets those 10 seconds so his clock shows 70 seconds (and whites 50), then makes the move in 2 seconds. At this moment white clock shows 52 and black 68. Etc.

Possible notation:

seek ~2

(giving initial time of both players in minutes).

No lag game

Most people use timeseal nowadays. Nevertheless, there are cases when it would be nice to play some game without timeseal (so, without the lag). Currently to disable timeseal one must reconfigure the client application, logoff and reconnect.

It would be nice if one could explicite set some game to be nolag - played without timeseal impact (technical details to be discussed, probably actual connection should still go through timeseal, but the server would just ignore its reports and use the server time instead).

Such setting could be useful for instance for some fast blitz tournaments - instead of complaining against heavy laggers, people could just organize the nolag tournament.

Possible notation:

seek 3 0 nolag
match Johny 1 5 nolag

and so on.

Time counted from the first move

While current FICS method of counting time since the second move is in most situations preferable (bah, great, there is a time to welcome opponent, read his finger and so on), it would be nice to have an option to play the game with the time measured since the game is started - as it is the case in OTB chess (white clock starts immediately, black clock starts after white finish first move).

Main usage? Fast mamer tournaments! If mamer were starting the games this way, it would eliminate people, who start games immediately (or have mamer autostart feature on), but delay playing the first move significantly.

Possible notation:

seek 3 0 timefromstart
match Johny 1 5 timefromstart

Game watching

Notifications about observers

Please, notify me that someone started or stopped observing my game! For instance so:

JohnyX started observing game 37 Michael-Surr (3 players observing game now)
Stephen stopped observing game 44 Master-Mister (0 players observing game now)

(maybe observer ranking could be shown here too but that is not essential)

Purpose? It is always nice to know that someone is observing my game, I can for instance start whispering comments in such case, invite observers to the post-game analysis, welcome colleague, change the game plan if I am observed by my future tournament opponent, or just enjoy...

Best if this feature could be configurable by some config variable, for instance oblevel, with possible values for the following preferences:

  • no such notifications,
  • notifications obtained only for the games I play,
  • notifications obtained for the games I play or observe.

Observer needs invitation

It would be nice if one could play some game (and, what is even more important, run some analysis) in the semi-private mode, in which only people invited by the players (or, in case of analysis, by the examiners) are allowed to observe the game.

Motivation? Tournament preparation case. For instance situation, when TeamLeague team players are discussing game strategy or playing training game just to find that the future opponent (or some unknown guest...) is observing them. Another case - shielding from the users making inappropriate comments during the game.

I imagine the following implementation: the game is started as private as usual, but then, when someone attempts to observe such game, players (in case of analysis examiners) are notified with the message like:

JohnyX would like to observe game 37 Michael-Surr. 'accept 11' to
agree, 'decline 11' to decline.

Only after one of the players (in case of the game white or black player, in case of the analysis any of the players granted examine privilege) accepts such request, the player asking for permission starts observing the game.

Save game annotated with time and kibitzes

Well, do what WatchBot does, but do what it is not available to do - save whispers/kibitzes for every game saved in a normal games history.

Automatically email someone else games

It would be nice, if one could set some variable to automatically track all public games played by given player/players.

Purpose? Tracking my colleagues games, tracking games of some good player whose style of play I find instructive, tracking games of future opponent, finally tracking pupil games by the coach.

Syntax? I imagine for instance autotrack list containing list of players tracked this way (some size limit - say 20 or 30 players - could be applied to avoid people subscribing to hundreds of players) and commands like:

+autotrack Johny
-autotrack Jenny

The games mentioned would be emailed in the same way the games emailed thanks to the automail option are.

Possible alternative name - gautomail (per analogy to gin).

Following more than one person

As it is possible to observe many games simultaneously, it would be nice if I could also follow many people simultaneously.

I started missing this feature while playing in TeamLeague tournaments and wishing to observe all games of my teammates. But I imagine other uses too, like following players I directly compete in the mamer tournament.

More info about observers

The allobservers command could have some switch to show observers ranking. For instance:

allobservers 26 /r

could show:

Observing 26 [Regnmanden vs. Nogger]: djoube(*)(SR) [1655] neilln [1539]

Help finding good games (games enhancements)

The games command could have more options to narrow the search. Some use-cases:

  • show me top 10 standard rated games currently played (top = played by highest ranked players),
  • show me top 10 games timed 30 0 or more,
  • show me all standard games played by above 2000 players,
  • show me all 45 45 games.

Syntax? TBD. I imagine sth like games /s 2000-9999 (rank range), games 45 45 (time) and games /s /top=10. It would also be nice if one could influence sort order (at least to have games sorted according to the rank).

This command could bring performance gains, as clients and bots which currently issue games and filter the output, could issue more specific searches.

Help detecting games (gnotify and gin enhancements)

It would be nice if one could something to be notified whenever - say - standard game played by someone ranked over 2000 - starts. Or when the game played with 45+45 clock starts.

It could be fairly useful when issued manually, but the main purpose would be to relieve client interfaces and bots from using full gin when they just want to show best games or detect games played within some tournament.

In the simplest approach there would be variable (called - for instance - ginbest), which one could set to be notified whenever good game starts. Meaning of good would be arbitrarily defined by the server, rated game with average ranking in top 3 of currently played games would be good candidate. The variable could be set to sth like all, standard, blitz, crazyhouse, ... or the comma separated list of such words.

More sophisticated approach would introduce formula-like variable, say ginformula.

The notification itself would be the same as shown currently thanks to gnotify or gin.

It would be incredibly helpful for people trying to run tournament management or game watching bots from the machines with limited traffic. Full gin costs a lot, even gin reduced to standard games would be huge change...

Game analysis

Store (and email) analysis!

Very missed feature! FICS examine feature allow people to analyze games in a group of few players. Such group analysis frequently leeds to interesting variants, instructive discussions, comments clarifying game history etc. Unfortunately, such analysis is completely lost once finished! Neither FICS itself, nor any of the popular clients, are able to store it for later review.

So, it would be nice, if the analysis history (variations shown, comments expressed via kibitzes) could be stored on the server and emailed to the participants or replayed.

I imagine the following features here:

  • storing analysis on the server, either just between the historical games, or using new, separate list (game would be stored for all active examiners, other observers could retrieve it via history of any of the examiners),
  • sending such game in the form of PGN file containing variants and comments (comments made both from kibitzes and from the information who made which move) - automatically to all examiners who has automail option set, on demand via mailstored (or similar) command to anybody,
  • (more difficult) creating some method of reviewing analysis directly on the server (probably it is not possible to have this handled by current client interfaces but if some syntax is established, they would follow).

Better variation support during analysis

It would be nice if - while working in examine mode - FICS supported some variants memory, so one could jump forth and back within the variation, switch between variations without loosing them, easily return to the main variant after analysing sideline and so on. Details of this feature could probably be designed simultaneously with analyzed game presentation feature mentioned above.

Notifications that analysis started

Just as there is gin variable to notify about games being started, there could be ein (examine information) with notification about players starting analysis.

Just as gin it would be rather useless for normal player, but very useful for clients and/or bots.

In particular, it could make it easier to implement analysis-saving bot, would somebody want to take the challenge.


Persistent data connected to the channel

Some channels would benefit from having some short persistent info bound to the channel and easily accessible by the clients. Most obvious example is binding website urls on channels like teamleague, ocl or stcbunch.

The info could be managed by the server administrators (and maybe delegated to SRs).

Message displayed to the people who join the channel for the first time

Particular case of the above idea - display some message whenever somebody visits the channel for the first time. This is good time to remind about some channel-specific policies, hint some link etc.

Message to regular channel visitors

It would also be nice if there were feature to send message to the channel. This would mean leaving some message to all the people who are subscribed to given channel, whether they are currently online or not.

What is the purpose? Fairly obvious. Channels usually gather people of some common interest, it is sometimes desirable to have method to leave some message for all of them (imagine notifying all bughouse players about important tournament, reminding teamleague crowd about the new event in preparation, or inviting all German players to the FICS championship of their country).

The message could be shown once to every channel visitor who has not seen it yet during some period (say, 1 week) since the message was created.

In particular, it would significantly reduce the need to use the (somewhat irritating) bots which repeat the same message in regular intervals.

Of course some restrictions should be applied by the server, for instance:

  • forbidding this feature against very popular channels like 1 or 49,
  • manually granting the privilege on per-channel basis,
  • limiting amount of messages sent to the low number (say 5/month).

Proposed syntax:

message 106 I am organizing Polish team(s) for the tournament. If you are interested, leave me message.

Review past channel talks

It would be nice if channel talks were saved, even for a short time (like a day or two), so one could read the missed discussion.

It would also help resolving many abuse cases.

chlog is a bot which workarounds this limitation to some degree.

Users handling

Annotated lists

It would be nice if I could somehow annotate noplay and censor lists (and maybe also notify and gnotify lists), so I could later review when and why I put people there. Best if there were the following information available:

  • date and time one was put on the list,
  • private comment (visible only for me),
  • public comment (visible also for the person I noplay/censor/notify)

Purpose? Fairly obvious, one can easily forget those details and it is nice to know why I started censoring or tracking someone (in case I am reconsidering those lists content). At the same time, person censored could be informed why it happened to him or her (person notified too, I have been asked a few times the question Why am I on your notify list?).

The same feature could be probably useful also for the administrative lists like abuser list, mamer problematic list and so on.

Auto-expiring user lists

It would be also nice if one could noplay/censor someone temporarily - for instance for one week or one month. In fact, in case of the first abuse, I would usually prefer banning someone temporarily and giving him or her the chance to improve his behaviour.

The same feature could be useful for notify list - for instance I would use one week notify with respect to my current opponent in stcbunch or tournament.

The same feature could be probably useful also for the administrative lists like abuser list, mamer problematic list and so on - sometimes it can be desirable to offer someone temporary ban with a chance to improve later.

Unlimited lists

It would be easy if lists like censor or noplay were not limited in size (or at least had large limit).

Censor but play

Censoring someone currently forbid also playing against him. I think it is not necessary, there are people whom I do not want to hear, but I can play - people shouting far too much being an example. So I think censor list should just restrict tells and messages, without restricting play.