Saturday, April 30, 2011

New project...

 Lately I've been thinking about a new project, something I've not done before (well, at least no in deep), is a game engine, my engines are related to:

  • Graphics engine
  • 2d engine
  • 3d engine
but is time to start to create a game engine, something that would make create a simple game an "easy" and a fast task.

The last game I played was Cave Story, is the kind of game that I like a lot, it has RPG elements, actions, puzzles, is fast, handy, retro style, nice music, good story..., so my idea is to create an engine that allows to create that kind of game.

Necessary components:
  • Game
    • Variable
      • Name
      • Default value
      • Type: int, bool, decimal, date, time, string
      • Text
      • Scope: game, inventory, others
    • Sound
      • Id
      • Name
      • Type: normal,pingpong,circular,fade
    • Song
      • Id
      • Name
    • Weapon
      • Id
      • Name
      • Damage
      • Level
      • Range
      • Flags
      • Energy to level up
      • Current energy
      • Max energy
    • Actor
      • Id
      • Type (customizable)
      • Name
      • Text
      • Level
      • Image
      • Health
      • Power
      • Defense
      • Flags: solid, invincible,shootable,friend, etc
      • Hurt sound
      • Death sound
      • Collision box
      • Weapon
    • Location
      • Id
      • X,Y
      • Name
    • Map
      • Id
      • Name
      • IsDefault
      • Trigger
      • Size x,y
      • ScrollType: auto,actor
      • Layers[]
      • Actors[]
      • Sounds[]
      • Songs[]
      • Locations[]
  • RPG engine
    • Item
      • Id
      • Name
      • Scope: Game, inventory, others
      • Map
      • Image
    • Inventory
      • Items[]
    • Text
      • Id
      • Language
      • Actor
    • Condition
      • Variable
      • Comparation
      • Value
    • Trigger
      • Variable
      • Action: inc, dec, not, new
      • Value
    • Talk
      • Actor
      • TextId[]
      • Triggers[]
    • Quest
      • Id
      • RelatedItem
      • Text
      • Image
      • Conditions[]
      • Triggers[]
      • Talks[]
  • Scripting
    • Command list
      • Refill ammo
      • Give weapon A and ammo B
      • Lose weapon A
      • Jump to A if hero has B
      • Animate actor A with animation B to direction C
      • Execute script A
      • Close message box
      • Clear message box
      • Convert actor A into actor B and dir C
      • Stop song A
      • Start song A
      • Start music A
      • Stop music A
      • Delete actors of type A
      • Jump to A in actor id B exists
      • Exit menu
      • Show image A in vox
      • Fadein
      • Fadeout
      • Clear flag A of actor B
      • Set flag A of actor B
      • Flash screen during A milliseconds
      • Exefute script  A if flag B is set
      • Fadeout music
      • Focus actor A at location B
      • Focus hero at location A
      • Show item A in box
      • Hide hero
      • Show hero
      • Hide actor A
      • Show actor A
      • Reset Game
      • Add item A
      • Remove item A
      • Remove actor id A
      • Remove actors of type A
      • Jump to A if actor B has C
      • Lock keyboard
      • Release keyboard
      • Load game
      • Save game
      • Restore health
      • Increment max health to A
      • Show map
      • Move actor A to location B dir C
      • Move hero to X,Y and adinationally execute script B
      • Show message A at  top
      • Show message B at  bottom
      • Set hero dir A
      • Jump to location A if actor type B exists
      • Wait for key
      • Set teleporter to location A
      • Quake screen for A milliseconds
      • Create actor A type B at location C direction D
      • Pause game
      • Resume game
      • Yes/No question
      • No weapons
      • Show text
    • Script
      • Id
      • Commands[]
Some parts are already out of the box, while others must de developed, let's hope I find the time and the motivation to start this new project

Bit functions

 I've been adding new functions to BB.Utils.Bits, some of this functions cannot be that fast with the funcionality from a high level language:


function TBit.PopFirstBitSet(var aValue: integer): integer;
//In = [EDX] Out = EAX
ASM
  PUSH ECX
  MOV ECX, [EDX]
  BSF EAX, ECX
  BTR [EDX], EAX
  POP ECX
END;
function TBit.LastBitSet(aValue: integer): integer;
//EDX
ASM
  BSR EAX, EDX
END;
function TBit.FirstBitSet(aValue: integer): integer;
//EDX
ASM
  BSF EAX, EDX
END;
function TBit.BitSetCount(aValue: integer): integer;
begin
  { TODO : optimize with array[0..65535] }
  result := 0;
  while aValue <> 0 do
  begin
    aValue := aValue and (aValue - 1);
    Inc(result);
  end;
end;
function TBit.PopLastBitSet(var aValue: integer): integer;
begin
  result := LastBitSet(aValue);
  _Clear(aValue, result);
end;

ChessKISS 1.1, released!

 This new version can be already download from the link panel, what's new?


30/04/11, 1.1 update

-Board
AsString optimized
AllPieces() and related stuff removed
GetPieces() returns a pointer instead of a new list
InCheck() cache removed
All GenerateXXX(ToIndex) removed
Added PieceMovingToSquare() as a generic solution
removed GetSmallestAttacker()
Added CanTraverse()
Removed GetAttackerAtIndex() (now using PieceMovingToSquare)
   Removed InternalGenerateCaptures()
   Removed GetPiecesCount()
   Removed GenerateCaptures()
New method CopyPieces() that returns a list and NOT a pointer
New method MovesToSquare()

-Book
First approach to book learning

-Cache
TEntry reduced to 16 bytes
   If the new entry that replaces the old one as a move and the   old one no, keep the move

-Definitions
New constants for fractions
New Attacks[] used in PieceMovingToSquare()

-Draw
IsDraw() now returns TMoveStatus instead of boolean

-Engine
Time recovered from protocol (there was a discrepancy)
New commands Demod (depth) and demot (time) that replaces demo

-Evaluation
Imbalance was imputed twice
Added draw probability
  King attack takes 33% of danger count
   EvalPassers() improved
   Fixed a bug in the passive penalty (Inc value should be Dec value)


-INI
Names changed

-Move
Equal/NotEqual removed

-MovePicker
Killers phase splitted in two
   Phases better organized
   Recovered old idea, bad moves that checks the opponent go to good captures (otherwise in Quiescense they are not search in deep)

-Piece
Added method IndexOf()
Added + operator

-Search
Added mate distance prunning
Added single evassion extension
New IID approach
   Readded History reductions, but by default they are disabled (the engine play worst)
   Quiescent caches used in the old style
   Mate prunning in Quiescent
   First non valid attempt to use futility in Quiescent

-Stats
Added check stats

Last test tournament

 After this result I'm sure that this version is quite stable:


Arena tournament

Rank Engine Score Ch Mi Bi Ro Pr ZO Pu S-B
1 ChessKISS 16,5/18 · ·· 11= 111 111 111 =1= 111 127,75
2 Micromax48_c2d 12,5/18 00= · ·· 101 111 ==1 111 101 89,25
3 BigLion 10,5/18 000 010 · ·· 110 1=1 111 1== 68,50
4 Roce38 7,5/18 000 000 001 · ·· 0=1 110 111 42,50
5 Predateur 2.0 7,0/18 000 ==0 0=0 1=0 · ·· 101 101 47,00
6 ZOIDBERG 5,5/18 =0= 000 000 001 010 · ·· =11 39,75
7 Pulsar2009-9b 3,5/18 000 010 0== 000 010 =00 · ·· 32,75


63 games played / Tournament is finished


No single lost

I'm going to prepare the next release right now

Wednesday, April 20, 2011

Internal tournaments

Arena tournament

Rank Engine Score Bi Ch Mi Pr Ro S-B
1 BigLion 30,5/40 · ·· ·· ·· ·· 1=1010001= 10=111111= 1111111111 011=1=111= 512,50
2 ChessKISS 24,0/40 0=0101110= · ·· ·· ·· ·· 10=11=1==0 1110110010 01=111===1 432,50
3 Micromax48_c2d 22,5/40 01=000000= 01=00=0==1 · ·· ·· ·· ·· 1===1=101= 1111111111 331,00
4 Predateur 2.0 16,0/40 0000000000 0001001101 0===0=010= · ·· ·· ·· ·· 111111110= 234,25
5 Roce38 7,0/40 100=0=000= 10=000===0 0000000000 000000001= · ·· ·· ·· ·· 172,25


100 games played / Tournament is finished

Monday, April 18, 2011

ChessKISS 1.1

 Lately I'm being trying the new version, as usual a hard task, it is really difficult and time consuming to understand whether the version is better or not, if nothing bad happens, soon a will upload the new version.

Well, I think I'm in the right way, a new victim, Olinkthink32



[Event "Arena tournament"]
[Site "ABEL-PC"]
[Date "2011.04.18"]
[Round "2"]
[White "Olithink32"]
[Black "ChessKISS"]
[Result "0-1"]
[BlackElo "2200"]
[ECO "C28"]
[Opening "Vienna"]
[Time "20:41:45"]
[Variation "3.Bc4 Nc6 4.d3 Na5"]
[WhiteElo "2200"]
[TimeControl "300"]
[Termination "normal"]
[PlyCount "146"]
[WhiteType "program"]
[BlackType "program"]

1. Nc3 {(b1c3 g8f6 g1f3 e7e6 d2d3 b8c6 e2e4 d7d5 c1f4 f8d6 g2g3) +0.17/11
7} Nf6 {(Ng8f6 Ng1f3 e6 e4 Bf8b4 Bf1d3) -0.09/12 9} 2. e4 {(e2e4 e7e5 g1f3
b8c6 f1c4 f6e4 c3e4 d7d5 c4b5 d5e4 f3e5 c8d7) +0.31/12 8} e5 {(e5) -0.17/12
8} 3. Nf3 {(g1f3 b8c6 f1c4 f6e4 c3e4 d7d5 c4d3 d5e4 d3e4 f7f6 d2d3)
+0.13/11 6} Bd6 {(Bf8d6 Bf1c4 Nb8c6 O-O O-O d3) -0.13/12 8} 4. Bc4 {(f1c4
h7h6 d2d4 b8c6 d4e5 c6e5 f3e5 d6e5 f2f3 e5c3 b2c3 d7d6) +0.73/11 8} Nc6
{(Nb8c6 O-O O-O d3 Kg8h8 Bc1g5 h6 Bg5e3 Ra8b8) -0.17/12 7} 5. a3 {(a2a3
h7h6 d2d3 a7a6 b2b4 b7b5 c4b3 c6d4 f3d4 e5d4 c3e2) +0.44/11 4} O-O {(O-O
O-O Nc6a5 Bc4d3 Na5c6 Ra1b1 Kg8h8) -0.08/11 8} 6. d3 {(d2d3 a7a6 b2b4 b7b5
c4a2 c8b7 c1e3 f6g4 e3g5 d6e7 h2h4) +0.58/11 8} Kh8 {(Kg8h8) -0.16/10 7} 7.
Ng5 {(f3g5 h8g8 h2h4 h7h6 g5f3 a7a6 a3a4 d6c5 c1e3 d7d6 e3c5) +0.69/11 6}
Qe8 {(Qd8e8 O-O h6 Ng5f3 Nc6a5 Bc4a2 Nf6g4 Kg1h1 Ra8b8 d4) -0.06/10 7} 8.
Nb5 {(c3b5 h7h6 g5f3 a7a6 b5d6 c7d6 a3a4 c6a5 c4a2 b7b5 c1d2 a5c6) +0.84/12
4} a6 {(a6 Nb5xd6 c7xd6 O-O b5 Bc4a2 Ra8a7 Bc1e3 Ra7c7 Ng5xf7 Rf8xf7)
+0.21/10 7} 9. Nxd6 {(b5d6 c7d6 a3a4 h7h6 g5f3 c6a5 c4a2 a5c6 h2h4 e8d8
a2b3 f6g4 c1d2 d8b6) +0.82/14 4} cxd6 {(c7xd6) +0.02/11 7} 10. a4 {(a3a4
h7h6 g5f3 c6a5 c4a2 a5c6 h2h3 e8d8 c1d2 b7b5 a4a5 c8b7 a2b3) +0.86/13 7}
Na5 {(Nc6a5 Bc4a2 h6 Ng5f3 Na5c6 O-O Nf6g4 Bc1d2 Ra8b8 Qd1e2) +0.08/10 11}
11. Ba2 {(c4a2 h7h6 h2h4 a5c6 c1e3 e8e7 c2c3 a8b8 g5f3 b7b6 f3d2 b6b5 b2b4)
+1.04/13 5} Nc6 {(Na5c6 O-O) +0.01/12 6} 12. h4 {(h2h4 h7h6 c1e3 e8e7 e1f1
g7g6 g5f7 f8f7 a2f7 e7f7 e3h6 c6d4) +0.99/11 7} h6 {(h6 Bc1d2 Nc6d4)
+0.38/10 6} 13. Be3 {(c1e3 e8e7 c2c3 a6a5 a2b3 b7b6 e3b6 a8a6 g5f7 f8f7
b3f7 e7f7) +1.14/11 5} Nb4 {(Nc6b4 Ba2b3 Nb4c6 Ng5f3 Nf6g4 O-O f5 e4xf5
Ng4xe3 f2xe3) +0.41/10 6} 14. Bb3 {(a2b3 a6a5 c2c3 b4a6 e3b6 e8e7 b3c4 g7g6
g5f3 a6c5 b2b4 a5b4) +1.18/12 5} Nc6 {(Nb4c6 Ng5f3 Ra8b8 O-O b6 Qd1e2 Nf6g4
c3 Ng4xe3) +0.23/9 5} 15. c3 {(c2c3 a6a5 f2f4 e5f4 e3f4 d6d5 f4d6 c6e7 d1f3
a8a6 f3g3 h6g5) +1.18/12 6} Qe7 {(Qe8e7 Ng5f3 Ra8b8 O-O b6 Rf1e1 Kh8h7
Qd1c2 Rf8g8 Bb3c4) +0.24/10 6} 16. a5 {(a4a5 c6d8 g2g3 d8e6 f2f4 e5f4 g3f4
h8g8 g5e6 d7e6 e4e5 f6d5) +1.32/12 3} Rb8 {(Ra8b8 Ng5f3 Nf6g4 O-O) +0.32/11
7} 17. Bb6 {(e3b6 h8g8 g5f3 c6d8 b3c4 d8e6 f3d2 g8h8 d3d4 e5d4 c3d4 e6f4)
+1.57/12 3} Ne8 {(Nf6e8 Ng5f3 f5 e4xf5 Rf8xf5 Qd1d2) +0.17/11 5} 18. Qh5
{(d1h5 h8g8 h5g6 e8f6 g5f7 f8f7 b6c7 b8a8 c7d6 e7d6 b3f7 g8h8) +2.41/11 5}
Kg8 {(Kh8g8 Ng5f3 Kg8h8 O-O-O Kh8g8) +0.19/8 5} 19. Qg6 {(h5g6 e8f6 b6c7
b8a8 g5f7 f8f7 c7d6 e7d6 b3f7 g8h8 f7c4 c6e7 g6f7) +2.03/12 4} Nf6 {(Ne8f6
Bb6c7 h6xg5 h4xg5 Qe7e6 Bb3xe6) -0.76/10 5} 20. Bc7 {(b6c7 b8a8 g5f7 f8f7
c7d6 e7d6 b3f7 g8h8 h1h3 c6e7 g6g3 d6c5) +1.72/11 3} d5 {(d5 Bb3xd5 h6xg5
Bc7xb8) -1.09/9 4} 21. Bxd5 {(b3d5 b8a8 h4h5 d7d6 c7d6 e7d6 g5f7 d6c5 f7h6
g8h8 h6f7 h8g8 h5h6) +2.36/11 3} Ra8 {(Rb8a8 Ng5xf7 Rf8xf7 Bc7d6 Qe7xd6
Bd5xf7) -1.37/10 6} 22. h5 {(h4h5 a8a7 e1d2 d7d6 g5f7 f6d5 f7h6 g8h8 c7d6
f8f2 d2e1 f2f6 d6e7) +2.40/11 4} Ra7 {(Ra8a7 Bc7d6 Qe7xd6 Ng5xf7 Rf8xf7
Bd5xf7 Kg8f8 O-O Qd6xd3) -1.41/8 5} 23. Ke2 {(e1e2 a7a8 f2f3 d7d6 c7d6 e7d6
g5f7 d6c5 f7h6 g8h8 h6f5) +2.32/10 5} d6 {(d6 Bc7xd6 Qe7xd6) -0.91/8 6} 24.
Bxd6 {(c7d6 e7d6 g5f7 f8f7 d5f7 g8h8 f2f3 a7a8 b2b4 c6e7 g6g3 c8e6 f7e6)
+2.72/12 3} Qxd6 {(Qe7xd6 Qg6h7 Nf6xh7 Bd5xc6) -1.89/9 6} 25. Nxf7 {(g5f7
f8f7 d5f7 g8h8 f2f3 c8d7 b2b4 c6e7 g6g3 d7b5 c3c4 b5d7) +2.57/11 2} Rxf7
{(Rf8xf7 Qg6xf7 Kg8h8 Bd5xc6 Bc8g4 Ke2d2 Qd6xc6 Qf7f8 Kh8h7) -1.46/8 5} 26.
Bxf7+ {(d5f7 g8h8 f2f3 d6c7 f7a2 c6a5 a2d5 a5c6 d5f7 c6e7 g6g3) +2.08/10 3}
Kf8 {(Kg8f8 Bf7d5 Bc8e6 Bd5xe6 Qd6xe6 b4 Qe6b3 Ra1c1 Qb3f7 Qg6f5) -1.42/9
4} 27. Ba2 {(f7a2 c8e6 a2e6 d6e6 a1a3 a7a8 b2b4 c6e7 g6g3 f6g4 g3f3 f8g8)
+2.43/11 3} Be6 {(Bc8e6 Ba2xe6 Qd6xe6 b4 Qe6b3 Ra1c1 Ra7a8 Ke2f1 Ra8d8)
-1.34/8 3} 28. Bxe6 {(a2e6 d6e6 a1a3 a7a8 b2b4 a8d8 h1h4 c6e7 g6g3 e7c6
e2f1 f8g8) +2.13/12 4} Qxe6 {(Qd6xe6 Ke2d2 Ra7a8 Rh1f1 Ra8d8 Ra1e1 Qe6d7
Qg6g3 Kf8g8) -1.04/9 4} 29. Ra3 {(a1a3 a7a8 g6g3 a8d8 g3h3 e6h3 h1h3 f8f7
a3a1 f7e6 b2b4 f6g4) +2.13/12 4} Ra8 {(Ra7a8 Rh1h3 Qe6f7) -0.96/8 3} 30.
Qg3 {(g6g3 a8d8 g3h3 e6d6 h3e3 f8g8 a3a1 d6e6 f2f3 e6f7 g2g4) +2.07/11 2}
Rd8 {(Ra8d8 Qg3f3 Kf8g8) -0.78/9 3} 31. Qh3 {(g3h3 e6d6 h3e3 d6d7 f2f3 d7f7
g2g4 f6h7 e2e1 h7g5 e3c5 f8g8) +1.99/11 2} Qd6 {(Qe6d6 Ra3a1 Qd6d7 Qh3xd7)
-0.74/8 3} 32. Qe3 {(h3e3 f6g4 e3f3 f8g8 h1d1 g4f6 b2b4 d6e6 d1a1 e6f7 a1h1
g8h7) +1.89/11 4} Kg8 {(Kf8g8 Ra3a1 Qd6c7 Qe3g3 Qc7d7 Ra1g1 Kg8f7 Rh1h4
Nc6xa5) -0.62/9 3} 33. f3 {(f2f3 d6c7 b2b4 c7f7 g2g4 f6e8 h1f1 e8f6 e3b6
f7d7 f1d1 d7f7) +2.06/12 3} Kh8 {(Kg8h8 g4 Qd6d7) -0.67/8 5} 34. b4 {(b2b4
d6d7 e3d2 d7f7 d2a2 f7e8 g2g4 e8e7 a2b3 e7d6 h1d1) +2.11/11 2} Qe7 {(Qd6e7
g4 Qe7d7) -0.84/8 3} 35. Raa1 {(a3a1 e7f7 g2g4 f6h7 h1f1 d8f8 e2d2 h7g5
f3f4 e5f4 e3b6) +1.98/11 2} Qf7 {(Qe7f7 g4 Nf6h7) -0.65/9 3} 36. g4 {(g2g4
f6h7 h1f1 h7g5 f3f4 e5f4 f1f4 f7b3 a1c1 c6e5 d3d4 b3c4 e2d1 c4a2) +1.54/13
3} Nh7 {(Nf6h7) -0.65/7 3} 37. Rhf1 {(h1f1 d8f8 e3b6 h7g5 b4b5 a6b5 a5a6
f7b3 a6a7 b3b2 e2e3 f8f3 f1f3 b2a1) +1.41/12 3} Ng5 {(Nh7g5 Rf1d1 Ng5h3
Ke2d2 Nh3f4 Kd2c2 Nf4xd3 Rd1xd3) -0.38/8 2} 38. f4 {(f3f4 e5f4 f1f4 f7b3
a1c1 c6e5 d3d4 b3c4 e2d2 g5e6 f4f5 e5g4) +1.22/11 3} exf4 {(e5xf4 Qe3xf4
Qf7b3 Qf4c1 Qb3e6 Rf1f5 Qe6e7 Qc1e3) -0.66/8 2} 39. Rxf4 {(f1f4 f7b3 e3d2
c6e5 d3d4 b3c4 e2e3 c4b3 d2c1 d8c8 e3e2 c8c3 f4f8 h8h7) +0.59/12 2} Qb3
{(Qf7b3 Ra1c1 Nc6e5 d4 Ne5c4 Qe3f2 Qb3b2 Ke2d1 Ng5xe4) -0.40/8 2} 40. Qd2
{(e3d2 c6e5 d3d4 b3c4 e2e3 c4b3 e3e2) 0.00/11 1} Ne5 {(Nc6e5 d4 Qb3c4 Ke2e3
Ng5e6 Rf4f5 Ne5xg4) +0.61/9 2} 41. d4 {(d3d4 b3c4 e2e3 c4b3 e3e2) 0.00/12
2} Qc4+ {(Qb3c4 Ke2e3 Ng5e6 Rf4f5 Ne5xg4 Ke3f3 Ng4f6 Kf3e3 Nf6g4 Ke3f3)
+0.61/9 2} 42. Ke3 {(e2e3 c4b3 e3e2) 0.00/12 3} Ne6 {(Ng5e6 Rf4f5 Ne5xg4
Ke3f3) +0.61/9 2} 43. Rf5 {(f4f5 e5g4 e3f3 g4f6 f3e3 f6g4) 0.00/12 3} Nxg4+
{(Ne5xg4 Ke3f3) +1.32/7 2} 44. Kf3 {(e3f3 g4f6 f3e3 e6g5 d2d3 c4b3 a1b1
b3a2 c3c4 f6e4 d4d5 a2g2) -0.31/12 3} Nf6 {(Ng4f6 Kf3e3 Ne6g5 Qd2d3 Qc4c6
Ke3e2 Nf6xe4 c4) +1.75/9 2} 45. Ke3 {(f3e3 c4b3 d2d3 f6g4 e3f3 d8d4 d3b1
g4h2 f3g2 d4d2 g2h1 b3c3 a1a2 h2g4 a2d2) -0.87/12 8} Ng5 {(Ne6g5 Qd2d3
Qc4c6 e5 Nf6e4 c4 Qc6e8 Ke3f4) +1.84/8 1} 46. Qd3 {(d2d3 c4b3 a1c1 g5e4
e3e2 d8c8 f5f3 b3a2 e2e1 c8e8 f3e3 a2g2) -0.82/11 2} Qc6 {(Qc4c6 e5 Nf6d5
Ke3f2 Nd5xc3 Ra1e1 Nc3b5 Rf5f4) +1.76/7 1} 47. c4 {(c3c4 f6e4 d4d5 c6d7
f5f1 d7h3 e3d4 h3h5 c4c5 h5h2) -0.83/9 2} Ngxe4 {(Ng5xe4 Ra1g1 Qc6d7 Rg1f1
Qd7e8 Ke3f4 Nf6xh5 Rf5xh5) +2.10/7 1} 48. d5 {(d4d5 c6d6 d3d1 d6b4 d1d4
e4d6 f5f6 d8e8 e3f3 g7f6 d4f6 h8h7) -1.95/10 4} Qc7 {(Qc6c7 Ke3d4 Ne4d6
Rf5e5 Nd6xc4 Qd3xc4 Qc7xe5 Kd4xe5) +3.03/7 1} 49. Kd4 {(e3d4 c7h2 a1b1 e4d6
f5f6 g7f6 d4c3 h2e5 c3c2 e5h5) -2.07/9 2} Nd6 {(Ne4d6 Rf5xf6 g7xf6 Ra1e1 f5
Kd4c3 Nd6e4 Kc3b3 Qc7h2) +3.29/8 1} 50. Rxf6 {(f5f6 g7f6 a1f1 d8g8 c4c5
d6b5 d4c4 c7e5 f1f5 e5b2) -2.06/9 1} gxf6 {(g7xf6 Ra1e1 Rd8c8 c5 Nd6b5
Kd4c4 Qc7f7 Qd3f3 Nb5d6) +3.59/8 1} 51. Rc1 {(a1c1 d6b5 d4e3 c7e5 d3e4 e5g5
e4f4 d8e8 e3f3 b5d4 f4d4 g5h5 f3f2 h5f5 f2g2 f5g5 g2h3) -3.10/9 1} Nb5+
{(Nd6b5 Kd4e3 Rd8e8 Ke3f3 Qc7h2 Rc1d1 Nb5d6 c5 Qh2xh5) +5.23/8 1} 52. cxb5
{(c4b5 c7f4 d4c5 f4c1 c5b6 c1f4 d3g6 d8g8 g6d3 f4b4 b6b7 b4b5 d3b5)
-5.00/10 2} Qxc1 {(Qc7xc1 Qd3f5 Qc1b2 Kd4c5) +6.89/8 2} 53. Qf5 {(d3f5 c1d2
d4c5 d2c3 c5b6 c3d4 b6b7 a6b5 b7c6 d4c4 c6b7 c4d5 f5d5 d8d5) -4.62/9 1}
Qg1+ {(Qc1g1 Kd4c3 Qg1g5 Qf5e6 a6xb5 Kc3d4 Qg5h4 Kd4c5) +7.03/7 1} 54. Kc3
{(d4c3 h8g7 b5a6 b7a6 c3c4 g1g5 f5g5 h6g5 c4d4 f6f5) -4.60/9 2} Qg5 {(Qg1g5
Qf5xg5 h6xg5 Kc3d4 Rd8e8) +7.23/9 1} 55. Qxg5 {(f5g5 h6g5 b5a6 b7a6 c3d4
h8g7 d4c5 g7h6 d5d6 f6f5 c5d5 h6h5) -5.39/12 1} hxg5 {(h6xg5 b5xa6 b7xa6
Kc3d4 g4 Kd4e4 f5 Ke4f4 Rd8xd5 h6 Kh8h7 Kf4e3 Kh7xh6) +8.50/13 2} 56. bxa6
{(b5a6 b7a6 d5d6 h8h7 b4b5 a6b5 c3d4 d8d6 d4c5 d6e6 c5b5 e6e5 b5b6 h7h6
a5a6) -6.35/13 1} bxa6 {(b7xa6 Kc3d4 g4 Kd4e3 Rd8xd5 Ke3f4 Rd5xh5 Kf4xg4
Rh5g5 Kg4f3 Rg5b5 Kf3f4 Rb5xb4) +8.16/12 2} 57. Kd4 {(c3d4 g5g4 d4e3 d8d5
e3f2 d5h5 f2g3 h5g5 b4b5 a6b5 a5a6 g5g7 g3f2) -6.80/13 1} g4 {(g4 Kd4e3
Rd8xd5) +8.65/11 1} 58. Ke3 {(d4e3 d8d5 e3f2 f6f5 f2g3 d5b5 g3f2 f5f4 f2e2
h8h7 e2d3 h7h6 d3c3) -7.42/13 1} Rxd5 {(Rd8xd5 Ke3f2 Rd5b5 Kf2g2 Rb5xb4
Kg2g3) +9.89/11 1} 59. Kf2 {(e3f2 f6f5 f2g3 h8h7 g3f4 d5d4 f4e3 d4b4 e3d3
b4b3 d3e2 f5f4 e2d2 b3h3 d2e2) -8.17/13 1} Rb5 {(Rd5b5 Kf2g3 Rb5xb4 Kg3h4
Kh8h7 Kh4g3 Kh7h6 Kg3h4 f5 Kh4g3 Kh6xh5) +10.67/11 1} 60. Kg2 {(f2g2 f6f5
g2g3 b5b4 h5h6 b4b3 g3g2 h8h7 g2f1 f5f4 f1g1 h7h6 g1f1 b3a3 f1e2) -8.89/14
2} f5 {(f5 Kg2g3 Rb5xb4 h6 Kh8h7 Kg3f2 f4 Kf2e2 Kh7xh6) +11.91/12 1} 61. h6
{(h5h6 b5b4 g2f2 f5f4 f2e2 f4f3 e2e3 b4b3 e3f2 b3b2 f2g3 b2g2 g3f4 f3f2
f4g5 f2f1q g5g6 g2h2) -15.48/14 3} Rxb4 {(Rb5xb4 Kg2g3 Kh8h7 Kg3g2 Rb4b2
Kg2g3 Kh7xh6 Kg3f4 Rb2b4) +12.61/11 1} 62. Kg3 {(g2g3 b4b3 g3h4 b3f3 h4g5
g4g3 g5f6 g3g2 f6e7 g2g1q e7d7 g1a7 d7d6 a7h7 d6e6) -16.48/13 0} Kh7
{(Kh8h7 Kg3g2 f4 Kg2g1 Rb4b2 Kg1f1 Kh7xh6) +12.81/10 1} 63. Kh4 {(g3h4 b4b3
h4g5 b3f3 g5f6 g4g3 f6e6 g3g2 e6d7 g2g1q d7c6 f3h3 c6d6) -16.56/13 1} Rb3
{(Rb4b3 Kh4g5 Rb3f3 Kg5f6 g3 Kf6e6 g2 Ke6d7 g1=Q Kd7c8 Qg1c5 Kc8b7)
+18.33/11 1} 64. Kg5 {(h4g5 g4g3 g5f5 g3g2 f5e5 g2g1q e5d5 b3d3 d5c6 g1c1
c6b7 d3d7 b7b8 c1b1 b8a8 b1b7) -M8/13 0} Rf3 {(Rb3f3 Kg5f6 g3 Kf6e6 g2
Ke6d6 g1=Q Kd6d5 Rf3d3 Kd5e6) +18.68/10 1} 65. Kf6 {(g5f6 g4g3 f6e6 g3g2
e6d7 g2g1q d7c6 f3c3 c6d5 g1c5 d5e6 c3e3 e6f6 f5f4 f6f7 c5e7) -M8/13 0} g3
{(g3 Kf6e6 g2 Ke6d6 g1=Q) +19.17/10 1} 66. Ke6 {(f6e6 g3g2 e6d7 g2g1q d7d6
g1d4 d6c6 f3c3 c6b7 d4b4 b7a8 c3b3 a8a7 b4b7) -M7/12 1} Re3+ {(Rf3e3 Ke6d6
g2 Kd6c5 g1=Q Kc5b4 Re3e4 Kb4c3 Qg1a1) +19.27/8 1} 67. Kd5 {(e6d5 g3g2 d5c5
g2g1q c5d4 f5f4 d4c5 f4f3 c5d4 f3f2 d4e3) -20.33/11 1} g2 {(g2 Kd5d6 g1=Q)
+19.04/7 0} 68. Kc4 {(d5c4 g2g1q c4d4 e3e7 d4d5 e7d7 d5e6 g1d4 e6f5 d7d6
f5g5 d6d5) -M6/10 1} g1=Q {(g1=Q Kc4d5 Kh7xh6) +19.37/7 0} 69. Kd4 {(c4d4
e3e7 d4c3 g1e3 c3c2 e7c7 c2b2 e3d2 b2a3 c7c3 a3a4 d2d4) -M6/8 1} Re4+
{(Re3e4 Kd4d5 Qg1d4 Kd5c6 Re4e6 Kc6c7 Qd4a7 Kc7d8) +M5/7 0} 70. Kd5 {(d4d5
g1c1 d5d6 c1c8 d6d5 c8e6 d5c5 e4c4) -M4/9 1} Qg6 {(Qg1g6 Kd5c5 Kh7xh6 Kc5d5
Qg6e6 Kd5c5 Re4c4) +M4/15 0} 71. Kc5 {(d5c5 g6f6 c5d5 e4d4 d5c5 f6d6) -M3/9
1} Kxh6 {(Kh7xh6 Kc5d5 Qg6e6 Kd5c5 Re4c4) +M3/63 0} 72. Kd5 {(c5d5 g6e6
d5c5 e4c4) -M2/9 0} Qe6+ {(Qg6e6 Kd5c5 Re4c4) +M2/63 0} 73. Kc5 {(d5c5
e4c4) -M1/32 0} Rc4# {(Re4c4) +M1/63 0} 0-1