Check out Glinski's Hexagonal Chess, our featured variant for May, 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 ]

Ratings & Comments

EarliestEarlier Reverse Order LaterLatest
Game Courier Logs. View the logs of games played on Game Courier.[All Comments] [Add Comment or Rating]
🕸📝Fergus Duniho wrote on Tue, May 14 02:09 AM UTC in reply to H. G. Muller from Mon May 13 08:30 PM:

That would indeed be an alternative: do a full king-capture test after every King move. But it would be more expensive, as a King usually has several moves.

It's more than that. I do a full king-capture test for every pseudo-legal move by every piece that can move. My code works like this.

  1. It goes through every piece from the side that can move.
  2. For each piece on the side that can move, it calculates the spaces within its range of movement. This is an optimization to keep it from checking for legal moves to every position on the board.
  3. For each space within a piece's range of movement, it checks whether the piece has a pseudo-legal move there.
  4. For each pseudo-legal move, it tries the position and checks whether it places the King in check.
  5. It checks whether the King is in check by checking whether any enemy piece can move to the King's space. As an optimization, it returns true as soon as it finds one check.
  6. It checks whether a piece may move to the King's space by calling its function for the move from its location to the King's space.
  7. Divergent pieces are handled by writing them to behave differently when the movetype variable is set to CHECK. In the following example, the function for the White_Pawn first checks some conditions any Pawn move must meet, then handles capturing, then continues to handle non-capturing and en passant moves only if movetype is not CHECK.
def White_Pawn
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
and var ep
or and checkride #0 #1 0 1 == rankname #0 var wpr
or checkleap #0 #1 0 1
and empty #1
and != var movetype CHECK
or and islower space #1 checkleap #0 #1 1 1
and any onboard where #1 0 1 == var movetype CHECK count var wprom
and <= distance #0 #1 var fps
and > rank #1 rank #0;
  1. Pieces with non-displacement captures are handled by writing two different functions for them and using the value of movetype to call the correct function.

So you would have to do enemy move generation several times.

Since my code uses piece functions, this is not a big problem. In tests I ran yesterday, my checked function ran 1000 times in under half a second, and the checked subroutine got called 1000 times in close to a second, and this was on a position in which the King was not in check, which meant it never broke out early. Since your code does not use piece functions, it may handle the evaluation of moves more slowly, which will also cause it to evaluate check more slowly.

Testing whether a destination contains the King is not any more expensive than marking the destination. And to do it, you only need to geenrate all enemy moves once.

This optimization might be helpful when not using piece functions, but one thing about it concerns me. While it might be helpful in determining whether a move by the King would be into check, I'm not sure it will work for revealed checks. It is because of the possibility of revealed checks that my code checks for check for the position resulting from every single pseudo-legal move it finds.

I suppose one optimization that could be made if it were needed would be to identify the pieces that might possibly check the King at its current location, then limit the test for whether a move by another piece places the King in check to those pieces. This could be done by making a short list of every enemy piece whose range of movement contains the King's location and having the checked function use it instead of onlyupper or onlylower. If this list were empty, it could even skip the step of trying out a pseudo-legal move and testing whether it places the King in check.

However, this might not work for non-displacement captures in which the capture occurs outside the piece's range of movement, such as the Coordinator capture in Ultima. So, I have to balance efficiency with the work a programmer has to make to use a piece in a game. The brute force method I use helps reduce the work the programmer has to do to make different kinds of pieces work with it.


Grolman Chess. Game with sequential movement of pieces of the same color. (8x8, Cells: 64) [All Comments] [Add Comment or Rating]
📝Вадря Покштя wrote on Tue, May 14 06:10 AM UTC in reply to Bn Em from Mon May 13 03:39 PM:

Here is a link to Grolman Chess on Wikipedia (in Russian) https://ru.wikipedia.org/wiki/Сказочные_шахматы_Грольмана

As you can see there is only a meager description of Grolman's main idea.

To get a playable version of the game, I had to slightly expand the rules regarding check and checkmate. It would not be entirely correct on my part to take credit for co-authorship, because the rules that I described here and on chessdotcom follow from pure logic.

Regarding castling. It is not prohibited, but simply impossible. During the game there cannot be a situation where there are no pieces for castling between the king and the rook. The chess pieces are in a constant state of movement. Either the king or the rook will definitely make a move by the time the opportunity for castling arises.

You ask, "How does it actually play as a game?" The game is absolutely playable and is not chaotic at all. The fewer chess pieces left on the board, the more the game leans toward classic chess, while retaining a little of the magic from the chain reaction of chess pieces moving.

I don’t know whether it’s worth including Groman chess problems in the description of the rules. Perhaps just a link to The Problemist or to my blog on chessdotcom is enough.


Game Courier Logs. View the logs of games played on Game Courier.[All Comments] [Add Comment or Rating]
H. G. Muller wrote on Tue, May 14 07:19 AM UTC in reply to Fergus Duniho from 02:09 AM:

5. It checks whether the King is in check by checking whether any enemy piece can move to the King's space. As an optimization, it returns true as soon as it finds one check.

The efficiency of your algorithm depends on whether there is a fast method to answer the question "does the piece at square A attack square B", which then can be combined to a function "IsSquareAttacked" by looping over all pieces A. But for complex multi-leg moves (pieces that turn corners, or jump over others, or do not end their move at the square they attack) it is hard to find a shortcut even if you are writing dedicated code for it. Often the best way is to just generate all moves of the piece at A, and for each of those test if it happens to hit B. For simple sliders and leapers it would be possible to immediately exclude they are attacking B based on the (x,y) coordinates of the leap from B to A (e.g. x*y!=0 for a Rook), or even tabulate in which direction you would have to move to arrive at B (and then test whether this path is unobstructed).

I could of course classify pieces (or even their individual moves) as simple or complex, and use a fast "does A attack B" function for leaps and straight slides, and only generate the complex moves of all enemy pieces to test whether these hit B. Typically only a small fraction of the pieces will have complex moves, and then this could be competitive.

This optimization might be helpful when not using piece functions, but one thing about it concerns me. While it might be helpful in determining whether a move by the King would be into check, I'm not sure it will work for revealed checks. It is because of the possibility of revealed checks that my code checks for check for the position resulting from every single pseudo-legal move it finds.

Marking of attacked squares to weed out illegal King moves is just one of the two things the accelerated check test does. The other thing is that it tabulates for each board square which (attempted) sliding moves visit it. If such a move did not hit B before, it cannot hit B after a move that would not mutate at least one of the squares that the move visited. E.g. if a Cannon is looking at the King directly it would not check, but during move generation the first leg of the move in the direction of the King would have been attempted, and perhaps even succeeded by capturing something that was behind the King. But whether it succeeded or not, all the squares between Cannon and King would get this Cannon move added to the list of moves that visit them.

If the move to be tested for legality would land on an empty square between Cannon and King, it would see in the constructed table that there was a Cannon that had a move that went over the destination square, and thus will be affected. It will then retry that move of that Cannon, to test whether it hits the King in the new position. Likewise, it would see whether (say) a Bishop had been attacking its origin, and then rerun that Bishop move to test whether it hits the King. This takes care of discovered slides and hopper activation. Moves of other pieces, as well as other moves of these same pieces would not have to be tried; these were not hitting the King before, none of the squares they visited was mutated, so they won't hit the King now.

This is actually the most robust part of the algorithm, which would even work in case of multiple absolute royals: moves that were not checking before cannot check after a move that did not mutate any squares in their path. (But if there are Immobilizers...)

In general the algoritm is very fast: for each move with a royal you test whether the destination is marked as attacked, and for moves with non-royal pieces you only have to rerun the opponent sliding moves that were tabulated as hitting origin or destination (and occasionally other squares that were mutated). And on average there are fewer than 1 enemy sliding moves (i.e. moves that could potentially have continued if the occupancy of the square had been different) to a square, in a typical variant. So in many cases a pseudo-legal move can be accepted as legal by just concluding that the mover was not royal, and the origin and destination of it were not visited by any opponent move. When already in check, it always reruns the move that was delivering that check, as the first test. (Most moves would not resolve the check, and these can then be discarded without further testing.)

Anyway, it is possible to configure the preset to not use the accelerated test, and for a not-too-lage variant (8x8 or 10x10) this will probably work fine.

 


MSambitious-amphibies[All Comments] [Add Comment or Rating]
Lev Grigoriev wrote on Tue, May 14 07:35 AM UTC:

Can we test the balance of this army against FIDEs? I’ve played against Daniel Zacharias as white Amphibies and won easily. Then I decided to make them black. How it’s now?


Immortal Chess. 36 Immortals with hidden powers create chaos on the board. (10x10, Cells: 100) [All Comments] [Add Comment or Rating]
🔔Notification on Tue, May 14 08:14 AM UTC:

The author, Florin Lupusoru, has updated this page.


MSambitious-amphibies[All Comments] [Add Comment or Rating]
H. G. Muller wrote on Tue, May 14 08:46 AM UTC in reply to Lev Grigoriev from 07:35 AM:

The army seems weak. Rule of thumb is that leapers with 8 targets are similar in value to Knight, with 12 targets slightly weaker than Rook, and with 16 targets about half-way between R and Q. And on 8x8 leaps longer than two are usually worth less than those to the first two 'rings'.

Because of the distant leaps the initial position might not be quiet, so that you can gain some material in the opening to restore the balance. (But a single H move is not that dangerous, as it has no forking power.) But even if that was the case, a non-quiet start position is not a good trait.

And I think the proper English word is 'Amphibians'.


Strength Sapping Pieces[All Comments] [Add Comment or Rating]
HaruN Y wrote on Tue, May 14 09:49 AM UTC:Good ★★★★

Kaministiquia by Stuart Spence, AKA Zulban

files=7 ranks=7 promoZone=1 promoChoice=Q graphicsDir=/cgi-bin/fen2.php?s=50&t=Greenwade&w=e6b5e1&b=27d481&p= squareSize=50 graphicsType= symmetry=none spell=charm trackPieces=7 royal=K royal=∅ royal=∆ firstRank=1 borders=0 coordColor=#3e8090 rimColor=#184d72 lightShade=#1e5b6e darkShade=#193250 shuffle=RNBK∅ White Pawn:P:ifmnDfmWfceF:pawn:a2,b2,c2,d2,e2,f2,g2 Black Pawn:∅:ifmnDfmWfceF:pawn:,,a7,c7,d7,e7,g7 morph=Q knight:N:N:knight:b1,f1 bishop:B:B:bishop:c1,e1 rook:R:R:rook:a1,g1 queen:Q:Q:queen: Trojan Horse:K:N:knight--charm:,,b7,f7 Peasant:∆:fmWfceF:--pawn:,,a6,b6,c6,d6,e6,f6,g6 morph=Q king:K:KisO2:king:d1

But with shuffle.


Monster Mash. (Updated!) Armies consist of classic monsters and scary creatures. (13x13, Cells: 169) [All Comments] [Add Comment or Rating]
HaruN Y wrote on Tue, May 14 10:12 AM UTC in reply to Bob Greenwade from Mon May 13 02:16 PM:

contageous=Z!R!P


Grolman Chess. Game with sequential movement of pieces of the same color. (8x8, Cells: 64) [All Comments] [Add Comment or Rating]
Jean-Louis Cazaux wrote on Tue, May 14 12:09 PM UTC in reply to Вадря Покштя from 06:10 AM:

I was wondering how this rule could be used on a giant CV, Bigorra for example. It could be a way to accelerate the game, no?  Is there anyone who had tried this already?

Maybe the priority (to choose which friendly piece to move) has to be cancelled in order to keep the game as simple as possible.


Monster Mash. (Updated!) Armies consist of classic monsters and scary creatures. (13x13, Cells: 169) [All Comments] [Add Comment or Rating]
Aurelian Florea wrote on Tue, May 14 12:36 PM UTC in reply to Bn Em from Mon May 13 03:12 PM:

Actually the name was chosen by HG!


💡📝Bob Greenwade wrote on Tue, May 14 01:26 PM UTC in reply to HaruN Y from 10:12 AM:

contageous=Z!R!P

Done!


🔔Notification on Tue, May 14 01:27 PM UTC:

The author, Bob Greenwade, has updated this page.


Grolman Chess. Game with sequential movement of pieces of the same color. (8x8, Cells: 64) [All Comments] [Add Comment or Rating]
📝Вадря Покштя wrote on Tue, May 14 01:40 PM UTC in reply to Jean-Louis Cazaux from 12:09 PM:

Grolman's idea can be applied to almost any variation of chess. I think it would look amazing on larger boards with a lot of different pieces.


Bn Em wrote on Tue, May 14 01:52 PM UTC in reply to Вадря Покштя from 06:10 AM:

Here is a link to Grolman Chess on Wikipedia (in Russian)

My Russian is alas extremely limited (i.e. isolated words), but it does look like about as much detail as in Problemist, i.e. extremely sketchy.

Regarding castling. It is not prohibited, but simply impossible. During the game there cannot be a situation where there are no pieces for castling between the king and the rook. The chess pieces are in a constant state of movement. Either the king or the rook will definitely make a move by the time the opportunity for castling arises.

Depends on whether you count moves made only automatically as K/R moves. Otherwise the following sequence of White moves, f.ex., would position the white K and K‐side R appropriately:

  1. e4(Ne2,Rg1)
  2. Ng3(Be2,Rf1)
  3. Bh4(Ne2,g3)
  4. Bg6
  5. g4(Ng3,Qe2,Kd1,Re1)
  6. Nh1
  7. Ng3(Rh1,Ke1,Qd1), ending in this position

Hardly a good sequence of moves, even if Black allows it, but neither K nor R have made any voluntary moves and the space between them is empty. A matter of opinion perhaps whether this kind of edge case is worth catering for.

Of course, there are various extended forms of castling in use (general two‐space K move, or Fischer Castling) which might be considered appropriate for a game even though it's not conventional in the Problem world, but it makes sense that at least the canonical version would forgo this.

The game is absolutely playable and is not chaotic at all

Pushing pieces around trying to contrive the above sequence leads me tentatively to agree, though of course nothing would substitute for actual play

I don’t know whether it’s worth including Grolman chess problems in the description of the rules

It'd be perfect for the Notes section, though ;‌) And whilst it's less common nowadays, there are plenty of pages here with illustrative problems or example games; I believe that kind of thing is still considered a positive


Bn Em wrote on Tue, May 14 01:52 PM UTC in reply to Jean-Louis Cazaux from 12:09 PM:

Now that you mention the possibility, it does bear a certain resemblance to one of the mechanisms in Regimental Chess (we have a link page but the link is broken; you're better off doing a web search and checking out some of the videos they made) exactly for this purpose.

The difference there (if I remember correctly) is that like pieces follow like, rather than always going in order of strength or allowing free choice. And it may or may not be optional there.


🔔Notification on Tue, May 14 02:11 PM UTC:

The author, Вадря Покштя, has updated this page.


📝Вадря Покштя wrote on Tue, May 14 02:20 PM UTC in reply to Bn Em from 01:52 PM:

"Depends on whether you count moves made only automatically as K/R moves. Otherwise the following sequence of White moves, f.ex., would position the white K and K‐side R appropriately:

  1. e4(Ne2,Rg1)
  2. Ng3(Be2,Rf1)
  3. Bh4(Ne2,g3)
  4. Bg6
  5. g4(Ng3,Qe2,Kd1,Re1)
  6. Nh1
  7. Ng3(Rh1,Ke1,Qd1), ending in this position"

According to the rules of standard chess, if a move is made with the king or rook, castling is impossible. Don't forget that the game is played as close as possible to standard chess.


Play Chess Variants with Jocly. Missing description[All Comments] [Add Comment or Rating]
A. M. DeWitt wrote on Tue, May 14 04:30 PM UTC:

@François Houdebert,

While I was on the biscandine site, I noticed a few errors in your rule descriptions, as well as an error in the Tori Shogi Jocly implementation.

In the Tori Shogi Jocly implementation, Player A's Left Quail has its movement mirrored from what it should be.

I have attached the corrected images for the movement diagrams below. I also removed the extraneous black lines from the Mini-shogi setup image.

https://www.chessvariants.com//membergraphics/MSa.-m.-dewitts-miscellaneous-files/corrected-images-biscandine-jocly.zip

 


Game Courier Logs. View the logs of games played on Game Courier.[All Comments] [Add Comment or Rating]
🕸📝Fergus Duniho wrote on Tue, May 14 06:51 PM UTC in reply to H. G. Muller from 07:19 AM:

Marking of attacked squares to weed out illegal King moves is just one of the two things the accelerated check test does. The other thing is that it tabulates for each board square which (attempted) sliding moves visit it.

It's not the same thing that you're doing, but I have now made a quicker version of stalemated called stalemated-quick, which does some preprocessing to reduce the work involved in checking for check. It starts by creating an array of the King's location and each space it may move to, and for each location in this array, it makes an array of every location with an enemy piece that has it in its range. The code looks like this:

// Build threat lists
set krange merge fn join const alias space #kingpos "-Range" #kingpos #kingpos;
set threats ();
for to #krange:
  set threats.{#to} ();
next;
for (from piece) fn #enemies:
  set in intersection var krange fn join const alias var piece "-Range" var from;
  for to #in:
    push threats.{#to} #from;
  next;
next;

So it creates multiple elements of an array called threats, each of which is an array of the enemy pieces that include that space in its full range of movement. At the start of Chess, threats.d2 and threats.d1 both have one element set to d8, and the others (elements e1, e2, f1, and f2 of threats) are empty.

To check for check, it first assumes a value of false, and it tries out the move only if there are pieces potentially threatening the space the King is on. That move looks like this:

set checkpos cond == #from #kingpos #to #kingpos;
set checked false;
if count elem var checkpos threats:
  move #from #to;
  set checked fn threatened #checkpos;
  restore;
endif;

Instead of using the checked function, it used the threatened function, which looks like this:

def threatened anytrue lambda (fn const alias space #0 #0 var king) 
elem var king threats 
=movetype CHECK 
=king;

This function expects threats to be populated with appropriate values. So it can't be used everywhere checked can.

In tests with Chess, everything seems to be working. After making sure it worked, I did some speed tests comparing 100 calls to stalemated with 100 calls to stalemated-quick. In each pair, stalemated is first, and stalemated-quick is second. The results show that stalemated-quick is normally quicker.

Elapsed time: 4.7686970233917 seconds

Elapsed time: 2.8460500240326 seconds

Elapsed time: 4.8747198581696 seconds

Elapsed time: 3.0506091117859 seconds

Elapsed time: 4.4713160991669 seconds

Elapsed time: 2.9584100246429 seconds

Play Chess Variants with Jocly. Missing description[All Comments] [Add Comment or Rating]
François Houdebert wrote on Tue, May 14 08:07 PM UTC in reply to A. M. DeWitt from 04:30 PM:

Thanks.

I've taken the comment into account, which will improve the doc.


Grolman Chess. Game with sequential movement of pieces of the same color. (8x8, Cells: 64) [All Comments] [Add Comment or Rating]
Jean-Louis Cazaux wrote on Tue, May 14 08:43 PM UTC in reply to Bn Em from 01:52 PM:

@Bn Em: I have not understood this "The difference there is that like pieces follow like"?

What do you mean?


Bn Em wrote on Wed, May 15 12:54 PM UTC in reply to Вадря Покштя from Tue May 14 02:20 PM:

if a move is made with the king or rook

The ambiguity lies in how exactly this is interpreted, and in particular whether passive moves (here, f.ex., being dragged along by another piece) count.

There is precedent in the very Problemist issue this variant was introduced in: Petkov's discussion of ‘Half‐neutral’ pieces includes an exaample where a HN R in white phase (see the article for further details) can castle with the white K, implicitly without changing to its neutral phase (as would happen if the R moved on its own) and thereby giving check; thus at least in that context Castling is explicitly treated as an K move which only incidentally causes the R to change position too.

Standard Chess leaves this kind of situation entirely unspecified as relevant situations can never arise: the only (potentially) passive move is castling, and once that's happened the K has moved and so further castling is prohibited.


Bn Em wrote on Wed, May 15 12:54 PM UTC in reply to Jean-Louis Cazaux from Tue May 14 08:43 PM:

In Grolman/Kazan Chess, if a piece moves from a square where it is protected, the protecting piece follows. In Regimental Ch., from what I remember (I saw a video several years ago), if you move a piece protected by another piece of the same kind, the protector may follow. In both games this applies recursively so pieces can form chains.

So instead of the weakest available piece, it's only pieces of the same type (or maybe pieces that share moves?) that can form these kinds of chains.


23 comments displayed

EarliestEarlier Reverse Order LaterLatest

Permalink to the exact comments currently displayed.