CTL-PGN: Exchange format
The CTL-PGN format enriches the CTL-AN, algebraic notation, by incorporating meta-information, game information, in a similar way as the PGN (Portable Game Notation) format enriches the SAN (Standard Algebraic Notation), and with a similar format.
The main functionality of the PGN format is to establish a format to enable the exchange of information. It does this by using plain text formats, linking algebraic notation with meta-information in three different ways:
- Metadata classified in labels, information about the game event itself. Each label has an identifier and a tag value in a specific format, set according to the type of value being represented.
- Free comments interspersed in the algebraic notation.
- Variations, alternative moves to the moves of the main game, for didactic purposes.
All three features are also incorporated in CTL-PGN, which introduces some subtle changes with respect to the PGN format, mainly by adopting the notation CTL-AN. We have already seen some differences between CTL-AN and SAN notation, some of which relate to the format in computer media, such as the case of the symbol ×, which can be replaced by an asterisk *, but never by the letter x; also of note is the date format, adjusted to the standards, which use the hyphen as a separator, and always beginning with the four digits of the year. The files, since all file systems already support extensions of more than three characters, will use the extension .ctl-pgn
in the name.A label is written on one line, enclosed in square brackets [ ... ]
, and contains a label identifier word, followed by a text in quotes
, which is the value of the tag.Initial variant label
Every CTL-PGN record must always start with the Variant label, using the tag value C'escacs for that label; it is the initial label:
[Variant "C'escacs"]
It happens to be the case that in the application that allows you to test C'escacs positions, an option is included that calls Grand C'escacs. For this variant, we would use a different label:
[Variant "Grand C'escacs"]
But no PGN fitcheros of Grand C'escacs are generated, as it is experimental.
Labels for the registration of a game
If you want to register a game, after the initial label, the seven mandatory PGN labels are required (at total of eight, counting the mandatory initial), with some subtle variation. The order of these labels has to be as presented here:
Event
Name of the event; if unknown ?
, if not an organised event CG
acronym for Casual Game.[Event "Barcelona Championship"]
[Event "Moià Championship"]
[Event "CG"]
Site
Location, in the format City, Region Country
, where country is a three-letter ISO code; it can be limited to Region Country
only, or simply to the country code. If the entire location is unknown ?
.[Site "Barcelona, Catalunya ESP"]
[Site "Moià (Barcelona), Catalunya ESP"]
[Site "New York City, NY USA"]
[Site "St. Petersburg RUS"]
Date
Date, in the format year-month-day
, with four-two-two digits, using ?
for every unknown digit.[Date "2020-08-15"]
[Date "2010-07-20"]
[Date "2025-??-??"]
[Date "2031-??-??"]
[Date "201?-??-??"]
Round
For competitions, but also to identify different games of the same match; if not applicable it is indicated with a hyphen ‐
(U+2010), or with the multipurpose hyphen-minus -
(U+002D).- When indicating the
Round
label, consideration should be given to also indicate the EventDate or MatchDate label. - It may be required to indicate different numbers, in competitions, or if different matches are played between two players on the same day; then the numbers are separated by a dot between them:
White
White player:- Surname(s), and then, separated by a comma and a space, the first name. Initials can be used using the letter and a full stop.
- If the player is unknown,
?
is used. - If it is a software program, the name is used, followed by the version.
- It may optionally be followed by the label WhiteAlias.
- It can be omitted, if the WhiteNA label is used instead; then the WhiteAlias tag will be mandatory to make the registration public.
[White "Ferràs, Jaume"]
[White "Noguera, X."]
[White "Prat, J. A."]
Black
Black player, following the same indications as for the White
label.- If the WhiteAlias, label is used, it will be the eighth label.
- It may optionally be followed by the. BlackAlias tag.
- It can be omitted, if the BlackNA label is used.
[Black "Sasal, Cesc"]
[Black "?"]
Result
result of the game, with six different acceptable values:[Result "3-0"]
White wins.[Result "0-3"]
Black wins.[Result "1-1"]
Draw.[Result "2-1"]
White stalemates the Black's King.[Result "1-2"]
Black stalemates the White's King.[Result "*"]
(asterisk) Unfinished game.
- If either the WhiteAlias or BlackAlias label is used, it will be the ninth label, if both are used it will be the tenth tag.
Minimalist registration labels
If a game is not recorded, but movements are recorded to illustrate a concept, even in the case of an exemple
or typical game on paper
, such as the fool's mate, instead of the seven labels for the game record, the label Id is used, always as the second label.
A record using the Id tag will also require the inclusion of the Annotator tag identifying the publisher.
It should be noted that items identified only by a publisher's key are not intended to be exported, nor are they intended to be integrated into a database other than the publisher's own database.
However, they may still represent opening model items that other items may reference with the tag "[model "..."]".
Id
As a value it will have an identifier consisting of letters, numbers and hyphens, consisting of a first part that uniquely identifies the publisher (this website use the publisher identifier Cescacs
), and separated by a hyphen, a unique identifier of this publisher; The publisher has to appear in the first Annotator tag, which will be the third tag, after the mandatory [Variant "C'escacs"]
, followed by [Id "…"]
.
- Publisher identifiers should use a number, combined with a sorting prefix:
O
– Opening sampleC
– Opening continuationZ
– PuzzleP
– ExampleE
– EndingM
– MiddlegameX
– Refutation (counterexample)- …
A particular case is the letter A
, for items of an Annotator registered by the publisher. In this case there will optionally be a second Annotator tag, as the first one will be the publisher's, and obligatorily an AnnotatorId tag. The numerical value of the AnnotatorId will be the number following the letter A
and then a suffix with a unique value among those of this second Annotator.
The functionality of these identification tags is the registration of drafts created by a user (Annotator), where the players are not listed, they are generally unfinished games, and only accessible to Annotator; the equivalence would be:
[Event "CG"]
[Site "?"]
[Round "‐"]
[WhiteNA "Annotator2@Annotator1"] o similar
[BlackNA "Annotator2@Annotator1"] el mateix que WhiteNA
[Result "*"]
The tag [Date "????-??-??"] will in this case be incorporated after the tag [*Id "…"], and in the exceptional case of a completed game, it could then incorporate the tag [Result "..."] with a value; this would relegate the Annotator tag to the fourth or fifth position.
- Suffixes can also be included by separating them with hyphens, to indicate that it is a variation, to indicate the language of the comments, or for both reasons, always ending with the language suffix, if any.
A publisher should only incorporate a version with variations, but may add new alternatives or modify existing ones, identifying the new version with Roman numerals, separated by a hyphen after the letter V
, which indicates the presence of variations. This mechanism never allows the alteration of the main line represented.
A particular variation may be represented linearly, e.g. for readers without the ability to interpret variations. It shall then be indicated by an S
after the letter V
and any version indication in Roman numerals, followed by a sequence of numbers separated by a colon to indicate the variation being represented. It is not permitted a sequence of zeros, which would be equivalent to not indicating variations, corresponding to the identifier without the letter V
.
Example: Cescacs-X01-V-en.
[Id "Cescacs-X01"]
[Id "Cescacs-X01-en"]
[Id "Cescacs-X01-V"]
[Id "Cescacs-X01-V-II"]
[Id "Cescacs-X01-V-ca"]
[Id "Cescacs-X01-V-II-en"]
[Id "Cescacs-X01-V-S:0:1:1-es"]
Optional identifier label
Id
The Id
identifier label can also be used to export games anonymously, preserving the identity of the players, and also allows game fragment records. In this case it is incorporated after the labels that identify the game.- A unique identifier shared by all items in an encounter is used: a publisher's identifier, and separated by a hyphen
‐
(U+2010), or a hyphen-minus -
, an identifier number, which the publisher must ensure is unique. - For a game fragment, after the unique identifier, separated by a hyphen, or a hyphen-minus, we add a prefix and other numbers defining the fragment. The prefixes that would then be used would be:
O
(Opening), the number being the last recorded move.C
(Continuation) using a pair of numbers for the first and the last movement recorded, separated by a hyphen ‐
(U+2010), or a multipurpose hyphen-minus -
. It will usually refer to an opening using the label Model
.M
(Middlegame) Although it will not usually reference an opening, in practice it is equivalent to C
E
(Ending) incorporating as a number the movement from which the record starts.
A question mark (?) shall be used instead of the initial movement number, if the number of the first movement is unknown, but then it is always required to indicate the number of movements recorded, separated by a hyphen ‐
(U+2010), or a hyphen-minus -
.
A letter b
will be added to the first movement number, when the record starts with a move by Black. The case ?b
can then be given to refer to the beginning of the black on an unknown movement number.
A w
shall be added to the number of the last move when the record ends in a move by White that is not the end of the game.
A specific case is the letter A
, for items of an Annotator registered by the publisher. In this case we can find a second Annotator tag, as the first one will be that of the publisher, which can be absent for privacy reasons, but obligatorily an AnnotatorId tag, the identifier that the publisher has assigned to this Annotator; this identifier should allow to locate the individual file card, where the person will determine which data are public.
This feature allows users to register games from players who are not required to be registered; a registered user may accept games from an Annotator as their own, always with privacy in mind.
Other optional labels
EventDate
Date of the event. When it is a Casual Game (CG) it refers to the date of the match, i.e. it can be used instead of MatchDate when [Event "CG"]
MatchDate
Start date of the match. The value is meaningless if no value is given for the Round tag, and is unnecessary when the value is the same as the value of the Date tag, e.g. when the Round tag has the value 1
(or a sequence of numbers ending with the number 1
).Termination
Termination detail; supports the values: abandoned
, rules infraction
, time forfeit
and for indefinitely postponed games: death
or emergency
Lang
Language to be used in comments; the value has to be a two-letter ISO 639 language code (ISO 639-1 alpha-2) or, if required, the three-letter ISO 639-3 code.Title
Very exceptionally, a game may have a name, and this could also be the case for opening or closing situations. Keep in mind that the name will change with the language of the comments, and is not an identifier. Avoid assigning a name for free, and reserve this label for really exceptional cases. In any case it will appear after the Lang label.Revisited
Only for model games, without players. The value shall be the identifier of a game, also a model game, without players. Possible functions of this tag are:- When the identifier is from the same publisher: It leaves the main referenced line as
obsolete
. - When the identifier is from another publisher: Publishing a game from another publisher with the new publisher's own modifications or variations; this involves acknowledgement of authorship.
Model
Only in real games, with players. The value shall be the identifier of a model opening item.Mode
Only in real games, with players. Allows the values: OTB
(over the board), on line modes: ICS
(internet connection sharing, for chess server) or TC
(telecommunication, for P2P programs), and off line modes: EM
(for electronic mail and any other mail/messenger system) or BBS
(Bulletin Board System, for pasive server, no interactive).WhiteType
, BlackType
Only in real games, with players. Both labels allow the values: human
and program
- TimeControl Only in real games, with players. Values:
[TimeControl "?"]
unknown[TimeControl "-"]
not used[TimeControl "number1/number2"]
number1 number of movements in number2 seconds[TimeControl "number"]
total number of seconds ("sudden death")[Timecontrol number1+number2]
number1 seconds, plus number2 seconds for each move- [TimeControl "*number"] number seconds per move
- Concrete exemples:
[TimeControl "40/9000"]
40 moves in 2½ hours (9000 seconds)[TimeControl "4500"]
1¼ hours to sudden death
(4500 seconds)[TimeControl "4500+60"]
1¼ hours and a minute for each move[TimeControl "*180"]
three minutes each move; sandclock
, hourglass
control.
WhiteNA
, BlackNA
network access allows to collect the e-mail address of the players; in an anonymous game they can substitute the labels White and Black, respectively. In this case they are written in the position corresponding to these, assuming the value ? for the substituted label; the export of the game will not always report these values, for confidentiality of digital data.WhiteAlias
, BlackAlias
Nickname, used as an identifier for the White and Black player, respectively. It shall be mandatory if the label WhiteNA
is used instead of the label White
, or BlackNA
instead of the label Black
, to avoid making the values WhiteNA
or BlackNA
public. If used, it shall be written after the label WhiteNA / BlackNA
, and failing that, after the label White / Black
.Annotator
Name of the person who registered and commented on the game, in the same format as the name of the players; there can be more than one label, one per person, but all labels with the identifier Annotator
have to be consecutive; the first one has to be the person responsible for the registration of the game, with contributors and commentators added afterwards. This is an exception, since together with the Example label, these are the only label identifiers that can be repeated.- In the games with
[Mode "ICS"]
or [Mode "BBS"]
the server will be stated as the first Annotator
label, in the same way that in [Mode "TC"]
the P2P program will be stated; likewise, if the game is entered with any other computer program capable of assisting the entry of C'escacs games, it will be stated in the first Annotator
label. Thus, we could say that this first label Annotator
is compulsory in every computerised game. - The user posting the game, if reflected, will be listed on the second label
Annotator
; it will only be the first label when the annotation has been made manually, and will be listed second once the game has been entered into a system with move verification capability.- But if another program subsequently adds automatic comments, the user would be relegated to the third
Annotator
tag; for this reason, in server-side modes ([Mode "ICS"]
or [Mode "BBS"]
) it is advisable to use the AnnotatorId tag.
- If a program, other than the one used for recording the game, subsequently adds automatic comments, it will appear in the second
Annotator
tag; it is important to include it.- It is considered a different program only if there is a change in the edition, the major version number. However, also in this case adding a new
Annotator
tag will be optional, and discouraged if there is not a big jump between versions.
- AnnotatorId This label is reserved exclusively for the user posting the game, when posting on a server-based system (
[Mode "ICS"]
or [Mode "BBS"]
) capable of linking the user to a unique identifier within the server.Note that if the Annotator
label of the game publisher does not appear, the second Annotator
label may contain any annotator or contributor, but the AnnotatorId tag is unique.
Example
Only for model games, without players. The value will be the identifier of a real game, with players. This identifier can be repeated to reference a set of games that follow the same model, always consecutive. The usual thing will be the reference with the Model label, while referencing with the Example label is reserved for exceptional cases, which have given rise to the model. Only the modification of the model is a reason to add new instances of the Example label, usually with new variations.
Label for using alternative piece identifiers
Redefine
Allows to use alternative identification letters for some pieces, always among the predefined ones. If there is a PDTL
label, Redefine
has to be just before it, as it applies also to the PDTL
label tag value, otherwise Redefine
will be the last label.
[Redefine "A@J, C@N, T@R"]
Defines the letter A
for the Bishop, instead of J, the letter T
for the Rook, instead of R, and C
for the Knight, instead of N (Approaches to Español, Lingua italiana or Català).[Redefine "B@J, Q@D, W@V"]
Defines the letter B
for the Bishop, instead of J, the letter Q
for the Queen, instead of D, and W
for the Wyvern, instead of V (Approaches to English).[Redefine "L@J, S@N, T@R, W@V"]
(Approaches to Deutsche Sprache).[Redefine "F@J, C@N, T@R, W@V"]
(Approaches to Français).[Redefine "FAN"]
Use specific Unicode characters for the piece symbols, different for white and black, instead of the identifying letters.
Initial setup label
PDTL
Label which allows to indicate the initial state of the board to resume a game, using as tag value a PDTL string. It must be the last label; the Redefine label also applies to the PDTL string.
C'escacs initial setup
[PDTL "/28:v/27:dk/26:gjg/25:rnnr/24:pejep/23:ppeepp/22:2pjp2/21:3pp3/20:3p3/8:3P3/7:3PP3/6:2PJP2/5:PPEEPP/4:PEJEP/3:RNNR/2:GJG/1:DK/0:V/ w RKRrkr - 0 1"]
C'escacs initial setup: [Redefine "A@J, T@R", C@N"]
[PDTL "/28:v/27:dk/26:gag/25:tcct/24:peaep/23:ppeepp/22:2pap2/21:3pp3/20:3p3/8:3P3/7:3PP3/6:2PAP2/5:PPEEPP/4:PEAEP/3:TCCT/2:GAG/1:DK/0:V/ w TKTtkt - 0 1"]
C'escacs initial setup: [Redefine "B@J, W@V", Q@D"]
[PDTL "/28:w/27:qk/26:gbg/25:rnnr/24:pebep/23:ppeepp/22:2pbp2/21:3pp3/20:3p3/8:3P3/7:3PP3/6:2PBP2/5:PPEEPP/4:PEBEP/3:RNNR/2:GBG/1:QK/0:W/ w RKRrkr - 0 1"]
C'escacs initial setup: [Redefine "FAN"]
[PDTL "/28:🩒/27:♛♚/26:🩓♝🩓/25:♜♞♞♜/24:♟☗♝☗♟/23:♟♟☗☗♟♟/22:2♟♝♟2/21:3♟♟3/20:3♟3/8:3♙3/7:3♙♙3/6:2♙♗♙2/5:♙♙☖☖♙♙/4:♙☖♗☖♙/3:♖♘♘♖/2:🩐♗🩐/1:♕♔/0:🩏/ w ♖♔♖♜♚♜ - 0 1"]
RAV (Recursive Annotation Variation) allow you to annotate alternative moves; each alternative starts with an open parenthesis (
. Inside, the alternative moves are then written, always with their move number, and the variation ends with the closing parenthesis )
.Variation moves
The first character of the first move of a variation is a parenthesis, and the movement number repeats the previous one, but the following moves advance the number, and this could confuse them with the moves of the main line.
Preceding the movement number, or preceding the parenthesis when starting a new imbricated variation, any number of dots can be included, which will be ignored, in the same way as the spaces; the dots allow the level of imbrication to be indicated, the dots being more explicit than a simple indentation with spaces; either way, both techniques make it much easier to read the annotated moves.
Variation label
Adding a label to a variation allows you to reference it from a comment external to the variation. The label is written after the parenthesis, consisting of a number in square brackets preceded by the dollar sign ($[1]
. Different variations can exist for the same move, and the labels assign a number to each variation of the move.
Comments are written between braces { … }
, using lines specifically for this purpose. The opening brace character {
need only appear at the beginning of a line, although it is acceptable for it to be preceded by whitespace; on this line a comment begins, which cannot be nested, so any occurrence of the closing brace character }
will end the comment. The end-of-comment character }
must be the last character on the line, although it is acceptable for it to be followed by whitespace.
A comment can be opened and closed on a single line, but often comments will span multiple lines; only comments (and variations) can span multiple lines, because moves and labels are limited to one per line.
Comments at the start of the game
The comments written before the first move describe the context in which the game is played.
Final comments on the game
Final comments are added after the final result indicator line, after the moves of the game have been completed.
This place is suitable for descriptions of the game; they can also be used to explain circumstances of the ending, or situations that have occurred during the game, freeing the move comments from any kind of anecdotes concerning the development of the game.
Comments on the moves
The comment for a move is always written on a new line, following the line of the move. There may be a maximum of one comment for each player move, unless there is also a comment automatically generated by a program.
A player move comment will start with a reference to the player, either @W
or @B
, and a colon.
The @W
move comment, if present, will precede the @B
move comment.
- Automatically generated comments shall begin with the colon symbol at the start of the comment, written immediately after the open brace.
References within comments
@W
reference to the white player.@B
reference to the black player.- A hextile is referenced using its CTL coordinate, prefixed with a tilde (
~
). - Pieces are referenced using the identifying letters, prefixed with a tilde (
~
). Capital letters are used for white and lower case for black.Some pieces are unique in C'escacs, due to the promotion policy; for White: ~K, ~D, ~V. Bishops can also be referred to uniquely by indicating their colour in square brackets: d
(dark), l
(light) and c
(colour); for White: ~J[d], ~J[l], ~J[c].
If we want to refer to a piece in a position, the CTL coordinate of the position shall be written after the letter of the piece, without separation.
- Reference to moves You may never reference a later move; the commentary must be postponed. Nor may you reference variants other than the current line, except for labelled variants.
- Reference to a move Using the symbol
#
and the number; example: #14
refers to move 14. The movement number always refers to the line or variant in which the comment appears. - Reference to a player's move Example:
#14@B
refers to Black's move on move 14. - Reference to a labelled variant Variant labels allow you to refer to variants from outside the variant itself, always at a later point in time. Example: #14[#12.2] refers to move #14 of the variant defined from move #12 labelled $[2], while #14[#12.2]@W refers explicitly to its White's move, #12.2 refers generically to all the moves of the variant, and #12[#12.2] refers explicitly to the alternative move #12 of the variant [2] that is defined in move #12.
Also, when nesting exists, we can traverse the variations, as long as there are labels all the way through. Example: #16[#14.1#12.2] indicates move #16 in the variant defined from move #14 labelled $[1], which is inside the variant defined from move #12 labelled $[2] (note the reverse order).
- A NAG (Numeric Annotation Glyphs) code, numeric prefixed with $ particularly in automatically generated comments. Example:
$24
— White has a slight space advantage.
[Variant "C'escacs"] [Event "CG"] [Site "Barcelona, Catalunya ESP"] [Date "2021-06-04"] [Round "‐"] [White "Mestre, Rut"] [Black "Sasal, Cesc"] [Result "*"] [Annotator "Cescacs"] [Annotator "Sasal, Cesc"] [Lang "en"]
{ Introduction to C'escacs }
1. E7‐E13, E21‐E15 2. EE5-E11, G21‐G15
{ @W: ~E defends ~PE13. @B: opens column G }
3. G7-E13: *
{ unfinished }
[Variant "C'escacs"] [Id "Cescacs-X01-en"] [Lang "en"] [Title "Fool's mate"] 1. H6-H12 ?!, I23-I19 ?!
{ @W: curious pawn to open }
{ @B: plays along with it }
2. JF6-C15 ?!, GH26-Z11 ?!
{ @W: ~J to cover line 15 but neglects defence of ~K }
{ @B: ~g's premature move to ~Z11 is very unorthodox }
3. L5-L7, NG25-L17 ?!
{ @B: Initial movement of ~n also to the flank }
4. EH4-H8 ??, GZ11-L5
{ @W: Removing ~EH4 leaves ~K unattended }
5. I5-I9 ??, NL17-G9
{ @W: Has ignored threats }
{ @B: Positions ~n }
6. K4-K10 ??, GL5-H6#
{ @W: Last chance for a reaction wasted }
0-3
{ @B Must neglect ~JF6 and ~EH4 }
{ @W Attack ~K to knight's leap with ~g i ~n }
[Variant "C'escacs"] [Id "Cescacs-X01-V-en"] [Lang "en"] [Title "Fool's mate"] 1. H6-H12 ?!, I23-I19 ?!
{ @W: curious pawn to open }
{ @B: plays along with it }
2. JF6-C15 ?!, GH26-Z11 ?!
{ @W: ~J to cover line 15 but neglects defence of ~K }
{ @B: ~g's premature move to ~Z11 is very unorthodox }
3. L5-L7, NG25-L17 ?!
{ @B: Initial movement of ~n also to the flank }
4. EH4-H8 ??, GZ11-L5
{ @W: Removing ~EH4 leaves ~K unattended }
(4. GD2-F6
.{ @W would avoid ~gL5-H6+^ }
) 5. I5-I9 ??, NL17-G9
{ @W: Has ignored threats }
{ @B: Positions ~n }
(5. GD2-F6
.{ @W is still in time to avoid ~gL5-H6+^ }
) (5. K4-K10 ??, GL5-H6+^
.{ @W: Displacing P threatens ~gL5 with ~RI3 }
.{ @B: Check without reinforcement will not succeed, but will capture ~RI3 }
.6. KG1-H4, GH6×RI3 .(6. …, GH6-K12) .7. KH4×GI3) 6. K4-K10 ??, GL5-H6#
{ @W: Last chance for a reaction wasted }
(6. GD2-F6
.{ @W there was still time to avoid ~gL5-H6+^ }
) (6. RI3-I7
.{ @W another alternative to avoid ~gL5-H6+^ }
) 0-3
{ @B Must neglect ~JF6 and ~EH4 }
{ @W Attack ~K to knight's leap with ~g i ~n }
[Variant "C'escacs"] [Event "CG"] [Site "Barcelona, Catalunya ESP"] [Date "2023-09-08"] [Round "‐"] [White "Sasal, Cesc"] [Black "Sasal, Cesc"] [Result "0-3"] [Id "Cescacs-A0001-91"] [Annotator "Cescacs"] [Annotator "Sasal, Cesc"] [AnnotatorId "0001"] [Lang "en"]
{ H6-H12 }
1. H6-H12, H22-H16 2. H12-H14, EH24-H20 3. I5-I11, I23-I17 4. I11-I15, L23-L21 5. G7-G11, K24-K18 6. EG5-H8, G21-G15 7. EH8-I11, G15-G13 8. JF4-L19, RI25-I21 9. JL19-K16, NE25-G21 10. GH2-L11, GH26-K20 11. VF0-G5, RI21-I25 12. GL11-X16, RI25-H26 13. GX16×L21, JF24-H24 14. VG5-K8, C23-C17 15. C5-C11, GD26-B22 16. B4-B10, GB22-T16 17. ED4-C7, ED24-C21 18. NG3-L11, D22-D16 19. D6-D10, C17-C13 20. NL11-X16, GK20-G19 21. VK8-Z11, C13×D10 22. E7×D10, D16-D12 23. C11@D14, EC21-D18 24. B10-C11, VF28-D24 25. JF6-B18, RC25×C11 26. JB18×VD24, DE27×JD24 27. EE5-D8, RC11-C9 28. NE3-B4, RC9-A11 29. NB4-T8, DD24-B18 30. F8-E9, ED18×D14 31. GD2-F8, E21-E15 32. RI3-I9, E15-E13 33. RI9-Z13, E13-D12 34. RZ13-Z21, D12×E9 35. GF8-G3, DB18-C21 36. RZ21×RH26+^, JF26×RH26 37. RC3-B4, DC21-F12 38. DE1-E3, ED14-D12 39. EC7-C9, ED12×EC9 40. DE3×EC9, RA11-F16 41. DC9-C23+∞, EG23-F26 42. RB4-E7, EE23-D26 43. DC23-D24, DF12×JF2#
[Variant "C'escacs"] [Id "Cescacs-A0001-24"] [Annotator "Cescacs"] [AnnotatorId "0001"] [Date "2020-07-20"] [Result "0-3"] 1. E7-E13, E21-E15 2. F8-F12, F20-F16 3. E13×F16, E15×F12 4. EG5-F8, EG23-F20 5. G7-G13, F12@@G9 6. JF6×G9, EF20×F16 7. JF4-D10, NE25-C15 8. EE5-E7, NC15-F14 9. EF8-F12, EE23-E19 10. EF12×NF14, EF16×EF14 11. JF2-D8, EE19-E17 12. EE7-E11, EF14×EE11 13. JD8×EE11, EE17-E13 14. JD10×EE13, DE27×JE13 15. GH2-F8, DE13-B10 16. NE3-C7, DB10-D10+∞ 17. NG3-E7, GD26×L5 18. GD2-E5, DD10-K10 19. I5-I7, DK10-K6 20. RI3-H2, GL5×GE5+^ 21. DE1×GE5, KRD-DE 22. JE11×A23, GH26-G23 23. DE5-A17, JF26-E23 24. NE7-C17, D22-D20 25. NC17-T18, JF22-C13+∞ 26. KG1-E1, DK6-E21+∞ 27. VF0-E5, DE21-K16+∞ 28. KE1-D2, JE23-K8 29. NT18-B22+^, KD26-C25 30. JA23×C23, GG23×JC23 31. GF8-B20+^, GC23×GB20 32. DA17×GB20, RE27×VE5 33. DB20-C19+∞, ED24-C21 34. RH2×RE5, DK16-F20 35. DC19-E25#
{ these were the previous moves }
1. E7-E13, E21-E15 2. F8-F12, F20-F16 3. E13×F16, E15×F12 4. EG5-F8, EG23-F20 5. G7-G13, F12@@G9 6. JF6×G9, EF20×F16 7. JF4-D10, NE25-C15 8. EE5-E7, NC15-F14 9. EF8-F12, EE23-E19 10. EF12×NF14, EF16×EF14 11. JF2-D8, EE19-E17 12. EE7-E11, EF14×EE11 13. JD8×EE11, EE17-E13 14. JD10×EE13, DE27×JE13 15. GH2-F8, DE13-B10 16. NE3-C7, DB10-D10+∞ 17. NG3-E7, GD26×L5 18. GD2-E5, DD10-K10 19. I5-I7, DK10-K6 20. RI3-H2: *
[Variant "C'escacs"] [Id "Cescacs-A0001-24"] [Annotator "Cescacs"] [AnnotatorId "0001"] [Date "2020-07-20"] [Result "0-3"]
[DPTL "/28:v/27:1k/26:1jg/25:r1nr/24:pejep/23:pp2pp/22:2pjp2/21:4p3/11:3J4/9:4J3/8:3G3/7:2NN1P2/6:2P1Pd1/5:PPG2g/4:PE1EP/3:R3/2:2R/1:DK/0:V/ b KRrkr - 2"]
{ Don't remember move was the 20th; DPTL without movement number }
1? …, GL5×GE5+^ 2. DE1×GE5, KRD-DE 3. JE11×A23, GH26-G23 4. DE5-A17, JF26-E23 5. NE7-C17, D22-D20 6. NC17-T18, JF22-C13+∞ 7. KG1-E1, DK6-E21+∞ 8. VF0-E5, DE21-K16+∞ 9. KE1-D2, JE23-K8 10. NT18-B22+^, KD26-C25 11. JA23×C23, GG23×JC23 12. GF8-B20+^, GC23×GB20 13. DA17×GB20, RE27×VE5 14. DB20-C19+∞, ED24-C21 15. RH2×RE5, DK16-F20 16. DC19-E25#
[Variant "C'escacs"] [Event "CG"] [Site "Barcelona, Catalunya ESP"] [Date "2022-08-14"] [White "Ros, Xus"] [Black "Sasal, Cesc"] [Id "Cescacs-A0001-43"] [Annotator "Cescacs"] [Annotator "Sasal, Cesc"] [AnnotatorId "0001"] [Result "0-3"] [Annotator "Cescacs"] 1. E7-E13, E21-E15 2. EE5-E9, EE23-E19 3. D6-D12, E15×D12 4. EE9×D12, EE19-E17 5. E13-E15, C23-C17 6. C5-C11, C17-C15 7. ED12-D14, EE17×ED14 8. C11×ED14, D22-D16 9. E15@D18, JF24×D18 10. A5-A9, B24-B18 11. B4-B10, B18-B14 12. A9-A11, B14×A11 13. GD2×A11, JF26×GA11 14. B10-C11, ED24-D20 15. JF4-A19, JF22-B22 16. JA19-B16, DE27-B18 17. JB16-D10, JB22-D16 18. NE3-C7, JA11-P17 19. GH2-I7, RC25-E23 20. ED4-E7, GD26-T14 21. NG3-A5, GT14-B8 22. RC3-B4, GB8-C5 23. DE1-C3, GC5×JD10 24. NA5-C9, GD10-F14 25. RB4×DB18, JD18×RB18 26. NC9-B14, GH26-K22 27. EE7-E11, GK22-E7+∞ 28. KG1-E1, GE7×DC3 29. JF6-E3, GC3-E7 30. VF0-E5, JD16-C13 31. EE11×GF14, GE7-G1+^ 32. RI3×GG1, JC13×RG1+^ 33. VE5×JG1, ED20-D16 34. NC7-G15, C15-C13 35. GI7-F16, NE25-A17 36. GF16-D20, RE23-E21 37. GD20-C17, RE21-C23 38. GC17-D20, RC23-D22 39. GD20-E15, VF28-E23 40. GE15-H16, I23-I19 41. GH16-X16, KRK-II 42. NG15-I25, RI21-X18 43. GX16-Z13, RX18-X6 44. VG1-E5, RX6-E13 45. VE5-C3, RE13×JE3+^ 46. KE1-G1, VE23-E9 47. GZ13-L9, VE9-B6 48. GL9-C9, RE3×JF2+^ 49. VC3×RF2, VB6-D10 50. GC9-D6, VD10-E5#
[Variant "C'escacs"] [Event "CG"] [Site "Barcelona, Catalunya ESP"] [Date "2022-08-14"] [White "Sasal, Cesc"] [Black "Ros, Xus"] [Id "Cescacs-A0001-44"] [Annotator "Cescacs"] [Annotator "Sasal, Cesc"] [AnnotatorId "0001"] [Result "3-0"] [Annotator "Cescacs"] 1. E7-E13, E21-E15 2. F8-F12, F20-F16 3. E13×F16, E15×F12 4. EG5-F8, EG23-F20 5. G7-G13, F12@@G9 6. JF6×G9, EF20×F16 7. JF4-D10, NE25-C15 8. EE5-E7, NC15-F14 9. EF8-F12, EE23-E19 10. EF12×NF14, EF16×EF14 11. JF2-D8, EE19-E17 12. EE7-E11, EF14×EE11 13. JD8×EE11, EE17-E13 14. JD10×EE13, DE27×JE13 15. GH2-F8, DE13-B10 16. NE3-C7, DB10-D10+∞ 17. NG3-E7, GD26×L5 18. GD2-E5, DD10-K10 19. I5-I7, DK10-K6 20. RI3-H2, GL5×GE5+^ 21. DE1×GE5, KRD-DE 22. JE11×A23, GH26-G23 23. DE5-A17, JF26-E23 24. NE7-C17, D22-D20 25. NC17-T18, JF22-C13+∞ 26. KG1-E1, DK6-E21+∞ 27. VF0-E5, DE21-K16+∞ 28. KE1-D2, JE23-K8 29. NT18-B22+^, KD26-C25 30. JA23×C23, GG23×JC23 31. GF8-B20+^, GC23×GB20 32. DA17×GB20, RE27×VE5 33. DB20-C19+∞, ED24-C21 34. RH2×RE5, DK16-F20 35. DC19-E25#
A minimum reader is limited to reading the moves in the CTL-AN section, which must be algebraically correct; that is, the CTL coordinates must be correct, each move must represent an existing piece at the origin, and the destination must be a free hextile, or in the case of a capture, the captured piece must also exist, just as the captured pawn must exist in the en passant or scornful pawn capture. Promotion requires a pawn in the position of promotion, and in castling the final places for the pieces must be available. On the other hand, the rules of the game will not be checked, accepting what is indicated algebraically: neither the movements of the pieces, nor the checks, nor any other rule, only algebraic coherence, but the reader must generate an error if this algebraic coherence is not satisfied.
Labels incorporate meta-information useful for the storage and classification of items, comments and variations add additional information. Only the Redefine
label and the PDTL
label affect the content.
A minimum reader will check the initial label and can ignore the rest of the labels; although it will be convenient to read the PDTL
label, generating an error if it is not able to process it, and similarly for the Redefine
labels. A minimum reader must be able to read a CTL-PGN file with no variations, no comments, no alternative piece identification letters, i.e. no Redefine
labels, and can ignore any labels except the required initial label.
Redefine
labels modify the content, and removing them requires a prior conversion. A pre-filter can remove them by transforming the file, removing also comments, variations and even ratings, leaving a clean input, with only the rest of the labels, which the minimal reader should be able to ignore.
The PDTL
label incorporates a necessary context to represent a game already started, and, if the reader is not able to interpret it, verifying its presence allows early detection of algebraic incoherence. The initial label [Variant "C'escacs"]
guarantees the type of content, and will always be a requirement.