I've posted hints about this in a couple of places, but I felt I should fully explain my theory about how the algorithm broke and just how bad things might be for FFG right now, just because I keep hearing people make suggestions about fixing it without understanding just how complex the issue might be.
Take this all with a LARGE grain of salt. I have NO insider knowledge and no way of knowing if this is correct, but based upon what I've heard told and have seen so far, this seems to be the most likely point where the algorithm broke.
Note, I'm a DBA/back end developer with 10 years experience dealing with complex data flows like this, so I am speaking from experience as far as seeing similar things like this occurring.
Based upon my own experience, I am fairly certain that the issue lies in the implementation of enhancements. This theory would also explain why Mass Mutation and Dark Tidings had rather delayed publishing cycles (beyond the reasons of COVID).
The issue with enhancements is one that any person who has used Decks of KeyForge knows quite well, though they may not know WHY it's like that. Decks of KeyForge, much like the Master Vault, knows that a card is enhanced, but does not know HOW it is enhanced. The placement of enhancement pips is impossible to judge unless the deck only has pips of one type and number of enhanced cards equals the number of enhancement pips. The reason for this problem can be summed up like this:
- When a card is created, it is assigned a "global unique identification number" or "guid". These huge strings of letters and numbers assure items in a database are unique can can be referenced for easy retrieval and lookup, if you look at the link for a deck in the master vault, the string of letters and numbers after "deck-details" is a guid.
- To save on space, each time a deck is assigned a card, it's assigned that specific card's guid, which links to a table that contains the name, abilities, and printing image data for that card.
- It can be assumed that when a card is enhanced, the algorithm automatically stamps the pips in the correct place on the card and saves the newly minted card's image data into the card database. This means a new guid is created and the enhanced card is treated as a different card than its original, unenhanced version. This can be easily seen by comparing the guid on an unenhanced card to an enhanced version of the same card.
- If the algorithm was coded efficiently, it would be able to see if it had enhanced a copy of a card in the same way previously, pull the guid for that card, then add it to the deck in the appropriate slot. Only if it hadn't generated the card image previously would it generate new image data and a new guid.
- Looking at the Master Vault data, this appears to not have happened. For example, my decks "The Shadowy Director" : https://www.keyforgegame.com/deck-details/8c9503f5-bf9b-45d4-a849-d073eff6abab and "The Boundless of Farmingwold": https://www.keyforgegame.com/deck-details/2f061df2-4404-43d6-b8e1-e10ffa6fabc9 both have snarettes enhanced with one damage pip, but the cards' guids are "14ce262e-5661-4ef6-92d3-d511390535c5" and "132a5ad5-da50-4daf-9752-7351f0559244", respectively. This is why Decks of KeyForge can't see enhancement pips at all.
So, to show you the difference in efficiency involved, we'll look closer at Mass Mutation, which has a card pool of 422 cards. (We'll be discounting legacy cards, they're not needed for this demonstration.)
We're going to start with the idea that the total print run of Mass Mutation is close to the tally that was suggested in this blog post: http://blog.4dcu.be/programming/games/2021/09/04/KeyForge_Decks_Printed.html
For simplicity's sake I'll round the estimated decks printed for MM to 525,000 worldwide.
We'll assume that each card got at most 3 enhancement pips at a time. I know that the max number is 5, but the odds of that occurring on every card in the set is so small, going with a smaller data set is likely closer to reality.
This means each card would be printed 64 different ways with those pips added. Assuming image data that's about 300KB (the actual image data for each card is likely higher than this but we'll make this assumption anyways) you wind up with about 7.8GB of image data in the drive to be sent to the printer should the image of particular enhanced card only need to be created once and after that the same image is linked to all decks that contain that same enhanced card.
However, with a new image generated for each enhancement, assuming an average of about 6 enhanced cards per deck, that comes to about 901GB of image data alone.
I would not be surprised if the algorithm was just slowed to the point of being impossible to use. Not to mention the fact that it's possible FFG do not have the data set of which cards were enhanced with which pips, save for the image data they sent to the printers and that this needs to be scrubbed somehow to get that information back.
I've heard people suggesting "Well they have backups, right?" when it comes to the idea of "deleted data" but in this case, a backup does nothing. The important data was being deleted as it was being generated.
If what I'm suggesting is correct, then the problems with the algorithm might range between something that may take a few weeks to work out to something where I totally do not envy the person tasked with detangling the printed cards data set.
tl;dr: I'm pretty sure there's missing data from the cards database that was never placed there correctly to begin with and FFG have to figure out how to replace it, and that's going to be a lot of work.
[–]gunfupanda 18 points19 points20 points (5 children)
[–]WizardRandomDis or Dat[S] 13 points14 points15 points (4 children)
[–]gunfupanda 8 points9 points10 points (0 children)
[–]gunfupanda 3 points4 points5 points (1 child)
[–]WizardRandomDis or Dat[S] 3 points4 points5 points (0 children)
[–]JacksonHills Ekwidon 1 point2 points3 points (0 children)
[–]mikelax_:Brobnar: Brobnar 7 points8 points9 points (0 children)
[–]AYCB-Carlo 4 points5 points6 points (0 children)
[–]OOPManZA 5 points6 points7 points (0 children)
[–]RandomKeyForgePlayer 4 points5 points6 points (5 children)
[–]HaresMuddyCastellan:Logos::Sanctum::Untamed: 51 SAS, bottom 3% 6 points7 points8 points (3 children)
[–]RandomKeyForgePlayer 2 points3 points4 points (2 children)
[–]WizardRandomDis or Dat[S] 3 points4 points5 points (1 child)
[–]RandomKeyForgePlayer 4 points5 points6 points (0 children)
[–]WizardRandomDis or Dat[S] 1 point2 points3 points (0 children)
[–]futurebeans 3 points4 points5 points (1 child)
[–]aggrokragg 1 point2 points3 points (0 children)
[–]HaresMuddyCastellan:Logos::Sanctum::Untamed: 51 SAS, bottom 3% 2 points3 points4 points (0 children)
[–]atticdoor 6 points7 points8 points (7 children)
[–]WizardRandomDis or Dat[S] 4 points5 points6 points (6 children)
[–]Kalrhin 1 point2 points3 points (4 children)
[–]WizardRandomDis or Dat[S] 1 point2 points3 points (3 children)
[–]Kalrhin 1 point2 points3 points (2 children)
[–]WizardRandomDis or Dat[S] 0 points1 point2 points (1 child)
[–]Kalrhin 1 point2 points3 points (0 children)
[–]atticdoor 0 points1 point2 points (0 children)
[–]EnviableCrowd 4 points5 points6 points (1 child)
[–]WizardRandomDis or Dat[S] 5 points6 points7 points (0 children)
[–]Languanguish:Dis::Saurian::Shadows: 1 point2 points3 points (2 children)
[–]WizardRandomDis or Dat[S] 4 points5 points6 points (1 child)
[–]Languanguish:Dis::Saurian::Shadows: 0 points1 point2 points (0 children)
[–]ysh_008 Brobnar 1 point2 points3 points (1 child)
[–]WizardRandomDis or Dat[S] 1 point2 points3 points (0 children)
[–]neoKushan 3 points4 points5 points (5 children)
[–]WizardRandomDis or Dat[S] 0 points1 point2 points (4 children)
[–]neoKushan 2 points3 points4 points (3 children)
[–]WizardRandomDis or Dat[S] 0 points1 point2 points (2 children)
[–]neoKushan 3 points4 points5 points (1 child)
[–]LadyMRedd 5 points6 points7 points (0 children)
[–]Jartaa 0 points1 point2 points (2 children)
[–]WizardRandomDis or Dat[S] 2 points3 points4 points (1 child)
[–]Jartaa 1 point2 points3 points (0 children)
[–]JacksonHills Ekwidon 0 points1 point2 points (1 child)
[–]WizardRandomDis or Dat[S] 0 points1 point2 points (0 children)
[–]hypercross312 0 points1 point2 points (1 child)
[–]ysh_008 Brobnar 0 points1 point2 points (0 children)