ROCE - Roman's Own Chess Engine

»Deutsche Version


Work on Roce hasn't stopped. I'm currently in the process of rewriting Roce from scratch as working on the old sources got more and more frustrating. A bad mix of global and local variables made a rewrite necessary.

So far the move generator and a console mode to play with are written but I'm considering to switch from my vector based board representation (right now I'm playing with a 16x8 array and 0x88) to bitboard as well. Probably I will just try to write a bitboard version along as well. The goal of this rewrite is to create well readable, bugfree and modularized code not really caring about performance or playing strength (although I expect it to be stronger than previous versions of Roce).

Planned features:


Roce is yet another chess engine that probably no one needs. Still it's a lot of fun to work on it. I started writing Roce around christmas time in 2003. At first it was supposed to be a weeks or months project mainly meant to improve my knowledge of the C programming language. But the project turned out to be more challenging and timeconsuming than I expected it to be.

How to run Roce

If you intend to play against Roce you should get a nice GUI like Arena or something else that supports the UCI-protocol. Roce should also work under the Fritz or under the Shredder classic Interface. In fact any GUI that supports the UCI-protocol should do.

Playing strength

Roce is still a rather weak engine. It won't miss simple tactics but it still lacks a lot of chess knowledge and will play unsound moves in many situations. On the other hand it plays with a rather risky and attacking style and even mediocre players have a good chance to win or draw a game so depending on your strength it might be an interesting opponent to play with.


A few technical details

Roce is using the rather old fashioned 10x12 board representation.

Roce generates most of the time only legal moves unlike most other chess engines which usually depend on pseudo move generation. While legal move generation is rather timeconsuming it simplifies also some things. Mate and stalemate can be detected by the move generator already and information regarding mobility is always up to date. In the quiescent search I'm generating pseudo captures beginning with version 0.036 on though and only switch to legal move generation if the side to move is in check.

Tech. specs in detail (0.0380)

What is RoceConfig.exe good for?

Thanks to the effort of Patrick Jansen Roce (versions beginning from 0.0344) comes together with a nice configuration tool which makes changing settings very easy. RoceConfig helps you to adjust the settings of Roce to your needs without having to fiddle around with the configuration file directly.

What is the file perfttestsuite.epd good for?

The file consists of a testsuite of positions which are usefull to check if the movegenerator works properly. This feature is mainly used to check if the move generation and move making part is still working properly after some modifications have been made to the sources. The test can be started by entering the command 'testmovegen' and takes -depending on the speed of your computer- a few minutes to hours to finnish. It's sufficient to run this command only once on a certain computer to make sure it's working properly as some aggressive optimization might cause problems on some processors. Most of the positions and numbers in the file were posted by Andrew Wagner on the Chess Computer Club (CCC) in 2004.

If you are writing your own move generator or chess engine you might be especially interested in the commands divide, divide2. 'divide #' gives the number of child moves at a certain depth while 'divide2 #' gives the total sum of child moves to this depth. 'perft #' gives the sum of legal moves at a certain depth while 'perft2 #' sums them up. This is a usefull feature if your movegenerator comes up with different numbers and you need to track down the bug.

some more infos regarding perft/divide

some information if you want to write your own chess engine

Legal stuff

The binary of Roce is currently available for free but I preserve the right to change that at any time (although it's very unrealistic that Roce will ever go commercial, of course). The source code won't be released most probably as there are already more than enough sources of engines available.


The chess engine Roce is written entirely by me. The name is program. But of course I was able to recycle a lot of great ideas from smart people. The main reason I got interested in chess programming was due an article that appeared in the German Computer Journal DOS in 1997. The article 'Der PC lernt Schach-Das Spiel der Koenige' was written by Chrilly Donninger and Klaus Manhart. Later when I was writing on my engine I also learnt a lot about the matter from Bruce Morelands excellent site. Several ideas I got by reading and asking questions on several chess forums like the Winboard forum or the Chess Computer Club.

Furthermore I would like to thank all those who are running computer chess tournaments. Always very interesting to have a look at the games or at the results even though Roce is usually to be found at the end of those lists. Many thanks to Leo Dijksma, Guenther Simon, Olivier Deville and Karl-Heinz Soentges for letting Roce compete in their tournaments. Maybe there are more tournaments where Roce is participating I'm not even aware of. Let me know if that should be the case.


Roce plays regulary on ICC with the handle Roce.

Download ROCE

Binary for windows

Version 0.0380 is only slightly stronger than version 0.0370. As several ugly bugs were fixed a new version number is probably justified though. Please notify me if you encounter any problem with the binary or if Roce should behave strange (losing many games is not a bug but rather a feature though).

Roce 0.0390
Binary for Linux

The previous Linux port had serious problems regarding the time management. This should be fixed now. As Roce is a UCI engine you will have to use polylglot in order to make it work under xboard or use another GUI that supports the UCI-protocol. If you play with ponder on you need to put the option 'Syncstop = true' into the polyglot.ini file. Otherwise Roce will hang after a pondermiss.

Roce 0.0380 (Linux)
Roce 0.0370 (Linux) compiled with option -static
Binary for Mac

As I have access to a MacBook I'm able to provide Mac binaries as well.

Roce 0.0380 (Mac) 32/64-bit
Older versions (windows only)
Roce 03 (buggy, not available)
Roce 0.034
Roce 0.0343 (buggy)
Roce 0.0344 (buggy)
Roce 0.0345
Roce 0.0350
Roce 0.0360
Roce 0.0370
Roce 0.0380