Comments/Ratings for a Single Item
Type selectivity is provided by means of the captureMatrix, possibly in combination with the apostrophy in the XBetza to restrict it to a subset of the moves. I haven't encountered any case yet that could not be handled this way.
But what if the qualification only affects one of a group of possible moves? In this case, the opening move of a Pawn, which could capture anything with its conventional capture but has a special initial move only for capturing nearby enemy Pawns.
You would forbid the capture of all non-pawns by pawns in the captureMatrix, and then exempt the pawn's normal captures from this restriction by suffixing it with an apostrophe.
What would not be possible is having some moves that can only capture pawns and others that can capture only knights. (So you cannot implement an Ultima Chamelion with this method.)
You would forbid the capture of all non-pawns by pawns in the captureMatrix, and then exempt the pawn's normal captures from this restriction by suffixing it with an apostrophe.
Wouldn't this mess up Pawn promotion?
@HG: I thought I had understood, but finally I'm confused and lost. I try to describe Rhino (TwiKnight) (and Mirror-Rhino (KnightTwi)) in Betza's notation. I found z(FW) in an old page (made by Betza) but it doesn't work on the diagram. Maybe the role of the () has changed.
Also I don't understand why when I test zW and zR, I get the same result. Is z meaning an infinite repetition?
Is all this consistent?
Rhino: (afz)W Snake: (afz)F z stands for zigzag & it's repetition depend on the board size. This page is about XBetza notation, not Betza notation.
I did know about Betza's t[FR] proposal for Griffon, but I had never seen this z(FW) notation. XBetza is only upward compatible with the Betza notation for simple ('single leg') moves, and has its own system for combining these to multi-leg moves, which is more general than any of the suggestions that Betza coined in various scattered places.
The z modifier applied to a slider atom is original Betza notation for a crooked version of the piece, and is still supported in XBetza. On a leaper, such as zW, it never had any meaning.
The role of parentheses has completely changed; in XBeza these indicate zero or more repetitions of the enclosed group. So z(FW) would mean zzFWzFWFWzFWFWFW..., which doesn't really mean anything.
Brackets originally were not used in XBetza, but legs of a move were 'chained' by using an a as separator between the modifiers of each leg. This does the job of unambiguously defining very complex moves, but often leads to a very obfuscated description unsuitable for human digestion. A much clearer notation is possible by using brackets (but in a way that somewhat is different from Betza's t[...] construct). The brackets still enclose a sequence of simple Betza moves, which are supposed to be played in that order. But there is no t prefix (which was redundant, because the brackets are never used for any other purpose than chaining the contained moves), and separates the enclosed moves by hyphens (if continuation is mandatory) or question marks (if the move could also end there). This notation is already supported in the Interactive Diagram for simple cases like the Griffon ([F?R]). Supporting it in its full glory is a desire for the future.
The meaning of z in a multi-leg move has also changed; it now means l or r, but the opposit of what the previous leg did. (So that it can be used to specify crooked paths, while q means l or r in the same direction, and can be used to define curved paths.)
@HG: somewhat it gives me some explanation, somewhat I'm more confused than before. So, HG, taking this "The meaning of z in a multi-leg move has also changed; it now means l or r, but the opposit of what the previous leg did. (So that it can be used to specify crooked paths)"; how would you write that Betza's Rhino and Mirror-Rhino?
@Haru N Y: your notations do work but I can't understand why. Indeed I belong to those not digesting the "a" at all. And why do you call the Mirror-Rhino a Snake? That confuses me even more too.
You should consider the a as a chaining symbol, separating the modifiers for the legs of a multi-leg move. So in afsafzafzW you see 3 a, which means the move has 4 legs. The modifiers for these legs are none, fs, fz and fz, respectively. So the first leg is a W move in all directions (no modifier). From there it continues forward-left or forward-right (because s = l or r), i.e. a diagonal step in the second leg. Then for the third leg it again deflects 45 degrees, but in the opposit direction as in the second leg, as this is what z means. Etc. So afsafzafzW is a shorthand for aflafraflWafraflafrW, two crooked trajectories that are each other's mirror image.
Haru's notation (afz)W is shorthand for WafzWafzafzWafzafzafzW..., a set of ever longer crooked trajectories. Every additional afz adds a new leg, which deflects in the opposite fl or fr (relative) direction as the previous leg did. (Which is the hallmark of a crooked move; if they would all deflect in the same direction, which you could do with fq, you would get a circular piece.)
The second leg in every sequence should really have been specified as fs, however, to indicate it can deflect in both directions, rather than only in one that is specified relative to the previous one. The first z or q occurring in such a sequence (i.e. before it is clear what 'opposit' or 'the same' direction means for the deflection, because there was no previous deflection) is always interpreted as s. You could see this as a special rule for expanding the parentheses into paths with different lengths.
Indeed I belong to those not digesting the "a" at all.
Think of a as a separator between two legs of the move, like an "and". In aW, the a implies that there are 2 legs and the W tells you what those legs are.
It would probably have been clearer if I had used a hyphen or slash instead of an a. But it all started as aaK for the area move of Tenjiku Shogi, and caK for the Chu-Shogi Lion. But the hyphens seem to group the atoms in the wrong way, when you don't also use brackets around the individual moves.
In (not-yet-implemented) bracket notation the Betza Rhino would be [W(?fzK)], shorthand for [W?fzK?fzK?fzK?fzK?fzK?fzK?fzK...], a W leg followed by any number of alternating fl and fr K steps.
@Daniel, HG. Thank you for your kind explanations. I start to see better. I had not caught the fact that the "a" could link with a "none" modifier.
I understand the logic. I don't like it much though. It is strange that nothing more natural could have been imagined, without ambiguity, to chain simple moves. You guys have been thinking on it for a long time, so I guess it is not so easy.
Well, the bracket notation is simpler. This is why I would like to switch to it.
But when chaining moves into a single path it cannot be avoided that you would have to specify the bending angle at each point where two legs connect with the aid of directional modifiers (if f is assumed to be default).
And there is the more fundamental problem that oblique paths occur as pairs of mirror images, and that this mirroring swaps the meaning of l and r. To avoid having to specify complex oblique paths twice, there must be a way to encode sideway deflections not as an absolute direction, but in a relative way. And this is what z and q do.
I'd like two pieces. One that moves like a bishop and may move three times per turn as a wazir but without changing direction, and it's counterpart that moves like a rook and may move three times per turn as a ferz but without changing directions.
Without being sure about these I came up with the following:
WDHBmpcafWafmpcafW
&
FAGRmpcafFafmpcafF
I am not sure even after checking with the XBetza sandbox.
It seems you mean up to 3 times as a W/F, and that you also want the moves to be able to jump. When you already explicitly included the D/A, there is no need to indicate the jumping in the two-step descriptor. So this can simply be mcafW.
The 3-step move is more tricky, if you want to allow triple capture and combinations of jumping and capturing. Ideally this would be mpcafmpcafW, so that on every intermediate square it could either move, hop or capture. But not even the betzaNew.js script can handle that. For technical reasons moves with a destructive (c) and non-destructive (mp) non-final step have to be split, (non-destructive intermediates do not have to be clicked when entering the move), and the script only attempts one such a split. One of these days I should fix that; it is a legacy from the time where you could only have a single locust victim anyway.
But for now the combination cafmpcafWmpafmpcafW (where for the first leg the split has been made by hand, and each descriptor only needs a single split for the second leg, which can be done automatically) works.
Again ideally, the bracket notation for this would be H[cW-D][cD-W][cW-cW-W]. This is a more intuitive description, clearly mentioning all combinations of capture and jump. The [cW-D] component currently doesn't appear to work, though, and is treated as [cW-W]. Which is a bit of an omission, since [W-DD] and even [cW-DD] is understood correctly. Increasing stride in the bracket notation only appears to work when it occurs with a leap-rider transition. I should be able to fix that easily, even before there is a general implementation of the bracket notation.
Just to be sure, the two pieces I have mentioned are:
BWmcafWcafmpcafWmpafmpcafW
&
RFmcafFcafmpcafFmpafmpcafF
Either write mpcafW (F), or add a D (A).
Thanks!
Wouldn't R(cmpaf)2F and B(cmpaf)2W do the job somewhat more compactly?
How do I put in the promochoice variable an piece that is represented by two letters?
How do I put in the promochoice variable an piece that is represented by two letters?
Separate all pieces by commas.
Semi-related to other stuff:
I've initiated a study of Javascript in order to sit down and code a set of "weird" moves that could then be called upon for use in IDs. Some of my goals (roughly in priority order):
- Null move (mpabK) (click on the square twice, and if the piece can legally move back to the space using this or any other move, a popup asks if you want to make a Null move)
- Defining crooked/zigzag (zB, zR, zN) and rosy (qN, qC, qZ) moves as vectors that can be used for rifle captures and such.
- Same for the Windmill (pabs(abpabq)K) and Gorgon (KyafsK), and possibly Switchback (afq(afzafq)K(afqafz)K)
- Refractor/Counterrefractor (moving perpendicular or parallel to the board's edge)
- Edgehog
- Etchessera Guard (follows the King around)
- Root-N25 Leaper
- Alternate modifiers for "again, including backwards" (a(b)), "juggernaut capture" ((caf)), "flying jump" ((paf)), and similar constructs so they can be enclosed in parentheses without having to nest.
I'm figuring to assign extended Latin characters to each of these, but also have some sort of assignLetter command that can be put into the ID description so a user can assign whatever letter is preferred (including regular ASCII, of course).
And I know that there are solutions to some of these (like Edgehog and Refractor) using complex algorithms; I'm looking to shorten them for the user.
I'll set any of these aside, of course, if you beat me to them. ;) (I actually don't figure you'll ever get to any but maybe the first two and last one.)
General implementation of the bracket notation might make some of this unneeded. I mean, [K?fsQ] for Gorgon seems clear enough; why would you need a special notation (which no one would know or remember) for such a rarely used piece? The Griffon is much more common. The 'again, including backwards' issue also solves itself in bracket notation, where you would simply prefix the continuation leg with ab.
Problem with null move is indeed how to enter it, not how to describe it. An unconditianal null move could be assigned to the King, but that is just a kludge, as a null move cannot really be assigned to any piece. There could also be a parameter allowPass=1 to enable null moving, which could then provide an extra button to play it, rather than a tricky combination of board clicks that users might not be aware of. Because there is no enforcement of turn order, turns can always be passed when the AI is off. And when the AI is on there could be a button 'Pass' next to the button 'Move', which would do the same, but for the other player. Of course some provision for this should be made as well in the game notation.
The zig-zag/circular slides now use a different internal representation than other (more general) multi-leg moves. This is undesirable, and should be integrated. The whole problem can be reduced to the possibility for optional early termination of a multi-leg sequence. Using parentheses re-introduces the problem that the special z/q representation tried to solve, namely that slides are expanded into different, strongly overlapping lame leaps. Which makes move generation very inefficient. Problem is that the parentheses often indicate early termination of a sequence of intermediate legs, which must still be followed by a final one. (Which makes them similar to hook movers.) So it is not really an 'early termination' of a longer move. If the entire path was precomputed (maximum number of repeats) there should be a provision for optionally skipping a number of legs, to continue with the final part.
I once coined the idea to use the E atom in the bracket notation for a null leg on an edge square. Which would make the Edge Hog simply [E-Q][Q-E]. Using a semicolon separator in the bracket notation for indicating the remaining legs are for 'shooting only' would probably solve the crooked rifle-capture problem. The modifier cc could then be used for indicating a juggernaut leg, like pp could be used for hopping over arbitrary many.
Christian Poisson called it Serpent in French but he called it Snake in English.
25 comments displayed
Permalink to the exact comments currently displayed.
Type selectivity is provided by means of the captureMatrix, possibly in combination with the apostrophy in the XBetza to restrict it to a subset of the moves. I haven't encountered any case yet that could not be handled this way.