In many ways Forge was a happy accident. I was bored and looking for something “interesting” to code. People can go there whole lives without programming something “interesting” and most code is as interesting as a phone book.
Magic: The Gathering had a number of hard problems, such as how to code many different types of cards. Obviously the more card text meant that the card would be tougher to program. Some of the thorny problems were, “How to encode a Magic card into Java?” and “How you do allow a card to override almost any rule?”
Forge uses two mechanisms for the card code. Readable “scripting” and Java code, which is much longer but infinitely flexible. The scripting is very useful that it probably accounts for 90% of all of the cards in Forge. The scripting has also become more complicated, which is a good thing, because it can be used to add more cards.
Forge allowed me to witness the trials of a “real program”. Once a program is over 10,000 lines of code, then you start to see all of these tiny problems that you may or may not be able to fix. A “real program” is like a concrete building which is set in stone. Although buildings can be moved and overhauled, they take an enormous amount of effort. (When I began writing Forge I purposefully ignored “protection” because it was too complicated. I was amazed when Dennis changed hundreds of lines of code just to get protection working.)
The graphic user interface (gui) is also a hard problem, with no clear solution. There is a ton of information that the player would like to have at his fingertips and the screen quickly become full. I took my stab at Forge’s gui design and it was functional but sparse. More and more gui details have been added, such as attacking and defending icons, which makes the game easier to play.
The gui continues to evolve. Here is a beautiful screenshot to wet your whistle. (Please note that this gui is not currently available and is a work-in-progress.)
Devoted Magic Player,