Please report any bugs or errors to Adam DeWitt

6

BANNED INPUT: vh 8m-14g on turn 4:

There is a global ban on commands in user input, and no exception has been made for the vh command on the part of the turn indexed 1.

Go back and try again.

What is otherwise valid user input in Game Courier can be banned in a GAME Code program for the sake of better enforcing the rules. See "Restricting User Input" in the Game Courier Developer's Guide for details on how this is done.

If you believe that your input should not have been banned, contact Fergus Duniho or whoever programmed the rules for this game.

Edit Settings File
   0 echo Please report any bugs or errors to Adam DeWitt
   1 set mypieces ()
   2 set myflipped ()
   3 foreach label (p P d D n N i I c C s S bt BT fl FL g G de DE l L ky KY ph PH sm SM vm VM b B ss SS vs VS r R dh DH dk DK cs CS hf HF se SE ln LN bg BG rg RG wb WB fe FE lh LH vg VG gg GG fd FD k K)
   4   setelem mypieces #label pieceimg #label
   5   setelem myflipped #label flipimg #label
   6 next
   7 foreach pair ((rc rv) (RC RV) (fk q) (FK Q) (p$ +p) (P$ +P) (d$ +d) (D$ +D) (n$ +n) (N$ +N) (i$ +i) (I$ +I) (c$ +c) (C$ +C) (s$ +s) (S$ +S) (bt$ +bt) (BT$ +BT) (fl$ +fl) (FL$ +FL) (g$ +g) (G$ +G) (de$ +de) (DE$ +DE) (rc$ +rv) (RC$ +RV) (l$ +l) (L$ +L) (ky$ +ky) (KY$ +KY) (ph$ +ph) (PH$ +PH) (sm$ +sm) (SM$ +SM) (vm$ +vm) (VM$ +VM) (b$ +b) (B$ +B) (ss$ +ss) (SS$ +SS) (vs$ +vs) (VS$ +VS) (r$ +r) (R$ +R) (dh$ +dh) (DH$ +DH) (dk$ +dk) (DK$ +DK) (cs$ +cs) (CS$ +CS) (hf$ +hf) (HF$ +HF) (se$ +se) (SE$ +SE) (ln$ +ln) (LN$ +LN) (fk$ +q) (FK$ +Q) (bg$ +bg) (BG$ +BG) (rg$ +rg) (RG$ +RG) (wb$ +wb) (WB$ +WB))
   8   setelem mypieces #pair.1 pieceimg #pair.0
   9   setelem myflipped #pair.1 flipimg #pair.0
  10 next
  11 setsystem pieces #mypieces
  12 setsystem flipped #myflipped
  13 setsystem originalpieces currentpieces
  14 set bpieces p +p d +d n +n i +i c +c s +s bt +bt fl +fl g +g de +de rv +rv l +l ky +ky ph +ph sm +sm vm +vm b +b ss +ss vs +vs r +r dh +dh dk +dk cs +cs hf +hf se +se ln +ln q +q bg +bg rg +rg wb +wb fe lh vg gg fd k
  15 set wpieces P +P D +D N +N I +I C +C S +S BT +BT FL +FL G +G DE +DE RV +RV L +L KY +KY PH +PH SM +SM VM +VM B +B SS +SS VS +VS R +R DH +DH DK +DK CS +CS HF +HF SE +SE LN +LN Q +Q BG +BG RG +RG WB +WB FE LH VG GG FD K
  16 set pzs 5
  17 set promote assoc p +p d +d n +n i +i c +c s +s bt +bt fl +fl g +g de +de rv +rv l +l ky +ky ph +ph sm +sm vm +vm b +b ss +ss vs +vs r +r dh +dh dk +dk cs +cs hf +hf se +se ln +ln q +q bg +bg rg +rg wb +wb fe fe lh lh vg vg gg gg fd fd k k P +P D +D N +N I +I C +C S +S BT +BT FL +FL G +G DE +DE RV +RV L +L KY +KY PH +PH SM +SM VM +VM B +B SS +SS VS +VS R +R DH +DH DK +DK CS +CS HF +HF SE +SE LN +LN Q +Q BG +BG RG +RG WB +WB FE FE LH LH VG VG GG GG FD FD K K
  18 set steps array 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  19 setsystem maxmove 3
  20 ban commands allmoves
  21 allow moves 1 captures 1 moves 2 captures 2 pass 2 promotions 2 promotions 3
  22 map n 0 1
  23 map n2 0 2
  24 map s 0 -1
  25 map s2 0 -2
  26 map e 1 0
  27 map e2 2 0
  28 map w -1 0
  29 map w2 -2 0
  30 map ne 1 1
  31 map ne2 2 2
  32 map se 1 -1
  33 map se2 2 -2
  34 map sw -1 -1
  35 map sw2 -2 -2
  36 map nw -1 1
  37 map nw2 -2 2
  38 def NO logride #0 #1 (n2 n n n n n n n n n n n n n)
  39 def NE logride #0 #1 (ne2 ne ne ne ne ne ne ne ne ne ne ne ne ne)
  40 def EA logride #0 #1 (e2 e)
  41 def SED logride #0 #1 (se2 se se se se se se se se se se se se se)
  42 def SO logride #0 #1 (s2 s s s s s s s s s s s s s)
  43 def SW logride #0 #1 (sw2 sw sw sw sw sw sw sw sw sw sw sw sw sw)
  44 def WE logride #0 #1 (w2 w)
  45 def NW logride #0 #1 (nw2 nw nw nw nw nw nw nw nw nw nw nw nw nw)
  46 def p checkaleap #0 #1 0 1
  47 def P checkaleap #0 #1 0 -1
  48 def pL array where #0 0 1
  49 def PL array where #0 0 -1
  50 def d checkaleap #0 #1 0 1 or checkaleap #0 #1 -1 -1 or checkaleap #0 #1 1 -1
  51 def D checkaleap #0 #1 0 -1 or checkaleap #0 #1 -1 1 or checkaleap #0 #1 1 1
  52 def dL array where #0 0 1 where #0 -1 -1 where #0 1 -1
  53 def DL array where #0 0 -1 where #0 -1 1 where #0 1 1
  54 def n checkleap #0 #1 1 2
  55 copyfn n N
  56 def nL leaps #0 1 2
  57 def NL leaps #0 1 2
  58 copyfn D i
  59 copyfn d I
  60 def iL array where #0 0 -1 where #0 -1 1 where #0 1 1
  61 def IL array where #0 0 1 where #0 -1 -1 where #0 1 -1
  62 def c fn i #0 #1 or fn p #0 #1
  63 def C fn I #0 #1 or fn P #0 #1
  64 def cL array where #0 0 1 where #0 0 -1 where #0 -1 1 where #0 1 1
  65 def CL array where #0 0 1 where #0 0 -1 where #0 -1 -1 where #0 1 -1
  66 def s checkleap #0 #1 1 1 or fn p #0 #1
  67 def S checkleap #0 #1 1 1 or fn P #0 #1
  68 def sL merge leaps #0 1 1 array where #0 0 1
  69 def SL merge leaps #0 1 1 array where #0 0 -1
  70 def bt fn S #0 #1 or checkaleap #0 #1 -1 0 or checkaleap #0 #1 1 0
  71 def BT fn s #0 #1 or checkaleap #0 #1 -1 0 or checkaleap #0 #1 1 0
  72 def btL merge leaps #0 1 1 array where #0 -1 0 where #0 1 0 where #0 0 -1
  73 def BTL merge leaps #0 1 1 array where #0 -1 0 where #0 1 0 where #0 0 1
  74 def fl checkleap #0 #1 1 1 or checkaleap #0 #1 0 1 or checkaleap #0 #1 0 -1
  75 copyfn fl FL
  76 def flL merge leaps #0 1 1 array where #0 0 1 where #0 0 -1
  77 def FLL merge leaps #0 1 1 array where #0 0 1 where #0 0 -1
  78 def g checkleap #0 #1 0 1 or checkaleap #0 #1 -1 1 or checkaleap #0 #1 1 1
  79 def G checkleap #0 #1 0 1 or checkaleap #0 #1 -1 -1 or checkaleap #0 #1 1 -1
  80 def gL merge leaps #0 0 1 array where #0 -1 1 where #0 1 1
  81 def GL merge leaps #0 0 1 array where #0 -1 -1 where #0 1 -1
  82 def de fn BT #0 #1
  83 def DE fn bt #0 #1
  84 def deL merge leaps #0 1 1 array where #0 -1 0 where #0 1 0 where #0 0 1
  85 def DEL merge leaps #0 1 1 array where #0 -1 0 where #0 1 0 where #0 0 -1
  86 def rv checkaride #0 #1 0 1 or checkaride #0 #1 0 -1
  87 copyfn rv RV
  88 def rvL rays #0 0 1
  89 def RVL rays #0 0 1
  90 def l checkaride #0 #1 0 -1 and <= distance #0 #1 2 or checkaride #0 #1 0 1
  91 def L checkaride #0 #1 0 1 and <= distance #0 #1 2 or checkaride #0 #1 0 -1
  92 def lL rays #0 0 1
  93 def LL rays #0 0 1
  94 def ky checkleap #0 #1 1 1 or checkleap #0 #1 0 2
  95 copyfn ky KY
  96 def kyL merge leaps #0 1 1 leaps #0 0 2
  97 def KYL merge leaps #0 1 1 leaps #0 0 2
  98 def ph checkleap #0 #1 0 1 or checkleap #0 #1 2 2
  99 copyfn ph PH
 100 def phL merge leaps #0 0 1 leaps #0 2 2
 101 def PHL merge leaps #0 0 1 leaps #0 2 2
 102 def sm checkaride #0 #1 -1 0 or checkaride #0 #1 1 0 or checkleap #0 #1 0 1
 103 copyfn sm SM
 104 def smL rays #0 0 1
 105 def SML rays #0 0 1
 106 def vm checkaride #0 #1 0 -1 or checkaride #0 #1 0 1 or checkleap #0 #1 0 1
 107 copyfn vm VM
 108 def vmL rays #0 0 1
 109 def VML rays #0 0 1
 110 def b checkride #0 #1 1 1
 111 def B checkride #0 #1 1 1
 112 def bL rays #0 1 1
 113 def BL rays #0 1 1
 114 def ss checkaride #0 #1 0 1 and <= distance #0 #1 2 or checkleap #0 #1 0 1 or checkaride #0 #1 1 0 or checkaride #0 #1 -1 0
 115 def SS checkaride #0 #1 0 -1 and <= distance #0 #1 2 or checkleap #0 #1 0 1 or checkaride #0 #1 1 0 or checkaride #0 #1 -1 0
 116 def ssL rays #0 0 1
 117 def SSL rays #0 0 1
 118 def vs checkaride #0 #1 1 0 or checkaride #0 #1 -1 0 and <= distance #0 #1 2 or checkleap #0 #1 0 1 or checkaride #0 #1 0 1
 119 def VS checkaride #0 #1 1 0 or checkaride #0 #1 -1 0 and <= distance #0 #1 2 or checkleap #0 #1 0 1 or checkaride #0 #1 0 -1
 120 def vsL rays #0 0 1
 121 def VSL rays #0 0 1
 122 def r checkride #0 #1 0 1
 123 def R checkride #0 #1 0 1
 124 def rL rays #0 0 1
 125 def RL rays #0 0 1
 126 def dh fn b #0 #1 or checkleap #0 #1 0 1
 127 def DH fn B #0 #1 or checkleap #0 #1 0 1
 128 def dhL merge rays #0 1 1 leaps #0 0 1
 129 def DHL merge rays #0 1 1 leaps #0 0 1
 130 def dk fn r #0 #1 or checkleap #0 #1 1 1
 131 def DK fn R #0 #1 or checkleap #0 #1 1 1
 132 def dkL merge rays #0 0 1 leaps #0 1 1
 133 def DKL merge rays #0 0 1 leaps #0 1 1
 134 def cs checkride #0 #1 0 1 and <= distance #0 #1 2 or checkride #0 #1 1 1 or checkaride #0 #1 0 1 or checkaride #0 #1 0 -1
 135 def CS checkride #0 #1 0 1 and <= distance #0 #1 2 or checkride #0 #1 1 1 or checkaride #0 #1 0 1 or checkaride #0 #1 0 -1
 136 def csL merge rays #0 0 1 rays #0 1 1
 137 def CSL merge rays #0 0 1 rays #0 1 1
 138 def hf cond var firstpart (checkride #0 #1 1 1 or checkaride #0 #1 -1 0 or checkaride #0 #1 1 0 or checkaride #0 #1 0 -1 or checkleap #0 #1 0 1 or checkaleap #0 #1 0 2) (checkaleap #0 #1 0 1 or checkaleap #0 #1 0 -1) and #0 and #1
 139 def HF cond var firstpart (checkride #0 #1 1 1 or checkaride #0 #1 -1 0 or checkaride #0 #1 1 0 or checkaride #0 #1 0 1 or checkleap #0 #1 0 1 or checkaleap #0 #1 0 -2) (checkaleap #0 #1 0 1 or checkaleap #0 #1 0 -1) and #0 and #1
 140 def hfL mergeall rays #0 0 1 rays #0 1 1 leaps #0 0 2
 141 def HFL mergeall rays #0 0 1 rays #0 1 1 leaps #0 0 2
 142 def se cond var firstpart (checkride #0 #1 0 1 or checkaride #0 #1 -1 -1 or checkaride #0 #1 1 -1 or checkleap #0 #1 1 1 or checkaleap #0 #1 -2 2 or checkaleap #0 #1 2 2) (sub SE #0 #1) and #0 and #1
 143 def SE cond var firstpart (checkride #0 #1 0 1 or checkaride #0 #1 -1 1 or checkaride #0 #1 1 1 or checkleap #0 #1 1 1 or checkaleap #0 #1 -2 -2 or checkaleap #0 #1 2 -2) (sub SE #0 #1) and #0 and #1
 144 def seL mergeall rays #0 0 1 rays #0 1 1 leaps #0 2 2
 145 def SEL mergeall rays #0 0 1 rays #0 1 1 leaps #0 2 2
 146 def ln <= distance #0 #1 cond var firstpart 2 1
 147 copyfn ln LN
 148 def lnL mergeall leaps #0 0 1 leaps #0 1 1 leaps #0 0 2 leaps #0 1 2 leaps #0 2 2
 149 def LNL mergeall leaps #0 0 1 leaps #0 1 1 leaps #0 0 2 leaps #0 1 2 leaps #0 2 2
 150 def q fn r #0 #1 or fn b #0 #1
 151 def Q fn R #0 #1 or fn B #0 #1
 152 def qL merge rays #0 0 1 rays #0 1 1
 153 def QL merge rays #0 0 1 rays #0 1 1
 154 def bg sub BG #0 #1 and cond empty #0 capture (not empty #1) or checkride #0 #1 1 1
 155 copyfn bg BG
 156 def bgL rays #0 1 1
 157 def BGL rays #0 1 1
 158 def rg sub RG #0 #1 and cond empty #0 capture (not empty #1) or checkride #0 #1 0 1
 159 copyfn rg RG
 160 def rgL rays #0 0 1
 161 def RGL rays #0 0 1
 162 def wb checkride #0 #1 0 1 and <= distance #0 #1 2 or checkride #0 #1 1 1 or checkaride #0 #1 1 0 or checkaride #0 #1 -1 0
 163 copyfn wb WB
 164 def wbL merge rays #0 0 1 rays #0 1 1
 165 def WBL merge rays #0 0 1 rays #0 1 1
 166 def fe cond var firstpart (fn q #0 #1 or checkleap #0 #1 0 2 or checkleap #0 #1 2 2) (checkleap #0 #1 1 1) and #0 and #1
 167 copyfn fe FE
 168 def feL mergeall rays #0 0 1 rays #0 1 1 leaps #0 0 2 leaps #0 2 2
 169 def FEL mergeall rays #0 0 1 rays #0 1 1 leaps #0 0 2 leaps #0 2 2
 170 def lh cond var firstpart (<= distance #0 #1 2 or fn b #0 #1) (checkleap #0 #1 0 1 or checkleap #0 #1 1 1) and #0 and #1
 171 copyfn lh LH
 172 def lhL mergeall rays #0 1 1 leaps #0 0 1 leaps #0 0 2 leaps #0 1 2 leaps #0 2 2
 173 def LHL mergeall rays #0 1 1 leaps #0 0 1 leaps #0 0 2 leaps #0 1 2 leaps #0 2 2
 174 def vg cond var firstpart (sub BG #0 #1 and cond empty #0 capture (not empty #1) or checkride #0 #1 1 1 or checkmaxsteps #0 #1 3) (checkleap #0 #1 0 1 or checkleap #0 #1 1 1 and == var ori #1) and #0 and #1
 175 copyfn vg VG
 176 def vgL mergeall rays #0 1 1 leaps #0 0 1 leaps #0 0 2 leaps #0 1 2 leaps #0 2 2 leaps #0 0 3 leaps #0 1 3 leaps #0 2 3 leaps #0 3 3
 177 def VGL mergeall rays #0 1 1 leaps #0 0 1 leaps #0 0 2 leaps #0 1 2 leaps #0 2 2 leaps #0 0 3 leaps #0 1 3 leaps #0 2 3 leaps #0 3 3
 178 def gg sub GG #0 #1 and cond empty #0 capture (not empty #1) or checkride #0 #1 0 1 or checkride #0 #1 1 1
 179 copyfn gg GG
 180 def ggL merge rays #0 0 1 rays #0 1 1
 181 def GGL merge rays #0 0 1 rays #0 1 1
 182 def fd cond var firstpart (checkride #0 #1 1 1 or checkaride #0 #1 -1 0 or checkaride #0 #1 1 0 or checkmaxsteps #0 #1 3) (sub FD #0 #1 and not match space #1 FD +WB +CS) and #0 and #1
 183 def FD cond var firstpart (checkride #0 #1 1 1 or checkaride #0 #1 -1 0 or checkaride #0 #1 1 0 or checkmaxsteps #0 #1 3) (sub FD #0 #1 and not match space #1 fd +wb +cs) and #0 and #1
 184 def fdL mergeall rays #0 0 1 rays #0 1 1 leaps #0 0 2 leaps #0 1 2 leaps #0 2 2 leaps #0 0 3 leaps #0 1 3 leaps #0 2 3 leaps #0 3 3
 185 def FDL mergeall rays #0 0 1 rays #0 1 1 leaps #0 0 2 leaps #0 1 2 leaps #0 2 2 leaps #0 0 3 leaps #0 1 3 leaps #0 2 3 leaps #0 3 3
 186 copyfn g +p
 187 copyfn G +P
 188 copyfn gL +pL
 189 copyfn GL +PL
 190 def +d checkaride #0 #1 0 1 or checkaride #0 #1 -1 -1 or checkaride #0 #1 1 -1
 191 def +D checkaride #0 #1 0 -1 or checkaride #0 #1 -1 1 or checkaride #0 #1 1 1
 192 def +dL mergeall ray #0 0 1 ray #0 -1 -1 ray #0 1 -1
 193 def +DL mergeall ray #0 0 -1 ray #0 -1 1 ray #0 1 1
 194 copyfn ss +n
 195 copyfn SS +N
 196 copyfn ssL +nL
 197 copyfn SSL +NL
 198 copyfn vs +i
 199 copyfn VS +I
 200 copyfn vsL +iL
 201 copyfn VSL +IL
 202 copyfn sm +c
 203 copyfn SM +C
 204 copyfn smL +cL
 205 copyfn SML +CL
 206 copyfn vm +s
 207 copyfn VM +S
 208 copyfn vmL +sL
 209 copyfn VML +SL
 210 def +bt checkaride #0 #1 0 1 or checkaride #0 #1 0 -1 or checkleap #0 #1 0 1 or checkleap #0 #1 1 1
 211 copyfn +bt +BT
 212 def +btL mergeall ray #0 0 1 ray #0 0 -1 leaps #0 0 1 leaps #0 1 1
 213 def +BTL mergeall ray #0 0 1 ray #0 0 -1 leaps #0 0 1 leaps #0 1 1
 214 copyfn b +fl
 215 copyfn B +FL
 216 copyfn bL +flL
 217 copyfn BL +FLL
 218 copyfn r +g
 219 copyfn R +G
 220 copyfn rL +gL
 221 copyfn RL +GL
 222 def +de checkleap #0 #1 0 1 or checkleap #0 #1 1 1
 223 copyfn +de +DE
 224 def +deL merge leaps #0 0 1 leaps #0 1 1
 225 def +DEL merge leaps #0 0 1 leaps #0 1 1
 226 def +rv checkaride #0 #1 0 1 or checkaride #0 #1 0 -1 or checkaride #0 #1 -1 -1 or checkaride #0 #1 1 -1
 227 def +RV checkaride #0 #1 0 1 or checkaride #0 #1 0 -1 or checkaride #0 #1 -1 1 or checkaride #0 #1 1 1
 228 def +rvL mergeall ray #0 0 1 ray #0 0 -1 ray #0 -1 -1 ray #0 1 -1
 229 def +RVL mergeall ray #0 0 1 ray #0 0 -1 ray #0 -1 1 ray #0 1 1
 230 def +l checkaride #0 #1 0 1 or checkaride #0 #1 0 -1 or checkaride #0 #1 -1 1 or checkaride #0 #1 1 1
 231 def +L checkaride #0 #1 0 1 or checkaride #0 #1 0 -1 or checkaride #0 #1 -1 -1 or checkaride #0 #1 1 -1
 232 def +lL mergeall ray #0 0 1 ray #0 0 -1 ray #0 -1 1 ray #0 1 1
 233 def +LL mergeall ray #0 0 1 ray #0 0 -1 ray #0 -1 -1 ray #0 1 -1
 234 copyfn ln +ky
 235 copyfn LN +KY
 236 copyfn lnL +kyL
 237 copyfn LNL +KYL
 238 copyfn q +ph
 239 copyfn Q +PH
 240 copyfn qL +phL
 241 copyfn QL +PHL
 242 def +sm checkride #0 #1 1 1 or checkaride #0 #1 -1 0 or checkaride #0 #1 1 0
 243 copyfn +sm +SM
 244 def +sm$L merge rays #0 0 1 rays #0 1 1
 245 def +SML merge rays #0 0 1 rays #0 1 1
 246 def +vm checkride #0 #1 1 1 or checkaride #0 #1 0 -1 or checkaride #0 #1 0 1
 247 copyfn +vm +VM
 248 def +vmL merge rays #0 0 1 rays #0 1 1
 249 def +VML merge rays #0 0 1 rays #0 1 1
 250 copyfn dh +b
 251 copyfn DH +B
 252 copyfn dhL +bL
 253 copyfn DHL +BL
 254 copyfn wb +ss
 255 copyfn WB +SS
 256 copyfn wbL +ssL
 257 copyfn WBL +SSL
 258 copyfn cs +vs
 259 copyfn CS +VS
 260 copyfn csL +vsL
 261 copyfn CSL +VSL
 262 copyfn dk +r
 263 copyfn DK +R
 264 copyfn dkL +rL
 265 copyfn DKL +RL
 266 copyfn hf +dh
 267 copyfn HF +DH
 268 copyfn hfL +dhL
 269 copyfn HFL +DHL
 270 copyfn se +dk
 271 copyfn SE +DK
 272 copyfn seL +dkL
 273 copyfn SEL +DKL
 274 def +cs cond var firstpart (checkleap #0 #1 0 1 or checkleap #0 #1 1 1 and cond empty #0 capture (not empty #1) or fn NO #0 #1 or fn NE #0 #1 or fn EA #0 #1 or fn SED #0 #1 or fn SO #0 #1 or fn SW #0 #1 or fn WE #0 #1 or fn NW #0 #1) (sub FD #0 #1 and not match space #1 FD +WB +CS) and #0 and #1
 275 def +CS cond var firstpart (checkleap #0 #1 0 1 or checkleap #0 #1 1 1 and cond empty #0 capture (not empty #1) or fn NO #0 #1 or fn NE #0 #1 or fn EA #0 #1 or fn SED #0 #1 or fn SO #0 #1 or fn SW #0 #1 or fn WE #0 #1 or fn NW #0 #1) (sub FD #0 #1 and not match space #1 fd +wb +cs) and #0 and #1
 276 def +csL mergeall leaps #0 0 1 leaps #0 1 1 lograys #0 (n2 n) (ne2 ne) (e2 e stop) (se2 se) (s2 s) (sw2 sw) (w2 w stop) (nw2 nw)
 277 def +CSL mergeall leaps #0 0 1 leaps #0 1 1 lograys #0 (n2 n) (ne2 ne) (e2 e stop) (se2 se) (s2 s) (sw2 sw) (w2 w stop) (nw2 nw)
 278 copyfn bg +hf
 279 copyfn BG +HF
 280 copyfn bgL +hfL
 281 copyfn BGL +HFL
 282 copyfn rg +se
 283 copyfn RG +SE
 284 copyfn rgL +seL
 285 copyfn RGL +SEL
 286 copyfn lh +ln
 287 copyfn LH +LN
 288 copyfn lhL +lnL
 289 copyfn LHL +LNL
 290 copyfn fe +q
 291 copyfn FE +Q
 292 copyfn feL +qL
 293 copyfn FEL +QL
 294 copyfn vg +bg
 295 copyfn VG +BG
 296 copyfn vgL +bgL
 297 copyfn VGL +BGL
 298 copyfn gg +rg
 299 copyfn GG +RG
 300 copyfn ggL +rgL
 301 copyfn GGL +RGL
 302 copyfn fd +wb
 303 copyfn FD +WB
 304 copyfn fdL +wbL
 305 copyfn FDL +WBL
 306 def k checkleap #0 #1 0 1 or checkleap #0 #1 1 1
 307 copyfn k K
 308 def kL merge leaps #0 0 1 leaps #0 1 1
 309 def KL merge leaps #0 0 1 leaps #0 1 1
 310 sub FD from to
 311   return cond cond empty #from capture (not empty #to) (checkleap #from #to 0 1 or checkleap #from #to 1 1) (checkleap #from #to 0 1 or checkleap #from #to 1 1 and == var ori #to) and #to
 312 endsub
 313 sub GG from to
 314   local step, cnt, i
 315   if != file #from file #to and != rank #from rank #to and != abs - file #from file #to abs - rank #from rank #to
 316     return false
 317   endif
 318   set step #from
 319   set cnt 0
 320   do
 321     for i #steps
 322       set step where #step cmp file #to file #from cmp rank #to rank #from
 323       if == #step #to
 324         return true
 325       endif
 326       if != @ space #step
 327         set cnt inc #cnt
 328       endif
 329       if >= #cnt 3
 330         return false
 331       endif
 332     next
 333   loop never
 334 endsub
 335 sub RG from to
 336   local step, cnt, i
 337   if != file #from file #to and != rank #from rank #to
 338     return false
 339   endif
 340   set step #from
 341   set cnt 0
 342   do
 343     for i #steps
 344       set step where #step cmp file #to file #from cmp rank #to rank #from
 345       if == #step #to
 346         return true
 347       endif
 348       if != @ space #step
 349         set cnt inc #cnt
 350       endif
 351       if >= #cnt 3
 352         return false
 353       endif
 354     next
 355   loop never
 356 endsub
 357 sub BG from to
 358   local step, cnt, i
 359   if != abs - file #from file #to abs - rank #from rank #to
 360     return false
 361   endif
 362   set step #from
 363   set cnt 0
 364   do
 365     for i #steps
 366       set step where #step cmp file #to file #from cmp rank #to rank #from
 367       if == #step #to
 368         return true
 369       endif
 370       if != @ space #step
 371         set cnt inc #cnt
 372       endif
 373       if >= #cnt 3
 374         return false
 375       endif
 376     next
 377   loop never
 378 endsub
 379 sub SE from to
 380   if > slope origin dest 0
 381     return checkaleap #from #to 1 1 or checkaleap #from #to -1 -1
 382   else
 383     return checkaleap #from #to 1 -1 or checkaleap #from #to -1 1
 384   endif
 385 endsub
 386 sub stalemated kingpos
 387   store
 388   local from piece to
 389   if isupper #kingpos
 390     def friends intersection nolower #wpieces
 391     def friend match #0 #wpieces
 392   else
 393     def friends intersection noupper #bpieces
 394     def friend match #0 #bpieces
 395   endif
 396   set firstpart true
 397   store
 398   for (from piece) fn friends
 399     for to fn join #piece L #from
 400       if fn #piece #from #to and not fn friend space #to and onboard #to
 401         move #from #to
 402         setlegal #from #to
 403       endif
 404       restore
 405     next
 406   next
 407   return cond count system legalmoves false true
 408 endsub
 409 sub legalmoves2 kingpos
 410   store
 411   local from piece to
 412   if isupper #kingpos
 413     def friends intersection nolower #wpieces
 414     def friend match #0 #wpieces
 415   else
 416     def friends intersection noupper #bpieces
 417     def friend match #0 #bpieces
 418   endif
 419   set firstpart false
 420   set oldto dest
 421   store
 422   for (from piece) fn friends
 423     if == #from #oldto
 424       for to fn join #piece L #from
 425         if fn #piece #from #to and not fn friend space #to and onboard #to
 426           move #from #to
 427           setlegal #from #to
 428         endif
 429         restore
 430       next
 431     endif
 432   next
 433   return cond count system legalmoves false true
 434 endsub
 435 sub isdoublemove from to
 436   verify var firstpart
 437   if match moved fd +wb and sub canburn #from #to king
 438     return true
 439   elseif match moved FD +WB and sub canburn #from #to KING
 440     return true
 441   elseif match moved +cs and fn +cs #from #to and >= distance #from #to 2 and sub canburn #from #to king
 442     return true
 443   elseif match moved +CS and fn +CS #from #to and >= distance #from #to 2 and sub canburn #from #to KING
 444     return true
 445   elseif checkleap #from #to 0 1 or checkleap #from #to 1 1 and match moved ln LN lh LH vg VG +ky +KY +ln +LN +bg +BG and var firstpart
 446     if match moved vg VG +bg +BG and capture
 447       return false
 448     else
 449       return true
 450     endif
 451   elseif checkleap #from #to 1 1 and match moved fe FE +q +Q
 452     return true
 453   elseif checkaleap #from #to 0 1 and match moved hf +dh
 454     return true
 455   elseif checkaleap #from #to 0 -1 and match moved HF +DH
 456     return true
 457   elseif checkaleap #from #to -1 1 or checkaleap #from #to 1 1 and match moved se +dk
 458     return true
 459   elseif checkaleap #from #to -1 -1 or checkaleap #from #to 1 -1 and match moved SE +DK
 460     return true
 461   else
 462     return false
 463   endif
 464 endsub
 465 sub canburn from to kingpos
 466   if fn K #from #to
 467     return true
 468   else
 469     if isupper #kingpos
 470       def enemy match #0 #bpieces and not match #0 fd +wb +cs
 471     else
 472       def enemy match #0 #wpieces and not match #0 FD +WB +CS
 473     endif
 474     set north where #to 0 1
 475     set east where #to 1 0
 476     set south where #to 0 -1
 477     set west where #to -1 0
 478     set northeast where #to 1 1
 479     set southeast where #to 1 -1
 480     set southwest where #to -1 -1
 481     set northwest where #to -1 1
 482     if fn enemy space #north
 483       return true
 484     elseif fn enemy space #northeast
 485       return true
 486     elseif fn enemy space #east
 487       return true
 488     elseif fn enemy space #southeast
 489       return true
 490     elseif fn enemy space #south
 491       return true
 492     elseif fn enemy space #southwest
 493       return true
 494     elseif fn enemy space #west
 495       return true
 496     elseif fn enemy space #northwest
 497       return true
 498     else
 499       return false
 500     endif
 501   endif
 502 endsub
 503 sub bpromotion from to
 504   verify not sub isdoublemove origin dest
 505   if onboard where #from 0 #pzs and onboard where #to 0 #pzs
 506     return false
 507   elseif not match moved p d n i c s bt fl g de rv l ky ph sm vm b ss vs r dh dk cs hf se ln q bg rg wb
 508     return false
 509   else
 510     return true
 511   endif
 512 endsub
 513 sub wpromotion from to
 514   verify not sub isdoublemove origin dest
 515   if onboard where #from 0 neg #pzs and onboard where #to 0 neg #pzs
 516     return false
 517   elseif not match moved P D N I C S BT FL G DE RV L KY PH SM VM B SS VS R DH DK CS HF SE LN Q BG RG WB
 518     return false
 519   else
 520     return true
 521   endif
 522 endsub
 523 sub bpromote from to
 524   set legal false
 525   verify fn moved origin dest
 526   if match moved fd +wb +cs and match old FD +WB +CS and not var firstpart
 527     die "Fire Demons and Heavenly Tetrarches cannot be burned."
 528   elseif != space #to moved and sub isdoublemove origin dest
 529     die "You may not promote any piece without completing your move."
 530   elseif != space #to moved and onboard where #from 0 #pzs and onboard where #to 0 #pzs
 531     die "You may not promote any piece without entering or exiting the promotion zone."
 532   elseif not onboard where #from 0 #pzs or not onboard where #to 0 #pzs
 533     if == moved space #to and not fnmatch *-dest* thismove and match moved p d n i c s bt fl g de rv l ky ph sm vm b ss vs r dh dk cs hf se ln q bg rg wb and not sub isdoublemove origin dest
 534       set pc moved
 535       set pm elem moved promote
 536       askpromote #pm #pc
 537     elseif != moved space dest and != elem moved promote space dest
 538       set np space #to
 539       die "You may not promote a" moved "to a" #np
 540     endif
 541   endif
 542   set legal true
 543   return true
 544 endsub
 545 sub wpromote from to
 546   set legal false
 547   verify fn moved origin dest
 548   if match moved FD +WB +CS and match old fd +wb +cs and not var firstpart
 549     die "Fire Demons and Heavenly Tetrarches cannot be burned."
 550   elseif != space #to moved and sub isdoublemove origin dest
 551     die "You may not promote any piece without completing your move."
 552   elseif != space #to moved and onboard where #from 0 neg #pzs and onboard where #to 0 neg #pzs
 553     die "You may not promote any piece without entering or exiting the promotion zone."
 554   elseif not onboard where #from 0 neg #pzs or not onboard where #to 0 neg #pzs
 555     if == moved space #to and not fnmatch *-dest* thismove and match moved P D N I C S BT FL G DE RV L KY PH SM VM B SS VS R DH DK CS HF SE LN Q BG RG WB and not sub isdoublemove origin dest
 556       set pc moved
 557       set pm elem moved promote
 558       askpromote #pm #pc
 559     elseif != moved space dest and != elem moved promote space dest
 560       set np space #to
 561       die "You may not promote a" moved "to a" #np
 562     endif
 563   endif
 564   set legal true
 565   return true
 566 endsub
 567 sub preauto1
 568   store
 569 endsub
 570 sub preauto2
 571   store
 572 endsub
 573 sub postauto1
 574   set mvs explode chr 59 thismove
 575   restore
 576   set i 0
 577   set firstpart true
 578   set firstcapture false
 579   eval join "MOVE: " trim elem var i mvs
 580   if match old #bpieces
 581     die You may not capture your own pieces.
 582   endif
 583   set ori origin
 584   set dst dest
 585   if not sub isdoublemove origin dest and sub bpromotion #ori dest
 586     inc i
 587     if < var i count var mvs
 588       set ori2 origin
 589       set dst2 dest
 590       eval join "MOVE: " trim elem var i mvs
 591       if != var dst2 dest or != var ori2 origin or == pass trim elem var i mvs
 592         die Only a promotion can immediately follow a promotable piece moving to or from the promotion zone.
 593       endif
 594     endif
 595   endif
 596   set legal false
 597   switch moved
 598     case p +p d +d n +n i +i c +c s +s bt +bt fl +fl g +g de +de rv +rv l +l ky +ky ph +ph sm +sm vm +vm b +b ss +ss vs +vs r +r dh +dh dk +dk cs +cs hf +hf se +se ln +ln q +q bg +bg rg +rg wb +wb fe lh vg gg fd k
 599     gosub bpromote #ori dest
 600     break
 601     default
 602     die You may not move a moved
 603   endswitch
 604   if not var legal
 605     die You may not move a moved from origin to dest
 606   elseif match moved +cs and fn k origin dest
 607     empty dest
 608     add moved origin
 609   endif
 610   if capture
 611     set firstcapture true
 612   endif
 613   if var firstpart and sub isdoublemove origin dest
 614     inc i
 615     do while < var i count var mvs
 616       set firstpart false
 617       set mv trim elem var i mvs
 618       if == var mv pass
 619         if not sub isdoublemove origin dest and sub bpromotion #ori dest
 620           inc i
 621           if < var i count var mvs
 622             set ori2 origin
 623             set dst2 dest
 624             eval join "MOVE: " trim elem var i mvs
 625             if != var dst2 dest or != var ori2 origin
 626               die Only a promotion can immediately follow a promotable piece moving to or from the promotion zone.
 627             endif
 628           endif
 629         endif
 630         gosub bpromote #ori dest
 631         break
 632       endif
 633       eval join "MOVE: " var mv
 634       if match old #bpieces
 635         die You may not capture your own pieces.
 636       elseif != var dst origin
 637         die You may not move more than one piece per turn.
 638       endif
 639       if not sub isdoublemove origin dest and sub bpromotion #ori dest
 640         inc i
 641         if < var i count var mvs
 642           set ori2 origin
 643           set dst2 dest
 644           eval join "MOVE: " trim elem var i mvs
 645           if != var dst2 dest or != var ori2 origin
 646             die Only a promotion can immediately follow a promotable piece moving to or from the promotion zone.
 647           endif
 648         endif
 649       endif
 650       set legal false
 651       switch moved
 652         case hf +dh se +dk ln +ky fe +q lh +ln vg +bg fd +wb +cs
 653         gosub bpromote #ori dest
 654         break
 655         default
 656         die You may not move a moved
 657       endswitch
 658       if not var legal
 659         die You may not move a moved from origin to dest
 660       elseif match moved fd +wb +cs and fn k origin dest and capture
 661         empty dest
 662         add moved origin
 663       endif
 664     loop never
 665   endif
 666   if != #ori dest
 667     set bskips 0
 668   elseif != space dest moved
 669     set bskips 0
 670   elseif var firstcapture
 671     set bskips 0
 672   else
 673     inc bskips
 674   endif
 675   inc i
 676   if < var i count var mvs
 677     die Too many moves.
 678   endif
 679   set posvar join "b" join fencode boardflags
 680   inc #posvar
 681 endsub
 682 sub postauto2
 683   set mvs explode chr 59 thismove
 684   restore
 685   set i 0
 686   set firstpart true
 687   set firstcapture false
 688   eval join "MOVE: " trim elem var i mvs
 689   if match old #wpieces
 690     die You may not capture your own pieces.
 691   endif
 692   set ori origin
 693   set dst dest
 694   if not sub isdoublemove origin dest and sub wpromotion #ori dest
 695     inc i
 696     if < var i count var mvs
 697       set ori2 origin
 698       set dst2 dest
 699       eval join "MOVE: " trim elem var i mvs
 700       if != var dst2 dest or != var ori2 origin or == pass trim elem var i mvs
 701         die Only a promotion can immediately follow a promotable piece moving to or from the promotion zone.
 702       endif
 703     endif
 704   endif
 705   set legal false
 706   switch moved
 707     case P +P D +D N +N I +I C +C S +S BT +BT FL +FL G +G DE +DE RV +RV L +L KY +KY PH +PH SM +SM VM +VM B +B SS +SS VS +VS R +R DH +DH DK +DK CS +CS HF +HF SE +SE LN +LN Q +Q BG +BG RG +RG WB +WB FE LH VG GG FD K
 708     gosub wpromote #ori dest
 709     break
 710     default
 711     die You may not move a moved
 712   endswitch
 713   if not var legal
 714     die You may not move a moved from origin to dest
 715   elseif match moved +CS and fn K origin dest
 716     empty dest
 717     add moved origin
 718   endif
 719   if capture
 720     set firstcapture true
 721   endif
 722   if var firstpart and sub isdoublemove origin dest
 723     inc i
 724     do while < var i count var mvs
 725       set firstpart false
 726       set mv trim elem var i mvs
 727       if == var mv pass
 728         if not sub isdoublemove origin dest and sub wpromotion #ori dest
 729           inc i
 730           if < var i count var mvs
 731             set ori2 origin
 732             set dst2 dest
 733             eval join "MOVE: " trim elem var i mvs
 734             if != var dst2 dest or != var ori2 origin
 735               die Only a promotion can immediately follow a promotable piece moving to or from the promotion zone.
 736             endif
 737           endif
 738         endif
 739         gosub wpromote #ori dest
 740         break
 741       endif
 742       eval join "MOVE: " var mv
 743       if match old #wpieces
 744         die You may not capture your own pieces.
 745       elseif != var dst origin
 746         die You may not move more than one piece per turn.
 747       endif
 748       if not sub isdoublemove origin dest and sub wpromotion #ori dest
 749         inc i
 750         if < var i count var mvs
 751           set ori2 origin
 752           set dst2 dest
 753           eval join "MOVE: " trim elem var i mvs
 754           if != var dst2 dest or != var ori2 origin
 755             die Only a promotion can immediately follow a promotable piece moving to or from the promotion zone.
 756           endif
 757         endif
 758       endif
 759       set legal false
 760       switch moved
 761         case HF +DH SE +DK LN +KY FE +Q LH +LN VG +BG FD +WB +CS
 762         gosub wpromote #ori dest
 763         break
 764         default
 765         die You may not move a moved
 766       endswitch
 767       if not var legal
 768         die You may not move a moved from origin to dest
 769       elseif match moved FD +WB +CS and fn K origin dest and capture
 770         empty dest
 771         add moved origin
 772       endif
 773     loop never
 774   endif
 775   if != #ori dest
 776     set wskips 0
 777   elseif != space dest moved
 778     set wskips 0
 779   elseif var firstcapture
 780     set wskips 0
 781   else
 782     inc wskips
 783   endif
 784   inc i
 785   if < var i count var mvs
 786     die Too many moves.
 787   endif
 788   set posvar join "w" join fencode boardflags
 789   inc #posvar
 790 endsub
 791 preauto1
 792 moveindex 0
 793 MOVE: d 12k-12j
 794 postauto1
 795 preauto2
 796 moveindex 1
 797 MOVE: D 12f-12g
 798 postauto2
 799 preauto1
 800 moveindex 2
 801 MOVE: d 5k-5j
 802 postauto1
 803 preauto2
 804 moveindex 3
 805 MOVE: P 12e-12f
 806 postauto2
 807 preauto1
 808 moveindex 4
 809 MOVE: p 12l-12k
 810 postauto1
 811 preauto2
 812 moveindex 5
 813 MOVE: BG 11d-14g
 814 postauto2
 815 preauto1
 816 moveindex 6
 817 MOVE: vh 8m-14g
 818 postauto1
 819 preauto2
 820 moveindex 7
 821 MOVE: FD 10c-14g
 822 postauto2
 823 preauto1
 824 moveindex 8
 825 MOVE: p 9l-9k
 826 postauto1
 827 preauto2
 828 moveindex 9
 829 MOVE: FD 14g-11d
 830 postauto2
 831 preauto1
 832 moveindex 10
 833 MOVE: bg 11m-14j
 834 postauto1
 835 preauto2
 836 moveindex 11
 837 MOVE: D 5f-5g
 838 postauto2
 839 preauto1
 840 moveindex 12
 841 MOVE: bg 14j-7c
 842 MOVE:  +bg-dest
 843 postauto1
 844 preauto2
 845 moveindex 13
 846 MOVE: GG 8b-7c
 847 postauto2
 848 preauto1
 849 moveindex 14
 850 MOVE: rg 10m-11m
 851 postauto1
 852 preauto2
 853 moveindex 15
 854 MOVE: FD 11d-12e
 855 MOVE:  pass
 856 postauto2
 857 preauto1
 858 moveindex 16
 859 MOVE: rg 11m-10m
 860 postauto1
 861 preauto2
 862 moveindex 17
 863 MOVE: P 5e-5f
 864 postauto2
 865 preauto1
 866 moveindex 18
 867 MOVE: hf 13m-13k
 868 postauto1
 869 preauto2
 870 moveindex 19
 871 MOVE: P 6e-6f
 872 postauto2
 873 preauto1
 874 moveindex 20
 875 MOVE: vh 9m-9l
 876 postauto1
 877 preauto2
 878 moveindex 21
 879 MOVE: BG 6d-3g
 880 postauto2
 881 preauto1
 882 moveindex 22
 883 MOVE: fd 10n-12l
 884 postauto1
 885 preauto2
 886 moveindex 23
 887 MOVE: P 10e-10f
 888 postauto2
 889 preauto1
 890 moveindex 24
 891 MOVE: p 8l-8k
 892 postauto1
 893 preauto2
 894 moveindex 25
 895 MOVE: P 8e-8f
 896 postauto2
 897 preauto1
 898 moveindex 26
 899 MOVE: p 7l-7k
 900 postauto1
 901 preauto2
 902 moveindex 27
 903 MOVE: P 9e-9f
 904 postauto2
 905 preauto1
 906 moveindex 28
 907 MOVE: fd 12l-9m
 908 postauto1
 909 preauto2
 910 moveindex 29
 911 MOVE: BG 3g-9m
 912 MOVE:  +BG-dest
 913 postauto2
 914 preauto1
 915 moveindex 30
 916 MOVE: fd 7n-9m
 917 postauto1
 918 preauto2
 919 moveindex 31
 920 MOVE: RG 10d-10e
 921 postauto2
 922 preauto1
 923 moveindex 32
 924 MOVE: hf 13k-12l
 925 postauto1
 926 preauto2
 927 moveindex 33
 928 MOVE: RG 10e-9e
 929 postauto2
 930 preauto1
 931 moveindex 34
 932 MOVE: rg 7m-8m
 933 postauto1
 934 preauto2
 935 moveindex 35
 936 MOVE: RG 9e-8e
 937 postauto2
 938 preauto1
 939 moveindex 36
 940 MOVE: bg 6m-7n
 941 postauto1
 942 preauto2
 943 moveindex 37
 944 MOVE: P 7e-7f
 945 postauto2
 946 preauto1
 947 moveindex 38
 948 MOVE: fd 9m-10n
 949 MOVE:  pass
 950 postauto1
 951 preauto2
 952 moveindex 39
 953 MOVE: P 8f-8g
 954 postauto2
 955 preauto1
 956 moveindex 40
 957 MOVE: rg 10m-9m
 958 postauto1
 959 preauto2
 960 moveindex 41
 961 MOVE: WB 11c-9e
 962 postauto2
 963 preauto1
 964 moveindex 42
 965 MOVE: d 5j-4k
 966 postauto1
 967 preauto2
 968 moveindex 43
 969 MOVE: P 7f-7g
 970 postauto2
 971 preauto1
 972 moveindex 44
 973 MOVE: p 10l-10k
 974 postauto1
 975 preauto2
 976 moveindex 45
 977 MOVE: SE 5d-6e
 978 MOVE:  pass
 979 postauto2
 980 preauto1
 981 moveindex 46
 982 MOVE: p 6l-6k
 983 postauto1
 984 preauto2
 985 moveindex 47
 986 MOVE: WB 6c-6d
 987 postauto2
 988 preauto1
 989 moveindex 48
 990 MOVE: p 5l-5k
 991 postauto1
 992 preauto2
 993 moveindex 49
 994 MOVE: P 11e-11f
 995 postauto2
 996 preauto1
 997 moveindex 50
 998 MOVE: bg 7n-5l
 999 postauto1
1000 preauto2
1001 moveindex 51
1002 MOVE: FD 12e-14h
1003 postauto2
1004 preauto1
1005 moveindex 52
1006 MOVE: vh 9l-10l
1007 postauto1
1008 preauto2
1009 moveindex 53
1010 MOVE: FD 14h-12i
1011 MOVE:  FD 12i-12j
1012 postauto2
1013 preauto1
1014 moveindex 54
1015 MOVE: vh 10l-7l
1016 postauto1
1017 preauto2
1018 moveindex 55
1019 MOVE: FD 12i-13j
1020 MOVE:  FD 13j-12k
1021 postauto2
1022 preauto1
1023 moveindex 56
1024 MOVE: hf 12l-13m
1025 postauto1
1026 preauto2
1027 moveindex 57
1028 MOVE: FD 13j-16k
1029 MOVE:  FD 16k-16l
1030 postauto2
1031 preauto1
1032 moveindex 58
1033 MOVE: d 4k-4j
1034 postauto1
1035 preauto2
1036 moveindex 59
1037 MOVE: FD 16k-13h
1038 postauto2
1039 preauto1
1040 moveindex 60
1041 MOVE: bg 5l-1h
1042 postauto1
1043 preauto2
1044 moveindex 61
1045 MOVE: KY 5b-6c
1046 postauto2
1047 preauto1
1048 moveindex 62
1049 MOVE: vh 7l-9l
1050 postauto1
1051 preauto2
1052 moveindex 63
1053 MOVE: FD 13h-16k
1054 MOVE:  FD 16k-15l
1055 postauto2
1056 preauto1
1057 moveindex 64
1058 MOVE: bg 1h-3j
1059 postauto1
1060 preauto2
1061 moveindex 65
1062 MOVE: VH 9d-11d
1063 postauto2
1064 preauto1
1065 moveindex 66
1066 MOVE: bg 3j-4k
1067 postauto1
1068 preauto2
1069 moveindex 67
1070 MOVE: VH 11d-14g
1071 postauto2
1072 preauto1
1073 moveindex 68
1074 MOVE: vh 9l-6l
1075 postauto1
1076 preauto2
1077 moveindex 69
1078 MOVE: FD 16k-13h
1079 postauto2
1080 preauto1
1081 moveindex 70
1082 MOVE: bg 4k-7n
1083 postauto1
1084 preauto2
1085 moveindex 71
1086 MOVE: FD 13h-14f
1087 postauto2
1088 preauto1
1089 moveindex 72
1090 MOVE: bg 7n-14g
1091 postauto1
1092 preauto2
1093 moveindex 73
1094 MOVE: FD 14f-14g
1095 MOVE:  FD 14g-14f
1096 postauto2
1097 preauto1
1098 moveindex 74
1099 MOVE: vh 6l-7m
1100 postauto1
1101 preauto2
1102 moveindex 75
1103 MOVE: FD 14f-12e
1104 postauto2
1105 preauto1
1106 moveindex 76
1107 MOVE: vh 7m-6l
1108 postauto1
1109 preauto2
1110 moveindex 77
1111 MOVE: RG 7d-7f
1112 postauto2
1113 preauto1
1114 moveindex 78
1115 MOVE: vh 6l-5l
1116 postauto1
1117 preauto2
1118 moveindex 79
1119 MOVE: FD 12e-13f
1120 MOVE:  pass
1121 postauto2
1122 preauto1
1123 moveindex 80
1124 MOVE: vh 5l-2i
1125 postauto1
1126 preauto2
1127 moveindex 81
1128 MOVE: KY 6c-7d
1129 postauto2
1130 preauto1
1131 moveindex 82
1132 MOVE: vh 2i-6m
1133 postauto1
1134 preauto2
1135 moveindex 83
1136 MOVE: FD 13f-14f
1137 MOVE:  pass
1138 postauto2
1139 preauto1
1140 moveindex 84
1141 MOVE: rg 8m-8l
1142 postauto1
1143 preauto2
1144 moveindex 85
1145 MOVE: RG 8e-8l
1146 MOVE:  +RG-dest
1147 postauto2
1148 preauto1
1149 moveindex 86
1150 MOVE: fd 10n-8l
1151 postauto1
1152 preauto2
1153 moveindex 87
1154 MOVE: RG 7f-8f
1155 postauto2
1156 preauto1
1157 moveindex 88
1158 MOVE: fd 8l-7l
1159 MOVE:  pass
1160 postauto1
1161 preauto2
1162 moveindex 89
1163 MOVE: KY 7d-8e
1164 postauto2
1165 preauto1
1166 moveindex 90
1167 MOVE: rg 9m-8m
1168 postauto1
1169 preauto2
1170 moveindex 91
1171 MOVE: GG 7c-7l
1172 postauto2
1173 preauto1
1174 moveindex 92
1175 MOVE: vh 6m-7l
1176 postauto1
1177 preauto2
1178 moveindex 93
1179 MOVE: FD 14f-13i
1180 postauto2
1181 preauto1
1182 moveindex 94
1183 MOVE: fe 8n-13i
1184 postauto1
1185 preauto2
1186 moveindex 95
1187 MOVE: P 10f-10g
1188 postauto2
1189 preauto1
1190 moveindex 96
1191 MOVE: fe 13i-9m
1192 postauto1
1193 preauto2
1194 moveindex 97
1195 MOVE: VH 8d-11d
1196 postauto2
1197 preauto1
1198 moveindex 98
1199 MOVE: rg 8m-8f
1200 postauto1
1201 preauto2
1202 moveindex 99
1203 MOVE: WB 6d-8f
1204 postauto2
1205 preauto1
1206 moveindex 100
1207 MOVE: vh 7l-5l
1208 postauto1
1209 preauto2
1210 moveindex 101
1211 MOVE: Q 10b-10c
1212 postauto2
1213 preauto1
1214 moveindex 102
1215 MOVE: vh 5l-1h
1216 postauto1
1217 preauto2
1218 moveindex 103
1219 MOVE: DH 4c-5d
1220 postauto2
1221 preauto1
1222 moveindex 104
1223 MOVE: vh 1h-2i
1224 postauto1
1225 preauto2
1226 moveindex 105
1227 MOVE: KY 8e-7d
1228 postauto2
1229 preauto1
1230 moveindex 106
1231 MOVE: gg 9o-8n
1232 postauto1
1233 preauto2
1234 moveindex 107
1235 MOVE: VH 11d-15h
1236 postauto2
1237 preauto1
1238 moveindex 108
1239 MOVE: se 12m-12k
1240 postauto1
1241 preauto2
1242 moveindex 109
1243 MOVE: VH 15h-9n
1244 MOVE:  +VH-dest
1245 postauto2
1246 preauto1
1247 moveindex 110
1248 MOVE: vg 8o-9n
1249 postauto1
1250 preauto2
1251 moveindex 111
1252 MOVE: P 4e-4f
1253 postauto2
1254 preauto1
1255 moveindex 112
1256 MOVE: vg 9n-11k
1257 postauto1
1258 preauto2
1259 moveindex 113
1260 MOVE: HF 13d-13f
1261 postauto2
1262 preauto1
1263 moveindex 114
1264 MOVE: vh 2i-2j
1265 postauto1
1266 preauto2
1267 moveindex 115
1268 MOVE: FE 9c-10d
1269 MOVE:  pass
1270 postauto2
1271 preauto1
1272 moveindex 116
1273 MOVE: gg 8n-10n
1274 postauto1
1275 preauto2
1276 moveindex 117
1277 MOVE: HF 13f-16f
1278 postauto2
1279 preauto1
1280 moveindex 118
1281 MOVE: se 12k-12j
1282 postauto1
1283 preauto2
1284 moveindex 119
1285 MOVE: WB 8f-12j
1286 postauto2
1287 preauto1
1288 moveindex 120
1289 MOVE: dk 12n-12j
1290 postauto1
1291 preauto2
1292 moveindex 121
1293 MOVE: SE 12d-14f
1294 postauto2
1295 preauto1
1296 moveindex 122
1297 MOVE: vh 2j-3k
1298 postauto1
1299 preauto2
1300 moveindex 123
1301 MOVE: FE 10d-13d
1302 postauto2
1303 preauto1
1304 moveindex 124
1305 MOVE: se 5m-5l
1306 postauto1
1307 preauto2
1308 moveindex 125
1309 MOVE: DH 13c-8h
1310 postauto2
1311 preauto1
1312 moveindex 126
1313 MOVE: vg 11k-13h
1314 postauto1
1315 preauto2
1316 moveindex 127
1317 MOVE: Q 10c-10e
1318 postauto2
1319 preauto1
1320 moveindex 128
1321 MOVE: cs 13o-10l
1322 postauto1
1323 preauto2
1324 moveindex 129
1325 MOVE: HF 16f-15f
1326 postauto2
1327 preauto1
1328 moveindex 130
1329 MOVE: vg 13h-12k
1330 postauto1
1331 preauto2
1332 moveindex 131
1333 MOVE: VD 14b-11e
1334 postauto2
1335 preauto1
1336 moveindex 132
1337 MOVE: vd 14o-13o
1338 postauto1
1339 preauto2
1340 moveindex 133
1341 MOVE: HF 15f-15h
1342 postauto2
1343 preauto1
1344 moveindex 134
1345 MOVE: vg 12k-12l
1346 MOVE:  pass
1347 postauto1
1348 preauto2
1349 moveindex 135
1350 MOVE: DH 8h-12l
1351 MOVE:  +DH-dest
1352 postauto2
1353 preauto1
1354 moveindex 136
1355 MOVE: hf 13m-12l
1356 postauto1
1357 preauto2
1358 moveindex 137
1359 MOVE: FE 13d-12e
1360 MOVE:  FE 12e-13f
1361 postauto2
1362 preauto1
1363 moveindex 138
1364 MOVE: gg 10n-8n
1365 postauto1
1366 preauto2
1367 moveindex 139
1368 MOVE: SE 6e-8e
1369 postauto2
1370 preauto1
1371 moveindex 140
1372 MOVE: vh 3k-3h
1373 postauto1
1374 preauto2
1375 moveindex 141
1376 MOVE: DH 5d-6e
1377 postauto2
1378 preauto1
1379 moveindex 142
1380 MOVE: p 5k-5j
1381 postauto1
1382 preauto2
1383 moveindex 143
1384 MOVE: DK 5c-7c
1385 postauto2
1386 preauto1
1387 moveindex 144
1388 MOVE: dh 4n-6l
1389 postauto1
1390 preauto2
1391 moveindex 145
1392 MOVE: HF 15h-3h
1393 postauto2
1394 preauto1
1395 moveindex 146
1396 MOVE: vd 3o-5m
1397 postauto1
1398 preauto2
1399 moveindex 147
1400 MOVE: VD 3b-5d
1401 postauto2
1402 preauto1
1403 moveindex 148
1404 MOVE: vd 13o-13f
1405 postauto1
1406 preauto2
1407 moveindex 149
1408 MOVE: VG 9b-13f
1409 postauto2
1410 preauto1
1411 moveindex 150
1412 MOVE: gg 8n-7m
1413 postauto1
1414 preauto2
1415 moveindex 151
1416 MOVE: CS 4b-8f
1417 postauto2
1418 preauto1
1419 moveindex 152
1420 MOVE: gg 7m-7l
1421 postauto1
1422 preauto2
1423 moveindex 153
1424 MOVE: HF 3h-11h
1425 postauto2
1426 preauto1
1427 moveindex 154
1428 MOVE: resign
1429 postauto1
1430 preauto2
1431 if >= #bskips 1 and >= #wskips 1
1432   die You may not skip a turn when the immediately preceding turn was skipped by the opponent.
1433 endif
1434 if not findpiece K spaces and not findpiece +DE spaces
1435   say All Royals Captured! Black has won!
1436   won
1437 endif
1438 set posvar join "b" join fencode boardflags
1439 if >= var #posvar 4 and < #bskips 2
1440   say Four Times Repetition! Drawn Game!
1441   drawn
1442 endif
1443 if var firstpart and sub isdoublemove origin dest and match moved hf +dh se +dk ln +ky fe +q lh +ln vg +bg fd +wb +cs
1444   remind "Enter second leg of move or write 'pass' in the Moves field"
1445   gosub legalmoves2 king
1446   continuemove
1447 elseif sub stalemated KING
1448 endif
1449 end
1450