How do generic game engines work? The evaluation functions for chess usually includes chess specific knowledge. However, Zillions of Games is able to play any game based only on a description of how the pieces move and winning/losing/draw conditions. And as I see, does quite a good job.

Engines like Fairy-Max can only play chess-like games, which includes many assumptions in its design that do not need to be generalised. But when making a generic game engine (which I dream of doing), the engine simply can't assume almost anything.

I got a nudge in the right direction with the post 'ab-initio' piece values on TalkChess. Yet it does not provide the whole picture.

So, how do generic game engines (like Axiom Development Kit, which is an independent engine that plugs into Zillions; or even the very Fairy-Max) evaluate position?

Edit 1: I found some more information in the 1993 paper by Barney Pell entitled A Strategic Metagame Player for General Chess-Like Games (found it from the "General Game Playing" page on chessprogramming.org).
I don't know about Zillions specifically, but it's a reasonably good strategy in most games to maximise your own flexibility of action while minimising your opponent's.  This is certainly true for chess; there are competent chess engines (ie. strong enough to beat an amateur consistently) which use only material value and mobility for evaluation.

The Beale Effect (ie. minimax with random position evaluations) yields a reasonably good chess engine with a modest depth of search, plateauing around 2000 ELO.  This relies entirely on a second-order effect of mobility, ie. you're most likely to find the highest random value in a part of the game tree that branches a lot.

I would not be surprised, therefore, to find that Zillions uses either a random evaluation or one based on mobility.  The value of a piece, after all, is strongly correlated with its mobility.