A forum for users of LackeyCCG

Main Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Topics - CrazyChucky

With the release of the foil card list, we now know all the cards in the Mystery Booster.

For anyone awaiting drafting it in Lackey, I wanted to let you know that I do plan to add it, but I'm still waiting on more info to do so. That's because unlike a normal pack, each card in any given pack is from a different sheet, and there are two sheets for each color's commons and uncommons. That is, sheet one is 121 white uncommon/commons, and sheet two is an entirely different set of 121 white common/uncommons. You can never open a pack and get two of the cards from the same sheet.

We have the full card list, but we don't know yet which cards are on which sheets. Once the retail set is released, hopefully enough intrepid box-openers will post their findings online that a full breakdown can be assembled, at which point I'll add Mystery Booster to the plugin!
When my friends and I play Magic on Lackey, we voice chat, so we handle phase/step changes verbally, the same as we would if playing with cards in person. I'm curious if others here use the phase buttons, and if so, how well they work for you. Would it be helpful to split up the combat phase into its separate steps, or would that be unnecessary detail?
Inspired by ransomman's Marvel Champions topic, I've decided to make one master thread for Magic updates, instead of starting a new topic every time I add something. I'll post new updates as replies here, as well as edit this first post with the current release.

Magic plugin update URL:

Instructions for installing LackeyCCG and plugins:

Gallery of all custom tokens available in the plugin:

For questions, bugs, or requests, feel free to either reply here or start a new topic, whichever suits your fancy.

Latest Update:

New sets

Sets with cards Added

Addendum 12/3

Oops! In my previous update, I added the "normal" holiday additions to LTR, but I missed the five Jumpstart cards. Fixed!
Theros Beyond Death (THB) is now fully uploaded, except for the tokens, which aren't on Scryfall yet. All the spawn scripts are there, they just make blank tokens for now.

I've also made two improvements to the custom Lackey tokens. Colorless non-artifact tokens now use the more accurate clear M15 frame, and self-copying tokens are now formatted to actually look like tokens.

Check out the full gallery if you want to see the whole set of custom tokens.
Okay, this really has me stumped. When Lackey is launched, it's supposed to check the version.txt of the currently loaded plugin against its remote version, and prompt for an update if the date tag on the remote file is newer. In the past, this has occasionally failed for me, but usually worked without a hitch. The last few days, it fails almost every time. I don't think it's just my server or my plugin, because I've tried testing it with the Pok?mon plugin and get the same results.

Not only can I access the remote version.txt just fine using the URL specified in the local one, Lackey also downloads the version file just fine if I go and hit "Install or Update from URL".

Steps I'm using to test:

  • First, I make sure I have a plugin up-to-date and currently loaded in Lackey.
  • Close Lackey.
  • Manually edit my local copy of version.txt to have an earlier date.
  • Relaunch Lackey.
It should prompt me to download the new version, but most of the time it does not. (If I then go hit "Install or Update from URL", it successfully downloads the (unedited) version.txt from the server.)

It's not like Lackey itself has changed, so I'm confused what could be doing this. If it were something to do with my firewall or internet connection, I don't understand how Lackey would be able to successfully download the same file when performing the update, but not when checking for the new version. Is anyone else having this issue?
I noticed that modal spells that can create tokens (there aren't many) were automatically making them when put on the table. Now fixed, so they wait for you to use the right-click script if you want to.

And of course, adding more Theros Beyond Death cards as they come out.
Happy New Year! I finally got around to adding in the Challenge Decks from the original Theros block, both the cards themselves and saved decks for them. I put the default starting cards in the command zone of the saved deck, so that you don't have to go hunting for them once you load the deck.

The Hero cards are all in the plugin as well, including the sheet of possible enhancement stickers (in sets THP1, THP2, and THP3). They're easily searched up by "Type: Hero". Bonus: that'll also pull up Unhinged's Fraction Jackson. ; )

You can play with these however you like, of course, but here's a list of which Heroes you could've had available when playing these in order:

Face the Hydra (Deck rules and info)

  • The Protector, The Philosopher, The Avenger, The Warrior, or The Hunter (from the white, blue, black, red, or green pack, respectively)
  • The Harvester
Battle the Horde (Deck rules and info)

  • (Previously acquired Heroes)
  • The Slayer
  • The General, The Savant, The Tyrant, The Warmonger, or The Provider (again, in WUBRG order)
  • The Explorer
Defeat a God (Deck rules and info)

  • (Previously acquired Heroes)
  • The Vanquisher
  • Spear of the General, Cloak of the Philosopher, Lash of the Tyrant, Axe of the Warmonger, or Bow of the Hunter ? combined with one of the enhancement stickers to become a customized Godslayer
  • The Destined
The final Hero, The Champion, was the reward for defeating Xenagos.

And, of course, Theros Beyond Death has been updated with recently spoiled cards.
All cards spoiled so far for Theros Beyond Death are now available.

I've made several tweaks and improvements to token-spawning scripts, but the biggest thing by far is that every custom token now has art. This includes:

  • Tokens from old sets before Wizards printed tokens
  • Tokens that are copies of the cards that make them (these are never printed)
  • Tokens which Wizards has printed, but with inaccurate text. In almost all cases it's because they like to leave off haste on otherwise vanilla tokens, but the printed Triskelavite token also inexplicably lacks its sacrifice ability.

Netfirecat, I've not forgotten your request to add the rest of the Theros Challenge decks. With this token art done and Theros in the air again, it's the next thing on my list.

  • Throne of Eldraine is now hi-res.
  • Added the new cards from Game Night 2019
  • Added an actual command zone! I'd gotten so used to using the sideboard for it, it never occurred to me that now that I run the plugin, I could make a real one. Thanks to Bloodwolf for pointing this out. Also added Bloodwolf's "Play command" button, to play the top card to the table?useful for archenemy.
  • Various scripting and text improvements:

    • Tweaked from which sets tokens are spawned if they're not available in the card's own set; giving preference when the token is available elsewhere in the same block.
    • Cards that don't untap during your untap step now behave properly.
    • The Adamant paladins were entering with their counters on them; fixed.
    • B.F.M.'s right half has a different name now.
    • Ascend cards can now spawn the City's Blessing marker; adventurers can spawn On an Adventure.
    • Some adventurers were missing scripts like flying. Fixed.

Also, I fixed a server issue I was having, so the mirror of the old updatelist URL is working again. Just in case anyone's still using that one.
This update includes multiple things! Here are the highlights:

  • Commander 2019 images are now hi-res.
  • Adventurer cards in Throne of Eldraine now also available in their alternate frames.
  • Ultimate Masters added.
  • Iconic Masters: added cards that have new art.
  • TOKENS! Read on.
Previously, if a card could create a token, but that token's never been printed by Wizards, it spawned a blank card. That's better than nothing, but I wanted to do better. Now, literally every card that can make tokens does so. Tokens created from scratch don't have art yet (maybe in future), but they have all applicable text and stats. Note that this is based on card text as currently errata'd, so for some old cards, it doesn't quite match what's printed on the card. You can always hold ~ to see a card's up-to-date text.

Cards that create token copies, even token copies of themselves, are included in the fun! See images for examples. (Or load up a token deck and go play a game!)

I hope you enjoy these. Please let me know if you find any errors.
Plugins & Plugin Creation Forum / MtG: Throne of Eldraine
September 20, 2019, 08:57:11 PM
All the new cards from Throne of Eldraine are added.

The plugin used to have sounds, and their return was requested. Card types once again each have their own sound when placed on the table. Feel free to turn this off in preferences.

Bug fixes:

  • Split cards didn't have their Oracle text. Fixed.
  • Core Set 2015, Origins, and Hour of Devastation packs incorrectly included some cards that were only in precons. Should be correct now.

Note: please make sure you're using the current update URL,
I normally maintain the old URL as a mirror, but that server is down right now.
Plugins & Plugin Creation Forum / MtG: Commander 2019
August 14, 2019, 05:58:02 PM
Commander 2019 is uploaded. Core Set 2020 and Modern Horizons now have high-resolution images.

I've made some largely internal tweaks. Color identity is now in proper cyclical WUBRG order, and tokens include their keyword mechanics in their name. (For example: what was previously "[cma] Drake (UG 2/2)" is now "[cma] Drake (GU 2/2 Flying)".) This should make things tidier when it comes to Wurmcoil's tokens and multiple kinds of insects/etc. in the same set. Please let me know if anything's not spawning correctly.

Another user asked for the return of sounds, so I plan to re-add that feature soon, and add the rest of the Theros challenges too.

I've also got something cool in the works for tokens?stay tuned. : )
I've uploaded what's out so far of Modern Horizons. No promises, but I plan to do a handful of incremental updates as the set is spoiled, so you can get to brewing.

Some cards are still very low-res, or in various foreign languages. As a reminder, if you hold ~ while mousing over a card, Lackey will display the full text info.

P.S. War of the Spark images are now high-res too.
The set isn't fully spoiled yet, but what's out so far is now in the plugin. Happy brewing!
I don't know if anyone besides me will find this useful, but here goes! In short, this Python library is a tool to help generate drafting packs for Lackey, giving more intuitive control over what Lackey calls "chances"?the probability of different possible pack layouts.

Official documentation on Lackey pack definitions:

The Problem

Let's use Magic as an example. A basic modern booster pack contains:

1 Rare
3 Uncommon
10 Common

(And 1 basic land, but those aren't drafted, so we'll ignore them.)
However, about 1 in 8 packs has a mythic rare instead of a rare. Ideally you'd be able to write something like this:

13%: 1 Mythic, 87%: 1 Rare
3 Uncommon
10 Common

Unfortunately Lackey defines chances only on a per-pack basis, not on subsets of a pack like individual card slots. So your definition needs to look like this instead:

1 Mythic
3 Uncommon
10 Common
1 Rare
3 Uncommon
10 Common

So far that's only a little added repetition. But the problem becomes much more pronounced when you have multiple, or even nested, branching points within your configuration. Consider the Shadows Over Innistrad set: in addition to the rare/mythic split, one slot is either a common OR uncommon double-faced card, and another slot is either a regular common OR a rare OR or mythic double-faced card. Never mind the actual numbers... The basic idea should look like:

13%: 1 Mythic, 87%: 1 Rare
3 Uncommon
8 Common
%: 1 Common, %: 1 DFC Mythic, %: 1 DFC Rare
%: 1 DFC Common, %: 1 DFC Uncommon

But to work in Lackey, you have to calculate each of those branch points out to a list of TWELVE different possible configurations. I dunno about you, but I don't want to do that by hand. Which brings me to...

The Solution

Well, for me at least. And maybe for you too, if you know (or decide to learn) Python!

I've posted the entire file here as an attachment, I've also included my Magic-specific file that imports and uses the library, so you can see what it looks like in practice. I make no claim or warranty of any kind for either of these files. But my intention is that you can use the file basically as-is; you should only need to edit "possibleFields" up at the top so it knows what fields you have in your card files. Then you can write your own equivalent of my, that imports it, defines your packs, and writes your pack definition file(s).

Most of the defined classes correspond to XML tags in Lackey's pack definition files: Pack, Kind, Crit, and CommonCrit. Branch is basically the same as a chance; that is, a branch that contains only kinds is a chance. However, any given entry within a branch can instead be a branchpoint, which itself includes multiple branches. When you create a pack object, it automatically analyzes its entries and resolves all branchpoints until it has a list of chances that Lackey can understand.

Let's go through an example. In, you can see I define some variables for criteria I'll need often:

mythic = Crit('Rarity', 'IS', 'M')
rare = Crit('Rarity', 'IS', 'R')
uncommon = Crit('Rarity', 'IS', 'U')
common = Crit('Rarity', 'IS', 'C')
land = Crit('Rarity', 'IS', 'L')

This makes defining kinds easy: "Kind(1, rare)" corresponds to a kind tag in the XML file telling Lackey to include one card whose rarity is rare.

Here's the entries for a default Magic pack:

defaultEntries = (
Branch(Kind(1, mythic), prob=13), #1/8
Branch(Kind(1, rare), prob=87),
Kind(3, uncommon),
Kind(10, common),

After that you can do something like:

Pack('The Excellent Card Set', 'booster', defaultEntries)

And that will generate a pack. You'll probably also want to define one or more commonCrits, such as specifying that all cards in the pack have to come from a certain set. I make myself a Booster class as a subclass of Pack, as shorthand to take care of some things like that that are the same for (almost) all Magic booster packs. But that's probably more trouble than it's worth if your plugin only has a few different packs.

The writePacksToFile function writes a collection of packs to a specified file, which should then be ready to put in your plugin!

Known Limitations

The biggest one is that Lackey does NOT understand probabilities with a decimal component. That is, it understands 57, but not 57.25. Including any probabilities like this makes Lackey glitch and always choose the first chance listed for the pack. This becomes a much bigger problem the more chances you have and the smaller each one gets, especially since no one single chance can have less than a 1% probability.

Trevor mentioned fixing this in this forum post; just in case he does someday, I've included a setting flag at the top of the file. Change "roundToIntegers" to False and the library should happily spit out much more accurate numbers for you.

The other is available evals. The doc mentions "IS, CONTAINS, DOESNTCONTAIN,ISGREATERTHAN, among others." I don't know what those others are, but I do know that I haven't been able to get ISGREATERTHAN to work. So I recommend sticking with those first three. If you somehow discover others, first, pleast post here and let me know! And second, the list can easily be edited at the top of the file.

I just updated the plugin's drafting packs. Two changes:

  • Rarities in the double-faced card slots for Innistrad and Shadows Over Innistrad blocks should now be (reasonably) accurate.
  • I organized the packs into sections and inserted a heading for each. I find it easier to read and search through now. How do you all like it? Anything you might prefer ordered differently?

Cards that scry, reveal, or look at a fixed number of cards off the top of a library now have scripts when you right-click on them, to save you the tedium of that drilldown menu. Unfortunately I have no way of coding variable numbers, so you'll still have to do it yourself for things like Ugin's Insight that scry X.

Cards that enter the battlefield with a fixed number of counters should do so as well. I've standardized the colors as follows:

  • Green for +1/+1 counters
  • Red for -1/-1 counters
  • Blue for everything else
Because of this, I've also enabled + and - buttons for blue counters on the toolbar. Like the scrying scripts, these are only automatic for fixed numbers, and you'll still have to do it yourself for things like hydras that enter with arbitrary numbers of counters.

I also fixed a bug in the token scripts. Cards that generate variable numbers of tokens with the phrase "for each" (like Avenger of Zendikar) were only spawning one token instead of giving options. They should work correctly now.

New Card Field

All cards now have a field named "ColorID", which is the card's color identity for commander deckbuilding purposes, rather than the card's actual in-game color. For instance, Benthic Infiltrator is colorless but has a blue color identity, Yasova is green but has a Temur identity, and so forth.


As always, please let me know if you have questions, or if you find a bug.
It's full spoiler day, and you know what that means! Have fun, everyone. Let me know if anything doesn't work right.
I just posted a large update to the drafting packs in Lackey. I fixed and improved accuracy in many of the existing packs (like packs that had 11 commons but should have had 10, the DFC slot in Innistrad sets, etc.) and I believe all special collation rules should be working. I will continue to check and update.


Basic lands: Most real-world booster packs come with a basic land. I've omitted this slot, since it's not drafted. Return to Ravnica block, Guilds of Ravnica, and the first two Tarkir sets instead use the basic land slot for dual lands; I've included these. There is a chance the land in a pack of Unstable will be a Steamflogger Boss, which IS part of the draft. I've implemented this. So in Lackey, an Unstable pack will usually be 14 cards, but will occasionally be 15.

Battlebond: In a real pack, if you get one partner, you will always get the other. (A rare or mythic partner replaces one of the uncommons.) Unfortunately, due to Lackey's inability to understand decimal probabilities, I am unable to replicate this in a nice, WYSIWYG manner. Instead, if you get a partner, the other is represented by an empty slot. You'll have to add it manually to your deck. I know this is inconvenient, but unless Trevor updates Lackey's pack math, I can't do it the right way.

Dominaria: Every Dominaria pack will successfully give you at least one legendary, in a way which seems reasonably close to results in real packs.
I saw in this post from 2011 that chance probabilities in pack definitions currently supported integers only, but that Trevor was changing it at the time.

I don't know how much good it does to mention it here, but probabilities with a decimal component break the pack loader and make it always select the first chance. I encountered this bug while improving and adding to the Magic plugin's pack definitions, and it's going to make things... tricky.