Version History
While I developed Shih in 1997 and built a physical prototype within two weeks, I did not have a fully working computer version until 1998, and that one relied upon a Filemaker Pro back end. The result was a game that required users to change every aspect of the game manually (removing captured pieces, rotating spaces in only one direction, etc.), but it allowed for play across the internet with the assistance of an IM program and the reload function of a browser. Some time later I accidentally deleted the folder that had that code.

A few years ago, I went back and rewrote the Filemaker Pro version, probably almost identically to the first one, but again it was all manual. Two weeks later, I had a hotseat version coded in Javascript (no Filemaker Pro) that knew how to calculate captures, change turns, and do, well, everything this widget does. Almost.

Having not taken the project seriously enough, I had used arcane variable names and had left no comments, so when I discovered a bug in the way Power Spin captures were calculated, I was at a loss. As it worked out, the bug was quite easy to fix, but the mass of redundant variables I had created made it almost impossible to sort out. Then along came Dashboard widgets, and I fixed the bug while adding features. Here is how the project developed.


Version 0.8a (10 February 2006)

For shits 'n' grins I threw together a couple of placeholder files so I could load the buggy old code up as a widget and was surprised that it worked. A couple weeks later I had an alpha version of the Shih widget on my hands. Now, 0.8 is a high version number for an alpha, but since I was working from mostly functional text, I felt it was OK.

The new version had an expanded (and far more useful) board space data structure than the original code, none of the buggy behavior of its predecessor, and almost none of Apple's UI standards in place. That last part ensured alpha status.


0.9b (12 February 2006)

With an insane turnaround, I managed to get the Apple UI conventions in place and smooth out the graphics a little, though they were still very 2D. The back side contained the instructions, which is to say there even was a back side, and it was looking like a real widget. This earned an upgrade to beta.

1.0 (13 February 2006)

Just a day after finishing the beta version I put out the first final release. I had discovered, much to my pleasure, the SphereMaker rendering capabilities of The Gimp, so I finally had good looking pieces. Better still, I got some critical feedback from Sam downstairs regarding the look of the board spaces. Taking that, I developed lighter board space and added texture, enhancing the third dimension illusion. A "New Game" button, though not as elegant as I had hoped, made its first apppearance, and the player information finally started to look good.

1.1 (16 February 2006)

I was still working at a nearly manic pace by the time I finished the enhanced graphics for 1.1. By remembering a few idiotically simple properties of triangles, I was able to Gimp up much better board spaces (and I employed a slightly better texture). Three minor bug fixes dealing with recent additions made their way into this version. Also, one enhancement (the ability to cancel Spin and Power Spin moves) made it's first appearance.

1.2 (19 February 2006)

I reduced the size of the CSS file by almost 25%, dropped one unused function from the Javascript file, and rearranged some of the lines of code within the change_state() function to avoid certain errors that, while not posing a serious play problem, could disrupt a player's train of thought. A new option on the back allowed the user to have all of the spaces that are unoccupied at the start of a game put into random positions when the "New Game" button was pressed.

1.3 (24 February 2006)

Final enhancements to the Javascript and CSS files made them once more smaller and much easier to read. I limited Power Spins to their intended scope, removing the ability to apply them to spaces the player may legally rotate with an ordinary Spin move. Some people may find that this eliminates the possibility to temporize, but I do not expect that to be a problem. Furthermore, it removes the chance that a player accidentally burns a Power Spin when intending to use a Spin. Finally, I increased the level of detail on the back side information, opting to use a scrolling overflow so I could put everything I wanted back there.

Future
I am looking into setting it up for 3 players, from which I should be able to derive 4-player (2-on-2) and 6-player (both 3-on-3 and 2-on-2-on-2) variants.

I am also interested in allowing users to carry over the position of spaces that do not begin with pieces on them from the end of one game to the beginning of the next.