Given enough time, I probably could beat a spreadsheet into submission well enough for it to do the math we're seeking. Obviously, I must have an EXACT procedure before I can do this. We have a large amount of information about this process. Unfortunately, we don't have all of the information. Please bear with me while I explain competely.
In his first post on the subject, Dark Weaver wrote:
The slot machine works with 3 reels, each reel is composed of 4 cards (not necessarily different), reels are the same.Each try uses a different set of 4 cards.You wont get upgraded cards unless you play against the FG or the Half Blood.There are cards you cannot win, you'll get a relic instead.Quantum tower is fixed (its considered a tower/pillar).I've seen nowhere a 10% thing related to shards.(would have done the calculus more interesting )
Summary of relevant information:
- Each reel contains 4 cards. Duplication is allowed.
- All three reels are identical.
- Each new spin gets new reels.
After he discovered an error in his interpretation of the source code, Dark Weaver posted a sort of-plain English version of the code that selects the cards. I have inserted carriage returns in the appropriate places to make his post more readable.
Reel creation process:
1. (init) loop:=0, ncard:=0
2. C:=random card from deck, loop:=loop+1
3. if loop > 8 goto step 5.
4. if C is a tower/pillar goto step 2.
5. ncard:=ncard+1(error)5bis. loop:=0 (error)
6. if C is upped and lvl is not 5 or 6 then C:= downgrade version of C
7. if C is a banned card then C:= relic (upped one if C is still upped)
8. if ncard <= 4 goto step 2.
9. the 4 first cards = the reel
In plain(er) English:
1. Create two objects to count different things. Name them "loop" and "ncard". Give each an initial value of zero.
2. Choose a random card from the deck, and call it "C". Add 1 to "loop" counter.
3. If "loop" is greater than 8, skip to step 5. [Implied: If "loop" is less than 8, continue to step 4.]
4. If "C" is a Pillar or Tower, return to step 2. [Implied: If "C" is neither a Pillar nor a Tower (this probably also includes Pendulums), continue to step 5.]
5. Add "C" to the reel. Add 1 to "ncard" counter.
*6. If "C" is upped, and the opponent is lower than AI4, replace "C" with its unupped version.
7. If "C" is a Nymph or Mark, replace "C" with a Relic (upped or unupped, as appropriate).
8. If "ncard" is less than or equal to 4, return to step 2.
**9. You now have a reel with 5 cards. Throw away the fifth card on the reel. Using the first four cards, create three identical reels. Put all three reels in the virtual slot machine.
* This part is a little confusing. Based on everything else Dark Weaver wrote, including his mention of making an error by resetting the loop counter (which "loop:=0" does), this is my best guess.
** This part is extra confusing. After the fourth card is selected for the reel, "ncard" = 4. This line orders the computer to run through the loop again and select a fifth card, which is never used. Maybe it's an error on Zanzarino's part, or maybe some oddity in the programming language requires it for things to work as intended. I have no idea. However, it really doesn't matter to the probabilities, since the computer always uses the first four cards for the reel. Selecting a fifth card is just something to keep the computer busy, for all I can tell.
After all of this, the spin happens. Each card has a 25% chance to appear on each reel. The chance of all three reels showing the same card is 25% x 25% x 25% = 1.5625%. If each reel has two or more copies of a particular card, this probability increases.
Now, there's another element to this, and it has a very real impact on the numbers. In Statistics, we talk about making choices "with replacement" and "without replacement". "Replacement" means, "After you select a card at random, put it back in the deck so you have a chance to select exactly the same card again."
Replacement, or lack thereof, has a small but noticeable effect on non-pillar cards. On pillar cards, though, the effect would be much larger, since pillar cards are thrown out and replaced the first 9 times they are selected for any given reel. If the selection is without replacement, that would reduce dramatically the chance for a pillar card to be on the reel.
Someone in the thread asked Dark Weaver whether the selection is with or without replacement. He never answered that question. He never even stated which method he used for his calculations. His line 2 of the code, "C:=random card from deck", implies that selection is with replacement. His next paragraph ends with the word, "discarded", which implies that selection is without replacement. Using the given information, it is impossible to know for certain which method he used. Furthermore, the given information makes it impossible to know which method the game uses.
As if all of that were not enough, Xenocidius then posted this in the same thread:
The problem is that we don't really know for sure the algorithm used to select cards in the spinner. We have one, but it may be outdated. If we had the algorithm we could calculate the probabilities exactly.
Xenocidius can pull apart the code as well as anyone, and better than most. He had doubts two years ago about the accuracy of the algorithm that Dark Weaver assembled. I've found no posts by Xenocidius after that date that relieve any of the doubts.
TL; DR - I have enough information, spreadsheet skills, and (eventually) time to calculate drop rate probabilities for all the FGs. I have insufficient information to guarantee that said calculations will be correct--that is, will match the actual probabilities within the game.
Edit: Fixed quote references.