Skip to content

Commit 3189d8e

Browse files
committed
Merge branch 'pullreq' of http://hgm.nubati.net/git/jocly into fairySet
2 parents 856c9cd + 9791595 commit 3189d8e

5 files changed

Lines changed: 28 additions & 69 deletions

File tree

src/games/chessbase/base-model.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -858,7 +858,7 @@
858858
(this.castled[-1] ? 1 : (kingMoved[-1]? 0 : castlePiecesCount[-1] / (g.castleablePiecesCount[-1]+1)));
859859

860860
if(cbVar.evaluate)
861-
cbVar.evaluate.call(this,aGame,evalValues,material,pieceCount);
861+
cbVar.evaluate.call(this,aGame,evalValues,material,pieceCount,pieceValue);
862862

863863
var evParams=aGame.mOptions.levelOptions;
864864
for(var name in evalValues) {

src/games/chessbase/decimal/scirocco-model.js

Lines changed: 23 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -457,88 +457,47 @@
457457
castle:{
458458
},
459459

460-
evaluate: function(aGame,evalValues,material) {
460+
evaluate: function(aGame,evalValues,material,pieceCnt,pieceValue) {
461461

462462
// check lack of material to checkmate
463463
var white=material[1].count;
464464
var black=material[-1].count;
465-
var pieceCnt = 0, n = white.length;
466-
467-
for(var i=0; i<n && pieceCnt<2; i++) pieceCnt += white[i];
468-
if(pieceCnt <= 1 // white king single
465+
466+
if(pieceCnt[1] <= 1 // white king single
469467
|| white[10] + white[28] == 0) { // or captured
470468
this.mFinished=true;
471469
this.mWinner=-1;
472470
}
473-
pieceCnt = 0;
474-
for(var i=0; i<n && pieceCnt<2; i++) pieceCnt += black[i];
475-
if(pieceCnt <= 1 // black king single
471+
472+
if(pieceCnt[-1] <= 1 // black king single
476473
|| black[10] + black[28] == 0) { // or captured
477474
this.mFinished=true;
478475
this.mWinner=1;
479476
}
480477

481478
// reconstruct piece values per player
482-
var difVal = evalValues['pieceValue'];
483-
var totVal = difVal/evalValues['pieceValueRatio'] - 1;
484-
var wVal = 0.5*(totVal + difVal) + 4;
485-
var bVal = 0.5*(totVal - difVal) + 4;
479+
var wVal = pieceValue[1] + 4;
480+
var bVal = pieceValue[-1] + 4;
486481

487482
// calculate expected material gain from promotions
488483
var wProm = 0, bProm = 0; // promotion gain
489-
for(var i=0; i<n; i++) { // what players gain if all their pieces promote
490-
var gain = promoGain[i];
491-
wProm += white[i] * gain;
492-
bProm += black[i] * gain;
493-
}
484+
this.pieces.forEach(function(piece,index) {
485+
if(piece.p<0 || piece.t>18 || piece.t==10) return; // absent, already promoted or king
486+
var h=geometry.height;
487+
var factor=0.9, s=speed[piece.t];
488+
if(s) { // reduce bonus for leapers that have far to go
489+
var rank=geometry.R(piece.p);
490+
if(piece.s<0) rank=h-1-rank; // convert to player POV
491+
if(rank>8) rank=8; // flat in zone
492+
rank+=2;
493+
factor-=(64-rank*rank)*s*0.002; // deduct up to 0.72 (for 1st-rank stepper)
494+
}
495+
factor*=promoGain[piece.t];
496+
if(piece.s>0) wProm+=factor; else bProm +=factor;
497+
});
494498
var wFrac = (bVal < 20 ? 1 : (wVal - bVal + 20)/wVal); // likely fraction to promote
495499
var bFrac = (wVal < 20 ? 1 : (bVal - wVal + 20)/bVal);
496-
// evalValues['pieceValue'] += 0.9*(wFrac*wProm - bFrac*bProm);
497-
498-
// motivate pawns to reach the promotion line
499-
var distPromo=aGame.cbUseTypedArrays?new Int8Array(3):[0,0,0];
500-
var height=geometry.height;
501-
var pawns=material[1].byType[0],pawnsLength;
502-
if(pawns) {
503-
pawnsLength=pawns.length;
504-
for(var i=0;i<pawnsLength;i++)
505-
switch(height-geometry.R(pawns[i].p)) {
506-
case 4: distPromo[0]++; break;
507-
case 5: distPromo[1]++; break;
508-
case 6: distPromo[2]++; break;
509-
}
510-
}
511-
pawns=material[-1].byType[2],pawnsLength;
512-
if(pawns) {
513-
pawnsLength=pawns.length;
514-
for(var i=0;i<pawnsLength;i++)
515-
switch(geometry.R(pawns[i].p)) {
516-
case 3: distPromo[0]--; break;
517-
case 4: distPromo[1]--; break;
518-
case 5: distPromo[2]--; break;
519-
}
520-
}
521-
if(distPromo[0]!=0)
522-
evalValues['distPawnPromo1']=distPromo[0];
523-
if(distPromo[1]!=0)
524-
evalValues['distPawnPromo2']=distPromo[1];
525-
if(distPromo[2]!=0)
526-
evalValues['distPawnPromo3']=distPromo[2];
527-
528-
// motivate knights and bishops to deploy early
529-
var minorPiecesMoved=0;
530-
for(var tt=4;tt<=5;tt++)
531-
for(var s=1;s>=-1;s-=2) {
532-
var pieces=material[s].byType[tt];
533-
if(pieces)
534-
for(var i=0;i<pieces.length;i++)
535-
if(pieces[i].m)
536-
minorPiecesMoved+=s;
537-
}
538-
if(minorPiecesMoved!=0) {
539-
evalValues['minorPiecesMoved']=minorPiecesMoved;
540-
}
541-
500+
evalValues['pieceValue'] += 0.9*(wFrac*wProm - bFrac*bProm);
542501
}
543502

544503
}
@@ -672,6 +631,7 @@
672631
} } }
673632

674633
var promoGain = [];
634+
var speed = [9,9,6,7,3,4,3,2,3,4,-6,5,3,3,0,0,7,3,0];
675635

676636
var OriginalInitialPosition = Model.Board.InitialPosition;
677637
Model.Board.InitialPosition = function(aGame) {

src/games/chessbase/res/rules/decimal/scirocco-rules.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,7 @@ <h2>Duke</h2>
346346
<div style='clear:both'></div>
347347
<h2>Spider</h2>
348348
<p>
349-
<img class='piece-icon' src='{GAME}/res/rules/fairy/griffon.png'>
349+
<img class='piece-icon' src='{GAME}/res/rules/fairy/rhino2.png'>
350350
</p>
351351
<p class='piece-details'>Promoted Wagon.
352352
Moves to an empty orthogonally adjacent square,
@@ -356,7 +356,7 @@ <h2>Spider</h2>
356356
<div style='clear:both'></div>
357357
<h2>Octopus</h2>
358358
<p>
359-
<img class='piece-icon' src='{GAME}/res/rules/fairy/rhino2.png'>
359+
<img class='piece-icon' src='{GAME}/res/rules/fairy/griffon.png'>
360360
</p>
361361
<p class='piece-details'>Promoted Chariot.
362362
Moves to an empty diagonally adjacent square,

src/games/chessbase/res/rules/duodecimal/timurid-rules_fr.html

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ <h1>Disposition de départ</h1>
3030
<p>Tablier de 12 x 12 cases.</p>
3131

3232
<p>
33-
<img src='{GAME}/res/visuals/timurid-600x600-2d.jpg'>
33+
Position de départ pour le Babur furax, une des variantes possible :
34+
<img class='piece-graph' src='{GAME}/res/rules/duodecimal/wild-babur-initial.png'>
3435
</p>
3536

3637

@@ -147,8 +148,6 @@ <h2>Canon</h2>
147148
<img class='piece-graph' src='{GAME}/res/rules/graphs/cannon.png'>
148149
</p>
149150

150-
<img class='piece-graph' src='{GAME}/res/rules/graphs/eagle.png'>
151-
</p>
152151
<h2>Prince</h2>
153152
<p>
154153
<img style="max-width:100%;" src="{GAME}/res/rules/fairy/prince.png"/>
-54.1 KB
Loading

0 commit comments

Comments
 (0)