Page 1 of 1

HOW-TO: Customize your Sealed Deck games with fantasy blocks

PostPosted: 20 Sep 2012, 09:15
by RumbleBBU
UPDATE: Note that the file format has been simplified since this guide was written. See the last post for the current format.


During the past month or so, the Forge sealed deck mode has undergone significant changes. You can find these in the most recent snapshots, and they will be in the next beta as well. Instead of a single sealed deck match, you can now choose a 1-5 round gauntlet-style tournament where you will face increasingly difficult (probably) opponent decks. You can also choose to use starter packs instead of boosters in the block mode, choose to use 3-12 boosters instead of the default 6 in the full cardpool and custom (cube) modes, and so on.

Perhaps the most notable changes to the sealed deck mode are related to "fantasy blocks" and the greatly increased flexibility you have when you are building your own blocks. I will explain this in more detail here. Note that this applies to most recent snapshots! The latest beta may lack some of the functionality described below.



How to customize your Forge Sealed Deck game with fantasy blocks

If you are playing a recent version of Forge, you will notice that there is a new option under the Sealed Deck Format selection box: Fantasy Block. You can define your own dream block for sealed deck games here by choosing the exact sets you want to include in the game - and even easily spice up your sealed deck experience with special booster packs that generate cards based on several different sets, the full cardpool or your customized cube.

To do this, you need to modify your "fantasyblocks.txt" file with your text editor of choice. You will find the file in the res/blockdata folder. Notice that there is also a "blocks.txt" file in this folder - it contains the predefined official MtG blocks (better leave it alone). The "fantasyblocks.txt" file currently includes some sample blocks I have built. You can delete them all, replace them with your own blocks, or just add new blocks after them. You can have as many fantasy blocks as you like - just remember to increment the index number every time you add a new one!

When you are finished, just save the fantasyblocks.txt file and relaunch Forge. If have made errors when editing the fantasyblocks.txt file, you may get error messages in your block now and Forge may fail to launch. (If this happens, check your logfile to see what went wrong.)



What is a block file made of?

A block definition file (fantasyblocks.txt or blocks.txt) contains block definitions that are parsed when the game launches and then used internally when the game is running. One block definition per line. Let's look at a sample line:

Code: Select all
Index:0|Set0:LEA|Name:Alpha|DraftPacks:3|LandSetCode:LEA|SealedPacks:6
 
This is the first line in the official blocks.txt file. It contains several parameters and values that are separated with |'s. The format for a parameter value/pair is "Parameter:value". Here's what the parameters mean:

Index: The internal index number of the block. This needs to be unique. When you add a new block (row), just check the last number and add 1.
Set0: This is a 3-letter code for MtG set. "LEA" value means that one of the sets included in this block is Alpha. A block can contain as many as 9 different sets (given as parameters Set0:xxx|Set1:yyy| etc. until Set8:zzz). Hint: If you don't know the 3-letter code for a set you want, you can look it up in the setdata.txt file in the same directory (res/blockdata).
Name: This is the name that is displayed in the block selection dialog box.
DraftPacks: How many boosters you get when Drafting this block.
LandSetCode: Which edition basic lands are used when playing Draft/Sealed Deck games with this block. Again, if necessary, you can look up the set code in the setdata.txt file. Note that if your block contains a core set, it is usually a good idea to use that edition's code here or may get basic lands from different editions and they will not show up properly in the deck editor.
SealedPacks: How many boosters you get when playing Sealed Deck games with this block. Note that the current version of Forge supports 4-9 booster pack SD games but if you give the players (for example) only 4 booster packs and your block contains more than four sets, you will be able to choose from the first four sets only. Thus, this number should always be at least as great as the number of different sets in the block if you want to be able to use them all. But it can, of course, be higher than number of sets in a sealed deck game. In this particular example, all players get 6 booster packs but, since the only set included in the block is Alpha, all 6 will be Alpha boosters.

Let's try another fairly straightforward example, this time from fantasyblocks.txt:

Code: Select all
Index:25|Set0:2ED|Set1:ATQ|Set2:ARN|Set3:DRK|Set4:LEG|Set5:FEM|Set6:ICE|Set7:HML|Set8:ALL|Name:(9) MtG Encyclopedia|DraftPacks:3|LandSetCode:2ED|SealedPacks:9
 
Yes: this is fantasy block #25 (actually 26th block, since the first block is #0, not #1). It contains 9 different sets, basically everything from the birth of the game to Alliances. Hence, the name "MtG Encyclopedia" - theoretically, any card from the old printed book Magic the Gathering: Official Encyclopedia ("godbook") would be included here (except the promo cards). (The "(9)" in front of the name is simply a clue to give you an idea how many sets there are in the block.) Unlimited lands are used here. Draft players get only 3 different booster packs, so this block is poorly suited to Draft games (they would only get Unlimited, Arabian Nights and Antiquities boosters from this blocks). In Sealed Deck games, however, all you would get 9 different boosters if you select this block - and have the option of selecting starter packs instead of booster packs for Unlimited and/or Ice Age.

But the fun doesn't stop here...



MetaSets: What are they, why should I care, and how do I use them?

Even 9 different sets may seem limiting sometimes. Or maybe you would have booster based your special, customized fantasy card list? MetaSets are have been added to allow you do exactly that: create a special booster pack that wouldn't be possible in real life.

There are 3 types of such special MetaSet boosters packs that can be included in your blocks:

[*]MetaSet collection: A set of sets that contains the combined cardpool of several sets. You get a booster pack based on this cardpool
[*]Full cardpool: Just like the full cardpool sealed deck game format, except in a booster pack format.
[*]Cube boosters: These boosters get their card selection based on a predefined cube. You can use a sealed deck cube included in the Forge distribution (you can find them in res/sealed/) or build a new one. This is the way to build your own fantasy set and mix&match it with other sets in Sealed Deck games!

Here is a MetaSet sample from fantasyblocks.txt:

Code: Select all
Index:26|Meta1:CUBE/ArabianExtended/ARAB|Meta2:META/ISD,DKA,AVR,M13/M13-ISD|Meta3:FULL/*/*|Name:(3) Metaset Sample|DraftPacks:3|LandSetCode:2ED|SealedPacks:6
 
To define a MetaSet, you use the Meta0...Meta8 parameters, just like you would use the Set0...Set8 parameters. (Notice that, illogically, here I have accidentally started with Meta1 and not Meta0, shame on me! But the number doesn't really matter that much, it's the amount of different sets/MetaSets in a block that matters.)

The main difference lies in the values that a Meta(x) parameter can have. First we have:

Code: Select all
Meta1:CUBE/ArabianExtended/ARAB
 
A MetaSet always needs 3 values, separated with slashes. The first value is the MetaSet type, in this case, a CUBE. The first value must be CUBE, FULL, or META. Any other value will cause an error.
The other two values are data and display name (they behave differently for the different MetaSet types). For a cube, the second value must be the cube name. If Forge cannot find this cube (defined in res/sealed/), it will give you an error when you try to choose this block. The last name is simply a visual name that is displayed when you choose the set distribution for you sealed deck game. For a cube, a "*C:" prefix is always automatically appended.

Next we have:

Code: Select all
Meta2:META/ISD,DKA,AVR,M13/M13-ISD
 
This is a genuine 'meta' MetaSet - i.e., a set of sets, a block within a block. The first value is the type (META) and the last value is the display name (M13-ISD), just like in the cube example. For meta-type MetaSets, a "*B:" prefix is added in indicate that it is really a sub-block within the block.
The second value is the interesting part. It is a comma-separated list of sets that are combined to make the cardpool for this booster, in this case the whole Innistrad block and M13 core set. (Again, look up the codes in setdata.txt if you don't know them.) And here's the cool part: you can list any number of sets you like in the comma-separated list!

The final MetaSet in this sample block is:

Code: Select all
Meta3:FULL/*/*
 
This one is pretty straightforward. It simply indicates that the boosters for this 'set' are based on the full cardpool available in Forge. While values 2 and 3 must be supplied (otherwise the line won't parse correctly), they are not important for the full cardpool MetaSet type. Value 2 is not used at all, and its display name will always be "*FULL".

So, effectively, the above "Metaset Sample" block can generate boosters based on the "Arabian Extended" cube, a sub-block consisting of the Innistrad block + M13, and/or full cardpool.

Finally, note that you can mix-and-match regular sets and MetaSets in a block - just be sure to count both when you set the SealedPacks parameter. For example, if your block contains regular sets Set0, Set1, and Set2 (3 sets), and MetaSets Meta1 and Meta2, the value will need to be at least 5. (The regular 6 would work nicely, too.) Here's an example of that from a 3-round sealed deck mini tournament that I recently launched:

Code: Select all
Index:27|Set0:ALL|Set1:HML|Set2:DRK|Set3:LEG|Set4:FEM|Set5:ICE|Meta0:META/2ED,3ED,4ED/CORES|Meta1:META/ARN,ATQ,CHR/ARNATQCHR|Name:(0)BBU 00 Play|DraftPacks:3|LandSetCode:2ED|SealedPacks:8
 
I leave it as an exercise for the reader to decypher what that block does.

Re: HOW-TO: Customize your Sealed Deck games with fantasy bl

PostPosted: 05 Oct 2012, 12:27
by RumbleBBU
With the new beta (1.2.15), you have even more freedom when building custom blocks with MetaSets.

MetaSets: The Next Level

The newest versions of Forge add 5 new MetaSet types: choose1, random1, combo, booster and pack.

The last two ("booster" and "pack") are pretty unspectacular. They are there mainly to allow more options for the first three. (You can use "booster" and "combo" to define individual MetaSets if you like, but that would be sort of pointless - easier to just use regular "Set(x)" definitions instead.)

Now what you really need to know about are the first three. They are MetaSets that contain...believe it or not, more MetaSets! The type describes what you want to do with the included MetaSets:

choose1: For this booster, you can choose which of the included MetaSets you want to use. The main purpose of this MetaSet type is to enable guild booster selection in Return to Ravnica. Since an included MetaSet can also be a cube, the different guild booster cardpools could be added as cubes, and the cube MetaSets, in turn, in a choose1 MetaSet. But you can find lots of other uses for this MetaSet type - again, use your imagination! Note that the AI is currently coded to prefer similar boosters to a totally random selection of boosters. It picks the first one at random but after that it is always more likely to pick one more similar booster (if available) than a random different one.

random1: Like above except that you do not get to choose the MetaSet. Instead, you get a booster based on one randomly picked MetaSet from those included in the random1 MetaSet definition.

combo The next step for the "meta" MetaSet type. Instead of letting you form a cardpool on free selection of different editions, this lets you build a cardpool based on MetaSets. In other words, now you can mix and match cubes and official sets to form a single booster. Note that if you include a "full" type MetaSet in the combo definition, it doesn't really matter what other MetaSets you include - full cardpool will be used anyway.

There are some limitations on what kinds of MetaSets can be included in choose1, random1 and combo MetaSets. The following types are ok:
cube
full
meta
booster
pack

The 3 special 'recursive' MetaSet types (choose1, random1, combo) should not be included. They will either be ignored, cause errors or cause unpredictable game behavior. Think of the MetaSet recursion as Flashback recursion, not Buyback! :)

To illustrate how the new MetaSet types work, let's look at this sample block (included in fantasyblocks.txt):

Code: Select all
Index:27|Meta0:CHOOSE1/CUBE/ArabianExtended/ArabianExtended;FULL/*/*;META/ICE,ALL,HML,CSP/IceAgeBlockExtended;BOOSTER/2ED/Unlimited;PACK/4ED/4th Edition /CHOOSE|Meta1:RANDOM1/FULL/*/*;META/CHK,BOK,SOK/KAMI;BOOSTER/8ED/8ED/RANDOM|Meta2:COMBO/CUBE/juzamjedi/JZJEDI;META/USG,ULG,UDS/URZA;PACK/M13/M13;BOOSTER/TSB/TimeShift/COMBO|Name:(3) Metaset Sample 2|DraftPacks:3|LandSetCode:2ED|SealedPacks:6
Looks pretty daunting, doesn't it? That's because there's so much information in this single block definition...

Let's dissect that block definition. The most important thing to realize is that there are only 3 top-level MetaSets defined in this block, i.e., 3 different set choices that are offered in the set distribution configuration. They are all enclosed with |'s and start "Meta(x)...". Here is the first one:

Code: Select all
Meta0:CHOOSE1/CUBE/ArabianExtended/ArabianExtended;FULL/*/*;META/ICE,ALL,HML,CSP/IceAgeBlockExtended;BOOSTER/2ED/Unlimited;PACK/4ED/4th Edition /CHOOSE
The big important thing to keep in mind is that although this is a whole lot more complicated than the MetaSet definitions you are used to, the fundamental structure is the same: type/value/displayname, and this applies to all three 'recursive' MetaSet types (choose1, random1, combo) as well. But for them, the "value" part is more complex since it contains other MetaSet definitions.

So the lengthy Meta0 definition above can be broken down into these 3 elements:

type: CHOOSE1

I.e., the new type that lets you choose one of options that are defined in the data field.

data: CUBE/ArabianExtended/ArabianExtended;FULL/*/*;META/ICE,ALL,HML,CSP/IceAgeBlockExtended;BOOSTER/2ED/Unlimited;PACK/4ED/4th Edition

This really is a list of no fewer than 5 separate MetaSets in one! In order, they are:

CUBE/ArabianExtended/ArabianExtended - the "Extended Arabian Nights" sample cube that is included to demonstrate MetaSet functionality.
FULL/*/* - the full cardpool. If you select this option, the generated booster can contain (theoretically) any implemented card.
META/ICE,ALL,HML,CSP/IceAgeBlockExtended - An ad-hoc sub-block that combines the original Ice Age block (Ice Age, Homelands, Alliances) and the retroactively added Coldsnap into a single cardpool.
BOOSTER/2ED/Unlimited - generates an Unlimited (2ED) booster.
PACK/4ED/4th Edition - generates a Fourth Edition (4ED) starter pack. Yes, this option will give you more cards than the other four. ;)

Two important notes:
1) The Metasets in the data field must be separated with semicolons (;), otherwise they won't parse correctly! Rule of thumb: use a semicolon (;) to separate the MetaSets in a "choose1"/"random1"/"combo" type MetaSet, and a comma (,) to separate the sets in a "meta" type MetaSet.
2) The display names for included "nested" MetaSets will be displayed in a separate listbox for you to select, so it's ok to use longer and more descriptive display names here. (You don't need to worry about crowding the selection box.)

display name: CHOOSE

This is the display name that is used for the whole "choose1" type MetaSet in the normal set distribution selection box. This should be an abbreiation or the selection box will look crowded and messy.

That wasn't too bad after all, was it? Let's move on.

Code: Select all
Meta1:RANDOM1/FULL/*/*;META/CHK,BOK,SOK/KAMI;BOOSTER/8ED/8ED/RANDOM
Quite similar to the above, except that here the type is "random1", meaning that if you include this MetaSet in your Sealed Deck game, you will randomly get one of the following boosters:

FULL/*/* - the full cardpool.
META/CHK,BOK,SOK/KAMI - an ad-hoc Kamigawa block.
BOOSTER/8ED/8ED - an 8th Edition booster.

For "random1" MetaSets, the display names of the included sub-MetaSets are very irrelevant, since they are never shown. You just need to put something there or the line will not parse correctly.
The final parameter, "RANDOM", is the display name of the main MetaSet, and it will displayed in the set distribution selection box.

Finally, we have an example of a "combo" type MetaSet:

Code: Select all
Meta2:COMBO/CUBE/juzamjedi/JZJEDI;META/USG,ULG,UDS/URZA;PACK/M13/M13;BOOSTER/TSB/TimeShift/COMBO
This will combine the following MetaSets into a single cardpool and create a booster based on that cardpool:

COMBO/CUBE/juzamjedi/JZJEDI - The JuzamJedi cube, obviously.
META/USG,ULG,UDS/URZA - an ad-hoc Urza block.
PACK/M13/M13 - M13 starter pack (meaning any cards that could be in the pack)
BOOSTER/TSB/TimeShift - a "time-shifted" booster pack (meaning any cards that could be in the pack)

Again, the display names are pretty much irrelevant (not shown). Only the main display name ("COMBO") will be shown.

...and that's it. really. Now you know how to use the new MetaSet types.

Now, how to build "guild boosters" using them?

First, you would build cubes that contain the cards that could be included in the guild booster pack, i.e., one for each of the following guilds: Azorius, Izzet, Rakdos, Golgari, Selesnya. ...Drat, my favorite guild isn't on the list! (h, you ask what it is? Well, my username gives you a not-so-subtle clue.)

Then you would add the following MetaSet to your block definition (edit for the actual cube names, if different):
Code: Select all
Meta0:CHOOSE1/CUBE/AzoriusCube/Azorius Guild;CUBE/IzzetCube/Izzet Guild;CUBE/RakdosCube/Rakdos Guild;CUBE/GolgariCube/Golgari Guild;CUBE/SelesnyaCube/Selesnya Guild/GUILD
If included in a Sealed Deck game, this would allow the player to choose one of the included guild "cubes" as the booster base. (Obviously, this is still untested.)

Re: HOW-TO: Customize your Sealed Deck games with fantasy bl

PostPosted: 05 Oct 2012, 12:31
by RumbleBBU
...and now for Draft Games, too!

Beginning with Forge 1.2.15, you can also use Fantasy Blocks in Draft games. However, there are two significant differences:

1) Since in a Draft game you get 3 boosters, custom blocks that contain more than 3 different sets are a bit pointless. If you pick a block that has more than 3 different sets, you have to choose which 3 sets you want in this particular draft game.
2) The MetaSet types choose1 and random1 are not supported in Draft games. Blocks that contain such MetaSet types will not be displayed in the block selection menu in Draft mode.

Re: HOW-TO: Customize your Sealed Deck games with fantasy bl

PostPosted: 07 May 2013, 10:24
by Max mtg
Update: Since 1.3.13 the syntax was changed.

The main changes are:
* no need to specify numbers for meta blocks, no more Meta0:, Meta1: .. etc
* the type of topmost meta block is specified after a dash (not colon)
* the parameters of any meta block should be surrounded by round brackets (not slashes). This also makes it easier to see how blocks are nested.
* the actually supported metaset types are listed below:
Code: Select all
        Full("F") - All cards
        Cube("C") - Cube
        JoinedSet("J") - Joined set.. ex: J(ICE ALL HML CSP)Ice_Age_Block_Extended
        Choose("Select") - Choose from a list of nested metasets
        Random("Any") - Randomly select one of nested metasets
        Combo("All") - Combined booster means all nested sets will be selected
        Booster("B") - a common booster, associated with card edition... ex: B(DKA)
        SpecialBooster("S") - Special booster defined to support special events, that is not linked to any edition, see note below.
        Pack("T") - Tournament pack or Starter, valid only for editions where it was avaliable
* You may use either name or a shorter alias to denote a meta set. They are case insensitive now
* There is a new meta type "SpecialBooster" (added during 1.3.16 development), it's used to refer to special boosters declared in res\blockdata\boosters-special.txt . These boosters are used to hold RTR block sealed events, and may be used for MBS faction booster generation (if anyone would like to build a themed sealed game)

To illustrate changes, let me show an example:
Code: Select all
Meta0:CHOOSE1/CUBE/AzoriusCube/Azorius Guild;CUBE/IzzetCube/Izzet Guild;CUBE/RakdosCube/Rakdos Guild;CUBE/GolgariCube/Golgari Guild;CUBE/SelesnyaCube/Selesnya Guild/GUILD
became
Code: Select all
Meta-Choose(S(RTR Prerelease Azorius Guild)Azorius guild;S(RTR Prerelease Selesnya Guild)Selesnya guild;S(RTR Prerelease Izzet Guild)Izzet guild;S(RTR Prerelease Rakdos Guild)Rakdos guild;S(RTR Prerelease Golgari Guild)Golgari guild)Guild
"Choose" block contains 5 nested options, separated by semicolons, while formerly used cubes were replaced with special boosters.

Re: HOW-TO: Customize your Sealed Deck games with fantasy bl

PostPosted: 09 Jul 2014, 23:05
by TalVerd
I have tried following the directions for making a meta set, but it isn't all that clear with what different things mean, neither is the last post with the syntax changes, and I am pretty sure the syntax has changed again since then. I tried making a meta set but it keeps always saying it "does not contain any set combinations" when i try to draft it. furthermore, The metaset samples that are provided with the game also do not work, and the same message pops up (I have not edited them in any way either, so they were broken when I downloaded forge) so they are basically worthless to go by as a reference point.

I am trying to make a metaset that basically does what the "full cardpool" option does for a draft, but only with the Modern Core Sets. Here is what I have it looking like so far, but it obviously doesn't work right, so any help would be greatly appreciated:
(3) Meta Modern Cores, 3/6/10E, Meta-All(8ED 9ED 10E M10 M11 M12 M13 M14)

Re: HOW-TO: Customize your Sealed Deck games with fantasy bl

PostPosted: 05 Mar 2017, 23:56
by The Full Monty
I've been doing some searching, and alot of people refer to this page to see the "format" of the new fantasy blocks, but the guy above is asking a question saying it doesn't work.

Can someone clarify the format for an official "go-to".
Especially what the (3) is, 3/6 are for, and how the Meta-all(xxx yyy zzz) works.

Edit: I see what the 3/6 are for (number of packs for a draft + sealed), shoulda known that but then what are all the (3)'s and (6's) for in the fantasyblocks.txt? I had assumed that was the pack numbers, but now the file just lists it as #.

Couldn't you simply list the sets without the brackets and meta-all qualifier?