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/Ratings for a Single Item

EarliestEarlier Reverse Order LaterLatest
Game Courier History. History of the Chess Variants Game Courier PBM system.[All Comments] [Add Comment or Rating]
🕸💡📝Fergus Duniho wrote on Tue, Nov 17, 2015 04:40 PM UTC:
It now works for castling, and I have added support for CSS. It works by using a GAME Code subroutine to make an array of all legal moves. This subroutine is based on the stalemated subroutine and may be used in place of it. The difference is it goes through all possible moves, while the stalemated subroutine would exit as soon as it found one legal move. To use it in place of the stalemated subroutine, you need to add a not. So, "not sub legalmoves" can be used in place of "sub stalemated" when checking for checkmate or stalemate. On second thought, I could replace the stalemated subroutine with a modified version of legalmoves that reverses the return value. This would make implementation of this into multiple games quicker, because the presets themselves wouldn't have to be rewritten to use legalmoves instead of stalemated. Still, care will have to be taken to make sure the subroutine used in a particular game matches its rules exactly. Since the legalmoves subroutine goes through all possible moves, including castling, which had been skipped by stalemated, it may need more finetuning for specific games. Since it makes this array using the rules of a game programmed in GAME Code, this option will not be available for a game unless its rules have been programmed.

Each entry in the array is an array of two coordinates. The first is the origin of the move, and the second is the destination. PHP copies this array into JavaScript, which then uses it to know which spaces a piece may move to. It uses this information to display the spaces a piece may legally move to, and it uses it to catch and prevent illegal moves. This will only work for moves made with the mouse. Any move may still be entered manually, and if it is, it will be up to the GAME code program to evaluate the legality of the move. When a game's rules have not been programmed, and the legalMoves array in JavaScript is null, it will not display legal moves, and it will allow any move.

🕸💡📝Fergus Duniho wrote on Wed, Nov 18, 2015 04:40 PM UTC:
Displaying legal moves now works for games displayed as images, including hexagonal boards. Now that I have added support for all major types of rendering, it should be quicker to add support for custom shapes.

🕸💡📝Fergus Duniho wrote on Sat, Nov 21, 2015 08:52 PM UTC:

For boards using squares, the last move made should now be highlighted. A dotted border will be over the vacated space, and a solid double border will be around the piece that just moved.


🕸💡📝Fergus Duniho wrote on Wed, Dec 2, 2015 03:06 AM UTC:
I added a "Run" button to Edit mode. This will run the code without making any moves, and it will display any output at the top of the page. This output would normally be hidden when playing games, though visible in the source code. The "Run" button is mainly for using the Pre-Game Code area as a place to test code without going through extra steps of saving the code, going to the menu, and then starting to play a game just to see what the code does. Now you can just click "Run" to see what your code does.

🕸💡📝Fergus Duniho wrote on Thu, Dec 3, 2015 01:05 AM UTC:

I am extending GAME Code to better support Lambda functions. This is an anonymous, unnamed function. I have created a new variable type for storing functions. Although a function is simply stored as an array, I wanted to know when an array is supposed to be a function. So I created a PHP class called Lambda, which holds an array that represents a function.

I created the lambda operator for expressions. This will convert an array, a string, or the function associated with a function name to a Lambda object. This can be used with the fn operator to run a Lambda object as a function.

One immediate consequence of this is that you can store functions in variables, and you can call a function with a variable instead of a function name. For example:

set a lambda (* #0 #1);
set b fn #a 6 8;

The second line multiplies 6 by 8 and sets b to 48.

I am also working on expanding some built-in functions to make lambda functions more useful. Here's an example of an expression using a lambda function to find the location of the Black King:

set k anytrue lambda (#0 onlyif == space #0 k) spaces;

The anytrue function, if given a lambda function as its first argument, goes through all the values of an array given as a second argument, calling the function for each value in the array until it finds a true value. The value from the array goes into #0. If the array element is an array itself, the function may have more than one argument. For example:

set k anytrue lambda (#0 onlyif == space #0 #1) ((e1 k) (e8 k) (g1 N));

Because a string can be converted to a lambda function, it is now possible for the program to write a function and call it. More on this later


🕸💡📝Fergus Duniho wrote on Tue, Dec 29, 2015 11:15 PM UTC:
I redesigned the form for inviting someone to play a game, I deprecated the Pace time control setting, leaving it out of the form, and I updated the automatic time control settings.

🕸💡📝Fergus Duniho wrote on Fri, Apr 1, 2016 07:33 PM UTC:
Because it looks like many invitations have not been going to the cvgameroom of late, I modified Game Courier to send email from the [email protected] address unless "Allow scripts to forge my email address when sending email on my behalf" is checked in your profile. My hypothesis for why the cvgameroom wasn't getting any emails was that it had started to block emails forged from this site. And it looks like I was correct. The emails it sent from [email protected] when I just issued some invitations all made it to the group. Since email from this address is coming from its own domain, it is not being detected as forged, and it gets through.

Also, using this address will help keep the email addresses of player's away from bots that harvest email addresses for spam, and this greater privacy may encourage more people to use Game Courier.

The [email protected] address is only for sending email from Game Courier. It is not intended for receiving email or for sending personal emails. That's why it's okay for me to mention it many times in this message.

🕸💡📝Fergus Duniho wrote on Sat, Apr 2, 2016 09:00 PM UTC:
If you have written Game Courier presets, you may now post a written description of the rules. Game Courier's Edit mode includes a new form field for this. You may write your description of the rules in HTML. So that you may display piece images that match the current set, you may use the showpiece.php script with the piece parameter as an image URL in an IMG tag. The piece parameter should match the piece label used by the set. This script also takes a set parameter, but Game Courier will add this one in automatically.

This same script may also be used to display piece images on rules pages. Just enter both the set and piece parameters when you use it that way.

🕸💡📝Fergus Duniho wrote on Tue, Apr 12, 2016 03:11 PM UTC:
The Preview and Verify mode now has a Cancel button. This is like clicking the back button, but it preserves any comments you have written, and if you're in a multi-move game, such as Extra Move Chess, it will cancel the whole move at once. The main reason I added this was because I didn't like having my comments go away every time I decided against a move.

Joe Joyce wrote on Wed, Apr 13, 2016 11:10 PM UTC:
"Fergus Duniho Verified as Fergus Duniho wrote on 2016-04-12 None

The Preview and Verify mode now has a Cancel button. This is like clicking the back button, but it preserves any comments you have written, and if you're in a multi-move game, such as Extra Move Chess, it will cancel the whole move at once. The main reason I added this was because I didn't like having my comments go away every time I decided against a move."

Thank you very much - I got burned by that little feature more than once myself. I'm sure others have, also. I like what's been happening here lately.

🕸💡📝Fergus Duniho wrote on Wed, Apr 27, 2016 02:20 PM UTC:
Since deleting old settings files would break the games that used them, and completely replacing them with new code could also break the games that used them, I added the ability to deprecate an old settings file. To deprecate an old settings file, go to Edit mode and enter the name of another settings file to redirect new invitations to. This will allow the settings file to be used when viewing games already played using it, but it will direct new invitations to the preferred settings file. This is useful when you change the rules or setup of a game or when you program a game in a way that will not work with notation used when previously playing the game with another settings file.

Greg Strong wrote on Wed, Apr 27, 2016 02:58 PM UTC:
Excellent, thanks you for this.  Just what I needed!

🕸💡📝Fergus Duniho wrote on Wed, Apr 27, 2016 06:30 PM UTC:
I have now written a script for keeping track of all the settings files you have written. It is at

/play/pbmsettings/index.php

It provides some useful information for determining which ones you may want to edit or deprecate. It sorts files for the same game by date, and it tells you how many fields for GAME Code are filled in.

🕸💡📝Fergus Duniho wrote on Thu, May 12, 2016 03:54 PM UTC:
After exposure to Jocly's distinction between model and view, I realized that the same distinction was implicit in Game Courier, but I hadn't made it as explicit. So I have now reorganized Edit mode to reflect the same kind of distinction. I have split what Jocly calls the model into two different sections. These are Structure and Code. The structure of a game is its coordinate system and its location of pieces. The code is where automation and rule-enforcement are handled. The code has to regularly refer to the structure of the game to interpret, evaluate, and make moves.

What Jocly calls the view, I'm calling Appearance. These are details that affect how the game looks. In general, the code has nothing to do with appearance, and it should not be allowed to change it, but, for the most part, details of appearance should be user-configurable. The main exception to this is the shape of the board. This will have an impact on the rules, which the code needs to handle, and except for changing between squares and custom grid, it should not be user-configurable. But the code does not need to know the value of this field to process moves, and changing it should have no effect on the game logic.

While doing this reorganization, I have also linked each field to the appropriate entry in the Developer's Guide, and I have placed a brief description of it in the link's TITLE field, which you can view by hovering over it. Edit mode is currently showing all fields. I will fix this later.

🕸💡📝Fergus Duniho wrote on Sun, Jun 5, 2016 02:07 AM UTC:

I have taken a big step toward making Game Courier more suitable for games played in real-time. I have removed the automatic page refreshing when you hit the Continue button, and I have replaced this with a bit of AJAX that periodically checks whether it is your turn again, then refreshes the page once it is your turn again. I still have more things to do to better support real-time play. One is to include a starting time in invitations for real-time games. Another is to add an audible alert when it is your turn again. I might include a selection of sounds and give players a choice.


🕸💡📝Fergus Duniho wrote on Wed, Jun 8, 2016 12:12 AM UTC:

There are now animated clocks, and you can watch games live. The clocks appear in timed games above and below the board. The one below the board is for the player whose turn it is to move, and, as long as JavaScript is on, this one counts down one second at a time. It shows days as a serif number on a white square and hours, minutes, and seconds in a digital clock font (DSEG7 Classic Bold from http://www.keshikan.net/fonts-e.html). The number of days will not show up unless greater than zero. The hours, minutes, and seconds appear in green so long as only grace time is being used, and they change to yellow when grace time is used up, and time is being lost for real. The clock for the opponent of the current player appears at the top, and its hours, minutes, and seconds appear in red. The color coding is by traffic light colors. Red is for the player who is stopped, and green and yellow are for the player who can go.

When you view a game you're not playing, and you're viewing the latest move, the page will update whenever a new move is made. JavaScript must be on for this to work. This allows you to view games live, watching the moves as they're being made.


Greg Strong wrote on Fri, Jun 10, 2016 03:46 PM UTC:

When making the first move on a multi-move variant, the border color and text color are now reverting to black.


🕸💡📝Fergus Duniho wrote on Sat, Jun 11, 2016 12:24 AM UTC:

Game Courier will now display the captured pieces. By default, this works by making a list of pieces in the starting position, subtracting from the list any piece on the board in the latest position, and displaying the pieces still left in the list after sorting them in case-sensitive alphabetical order. Since this is not always appropriate for every game, how or whether Game Courier displays captured pieces can also be controlled with GAME Code for individual games. To display captured pieces, Game Courier populates an associative array called $capturedpieces. This array takes pieces labels as keys and piece counts as values. This variable can be set with setsystem to an array calculated with GAME Code, or it can be set to false, which will cause no captured pieces to be displayed. This is appropriate for games with drops, such as Shogi, which already display captured pieces in the playing area.


🕸💡📝Fergus Duniho wrote on Sat, Jun 11, 2016 01:41 AM UTC:

The problem with the border and text colors was more general than anything to do with double move variants. Tying this back into the history of Game Courier, I am currently studying HTML5, and I am trying out new ways to improve the forms with the use of new features in HTML5. One of these is the color type for the input element. This displays the color instead of its name or hexadecimal code, and it provides a color selector, like what you may find in a graphics program. But when I changed the input fields for the border and text colors to the color type, I learned that it expected the color code to begin with a #, and I had been allowing color codes without it. To fix this, I used a regular expression to test whether the pre-existing value PHP would populate the form with was a six-digit hexadecimal number without a preceding #, and if it was to add one. But I had forgotten to begin and end this regular expression with ^ and $, which caused it to return true for values that already had a preceding #, causing it to add an extra one, which caused the color to change to black.

The addition of the text color is new and incomplete. I think I still have to go through the scripts for displaying the board and change how they access the text color.


🕸💡📝Fergus Duniho wrote on Sat, Jul 16, 2016 11:44 PM UTC:

When a GAME Code program displays a message with the say command, it will now also insert the message as an inline comment for the current move. To distinguish it from user-entered comments, it will surround it with two hyphens. In games I have coded, this will add comments for check, checkmate, stalemate, and draws. It can also be put to other uses.


🕸💡📝Fergus Duniho wrote on Mon, Jul 3, 2017 03:06 PM UTC:

Although Game Courier cannot fully analyze GAME Code to tell whether it fully enforces the rules of the game, I have given it the ability to more accurately estimate which presets enforce rules and which don't. One new thing that helps with this is the ability to display legal moves. When a preset has been programmed to display legal moves, it will populate an array of legal moves. So, if this array exists and has something in it, then it can display legal moves, and it very likely enforces them too. Besides checking this, Game Courier checks which code blocks are populated with code. If they're all empty, then it can be known for sure that there is no rule enforcement. If the post-move blocks are empty, odds are good that it doesn't enforce rules, and if the post-game blocks are empty, it's expected that it does not spot check, checkmate, or stalemate. One more thing is that it checks the post-game code for the strings check and stalemate. If it finds one of these in both, then it is assumed that it includes code for spotting check, checkmate, or stalemate, and this is taken as a good indication that full rule enforcement is present.

Based on this analysis, Game Courier will include a message above the board before a game begins to let you know what its capabilities appear to be. If you have programmed a game, you may bypass this and inform potential players of your preset's capabilities with even more certainty by including something like this in your pre-game code:

if == thismove null:
  say This preset enforces the rules and displays legal moves.;
endif;

By running the say command only when thismove is null, this message gets passed to it only at the beginning of the game before any moves have been made.


🕸💡📝Fergus Duniho wrote on Sat, Aug 26, 2017 03:18 PM UTC:

For games that can display legal moves, the ability to display legal moves is now extended to View and Preview modes in a user-friendly way. When you touch or click on a piece, it will show you how that piece can move. When you click an empty space, it will clear any markers that have been displaying legal moves for a piece. This can be particularly useful in Preview mode, because it will let you see how your opponent would be able to move if you go through with the move you are previewing. It will also enhance View mode by letting you see how the current player to move can move.


🕸💡📝Fergus Duniho wrote on Thu, Aug 16, 2018 06:27 PM UTC:

Game Courier has now been modified to give an error message if it does not recognize the value of the Submit field when clicking on a form. This is because the use of Google Translate may change this value to something Game Courier does not recognize, and users should be notified of this error when it happens.


🕸💡📝Fergus Duniho wrote on Thu, Aug 16, 2018 11:06 PM UTC:

I have begun to replace buttons made with the INPUT tag with buttons made with the BUTTON tag. The BUTTON tag allows me to separate the display text from the form value, which allows the display text to be translated to another language without changing the value that will be passed by the form. I have already changed a few forms, and they are working correctly when translated.

I have also begun to add the notranslate class to some tags, so that translations do not mess up the data passed to the form, and so that coordinates display properly on translated pages.


🕸💡📝Fergus Duniho wrote on Wed, Aug 22, 2018 02:23 AM UTC:

Game Courier checks where GAME Code has been entered for a preset, whether there is a list of legal moves, and the value of the rules flag to determine the extent of a preset's rule enforcement, and it now displays this information below the board, just underneath the name of the game, which links to the rules page. It used to put this information above the board before a game began, and it didn't weigh in the value of the rules flag. It now displays it below the board during the course of a game. The rules flag can be set with the command "setflag rules;", typically in the pregame code. Setting this simply serves as a signal that the code you wrote actually does enforce the rules. It has no effect on the rest of your code, and it will not provide you with rule enforcement if you don't actually program it in.


25 comments displayed

EarliestEarlier Reverse Order LaterLatest

Permalink to the exact comments currently displayed.