Check out Grant Acedrex, our featured variant for April, 2024.


[ Help | Earliest Comments | Latest Comments ]
[ List All Subjects of Discussion | Create New Subject of Discussion ]
[ List Earliest Comments Only For Pages | Games | Rated Pages | Rated Games | Subjects of Discussion ]

Comments by FergusDuniho

EarliestEarlier Reverse Order LaterLatest
Game Courier Tournament 2019. Chess Variant Tournament to be played on Game Courier.[All Comments] [Add Comment or Rating]
🕸Fergus Duniho wrote on Tue, Nov 5, 2019 10:23 PM UTC:

I now have a working preset for Metamachy at this URL:

https://www.chessvariants.com/play/pbm/play.php?game%3DMetamachy%26settings%3Ddefault

Just to make sure everything is working, it could use some beta-testing before it's used in the tournament.


Game Courier. PHP script for playing Chess variants online.[All Comments] [Add Comment or Rating]
🕸💡📝Fergus Duniho wrote on Tue, Nov 5, 2019 10:28 PM UTC:

This is a big game of the sort I'm not too familiar with. It would help if you would play a game against yourself up until the promotion move you're having trouble with, then give me a link to the game, so that I can try to figure out something.


Game Courier Tournament 2019. Chess Variant Tournament to be played on Game Courier.[All Comments] [Add Comment or Rating]
🕸Fergus Duniho wrote on Wed, Nov 6, 2019 05:46 PM UTC:

With en passant, the bpr variable for Black's Pawn Rank had the wrong value. For the King's two-space leap, it was checking whether the destination was empty, which works only for potential moves, rather than checking whether a capture had been made. I have fixed these now, and you can test whether anything is still not working.


🕸Fergus Duniho wrote on Wed, Nov 6, 2019 05:58 PM UTC:

I just made some more fixes to how the King's two-step leap is handled in the stalemated subroutine, so that only legal moves are displayed.


🕸Fergus Duniho wrote on Wed, Nov 6, 2019 06:22 PM UTC:

I made some more fixes to the King's two-space leap in the subroutines for moving the King. They now give informative messages about particular reasons why an illegal move is illegal. Since I used restore to check whether the King was in check, I went back to checking whether the destination space was empty.


Game Courier Logs. View the logs of games played on Game Courier.[All Comments] [Add Comment or Rating]
🕸📝Fergus Duniho wrote on Wed, Nov 6, 2019 06:29 PM UTC:

The last Kibbitz comment was 438 days ago. When I got rid of the play subdomain and put everything on one main domain, I started using the same footers for all pages. It looks like I did not add Kibbitzing code to the main footer that replaced the play subdomain's footer. I'll get on that in a while.


Game Courier. PHP script for playing Chess variants online.[All Comments] [Add Comment or Rating]
🕸💡📝Fergus Duniho wrote on Thu, Nov 7, 2019 02:20 AM UTC:

se 3f-4e; se 3f-4e;

This might be what is illegal. You are making the same move twice in a row. When you repeat the same move you just made, the se piece has already moved from 3f, and that space should now be empty. 


🕸💡📝Fergus Duniho wrote on Thu, Nov 7, 2019 01:25 PM UTC:

Looking at your code, I found continuemove in the Post-Game sections, and I found askpromote in some of your subroutines. These are the only parts of your code that I would expect to be able to update the moves the player entered. I'm not sure that continuemove works properly in the Post-Game sections. At least I've been using it in the Post-Move sections instead. In the Post-Game section, you're asking it to continue a move that has already been completed, and that may be a problem. But I would have to experiment with it to say for sure. Unfortunately, looking at my code for it doesn't give me any insight into what to expect.


🕸💡📝Fergus Duniho wrote on Fri, Nov 8, 2019 11:31 PM UTC:

Show me the series of moves that led up to the position in Extra Move Chess that revealed this problem.


🕸💡📝Fergus Duniho wrote on Sat, Nov 9, 2019 04:18 PM UTC:

It was preserving the value of $pastmoves after prepending it to the value of $moves, which caused it to be prepended again with a double move. To fix this, I set both $pastmoves and $_POST["pastmoves"] to the empty string after prepending its value to $moves. I had to set the latter to it, because I was using a function called copyformdata(), which recreates the form data from the previous form.


🕸💡📝Fergus Duniho wrote on Sun, Nov 10, 2019 04:12 PM UTC:

As a test, I temporarily undid it, but the problems with these two logs remained. Each involves a Pawn moving twice on the same turn. I'll look into it further.

It specifically involves a Pawn moving one space forward after moving two spaces forward. Any other moves by the same Pawn are okay, and it's okay to move any other piece I've checked twice in a row.

The problem seems to be due to the ep1 variable being set. Since a Pawn's normal double move sets this variable, it is set when the Pawn is moving forward a second time, and it tries to evaluate it as an en passant move, which it isn't.

It is now fixed by adding the condition and != #ep1 #from to each line checking whether the move is an en passant move. This indicates that if the move is coming from the space previously marked as #ep1, it is not an en passant move.


Marseillais Chess. Move twice per turn. (8x8, Cells: 64) (Recognized!)[All Comments] [Add Comment or Rating]
🕸Fergus Duniho wrote on Mon, Nov 11, 2019 02:28 AM UTC:

While fixing a bug in the Game Courier code, I came across a situation that is not clearly covered by the rules. Suppose a Pawn makes its usual first-move double move, then it moves forward one more space on the same turn, so that it moves a total of three spaces forward. Can it be captured by en passant if the opponent has a Pawn in the usual position? On the one hand, it has made a double move, and a Pawn that makes a double move can normally be captured by en passant. On the other hand, it is no longer on the space it moved to when making its double move, and if the player had wanted to, he could have moved the Pawn forward one space, then captured the Pawn that was in a position to capture it by en passant if it had made a double move.

For now, I have written the code to forbid en passant capture in this situation. Does anyone know if there is any precedent for allowing en passant capture in this situation?


🕸Fergus Duniho wrote on Mon, Nov 11, 2019 04:37 PM UTC:

I changed it to allow en passant only when the Pawn's double move is a player's second move, and I confirmed that this change did not break any past game. But as I was rewriting the rules, one more thing occurred to me. Suppose a Pawn's double move done on the first move puts a King in check, thereby ending the turn without a second move. If this check could not be ended with an en passant capture, this could allow a King to be checkmated in a position that would not be checkmate in Chess, and this would violate the intention behind the game.

So, I think we have to exclude the rule that en passant is allowed only when a Pawn makes a double move on the second move of the turn. This could be replaced with the rule that en passant is allowed only when the double move was the opponent's last move, or it could be replaced with the rule that en passant is allowed only when the Pawn that made a double move didn't make another move after it. For the meantime, I'll change it back to the latter.


🕸Fergus Duniho wrote on Mon, Nov 11, 2019 08:26 PM UTC:

The earliest source I can find is Pritchard's 1997 Encyclopedia, which is the source Hans originally used to write this page. It says "En passant is legal if the opponent moved a pawn two squares on either of his moves but the capture must be made at once. However, if the opponent made two two-square pawn moves, both pawns can be taken e.p. This last rule is credited to Alekhine by F. Palatz in an article on the subject (LEC Sep 1928)." LEC refers to L'Echiquier. Notably, Alekhine is not one of the inventors, and how the game should handle en passant might be something that the original inventors didn't think of. It is also unknown whether the game was invented by Fortis or by de Queylar. It has been attributed to each one, but its origins are murky.

Regarding one of the alternative rules, it says "The game was sometimes played with alternative rules: a check on the first move was illegal and a player could not capture e.p. if the pawn had been moved in the first part of the player's turn." It's very possible that Fortis and de Queylar invented similar games with slightly different rules that eventually got conflated together.

The rule that Greg Strong and H. G. Muller propose has the advantage of being the simplest to program. It works with code that has already been written for Chess. Of course, the original inventor of the game would not have had this in mind, since programming games was not an option when it was invented. However, the rules as initially described above can be programmed, and that's what I have done in Game Courier. The only issue with them is that they need emendation for a Pawn that moves twice on the same turn. If we keep those rules, then en passant capture should be impossible in this instance, or it should be allowed for the Pawn on its new space. I have the former programmed right now, whereas the latter would be trickier to program.


🕸Fergus Duniho wrote on Tue, Nov 12, 2019 02:54 AM UTC:

So if the player moved a pawn two spaces and the placed a piece on the square passed over you would allow capture of both with a single move? 

The way it is coded, that would not happen. The first thing it checks for is an ordinary diagonal capture. If the move involves one, that's what it does, and it doesn't get around to checking for an en passant move.

I have started to look at the thread you provided a link to, and I will continue to look at it tomorrow.


🕸Fergus Duniho wrote on Tue, Nov 12, 2019 04:29 PM UTC:

What I cannot imagine is that the original inventor would have thought it reasonable to allow e.p. capture

  1. when the capturing Pawn has not seen the other one move past it
  2. when the Pawn that moved is no longer there
  3. when the e.p. square gets occupied

That's all reasonable, and what I've coded for Game Courier is in conformity with it. The first one is already handled by the rule that en passant is not allowed on the second move unless the player is making two en passant captures. This prevents a player from using his first move to move a Pawn into position to do an en passant capture. (Note that a Pawn that was already in the position to do this could just capture the double-moved Pawn normally and then use its second move to go to the space the now captured Pawn had passed over, reaching the same position without using en passant.)

The second is handled by setting the ep1 variable to false whenever a player moves the same Pawn again. Since ep1 would store the position of the previously moved Pawn if the last move were a Pawn move, it checks whether the second move is from that location.

The third is handled by checking for a normal capture before checking for other types of Pawn moves. If the move is a normal capture, it never gets to the code for en passant. If it's not a normal Pawn capture, then the move was to an empty space. By the time it reaches the elseif clause for en passant, it has already been determined that the space is empty.

 


🕸Fergus Duniho wrote on Tue, Nov 12, 2019 10:05 PM UTC:

One more issue has come up. Suppose that a player makes a first move that leaves him with no legal second move. Does this end his turn like a checking move would, or does it end the game in a draw? Pritchard says in Popular Chess Variants, "A player who is not in check and cannot complete his turn is stalemated." This suggests the latter, but he could have said it more explicitly if that is what he meant. Is there any consensus on how being unable to move on the second move should be handled?


Game Courier History. History of the Chess Variants Game Courier PBM system.[All Comments] [Add Comment or Rating]
🕸💡📝Fergus Duniho wrote on Tue, Nov 12, 2019 10:17 PM UTC:

I have added an Advanced section to the Edit form. This includes a couple options that can be checkmarked. One of them was already included in the Edit form. The new one is the option "Do Not Include Moves in Code." For most games, this option should not be checked. And for unprogrammed games, it should never be checked. It's useful if you handle the execution of moves within your code. What this does is stop Game Courier from automatically adding the moves in a game to the code it generates for the game. If your game is not programmed, the result is that moving pieces will not work.

I added this option, because when I castled in Marseillais Chess and then tried to move the Rook that had just castled, it wouldn't let me, giving me the error message that the Rook was not on the space I was trying to move it from. I realized this was happening, because it would automatically execute all the moves before evaluating any of them. But I didn't need to include that in my code, because my code for Marseillais Chess would normally undo the latest moves, then replay them individually. Given that it was already doing that, I could just remove the moves it was undoing. So, I added the option to remove them.


Marseillais Chess. Move twice per turn. (8x8, Cells: 64) (Recognized!)[All Comments] [Add Comment or Rating]
🕸Fergus Duniho wrote on Wed, Nov 13, 2019 03:02 PM UTC:

I hadn't thought of that interpretation, but it is more computationally complex than the ones I was considering. It would involve testing a position for legal moves, then trying out each legal move and testing it for legal moves until at least one legal move is found. Also, I normally handle checking for stalemate in the Post-Game sections to minimize its computational cost, but if a move were to be illegal if it had no follow-up move, the code would have to check for double levels of stalemate in the Post-Move sections, and that would significantly raise the computational load of the code.

The two interpretations I was considering were to allow only one move when no second move is legally available or to end the game in a draw when a second move is not available. Another alternative would be to end the game as a loss for the player who does not have a second move available. This would discourage players from deliberately stalemating themselves just as well as making it illegal would, and it could be done with far less computational complexity.


🕸Fergus Duniho wrote on Wed, Nov 13, 2019 04:44 PM UTC:

Using the Zillions-of-Games version of Marseillais Chess by Young-Hyun Joo, I moved pieces until I got a position where one side used the first move to move into a position with no second move. When I tried to move again, it declared the game a draw.

While I generally don't like the idea of a player being able to draw a game by stalemating himself, it is also a difficult thing to do until the endgame, and giving each player two moves should normally allow the player who is ahead to force checkmate all the more quickly. So, in this game, it may mitigate the greater advantage of the player who is ahead and give the player who is behind greater hope of being able to draw the game without really making the game too drawish.

This rule comes from a reading of Pritchard, and given how he mangled all of my games that ended up in the revised version of his Encyclopedia, I don't trust him. But he is also the only source I have. I would like to find the article written by Fortis, but it may not be on the web. Since I don't have a serious objection to it, and since it is computationally less expensive than some other options, I'll probably go with it unless someone has a more authoritative historical source than Pritchard.

Checking how en passant works in the same Zillions script, it works as I have programmed it except that it allows the capture of two pieces when a piece has moved to the space a pawn just passed over with its double move. I suspect that if capturing two pieces at once were allowed, this would have been mentioned explicitly in the rules. My interpretation is that since en passant means "in passing," the idea is that an en passant capture happens during the pawn's move and not after another move. In that case, the new piece would not yet be on that space when the en passant capture actually happens, and a double capture would not be possible then. Given this, a pawn who captured by en passant on that space should itself be captured, leaving the piece that moved to that space still standing. But this would overcomplicate the game, and it is easier to say that moving the piece there caused the enemy pawn to lose its chance to capture by en passant but compensated for this by giving it another piece to capture. So, I don't support allowing double captures.


🕸Fergus Duniho wrote on Wed, Nov 13, 2019 04:50 PM UTC:

I don't know if the interface already commits the user to the first move after he entered it. If not, and he can still take it back, you don't really have to do anything.

This comment popped up while I was writing my last one. The interface does not commit a user to a move until it is complete.

Whatever he does for the second move will be rejected as illegal, so sooner or later he will decide to try another first move.

That's how it currently works. A player without any legal move on his second move is unable to proceed and must go back and make a different move to complete his move. The problem comes in when a player has only one legal move, and that puts him in a position without any more legal moves. In that case, the player is unable to move at all, and all he can do is resign or wait for the clock to time out. I would rather have something cleaner than that.


🕸Fergus Duniho wrote on Wed, Nov 13, 2019 08:10 PM UTC:

I think I figured out how to interpret the rule in a way that uses stalemate but avoids the problem of letting a player deliberately move into stalemate. This is the interpretation that if a player does not have any combination of two legal moves, the game ends in stalemate at the very beginning of his turn. I could do it like this. After checking for regular check and stalemate in the Post-Game sections, I could try out the available legal moves to see if any are followed by legal moves, stopping as soon as I find at least one. For this, I would use a subroutine that returns false as soon as one legal move is found and does not take the time to go through all possible moves and calculate a list of legal moves. Since there are plenty of legal moves when lots of pieces are on the board, and a position without any combination of two legal moves would be most likely in a position with few pieces left, there should not be a heavy computational load for doing this.


🕸Fergus Duniho wrote on Thu, Nov 14, 2019 05:59 PM UTC:

For the sake of testing some endgame positions as I write the code, here is a game where I played both sides just to get a stalemate position.



🕸Fergus Duniho wrote on Thu, Nov 14, 2019 08:27 PM UTC:

Here's an example of what I'm calling a second-order stalemate. Black is not in check but has only one legal move.



🕸Fergus Duniho wrote on Thu, Nov 14, 2019 08:33 PM UTC:

One more question remains. While the rules seem to allow for second-order stalemate when the King is not in check, what about when the King is in check? Should this count as checkmate or stalemate? From the understanding that checkmate is check plus stalemate, we could argue that check plus second-order stalemate is also checkmate. Or, we might argue that the ability to escape check, even if no follow-up move is possible by any means of escaping check, constitutes only stalemate. Here's an example:



🕸Fergus Duniho wrote on Thu, Nov 14, 2019 09:20 PM UTC:

Aside from trying to reconstruct the original Marseillais Chess, I would like to propose a game I might call Simplified Marseillais Chess, which is designed with programming it in mind. It would follow the rule of Balanced Marseillais Chess of giving White only one move at the start of the game, it would allow en passant capture only of a Pawn moved on the last part of a player's turn, it would have a turn end with one move if there were no legal moves to follow it, and it would work with normal stalemate and checkmate on a player's first move. I think those are the main differences from regular Marseillais Chess. Is there anything I have overlooked?


🕸Fergus Duniho wrote on Fri, Nov 15, 2019 04:16 PM UTC:

Is there any French speaker here who can provide an accurate English translation of this? Google translate is not good enough to make it clear.

Les échecs marseillais sont une variante du jeu d'échecs où chaque joueur joue deux coups à la suite. En plus des règles du jeu normales, les joueurs doivent respecter les règles suivantes :

  • Un joueur en situation d'échec doit parer l'échec au premier de ses deux coups.
  • Si un joueur fait échec au roi au premier coup, il perd la faculté de jouer son deuxième coup.
  • Si après avoir joué son premier coup, un joueur se trouve dans une situation où il lui est impossible de jouer un coup légal, il est déclaré pat.
  • La prise en passant doit être effectuée au premier coup sauf si deux prises en passant sont possibles. Dans ce dernier cas, les deux prises en passant peuvent être effectuées à chacun des deux coups.
  • L'avance de deux cases des pions depuis leur position initiale ne peut pas être considérée comme un coup double (avance de deux fois une case). Donc le joueur peut jouer ensuite son deuxième coup.

Caïssa Britannia. British themed variant with Lions, Unicorns, Dragons, Anglican Bishops, and a royal Queen. (10x10, Cells: 100) [All Comments] [Add Comment or Rating]
🕸💡📝Fergus Duniho wrote on Sat, Nov 16, 2019 05:19 PM UTC:

Done, and I moved the ASCII diagram to the ALT text of the image.


Marseillais Chess. Move twice per turn. (8x8, Cells: 64) (Recognized!)[All Comments] [Add Comment or Rating]
🕸Fergus Duniho wrote on Sat, Nov 16, 2019 05:29 PM UTC:

Since you brought up the rule in Shogi against checkmating a King in Shogi with a Pawn drop, I checked how I handled it in Game Courier. I handled it similarly. After checking for checkmate in the Post-Game code, my code checks whether the checkmate was due to a Pawn drop, and if it was, it reports an illegal move instead of concluding the game.


Game Courier Tournament 2019. Chess Variant Tournament to be played on Game Courier.[All Comments] [Add Comment or Rating]
🕸Fergus Duniho wrote on Sun, Nov 17, 2019 01:36 AM UTC:

I don't know exactly what the issue is (and there could be more than one) but part of it seems to revolve around the fact that the rules for Bishop moves are complicated, and I've codified them nicely in subroutines "B" and "b", but the architecture seems to want the 1-line fn defs, which don't seem to support if-then-else, and my attempts to have a def B pass off to a gosub B doesn't seem to work either.

I tried out your Symmetric Chess preset. The conversion rule seems to be enforced correctly, but conversion moves are not displaying as legal moves, and when a Bishop must convert, it is incorrectly displaying illegal moves as legal. As you correctly surmise, this is because you do not have the b and B functions defined.

While functions do not support if-then-else, as such, they do support cond, which works like the ? and : operators. They can also use and, or, nand, nor, onlyif, and unless. You can look at the functions for other divergent pieces, such as the Pawn or the Cannon, for examples of how to handle this. Here are some examples from chess3. If you understand the logic behind these, you should be able to figure out how to handle the Bishops conversion rule.

def C cond cond empty #0 capture (not empty #1) (checkhop #0 #1 0 1) (checkride #0 #1 0 1) and #1;

def P
remove var ep
and < rankname #1 var bpr
and < rankname var ep rankname #1
and == filename var ep filename #1
and checkleap #0 #1 1 1
or and checkride #0 #1 0 1 == rankname #0 var wpr
or checkleap #0 #1 0 1
and empty #1
or and islower space #1 checkleap #0 #1 1 1
and <= distance #0 #1 var fps
and > rank #1 rank #0;

Remember that Game Courier evaluates functions from right to left, and many of the logical operators will work with either one or two operands. In the Pawn example, the logical operators are normally taking only one operand. When and receives a lone true value, it lets the function continue silently, but if it receives a false value, it returns a false value and exits. When or receives a lone false value, it lets the function continue silently, but if it receives a true value, it returns a true value and exits. If you still need more help, just ask.


🕸Fergus Duniho wrote on Sun, Nov 17, 2019 03:43 AM UTC:

These look like they will work, but they could be optimized better. They repeat the same operations multiple times, and they don't evaluate the most common type of move first. Also, the first or in each, which is the one to be evaluated last, is unnecessary.


🕸Fergus Duniho wrote on Mon, Nov 18, 2019 01:17 AM UTC:

Here are some optimized versions of the B and b functions:

def B 
== #0 c1 
and flag wccanconvert 
or and == #0 g1 flag wgcanconvert
and checkleap #0 #1 1 0
and empty #1 
or and checkride #0 #1 1 1 or color #0 nor flag wcmustconvert flag wgmustconvert;

def b
== #0 c8 
and flag bccanconvert 
or and == #0 g8 flag bgcanconvert
and checkleap #0 #1 1 0
and empty #1 
or and checkride #0 #1 1 1 or not color #0 nor flag bcmustconvert flag bgmustconvert;

These do the regular Bishop move first, because that's what the Bishop will do most of the time. This can be done when neither mustconvert flag is set or when the Bishop is on the opposite color from the one it starts from. So, if a White Bishop is on a dark square (color = 1), or a Black Bishop is on a light square (color = 0), it can move as a Bishop. Testing for color #0 is quicker than testing for == color #0 1, and testing for not color #0 is faster than testing for == color #0 0, though they are a little bit more obfuscated. With regular Bishop moves out of the way, the function uses a series of breaking conditions to test whether a conversion move is possible. It first tests for conditions common to both conversion moves, testing for the less expensive one first. Also, given that these functions will frequently be used in testing whether a Bishop is attacking a King, including empty #1 as the first condition of the conversion move saves it from the trouble of checking for anything else when used for that purpose. It then tests whether it is legally converting from the g square, and if not, it uses a series of breaking conditions to test whether it is legally converting from the c square.


Chess Variant Inventors. Find out which inventors have the most games listed here.[All Comments] [Add Comment or Rating]
🕸📝Fergus Duniho wrote on Mon, Nov 18, 2019 04:13 PM UTC:

BTW, it seems my productivity is overrated in the list above: it says I invented 13 variants, but it attributes Wa and Tenjiku Shogi to me, while these are just historic Japanese games for which I made a rule-description page. (I also made such pages for Chu, Dai, Dai Dai and Maka Dai Dai Shogi, Paco Shako and Metamachy, but these were (justly) not attributed to me.) It also counts my article on FairyGen as a game invention, while this is just a description of a piece of software for generating End-Game Tables involvng fairy pieces.

It's now down to ten. I took care of the two Shogi variants, and FairyGen already wasn't listed.


Home page of The Chess Variant Pages. Homepage of The Chess Variant Pages.[All Comments] [Add Comment or Rating]
🕸📝Fergus Duniho wrote on Mon, Nov 18, 2019 07:01 PM UTC:

The old version was probably still cached. I have purged it from the cache for you.


Game Courier Tournament 2019. Chess Variant Tournament to be played on Game Courier.[All Comments] [Add Comment or Rating]
🕸Fergus Duniho wrote on Fri, Nov 22, 2019 05:09 PM UTC:

That it takes so much effort even by seasoned chess programmers to create a rule-checking preset for a variant as simple as Symmetric Chess firmly puts us in the category of 'backward websites'.

That's alarmist thinking. Greg may be seasoned in C and C#, but he's still less experienced with GAME Code, which happens to be a very different language.

We really should have some kind of wizard for this, where people that cannot program at all would have no trouble to create such a preset. E.g. something like the Design Wizard for Interactive Diagrams I put in the article on those.

Non-programmers can already create presets, and even with limited programming knowledge, someone can create a programmed preset for many games by copying code from others and making a few tweaks. Thanks to this, there are presets for over 1300 games.

Where you just have to take a minute or so to specify board dimensions and size of promotion zone, pick a preferred graphics theme, tick a number of pieces in a list of standard types (or, very rarely, pick an image and specify a non-standard move for it by hand), drag the pieces to their initial locations on an empty (a specified symmetry taking care of you having to do that for only one member of each type), and you are done.

None of that was anything Greg needed a wizard for. The hold-up was in programming the Bishops Conversion rule, and in trying to do that, he learned more about how the language works. I already knew how to program it myself, but I intentionally left Greg the exercise of figuring it out, because I trusted he could handle it, and doing it himself would help him learn the language better.

If the wizard produces the usual game code, (just as that for the Interactive Diagrams produces the HTML), it will remain possible to take care of any features not suported through the wizard by editing the automatically generated game code later. But this should be needed only very rarely.

Like, for example, in Symmetric Chess, because the Bishops Conversion rule wasn't already programmed.


Games on Game Courier. A listing of Chess variants for Game Courier, ranked by number of times played.[All Comments] [Add Comment or Rating]
🕸📝Fergus Duniho wrote on Sat, Nov 23, 2019 05:53 PM UTC:

We have had some very active non-programmers making presets. While this page won't tell you which are programmed, you can go to /play/pbm/settings.php to get some idea of that. If interested programmers want to program games that haven't been programmed yet, that would be very helpful.


🕸📝Fergus Duniho wrote on Sun, Nov 24, 2019 05:46 PM UTC:

Game Courier originally started out without any support for rule-enforcement. It offered a way to play games by email by generating diagrams from FEN strings that could be included in URLs. When I started working on what became GAME Code, I started with commands for automating some tasks, such as moving captured Shogi pieces off the board. In time, it became a programming language with the ability to be used for rule-enforcement. Because of the way that the language was added into Game Courier, it always remained optional rather than required. Besides that, some games could be too complicated to program, and using Game Courier just as a dumb board server would allow them to be played despite that. It also turned out that some people were a lot more interested in creating and trying out new variants than they were in programming, and they went ahead and created lots of presets without any programming.

As a programmer, my own preference has been for programmed presets. H. G. is also a programmer and might feel similarly as I do about the advantages of having programmed presets. I do want to make it easier to create programmed presets, but I also consider it important to still allow unprogrammed presets. This precludes the option of putting default code in presets. However, it could be helpful to have a GAME Code include file that includes default functions for a wide variety of common pieces. Another thought is to write new include files to require some values to be set before they are included. By require, I mean they would exit with informative error messages if any of these values were not already set. This would give programmers who include them reminders about what values might need to be set differently than for Chess.

This would still require some willingness to do programming, but it would at least make it easier.


🕸📝Fergus Duniho wrote on Sun, Nov 24, 2019 09:44 PM UTC:

In line with what I was talking about earlier, I've begun work on a new include file called fairychess1. It is designed to work with the Abstract1 and Alfaerie1 piece sets, which include images of the same pieces. I noticed that these sets included the Vao without the Cannon, which seems pointless. I don't want to break old games, but I might consider replacing the Vao in these sets with some other piece. I still have to adapt copies of the Pawn code for Berolina Pawns, but the others were easy enough to do.


🕸📝Fergus Duniho wrote on Tue, Nov 26, 2019 06:38 PM UTC:

I got some new ideas for how to make it easier for non-programmers to make programmed presets. I have abandoned fairychess1.txt in favor of fairychess.txt, which I'm using with the fairychess Chess preset. Instead of using functions with the names of piece labels, it uses functions with the names of pieces. Instead of defining functions with the names of piece labels, someone using this include file would just set varables to the names of pieces. These variables would be used as references to the functions. The main things left to do are to add functions for more pieces and to write some documentation and a tutorial on how to use it.


Game Courier Developer's Guide. Learn how to design and program Chess variants for Game Courier.[All Comments] [Add Comment or Rating]
🕸📝Fergus Duniho wrote on Wed, Nov 27, 2019 04:17 PM UTC:

It looks like the documentation for copyfn had been incorrect. It had said the new name could go on the left. But like with copy, the new name goes on the right, and the name of what is being copied goes on the left. Since this is how I prefer it to work, I'm glad the mistake was in the documentation, not in the code for the command. That means I can correct the documentation without breaking any code.


About Game Courier. Web-based system for playing many different variants by email or in real-time.[All Comments] [Add Comment or Rating]
🕸💡📝Fergus Duniho wrote on Sat, Dec 14, 2019 12:59 AM UTC:

The first thing I did after getting the site back online was modify Game Courier to add 11 days to any game interrupted by the downtime.


🕸💡📝Fergus Duniho wrote on Sat, Dec 14, 2019 01:17 PM UTC:

To save on server load, the Logs page bases its calculations of time left on pre-calculated figures stored in the database. In the old days, it used to load every logs file and use the same algorithm as Game Courier itself used. But this increased the server load so much that we got kicked off of shared hosting and had to put this site on a VPS. The downside to not doing this is that when the site is down for some time, the Logs page reports inaccurate calculations of how much time is left. Because it can now be inaccurate, the Logs page is no longer in the business of ending games with expired time. That is left up to Game Courier itself, which remains more accurate than the Logs page.


🕸💡📝Fergus Duniho wrote on Sat, Dec 14, 2019 05:54 PM UTC:

Note that what you did doesn't actually extend anyone's time. It just affects what is seen on the Logs page. The time that is left for any game is determined by Game Courier through calculations that involve the values of the various time control parameters, which are all stored in individuals logs, not in the database.


🕸💡📝Fergus Duniho wrote on Sat, Dec 14, 2019 07:38 PM UTC:

I didn't. I modified one script to make the appropriate adjustment when someone opens a log with Game Courier.


Is there a way to know before accepting a challenge what time requirements the game will have?[Subject Thread] [Add Response]
🕸Fergus Duniho wrote on Tue, Dec 17, 2019 04:20 PM UTC:

I have now added a message to that effect.


Caïssa Britannia. Play this British-themed game with royal Queens plus Lions, Unicorns, and Dragons.[All Comments] [Add Comment or Rating]
🕸💡📝Fergus Duniho wrote on Wed, Dec 25, 2019 07:13 PM UTC:

It looks like someone tampered with the set file it was using, replacing the Lion pieces with HalfDuck pieces. I have now corrected this.


Game Courier Tournament 2019. Chess Variant Tournament to be played on Game Courier.[All Comments] [Add Comment or Rating]
🕸Fergus Duniho wrote on Thu, Dec 26, 2019 05:53 PM UTC:

Can you show me a sample game that ends in a position in which an illegal en passant is allowed?


🕸Fergus Duniho wrote on Thu, Dec 26, 2019 11:26 PM UTC:

That's now fixed. The original code was based on Chess, which didn't allow en passant from multiple ranks. I replaced the requirement that the capturing pawn cannot move into or beyond the enemy's pawn rank with the requirement that the capturing pawn must be moving from the same rank as the double-moved pawn just moved to.


🕸Fergus Duniho wrote on Fri, Dec 27, 2019 04:31 PM UTC:

It's not so much that it was based on code for Chess. Rather, it was based on code that had been adapted to handle en passant for initial pawn moves that are longer than two spaces. Since this game allows pawns unlimited double-moves instead, en passant had to be handled differently. Either way of handling en passant is compatible with Chess, but en passant has to be handled differently in Omega Chess than in Metamachy.


Gross Chess. A big variant with a small learning curve. (12x12, Cells: 144) [All Comments] [Add Comment or Rating]
🕸💡📝Fergus Duniho wrote on Mon, Dec 30, 2019 08:20 PM UTC:

It checks if a Pawn is on the destination space and if only one move has been made on the present turn. If these conditions are met, it tries to complete the move by asking what to promote the Pawn to.


Game Courier Logs. View the logs of games played on Game Courier.[All Comments] [Add Comment or Rating]
🕸📝Fergus Duniho wrote on Fri, Jan 3, 2020 02:32 AM UTC:

It looks like the site was down over 11 hours today. I have programmed Game Courier to give an extra 12 hours to anyone whose move was interrupted by this downtime.


The birth of two variants: Apothecary chess 1 & Apothecary chess 2[Subject Thread] [Add Response]
🕸Fergus Duniho wrote on Sat, Jan 4, 2020 05:28 PM UTC:

That's correct. Thanks for saving me the trouble, Greg.


Games for Game Courier. The many games you can play online with Game Courier.[All Comments] [Add Comment or Rating]
🕸📝Fergus Duniho wrote on Wed, Jan 8, 2020 07:38 PM UTC:

Pages have authors, not inventors. Someone who programs a preset counts as an author. The inventor exclusively refers to the game inventor.


MZchess-with-pawns[All Comments] [Add Comment or Rating]
🕸Fergus Duniho wrote on Wed, Jan 8, 2020 08:04 PM UTC:

The directory /membergraphics/MZchess-with-pawns/ does not exist. There is also no file called chesswithpawns.zip anywhere on the website.


Metamachy. Large game with a variety of regular fairy pieces.[All Comments] [Add Comment or Rating]
🕸Fergus Duniho wrote on Sat, Jan 11, 2020 08:27 PM UTC:

That's now fixed. The function was testing whether a rankname equalled a filename, which would always return false. It was supposed to compare the ranknames of two coordinates.


Game Courier Logs. View the logs of games played on Game Courier.[All Comments] [Add Comment or Rating]
🕸📝Fergus Duniho wrote on Mon, Jan 13, 2020 02:24 PM UTC:

I found the site down this morning, and when I booted it back up, the last log was over 18 hours ago. So, I modified Game Courier to take 19 hours off the time for any move interrupted by this downtime.


🕸📝Fergus Duniho wrote on Fri, Jan 17, 2020 07:11 PM UTC:

I found the site down this afternoon and booted it back up. Since the last move had been made almost four hours ago, I modified Game Courier to take off four hours from any move interrupted by this downtime.


🕸📝Fergus Duniho wrote on Fri, Jan 17, 2020 09:25 PM UTC:

I left out a semicolon when I updated the timeleft.php file earlier. So I fixed that and changed the time it discounts for the latest interruption to 6 hours.


changing email address[Subject Thread] [Add Response]
🕸Fergus Duniho wrote on Fri, Jan 17, 2020 09:28 PM UTC:

If that address won't receive the email for changing your email, then it won't receive other emails from us. If that's important to you, then I recommend using another address.


Game Courier Logs. View the logs of games played on Game Courier.[All Comments] [Add Comment or Rating]
🕸📝Fergus Duniho wrote on Sat, Jan 18, 2020 04:54 PM UTC:

Once again, the site was offline, and I booted it back up. This time, it was down for nearly 14 hours, and I discounted that much from interrupted moves.


Sign in to the Chess Variant Pages. Sign in to the Chess Variant Pages.[All Comments] [Add Comment or Rating]
🕸📝Fergus Duniho wrote on Tue, Jan 21, 2020 02:15 AM UTC:

The problem is probably that your email address is not receiving email from us, or it is going into your spam folder. If you can't find the email in your spam folder, try a different email address.


Clockwork Orange Chess. Condition your opponent's pieces to be non-violent.[All Comments] [Add Comment or Rating]
🕸💡📝Fergus Duniho wrote on Wed, Jan 29, 2020 02:08 AM UTC:

Okay, that's now fixed.


Game Courier. PHP script for playing Chess variants online.[All Comments] [Add Comment or Rating]
🕸💡📝Fergus Duniho wrote on Sun, Feb 2, 2020 07:44 PM UTC:

https://www.chessvariants.com/play/pbm/play.php?game=Chess+with+Different+Armies&log=pallab-cvgameroom-2006-64-786

In this game, I was white and I won the game. However the game courier shows that my opponenet won the game.

To be precise, it correctly shows that white won, but it says your opponent played white. Since the black player mentions being the inventor of Lions and Unicorns Chess, this confirms that David Paulowich actually played black, not white. Comparing the log for this game to one in which I knew who won, the $opponent was the last player to move, but in your log, the $player was the last player to move. I don't know why this happened, but it may be fixed, since the other log was more recent. So, I manually switched the values of $opponent and $player in your log, then had it self-correct itself so that the database should be updated now too.


🕸💡📝Fergus Duniho wrote on Sun, Feb 2, 2020 07:48 PM UTC:
Yesterday, I was issued a personal challenge that was automatically accepted. Wasn't given the option to decline invitation. Perhaps something to look into.

If this happens again, report the specific log and leave it alone, so that I can investigate it.


Sign in to the Chess Variant Pages. Sign in to the Chess Variant Pages.[All Comments] [Add Comment or Rating]
🕸📝Fergus Duniho wrote on Sun, Feb 2, 2020 08:52 PM UTC:

I have been unable to log in using the same credentials that worked three days ago. The loging page demends I enable cookies and I have done so for chessvariants.com (my browser is Firefox v72.0.2).

I just logged in on this page using the same version of Firefox. Maybe one of the extensions you're running is affecting something.

The login page also complains my adblocker, failing to detect that I have whitelisted this site (Adblocker Ultimate).

I don't use that ad blocker, but as a test, I just disabled uBlock Origin for this site, and I still got the adblocker detected message instead of an ad. In case it was a caching issue, I tried reloading with "Reload Skip Cache", but it didn't help. Looking over my extensions, I don't have any other ad blockers.

Other pages of the CVP correctly detect this and don't complain about the ad blocker.

Yes, I'm getting the same behavior. Maybe there is a bug in this page specifically. But I haven't been able to figure out what it is.

This page had <BASE HREF="http://www.chessvariants.org/login/login.php"> in the head part, and I just changed .org to .com.


Raven. Can move as a Rook or a Nightrider.[All Comments] [Add Comment or Rating]
🕸Fergus Duniho wrote on Mon, Feb 3, 2020 03:54 PM UTC:

I borrowed that piece from David Paulowich's Unicorn Chess.


Game Courier. PHP script for playing Chess variants online.[All Comments] [Add Comment or Rating]
🕸💡📝Fergus Duniho wrote on Wed, Feb 5, 2020 02:22 AM UTC:

When using the capablanca include file, which uses the chess include file, you need to create two functions for each piece. One function has the same name as the piece label, and it tests whether a move is legal. The other function has the same name with a capital L at the end, and it returns all the spaces a piece might legally move to. You have not created this second function for your new pieces. The purpose behind this function to reduce the calculations needed to find out which spaces a piece may move to legally. Instead of testing for a legal move to every space on the board, it tests for legal moves only to spaces within the piece's range of movement. This saves time, and since things are done this way, it will not find potential legal moves for a piece unless this function has been defined.


🕸💡📝Fergus Duniho wrote on Wed, Feb 5, 2020 03:07 PM UTC:

To quote from what I already wrote:

The other function has the same name with a capital L at the end

It looks like you named them correctly.


🕸💡📝Fergus Duniho wrote on Thu, Feb 6, 2020 04:28 PM UTC:

You shouldn't need to call them directly.  They are called from the Checked function if I recall correctly.

In the chess include file, they are used in the stalemated and checkmated subrroutines. To test for checkmate or stalemate, these subroutines calculate every possible legal move. When no legal moves are found, each of these two subroutines will return true. When any legal moves are found, they will return false. But instead of stopping with the first legal move, they will continue to calculate all legal moves, so that an array of legal moves can be created for use in displaying legal moves. To find all the legal moves for a piece, it checks whether each piece can make a legal move to each space that falls within its range of movement. That second function is used to create an array of destination spaces to check for legal moves to.

Zillions-of-Games will do things differently. It uses a single movement definition to calculate where a piece may legally move. Instead of knowing how a piece moves, the chess include file for Game Courier relies on knowing how to check whether a move was legal and on knowing which spaces it is worth the trouble to check for a legal move to. Although this requires two functions instead of one, the two functions will normally be simpler.


Bishop-Nightrider compound. Piece that moves like bishop or nightrider.[All Comments] [Add Comment or Rating]
🕸Fergus Duniho wrote on Thu, Feb 6, 2020 04:39 PM UTC:

Betza's use is earlier than Paulowich's, but if it has been used in fairy chess problems, the invention would probably predate Betza. What is your source on the Banshee name and its use in fairy chess? I tried to look up Banshee in A Guide to Fairy Chess by Anthony Dickins, but it wasn't listed.


🕸Fergus Duniho wrote on Thu, Feb 6, 2020 06:48 PM UTC:

I found a link to All the King's Men in a guide by David Howe. Unfortunately, it just gives the name and description with no further information.


🕸Fergus Duniho wrote on Thu, Feb 6, 2020 10:08 PM UTC:

Using the bash shell in Windows 10, I did a grep search on every issue of Variant Chess, and I didn't find any mention of Banshee. I did another search for Nightrider just to make sure I was doing it correctly, and I got a list of results. Since Jelliss's page is dated even later than Betza's and Paulowich's use of the piece, it's still unknown whether the piece goes back any further than Betza's game in 1995.


Game Courier History. History of the Chess Variants Game Courier PBM system.[All Comments] [Add Comment or Rating]
🕸💡📝Fergus Duniho wrote on Fri, Feb 7, 2020 01:31 PM UTC:

I have modified how constant values can be included in code. In the past, a constant could be used by preceding its name with the # sign, just the same way that variables can be used, and constant names would have higher precedence than variable names. This helped keep the value constant when the name was used for a constant. But I have decided that this is a bad practice, because it interferes with a function's ability to count on its local variables having higher precedence than anything else with the same name.

So, I have made two changes. First, the @ sign may now be used in place of the # sign to get a constant value. This works only for constants, and its use will make it clearer that a given name belongs to a constant. Second, the # sign may still be used to return a constant value, but it now has lower precedence than variables with the same name. This will provide backwards compatibility so long as your variables and constants do not use the same names.


Game Courier. PHP script for playing Chess variants online.[All Comments] [Add Comment or Rating]
🕸💡📝Fergus Duniho wrote on Fri, Feb 7, 2020 01:45 PM UTC:

You can enable flexible castling by adjusting the values of the wcastle and bcastle variables. Free castling involves the ability to more freely position the rook when castling, but if you also want to expand the spaces a king may move to while castling, you need to adjust the wcastle and bcastle variables. Since I can't think of any games I have programmed with free castling, I would have to see what you're doing to give you any further help.


Chess. Play Chess online with other people, using Game Courier, a PBM system that works with any web browser on any computer.[All Comments] [Add Comment or Rating]
🕸📝Fergus Duniho wrote on Fri, Feb 7, 2020 06:24 PM UTC:

The presets on this page now use newly designed fairychess code instead of Chess3, though existing games will not be affected by this. The fairychess include file is designed to be easily adapted for other games. Unlike Chess3, it identifies pieces by name instead of label, and it uses constants to associate labels with piece names. It also contains many more piece definitions, and I'll add more as need for them comes up. Just assign piece names to piece labels using constants. If you want to change the name of a piece, you can copy its functions (and subroutine if need be) to another name, then assign your constants to the new name. Here's an example of what could be done in Chinese Chess:

copyfn Chinese_Elephant Elephant;
copyfn Chinese_Elephant-Range Elephant-Range;
copyfn Chinese_Elephant Minister;
copyfn Chinese_Elephant-Range Minister-Range;
setconst e Elephant;
setconst E Minister;

Note that copying functions should be done after the file has been included, since it contains the functions to be copied. I'm not sure what to do about copying subroutines except to copy the whole code and change its name, but few pieces use subroutines.


Game Courier History. History of the Chess Variants Game Courier PBM system.[All Comments] [Add Comment or Rating]
🕸💡📝Fergus Duniho wrote on Sat, Feb 8, 2020 01:53 AM UTC:

I'm glad you like it. The changes I made to constants came about while I was working on the fairychess include file. Since I planned on using constants to associate piece labels with piece names, I wanted to avoid collisions between constants and variables with the same name. I did a grep search on the settings files and changed a few to use the @ sign instead. Just in case constants are used in presets that are defined in forms instead of settings files, or in case someone inadvertently uses # for constants in the future, I let it continue to be used that way but with lower precedence. Even without replacing # with @ in a few settings files, this would have been enough, because they normally did not use the same names for both variables and constants. But if I name constants after piece labels and also use short variable names in functions, collisions could arise. So, I wanted to separate the namespace between them.


Game Courier. PHP script for playing Chess variants online.[All Comments] [Add Comment or Rating]
🕸💡📝Fergus Duniho wrote on Sat, Feb 8, 2020 01:50 PM UTC:

Show me an example of a preset with code that is not working as you want it to.


🕸💡📝Fergus Duniho wrote on Sat, Feb 8, 2020 04:13 PM UTC:

It doesn't look like you've done anything to change how castling works, and by default, the rook will move to the other side of the King when castling. Note that changes to variables set in the include file should be made after it has been included. Otherwise, the values set in the include file will overwrite the values you've already set.


Game Courier History. History of the Chess Variants Game Courier PBM system.[All Comments] [Add Comment or Rating]
🕸💡📝Fergus Duniho wrote on Sat, Feb 8, 2020 06:03 PM UTC:

I am deprecating the use of global and setglobal as aliases for system and setsystem. I would like to eventually eliminate these from the language, since global variables have a different meaning in the language.

I have limited the power of the system built-in function. While it had prevented people from viewing a password with it, it did allow you to enter "system GLOBALS" to view all the variables, which could be a big security risk. I changed it to return values only from a whitelisted set of system variables. These correspond to the same ones that may be set with setsystem.

I introduced the use of the dollar sign as a system variable designator. When appearing at the beginning of a variable name, it will return the value of the corresponding system variable if it has been whitelisted. I also added support for $old and $moved, which return the values of $lastcaptured and $lastmoved. Since the dollar sign is also the designator for PHP variables, it is basically a way to get the values for some of the PHP variables with the same name. You may also think of the S in $ as standing for system.

Game Courier is already set up to recognize old, moved, origin, and dest as values of system variables, but I don't like this, because it prevents these from being used as ordinary words, and it might make the code more confusing if you don't already know their meaning. The use of $old, $moved, $origin, and $dest should now be preferred, though I can't phase out the old way without rewrting lots of code. I have at least made the changes in the new fairychess settings file for Chess, so that they can be used going forward.


🕸💡📝Fergus Duniho wrote on Sat, Feb 8, 2020 07:54 PM UTC:

I have removed $countextrasas from the system variables. It was not used in any settings file, and I could not figure out what it was for. My comments on it were not informative enough. I commented out the code that used the variable, since it appeared to be useless.


🕸💡📝Fergus Duniho wrote on Sun, Feb 9, 2020 12:58 AM UTC:

The hyphen is in Spider-rider to separate the two adjacent r's.


🕸💡📝Fergus Duniho wrote on Sun, Feb 9, 2020 07:09 PM UTC:

I have added to the fairychess include file the Shogi and CWDA pieces that weren't already in it.


Bishop-Nightrider compound. Piece that moves like bishop or nightrider.[All Comments] [Add Comment or Rating]
🕸Fergus Duniho wrote on Sun, Feb 9, 2020 08:56 PM UTC:

Pocket Mutation Chess calls this piece a Cardinalrider.


Game Courier Logs. View the logs of games played on Game Courier.[All Comments] [Add Comment or Rating]
🕸📝Fergus Duniho wrote on Mon, Feb 10, 2020 12:39 AM UTC:

For reasons unknown, the host went down for almost three hours today. I compensated interrupted games by three hours.


Game Courier History. History of the Chess Variants Game Courier PBM system.[All Comments] [Add Comment or Rating]
🕸💡📝Fergus Duniho wrote on Mon, Feb 10, 2020 02:05 AM UTC:

I'm working on adding piece descriptions to the fairychess include file. One reason for this is to help programmers using the include file find the code for the pieces they want. But instead of putting them into comments, I am creating strings that can be used in error messages to remind players how a piece moves. I started with the Chess pieces while I took the time to hone the code for displaying the messages. The strings use "%s" instead of the piece name in case someone renames a piece. I had thought of using printf, but I ended up using str_replace, which I added to the language. Like the PHP str_replace, its arguments are search, replace, and string.


Game Courier. PHP script for playing Chess variants online.[All Comments] [Add Comment or Rating]
🕸💡📝Fergus Duniho wrote on Wed, Feb 12, 2020 03:05 PM UTC:

I would advise you to move away from using the chess include file to using the fairychess include file. The former is optimized for Chess, while the latter is designed to make it easier to adapt to other Chess variants.


Caching[All Comments] [Add Comment or Rating]
🕸Fergus Duniho wrote on Thu, Feb 13, 2020 03:17 PM UTC:

If caching on the site were broken, there would be no caching, and all changes would appear immediately. Your issue is that caching is working even when you don't want it to.


🕸Fergus Duniho wrote on Thu, Feb 13, 2020 04:54 PM UTC:

There are two levels of caching. One is browser caching, and the other is caching at the DNS/CDN level. The latter is handled by Cloudflare, and it reduces the server load quite a lot, which keeps this site quicker and more stable. I am able to control caching through page rules, but my free Cloudflare account gives me only three page rules. I have two rules right now. One disables caching for pages with a .php extension, and the other enables caching for the drawdiagram.php script, which is used for graphics. I can purge the cache for individual pages as needed, but I need to be asked to do that for a particular page. Complaining about caching in general will not help.


🕸Fergus Duniho wrote on Thu, Feb 13, 2020 06:07 PM UTC:

I cannot control Cloudflare through scripts on this site. I have one page rule left. I could use it to disable caching on your script or on the directory it is in.


🕸Fergus Duniho wrote on Thu, Feb 13, 2020 08:15 PM UTC:

I set the rule to bypass the cache for https://www.chessvariants.com/membergraphics/MSinteractive-diagrams/betza.js. There might be a way to purge the cache with a script, but I have not studied the Cloudflare API well enough to know how to proceed with that, and I don't know anything about using Curl. I normally just log in to Cloudflare's website and do it manually from there. I have also just increased the caching time from 4 hours to 3 days, so that HTML pages will stay up when the server goes down.


Grasshopper Chess. Each player has eight additional grasshoppers.[All Comments] [Add Comment or Rating]
🕸Fergus Duniho wrote on Tue, Feb 18, 2020 10:08 PM UTC:

I replaced the diagram with a single image.


🕸Fergus Duniho wrote on Wed, Feb 19, 2020 03:20 PM UTC:

As I mentioned to you not too long ago, the script used to draw this picture is cached by Cloudflare. Also, the previous diagram had ranks broken into two rows and looked really bad.


Diagram Designer. Lets you display diagrams without uploading any graphics.[All Comments] [Add Comment or Rating]
🕸💡📝Fergus Duniho wrote on Wed, Feb 19, 2020 03:26 PM UTC:

It can handle hexagonal boards and custom boards with spaces arranged in a grid, but I have not added in code for circular boards or for custom boards with custom spaces.


Grasshopper Chess. Each player has eight additional grasshoppers.[All Comments] [Add Comment or Rating]
🕸Fergus Duniho wrote on Wed, Feb 19, 2020 06:05 PM UTC:

I exempted it from the rule that Cloudflare will not cache PHP scripts. Cloudflare caches the output of this script for different query strings.


🕸Fergus Duniho wrote on Wed, Feb 19, 2020 09:20 PM UTC:

Server load rarely gets very high, and the rare peak of high server load does not correlate with the site going down. So, even though tables could also work, I'm not worried that using single images will increase the load too much. Also, it has been simple enough to replace various JavaScript diagrams with generated images, because I could reuse the FEN string from the JavaScript with only occassional modifications.


Game Courier Developer's Guide. Learn how to design and program Chess variants for Game Courier.[All Comments] [Add Comment or Rating]
🕸📝Fergus Duniho wrote on Mon, Feb 24, 2020 05:21 PM UTC:

It is used to evaluate possible castling moves without producing error messages. If you search for it, you will find it being used in the stalemated subroutine.

 


UserID on CV site[Subject Thread] [Add Response]
🕸Fergus Duniho wrote on Mon, Feb 24, 2020 05:22 PM UTC:

What do you want to change your userid to?


🕸Fergus Duniho wrote on Tue, Feb 25, 2020 09:35 PM UTC:

Since the userid is limited to 16 characters, and ChessVariantDemos has 17, I could not make the change. Note that you have two different IDs on this site, though both are presently the same for you. These are the personid, which is limited to 32 characters, and the userid. The userid is the handle that you use to sign in, and it is also used when you play games on Game Courier. The personid is used to identify you when you post comments or contribute content. This site was using personids before userids were ever a thing here, and the original personids were based on a person's name, such as DavidHowe or FergusDuniho. Userids were meant as shorter handles for signing in. I could change your personid to ChessVariantDemos, though one based on your name would be preferable.


Chinese Chess. Play Xiang Qi, the Chinese form of Chess.[All Comments] [Add Comment or Rating]
🕸📝Fergus Duniho wrote on Thu, Mar 5, 2020 04:45 PM UTC:

I have written a new settings file for Chinese Chess that uses the fairychess include file. It might be complete now, but I haven't taken the time to fully test it yet. You can find it at https://www.chessvariants.com/play/pbm/play.php?game%3DChinese+Chess%26settings%3Dfairychess.


🕸📝Fergus Duniho wrote on Fri, Mar 6, 2020 07:09 PM UTC:

I have updated the presets on this page to use the new fairychess settings file, which uses the new fairychess include file. I tested it on several completed games, and I tested illegal moves. It seems to be working fine. The advantage of this new settings file is that it will refer to pieces by name, and it will include a description of how a piece moves when it makes an illegal move. I changed the default graphics for this settings file, and I have left the old settings file alone. If you want to compare the old one with the new one, you will find the old one at

https://www.chessvariants.com/play/pbm/play.php?game=Chinese+Chess&settings=GB-set


100 comments displayed

EarliestEarlier Reverse Order LaterLatest

Permalink to the exact comments currently displayed.