[ List Earliest Comments Only For Pages | Games | Rated Pages | Rated Games | Subjects of Discussion ]
Single Comment
![A game playable with Jocly](/index/jocly.gif)
<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>