The Chess Variant Pages
Custom Search



Enter Your Reply

The Comment You're Replying To
H. G. Muller wrote on 2020-11-01 UTC

That ability to review moves locally is really nice! Will this work if added to other presets that are not based on your generated code?

To make this possible you need more than just the move list (which is always on the page), because replacement captures are not reversible. For unprogrammed presets it would be enough to have the starting position, as moves there would always be fully described. If the preset is programmed to automatically execute implied side effects (such as for e.p. capture and castling), the JavaScript would have to mimic that.

The GAME code in the betza.txt include makes use of a feature that Fergus created for this purpose: it can pass an initialized variable to the JavaScript normally embedded in the page. This way it passes the FEN of the initial position plus a comma-separated list of move numbers of e.p. and castling moves. Only when the page defines this variable the JavaScript will create the button bar.

I suppose this could have been designed a bit smarter. Now that I think about it, there isn't really any need to have the GAME code specify the initial position (unless it alters it, like in a shuffle game): the variable that now passes this could also have been initialized in preset-specific JavaScript embedded in the 'rules' section. E.g. <script>var startFEN="....";</script>, generated by the tool together with the link to the common script. That could then be added to any non-programmed preset. Of course the Game Courier standard system could be made to always emit the start FEN of the initial position (taken before it executes the Pre-Move code for the first move).

For a programmed preset it is in general not possible to do this navigation based on the move list, as there is no knowing how the GAME code would have interpreted those move texts. You would either have to embed a list of all game positions in the page, or try to save some space on that by mentioning only the differences between subsequent positions. This could even be done in a reversible way (so that you don't need the start position, but the current one will do): each move could be encoded as a comma-separated list of piece ID + square coordinate, which, depending on the occupant of the mentioned square, would either place or remove the mentioned piece. Differnet turns could be separated by semicolons. Normal non-captures would then require 8 characters, e.g. Pe2,Pe4; , and captures 12, e.g. pd5,Pc4,pc4; . The moves could then be run forward as well as backward, if they firrst mention all deletions, and then all additions.


Edit Form

Comment on the page Play I-Chess on Game Courier page

Quick Markdown Guide

By default, new comments may be entered as Markdown, simple markup syntax designed to be readable and not look like markup. Comments stored as Markdown will be converted to HTML by Parsedown before displaying them. This follows the Github Flavored Markdown Spec with support for Markdown Extra. For a good overview of Markdown in general, check out the Markdown Guide. Here is a quick comparison of some commonly used Markdown with the rendered result:

Top level header: <H1>

Block quote

Second paragraph in block quote

First Paragraph of response. Italics, bold, and bold italics.

Second Paragraph after blank line. Here is some HTML code mixed in with the Markdown, and here is the same <U>HTML code</U> enclosed by backticks.

Secondary Header: <H2>

  • Unordered list item
  • Second unordered list item
  • New unordered list
    • Nested list item

Third Level header <H3>

  1. An ordered list item.
  2. A second ordered list item with the same number.
  3. A third ordered list item.

Alt text for a graphic image

A definition list
A list of terms, each with one or more definitions following it.
An HTML construct using the tags <DL>, <DT> and <DD>.
A term
Its definition after a colon.
A second definition.
A third definition.
Another term following a blank line
The definition of that term.