Monday, December 22, 2008

Attack!!!

In Magic, knowing when to attack is a fundamental question. Naturally you attack when it helps you win. In limited games in particular, there are times when you and your opponent just go back and forth attacking each other, this is known as racing. You should race if you will win, which unfortunately requires a little math, but not much.

Your Turn 15 life, 2/2 creature – Opponent 7 life, 3/3 creature – Should you race?
The easiest way to figure out to race is to first calculate how many turns it will take for you to kill your opponent. Now compute how many turns it takes your opponent to kill you. Obviously if you can kill your opponent first, attack. In this example, you will win in 4 turns, and you opponent will win in 5 turns, so you should attack.

Your Turn 2 life, 3/3 creature – Opponent 5 life, 1/1 creature – Should you race?

Yes

Your Turn 5 life, 2/2 creature – Opponent 11 life, 1/1 creature – Should you race?

No

Your Turn 17 life, 3/3 creature – Opponent 15 life, 2/2 creature – Should you race?

Yes

Your Turn 19 life, flying 1/1 creature – Opponent 9 life, 2/2 creature – Should you race?

Yes

Your Turn 8 life, flying 2/2 creature – Opponent 7 life, 3/3 creature – Should you race?

No

Obviously you don’t know what cards your opponent will draw, but you can race to reduce his chances of winning. Racing increases your chances of winning because it puts pressure on your opponent. If you are loosing the race, you will want to trade creatures in combat, both of them will die, in hopes that you can draw a solution. In most games you will be both the aggressor, who wants to race, and the defender. Aggro decks are built upon the concept of racing, and hope to attack on every turn.

p.s.
MTG Forge probably works best as a limited simulator and limited decks tend to attack alot compared to some types constructed decks. Limited control decks do exist, but usually they win by brutally attacking.

9 comments:

Dennis Bergkamp said...

Ahh, Doran the Siege Tower. Awesome card! I actually got this card working in V1 (by adding a bunch of code all over the place). Loads of fun :)

Forge said...

Well you should post your code, even if that includes all of the source. I should be able to run some sort of compare utility to figure out what you changed. Usually the only thing that changes between MTG Forge's releases is CardFactory.

Forge said...

You can post the code to mediafire.com or some other website, or just e-mail me (mtgrares yahoo com)

Dennis Bergkamp said...

Actually, for Doran I had to make changes in Combat.java and CombatUtil.java, and maybe some other files? I don't remember...
I do remember it being slightly messy though.

Anyway, I'll gladly submit the code, I'll send you an email :)

MageKing17 said...

The great thing about Incantus is that (with our current architecture) whenever we see a wacky ability that we haven't done before (for instance, Gravebane Zombie), as long as the core elements (replacement effects and card movement) are in the source code, the card can be coded (replacing Gravebane Zombie's move_to with a move_to("library") whenever it's in play and moving to the graveyard, in this instance).

Sometimes, even when the source code doesn't have all the right pieces, the card can still be coded, because we know what it will look like when we do fix the source code (and, with source code access, the source code can be changed as soon as the fact that it needs to be changed is known, so that's handy ;)).

Anonymous said...

If you add the sourcecode to a version control system, you can do a diff between versions. The tools in windows and various IDEs are very good now, simply marking files and highlighting changes within the files.

MageKing17 said...

Indeed, Incantus uses an SVN repository, so I'm able to give Incantus an exact diff file telling him what changes I've made.

Forge said...

I've thought a little about Doran, I think I can cheat and just change the Card object get/set attack and defense methods (which probably should be called power and toughness).

Card.getAttack() would check to see if Doran is in play and would either return the card's original attack or the card's defense. I can do this in MTG Forge since all of Magic's zones are global variables.

MageKing17 said...

You've got to be careful with that. You don't want cards that calculate card's power to report wildly inaccurate values just because Doran is in play (In Incantus, we have/had (I don't know if it's still in the latest version) a special function called to determine how much combat damage a creature could assign. Doran simply overrode this so that instead of retrieving the creature's power, it retrieved their toughness).