You are on the backup site for Chessvariants.com. Any posts, moves, or other changes you make here will not be permanent, because the pages and database from the main site will be backed up here every midnight EST. Additionally, things may not be working right, because this site is also a testbed for newer system software. So, if you are not here to test, develop, or merely read this site, you may want to change .org to .com in the navigation bar and go to the main site.



The Chess Variant Pages




[ 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 ]

Single Comment

Chess. Play Chess with Jocly.[All Comments] [Add Comment or Rating]
Michel Gutierrez wrote on 2016-04-22 UTC
<p>Forget about <code>Model.Game.cbRoyalLongRangeGraph</code>, that's really not want you want to do. These <code>cb...RangeGraph</code> functions generate a static graph for a single piece on an empty board.</p> <p>The unusual move here is having the King (yeah, the Queen-dressed one) moving long range, but unable to pass through a check position.</p> <p>You should:</p> <ul> <li>define an empty graph for the king, so it does not make core-generated moves</li> <li>overwrite the <code>Board.GenerateMoves</code> function to <ol> <li>call the original <code>Board.GenerateMoves</code> to generate all (but King's) legacy moves</li> <li>add the King's moves manually</li> </ol> </li></ul> <p>To overwrite <code>Board.GenerateMoves</code>:</p> <p></p><pre>var SuperModelBoardGenerateMoves=Model.Board.GenerateMoves; Model.Board.GenerateMoves = function(aGame) { SuperModelBoardGenerateMoves.apply(this,arguments); // add extra moves with this.mMoves.push(...) } </pre><p></p> <p>To generate manually the king's moves, look at <code>base-model.js</code> function <code>Board.GeneratePseudoLegalMoves</code>, lines 798-850. This shows how to walk through the graph for long range movements, following <em>directions</em> (called <code>lines</code> here). This is where you can verify that each single position crossed is not in check (by calling <code>Board.cbGetAttackers</code>). If it is, just break out the loop to stop considering the line.</p> <p>Have a look at the Metamachy model file. The special castle implementation is not that far from what you want to achieve here.</p>