Password:
Remember me:

 


Friday, April 29th, 2011
4:00 PM
First, a note - I haven't posted a blog entry in a long while. This particular entry I started writing October 26th =p, It took a while to write and almost posted early November. Then I went and proposed to my now fiance :D, got distracted by a bunch of other things and haven't come back since =P

Until today! I finally decided to finish this post and return to documenting my now rekindled interest in various projects. So now to the fun stuff, Magic Game variants!

I was reading through a Daily MTG article the other day (lol, the *other day*) on a new variant of Planechase/Archenemy, themselves variants on the game "Magic the Gathering", when I got to thinking of all the fun variants I had come across in my experience with the game. My earliest memories of trying something beyond 1v1 were very early on, we had these 2 double-sided inserts, which I still have today, that showed 4 other ways to play Magic the Gathering.



They specified the various changes to the base game rules, and made for very entertaining matches. Our playgroup would often mix up these rules changes and make our own versions (FFA assassin, where each player had a secret target for example).
The main things that change with any variant are:

Some of these insert variants are still popular today, however, the rules have gotten a little more detailed then those listed on these cards. I started this post as a list of variants I had played, but I have also added a few I think would be fun to try as well. If you play the game, I recommend any of these if you are ever looking to switch things up a little. Here is a general rules synopsis for each:

Magic the Gathering Variants

Quick Links


2v2

Players: 4
(or some multiple of 2)
Starting Life per team:
20
Shared Turns:
no
Shared Mana:
no
Shared Blockers:
no

Starting things off with as basic as you can get, and building block for the other variants, rather than a simple one deck vs. another, in 2v2 you have an ally against two opponents. There are a few ways to play 2v2. You can take turns at the same time, take turns one ally after another, or take alternating turns with opponents. You can share a life total and blockers (see Two Headed Giant below), or each have independent life totals, etc. etc.
There are lots of ways to play two player, the most common is just alternate turns with opponents, everyone does there own thing, but a very fun one I have seen however is...

Two Headed Giant


Players: 4 (or some multiple of 2)
Starting Life per team: 30
Shared Turns: yes
Shared Mana: no
Shared Blockers: yes

This seems to be one of the most popular ways to play 2v2, having even DCI sanctioned tournaments in this format at set release events. Two Headed Giant, aka 2HG, has the allied players sitting next to each other facing off against their two opponents. The premise being that you are two heads of the same body, but with independent actions you can take.

The players take their turns at the same time and share a life total of 30. They can block for each other but any effects that target players individually still must target one of the players (one of the heads of this giant). If one of the "heads" loses, either due to milling or poison or some other alternate win condition, their team loses.

Mana pools, libraries, and hands are still independent, and some people even limit the amount of communication, other then basic game play, that is allowed between the two allies (the no table talk rule).

Since you only target one life total, these games tend to move things along a little faster then a traditional 2v2 or other type of multiplayer match.


Free For All


Players: > 2
Starting Life per player:
20
Spell Range:
no
Attack Limitations:
no


A free for all, FFA, match is about as chaotic as they come (except a free for all with EDH+Planechase =p). The rules are simple, each player is a single player just like any 1v1, except they don't win unless they are the last one standing. You take turns in a big circle and you can target/attack anyone. These games tend to take a long time as the general winning strategy is to try and hang back with out becoming the biggest threat on the board until the end-game showdown. These can be very fun however as it lets you play big slow cards that wouldn't usually see play in a competitive format.


Melee


Players: > 2
Starting Life per
player: 20
Spell Range:
1-2
Attack Limitations:
Left 1 or Right 1
Win Condition: Have the most kill/damage points

I use the name melee simply because that is what I learned on the wizards insert, but this is really just a FFA game with some added rules. The general rules added are a limited spell range around the circle of players, as well as sometimes dictating which direction around the circle you are allowed to attack. Melee also uses a point system for each kill (alternately for amount of damage dealt) as being the last one standing shouldn't mean squat if you didn't kill any of the rest of the players.


Pentagram


Players: 5
Starting Life per
player: 20
Attack Limitations:
none
Win Condition: Have no "enemies" left before anyone else

Pentagram takes what would otherwise be a 5 player free for all and provides some actual objective. Like other variants, like Assassin M:tg where you need to kill a specific player, Pentagram has you sit each player in a position on the color wheel. Your win condition involves killing the two players not next to you on the wheel. So if you are sitting in the red spot, killing white and blue spots = victory.

Green and black, while they are not your enemies, also want to win. so while they won't directly attack you from the get go, if you are about to win before them, they might turn on you. Pentagram provides interesting politics. Some people play with the ability to win even if you have been knocked out of the game, if your enemies are later killed - but I prefer to avoid "no win" scenarios for players who are still alive.


Emperor

Players: 6
Starting Life per Emperor
: 30
Starting Life per General: 15
Attack Range:
1
Spell Range: 2
Win Condition: Defeat the other teams Emperor

Emperor is a Format usually played 3 vs 3, however you could technically do 5 vs 5, or 7 vs 7, but lets stick with 3v3. Emperor requires teams with an Odd number of players. Each side has 1 Emperor, the over all objective is to kill the opposing teams emperor. Emperor, like melee works in some limited spell range and some neighboring territory defined creature attacking/movement for the circle of players to traverse.

Each team of 3 has an Emperor and two generals, the generals sit on either side of the Emperor as they all sit across from the opposing team. The turn order works in a circle starting usually from one of the Emperors, but sometimes one of the generals. Players all have spell range of 2, so neither of the emperors can touch each other at the start. Creatures may only attack players who neighbor their "territory". In the case of the emperor who has no neighboring enemies at the start of the game, they can "march" their creatures into neighboring friendly territory (in larger then 3v3 games, the creatures may only march a maximum of 2 territories). Marching creatures works like an attack, it taps the creature and can not be done while summoning sickness is in effect. Creatures that have been marched are still under the control of their original controller, they attack on their controllers turn, but may block for the player whose territory they are in.

Spell range is important to remember as the Emperors won't be able to touch each other until a general dies. Remember that even spells that effect everything are limited by this range.


Respawn Magic


Players: > 2
Win Condition: Fun or Most kills/pts/dmg

Respawn Magic is more of a fun thing you can ad on to another multiplayer format. The key to this variant is you can join/rejoin a game at any time. When you do, take all your mulligans and then your 1st three turns. During these 3 turns you are in a bubble, no effecting others and no others can not effect you. After you resolve these 3 bubble turns, turn order resumes, when your 4th turn begins from this you are now officially in the game.

You can play for fun, with a set number of respawns, for a certain amount of damage, or for points.
each kill = 1 pt
each death = -1 pt
dropout = -1 pt for you, and last person to damage you +1 pt.

You can play till a point amount or until the end of the night. Either way, this can easily be combined with any other multiplayer format, regardless of what rules you decide to run with it.


Pauper


Pauper is a fun variant where your deck is limited to only using commons. This brings a refreshing change to the type of deckbuilding you'd normally do, and let's you use cards you normally wouldn't. There are no special rules beyond deckbuilding, and like Respawn, this variant is easily combined with other formats.


Elder Dragon Highlander


Players: 2+
Starting Life:
40
Win Condition:
Defeat all opponents by dealing 40 damage or 21+ general damage

Elder dragon highlander, or EDH for short, is a combination of Elder Dragon, and Highlander where each player has 40 life.

In Elder Dragon, you select a legendary creature to be your general. You build your deck around this general and may only use cards which have no mana symbols on them that aren't colors of your general. So if you have a Red/Blue/Black general, no using cards that have any green or white mana symbols on them in your deck. The name Elder Dragon comes from the fact that the first big fatty legends to use for generals that had a large number of colors were the Elder Dragon legends: Nicol Bolas, Chromium, Vaevictis Asmadi, Palladia-Mors, and Arcades Sabboth. All of whom had their own allied color wedge in the color pie, now-a-days known for the colors of the various Shards from Shards of Alara. This General doesn't live in your deck when you play though, rather, it sits in the Command Zone. You can play the general from the command zone any time you could normally play a creature. If at anytime the general would be exiled or put into the graveyard from play, you may choose to instead return it to the command zone. Each time you summon your general from the command zone, it costs and additional 2 colorless mana to cast for each time it has been summoned from the command zone.
One last rule for the generals is that at any time during the game, if the general has dealt 21 or more damage to an opponent, that opponent loses the game. This is a per general damage count.

Highlander, also called Singleton, follows the motto "There can only be one!", meaning that you construct a deck with only a max of 1 of each card besides basic lands. Another twist is that the minimum deck size is 100 rather then 60.

The result of combining these two variants in EDH is a very thematic game built around your pick of legendary creature. The higher life total makes the games take a little longer, but is good as that really lets you get your deck going. This variant is really nice if you have a legendary you really like to play, but it isn't allowed in standard or don't have the "4-of" to make it viable for standard play.

EDH combined well with other formats since it is mainly a variant on deck construction.


Vanguard


The first multiplayer variant involving additional cards beyond player decks, Vanguard lets you chose a character from the MTG story to be your champion. You play with your vanguard character in front of you, and gain all the abilities and benefits of that character. Each character will do 3 things.

+/- Starting/Max hand size: The number in the lower left will specify what kind of hand size offset you get for playing this character, this +/- modifies from the normal base of a 7 card hand.

+/- Starting Life: The number in the lower right will specify how much extra or how much less life you start the game with.

Ability: The abilities are front and center on the character cards and provide a wide variety of effects, from static abilities like Maraxus' "+1/+0 to all your creatures" to activated abilities such as Barrin's "Sacrifice a permanent to return any creature to it's owner's hand". The Vanguard cards were printed in 2 original print runs, but have since had more added for play on MTGO. The characters definitely vary wildly in their strength so it is usually a good idea to either build a deck around your character or if playing with random deck's, have all players pick similarly strong characters.

Planechase


Planechase brings back the concept of a variant involving oversized cards to be used in combination with a normal game of MTG, 10 years after the first attempt at the concept with Vanguard.

In Planechase, the duel between planeswalkers that your average game of Magic symbolizes takes on the actual movement of the 'walkers between planes. As you, the planeswalker battles it out, you can spend some of your mana to try and 'walk to another plane, or harness some special ability of your current plane.

Planar Map Planechase


Like default Planechase, you use the planar cards for this variant, however this adds a little bit of choice to the randomness of default planechase. With Planar Map, you have one plane you are currently on, and then in each cardinal direction you have the neighboring planes (use a marker to indicate the current plane you are on). Each time you roll a plansewalk, you may choose which direction you would like to 'walk. You can only go one of the four cardinal directions, except in the special case of a "Hell-ride". If there is a diagonal path you can take to an unrevealed plane, you may take it. Hell-riding prevents your opponents from simply hopping back to a plane you wanted to leave in one move.

When you get to a new plane, place down additional planar cards for each of the cardinal directions from your current plane that are empty. If at any time you are more then 3 hops away from any plane, that plane is shuffled back in to the planar deck (as shown in the picture above, the x's are shuffled back in)

This variant is fun as it adds a bit of skill to the randomness of planechase, and let's you avoid annoying or hazardous planes. It also adds a nice flavor element to navigating your way around the MTG multiverse through the blind eternities of the ever shifting planes.


Archenemy


Archenemy is an All vs. One format. The idea being that a band of goodguys is going up against an evil mastermind. You'd think this would be a huge challenge for the mastermind, however way they balance out multiple decks (3-6 often) against one is with "Scheme" cards.


Planar Invaders


From the Daily MTG article linked at the top, I've tried this variant once and had a blast. The concept is the Invaders are coming in to take over the home plane of the defenders. Thus, the variant involves two teams, Invaders and Defenders. Teammates take their turns at the same time like 2HG, but they are still individuals and cannot block for each other or share life totals.

Defenders choose one planar card to be their home plane for the game. Once per turn at sorcery speed, any one player on the defenders team may pay 4 colorless mana to trigger the plane's chaos effect.

Invaders have a 10 card scheme deck of their choosing as long as each scheme is unique.
Once per turn at sorcery speed, any one player on the invaders team may pay 4 colorless mana to set a random scheme in to motion from the Scheme deck.

And that is pretty much the jist of it. There are some banned planes/schemes in this variant as there are some planes/schemes that would totally break the game were they all you had to use in a normal planechase/archenemy game.

Banned Planes
Eloren Wilds
Pools of Becoming
Otaria
Agyrem
Naar Isle
Lethe Lake

Banned Schemes
All in Good Time
Choose Your Champion
I Bask in Your Silent Awe
Plots That Span Centuries

This variant makes for a great flavorful game, especially if you try and build/use decks themed for their home plane (defenders) or tied to an invading force (invaders). One great variant on this you can try is having your invading force be made up of Phyrexians, and as an optional rule, convert any defending player to the invaders side if a player is killed by poison (ie. remove all  their poison counters and switch them to the phyrexian team)!

This is a fun variant and like most listed here, works well with EDH and other variants.


Alrighty!

That was a really long post, both in content and the time it took me to get it posted! Time to get back to the regularly scheduled posts for things like Arduino/coding/random projects!





Thursday, October 21st, 2010
4:00 PM
Lunch time at work for me and some co-workers includes casual games of Magic The Gathering. We will play anything from random constructed, multiplayer games, planechase/variants, to draft tournaments. With each new set that comes out we usually do a Draft. We each play each others draft deck in a Round Robin fashion, keeping track of our records to order ourselves by at the end. Then at the end we put all the rares from the draft on to a table and pick from them one at a time in order of our performance. This is a great way to discourage people from picking just all the rare/expensive cards while drafting, and simply draft for the best deck they can.


Zendikar draft records from 2009 while in progress, notice the hidden columns C,E,G,etc..
Those columns are all 1 or 0 if the column to their left is 2 or not, respectively. This allowed for an easy Victories sum.


When we first started, we would record our game wins/losses on an excel spreadsheet shared over the network, however this was clumsy in that it had to be created each time depending on who was playing that draft, and the file would lock out others from updating if it was opened by someone. That is why I created a simple PHP page that connects to a database and does all the recording work for you. The database is structured as follows:

The live calculations were the fun part. In the excel spreadsheet, the Wins/Losses/Victories columns were just hard coded sums and equations of the data on the sheet (ex. "=C2+E2+G2+I2+K2+M2+O2+Q2"). I now had all this information in a database without a real sense of rows and columns, so I first would have to go and build up my 2D array $masterValueArray. I could do this as I enumerated through each of the rows and columns to display the records. So keeping track of the information of each cell as I went down a row, I could calculate the same information for wins/losses at the end. I also was able to add a few extras besides wins/losses such as Win % and a "Standings chart".

$cellValue would later be echo'd in the current cell position. In the end it looks a little something like this:


click for larger image, or just check out the link to the site below

Another issue I wanted to tackle was the creation of new brackets easily. I had the database in place, all I needed now was a way to take the information from the user and create a new bracket with it. For the input of player names, rather then have you specify a number of players, then generate that many input boxes, I simply ask for the list of players separated by commas.


I then simply split the string on the delimeter "," using the php explode function:


This leaves me with an array of player names to insert to the database as well as a bracket name to insert. I then take all the players and the bracket and tie them together in the Competitors database table, and my bracket is good to go :).

Last but not least, something I am rather happy with is the way that the record fields are presented for updating. Rather then have you click a cell, load a page with an input form for the value of that cell and then submit, I decided to have the whole bracket editable at once and have each display field turn in to an input field for itself.



The input fields are small enough to not mess with the table structure and with a fast enough browser the change from viewing static fields to viewing the input fields is seemless. This also works great for mobile browsing as the information is all there every time you want to update.

I am very happy how it turned out, and we all use it for every draft now. If you are at all curious for more info on how it works, check out the bracket page in action @ http://qqnoobs.com/bracket or download the source code below:





Monday, October 18th, 2010
10:00 AM
My Mom loves to take pictures, always has always will. Ever since she has been using digital cameras, she has been taking those pictures and emailing them to her friends. The problem for her is that these images would be too large, and too high of a resolution to fit in emails. She would often call and tell me she needs to "down size" the images so they would not be so big. We taught her to use photoshop to resize images but, the amount of hoops to jump through to get from A to B were a little much.

That is why I set out to create a simple executable that would take a set of images, and resize them, and thus DownSizer was born.



I wanted to create something that would take care of simple batch resizing of images but also have some other options that would be easy to access, so I decided to go with three separate modes. All three modes would start at the same file selection screen:



From there each option has it's own run-mode:


The main way this program works is through manipulating C# file types Graphics, Image and Bitmap. By parsing in parameters like percentage to resize to, I can create a new blank Bitmap, of the specified size. I then pass it to a new Graphics element as an Image. I can then draw to that blank Bitmap canvas from the original image i want to resize, but I can specify the size to scale it too. The exact details vary for resize by percent or by exact dimensions, but they are pretty much the same:



So in essence all this program is doing is taking in certain parameters and redrawing the image with said parameters. The trick is presenting them in a user friendly manner. The UI for manual could definitely still use some improvements, and the program tends to crash on occasion when doing Automated or Manual mode (something with input handling I suspect), but beyond that it works perfectly. I recognize those bugs are quite huge but the main mode used by the target audience (my Mom) is "Simple", so the bug fixes have not been worked out yet.

If you would like to check out the source for yourself in more detail, or download the installer, check out the links below.






Thursday, October 14th, 2010
11:00 AM
PHP, although still widely used, is considered by some to be a little outdated when compared to other languages in the Web Development world. I remember starting with PHP and sites and blogs I pulled example code from treated it like the hot new thing. The days of CGI and perl scripts were described as old news and PHP was the wave of the future (much like Ruby on Rails, Ajax, Flash, html5, and silverlight have done since then). But this isn't a post to rant about the fickle environment of web development but rather, I'd like to describe the top 5 reasons I've stuck with PHP and why it is one of my favorite languages to date.

  1. Variable Variables
    In PHP, variables are denoted by a $ in front of the variable name.

    Now since we have these two parts that make up a variable we can do something special. If we take two $ and then a variable the expression will resolve quite differently.

    Where it really comes in handy is when you are doing form validation. If I have a form that has an input for name and email, and I send them back to my page via $_POST, I can simply grab them back into their field names as variables. Which brings me to my next point..

  2. Ease of User Interface
    When learning computer science in school, you often will write one-off programs that may do something cool, but they are usually run in the compiler or command line. PHP gave me an outlet to actually create deliverables and turn my love for computer science into something practical I could apply to real world jobs. HTML forms are the corner stone of interactivity with a website. It turns static data on a screen into something that the user can interact with. PHP deals with forms very easily, take for example this code that lets say is on a file page.php. It will do some basic form validation:

    The page will output a simple input field that will give a message if the submitted text does not equal "test", and it will persist the input provided in the text box. Very useful for input error handling on registration forms for example.

    Check out the sample code in action @ http://swedutch.net/page.php

  3. Ease of Database Interaction
    Taking it one step further, to make a website even more interactive you will probably need some sort of database. PHP has very easy to use API's for interacting with many different kinds of databases (MySql, Postgres, etc..). The main type of database I use is MySql, and the methods of running queries could not be easier:

    I could list more examples but the simplicity remains the same. Interacting with databases with PHP is easy and tieing this in with forms, creating complex websites from simple parts becomes very easy.

  4. Type-less Variables
    Well not exactly typeless, PHP does have variable types, but they are hidden and implicitly converted on the fly. So it would be more accurate to call it loosely typed. Regardless, the fact that you don't need to worry about declaring and initializing your variables makes coding PHP a breeze, with little forethought required. This can however lead to sloppy coding practices, but not having to create a bunch of frivolous variables to hold many different values at some point along a function, and rather just use one throwaway temp var is something I really enjoy. Being able to assign a variable a string one second, an int the next, and then make it an array with array index "somestring" is great for someone whole does less planning and more coding like myself :)

  5. Overall low complexity
    The biggest general reason I have stuck with PHP over the years is it's simplicity in all things. If there is something I don't know how to do with PHP, I can often simple search "thing-i-want-to-do php" and get the solution, usually through PHP.net and its online API documentation.
There are definately other languages out there that provide a lot of great functionality and fill a variety of roles. For example, if I ever want to do anything on a page that is already loaded, I can't use PHP, as it uses only does server side (pre-loaded) computing. Javascript/AJAX would be my go to choice there, or maybe even some sort of Flash applet. However, the point stands that PHP is an incredible language with a wide range of uses, and that is why I love PHP.

EDIT: When I was working a web development job for work-study @ BU, I actually had to train some other people how to do some web work. To that end I created a brief tutorial on the basics html forms and php/mysql usage (I may touch up and make this its own post eventually).
http://swedutch.net/tutorial.php



Tuesday, October 12th, 2010
11:00 AM
So moving forward with "Magic the Programing" (previous posts on the subject here, and here), the first step has to be how to hold on to all the data. I want to have all the card images, up to date card text, and have every piece of the card be queryable. So the first step is separating a card out in to all of its pieces. To do that, I had to look at a card and see what useful information can be captured. For that I head over to the Magic the Gathering "Gatherer", the online card database.


So with all that information, the question is how to store it in an efficient way that enables it to be easily queried on any of it's attributes. The first thing I decided was that the most unique way to identify any given card would be:

CardName + SetName + Card# / CardArt

I say Card # / CardArt as earlier sets did not have Card#. So the reason this unique identifier is important is for a card like the following example:
Consider the card Shivan Dragon. I can store all of it's card information and just have all of it's different instances across sets simply point to it, rather then store it's identical info for each set it has been reprinted in. This unique identifier is similar to the gatherer's "multiverseid", which they use to enumerate each card.

So with my uniquely identifiable pieces set out, all I needed now was to build a database structure up in a way that would let me avoid redundancy and allow for easy queries. I decided to split the common fields into their own tables and tie them back to my main card information tables through relational tables. Example:


TypeOfCard is the relational table between Type and Card.

Following that method, I separated the rest of the fields in to what I thought should be in it's own table tied in through a relational table. I ended up with the base table Card, and 5 attribute tables: Type, BaseType, CardArt, Set. I tied these all in to the base table with relational tables TypeOfCard, BaseTypeOfCard, and CardInSet. CardInSet ended up being something that I could almost consider the base table and Card simply provides the info into it as Card in Set combines the unique keys for Card Information, Set Name, and CardArt/CardNumber. So rather then try to describe any more with words, here is the Database relationship view:


Click for larger image

I added an additional table "CardFxn" which has yet to serve any purpose, but I thought it might be a good place to store what base functions or what lower order methods I would need to call if I ever want to have this card run in some sort of game engine. It is simply a placeholder for now. Also Card has two fields dealing with Split Cards, I will touch on that in a future post. Another interesting note is that the images are not stored in this database, rather the ImagePath. This allows the database file to be relatively small allowing for a fast load time when a program needs to load up the database. The images can simply be stored in a subdirectory structure relative to the database file.

So there you have it, all the information can now be stored and queried. If I want all elves with BaseType "legendary" I simply select from BaseType legendary and Type Elf, and join on Card and CardInSet across the relational tables. I output the Full Typeline from the Card table so I don't need to go back and search the Type and BaseType tables a second time to find any additional Types/BaseTypes they might have. (that was my most recent addition to cut down query time).

More on Queries later, first I need to get the data, and for that I need a WebScraper. Next "Magic The Programming" post I will go over the basics of scraping info from the web and storing it.


 
 
Select a Page:
< 1, 2, 3 >