Comments/Ratings for a Single Item
@Fergus,
Hopefully you don't feel to nagged, but I still don't understand how to add a piece in the reserve. So far I got this.
setsystem starpath (!p2) reverse (!p9);
reserve first P;
reserve second p;
allow drops 2;
$starpath is an array of two arrays. This should do:
setsystem starpath ((!p2) (!p9));
You don't need to use the reserve command if you place the Jokers there in your FEN code.
I still get the same error:
ILLEGAL: R a1-d1; J*origin on turn 1:
You have no J to drop with the * operator for move: MOVE: J*origin.
In the end of pregame I have:
setsystem starpath ((!p2)(!p9));
reserve first J;
reserve second j;
allow drops 2;
and
in the end of postmove1 I have:
verify == space p2 J;
if > turn 8:
delete p2;
elseif not $answered and == mln $maxmln:
ask "Do you want to insert your joker now?" "Yes" J*origin "No";
endif;
There is also the need to check for flags but for now I'd like to understand why I receive this error. Thanks!
Edit:
I have deleted the reserve commands. Now it just does nothing.
Perhaps because Shogi has Black move before White, something got mixed up in how drops work, and the first array in $starpath is for the second player. So, switching the two values in the $starpath array fixes this problem.
But then you have a new problem. When you allow multiple moves on the same turn, you have to treat them individually. This normally involves rolling back the moves, then doing one at a time, checking the legality of each move individually before doing the next one. See my code for Extra Move Chess or Marseillais Chess for examples.
Marseillaise chess seems to have an error!
What should I learn from Extramove chess? I see that the premove section has a store command. That means that the initial position is remembered and probably later restored and then actually make the 2 moves after legality checks have been made.
What you should learn from Extra Move Chess is how to program your code to deal with two moves made by the same player on the same turn. While Chess allows Pawn Promotion as two moves without going through this, this is because adding a piece to a space does not change the values of $origin and $dest. However, dropping a piece does. It counts as a complete move just as much as moving a piece on the board.
The first line in Extra Move Chess's Post-Move section is
set mvs explode chr 59 thismove;
This line creates an array of all the moves made. It uses chr 59 to tell the explode function to split the string returned by thismove where semicolons appear.
The next line restores the position to what it was when it was stored in the Pre-Move section.
Some of the stuff that follows is peculiar to Extra Move Chess. The main thing to pay attention to is how it uses the elements of the mvs array to replay each individual move before testing its legality.
If you don't want to program the game as though it were a double move variant, then you could introduce the Joker to the board with an add move. This is the kind of move used in Pawn promotion. It uses the piece notation with a hyphen and a destination. Unlike a regular move, it does not include an origin space.
The alternative to dropping a piece held in hand is what is called in the code freedrops. But allowing this will allow a bunch of illegal moves that would have to be prevented in the code. Also, it changes the value of $dest if it is to a location other than $dest, and that might still require you to handle things as though a double move were being made. One other alternative is to put the rule enforcement code in the Pre-Move sections. This would involve rewriting some things. You would have to extract the moves from thismove and test their legality before they're made. Before they're made, $origin and $dest would not be available.
So any way I go it is a bit complicated.
Now I face an message saying that : A J cannot move from p2 to origin (anywhere origin is).
To be honest, at the beginning I never though programming this game is going to be so tough. I remembered you warning me about it.
For now my mind is all over the place. I think I'll try again tomorrow.
One of the things that can make programming double moves more difficult is the loss of information about the previous move. To help correct that, I have added three new variables called $prevmoved, $prevorigin and $prevdest. These store the previous values of $moved, $origin and $dest respectively. Using these, you could detect whether a Joker has been dropped and test whether the previous move was legal. Here's how it could work.
Instead of using $moved, $origin and $dest in the code for evaluating the main move, use some variables, such as #piece, #from and #to. If the last move was a Joker drop, set these variables to $prevmoved, $prevorigin, and $prevdest. Otherwise, set them to $moved, $origin, and $dest. Evaluate the move. Then if a Joker drop was made, evaluate that.
For entering the block of code that is about the joker insertion I try to use these commands. Why am I wrong?
verify flag space $origin;
verify == space p2 J;
space returns what is on a space, which is a piece. I presume you flagged the spaces, not the pieces. So, you want the flag named after the value of $origin.
For now in my pregame section I have relevant to this discussion the following:
setsystem starpath ((!p9)(!p2));
allow drops 2;
And and the end of my premove section there is this code:
verify flag $origin;
verify == space p2 J;
if > turn 8:
delete p2;
elseif not $answered and == mln $maxmln:
ask "Do you want to insert your joker now?" "Yes" J*a1 "No";
endif;
How would you do it? I don't have something solid to stand on it seems!
I wouldn't use ask in the Pre-Move section. This should be used after a player has moved, not before. Since the Jokers begin on !p9 and !p2, you want to use those coordinates, not p9 and p2, which do not exist. Prefixing a coordinate with the exclamation mark indicates that labels for that file should not be displayed on the board. This is useful for in-hand areas you drop pieces from Shogi-style. The rest may be okay to include in your Pre-Move section, but there isn't any special need to include it there as opposed to the Post-Move section, where other important code would have to go anyway. When using verify, bear in mind that it exits the function when given a false value. This is okay when no other code follows it than what is shown here.
I would use code like the following in the Post-Move sections. This code is for White.
if isvisible $origin: set piece $moved; set from $origin; set to $dest; else: set piece $prevmoved; set from $prevorigin; set to $prevdest; endif; // Regular code for enforcing piece movement, but using the variables defined above // instead of the system variables. if not isvisible $origin: if != $moved J: die You may not drop any piece other than a Joker.; elseif != $dest $prevorigin: set pname alias const alias $prevmoved; die You may not drop your Joker on any space except the one the #pname just left. endif; delete $origin; unsetflag $prevorigin; elseif onboard !p2: if not $answered and == mln $maxmln and <= turn 8 and flag $origin: set jmove join "J*" $origin; ask "Do you want to insert your Joker now?" "Yes" #jmove "No" ""; elseif >= turn 8: delete !p2; remind Joker removed because 8 turns passed without dropping it on the board. else: unsetflag $origin; endif; endif;
To me the code looks great, but after copying it I got at the beginning of the program :
if == thismove null:
say This preset enforces the rules and displays legal moves.;
endif;
this error:
Syntax Error on line 2
Misplaced endif within main scope 0.
This is very puzzling to me. Any ideea why this happens?
When that happens, it is usually because something is out of place somewhere else in the code. When it reported the error, it also listed the program. The listing of the program is formatted so that lines are properly indented. So, you should scan the listing for any line that is not indented properly. When I did that, I found a misaligned endif between lines 199 and 200. A little further on, I found a misaligned else between lines 208 and 209. Make sure all your semicolons and colons are in place around those lines.
There were 2 semicolons missing indeed. I have corrected that. But still it never goes as far as to ask the question.
@Fergus,
I'm not sure if you've seen my previous comment but the last code you have made doesn't get as far as to ask the question about inserting the joker. I have had a similar problem before. Hopefully you can spare some time this week-end to take a look.
I think you need to remove the line:
unsetflag $prevorigin;
You still need to remove it, and you have to adapt the code I gave you to Black. While you changed 8 to 12, you did not make any of the other changes that needed to be made for Black. Without those changes made, it is not going to work for Black. Also, the comment I left in the code was a placeholder for code you were supposed to write and include at that spot. It was not meant to be inserted into the code as is.
While working on the changes to the preset modifying it to include the joker drop rule, I have started pondering the idea of renouncing this rule.
The programming for the game has become to bloated and frankly I doubt the need for such a rule anymore.
To replace that the joker would start in the current king's place and the king a rank back. As a consequence the king will lose the special moves but gain a castle ability.
I hope the members of the community could offer an opinion about this change.
In doing that the pros would be :
1. More comprehensive rules.
2. Easier programming
and the cons would be:
1. no more compensation for black's second move disadvantage
Hey Aurelian, as I have said before, I have the deepest respect for all the work you are putting into the programming of this very nice game of yours.
In the games we recently played, it was an interesting tactical feature in the opening game that you had to free up the best possible square for the drop of the Joker within 8-12 moves, but the rest game had so much to offer, that you definitely can live without that feature..
The new starting set-up of the board looks a little odd to me. I think I would prefer the King back on rank 2 and 9. Then maybe the Joker can be placed on a brouhaha square (either an extra square or instead of a Champion). That would give some of the same tactical considerations as in the original game, as to when and how you should 'enter the board' mimicking with the Joker.
But most of all I have to agree with the (deciding ?!) point on your pro and con-list.: EASIER programming.
Btw, have you seen the piece description of the game JESTER CHESS ? There is a very clear and understandable definition of that game's Joker/Fool/Jester. It's a weaker (and more boring, IMO) Joker (not having full capturing ability), but it has some good points about mimicking a promoting pawn or a king..
Best wishes, Thor.
I have never really like the rule that the Joker needs to be dropped within X turns, so I am happy to see it go. I do not think white's first move needs compensation. In a game this complex I think it is unlikely that will be the deciding factor.
This new setup is ok, but I agree with Thor that it looks a little unusual. The King's position is off center with nothing beside him. He looks lonely and the queen is way off to the side. But this minor estetic is probably not too important.
Other posibilities - not sure how much they simplify the programming - leave the board as it was and either (a) have the joker drop in automatically at the first opportunity, or (b) there is no turn limit to dropping him.
I agree with Greg. White's opening advantage is likely to be a deciding factor mainly between equally skilled players who are both expert at the game. This will rarely be the case for Chess variants, which are more often than not played between people who have little experience at the game. Also, this game is bigger than Chess, and that also makes it less likely that White's opening advantage will be a deciding factor. As long as your game does nothing to increase the significance of White's opening advantage, it should be okay for you to do nothing else about it. Mainly, make sure all the Pawns are protected in the opening setup, so that neither player begins with a vulnerability that White might be able to exploit faster. Also, placing Jokers on the board gives Black the ability to move his Joker first, which is itself a slight advantage for Black.
@Thor,Greg&Fergus
Thanks guys for your thoughts on the matter.
So the crux of the matter it is that the dropping of the joker is not needed but the initial position should be given further consideration. What about then adding another brouhaha square for the joker? This would mean a champion more to the side. King in it's original position. King keeps special initial moves.
Simplicity is a hallmark of elegance. So I think it is in general better to not use several completely different mechanisms for introducing pieces on the board. Use gating, dropping or brouhaha squares, but then stick to the method of choice.
Of course a question could be: why use any of these at all? What does it add to the game that some of the pieces start on brouhaha squares? They still have to make the first move as if the brouhaha square was a normal board square, so for the pieces themselves it makes no difference. One uses brouhaha squares to prevent distortion of the board regularity, which could interfere with checkmating abilities as these are on rectangular boards, such as the Omega-Chess Wizard squares do. So you can create room for extra pieces without side effects on the board.
But why would you want to create any extra room at all, if you already have so many empty squares on the back rank, in your initial setup?
@Greg & Thor: I used that same 'lonely King' setup in Elven Chess. I did not consider it odd at all. Why would you want the King to start in the front line? This way you have free castling paths immediately, so you don't have to worry about evacuating non-jumping pieces to clear the path, and destroying the Pawn shield in the process.
@HG,
Withouht the brouhaha squares the wizard may quickly capture powerfull pieces in the opening. That was the initial idea but it does not work! Also, this way rooks stay conected.
Well, it delays their development one move, as they can use their F step to move to first rank. Disconnecting the Rooks in the process...
What is the use of giving the Rooks a free rank if you cannot castle with them anyway? Rooks have to move to (half-)open files, and it will take you quite some time before any such file arises, with not only a full rank of Pawns in front of them, but also a rank filled with pieces. By the time a better place to put a Rook emerges, the Wizards and Champions would hardly ever be in the first two ranks or on the brouhaha squares, no matter where you start them.
If you are considering to have pieces on the first rank with the rooks, there is also another option.
As long as it is not a major programming problem to add or subtract brouhaha squares, then you could consider having only 3 brouhaha's, moving EITHER the champions up to e1 and f1, OR the wizards up to somewhere on the first rank, could also be c1 and h1, for example. You will of course always have a asymmetrical set-up with the odd number of pieces, so with 1 pair of either wizards or champions, then you just have to decide if you want the joker 'king-side' or 'queen-side' on the 3 brouhaha squares.
I agree with all the insightful thoughts of H.G.Muller, and I think ELVEN CHESS looks very nice, and it does not have that 'odd look' at all, probably in Aurelian's new set up it was because of the 4 brouhaha squares below the 'lonely King'.
@HG,
That one turn delay makes the game possible, and quite fun in my experience! These principles came up from 4 years of testing with human players!
@Thor,
Programming the brouhaha squares in game code is quite easy. In C++ or another language for an engine I'm not sure!
Oh sure, that would be very easy as well. An efficient way to representthe board is by an array much larger than the board itself, and surround a board-sized central area by unmovable and uncapturable 'boundary guard' pieces. Then moves that stray off board will be automatically rejected by the code that prevents capture of your own pieces, without having to test whether it ended on the board proper. So all you do is when a brouhaha square is evacuated, not set it to the code for an empty square but to one for a boundary guard. You could do that by replacing the statement board[fromSqr] = 0; in the MakeMove() routine by board[fromSqr] = shadow[fromSqr]; where the 'shadow' array can be initialized to indicate which squares revert to empty, and which to boundary.
Perhaps I should support brouhaha squares in the Interactive Diagram. It already recognizes the special piece type 'hole', which can used to place boundary guards on the board. (Usually as edge fillers to implement non-rectangular boards, such as for Omega Chess.) I could als have it recognizepiece type 'brouhaha', and use that to place hole on the shadow board instead of the regular one.
The last thing I'd like to consider is that I'd like to try an unseen to my knowledge type of symmetry. The jokers will fill a place in the brouhaha squares but mirroring the center of the board like in mirror symmetry while the rest of the pieces have regular symmetry. This has the advantage of populating the board in a balanced way (as many pieces on both sides of the board), although one player will have a king side minor advantage while the other will have a non-king side minor advantage. I'd like to call this twist symmetry. Twist symmetry would mean that we split the pieces of one side in two so that one part has mirror symmetry to the opponent while the other has regular symmetry. This concept resembles the mathematical concept of Chiral symmetry but I'm not sure about a proof that it is the same thing.
https://www.chessvariants.com/play/pbm/diagram-designer.php?submit=Update&code=---jww----%2Fr3cc3r%2F1abngknbq1%2Fpppppppppp%2F10%2F10%2F10%2F10%2FPPPPPPPPPP%2F1ABNGKNBQ1%2FR3CC3R%2F----WWJ---&shape=square&scale=100&group=Apothecary+Chess&set=apothecary-standard&files=a+b+c+d+e+f+g+h+i+j+&ranks=0+1+2+3+4+5+6+7+8+9+10+11&font=Verdana&point=12&cols=10&board=23.10.01.10.01.10.01.10.01.10.01.32.&colors=339933+CCCC11+DD99DD+FFBBFF&bcolor=111199&tcolor=EEEE22&bsize=16&bgimage=maple-walnut.png&nextfile=50+0&nextrank=0+50
I'm sorry, I had not looked at your set-up with 5 brouhaha squares with the Joker in the middle. I have now. And it looks great. So forget my latest mainly nonsensical comment. I don't quite understand about the pieces you want to twist symmetrically, and the link doesn't seem to work. But if you want even more game testing, you are very welcome to send me an invitation (ID: Slavensky) for the 5 brouhaha square set-ups with or without twisted symmetry (if you have the time with all the testing of your new Grand Apothecary series).
I have updated and brushed up the article for this game and the preset now is in working order (here). Thanks to all of you out there contributing with thoughts and especially Fergus for the help with the preset. Have fun guys!
@Thor
I had sent you an invitation with the new preset.
Hi Aurelian, I really like to try out the new set-up, as I said it looks like very 'game-logical' with the Joker in the middle and the auxillary pieces nicely spread around it.. But I cannot open the invitation, I can't find the accept buttom, it just says, that it's your turn to move. Would you try again, or should I send an invitation to you ?
Hello Thor,
I have sent 2 general invitations 1 for each game. It should work.
Considerring the arguments made by Jean-Louis Cazeaux I have changed the names of 2 of the pieces to my original intent so the griffin and aanca became dragon and griffin (meaning the aanca is called griffin now).
Can I do the following changes to the apothecary: standard piece set?
I'd like to be able sometime myself because in the near future I hope to come up with some other new games.
Add a dragon (with the letter D)
Delete the Bird
Rename the AB to A the CA to L and the CH to H
@Fergus,
I have noticed that I forgot to ask you how to restrict the king's special moves to when the king is not in check. May you give me a final extra hand for this project?
The preset is here : https://www.chessvariants.com/play/pbm/play.php?game=Apothecary+Chess-Modern&settings=ApothecaryChess-Modern
Considerring the arguments made by Jean-Louis Cazeaux I have changed the names of 2 of the pieces to my original intent so the griffin and aanca became dragon and griffin (meaning the aanca is called griffin now).
This seems a very bad change, and it also seems you misunderstood the arguments of Jean-Louis. For one, Griffin is the established English name for an F-then-R, and it would be very confusing to now use it for another piece. Jean-Louis never claimed the Griffin would be a suitable name for the W-then-F; only that Aanca was the historic name of the F-then-R, and that it would be bad to use it on another piece. And that Aanca referred to a monstrous mythical bird for which no English name exists.
And you now use the image of a Griffin for a piece called Dragon, and the image of a bird for a piece called Griffin...
The castle subroutine contains these lines:
move #to #from; // Temporarily undo King move if sub checked #from: die A King may not castle out of check.; endif;
And before it ends, it includes this line:
move #from #to; // Redo King move
@HG,
I will be changing the pictures once I figure out how.
For now you can use the symbolic apothecary piece set.
I had tried the following in the postmove section 1 but with little succes:
if flag f2 and == moved K:
move $dest $origin; // Temporarily undo King move
if sub checked $origin:
die A King may not castle out of check.;
endif;
move $origin $dest;
endif;
You had this code before it. You should be able to see how it would stop your other code from working.
if == moved K: unsetflag f2; set Kpos $dest; endif;
@Fergus,
I'm glad to say I have managed to make it work.
Here is the code that does well:
if flag f2 and moved == K:
move $dest $origin; // Temporarily undo King move
if sub checked $origin and not checkleap $origin $dest 1 0 or checkleap $origin $dest 1 1:
die A King may not castle out of check.;
endif;
move $origin $dest;
endif;
if == moved K:
unsetflag f2;
set Kpos $dest;
endif;
if sub checked var Kpos:
die You may not move into check.;
endif;
Later edit:
But althought the code works for white it does not work for black well, and also there is a weird side effect where a queen move on the first square generates the a king may not castle out of check error. So there is still work to do despite the progress.
2nd edit:
I think I have found the bug that generates both problems. It is the first if :
if flag f2 and moved == K:
this is either always true or always false if I move the == ahead of moved but I cannot get it to work in the intended way which is enter the condition when flag f2 of set and the K has just been moved.
Should be:
if and flag f2 == moved K:
Operators come before their arguments. I'll add parenthesis to show what's going on (although you should not use the parenthesis):
if (and (flag f2) (== moved k))
I see what you say but with that I get always false. And the flag works well. I had checked. So it is the equality. If i write if and flag f2 moved == K then it works for the king but the code enters for other pieces too which is weird. So maybe == moved K regardless of how is written does not give the expected answer but all T or all F, which is weird. And that probably means I have trouble somewhere else.
Black pieces use lowercase labels. K is the white King, not just any King.
I know that. This is why the error seems weird to me. I'll get back to you on that!
You're still checking the flag on f2, which is not the starting space for the Black King.
All right, you were correct on that final point, but things are not done.
Let us start from scratch. Maybe I'll understand what is going on.
The code that greg has suggested:
if and flag f2 == moved K:
for the condition that enters the main code in question does not work although the way I see it it should.. It is always false. I have checked for the flag. That works fine so it moved be the == moved K part. But I can't see why!
Are you saying that this code is not working?
if and flag f9 == moved k:
Looking at the rest of your code, I see details that pertain only to castling, but I presume this code is not for castling. You need to understand what the code does and remove or modify what doesn't fit your purposes.
Fergus,
I have solved it:
if flag f2:
if moved == K:
move $dest $origin; // Temporarily undo King move
if sub checked $origin:
if not or checkleap $origin $dest 1 0 checkleap $origin $dest 1 1:
die A King may not use the special moves out of check.;
endif;
endif;
move $origin $dest;
endif;
endif;
@Aurelian,
At our current game I cannot make 7... b h5-f3 (bishop x wizard) because the GC program says: "A King may not use the special moves out of check. Use your browser's BACK button to go back to the previous page, then reload if necessary."
In order not to affect the current games, it would be convenient to do the tests to improve the code in a cloned preset using another settings name.
I removed the buggy code.
Now it should work!
@Fergus,
I have moved the buggy code back to the old testing ground:
if flag f2:
if moved == K:
move $dest $origin; // Temporarily undo King move
if sub checked $origin:
if not or checkleap $origin $dest 1 0 checkleap $origin $dest 1 1:
die A King may not use the special moves out of check.;
endif;
endif;
move $origin $dest;
endif;
endif;
The way this goes wrong is that other pieces other than the king are affected by it. Any idea why?
I implemented 'repeated shuffling' in the diagram now, where the shuffle parameter accepts a comma-separated list of shuffles, which are then performed in order. I also added a new shuffle limitation: a piece prefixed with ':' (colon) will not be shuffled to different shades (like a '!' prefix would do), but to symmetric locations. (Which, on boards with an even number of files, should also have opposit shades.) Better make sure to apply it only to an even number of pieces on a set of symmetrically distributed locations!
I think this should allow you to do the shuffling you want, through a trick: When you shuffle (say) Knights and Bishops with :BN specification, it can only leave them as they were, or swap the N and B on both wings. Otherwise the Bishops would no longer be symmetrically positioned.
So what you can do is start the Bishops in the d- and g-file, and (say) A and C on the b- and i-file, and then shuffle A:BC. This will make the B end up either on d/g or b/i, with 50-50 chance. After that you shuffle B and N (which started on c- and h-file), as :BN, to randomize those while preserving symmetry. Finally you shuffle ACQ without limitations. So the specification would be shuffle=A:BC,:BN,ACQ .
I have tested it by pressing restart and it does not go well. The queen and knigt get swaped. But not the way I described in the rules. My code is here:
<script type="text/javascript" src="../membergraphics/MSinteractive-diagrams/betza.js"></script>
<div style="float:left;margin:0 40px 20px 0;">
<div class="idiagram">
files=10
ranks=12
holdingsType=1
promoZone=3
promoChoice=!P*N*B*C*W*R2*J2*Q1*D1*G1
graphicsDir=../graphics.dir/alfaerie/
whitePrefix=w
blackPrefix=b
graphicsType=gif
squareSize=54
symmetry=mirror
shuffle=G:BD,:BN,GDQ
hole::::a1,b1,c1,i1,j1,,a12,b12,c12,i12,j12
pawn:p:ifmnDfmWfceF:pawn:a4,b4,c4,d4,e4,f4,g4,h4,i4,j4,,a9,b9,c9,d9,e9,f9,g9,h9,i9,j9
rook::::a2,j2,,a11,j11:1
queen::::e3,,e10:1
bishop:B:B:bishop:d3,g3,,d10,g10
knight:N:NmHmA:knight:c3,h3,,c10,h10:1
wizard:W:FL:mage:d1,g1,,d12,g12
champion:C:WAD:champion:e1,h1,,e12,h12:1
joker:J:fI:fool:f1,,f12
dragon:D:FyafsF:dragon:i3,,i10
griffin:G:WyafsW:gryphon:b3,,b10
king:K:KimbsLimbsN:king:f3,,f10
</div></div>
I had tested it be pressing restart a few times on the diagram. Refresh gives me the initial position.
OK, I see that my trick did not work for swapping b and d, as these are same shade, so that the B must get automatically to opposit halves, and the : adds nothing extra. I changed the meaning of : now to explicitly mean "mirror-image location", and adapted the Diagram script for that. This should make your diagram work as you have it, with the updated script.
I'm not sure why but the diagram still does not work.
It behaves the same way.
I'm wondering if you have not tried to put a bishop over an already occupied square. Would this be an error?
I think caching again is broken on this website. I uploaded a new Diagram script, but when I read it back from the website, it shows the old text. Only when I suffix the URL with some random suffix, like ?t=1234, I get to see the newly uploaded text.
So this is what you can do as a work-around too: suffix the URL to betza.js in your comment to make it betza.js?nocache=true , to make sure it will use the new script. You still would have to flush your browser cache. When I tried the current script locally on your diagram, the shuffling works as it should.
BTW, note that when you specify symmetry=mirror (as you must, to preserve vertical symmetry during shuffling), there is no need to mention the location of the black pieces, as the Diagram would automatically add those. So you could leave out the double comma and everything behind it, even for the holes.
@HG,
Indeed HG, now the diagram works as expected for me too!...
Thanks!
@Fergus,
I have remade the code to work as expected for the king to not be able to use the special moves out of check:
/play/pbm/play.php?game%3DApothecary+Chess+1%26settings%3DApothecary1working
The relevant piece of code for white is:
if flag f2:
if == moved K:
if sub checked $origin:;
if not or checkleap $origin $dest 1 0 checkleap $origin $dest 1 1:
die A King may not use the special moves out of check.;
endif;
endif;
endif;
endif;
There is still the problem that the special moves are displayed as legal when a king is in check. Is that solvable?
As long as you evaluate actual moves in the Post-Move sections, you have to bear in mind that potential moves are evaluated before a move would be made, and actual moves are evaluated after a move has been made. This means that you have to sometimes use different code for potential and actual moves. That's true of the King here. You should use both a function and a subroutine for the King's movement. The function should handle only potential moves, and it should stop a King from making its special move out of check before it makes its move. The subroutine should handle actual moves, and it should undo a King's special move after it has been made to make sure the King didn't move out of check with that move, then redo it if it was legal.
have written the following code but I don't know where to call the subroutine.
sub King from to
move #to #from;
if sub checked #from:
verify or checkleap #from #to 1 0 checkleap #from #to 1 1;
else:
verify fn King #from #to;
endif;
move #from #to;
endsub;
;
To the editors.
Can a piece set be changed or it needs to be redone from the beginning?
I want to change in the apothecary chess standard piece set the bird with the dragon.
Since your function has to allow special moves but stop the illegal ones, you should not be calling your function from your subroutine. They should be independent from each other. How to call the subroutine is described in the Fairychess include file tutorial under "A Real Example from Chess".
The tutorial also describes how you can use different pieces with the same notation. Although you cannot modify a set within Game Courier, you can change which pieces you use and what notation you will use for them. I recommend reviewing this tutorial every now and then.
While I could add code to Game Courier for enabling GAME Code programs to modify the images in piece sets, it would not work in Edit mode. So, if you want to use piece images that are not in your current set, you should change it to use a different set.
Fergus,
I want to use the same set, not another one, but with a dragon picture instead of a bird picture. Is that even possible or should I make another piece set from the beginning?
Since you are using custom 'Apothecary' sets, and I doubt other games are using these sets, they can be altered. Do you want to keep the notation the same? ('A' becomes bird) Or do you want to add a Dragon as 'D'?
Ok, I have added D and left the A so older games will still view correctly. If you are going to change the notation, remeber to change the name of the settings so that you don't break older game logs.
@Oisin D.
I need a moment with no ongoing games so that I can change the pieces from Griffin and Aanca to Dragon and Griffin, so please temporarilly delete your pending invitation.
You need to use a new Settings name so old games don't break. But if you do that, the pending invite is ok.
@ Greg,
I prefer to keep the name and maybe rename the settings files used for old games. Can it be done?
I prefer to keep the name and maybe rename the settings files used for old games. Can it be done?
You can keep the name of the game, but the settings name will need to change. I don't know how to change the settings name for existing logs.
I should use redirect then on the old settings file toward the new one, isn't it?
@HG, Hello, The interactive diagram on this page puts in the initial position an extra black joker outside of those defined. Why is this happening?
I have played this game against the interactive diagram's AI. It takes less time that an game courier match and I wanted to see how the games feel after the final changes I have made. The game seems to be very tactical now with many strong pieces quickly engaging . I'm really unsure about how good the game is. It's learning curve is quite steep but maybe once properly learned it is fun. I was hoping that more experienced player will take a look and try to play against the interactive diagram until the endgame (me I always blunder something before the endgame).
I have switched the places of sangoma and wizard in the opening position in order to give more opening opportunities.
I have tried this week to add a compound piece. Unfortunately this proved to make the game worse as more opening moves were forced. So I reverted to an earlier version while keeping the idea that black has more pieces on the non-king side. This will be the final apothecary chess-modern game. I'm satisfied with the game.
The interactive diagrams on this page have stopped working. Any idea why?
Fixed!
I had made a small change, to also look for castling partners of non-royal pieces that can castle, but that made it chocke on blacked-out squares, when it tried to figure out what move these had.
Thanks!
But they still are not showed, HG!
Flush your browser cache, or you will keep using the old version of the Diagra script. It works for me.
@Hg, You were correct. Now it works for me too. Curiously though that my other apothecary game worked fine!
The diagrams on this and the Apothecary Chess-Classic page are missing white's brouhaha squares, and so are both corresponding game courier presets.
To me they look normal!
Now I see what you mean. I don't think it is something I have done!
@Fergus Have you any idea about what is going on!
100 comments displayed
Permalink to the exact comments currently displayed.
I had seen the material in the meantime. Thanks. GameCode is a Marvel!...