Skip to content
Mayuso edited this page Mar 15, 2016 · 11 revisions

Made by Chibi1234 an intermediate card creator. Edited by webadict and kairos4242.

Step 1. Finding the folder

Navigate to your Metastone Install folder located in C:\Users(Your name here)\AppData\Local\Metastone (Some cases the folder will be placed elsewhere depending on the installation)

Open the folder ''Cards'' and create a folder named whatever you want (I suggest something like ''Custom'' but that's up to you to decide.)

Step 2. Card creation basics

Every card must be a .json file as of Metastone's current version. You can edit .json files with any text editor but it's recommended to use Notepad++ since it's free, and it works well with Metastone.

Step 2-1. Creating a minion

First lets take a look at an already made card to understand the basics of a minion.

{
	"name": "Wisp",
	"id": "minion_wisp",
	"type": "MINION",
	"rarity": "COMMON",
	"heroClass": "ANY",
	"baseManaCost": 0,
	"baseAttack": 1,
	"baseHp": 1,
	"set": "CLASSIC",
	"fileFormatVersion": 1
}

This is the file of a Wisp minion card. This is all fairly self-explanatory, but let's go over it. "name" symbolizes the name that is shown in-game.
"id" is a unique identifier for the card. It's recommended that the file name match the id, since no card can have the same id.
"type" tells the game which type of card this card is. The current choices are "MINION", "SPELL", "CHOOSE_ONE", "WEAPON", "HERO_POWER", and "HERO" cards.
"rarity" sets the rarity of the card. There are 5 rarities to choose from "FREE", "COMMON", "RARE", "EPIC", and "LEGENDARY".
"heroClass" tells the game which class this card belongs to. "DRUID", "HUNTER", "MAGE", "PALADIN", "PRIEST", "ROGUE", "SHAMAN", "WARLOCK", "WARRIOR", or, if neutral, "ANY".
"baseManaCost" is the amount of Mana the card would cost without any modifiers.
"baseAttack" is the amount of Attack the card would have without any modifiers.
"baseHp" is the amount of Health the card would have without any modifiers.
"set" is the Set the card will belong to in the Deck Builder. So far there are 5 Sets: "CLASSIC", "NAXXRAMAS", "BLACKROCK_MOUNTAIN", "THE_GRAND_TOURNAMENT", and "CUSTOM". "CUSTOM" is recommended for custom cards, as it makes it easier to see all of them in the Deck Builder.
"fileFormatVersion" should be set to 1. This sets how the file is read by Metastone.

These fields can be in any order, and there are also some other fields as well. For example: "race" sets the Race of the card. There are so far "BEAST", "DEMON", "MURLOC", "PIRATE", "MECH", and "TOTEM" races, or you can remove the entire line to set a card to no race. "collectible": true makes the card will be visible in the Deck Builder. The default is to set a card as collectible.
"description" sets the description which the card has under its name in-game. Note: Writing taunt in the description field wont make the card a Taunt card. Do add Taunt, you would need to add

"attributes": {  
	"TAUNT": true"  
}  

to the card. There are a number of different attributes that can be added to the card.

There are a few more but those are really advanced like the "options", and we can leave that for a more advanced tutorial.

Step 2-2. Creating a spell

First lets take a look at a simple spell, Fireball.

{
	"name": "Fireball",
	"description": "Deal 6 damage.",
	"id": "spell_fireball",
	"type": "SPELL",
	"rarity": "FREE",
	"heroClass": "MAGE",
	"baseManaCost": 4,
	"targetSelection": "ANY",
	"spell": {
		"class": "DamageSpell",
		"value": 6
	},
	"set": "CLASSIC",
	"fileFormatVersion": 1
}

Here we see the "spell" function which is used to trigger a set of events. In this case "DamageSpell", which is a spell that does damage. Since it has a "value" of 6, it will deal 6 damage to anything it targets.
Spells also contain a "targetSelection" to tell it what characters should be able to be targeted. "ANY" means that any character can be targeted. Some other choices might be "FRIENDLY_CHARACTERS", "ENEMY_MINIONS", "HEROES", or, if the spell doesn't target, "NONE". If a spell has no "targetSelection", you can add a "target" to the spell, similar to the targetSelection. Each "spell" requires at a bare minimum the "class" listed in it, or else the card won't know which spell to cast! There are a lot of different spells to cast, so for now, it might be better to use

Now lets take a look at a more advanced spell, Far Sight.

{
	"targetSelection": "NONE",
	"id": "spell_far_sight",
	"name": "Far Sight",
	"description": "Draw a card. That card costs (3) less.",
	"spell": {
		"class": "DrawCardAndDoSomethingSpell",
		"value": 1,
		"spell": {
			"class": "ModifyAttributeSpell",
			"attribute": "MANA_COST_MODIFIER",
			"value": -3
		}
	},
	"type": "SPELL",
	"heroClass": "SHAMAN",
	"rarity": "EPIC",
	"baseManaCost": 3,
	"collectible": true,
	"set": "CLASSIC",
	"fileFormatVersion": 1
}

Here we can see the "spell" function being used again but by a more advanced spell. This time it's activating the very fittingly named "DrawCardAndDoSomethingSpell". This spell draws one ("value": 1) card and then casts a second spell ("ModifyAttributeSpell") on the card that reduces the cards Mana cost by three.

Step 2-3. Minions with Abilities

So, making a Chillwind Yeti is fun and all, but how about minions with effects? Let's take a simple Battlecry minion, Abusive Sergeant:

{
	"name": "Abusive Sergeant",
	"description": "Battlecry: Give a minion +2 Attack this turn.",
	"id": "minion_abusive_sergeant",
	"type": "MINION",
	"rarity": "COMMON",
	"heroClass": "ANY",
	"baseManaCost": 1,
	"baseAttack": 2,
	"baseHp": 1,
	"battlecry": {
		"targetSelection": "MINIONS",
		"spell": {
			"class": "TemporaryAttackSpell",
			"value": 2
		}
	},
	"attributes": {
		"BATTLECRY": true
	},
	"set": "CLASSIC",
	"fileFormatVersion": 1
}

Battlecries are basically minions that cast a spell when played, as you can see from the "battlecry" key. Deathrattles are similar, as you'll see from the Deathrattle minion, Dark Cultist:

{
	"baseAttack": 3,
	"baseHp": 4,
	"deathrattle": {
		"class": "BuffSpell",
		"hpBonus": 3,
		"target": "FRIENDLY_MINIONS",
		"randomTarget": true
	},
	"id": "minion_dark_cultist",
	"name": "Dark Cultist",
	"description": "Deathrattle: Give a random friendly minion +3 Health.",
	"type": "MINION",
	"heroClass": "PRIEST",
	"rarity": "COMMON",
	"baseManaCost": 3,
	"collectible": true,,
	"attributes": {
		"DEATHRATTLES": true
	},
	"set": "NAXXRAMAS",
	"fileFormatVersion": 1
}

"deathrattle" functions almost exactly like "battlecry" does, but without the need for "targetSelection" or "spell", since deathrattles can never be targeted anyhow! You should also take note of the attributes that are added to each one. That tells the game that this is a Battlecry and/or a Deathrattle minion.

Step 2-4. Creating a Choose One card

Choose One cards are setup a bit differently in Metastone. Choose One spell cards are given a different type than Choose One minions, which are set as "MINIONS". Let's look at two examples to see the differences, starting with Druid of the Claw.

{
	"baseAttack": 4,
	"baseHp": 4,
	"options": [
		{
			"spell": {
				"class": "TransformMinionSpell",
				"card": "token_cat_form",
				"target": "SELF"
			},
			"description": "Charge"
		},
		{
			"spell": {
				"class": "TransformMinionSpell",
				"card": "token_bear_form",
				"target": "SELF"
			},
			"description": "Taunt"
		}
	],
	"id": "minion_druid_of_the_claw",
	"name": "Druid of the Claw",
	"description": "Choose One - Charge; or +2 Health and Taunt.",
	"type": "MINION",
	"heroClass": "DRUID",
	"rarity": "COMMON",
	"baseManaCost": 5,
	"collectible": true,
	"set": "CLASSIC",
	"fileFormatVersion": 1
}

Here, you should notice a new "options" keyword. This holds an array of different options that should happen, but these options work functionally similarly to Battlecries. The only difference is that you are given two (or more!) choices to from that will be listed on the side. Druid of the Claw lets you transform this minion into one of the two different tokens.

Now let's take a look at a Choose One spell, Wrath.

{
	"name": "Wrath",
	"description": "Choose One - Deal 3 damage to a minion; or 1 damage and draw a card.",
	"id": "spell_wrath",
	"type": "CHOOSE_ONE",
	"rarity": "COMMON",
	"heroClass": "DRUID",
	"baseManaCost": 2,
	"targetSelection": "NONE",
	"options": [
		"spell_wrath_1",
		"spell_wrath_2"
	],
	"set": "CLASSIC",
	"fileFormatVersion": 1
}

Not only is there is no "spell" component, but the "type" is also different! Listed in the options is two additional spells, "spell_wrath_1" and "spell_wrath_2". So, let's take a look at the first of those.

{
	"name": "3 damage",
	"description": "Deal 3 damage to a minion",
	"id": "spell_wrath_1",
	"type": "SPELL",
	"rarity": "COMMON",
	"heroClass": "DRUID",
	"baseManaCost": 2,
	"targetSelection": "MINIONS",
	"collectible": false,
	"spell": {
		"class": "DamageSpell",
		"value": 3
	},
	"set": "CLASSIC",
	"fileFormatVersion": 1
}

Our first non-collectible card! You'll notice the the name is pretty weird, but that's okay. It's just to differentiate it from within the Metastone client when you're searching for a card in the Sandbox mode, so players like yourselves don't get confused. This is set up exactly the same as a regular spell.

Step 2-5. Forging a Weapon card

Weapon cards are pretty easily set up, but they have special fields that other cards do not have. Let's look at a more advanced card this time, the Gladiator Bow:

{
	"name": "Gladiator's Longbow",
	"description": "Your hero is Immune while attacking.",
	"collectible": true,
	"id": "weapon_gladiators_longbow",
	"type": "WEAPON",
	"rarity": "EPIC",
	"heroClass": "HUNTER",
	"baseManaCost": 7,
	"damage": 5,
	"durability": 2,
	"onEquip": {
		"class": "AddAttributeSpell",
		"target": "FRIENDLY_HERO",
		"attribute": "IMMUNE_WHILE_ATTACKING"
	},
	"onUnequip": {
		"class": "RemoveAttributeSpell",
		"target": "FRIENDLY_HERO",
		"attribute": "IMMUNE_WHILE_ATTACKING"
	},
	"set": "CLASSIC",
	"fileFormatVersion": 1
}

A couple new fields! "durability", which is a required field, and "onEquip" and "onUnequip", two optional fields which activate a spell when the weapon is equipped or removed. Otherwise, weapons are similar to minions. They can have Battlecries and Deathrattles, or passive effects like Triggers. However, weapons cannot have "attributes".

Step 2-6. Creating Hero Powers

Remember when we went through the card types, and I listed "HERO_POWER"? How about we take a quick look at the Priest's Lesser Heal:

{
	"targetSelection": "ANY",
	"id": "hero_power_lesser_heal",
	"name": "Lesser Heal",
	"description": "Restore 2 Health.",
	"type": "HERO_POWER",
	"heroClass": "PRIEST",
	"rarity": "FREE",
	"spell": {
		"class": "HealSpell",
		"value": 2
	},
	"baseManaCost": 2,
	"collectible": false,
	"set": "CLASSIC",
	"fileFormatVersion": 1
}

Almost exactly the same as a spell! The only real difference is the type. And really, that's all that matters for it, anyhow.

Step 2-7. Bring Up a Hero card

With a custom Hero Power, we also need a custom Hero, right? The downside is that having a deck with your Hero in it will be a little more tough, since each of the 9 Heroes are fairly hardcoded into the game. The good news is that you CAN make Cards that call them into battle.

Before we do that, how about we look at how a Hero, namely Uther, is setup:

{
	"name": "Uther, the Lightbringer",
	"id": "hero_uther",
	"type": "HERO",
	"heroClass": "PALADIN",
	"rarity": "FREE",
	"heroPower": "hero_power_reinforce",
	"collectible": true,
	"attributes": {
		"HP": 30,
		"MAX_HP": 30
	}
}

Heroes are rather simplistic, but they have one additional option that no other card has: "heroPower". This let's you choose which Hero Power your Hero starts with.

Step 3. Enjoy

The last thing you have to do now is to launch Metastone.

Notes:

set, race, rarity, targetSelection, and a few others must have an uppercase answer. For example, you cant have "set": "Classic". It will not work. You will need to do "set": "CLASSIC" instead.

You must restart Metastone for any added cards to appear if you had it open while making new cards.

If you encounter a problem where when you start Metastone with something like ''Failed invoking method,'' the fastest way to tell which card is causing the issue is by going into report.log inside the MetaStone app folder. This log will tell you exactly which card caused the error, and sometimes even where the error was in the code. Once that card is fixed, MetaStone should launch as normal.

As said by demilich, ''card format is subject to change; cards you create now may not work in future versions,'' so be warned.

If you want help with anything I'm always willing to help! If you're looking to make advanced cards, look to copy a card that is similar to the card you'd like to add.