PDA

View Full Version : Cards in a pack



keldrin
08-26-2013, 12:05 AM
They talked about hoppers and boxes and trying to emulate how cards are distributed in physical card games, in the digital format.
While, maybe, from a practical standpoint, meaningless. I was curious if the card packs when placed in your account, already have the cards in the pack selected before opening the pack. OR will the card pack get the cards selected, when the pack is opened.

Kroan
08-26-2013, 12:19 AM
My guess is that they will be generated from a pool once you open them. :)

keldrin
08-26-2013, 12:24 AM
My guess is that they will be generated from a pool once you open them. :)
That seems most logical, however, if they really want to simulate opening physical card packs, then card distribution would need to be related to the cards still available from the current print run, at the time the cards are opened.
If the cards are assigned when the pack is opened, I would think there would be the potential for a new virtual print run to get generated after a specific card set was out of print.

Kroan
08-26-2013, 12:28 AM
I think the difference is neglect able. I can't come up with a single instance where it would matter. Important is that if you rip packs after each other they're different. Especially for sealed and draft.

keldrin
08-26-2013, 01:06 AM
I think the difference is neglect able. I can't come up with a single instance where it would matter. Important is that if you rip packs after each other they're different. Especially for sealed and draft.
That's a good point. Being randomized at time of open may be better for distribution of cards.

FeelNFine
08-26-2013, 01:09 AM
In one of the articles it was stated that the treasure chests that come in your pack looks at the pool when you open it, so you can wait to open pack until there is a special event. I would assume that means the rest of the cards will be chosen when you hit "open pack".

Unhurtable
08-26-2013, 01:22 AM
I think the difference is neglect able. I can't come up with a single instance where it would matter. Important is that if you rip packs after each other they're different. Especially for sealed and draft.

If the cards are determined upon the generation of the booster, the server will require more memory (as each booster has to contain unique pointers to unique cards). I don't think it will be a problem down the road (since I have a hard time seeing loads of boosters being unopened but what do I know).
If the cards are determined upon the opening of the booster, the server will work a bit more when a booster is opened (as it has to randomly select cards of a certain set). This would require even more work if the distribution of cards is to be special.


That's a good point. Being randomized at time of open may be better for distribution of cards.

Depends on how you look at it. If you want all rares / legendaries to be worth "as much in terms of scarcity" the randomization mechanism would have to look at how many cards of the other rares / legendaries had been generated prior to this opening. At this point it just seems easier (maybe I mean simpler?) to just make the system generate the cards inside the pack prior to giving out the packs.

jaxsonbatemanhex
08-26-2013, 01:28 AM
In my mind, when the contents of a pack are generated (be it if they decide to do it when you get the pack or when you open it), they'll be using stats and a RNG. So say that due to the number of rares, Jadiim has a 1% chance of appearing, and is designated to appear on a 0 to 9 on an RNG of 0-1000. The contents are determined, a 7 is rolled, the pack contains a Jadiim. This will simulate a print run to a good degree (while there will be slight variations most cards will appear about as often as they're expected to) while also not lowering the odds any players have of seeing certain cards (you'd be terribly annoyed if a large number of players just opened a chase card, and as such you had reduced odds of seeing it - even with print runs in Magic, if you move from one box to the next there is every chance another copy of the card is in that second box, even if a player opened a booster with it in the first box).

But beyond that, regardless of what method they use for determining the contents, I'd also imagine they'd do it when you open the pack. While I'm not a computer whizz and don't know much about finding or reading code, I'd imagine that generating the contents when a player first gets a pack would open up the potential for someone to be able to find pack contents without opening a pack (via game code), which of course is totally open to abuse and is akin to box mapping in MTG.

Kroan
08-26-2013, 01:31 AM
If the cards are determined upon the generation of the booster, the server will require more memory (as each booster has to contain unique pointers to unique cards). I don't think it will be a problem down the road I didn't say that. I said that they'll be generated in front, but stored in a pool. Once you open a pack the server will return a row from the pool and move to the next row for the next pack.

What I think they'll end up with is a list with a wide variety of boosters and card distribution, somewhat mirroring a printsheet. That way they can emulate boosters being opened according to how it would be in real life, especially if they're opened at the same time (draft and sealed). There won't be a random generator to open packs other than when they build the pool.

blakegrandon
08-26-2013, 05:15 AM
I'm just saying I hope they've figured it out and that the RNG doesn't eventually piss people off to the point of quitting.

MTG did it extremely well because if you opened a box you almost always felt like you were getting your moneys worth.

I just hope the chase cards are not designed to be one out of every 20 boxes just to get one, I get making cards extremely rare, but requiring you to open say 500+ packs($1,000) for one card would be beyond reasonable.

RNG is terrible because it can essentially create situations where you're buying dozens of boxes just to crack packs and never getting even one copy of a card.

I'm not opposed to spending money and a lot of it on a game, I am opposed to spending a lot of money and then RNG giving me the middle finger.

jaxsonbatemanhex
08-26-2013, 05:32 AM
But really, except for individual boxes, Magic is effectively random, with the only difference being that most of the time in a single box you're not going to get multiples of rares due to them containing boosters from about half one print run, and half another. Though even that's no guarantee, with each rare appearing twice in a print run.

From what I understood, they'll be simulating print runs with their cards. I took this not as "we will make packs exactly the same as if we were printing them, and as such, certain booster contents will be consistent across multiple packs", but rather "in a set with 100 rares and 50 legendaries, if a rare is 2x as likely to appear as a legendary (as is the case with MTG print runs), then the chance of cracking any individual rare in a booster is 2/250, and the chance of cracking any individual legendary is 1/250; the computer will roll a die and see what you get". This is pretty much how it goes with Magic too, except, again, individual booster boxes having a reduced likelihood of having multiples of individual rares/mythics.

There's a reason that TCG players tell you not to go seeking individual cards from boosters, and instead turn to the secondary market. It ends up being, on average, significantly cheaper.

blakegrandon
08-26-2013, 05:47 AM
There's a reason that TCG players tell you not to go seeking individual cards from boosters, and instead turn to the secondary market. It ends up being, on average, significantly cheaper.

Yea, that is one way to look at it.

The way I look at it is:

Buying individual cards > Cracking packs > RNG

RNG is a TERRIBLE way to distribute "loot", it's been proven time and time again in games like D3, where even if you put hundreds to thousands of hours in you can end up RNG Screwed.

I compare it to casinos where some are extremely tight and some give away alcohol and have good payouts. The tight casinos are terrible and eventually no one goes to them. If Cryptozoic is smart (and I think they are) they'll make it more of the latter.

jaxsonbatemanhex
08-26-2013, 05:51 AM
Except your last post said that Magic had done it right, and my post was just clarifying that Hex will, for all intents and purposes, be just as random. :-P

RNG can be annoying, for sure, but that's the way boosters are designed. If you don't want to face that randomness, you buy singles. I'm only one person, but my opinion is that there isn't an issue, and judging from the Magic community they tend to agree.

blakegrandon
08-26-2013, 05:57 AM
Except your last post said that Magic had done it right, and my post was just clarifying that Hex will, for all intents and purposes, be just as random. :-P

RNG can be annoying, for sure, but that's the way boosters are designed. If you don't want to face that randomness, you buy singles. I'm only one person, but my opinion is that there isn't an issue, and judging from the Magic community they tend to agree.

Magic physical boxes don't use RNG, they cut from sheets. RNG isn't cutting from sheets, it's randomly generating cards, which means some cards might take a really long time to show up.

RNG isn't just annoying, it's insidious and leads to situations where you spend hundreds of dollars/hours and get nothing to show for it.

RNG is terrible for gaming because it leads to players not getting anything for their time/effort, if I wanted to get nothing for working my ass off then I would just go to work!

Hopefully there is minimal to no "RNG" involved and they stick to their guns of printing sheets(which means every X "boxes" you buy, you'll get said rares/legendaries)

Throwing RNG in the mix and people get RNG Screwed.

jaxsonbatemanhex
08-26-2013, 06:16 AM
Ok, let's clarify. When we say RNG, we're just referring to the random factor. In a digital game, they pretty much do use the RNG (and I'd be surprised if MTGO doesn't also do this). With the boxes, we're talking about the chances of getting an individual card from X samples.

It doesn't matter that when it comes to boosters, they're cut from physical sheets. With how much product there is, there are still no guarantees that you'll get any individual cards regardless of how many booster boxes you open. If we say there's a set in a physical and digital card game, with 100 rares, 50 legendaries, and 2x rares in every 'print run', then in the physical game, every time you open a pack you have a 2/250 chance of getting an individual rare, and a 1/250 chance of getting an individual legendary, modified by a negligible amount due to a single booster box containing boosters from 1-2 print runs reducing the chances of seeing multiples. In a digital game, if they use those odds listed before (1/250 and 2/250), then you'll have the same chances of seeing the rares/legendaries.

The only time it makes a difference is if you can track that you're getting an entire print run from a physical card game, and unless you buy a huge amount of product directly from them Wizards isn't going to guarantee you that you're getting an entire print run (not to mention that using M14 as an example, that's around 143 boosters to guarantee 1 of each of the 15 mythics).

I'm not even saying I'm against this. I'm just saying that whether they use RNG or use guaranteed 1 copy of X card from every Y packs, your odds of seeing it are going to be for all intents and purposes the same, and even if you open 1000 packs you'll have no guarantee of seeing it. If you're suggesting that you should get a guarantee to see the card eventually, then you're deviating from Magic's system (or referencing a situation where you buy literally thousands of dollars worth of product off Wizards).

And just to really nail the point home:


Hopefully there is minimal to no "RNG" involved and they stick to their guns of printing sheets(which means every X "boxes" you buy, you'll get said rares/legendaries)
This is only the case if they guarantee you you're buying your 5-6 booster boxes from the one print run, which is not likely to happen even if they go with the non-RNG print run system, and is not the system Magic/MTGO uses. If they don't guarantee this, then you won't necessarily get said rares/legendaries.

jaxsonbatemanhex
08-26-2013, 06:31 AM
Double post: I see from your other thread that you're concerned about getting the same rare 2+ times within a few boosters.

Firstly, buying a booster box and cracking cards from these doesn't eliminate this as a possibility. To my knowledge, most booster boxes have boosters from 2 print runs in them, so you can still get multiples.

Secondly, if you're cracking individual boosters and can't guarantee they're from booster boxes (ie. Magic online), then you could well and truly get multiple rares of the same kind in a row.

At the end of the day, if you want a system that eliminates this or guarantees some sort of variance or whatever, offer one that's decent and not open to abuse, and has enough randomness within it. As it stands, there's a built in system to deal with the randomness of boosters, and that's trading and the auction house. ;-)

Xenavire
08-26-2013, 06:43 AM
I am just going to chip in here - as of now we can't buy boxes. Feel free to buy 20-40 packs to simulate a 'box', but there is no way in which you can guarantee that it would resemble actually opening a box of boosters.

Unless they offer boxes in the shop, this whole point is moot, because buying mutliple single boosters is just going to be like RNG even in a card shop. (My own card shop had a habit of letting a box get down to about 10-15 boosters left, then opening a new one and mixing them in. You had no idea if the boosters were going to contain foils or rares based on what had already been opened, unless you bought the entire box before they opened it - and it was always cheaper to buy boxes online.)

So there is no point arguing this in terms of boxes, argue in terms of single packs - then you will realise the simple fact - it is RNG no matter what you do.

MoikPEI
08-26-2013, 06:43 AM
I think real-life printing uses 'ratio controlled insertion'.
Card are placed in something of a pre-determined order.
Wouldn't surprise me if the back-end tracks how many of each card they give out and tries to keep them balanced.

One thing I remember from helping a friend open display cases back in, like, I think maybe the Weatherlight cycle: The chase rares were always the bottom three packs in the case, and they always had the same order each time (the bottom left pack was always this certain one, bottom middle was always this specific other, bottom right was specific rare). If you opened a full case, you got the chase rare. (I think this was before Legendaries were a thing).

Kroan
08-26-2013, 06:44 AM
Arguably, drafting is opening a box. it's 8x3 (24) boosters and the remaining boosters are price support.

Xenavire
08-26-2013, 06:47 AM
Arguably, drafting is opening a box. it's 8x3 (24) boosters and the remaining boosters are price support.

Without knowing when the boosters are generated though, that point only raises more questions. And even assuming that, a single person would never have a chance to get all the rares and legendaries in that 'box', so it might still come down to RNG (specifically the prize packs.)

jaxsonbatemanhex
08-26-2013, 06:50 AM
I think real-life printing uses 'ratio controlled insertion'.
Card are placed in something of a pre-determined order.
Wouldn't surprise me if the back-end tracks how many of each card they give out and tries to keep them balanced.

One thing I remember from helping a friend open display cases back in, like, I think maybe the Weatherlight cycle: The chase rares were always the bottom three packs in the case, and they always had the same order each time (the bottom left pack was always this certain one, bottom middle was always this specific other, bottom right was specific rare). If you opened a full case, you got the chase rare. (I think this was before Legendaries were a thing).
Rares in packs do follow a pattern within boxes, which has lead to box mapping, where a person who buys a box can, with a degree of accuracy, determine which packs contain certain rares after opening a few central packs. Which means theoretically they can open these central packs, then grab the money rares from the other packs (by following the map), then selling the other boosters for a net profit on the booster box.

Given that Hex is completely digital I can't imagine that people would be able to do something akin to box mapping, even if they do end up selling booster boxes in the store. I actually think booster boxes are a good idea, I just don't see using an RNG system with the odds of rares and legendaries being based on a print run being a bad thing. For anyone that doesn't like randomness they don't have to bite; they can simply buy singles, which is on average the cheaper alternative.

I haven't watched this vid myself, but I've seen other box mapping vids which show how its done; I can't imagine this is any different: http://www.youtube.com/watch?v=9zCNT3IJNoA

blakegrandon
08-26-2013, 07:48 AM
At the end of the day, if you want a system that eliminates this or guarantees some sort of variance or whatever, offer one that's decent and not open to abuse, and has enough randomness within it. As it stands, there's a built in system to deal with the randomness of boosters, and that's trading and the auction house. ;-)

MTG didn't really use RNG because they pre-determined how many of each card to print for a set, if you want to see RNG in action check out D3....
That pretty much turned me off of RNG when it comes to using a truly randomized system, because it really sucked all of the fun out of the game.

Why farm for hundreds of hours if you can't get anything that you might want or others might want?

I hope Cryptozoic can deal with RNG and make it a fun experience instead of let's beat our heads against a wall for hours experience.

jaxsonbatemanhex
08-26-2013, 08:01 AM
Auction house/secondary market. At least with a game like Hex/Magic, you can buy and trade for everything you need. With something like WoW the raid drops are more often than not BoP - now that's an RNG experience which is truly annoying due to no way to entirely circumvent it, and only one way to boost your odds (coins, unless they've changed that system since I last played).

If boosters were the only option I could understand frustration, but they're not the only option.

Shadowelf
08-26-2013, 08:11 AM
If you are curious this is how Cory explained it http://www.twitch.tv/weekingeek/b/413067790 check 33:10-35:09

blakegrandon
08-26-2013, 08:13 AM
If boosters were the only option I could understand frustration, but they're not the only option.

The auction house/secondary market shouldn't be the only method to get the cards you want, if it is then it's a flawed system that quickly becomes pay to win. Granted cracking packs is the same because you're buying as many packs as it takes to get X, but you should at least in theory be able to get the cards you want via drafting.

I guess we'll see how Hex ultimately plays out, at least the cards aren't "randomly" generated stat wise, the biggest problem with D3 was that you'd be dealing with RNG of the stats on top of RNG of the drops, which pretty much destroyed the ability to "find" anything good.

ossuary
08-26-2013, 08:43 AM
Oh goodie, TWO topics on the main page about RNG and pack distribution. So exciting.

Nobody is saying the AH should be the only way to get a card you want. But it's an undeniable fact that HAVING the AH makes the process far less painful and the availability of any given card greatly increase over having to actually crack it in a pack / draft yourself.

Back in my Magic playing days, I can't even begin to tell you how difficult it was trying to put together a set of Unlimited, even when the set was still in print. I went through at least 5 boxes' worth of packs and still only had about 2/3 of the set and less than half the rares. Then I found a really popular card store a few towns over that did a silent auction every Friday night... I finished the set in only 2 visits and much less money than it would have taken to buy even 2 more boxes of cards. I'm sure I COULD have gotten all of the rares eventually, but buying the missing ones was way easier, both timewise and moneywise.

Having options is good. Even if the RNG isn't perfect (this is a problem that ALL computer systems have struggled with, basically forever), at least having the AH will mitigate the frustration level somewhat.

YourOpponent
08-26-2013, 09:15 AM
What I'm thinking is they will do it in a format that's a a sort of hybrid between the normal physical card format (where they're printed i sheets like MTG to keep a balance on cards and rarity by amount) and the digital aspect...so Each "box" if you will could be larger than a normal box of boosters. This could for example be a box of say 1,000 boosters. Each set 1 pack when it is opened would be from that "box" of boosters...when that "box" of boosters is gone then the next "box" of boosters for set 1 starts being used for everybody. That way for some people...YES it might feel pretty random to those that just occasionally open a couple of boosters once a week...but for those that open a booster one right after another...they would be much more likely of getting a variety of cards than if it was all just "random"

Deathfog
08-26-2013, 12:39 PM
Easiest and most likely thing to occur is that all packs are set X specific, primal or not generated at creation. Beyond that there is nothing database-wise beyond keying to track/prevent fraud/duping. Once opened a treasure chest of random rarity is generated along with 15? cards random generated based on the set and whatever events are going on. Packs in say MtG or Yuigoh were constructed randomly around boxes for a set number of extremely rare chase cards per box, but there are no boxes or anything resembling them in a digital game.

Remember the thing about Gencon promos being available next year during the week of Gencon, this more than insinuates that packs are nebulous in contents until opened. On the upside though, nicely integrated auction house will allow for easy trading of cards you don't want for those you do with a small % gratis to Crypto.

Unhurtable
08-27-2013, 04:36 AM
I didn't say that. I said that they'll be generated in front, but stored in a pool. Once you open a pack the server will return a row from the pool and move to the next row for the next pack.

It will still take up more memory? That was my point, that the servers will (if the cards are generated pre-opening, regardless of if its a pool or not) use more memory. Even in the pool example, the server might even generate more cards than boosters will be consumed (as in more than 15 times as many cards as boosters sold / generated). This could be prevented by essentially generating new cards every time a new booster was bought / generated, but it would still cause the server to use more memory.

Kroan
08-27-2013, 04:46 AM
It will still take up more memory? That was my point, that the servers will (if the cards are generated pre-opening, regardless of if its a pool or not) use more memory. Even in the pool example, the server might even generate more cards than boosters will be consumed (as in more than 15 times as many cards as boosters sold / generated). This could be prevented by essentially generating new cards every time a new booster was bought / generated, but it would still cause the server to use more memory.
1) You're overestimating memory usage for this or underestimating how big servers actually are
2) Obviously you only need about 1000 pack-combinations or so (maybe even less). Once you come to the end of the table with the definitions you go back to the start.

Unhurtable
08-27-2013, 08:10 AM
1) You're overestimating memory usage for this or underestimating how big servers actually are
2) Obviously you only need about 1000 pack-combinations or so (maybe even less). Once you come to the end of the table with the definitions you go back to the start.

1. No, I'm not overestimating the memory this would take.

I think the difference is neglect able. I can't come up with a single instance where it would matter. Important is that if you rip packs after each other they're different. Especially for sealed and draft.
I simply presented a single instance where it would matter (memory vs speed). I never said "they will have a problem with memory", I said "there will be a difference in how much memory is used".

2. A system of 1000 pack combinations could work. The potential issue is that legendary distribution would be static. If we assume that the legendary-to-booster ratio is 1:100, at 5 different legendary cards there would only be 2 different pack combinations for each. If there is any form of a collective attempt to map the table, dev time might be needed to shuffle the table which leads us right back to randomization.

Xenavire
08-27-2013, 08:33 AM
1. No, I'm not overestimating the memory this would take.

I simply presented a single instance where it would matter (memory vs speed). I never said "they will have a problem with memory", I said "there will be a difference in how much memory is used".

2. A system of 1000 pack combinations could work. The potential issue is that legendary distribution would be static. If we assume that the legendary-to-booster ratio is 1:100, at 5 different legendary cards there would only be 2 different pack combinations for each. If there is any form of a collective attempt to map the table, dev time might be needed to shuffle the table which leads us right back to randomization.

So they basically need to invest in making the number of patterns large enough that it is impossible to map, but without actually letting the boosters be random. That would be difficult, but possible. I do think it might just be simpler to create and algorithm for it though, with a few catchall bits of code to make sure things stay even.

1) No doubles in a pack. (For obvious reasons, and simple to do.)

2) Do not allow X cards to be in X number of packs after it is opened. For example, if you crack a legendary, for the next 15-20 packs opened on the server, there is no chance of anyone opening another one until those 15-20 packs have been opened. The same could be used for rares and uncommons (possibly commons also, but I don't see the need exactly.) This would serve to balance out what is opened, while leaving it random. It also means the actual drop rates can be MUCH higher if they want, as they are locking out any chance of having repeat cards for X amount of packs.


I think this would be the simplest solution, would not need to log all packs opened (after a certain amount they could start being wiped, say 200 packs and every pack after that gets cleaned.) This would take very little memory, would allow for whatever distribution that they wanted, and would not be mappable. It would also leave the RNG without it being punishing.

The_Shatner
08-27-2013, 08:54 AM
You don't need fixed mappings. You can have each pack be "true random" and set the cards in the booster at the time the pack is generated. To store 16 ints (15 cards IDs [idk how big hex boosters are] and one Pack ID) is all of 64 bytes. With one GB you can specify 16,777,216 Boosters. Memory is not something to be concerned about. They could retain a history for every booster they ever generate for the life of the game if they want. (I'm not sure what the indexing overhead would be in this case; it depends of if you want to be able to search for what packs contain a given card or if you just want to see what cards are in a given pack. In any event it's not that big of a deal.)

Generate boosters in batches of one million according to the desired ratios and whatever pseudo-physical grouping you want and then assign them out at "random" when purchased.

I don't mean to say this is the right way or the wrong way, but you can simulate real-life distribution to a T if you want; while still being completely 100% free of abuse/manipulation.

Vorpal
08-27-2013, 09:17 AM
They talked about hoppers and boxes and trying to emulate how cards are distributed in physical card games, in the digital format.
While, maybe, from a practical standpoint, meaningless. I was curious if the card packs when placed in your account, already have the cards in the pack selected before opening the pack. OR will the card pack get the cards selected, when the pack is opened.

I would bet money on the latter.

The former is far more difficult programmatically, and also potentially open to abuse. If each pack knows what is inside it at all times, then you know someone, somewhere, is going to be able to figure out how to access that information.

Also they have already said that some things will be generated based on when you opened the back (treasure chests, hexcon promos, etc) so it makes sense they would do that for the rest of the cards as well.

Also note that generating the cards from a pool when you open it could be adjusted in any number of ways to account for what packs have previously been opened to maintain some sort of proper distribution.

The_Shatner
08-27-2013, 10:16 AM
{snip}
The former is far more difficult programmatically, and also potentially open to abuse. If each pack knows what is inside it at all times, then you know someone, somewhere, is going to be able to figure out how to access that information.
{snip}
Also note that generating the cards from a pool when you open it could be adjusted in any number of ways to account for what packs have previously been opened to maintain some sort of proper distribution.


Neither solution is difficult programmatically. I know it is rather dismissive to just say it like this but it isn't. The "generate boosters at time of opening" solution has one hard part: developing a scheme for adjusting probabilities on the fly that is not sensitive enough to be abuseable, but still reactive enough that you end up with a good distribution. Nothing is hard for the "pre-generating boosters" solution.

Generating the boosters in batches is not open to abuse; the contents of the booster, and perhaps even the boosterID would never reach the client-side application. All the client app needs to know is "I have X boosters of set Y". It sends up a request to open a booster of Set Y and the server sends down what cards you got after looking up what boosterIDs are registered to your account for set Y and just picking one.

For generating boosters on-the-fly using probabilities that adjust to maintain distribution:
Anytime you have the client's modifying the probabilities on-the-fly you are open to abuse. Is the potential for abuse large enough for a single user? No. It's not really even feasible for large groups of people. All an attacker can really do is stop opening packs for some period of time after having good luck to allow the global probability to recover (assuming an individual's luck even has a noticeable affect on the global probability) or vice-versa. One's ability to abuse this is very small; though admittedly not 0.

Whatever the devs decide to do (pre-compute and store booster contents or generate them at time of opening with adjusting probabilities), neither solution is hard and neither solution is noticeably abusable. It really just comes down to what they want to do.

Vorpal
08-27-2013, 10:36 AM
Neither solution is difficult programmatically.

A can be more difficult than B without being difficult.

I stand by what I said: making every pack know what it is in it (generating contents at pack purchase) is more difficult programatically than generating the contents when you open the pack. This is pretty obvious.


Nothing is hard for pre-generating boosters.

Generating the boosters in batches is not open to abuse; the contents of the booster, and perhaps even the boosterID would never reach the client-side application. All the client app needs to know is "I have X boosters of set Y". It sends up a request to open a booster of Set Y and the server sends down what cards you got after looking up what boosterIDs are registered to your account for set Y and just picking one.

Ok, first of all, what you are describing is not pre-generating boosters. (Obviously). It is generating boosters when you open them. That's the part we are saying is easy. Saying 'crack open a pack of set Y for me' is generating boosters when you open them. Not generating the contents before opening (say, at purchase) and then somehow carrying all this information along with the booster as it travels around.

Furthermore, it is obviously open to abuse. If I have only ONE booster registered to my account, then if I understand the method you are suggesting (pulling from a pool of pre-determined packs associated with my account) obviously it is set in stone what I am going to get when I open it. This is clearly open to abuse.



For generating boosters on-the-fly using probabilities that adjust to maintain distribution:
Anytime you have the client's modifying the probabilities on-the-fly you are open to abuse.

Why is the client modifying the probabilities? That would be silly. You could simply have the server say "Ok, this guy wants a booster of set X opened. Lets do a quick check of all the cards the server has opened in set X, by rarity, and see if there are any problems".

I'm not saying you would need to do this or even want to. But you could, and if you did, you wouldn't involve the client at all.

Having each pack have its contents determined before it is opened requires that each pack have a unique ID, which is associated with a set of cards in a database somewhere. Someone could easily connect these pieces of information, and there you have the abuse. The IDs would have to exist clientside.

Thus, this approach is clearly more complicated, and more open to abuse, than the approach of generating cards when the pack is opened.

The_Shatner
08-27-2013, 11:11 AM
A can be more difficult than B without being difficult.

Neither solution being difficult precludes either from being "far more difficult" than the other.


This is pretty obvious.

It's certainly not obvious, it's not hard to generate boosters in batches.

Reading the rest of your post it seems you might just be trying to get a rise out of me: using language like "Ok, first of all" and "(Obviously)". Not assuming anything, I'll still respond anyhow. I'm really not trying to flame, I'm just explaining how neither solution is hard nor (noticeably) abusable.

What I was describing was indeed pre-generated boosters. The server builds one million boosters at a time by getting one million rares, three million uncommons, and 11 million commons of whatever ratios they want. Bogosort (heh) each set into a queue, and take the top 1 rare, 3 uncommons, and 11 commons to make a booster (assuming a 1-3-11 per pack, I don't know what the actual distribution is). Store the 15 card IDs along with an increasing boosterID. Repeat a million times and you're done. When someone buys a booster they get one of the boosterIDs associated to their account. The boosterID and certainly not the cardIDs are ever sent down to the client. This is neither hard nor abusable, no sensitive information ever made it client-side. To open a booster you just ask the server to open one of your packs for you without specifying any IDs and the server just picks a pack registered to you and relays what cards were in it. You mention someone infiltrating the database as the source of abuse. If you have unauthorized access in your database you have problems far bigger than pixel cards. You probably have sensitive customer data (credit cards and whatnot) leaking. To clarify, the client -Never- accesses the database to even know where it is. It just calls an external API where all it sends is the AccountID and what kind of booster it wants to open (along with whatever validation information is necessary) and the server sends back what cards you got.

If you want to insure no booster has two of the same card it gets more slightly more complicated but its really not that hard of a problem.

For on-the-fly generation:
Every card has a probability when the server goes live. When a pack is opened the algorithm for picking the cards is run and you have a booster. Each card which was picked has its probability go down for packs opened after it and each card that wasn't picked has its probability go up. In this way the user has indeed modified the probabilities or can try to infer what the current global probability is. Abusable? Technically yeah, but not really.

Re-reading what I wrote the first time; it was hella-confusing. The client is not directly modifying the probabilities, but they are indirectly even if not a noticeable amount. Hopefully this helps explain the two solutions.

Vorpal
08-27-2013, 11:30 AM
Neither solution being difficult precludes either from being "far more difficult" than the other.

I believe you are incorrect. That's jut the way the English language works. Walking and chewing gum is obviously harder than just walking, but neither is hard.

I find countering an "A is harder than B" by saying "You're wrong, neither is hard!" to be arguing in bad faith and shifting the goal posts and not actually addressing what was written.

If you don't think A is more complex than B, you should argue that, not attack an argument I didn't even make.



It's certainly not obvious, it's not hard to generate boosters in batches.

I am not describing generating boosters in batches. I'm not even sure what you mean by the term. We are discussing generating the cards when the booster is opened, or when the booster is created.


What I was describing was indeed pre-generated boosters. The server builds one million boosters at a time by getting one million rares, three million uncommons, and 11 million commons of whatever ratios they want. Bogosort (heh) each set into a queue, and take the top 1 rare, 3 uncommons, and 11 commons to make a booster (assuming a 1-3-11 per pack, I don't know what the actual distribution is). Store the 15 card IDs along with an increasing boosterID. Repeat a million times and you're done. When someone buys a booster they get one of the boosterIDs associated to their account.

I agree this is pre generating boosters. However, saying "Open me up a random pack of set Y", as you described earlier, is not, and is instead exactly how generating boosters when they are opened will work.


The boosterID and certainly not the cardIDs are ever sent down to the client.

Booster ID's would have exist client side, because of the bazaar. All packs would have to have unique identifiers on the client side because of that (and trading). It's not as simple as just giving each account a pool they are going to open from and leaving it at that. Each booster would have to be tracked individually and uniquely, because they can change hands and you need to know which one is changing hands. Each booster ID would be mapped to 15 card ID's, in a database somewhere. If someone somehow got access to this database (which would of course be server side) then he could figure out what was in his card pack.

It is self-evident that maintaining a database of what is in each pack is harder than not maintaining such a database. Arguing that it doesn't rise to the level of what you consider to be 'hard' does not change that.


You mention someone infiltrating the database as the source of abuse. If you have unauthorized access in your database you have problems far bigger than pixel cards

Again, this is not addressing the point I made, but instead shifting the goalposts and addressing a different point. I find this rather frustrating. It is clearly and self-evidently more open to abuse than the 'generate cards when you open the pack' method because there is no database to access in an unauthorized manner using that method. Your attempt to just handwave it away as 'well you have bigger problems' is not addressing my point.


For on-the-fly generation:
Every card has a probability when the server goes live. When a pack is opened the algorithm for picking the cards is run and you have a booster. Each card which was picked has its probability go down for packs opened after it and each card that wasn't picked has its probability go up. In this way the client has indeed modified the probabilities or can try to infer what the current global probability is.

The client doesn't send this information to the server, the server sends this information to the client. The client is thus not modifying anything. All card draws take place on the server side.

The client could indeed hack into the database of all card probabilities and perhaps set up a macro to crack open packs when it was 'due' for a legend to be drawn.

That is however less abuse able than cracking into a database telling what is in each card pack.

The_Shatner
08-27-2013, 11:59 AM
When I say batches, I mean determining the cards in the booster when they are generated, which is only useful if you do in large groups. Otherwise you aren't helping to be any closer to the target distribution than before.

For trading you don't need to know the BoosterIDs. You can still just tell the server to send an anonymous booster of Set Y to a different player in exchange for whatever.

You either have a database of pre-determined boosters or you have a database of probabilites that are shifting around. Every solution will require data persistence. If we're talking about infiltrating the database you could just modify the list of cards that are in your collection and don't even need to bother messing with the booster mechanics. There will always be a database.

The probability information is never sent anywhere, neither from client->server nor from server->client. The server just tells the client what cards he got for on-the-fly generation. But the client can try to infer from this information if now is a good time to continue opening boosters or if it should wait.

If you still have questions I'd rather continue the conversation through PMs.

Vorpal
08-27-2013, 12:19 PM
For trading you don't need to know the BoosterIDs. You can still just tell the server to send an anonymous booster of Set Y to a different player in exchange for whatever.

You'd need to know which booster was sent, or you don't know which cards to move from the pool of player A's account to that of player B's account.

Likewise for the bazaar. If I put a booster on the bazaar, it has to be uniquely identified and the associated cards brought along with it when it is eventually sold to another player. And those cards have to be removed from the pool associated with my account. They can't just be anonymous boosters of set Y with no associated card information.

And of course, there is the case of 'what if I only bought one booster pack anyway' where your pool of available cards is exactly one set.


You either have a database of pre-determined boosters or you have a database of probabilites that are shifting around. Every solution will require data persistence. If we're talking about infiltrating the database you could just modify the list of cards that are in your collection and don't even need to bother messing with the booster mechanics. There will always be a database.

Yes, but intrusions requiring the modification of the database are harder/more easily detected than intrusions that simply read a database and don't perform any data modification.


But the client can try to infer from this information if now is a good time to continue opening boosters or if it should wait.

Absent doing a passive read on the server's probability database (which I admit is a possibility) I don't see this being the case, because you'd have no idea how many other people were opening packs at the same time you were. Your own sample size would be far too small to draw any conclusions from.

Turtlewing
08-27-2013, 12:56 PM
Implementing boosters as "loot tables" seems needlessly complex.

The main property of a "print run" that is difficult to simulate with a loot table is that the probability of pulling a particular card varies drastically as the pool of cards is depleted. That is the probability of this event does depend on the results of previous events. Loot tables would not do that naturally, whereas generating a booster/card pool does. This is similar to how you can count cards in Blackjack, but you can't "roll out the ones" on a d20.

It makes a lot more sense to do a simulated print run, which either generates a pool of boosters (give each booster a random ID and the client never needs to know the contents of that booster, just it's ID) or a pool of printed cards from which an anonymous booster selects cards when opened.

My gut tells me that generating the boosters directly will also handle primal packs better (when you create a print run you create some number of primals as well), but that might not be true.

Gwaer
08-27-2013, 01:26 PM
Honestly, the client need never know the booster ID, just like shatner said. the client knows it has 100 boosters, it can identify each of them as booster 1-100 locally, the server knows which booster ID refers to which local booster number, client reports to the server that local booster 15 is being traded to another player, server checks and finds out the actual booster ID to transfer over to the other player. That players client knows that it is booster 276 on that end and informs the server that playerb-s1p276=boosterid.

It can be implemented all sorts of ways. I'm pretty sure that it will be the simulated print run turtlewing discusses. That's how CZE has described it. When you open the booster the client query's the server for the cards, at that point the server also creates a treasure chest for the pack, which is specially marked if it's during an event, possibly the contents of that chest are pre-generated at that point as well. Possibly they will be generated when the chest is opened. It's not as important.

The entire reason to do it like that is for drafts. They're very focused on making drafts fun, and true RNG of drafts has the potential to be much less fun than slightly engineered packs.

Vorpal
08-27-2013, 01:44 PM
A local booster ID is still a client side booster ID. All boosters need unique ID's client side. Whether those ID's are globally unique or unique only to the player and needing a lookup table to get the actual global unique ID doesn't matter much from an abuse standpoint - the abuse would happen if someone found a way to somehow read the card ID to global booster ID database, and if they can read that, they could certainly read the user booster ID to global booster ID database.

And as I have pointed out, the bazaar makes things somewhat more complicated.

I understand the desire to say 'boosters can be anonymous and just pull from a potential pool of cards associated with your account' because that method is less open to abuse. A player might discover the database of cards associated with his account, but if he has no idea which set of cards will be given him by opening which booster, it's not as open to abuse.

However, with trading and the bazaar it becomes necessary to give each booster a unique ID on the client side, and you can't just issue the player an anonymous amount of X tokens each of which gives you a pull from the sub database of all cards that were in those packs. Plus of course, the user could just buy such packs one at a time in which case the relation between his card pack and the card details is obvious.

Now, is likely we're going to have tons of players hacking into the card database to know what card are in what pack? Of course not. I regard it as extremely improbably, especially as CZE has stated they built their system from the ground up to be safe and secure. It is however, obviously more probably in a system where you have such a card database than in one where you do not.

If CZE chooses to have the contents every card pack determined at creation, not when it is opened, I'm not going to worry very much. They will have chosen the riskier path but I am confident they can mitigate such risks.

I will be rather surprised if they do this, however, given that much of what I have seen points in the direction of pack contents being determined when you open them - such as treasures and promo cards having been mentioned explicitly as being generated based on when you opened the pack.

The_Shatner
08-27-2013, 02:05 PM
I hadn't considered having a decreasing pool of cards that would be drawn from. I see it as being easy to implement but it has two problems that I can see (only one hardcore problem, the other is only kind of an issue).

Hard problem: You have to constantly lock the datasource for the pool everytime a booster is opened in order to avoid race conditions. Probably not a huge concern; but we don't really know how many people will ultimately be playing and I'm also not practiced in database performance, just design.

Soft problem: If you want to forbid having packs with duplicates, using a pool becomes more difficult. You can mitigate the problem by starting a new pool when the old one starts to dry, not just when it empties completely and then injecting the remnants of the old pool into the new one, but this just delays the problem. On the other hand, since you cannot end up with duplicate rares/mythics (or w.e the hex equivalents are) as there is only 1 per pack, you can fudge the distribution for the more common cards by just replacing duplicates with random cards of the same rarity. You wont have perfect distribution of the more common cards but that's tolerable, I guess. If that's the case (you only care about the perfect distribution of rares) you could just use a pool for the rares and use probability at run-time for the uncommons/commons.

I'm with you, though Gwaer; that generating the boosters ahead of time is probably better. I think "printing" a large set of cards at once, in the perfect ratios you want, and arranging them in unique, one-time boosters is best. Client never even needs the boosterID; client can treat the boosters anonymously just with their set #. Single-card trades need no unique ID, and booster trades can still be handled anonymously. Rather than phrasing it as "trading booster 15 from player A to B", it could just be "trade any one booster player A has from Set 1 from player A to B". From the user's point-of-view these two transactions are the same.

Ultimately the developers are gonna do what they're going to do, but it's fun to theorycraft.

Banquetto
08-27-2013, 02:44 PM
Honestly, the client need never know the booster ID, just like shatner said. the client knows it has 100 boosters, it can identify each of them as booster 1-100 locally, the server knows which booster ID refers to which local booster number, client reports to the server that local booster 15 is being traded to another player, server checks and finds out the actual booster ID to transfer over to the other player. That players client knows that it is booster 276 on that end and informs the server that playerb-s1p276=boosterid.

Actually, given that there shouldn't be any way for the client to glean any usable information from a booster ID, there should be no reason to care which of your boosters you are selling or trading. So the client could just say to the server "trade a booster" and the server could take the first one from that account's list of booster IDs. No need to say "trade #15 of my 100 boosters".

(edit: obviously once there are multiple sets, it will be "trade a booster from set 2", not just "trade a booster")

The_Shatner
08-27-2013, 03:16 PM
This guy gets it. And evidently is better at explaining things than I am.

Gwaer
08-27-2013, 06:08 PM
That's true, there is no need to have any ability to uniquely identify the booster you're trading client side, I suppose they could have different wrappers and you only want to trade your least favorite wrapping... Furthermore, some people like to have more control over which booster is going, they might feel lucky about one, and not another. It's not that much more complex to add a mechanic to trade with specificity while keeping boosters basically anonymous.

But all in all, it doesn't really matter does it. I was just saying it's possible to do it either way.

FeelNFine
08-27-2013, 10:56 PM
An easier way could be an adjustable drop table. Say there are 20 rares, each having 5 spots out of a d100. Rare 1# gets pulled a lot, rare #3 the least, the table then adjusts so that #3 has 6 spots, and #1 gets 4.

Turtlewing
08-28-2013, 01:44 PM
A local booster ID is still a client side booster ID. All boosters need unique ID's client side. Whether those ID's are globally unique or unique only to the player and needing a lookup table to get the actual global unique ID doesn't matter much from an abuse standpoint - the abuse would happen if someone found a way to somehow read the card ID to global booster ID database, and if they can read that, they could certainly read the user booster ID to global booster ID database.


If someone can read the database, they could also read the user data including payment methods (yes the payment data should be encrypted but really if it's that big a deal they could encrypt the booster table as well).

It's important to keep perspective when talking about security breaches.

If the client only knows the random ID of it's boosters than it has no information on the contents of those boosters. If you can breach the server to the point that you can access data that the client isn't supposed to have than you can do much worse than peek at a booster before opening it.

Turtlewing
08-28-2013, 01:48 PM
An easier way could be an adjustable drop table. Say there are 20 rares, each having 5 spots out of a d100. Rare 1# gets pulled a lot, rare #3 the least, the table then adjusts so that #3 has 6 spots, and #1 gets 4.

That will not be probabilistically equivalent to a "print run".

To get an equivalent probability you would have the loot table remove the entry it rolled, and roll 1-99 next time. This however, exactly the same thing as the "generate a print run and allocate cards when the pack is opened" method.

Zaelesis
08-29-2013, 08:36 AM
What I was describing was indeed pre-generated boosters. The server builds one million boosters at a time by getting one million rares, three million uncommons, and 11 million commons of whatever ratios they want. Bogosort (heh) each set into a queue, and take the top 1 rare, 3 uncommons, and 11 commons to make a booster (assuming a 1-3-11 per pack, I don't know what the actual distribution is). Store the 15 card IDs along with an increasing boosterID. Repeat a million times and you're done. When someone buys a booster they get one of the boosterIDs associated to their account. The boosterID and certainly not the cardIDs are ever sent down to the client. This is neither hard nor abusable, no sensitive information ever made it client-side. To open a booster you just ask the server to open one of your packs for you without specifying any IDs and the server just picks a pack registered to you and relays what cards were in it. You mention someone infiltrating the database as the source of abuse. If you have unauthorized access in your database you have problems far bigger than pixel cards. You probably have sensitive customer data (credit cards and whatnot) leaking. To clarify, the client -Never- accesses the database to even know where it is. It just calls an external API where all it sends is the AccountID and what kind of booster it wants to open (along with whatever validation information is necessary) and the server sends back what cards you got.
Just wanted to point something out: If you save packIDS to an accountID, you could in theory end up with a situation where A) 1 player unknowingly has access to all the chase rares of a set or B) every player can open X packs (different per player) and end up having 1 of every card. Neither outcome, although extremely rare to actually happen, are desirable or random in any way. The game is still supposed to feel as if you are opening real packs, so some degree of randomness. The real issue will come when you open the pack at the same time as 100 other people, who gets what?

Facilier
08-29-2013, 05:32 PM
Why couldn't the system just stick with the print run, and rather than loot tabling the cards, at the time the pack is opened simply generate the next booster? That way everyone is effectively drawing from a booster box until that one is exhausted and moving on to the next one, without the weird physical dissection of boxes getting spread around, opened at different times, etc. And with any decent player base there will not be a way of abusing this like seeing a guildie get a batch of bad rares, and then feverishly popping open boosters (since there would be a considerable number of boosters being opened around the world at any one time).

Seems like it would be way easier on storage and account info than pre-generating the booster contents and storing all the info on the account.

Turtlewing
08-30-2013, 09:58 AM
Why couldn't the system just stick with the print run, and rather than loot tabling the cards, at the time the pack is opened simply generate the next booster? That way everyone is effectively drawing from a booster box until that one is exhausted and moving on to the next one, without the weird physical dissection of boxes getting spread around, opened at different times, etc. And with any decent player base there will not be a way of abusing this like seeing a guildie get a batch of bad rares, and then feverishly popping open boosters (since there would be a considerable number of boosters being opened around the world at any one time).

Seems like it would be way easier on storage and account info than pre-generating the booster contents and storing all the info on the account.

It would take less storage but make ensuring good randomization harder (note that part of the problem is that the set can't be completely random it has to have the right balance of random and deterministic as some aspects of gameplay depend on that balance).

Most likely they'll compromise and generate some number of print runs ahead of demand and in practice the number of opened packs will be much larger than the number of unopened packs in the "real world".

Kroan
09-02-2013, 12:58 AM
We learned in the PVP panel from last week that they are indeed generating boosters when you open them. Further more you can open more than one booster at the same time, emulating ripping a box. This makes it logical that boosters in drafts and sealed will also be opened at the same time.

Zaelesis
09-02-2013, 01:09 AM
We learned in the PVP panel from last week that they are indeed generating boosters when you open them. Further more you can open more than one booster at the same time, emulating ripping a box. This makes it logical that boosters in drafts and sealed will also be opened at the same time.

I was just thinking about that. With all the conversation about timing and pack codes and what not: If you have the option to open multiple packs at once, the system can claim the next X pack codes to ensure you have the closest experience to actually buying and opening a box. Using the print run system, if you do this with a number of packs that would be multiple boxes in total, then you could almost assure that you would get almost an entire set from it. (this is assuming they follow a similar print run and boxing system that mtg does.) However as soon as you stop and wait, you break the chain and risk repeats.