JABChess is an incomplete fairy chess engine that supports in-match piece upgrades and board extensions during play. Deploy upgrades strategically to beat the opponent, or use board expansion to get out of a tight spot. It supports 21 distinct piece types and has a capable and aggressive opponent. You can choose from one of 3 scenario matches, such as a standard chess match, a match of Wolf Chess or a match of XXL Chess.

In a match, hit the `U` key to enter the Piece Upgrade Mode. Here you select one of your pieces and use the arrow keys to change it. Hit `B` and you'll enter the Board Upgrade Mode, in which you can select one tile and a neighboring tile and add a row and column to the board in-between them. Supported pieces:

Standard Pieces

  • Pawn
  • Knight 
  • Bishop
  • Rook
  • Queen
  • King

Variant Chess Pieces

  • Nightrider: Moves like a knight, but can repeat the knight move in the same direction any number of times. 
  • Admiral: Composite of Rook and King. 
  • Amazon: Composite of Queen and Knight 
  • Camel: Moves in a (3,1) leap.
  • Elephant: Moves in a (3,2) leap.
  • Buffalo: Composite of a Knight, Camel and Elephant
  • Cardinal: Composite of Bishop and Knight. 
  • Centaur: Composite of King and Knight. 
  • Champion: Moves one square orthogonally, or jumps two squares orthogonally, diagonally or both.
  •  Cheetah: Moves as a Camel (3,1 leap), Elephant (3,2 leap), or jumps three squares orthogonally, diagonally or both. 
  • Duchesse: Moves one square in any direction (like a king), or jumps two or three squares orthogonally or diagonally, but not both.
  • Dragon: Moves like a knight or a pawn. Can double-push from original position.
  • Lion: Composite of King and Knight who additionally step two squares orthogonally. 
  • Wolf: Composite of Rook and Knight 
  • Sergeant: Moves one square forward, either straight or diagonally, all of which can capture. Can make a non-capturing double push forward from its initial position.

Created as a solo graduation project in 10 weeks, the source code is available to review. The project was written in Rust and uses Bevy, The chess engine is broadly based on the theoretical groundwork laid out by the Chess Programming Wiki. The rendering part of the prototype was initially sketched out based on this blog post about a (now hugely outdated) chess game interface in bevy.

The font used is a Fixedsys Excelsior released to the public domain by Darien Valentine. The models were sourced from thingiverse, published under CC BY-SA by fhoudebert, some of them have undergone Mesh Simplification.

JABChess does not support castling or classical piece promotions outside of the upgrade system. The game supports a maximum board size of 15x16 and the engine internally uses 256bit bitboards as its board representation. The opponent has a default search depth of 3 and uses simple move ordering (mvv-lva + pv) to reduce time spent searching. 

On the developer-experience side of things, the repo listed above contains a Dockerfile and Jenkinsfile for the CI pipeline I've used to automatically compile and publish builds to GitLab and eventually Itch. Due to the performance needs of chess engine code, I've used Criterion to benchmark the code, and displayed the results in a on Grafana.

The idea of this prototype was using an inventory-like system to change the rules of chess midmatch. The player would receive upgrades during play that they could use when they'd like to, and in-between matches difficulty would be adapted and increased, with the next match putting the player at a bigger disadvantage. During development, Gambonanza was announced, which seems to be a much better and game-oriented implementation of this kind of idea. 

Updated 13 hours ago
Published 19 days ago
StatusPrototype
PlatformsHTML5, Windows
AuthorPraxis
TagsChess, fairy-chess, Prototype

Download

Download
jabchess-linux.zip 41 MB
Version 142 13 hours ago
Download
jabchess-windows.zip 49 MB
Version 142 13 hours ago

Development log

Leave a comment

Log in with itch.io to leave a comment.

OSZAR »