= Elemental Chess Elemental Chess is an original board game based on Stratego and Rock Paper Scissors. Two players compete by moving Spells around a grid, attempting to defeat each other's Wizard. Spells come in three elements: fire, water, and plant; and three sizes: small, medium, large. Right now I'm working on building a better new user experience for the networked version. You can still use it, or you can just play it locally with a friend on the same computer. [[http://nickretallack.com/elementalchess|Play it Locally]] or [[http://games.nickretallack.com/|Play it Networked]] == Rules All pieces can move one space in a cardinal direction (up,down,left,right). The Wizard can move one space diagonally as well. You can only move a piece into an occupied space if your piece can defeat its occupant. If the pieces are different elements, elemental weaknesses apply: Water > Fire > Plant > Water. That is, Water always beats Fire, Fire always beats Plant, and so on. If the spells are of the same element, the larger spell wins. If your spell would tie or lose to its opponent, you can't make that move. Any Spell can defeat an enemy Wizard. You can't attack your own pieces. Remember, element is more important than size: a tiny drop of water can put out a raging fire, for some reason. I don't know why. It's magic. (perhaps I should redraw the spells to make this a little more convincing) == Project Status The networked version currently in production uses web.py and couchdb. I found the python-couchdb library to be unstable and using couchdb a little more trouble than it's worth for this project, so I'm porting it to sqlalchemy. Due to difficulties with web.py's class reloader, and in attempt to build a richer interface faster, I'm also switching to pylons. Since the next version may take a while to develop, I stripped out the current sandbox implementation I showed off at google IO and made it available as a static page which you can [[http://nickretallack.com/elementalchess|play with right now]]. For this next iteration, I'm focusing on some rather ambitious user account creation behaviors so that users don't have to log in to play, and can merge their gameplay histories later. Gameplay will still be implemented with polling, but I will look into long polling for the next iteration. I'm also keeping my eye on the possibility of porting it to AppEngine with Google Web Toolkit when AppEngine's Java support is more mature. I'd also like to make use of the long-polling as XMPP abstraction they plan to release. === Pending Enhancements Play-testing this game in person has brought up a few simple enhancements I plan to add. * Checkmate detection - Players always stop before allowing their wizard to be taken. If they did this in the * Indicate the last piece that was moved - If the other player looks away for a moment, they might have to ask what piece you moved I also plan to add some things to the online interface: * Audible "Ding" when it's your turn * Record of completed games * AI to play against * Notifications by instant messenger that it's your turn * Play the game in your instant messenger * Integration with OpenSocial * A Flashy Flex client === Offshoot Ideas When this game is more successful, it will make a good proof of concept for plain-html/js networked board games. I could build on it to support similar board games. ==== Puppet Box A very simple tool for play-testing new board game ideas could by made my building on what I've learned from this project. I could allow players to upload small images and move them around on a gridded backdrop in real time, similar to current implementations of [[http://www.golivewire.com/magnets/|fridge magnets]]. Players could create their own rooms to play their games in, and restrict who can interact with the game pieces to control the chaos. This sort of system could be useful for pen-and-paper RPGs as well.