In our current dev version, I've just made an update to this game. In the "UnClaimable" define, we used to have this code as the second part of the (and {}):
Code:
(=
0
(count Sites
in:(intersection
(sites Around (site) Empty Orthogonal)
(sites From
(move Select
(from
(sites Empty)
if:("SomeSite"
(sites Around (from) Empty Orthogonal)
("SomeSite"
(sites Around (site) Empty Orthogonal)
(is Related Orthogonal (site) (from))
)
)
)
)
)
)
)
)
And I've replaced it with this:
Code:
(not
(can Move
(move Select
(from
(sites Around (site) Empty Orthogonal)
if:("SomeSite"
(sites Around (from) Empty Orthogonal)
("SomeSite"
(sites Around (site) Empty Orthogonal)
(is Related Orthogonal (site) (from))
)
)
)
)
)
)
As far as I can tell, the logic should be identical. In both cases it should be checking whether there exist any of those select moves as specified in the (move Select ...) that have a "from" position in (sites Around (site) Empty Orthogonal). Our unit tests did not detect a change in behaviour, so again I'm fairly sure it should be correct, but just in case, maybe you'd be willing to check? Maybe even playtest the modified version locally if you know the game well?
The upside of this change is that it makes the entire game run about 13 times faster, which should be helpful for our AIs :)