I started Forge, which is an open-source, free project that lets you play Magic: The Gathering against the computer. Currently other people are updating Forge and there will be no more posts to this blog.

Wednesday, September 23, 2009

Software Evolution

When I started programming MTG Forge I didn't program planeswalkers, vigilance, or exalted. I started out with plain, vanilla creatures and then added flying and haste later. MTG Forge "evolved" one step at a time. I didn't know how everything was going to fit together but I wrote good code and didn't worry about the future.

My first big challenged was Glorious Anthem, a staple of white weenie decks. I had no idea how I was going to program it. Anthem is a great card and I wanted my version of Magic to have it. MTG Forge already implemented a simple "check state effects" that moved creatures to the graveyard and I experimented by creating Anthem in that code. It may not be the best way to code it but it worked and I was very happy.

MTG Forge didn't start out supporting flashback but since MTG Forge has a flexible architecture, flashback wasn't too hard to add. MTG Forge easily allows spells and abilities to be played in any zone. Cycling is another ability that works only when the card is in your hand. (Each spell or ability has a canPlay() method which returns true if the spell or ability can be played in the particular zone that it is in.)

Giant Growth and end of turn effects is another good example where I had to experiment a little bit to see what things worked and what didn't. (Giant Growth uses the Command Pattern and executes "at the end of turn" to return the creature to normal.)

The goal of any good computer program is to start with a good architecture (foundation) and then build on it. I think that programming is similar building a house of cards, you have to be extremely careful or everything will fall down and crash the computer. MTG Forge does have its share of bugs and crashes but hopefully they aren't too annoying.

Hey,First to say, you're (still) doing a great job. I got a question though:

I downloaded your newest version (full) and unpacked it. When I doubleclick run-forge, it doesn't start like it did in earlier versions ('till now it always worked on my pc). The error says: "Could not find the main class. Program will exit."

I left a comment in "new version" recently, but i thought it would be appropriate to add something here also.

when i started looking at making Magic in vb.net, i looked at all my vanilla cards and wrote down the basics of each card;name:cost:P:T

then i looked at keyword static abilities (independant of any set) like haste, flying, first strike, etc.

then i moved on to creatures with other abilities, trying to translate each ability into a set of logic steps to make it easy to add cards (like your cards.txt format....)

eg.shambling remains:1BR:4:3:[:2:]:NoBlock [my keyword]:Unearth(BR)and maybe another value to indicate how many abilities (in this case, 2)

or;Rhox Bodyguard:3GW:2:3:[:2:]:Exalted :when(enter,me.life(+3))

the last bit is what i am experimenting with to make it easy for ANYONE to add ANY card.

Also, i have had a bit of trouble understanding how your cards.txt file fits in with working out the cards, would you be able to provide a plain text version of retrieving the data for a card in cards.txt??

Interesting blog, i usally be aware all about all different kind of sofware. i am online all the time, and this action allow me to see a site costa rica homes for sale and i like it too much. beyond all doubt without my computer i never would have seen this site too.