MichaelBluejay
MichaelBluejay
Joined: Sep 17, 2010
  • Threads: 81
  • Posts: 1603
Thanks for this post from:
Mission146
February 17th, 2023 at 8:55:27 PM permalink
I'm gonna start offering slot-math services so I'd like to hire someone to check my work, on at least my first few, to make sure I got it right. I wrote to a couple members here who I know used to do that work but they say they're too busy these days. Who's available, or would you recommend?

If you're suggesting yourself, please let me know how much you'd charge, since I need to make sure I'm charging at least as much as I'm paying for the double-check, to make sure I don't go into the red.

I actually did some slot-math for hire before, but it was a long time ago (the Wizard helped me back then), and I'd like my portfolio to be more recent and more extensive.

I likely won't accept anything too challenging like exploding wilds.
Presidential Election polls and odds: https://2605.me/p
Ace2
Ace2
Joined: Oct 2, 2017
  • Threads: 32
  • Posts: 2672
Thanks for this post from:
MichaelBluejayMission146
February 17th, 2023 at 9:36:18 PM permalink
Out of curiosity, how much does something like that pay per job/hour?

I’ve only done math for fun lol
It’s all about making that GTA
odiousgambit
odiousgambit
Joined: Nov 9, 2009
  • Threads: 326
  • Posts: 9516
Thanks for this post from:
Mission146
February 18th, 2023 at 5:36:22 AM permalink
be advised Professor Slots, Doctor Gamble, The Jackpot Gents, The Slot Master, & many others are already taken!!
the next time Dame Fortune toys with your heart, your soul and your wallet, raise your glass and praise her thus: “Thanks for nothing, you cold-hearted, evil, damnable, nefarious, low-life, malicious monster from Hell!”   She is, after all, stone deaf. ... Arnold Snyder
Mission146
Mission146
Joined: May 15, 2012
  • Threads: 142
  • Posts: 16823
Thanks for this post from:
vigarceauMichaelBluejay
February 18th, 2023 at 7:12:30 AM permalink
Quote: MichaelBluejay

I'm gonna start offering slot-math services so I'd like to hire someone to check my work, on at least my first few, to make sure I got it right. I wrote to a couple members here who I know used to do that work but they say they're too busy these days. Who's available, or would you recommend?

If you're suggesting yourself, please let me know how much you'd charge, since I need to make sure I'm charging at least as much as I'm paying for the double-check, to make sure I don't go into the red.

I actually did some slot-math for hire before, but it was a long time ago (the Wizard helped me back then), and I'd like my portfolio to be more recent and more extensive.

I likely won't accept anything too challenging like exploding wilds.
link to original post



Depending on how complicated it is, I would be capable of double-checking some stuff. Even with the highly complicated things, there is a good chance that I could find mistakes, if any existed, even though I might not be able to confirm that it's 100% perfect.

My charge would be nothing. However, because of that, it would be a, "I'll get to it when I get to it," sort of thing.

I'll get to it pretty quickly if I find the game interesting.
https://wizardofvegas.com/forum/off-topic/gripes/11182-pet-peeves/120/#post815219
MichaelBluejay
MichaelBluejay
Joined: Sep 17, 2010
  • Threads: 81
  • Posts: 1603
Thanks for this post from:
Mission146
February 18th, 2023 at 11:46:44 AM permalink
Quote: Ace2

Out of curiosity, how much does something like that pay per job/hour?

I don't know current rates, I guess we'll find out if someone replies. I just found the report for the job I did ten years ago. It was six variations (RTPs) of a slot, three with a progressive contribution, scatters that triggered free spins, and a banked bonus (accumulator). I think I charged maybe $1000 for it.
Presidential Election polls and odds: https://2605.me/p
MichaelBluejay
MichaelBluejay
Joined: Sep 17, 2010
  • Threads: 81
  • Posts: 1603
Thanks for this post from:
Mission146
February 18th, 2023 at 3:03:09 PM permalink
Quote: Mission146

Depending on how complicated it is, I would be capable of double-checking some stuff. Even with the highly complicated things, there is a good chance that I could find mistakes, if any existed, even though I might not be able to confirm that it's 100% perfect.

My charge would be nothing. However, because of that, it would be a, "I'll get to it when I get to it," sort of thing.

Thank you very much for the generous offer! I might take you up on this, but I'm first gonna try to find a "pro" who's done this professionally.
Presidential Election polls and odds: https://2605.me/p
Mission146
Mission146
Joined: May 15, 2012
  • Threads: 142
  • Posts: 16823
February 18th, 2023 at 3:15:51 PM permalink
Quote: MichaelBluejay

Quote: Mission146

Depending on how complicated it is, I would be capable of double-checking some stuff. Even with the highly complicated things, there is a good chance that I could find mistakes, if any existed, even though I might not be able to confirm that it's 100% perfect.

My charge would be nothing. However, because of that, it would be a, "I'll get to it when I get to it," sort of thing.

Thank you very much for the generous offer! I might take you up on this, but I'm first gonna try to find a "pro" who's done this professionally.
link to original post



I’ve been offered money for math work on slots, video keno, promotions, etc…I’ve just never accepted it. I guess, had I taken it, I could say I’ve done it professionally. Work was the same though.

Anyway, you’re very welcome. Let me know if you ever want anything looked over.
https://wizardofvegas.com/forum/off-topic/gripes/11182-pet-peeves/120/#post815219
MichaelBluejay
MichaelBluejay
Joined: Sep 17, 2010
  • Threads: 81
  • Posts: 1603
Thanks for this post from:
Mission146
February 18th, 2023 at 5:38:02 PM permalink
Okay, if you're really eager to work for free, then maybe you'd be willing to check the free samples I'm offering here? (The ones listed as being by Easy Vegas, not the ones from other sources, of course.) They're super-simple, no multiple coins, no bonus rounds, no wilds, no nuthin.

Edit, 2/19 20:45 Central: Mission, I hope you didn't start yet, because I just redid the free par sheets. I originally had too many blanks for them to alternate every other symbol on an electromechanical machine (or a representation of one).
Last edited by: MichaelBluejay on Feb 19, 2023
Presidential Election polls and odds: https://2605.me/p
MichaelBluejay
MichaelBluejay
Joined: Sep 17, 2010
  • Threads: 81
  • Posts: 1603
Thanks for this post from:
Mission146
February 20th, 2023 at 7:03:53 PM permalink
FWIW, I just added an example of a fully-programmed slot in Javascript (sans graphics) to my new How to Program a Slot Machine article.
Presidential Election polls and odds: https://2605.me/p
Mental
Mental
Joined: Dec 10, 2018
  • Threads: 11
  • Posts: 1145
Thanks for this post from:
Mission146
February 20th, 2023 at 8:09:47 PM permalink
Quote: MichaelBluejay

FWIW, I just added an example of a fully-programmed slot in Javascript (sans graphics) to my new How to Program a Slot Machine article.
link to original post


From your article:
"Play slots online
I suggest you play something other than slots because the slot odds are so bad."

It is not the odds but the RTP that is important. There are DK slots online where you are a 1:32 odds-on favorite to win on every game. You actually set your own odds and you can set them so you only lose one game in 33. The RTP is 97-98% because the payoff is 1:100. Long or short odds are not important. RTP is.

I know of several casinos where the best slot game has a better RTP than the best VP game. Plus, the slot games are usually rated better than the VP games.
This forum is more enjoyable after I learned how to use the 'Block this user' button.
MichaelBluejay
MichaelBluejay
Joined: Sep 17, 2010
  • Threads: 81
  • Posts: 1603
Thanks for this post from:
Mission146
February 20th, 2023 at 8:31:18 PM permalink
Quote: Mental

It is not the odds but the RTP that is important...

That's pretty pedantic, or rather it would be, were it correct, but it's not. You're failing to realize that the term "odds" has multiple definitions and multiple applications. I wasn't talking about either jackpot odds or the odds of winning any particular spin, and I think that was obvious to most readers. To be clear, I'm talking about the odds of walking away a winner. And for that, it's not just poor RTP that makes for poor odds, but also the speed of play, as demonstrated in my Average Loss Calculator. RTP is only one factor, but many people give it laser-like focus that it doesn't deserve, ignoring all the other factors.
Presidential Election polls and odds: https://2605.me/p
MichaelBluejay
MichaelBluejay
Joined: Sep 17, 2010
  • Threads: 81
  • Posts: 1603
Thanks for this post from:
Mission146
February 22nd, 2023 at 9:55:21 AM permalink
Improbably, my article on How to Program a Slot Machine is already #5 for a search on that phrase in Duck Duck Go, after only two days on the Internet.
Presidential Election polls and odds: https://2605.me/p
RobertMuir
RobertMuir
Joined: Aug 3, 2014
  • Threads: 0
  • Posts: 13
Thanks for this post from:
Mission146
February 25th, 2023 at 3:49:15 AM permalink
If you're designing these with Excel and have a simulator its easy to cross check them. Instead of using a random number generator to determine the stop positions just iterate though all possible stops and you'll get a precise RTP and hits which should exactly match the spreadsheet.

If the simulation is too long cut down the reelstrips in both models and check that instead. It should find any errors in your spreadsheet.

If you have any maths you don't properly understand how to do then make a super simple example of it you can simulate on paper then model it in Excel.
MichaelBluejay
MichaelBluejay
Joined: Sep 17, 2010
  • Threads: 81
  • Posts: 1603
Thanks for this post from:
Mission146
February 25th, 2023 at 9:47:01 PM permalink
Yeah, in the previous page of this thread I posted a link to my article where I showed the code to iterate through all possible combinations. I also have an article on how to calculate slot machine math.

Spreadsheets aren't so good for slots with wild symbols (which most clients / players want on a slot), too much room for error. But whether doing the calculations manually in a spreadsheet, or iterating over all possible combinations with code, there's the chance of making a mistake either way, which is why I'm looking for someone to check my work.
Presidential Election polls and odds: https://2605.me/p
RobertMuir
RobertMuir
Joined: Aug 3, 2014
  • Threads: 0
  • Posts: 13
Thanks for this post from:
MichaelBluejayMission146
February 26th, 2023 at 4:43:15 AM permalink
I guess I should say I work professionally in this area. I'm not interested in checking maths, but I find this topic of interest.

Anyway, I'm not entirely clear on what you are doing. I wrote short book that covers the basics of slot maths in Excel, including wilds. You may find it useful and you can download it from my site if you like. Its free, no email etc. Search my name and Slot Designer.

What I suggested before is similar to what I do, except that I don't use Excel.
DRich
DRich
Joined: Jul 6, 2012
  • Threads: 86
  • Posts: 11500
Thanks for this post from:
MichaelBluejayMission146
February 26th, 2023 at 6:03:55 AM permalink
Robert's suite of slot tools looks impressive. I have never used them but always wanted to. About once a year I would go to his site just to see what has changed. I probably did that for 15 years and was always happy to see that it was still in business. In the early days I just remember it as a guy with a cool tool, obviously he made a successful business out of it.

I don't think he can post links but I will. Check his site out.

https://slotdesigner.com/

Link to his free book: https://slotdesigner.com/wp/wp-content/uploads/Elements-of-Slot-Design-3rd-Edition.pdf
At my age, a "Life In Prison" sentence is not much of a deterrent.
Mental
Mental
Joined: Dec 10, 2018
  • Threads: 11
  • Posts: 1145
Thanks for this post from:
MichaelBluejayMission146
February 26th, 2023 at 7:10:25 AM permalink
Quote: DRich

Robert's suite of slot tools looks impressive. I have never used them but always wanted to. About once a year I would go to his site just to see what has changed. I probably did that for 15 years and was always happy to see that it was still in business. In the early days I just remember it as a guy with a cool tool, obviously he made a successful business out of it.

I don't think he can post links but I will. Check his site out.

https://slotdesigner.com/

Link to his free book: https://slotdesigner.com/wp/wp-content/uploads/Elements-of-Slot-Design-3rd-Edition.pdf
link to original post

I did a quick skim. It was very kind of Robert to provide a perspective from an industry insider.

I don't understand how stacked symbols are implemented and I did not notice any reference to this in the book. In very many slot games, the reels are different on every spin. I have a model of Scarab, and it is clear that the lower valued symbols are stacked more often than the higher value symbols. If there are N stacked symbols, is there a set of N completely different reels that are selected from randomly on each spin? Or is there a single starting reel template that is randomly modified to create the different stacks?
This forum is more enjoyable after I learned how to use the 'Block this user' button.
RobertMuir
RobertMuir
Joined: Aug 3, 2014
  • Threads: 0
  • Posts: 13
Thanks for this post from:
tringlomaneMission146
February 26th, 2023 at 7:36:09 AM permalink
Thanks. I got to say, I'm glad to see I'm still in business too. It's not so certain when you start these things, especially if you do something different and you don't know if there's a market for it.

I guess you noticed the long period where I didn't update the site. I was stuck working on a new version to handle extremely complex games and somehow it took a lot longer that I was expecting. I started updating the site a month or so ago. There's also a few small updates to the book. I get occasional feedback about it, a few errors or questions, and some gaming companies are using it to get their new mathematicians started. I had meant to update it more often but I've always been too busy on other things.

Personally I think people learning slot maths for fun should try it in Excel. Its very educational and gives you a fundamental understanding of slot maths. Its how I started down this path myself.
MichaelBluejay
MichaelBluejay
Joined: Sep 17, 2010
  • Threads: 81
  • Posts: 1603
Thanks for this post from:
Mission146
February 26th, 2023 at 10:30:03 AM permalink
Wow, both the software and the eBook look incredible! I don't know how I haven't run across them before now. How much does the software sell for?
Presidential Election polls and odds: https://2605.me/p
msinosic
msinosic
Joined: Feb 26, 2023
  • Threads: 0
  • Posts: 1
Thanks for this post from:
MichaelBluejayDieterMission146
February 26th, 2023 at 3:32:54 PM permalink
SlotDesigner, Robert's tool is great. I highly recommend it and the support he provides. It's been a great asset to have for additional math verification.

In respect to math model development costs, It depends on the complexity of the game and its mechanics. Complexity results in greater development time and cross checking. Does the game have multiple features/bonus games, cascading wins, mega ways, persistence, sticky symbols, multiple tired symbol driven jackpots, variations and the list goes on...

Don't forget about experience. Any mathematician can make a math model. Game Designers with multiple year experience know how to create an engaging game with more desirable hit rates of wins, big wins and features. They know how to offer additional support with creative feedback on art/audio/ui/ux and of course working with developers to implement and test their model vs coded simulations.

Good luck!
RobertMuir
RobertMuir
Joined: Aug 3, 2014
  • Threads: 0
  • Posts: 13
Thanks for this post from:
Mission146gordonm888
February 26th, 2023 at 9:30:39 PM permalink
Quote: Mental


I don't understand how stacked symbols are implemented and I did not notice any reference to this in the book. In very many slot games, the reels are different on every spin. I have a model of Scarab, and it is clear that the lower valued symbols are stacked more often than the higher value symbols. If there are N stacked symbols, is there a set of N completely different reels that are selected from randomly on each spin? Or is there a single starting reel template that is randomly modified to create the different stacks?



I'm not entirely sure I understand, but I'll give it a go.

I don't use Excel so I'm not the best person to explain it. When I wrote that book I spent quite a bit of time working though it so I could explain it clearly, and getting feedback from game designers to make sure its correct. To answer the question properly I'd have to do the same thing again and I don't have the time right now. I'll add it to my notes to look at for the next update, whenever that is.

I looked at stacked scatters, on page 8 and 9, and I'd take the same approach to bigger stacks of symbols, scattered or not. Setup something trivial on paper and simulate it by hand, then work out how to do the same in Excel. Then extend it into a real game.

How you actually implement it in the game, and which reels you change and when, is a separate issue and not really my field of expertise. I expect you can do it either way, and probably people do. Its more an issue for a game designer and I am not one. I just make sure my software does what game designers want and this is not an issue in that sense. You can see that reflected in the book, as it says how to calculate the RTP, not why the game is the way it is.
Mental
Mental
Joined: Dec 10, 2018
  • Threads: 11
  • Posts: 1145
Thanks for this post from:
Mission146
February 27th, 2023 at 3:21:32 AM permalink
Quote: RobertMuir

Quote: Mental


I don't understand how stacked symbols are implemented and I did not notice any reference to this in the book. In very many slot games, the reels are different on every spin. I have a model of Scarab, and it is clear that the lower valued symbols are stacked more often than the higher value symbols. If there are N stacked symbols, is there a set of N completely different reels that are selected from randomly on each spin? Or is there a single starting reel template that is randomly modified to create the different stacks?



I'm not entirely sure I understand, but I'll give it a go.

I don't use Excel so I'm not the best person to explain it. When I wrote that book I spent quite a bit of time working though it so I could explain it clearly, and getting feedback from game designers to make sure its correct. To answer the question properly I'd have to do the same thing again and I don't have the time right now. I'll add it to my notes to look at for the next update, whenever that is.

I looked at stacked scatters, on page 8 and 9, and I'd take the same approach to bigger stacks of symbols, scattered or not. Setup something trivial on paper and simulate it by hand, then work out how to do the same in Excel. Then extend it into a real game.

How you actually implement it in the game, and which reels you change and when, is a separate issue and not really my field of expertise. I expect you can do it either way, and probably people do. Its more an issue for a game designer and I am not one. I just make sure my software does what game designers want and this is not an issue in that sense. You can see that reflected in the book, as it says how to calculate the RTP, not why the game is the way it is.
link to original post

I don't even have Excel and do most of my modeling work in C++. I appreciate that you don't need to know how the game generates the reel strips to calculate the RTP. However, they must have to give you the different reel strips and their frequency, right? Digging into the data that they provide would probably answer my question. However, the answer isn't that important for my purposes. Also, I could just observe the reel strips myself to figure some of this out if it made a difference to the play.

The issue of stacked scatters does matter a lot. As you mention in your book, this affects RTP even though stacked ordinary symbols don't affect RTP, just volatility. This reminded me of another question that has been bugging me. On Crazy Money II, scatters can appear on any of the five reels and there can be multiple scatters on a reel. Yet, you will never see more than five scatters in a game. Clearly, there are never more than five scatters on the reels at the start of each game even though it seems six or more should be possible in any one game. Again, we don't know how the programmer accomplishes this feat, but we do need to know the different sets of reels employed plus their frequencies to get RTP. Just google "Video Crazy Money II Slot Machine" if you want to see a video with stacked scatters. Clearly, the player cannot get the frequency of five scatters by just doing combinatorics on the observed frequencies of scatters on each reel. The reels strips are not the same from game to game.

I believe it is against the near-miss regulations to rig the reel stops for later reels if five scatters are already shown on the first three reels. That is, reels should spin independently with no secondary decision. I am sure game designers have found myriad legal ways to create near misses.
This forum is more enjoyable after I learned how to use the 'Block this user' button.
RobertMuir
RobertMuir
Joined: Aug 3, 2014
  • Threads: 0
  • Posts: 13
Thanks for this post from:
Mission146
February 27th, 2023 at 4:25:28 AM permalink
I think I understand better now. Your questions are all related to game design and I don't do that. I'm not confident in answer it off the top of my head. I know how to mathematically solve all those things you mention, but that's a different issue. Sorry I can't provide a better answer.
MichaelBluejay
MichaelBluejay
Joined: Sep 17, 2010
  • Threads: 81
  • Posts: 1603
Thanks for this post from:
Mission146
February 27th, 2023 at 10:36:25 AM permalink
Quote: Ace2

Out of curiosity, how much does something like that pay per job/hour? link to original post

I found my notes from ten years ago. Someone else told me his minimum charge was $2000, but that included more than one slot (e.g., multiple RTPs, base version + other versions with special features like progressives). Max was $10k, for really complicated features.
Presidential Election polls and odds: https://2605.me/p
DRich
DRich
Joined: Jul 6, 2012
  • Threads: 86
  • Posts: 11500
Thanks for this post from:
MichaelBluejayMission146
February 27th, 2023 at 2:52:36 PM permalink
Quote: MichaelBluejay

Quote: Ace2

Out of curiosity, how much does something like that pay per job/hour? link to original post

I found my notes from ten years ago. Someone else told me his minimum charge was $2000, but that included more than one slot (e.g., multiple RTPs, base version + other versions with special features like progressives). Max was $10k, for really complicated features.
link to original post



If I was doing it part-time I would probably charge $250 per hour four hour minimum. I might lower it to $200 after four hours.
At my age, a "Life In Prison" sentence is not much of a deterrent.
MichaelBluejay
MichaelBluejay
Joined: Sep 17, 2010
  • Threads: 81
  • Posts: 1603
Thanks for this post from:
Mission146
March 6th, 2023 at 10:10:05 AM permalink
I found another slot-math-generating software, Slot-IDE, which looks similar to Slot Designer (not a GUI interface, both require editing some code). For a single computer, it's €399 / 30d, €2999 / forever. Seems to have been around since about 2010, and he uses the Wiz' Atkins slot in his example. The proprietor, Saverio Castellano, says he was the lead mathematician for a gaming company called Sogei/AAMS, and then later worked at Aristocrat (and is a nuclear physicist).

Anyway, seems like I could use that software to verify my results.
Presidential Election polls and odds: https://2605.me/p
Mental
Mental
Joined: Dec 10, 2018
  • Threads: 11
  • Posts: 1145
Thanks for this post from:
MichaelBluejayMission146
March 6th, 2023 at 11:11:21 AM permalink
Quote: MichaelBluejay

I found another slot-math-generating software, Slot-IDE, which looks similar to Slot Designer (not a GUI interface, both require editing some code). For a single computer, it's €399 / 30d, €2999 / forever. Seems to have been around since about 2010, and he uses the Wiz' Atkins slot in his example. The proprietor, Saverio Castellano, says he was the lead mathematician for a gaming company called Sogei/AAMS, and then later worked at Aristocrat (and is a nuclear physicist).

Anyway, seems like I could use that software to verify my results.
link to original post

This sounds like a good course of action versus hiring someone to do ad hoc checks on your calculations. You could run up big bills and still wonder whether you are getting the right result. It seems to me to based on C++/Javascript rather than spreadsheets. If the product videos make sense and cover your needs, this gives you a learning tool where you won't ever need to pay a consultant.
This forum is more enjoyable after I learned how to use the 'Block this user' button.
MichaelBluejay
MichaelBluejay
Joined: Sep 17, 2010
  • Threads: 81
  • Posts: 1603
Thanks for this post from:
Mission146
March 6th, 2023 at 3:11:35 PM permalink
Here's the algorithm I wrote (Javascript) to distribute symbols equally on a reel. I can't help but feel there's a more efficient way to do it. What do you all think?

// Code to distribute symbols equally on a reel, for a 3-reel machine with blanks between each symbol

symbolClasses = ['J', '7', '3', '2', '1', 'C'] // Each char represents a symbol. We'll handle blanks separately, later.
numberOfEachClass = [6, 8, 9, 11, 22, 8] // Jackpot, Red7, Triple Bar, Double Bar, Single Bar, Cherry
numberOfBlanks = 64
tempReel = '' // A string that will hold the characters comprising the reel. (Each character is a reel stop.)

for (i=0; i < numberOfBlanks; i++) tempReel += '.' // Populate the reel with periods; we'll replace them with non-blank symbols


// Calculate how many x stops each symbol should appear
// Each element in the array is how often (every X stops) the symbol should appear on the reel

symbolSpacing = []
for (j = 0; j < numberOfEachClass.length; j++) // Can't use i b/c the syntax for an array element gets interpreted as the BBcode for italics on WoV
symbolSpacing.push( Math.floor( (numberOfBlanks) / numberOfEachClass
) )


// Loop through all the non-blank classes, inserting all of one class into the reel string on each pass

for (whichClass = 0; whichClass < symbolClasses.length; whichClass++) {

// Loop through all the symbols of a particular class

charPosition = 0
for (allOfOneClass = 0; allOfOneClass < numberOfEachClass[whichClass]; allOfOneClass++) {

// Calculate where we'd like to put the symbol

charPosition += symbolSpacing[whichClass]
if (charPosition > tempReel.length-1) charPosition = 0 // If we hit the end of the reel, wrap around to the beginning

// If our target spot is taken, find an empty slot

while (tempReel[charPosition] != '.') {
charPosition++
if (charPosition == tempReel.length) charPosition =0 // If we hit the end of the reel w/o an empty spot, wrap around to the beginning of the reel
}
tempReel = tempReel.slice(0,charPosition) + symbolClasses[whichClass] + tempReel.slice(charPosition+1,tempReel.length)
}
}


// Insert blanks between the symbols
reel = ''
for (k=0; k < tempReel.length; k++) {
reel += tempReel[k] + '-'
}

// We don't need to define reel 2 and reel 3, because all reels in this game are identical.
Last edited by: MichaelBluejay on Mar 6, 2023
Presidential Election polls and odds: https://2605.me/p
Mental
Mental
Joined: Dec 10, 2018
  • Threads: 11
  • Posts: 1145
Thanks for this post from:
MichaelBluejayMission146
March 6th, 2023 at 7:35:38 PM permalink
Quote: MichaelBluejay

Here's the algorithm I wrote (Javascript) to distribute symbols equally on a reel. I can't help but feel there's a more efficient way to do it. What do you all think?
link to original post

I think I get what you are trying to do, but maybe I have the details wrong. You are trying to spread symbols out on a reel with 128 stops. This C++ code will spread the symbols and blanks. Maybe you just want to spread the symbols and interleave the blanks so there is a blank between every symbol. In that case, that would be simple to fix.
void populate() {
string frag[128];
// Each char represents a symbol. We'll handle blanks separately, later.
char symbolClasses[] = "J7321C-";
// Jackpot, Red7, Triple Bar, Double Bar, Single Bar, Cherry
int numberOfEachClass[] = { 6, 8, 9, 11, 22, 8, 64 };
int size = 128, cl = 0;
for (char * cp = symbolClasses; *cp; cp++,cl++) {
int spacing = size / numberOfEachClass[cl];
for (int z = spacing; z < size; z += spacing) {
frag[z] += *cp;
}
}
for (int z = 0; z < size; z++) {
cout << frag[z];
}
cout << endl;
}

Result:
"--1--1-2-3-17C--1-J2--1-3-1-7C-2-1--1-J3-2-1-7C-1---213--1--J7C-12--31---1-2-71C--J3-1-2-1---17C-3-21---J1--21-73C--1--1-2--1J3-"
This forum is more enjoyable after I learned how to use the 'Block this user' button.
MichaelBluejay
MichaelBluejay
Joined: Sep 17, 2010
  • Threads: 81
  • Posts: 1603
Thanks for this post from:
Mission146
March 6th, 2023 at 9:03:44 PM permalink
Thank you for this.

Yes, as the very first line of my code said, in a comment, a blank goes between every symbol.

I'm afraid I don't follow your code since I don't understand your syntax (my code is Javascript, yours is C++). I don't know what things like "*cp" and "char * cp" means. I tried looking up the asterisk syntax but all I could find was something about pointers for memory which wasn't explained well.

I'm guessing "cp" and "cl" are "character position" and "character class index".

Much of my code was to make sure a new symbol didn't overwrite an old symbol that was already placed. I don't see how you got around that problem with your code, but you somehow didn't overwrite existing symbols. I tried to convert your code to JS the best I could, but in this new version, the new symbols do sometimes overwrite the old symbols.

BTW, your output has 65 symbols instead of 64.

// Creates a 64-stop reel without blanks (Javascript)

reelSize = 64
reelString = ""
for (i=0; i < reelSize; i++) reelString += "." // Populate a 64-char string with dots
symbolClasses = "J7321C"
numberOfEachClass = [6, 8, 9, 11, 22, 8]

for (whichClass = 0; whichClass < symbolClasses.length; whichClass++ ) {
symbol = symbolClasses.charAt(whichClass)
spacing = Math.floor (reelSize / numberOfEachClass[whichClass])

for (charPosition = spacing; charPosition < reelSize; charPosition += spacing) {
reelString = reelString.slice(0,charPosition) +symbol+ reelString.slice(charPosition+1, reelString.length)
}

}
console.log(reelString)

// Output: ..1.1213C.1.1.12C.1.131.C21.1.1.C.121.1.C.1.121.C31.1.12C.1.1.13
Presidential Election polls and odds: https://2605.me/p
RobertMuir
RobertMuir
Joined: Aug 3, 2014
  • Threads: 0
  • Posts: 13
Thanks for this post from:
Mission146
March 7th, 2023 at 4:21:08 AM permalink
Its easier and quicker to just type them in manually and its how games are done in production anyway.

There appears to be people on fiverr who could easily check your maths.
Mental
Mental
Joined: Dec 10, 2018
  • Threads: 11
  • Posts: 1145
Thanks for this post from:
Mission146
March 7th, 2023 at 5:05:55 AM permalink
void populate() {
string frag[64];
// Each char represents a symbol. We'll handle blanks separately, later.
char symbolClasses[] = "J7321C";
// Jackpot, Red7, Triple Bar, Double Bar, Single Bar, Cherry
int numberOfEachClass[] = { 6, 8, 9, 11, 22, 8 };
int size = 64, cl = 0;
for (char * cp = symbolClasses; *cp; cp++,cl++) {
int spacing = size / numberOfEachClass[cl];
for (int z = spacing; z < size; z += spacing) {
frag[z] += *cp; // add symbol to end of string
}
}
string result;
for (int z = 0; z < size; z++) {
result += frag[z]; // concatenate all strings
}
for (int z = 0; z < size; z++) {
cout << result[z] << "-"; // interpolate blanks
}
cout << endl;
}

Result:
1-1-2-1-3-7-1-C-J-2-1-1-3-1-2-7-1-C-1-J-2-1-3-1-7-1-C-2-1-3-1-J-2-1-7-1-C-1-3-2-1-1-J-7-2-1-C-3-1-1-2-1-7-1-C-3-J-2-1-1-1-2-7-3-

If there are extra symbols, it is because I don't check the divisor for rounding on spacing. I am just trying to give you a simpler method. The *cp is looping through your symbols and appending them to 64 strings. I then concatenate and the interpolate blanks.

EDIT to add more explanation:
for (char * cp = symbolClasses; *cp; cp++,cl++) { ... }
This for loop initializes a character pointer, cp, to point to the first char, symbolClasses[0] = 'J'. the increment cp++ moves it to point to '7', etc. I increment the class counter, cl++, to keep the class in synch with the symbol. The * operator dereferences the pointer, so '*cp' is whatever char cp is pointing to at the time. The frag array is a set of 64 bins where I dump the symbols with the calculated spacing. Some bins stay empty and other bins receive multiple symbols. Concatenating all the frags creates a string with all the symbols. I then print out the result with interpolated blanks.

The calculation of the spacing works only is size divides evenly by the number of symbols. I could see from your code that you recognized this issue already, so I did not bother to correct for this small issue.

You should be able to easily convert this algorithm to javascript if you understand how I am using the bins.
Last edited by: Mental on Mar 7, 2023
This forum is more enjoyable after I learned how to use the 'Block this user' button.
MichaelBluejay
MichaelBluejay
Joined: Sep 17, 2010
  • Threads: 81
  • Posts: 1603
Thanks for this post from:
Mission146
March 7th, 2023 at 7:13:24 AM permalink
Quote: RobertMuir

Its easier and quicker to just type them in manually and its how games are done in production anyway.

Code seems faster if it's already written, or if I'm constantly tinkering with the reel weightings. Also, I'd like to make a tool for others to use.

Quote: RobertMuir

There appears to be people on fiverr who could easily check your maths.

Thanks, I checked it out, it does appear so. BTW, according to a potential client, your supposed competitor (Slot-IDE.com) is apparently out of business or at least just doesn't respond to inquiries.
Presidential Election polls and odds: https://2605.me/p
Mental
Mental
Joined: Dec 10, 2018
  • Threads: 11
  • Posts: 1145
Thanks for this post from:
Mission146
March 7th, 2023 at 7:19:48 AM permalink
Quote: RobertMuir

Its easier and quicker to just type them in manually and its how games are done in production anyway.

There appears to be people on fiverr who could easily check your maths.
link to original post

Really? I would not want to work with people with that attitude.

If you want to space them out by hand, you still have the question of the algorithm you use for symbols competing for the same spot. I wrote code in five minutes that can be reused and adapted to other uses.
This forum is more enjoyable after I learned how to use the 'Block this user' button.
Mental
Mental
Joined: Dec 10, 2018
  • Threads: 11
  • Posts: 1145
Thanks for this post from:
Mission146
March 7th, 2023 at 8:39:15 AM permalink
MBJ, I added some notes to the bottom of my last code post. Does this make sense now?
This forum is more enjoyable after I learned how to use the 'Block this user' button.
Parashara
Parashara
Joined: Aug 20, 2018
  • Threads: 7
  • Posts: 16
Thanks for this post from:
Mission146
March 7th, 2023 at 1:28:39 PM permalink
Hi, Does the slot machine use the same algorithm when you play by 1 Cent



or By 5 Cent


Or does it changes based on the denomination?

I was wondering in the slot machine multi denomination games the reel / random number generated is the same but the pay changes with the denomination ???

Like If the user selects 1Cent 88 cents bet

if a win is generated then win multiplied by 88 cents

Like If the user selects 5Cent $4.40 bet

if a win is generated then win multiplied by $4.40

Or does it have different algorithms for each denomination ie that is in order to take some cut and give back the player some amount?
MichaelBluejay
MichaelBluejay
Joined: Sep 17, 2010
  • Threads: 81
  • Posts: 1603
Thanks for this post from:
Mission146
March 7th, 2023 at 1:35:55 PM permalink
Parashara, start a new thread for a new topic. Don't hijack an existing thread.
Presidential Election polls and odds: https://2605.me/p
MichaelBluejay
MichaelBluejay
Joined: Sep 17, 2010
  • Threads: 81
  • Posts: 1603
Thanks for this post from:
Mission146
March 7th, 2023 at 5:39:43 PM permalink
Quote: Mental

MBJ, I added some notes to the bottom of my last code post. Does this make sense now? link to original post

I'm sorry, it doesn't. Like I said, I'm using Javascript, you're posting C++ code, and I don't understand its special syntax, particularly the * operator. But you mentioned adding symbols to the end of a string rather than inserting symbols at specific points, so I made an algorithm that does that, which is less code than my original. I'd originally tried to do it that way but couldn't wrap my head around how to implement it, but given that you did something similar, I tried harder this time.

// Javascript.  Distributes symbols evenly (more or less) on a slot machine reel.
// Logic: Builds the reel one character at a time,
// checking for how many symbols of each class should be on the reel at each point.

symbols = ['J','7','3','2','1','C'] // We'll handle blanks separately, later.
weights = [6,8,9,11,22,8] // Number of times each symbol appears on the reel
size = 64
reelString = ""

while (reelString.length <64) {
for (symbolIndex = 0; symbolIndex < symbols.length; symbolIndex++) {
symbol = symbols[symbolIndex]
if ( count() < weights[symbolIndex] && count() <= weights[symbolIndex]/size * reelString.length)
reelString+= symbols[symbolIndex]
}
}
console.log(reelString)
// J-7-3-2-1-C-2-1-C-7-3-1-J-2-1-3-1-C-7-2-1-1-J-3-2-1-C-7-1-3-2-1-C-J-7-2-1-3-1-1-C-7-2-1-J-3-1-2-1-C-7-3-1-2-1-J-7-3-1-C-2-1-1-1-

function count() { return reelString.split(symbol).length-1 }


I'm not wild about the three 1's in a row, and I could tinker with the code to prevent that, but close enough.
Last edited by: MichaelBluejay on Mar 7, 2023
Presidential Election polls and odds: https://2605.me/p
DRich
DRich
Joined: Jul 6, 2012
  • Threads: 86
  • Posts: 11500
Thanks for this post from:
MichaelBluejayMission146
March 8th, 2023 at 6:23:53 AM permalink
Quote: MichaelBluejay

Quote: Mental

MBJ, I added some notes to the bottom of my last code post. Does this make sense now? link to original post

I'm sorry, it doesn't. Like I said, I'm using Javascript, you're posting C++ code, and I don't understand its special syntax, particularly the * operator. But you mentioned adding symbols to the end of a string rather than inserting symbols at specific points, so I made an algorithm that does that, which is less code than my original. I'd originally tried to do it that way but couldn't wrap my head around how to implement it, but given that you did something similar, I tried harder this time.

// Javascript.  Distributes symbols evenly (more or less) on a slot machine reel.
// Logic: Builds the reel one character at a time,
// checking for how many symbols of each class should be on the reel at each point.

symbols = ['J','7','3','2','1','C'] // We'll handle blanks separately, later.
weights = [6,8,9,11,22,8] // Number of times each symbol appears on the reel
size = 64
reelString = ""

while (reelString.length <64) {
for (symbolIndex = 0; symbolIndex < symbols.length; symbolIndex++) {
symbol = symbols[symbolIndex]
if ( count() < weights[symbolIndex] && count() <= weights[symbolIndex]/size * reelString.length)
reelString+= symbols[symbolIndex]
}
}
console.log(reelString)
// J-7-3-2-1-C-2-1-C-7-3-1-J-2-1-3-1-C-7-2-1-1-J-3-2-1-C-7-1-3-2-1-C-J-7-2-1-3-1-1-C-7-2-1-J-3-1-2-1-C-7-3-1-2-1-J-7-3-1-C-2-1-1-1-

function count() { return reelString.split(symbol).length-1 }


I'm not wild about the three 1's in a row, and I could tinker with the code to prevent that, but close enough.
link to original post



When I started designing slot machines about 25 years ago I always tried to avoid consecutive replicated symbols. In retrospect, I don't know why I always did that. Ten or fifteen years later "stacked symbols" became a thing and made me question my earlier decisions.
At my age, a "Life In Prison" sentence is not much of a deterrent.
Mental
Mental
Joined: Dec 10, 2018
  • Threads: 11
  • Posts: 1145
Thanks for this post from:
Mission146
March 8th, 2023 at 6:33:20 AM permalink
Quote: MichaelBluejay

Quote: Mental

MBJ, I added some notes to the bottom of my last code post. Does this make sense now? link to original post

I'm sorry, it doesn't. Like I said, I'm using Javascript, you're posting C++ code, and I don't understand its special syntax, particularly the * operator. But you mentioned adding symbols to the end of a string rather than inserting symbols at specific points, so I made an algorithm that does that, which is less code than my original. I'd originally tried to do it that way but couldn't wrap my head around how to implement it, but given that you did something similar, I tried harder this time.

// Javascript.  Distributes symbols evenly (more or less) on a slot machine reel.
// Logic: Builds the reel one character at a time,
// checking for how many symbols of each class should be on the reel at each point.

symbols = ['J','7','3','2','1','C'] // We'll handle blanks separately, later.
weights = [6,8,9,11,22,8] // Number of times each symbol appears on the reel
size = 64
reelString = ""

while (reelString.length <64) {
for (symbolIndex = 0; symbolIndex < symbols.length; symbolIndex++) {
symbol = symbols[symbolIndex]
if ( count() < weights[symbolIndex] && count() <= weights[symbolIndex]/size * reelString.length)
reelString+= symbols[symbolIndex]
}
}
console.log(reelString)
// J-7-3-2-1-C-2-1-C-7-3-1-J-2-1-3-1-C-7-2-1-1-J-3-2-1-C-7-1-3-2-1-C-J-7-2-1-3-1-1-C-7-2-1-J-3-1-2-1-C-7-3-1-2-1-J-7-3-1-C-2-1-1-1-

function count() { return reelString.split(symbol).length-1 }


I'm not wild about the three 1's in a row, and I could tinker with the code to prevent that, but close enough.
link to original post

You are missing the key point of my algorithm. string frag[64]; declares an array of 64 strings. I am appending to 64 different strings in the loop. Then I concatenate later. You have just one string! That is why you are getting a crappy result.

I am not going to try an explain it further. Good luck.
Last edited by: Mental on Mar 8, 2023
This forum is more enjoyable after I learned how to use the 'Block this user' button.
MichaelBluejay
MichaelBluejay
Joined: Sep 17, 2010
  • Threads: 81
  • Posts: 1603
Thanks for this post from:
Mission146
March 8th, 2023 at 9:51:33 AM permalink
Quote: Mental

I am not going to try an explain it further.

LOL, you've barely explained at all. I post JS, you reply with C++. I say that I don't know C++, particularly the * operator, and you reply with *more* C++! I mention again I don't know it, or the * operator, you ignore that. Your original code is also mostly uncommented and has vague two-character variable names like "cp" and "cl".

I don't know why you'd create 64 separate strings when the final result is only 64 characters long. What, each string is only one character long? Except the comment you added was that you're adding to "the end" of the string, which suggests that a string is longer than one character, so this is clear as mud.

In any event, I solved the issue by just writing my own code, as I posted. I know you think the result is "crappy", but don't know why (because you didn't say), maybe because of the three 1s repeated at the end, though as I said, it would be easy for me to add a line or two to prevent that, if I really cared.
Presidential Election polls and odds: https://2605.me/p
Mental
Mental
Joined: Dec 10, 2018
  • Threads: 11
  • Posts: 1145
Thanks for this post from:
Mission146
March 8th, 2023 at 12:32:28 PM permalink
I explained the whole algorithm in English, but you don't understand that either.
This forum is more enjoyable after I learned how to use the 'Block this user' button.
MichaelBluejay
MichaelBluejay
Joined: Sep 17, 2010
  • Threads: 81
  • Posts: 1603
March 25th, 2023 at 9:07:42 PM permalink
Quote: Mental

I explained the whole algorithm in English, but you don't understand that either. link to original post

Yeah, well, you and I have a very different definition of "explained". I did get the highest possible score on the SAT Test of Standard Written English, so I'm gonna go out on a limb and say that my English comprehension is at least above average.
Presidential Election polls and odds: https://2605.me/p
ThatDonGuy
ThatDonGuy
Joined: Jun 22, 2011
  • Threads: 117
  • Posts: 6169
Thanks for this post from:
MentalMichaelBluejay
March 26th, 2023 at 8:05:38 AM permalink
Quote: Mental

void populate() {
string frag[64];
// Each char represents a symbol. We'll handle blanks separately, later.
char symbolClasses[] = "J7321C";
// Jackpot, Red7, Triple Bar, Double Bar, Single Bar, Cherry
int numberOfEachClass[] = { 6, 8, 9, 11, 22, 8 };
int size = 64, cl = 0;
for (char * cp = symbolClasses; *cp; cp++,cl++) {
int spacing = size / numberOfEachClass[cl];
for (int z = spacing; z < size; z += spacing) {
frag[z] += *cp; // add symbol to end of string
}
}
string result;
for (int z = 0; z < size; z++) {
result += frag[z]; // concatenate all strings
}
for (int z = 0; z < size; z++) {
cout << result[z] << "-"; // interpolate blanks
}
cout << endl;
}

Result:
1-1-2-1-3-7-1-C-J-2-1-1-3-1-2-7-1-C-1-J-2-1-3-1-7-1-C-2-1-3-1-J-2-1-7-1-C-1-3-2-1-1-J-7-2-1-C-3-1-1-2-1-7-1-C-3-J-2-1-1-1-2-7-3-

If there are extra symbols, it is because I don't check the divisor for rounding on spacing. I am just trying to give you a simpler method. The *cp is looping through your symbols and appending them to 64 strings. I then concatenate and the interpolate blanks.
link to original post


There are only seven 7s, and 27 1s.
I can see two main problems in the code.
First, you aren't taking into account that frag[ ] has indexes from 0 to 63 when you assign symbols to it. (Well, you are when you determine when to stop, but not when you determine where to start.) I think what you want to do there is:
    for (int z = spacing; z <= size; z += spacing) {
frag[z-1] += *cp; // add symbol to end of string
}

Second, when you divide 64 by the number of cells to determine the spacing, you forget to take into account that 64 / the calculated number of cells can be more than the spacing. For example, there are 22 single bars, so you calculate their spacing as 64 / 22 = 2, but you add the symbol to cells 2, 4, 6, ... until it is >= 64; that is 31 single bars.
What I would do is this
    for (int z = 1; z <= numberOfEachClass[cl]; z++) {
frag[z * spacing - 1] += *cp; // add symbol to end of string
}

This adds the desired number of symbols.

Michael, here is the algorithm:
Start with 64 empty "bins", numbered 0-63
For each of the six symbols, divide 64 by the number of times the symbol appears, and round down; if this value is n, then add the symbol to every n'th bin starting with bin n-1. For example, the first symbol appears 10 times, so n = 64/6 rounded down = 10; add it to bins 9, 19, 29, 39, 49, and 59. (Actually, the code adds it to 10, 20, 30, 40, 50, and 60, but that is a problem when the number of symbols is a divisor of 64 as there is no "bin 64" in which to add the last symbol.)
When you are done, concatenate bins 0, 1, 2, ..., 63. Note that some of them will be empty.
MichaelBluejay
MichaelBluejay
Joined: Sep 17, 2010
  • Threads: 81
  • Posts: 1603
March 26th, 2023 at 4:38:03 PM permalink
Quote: ThatDonGuy

Michael, here is the algorithm:... link to original post

Thank you, TDG, that's much clearer. I didn't understand how to avoid collisions where two symbols want to occupy the same stop, and I didn't understand that each bin could hold multiple symbols. Now that I get that, it makes perfect sense. However my method which I posted earlier (in which I insert a symbol at each stop if the number of symbols inserted so far is underrepresented), is less code.

Code I posted earlier:
symbols = ['J','7','3','2','1','C'] // We'll handle blanks separately, later.
weights = [6,8,9,11,22,8] // Number of times each symbol appears on the reel
size = 64
reelString = ""

while (reelString.length < size) {
for (symbolIndex = 0; symbolIndex < symbols.length; symbolIndex++) {
symbol = symbols[symbolIndex]
if ( count() < weights[symbolIndex] && count() <= weights[symbolIndex]/size * reelString.length)
reelString+= symbols[symbolIndex]
}
}
function count() { return reelString.split(symbol).length-1 }
console.log(reelString)
//J7321C21C731J2131C7211J321C71321CJ721311C721J3121C73121J731C2111


Code with Mental/ThatDonGuy's method:
symbols = ['J','7','3','2','1','C'] // We'll handle blanks separately, later.
weights = [6,8,9,11,22,8] // Number of times each symbol appears on the reel
reelFragment = []

for (symbolIndex = 0; symbolIndex < symbols.length; symbolIndex++) {
for (numberInserted = 1; numberInserted <= weights[symbolIndex]; numberInserted++) {
spacing = Math.floor(64 / weights[symbolIndex])
stop = numberInserted * spacing -1
if (typeof reelFragment[stop] == 'undefined') reelFragment[stop] = ''
reelFragment[stop] += symbols[symbolIndex]
}
}

reel=''
for (fragmentIndex=0; i < reelFragment.length; fragmentIndex++) {
if (typeof reelFragment[fragmentIndex] != 'undefined') reel += reelFragment[fragmentIndex]
}
console.log(reel)
//1121371CJ21131271C1J213171C2131J2171C13211J721C31127C3J2273CJ37C
Presidential Election polls and odds: https://2605.me/p
Mental
Mental
Joined: Dec 10, 2018
  • Threads: 11
  • Posts: 1145
March 27th, 2023 at 8:32:56 AM permalink
Silly me. I thought the goal was to spread the symbols out. Apparently, it was just to write the shortest algorithm to print out all of the symbols even if there are many adjacent symbols of the same type on the reel.

The algorithm below produces this output:
J-7-3-2-1-C-1-2-1-3-7-C-1-J-2-1-3-1-7-C-2-1-1-J-3-2-1-7-C-1-3-2-1-J-7-1-C-2-1-3-1-7-C-2-1-J-3-1-2-1-7-C-1-3-2-1-J-1-7-C-3-2-1-1-

There are two places where there are consecutive 1's (ignoring blanks), but no other symbols are adjacent or even within a distance of three. I am sure there are better spreading algorithms. However, we have not been given a figure of merit to decide what 'better' means.

void spread() {
char symbolClasses[] = "J7321C";
int z, numberOfEachClass[] = { 6, 8, 9, 11, 22, 8, 0 };
double start[10], ratio[10];
for (z = 0; numberOfEachClass[z]; z++) {
start[z] = ratio[z] = double(numberOfEachClass[z]) / 64;
}
int numSym = z, n = -1;
for (int numRemaining = 64; numRemaining; numRemaining--) {
double max = 0.0;
for (z = 0; z < numSym; z++) {
double curr = ratio[z] / start[z];
if (max < curr) {
max = curr;
n = z;
}
}
numberOfEachClass[n]--;
ratio[n] = numberOfEachClass ? (double(numberOfEachClass[n]) / 64.0) : 0.0;
cout << symbolClasses[n] << "-";
}
cout << endl;
}
This forum is more enjoyable after I learned how to use the 'Block this user' button.
RobertMuir
RobertMuir
Joined: Aug 3, 2014
  • Threads: 0
  • Posts: 13
May 10th, 2023 at 7:43:45 PM permalink
I posted an article on LinkedIn last week that may interest those in this thread, "The Development Process of Casino Slot Game Mathematics". Unlike the last one its not so much as how the maths are calculated, but how it fits in the overall process.

I don't think I can link it, but its on my website and LinkedIn profile.
heatmap
heatmap
Joined: Feb 12, 2018
  • Threads: 257
  • Posts: 2211
May 11th, 2023 at 3:57:35 PM permalink
im not even joking but you should sign up for chatGPT and ask it

  • Jump to: