UPDATE - there is now a centralized server specifically dedicated to billiards research! if you're interested in following this story as it develops, feel free to join: discord.gg/zUe9gZ8YMg ~ ~ ~ ~ ~ ~ ~ hey all, thanks for the support on this video! some responses to frequently asked questions/comments: - there were previously some issues with the captions of the video that a couple of people brought up - I had incorrectly assumed that they were talking about the timings, but I now realize that there were words that were actually just incorrect. this is because I slightly revised my script before recording it and then mistakenly used a version that didn't have those revisions for the captioning. this issue should be fixed now, but if you come across any other discrepancies, please let me know - i now know that 9 ball pool is actually far more popular than 8 ball in competitive play, and more popular in general in asian countries! thanks to the irl pool players in the comments for clarifying this - yes, the game does require you to sink all 9 balls even though the real rules of 9 ball end the game once the 9 ball has been sunk. it's funny to think that if they followed the real rules, none of this would have ever been an issue and this video wouldn't exist - the cue ball positioning isn't randomized - in the code shown at 4:09, the first line is "if (id != 0) {", which checks that the current ball being affected isn't the cue ball. if it is the cue ball, the code for adding the random offsets won't run. this is also why the rng can be disabled by replacing one assembly instruction - you can simply change the beq (branch if equal) instruction to an unconditional branch so that the code for adding the random offsets never runs for any ball. - there could definitely be more efficient approaches to this problem involving interfacing directly with the game's physics engine and potentially even machine learning. however, the wii play research team is very small right now, and we have limited time and knowledge to work with when it comes to decompilation and complex math. part of the point of this video was just to get more eyes on this situation, so if you'd like to help or even if you just have some ideas to throw around, please feel free to DM me on discord (username: kataryn) or join the server linked above
I'm at the 4:45 mark where you talk about the slight offsets. Just want to say before you go further in the video (But watched further anyways just in case you covered it in full already) that it actually makes A LOT of sense to have that very slight degree of variation in the placement. The reason is that when playing any sort of billiards, the racking triangle (for normal pool at least) isn't exactly uhm... perfect every time. There's a lot of detail to this, but essentially, depending on how the person racks the balls up, they will get a slightly different arrangement and placement each time. Not only that, but even though the balls are quite precise in their size, shape, etc; there are always going to be tiny imperfections over time due to play or even original factor conditions. This means that ultimately to get the exact same result off the break in billiards, absolutely every single condition must match. And that's just not likely to be the case except in extreme circumstances of luck/chance and cheating. So, (having watched further into the video anyways) no it's not that the game is rigged. It's that billiards is one of those real world games that never really is going to have the exact same conditions multiple times at all or even in a row. And believe me, the players and designers and installers of this game are all generally very well aware of how close to perfect every condition needs to be to get a reliable table going that works how you expect it to. For instance, a common problem at many bar pool tables, is that they are slightly tilted to one side or the other due to the slope of the floor/ground below and how a building will gradually sink/bend/tilt in areas here and there for over time. (For those who wish to argue that, just consider that not all buildings are made purely of titanium. I.E. Most materials flex/warp/etc over time.) So the end result for playing pool/billiards of any form, is that no two tables will ever be entirely the same as each other. They'll all have some level of uniqueness to each. And having said that, now we are back to the problem of the position of the billiard balls at break. Depending on how well you rack them and how perfectly you manage to align them, that break could be different for every single shot placed even by a robot. And that's assuming you managed to line the rack up with the correct position on the table as well perfectly. Which probably isn't going to be the case either. Now, I want to say that I do realize that video games aren't real life, so we expect them to some degree to have a level of repeatability. But! Technically... if you are trying to recreate a sport or real world game in its fullest, you want to include every variable that makes it that sport or real world game. So while it may seem paradoxical to want to include imperfections into a video game... it's actually exactly what you want to do with a game like Billiards. Finally, to expound upon the point, let's consider what is required to actually create a 'perfect' table. 1. You would need the floor and the table both to be perfectly level on cosmic scale. Think Morty standing on the perfectly level square of floor made by Rick. That level of level. This is because any slight variation in the slope of the surfaces will cause the balls to go a different course than intended dependent upon that slope. Many players tend to recognize when there is a slope at all, and correct for it if need be or avoid that table entirely. 2. You would need your billiards to be made into perfect spheres. Absolutely perfect on the same level as the prior point. Not only that, but they would need to be made of a material even better than the way they are made now. They cannot be scuffed, dinged, or altered permanently in any manner... while still retaining the physical properties that allow a game of billiards to even be played. Good luck. What we use it pretty good already, I forget the exact names of each material, but it works well enough. But if we want a perfect table, even that needs an upgrade. 3. The racking mechanism has to be flawless. Every ball must fit perfectly in such a way that no two racks are ever different. Not only that, but it must be rackable in the exact same position every single time. No exceptions. 4. The environment the table is in also needs to be perfect, or at the very least, all the materials must be impervious to any influence from 'outside forces' like humidity for instance. It may not seem like a big issue, but humidity can be the difference between materials swelling and shrinking. When these things are minimal, it's not much of an issue to most. But if it's a large enough difference to make things change depending on an outside factor; it must not be allowed. So perfect environmental controls are needed. 5. Finally? Maybe... The entire area around the billiards table needs to be able to withstand the weight of the players around it in such a way that it doesn't cause the floor below to flex or bend in any slight manner at all. Once again, it might not be a huge amount, but any small difference is the difference in what causes each shot to be different from before. In buildings with strong floors, this isn't a problem. In buildings with weaker floors... it can be. A very slight one. But one none the less. So. As you can see, there is likely never going to be a perfect billiards table in existence as far as we know right now with the materials and methods we have available to us. In a video game where everything is a sterile code vacuum, a perfect table could happen of course. But these sorts of games are made to represent reality in video game form, nothing else. So in that sense... Wii sports did Billiards pretty much perfectly.
Well the reverse-tracing physics approach is ruled out by this comment, which I had been going to say separately. The other direction, randomly changing initial parameters to find a desired outcome, is called 'monte carlo simulation'. In this case you'd need to write a script to check: it would take far too long manually. Have the script run through at the smallest increments systematically. Yeah machine learning mights speed it up, but if you turn off the graphics (I'm assuming that's doable mind) it should be able to run through each scenario so fast that the time spent to program an ML system would actually take longer. The number is large but not THAT large, based on the figures.
Maybe you can get in touch with CodeBullet or another ML TH-camr to build the TAS for 0 RNG. If you can get the 9 break with 0 RNG you can then train it with randomness on single balls while feeding it exact positions so it learns how movement impacts the setup. Would guess this only marginally ends up helping speedrunning -- you can see if there's something "special" you need to do to go for 9 vs going for 7 or less. Otherwise, it's likely just praying RNG lines up. Though maybe the TAS could identify the best initial shot that has the highest probability given the RNG factors and then humans can just spam that exact shot until RNG hits for them.
that's actually kind of incredible, though. like, it sucks for speedrunners that you just can't get a super reliable break. but the absolute genius of accounting for the fact that in real life, the diamond wouldn't be perfectly packed every time is just beautiful. someone who really cared programmed that minigame.
It's a great illustration of the Butterfly Effect. The changes to the initial conditions are so slight as to be almost imperceptible, but the impact that they have on the results is immense
Was about to post the same thing. The lack of perfection in real life seems like a critical detail that I'm glad they didn't miss, it makes everything about this more interesting.
I like how the game designers actually incorporated the real-world innacuracies of setting up a billiards table, and that we were somehow surprised to see that the balls weren't perfectly lined up each time
@@evwbb why... would they care about making a 9 break impossible, compared to, you know, simply making the game more realistic, the more obvious motivation?
@@TheAmazingCowpigWell it’s not only about 9 breaks, let’s say it was as realistic as possible, there would still be a “best break”. Even if that was only say 4 balls, if you could replicate it easily it would be kind of dumb
It's so subtle, and very much like the packing differences you see in pool IRL. It's also a perfect representation of a chaotic system, where very minor, even imperceptible, differences in initial conditions leads to wildly diverging results.
and the best part is, it doesn't look or feel like they did this JUST to prevent players from enjoying the game, but more so to make the game feel as realistic as possible. Nothing worse than when game developers add randomness to a system that didn't need to be random (like a basketball game having a programmed 5% chance to not fall into the hoop for "balance reasons") but in this case, it's an accurate representation of how billiards is set up IRL and thus with no two games being exactly alike, that adds a lot of replay value for casual players (and some risk pressure for speed runners that makes the game more fun to watch and see them adapt to get a faster time in the moment instead of just memorizing and making it another checkbox not worth watching).
Honestly this randomness makes sense considering how balls are racked up in real life. Kind of impressive of the devs to think about doing something like this although they wouldnt be so spaced out
@@tommolldev Not in a microscopic scale. The game's simulation doesn't have a microscopic scale (no dust particles, no molecules, no scratches on the balls, no random tiny gusts of wind, etc.) so if a deterministic physics simulation is used, the only way to introduce randomness is to randomize position in this way. It's smart, for sure, although personally I don't think it's *that* impressively smart.
That was my first thought too, that the RNG was an attempt to simulate the minuscule errors and offsets that would realistically occur when setting up a real billiards table, due to how utterly improbable it is that a human hand will plop something down in the same precise spot twice.
Yeah, sounds like from here you don't even need to brute force. It's now a matter of math. You can probably write a script to make the micro adjustments and simulate the results without watching manually and highlighting the combination of variables that result in interesting points like a 9 ball, an 8 ball, or a scratch (something the video didn't bring up, but is worth noting, if the white ball is sunk, that's a scratch and thus a dud, but for curiousity's sake, would it be possible to hit the ball where all 10 balls are sunk? just for fun). Reminds me of how RNG seeds are brute forced to find the perfect seed that gets the right outcome and what actions it takes to get that. In those games you have to do some brute force to advance the seed just enough, but in this, since all that matters is the position of the cue, the angle, how far back you pull the cue, and maybe how fast you push the cue forward (not sure), all you need is the algorithms for how the balls interact with each other and the walls, then put it all in python and let it run. Then test the successes manually to verify. That's what computer science is all about.
Billiards is chaos theory in practice. Infinitesimal variables all come together to impact how your shot goes, everything from how you are holding your cue, your technique, the condition of the table, where the cueball strikes, everything. You could make the exact same break hundreds of times and you'll never get the same outcome.
You know it's actually quite funny that no real billiards players ever looked at this, because they could have told you right off that the exact position of the balls in the rack has a dramatic effect on the break, and my immediate assumption is that the game is doing position randomization, since other pool games nintendo has made also do it, Clubhouse games (ds) does it really obviously for example.
very interesting insight. Murasaki, one of the best Wii Play speedrunners and someone I briefly mentioned in the video, actually does have real life pool experience. I don't think he ever mentioned this, but he was one of the first people to put his stake in the "there's definitely RNG" ground
Small, random changes to the ball position in the rack seems like exactly the correct way to produce randomness in a billiards game, since it is also a source of randomness in a real game.
From a real life physics POV, sinking the 9th ball is almost impossible due to the way the balls are set up in a diamond pattern, as the center ball is akin to the middle balls in a newton's cradle, all the force delivered onto is exerted into another ball. The physics engine in the game may literally not have enough power to move every single ball into a hole. Good luck, I want to see it happen!
actually Ivd thought in this and it's more impossible due to a single thing! _scratching_ that is to say, when you *sink the cueball* or *sink the 8 ball at any time where you didn't call the shot, And not before sinking your solid/stripes. so in addition to physically getting 8 balls to sink, you'd need them to go in a way where the cueball does not , and the 8 ball goes last. I kinda think this is actually impossible unless you just wanna get 9 balls in and also scratch 🤷🏻♀️ odds are palpable in that Instance. based on this videos evidence and the sheer amount of rng involved I don't think this is gonna happen organically nor in a way that adheres to the game rules
@@TemmiePlays Wii Play uses 9ball rules, not 8ball. You don't have to sink the 8 ball last. You have to hit balls in increasing order, but you can sink any ball any time, no solids or stripes necessary (the balls in game are all solid too)
@@TemmiePlaysWell you're basically asking for a 10-ball pot if you include the cue ball. Due to the physics though, the only way that'd happen is if you hit the ball in such a way that the balls bounced off the wall and hit the cue ball in a way that caused it to sink as well. Whcih is less likely due to limitations in how much power you can put in, but I'm sure there are seeds that make it possible. It's all a numbers game at this point, so regardless of physics or skill, this kind of turned into a computer science or math problem now that we know all the variables involved so far and the math never changes in code (unless they also added RNG to the balls bouncing and based that on factors that in no way could be measured but I doubt this game is THAT deep)
@ 4:00 Pro Ghidra tip: Something I learned in reverse engineering Brawl is that direct reads from FLOAT_address and DOUBLE_address are pretty much always read-only when there’s a series of known bytes there. If you follow the address, you can untick the “volatile” box and it should show the actual proper values that are at those locations instead of just “a float/double exists at this address and we don’t know what it might be”
@@kiwidev_ YEAH IT SAVES SO MUCH HASSLE LMAOOO before I knew that I went and manually named each variable to its value so like... "FLOAT_6" or whatever. it was hellish - BUT making them as read only makes it SOOOOO much easier to intuit the functions of things with lots of floats ^^
@@_fudgepop01 i totally misunderstood your comment at first - i knew the "FLOAT_address" values were constants but i was using a dolphin memory viewer to look at the values, i didn't know there was a setting to access them directly in ghidra. that's such a timesaver lol
The fact that someone hasn't even been able to TAS this yet makes it so incredible. I hope that even if it proves to be theoretically possible with no position deviations, someone is able to accomplish sinking 9 balls even with the randomness of the positions.
I guess you could just run a bot now which would check every possibility strength, angle, hit position and ball position one by one. Though who knows just how long that would take, not to mention lag might be a factor.
The random variance on the diamond is actually fairly realistic, there's the same kind of variance on a real pool table. Kudos to Nintendo for factoring something like that in.
That is a clever solution Nintendo added for the sake of realism. Obviously in reality no two shots can ever be identical but the randomness could have been added in a hundred different places. Very smart of them to understand chaos is easiest simulated with slight changes to initial conditions.
It is very interesting how they’ve added RNG in a way which still leaves it up to the player. Even if it’s not really humanly possible to take advantage of.
Ooohhh, this is incredibly fun. Bruteforceing like this has been done a few times, Sockfolder's old OoT/SM64/SMB setups and Krithalith's recent work on SM64 spring to mind. The interesting part will be deciding what variables to lock and what to iterate, since even locking the balls there's so many available just in cue speed, cue position, and aim. Good luck!
Exactly! You could set the balls to always the same position, but there's no guarantee that an 8 or 9 break exists for all cue positions and speeds, it's a really big solution space
Would probably lock all of the cue variables and focus only on adjusting the initial ball positions until you get closer and closer to 9 balls in. Once a ball goes in with a shot, lock its position for the next shot, and brute force the other positions until 2 go in. Then 3, then 4 etc. This would at least be my initial approach.
One thought I have for simplifying the search is, if you can figure out when balls touch, maybe you can work from front to back, find a solution that sinks the front ball after it's only hit the cue ball and one of the ones behind it, then use the random adjustment available on the 3rd ball that the second ball hits, to make the second one sink, etc. If you can reduce it to 1-2 collisions at a time then the behaviour gets a lot closer to deterministic so you can use normal optimization methods like hill climbing to get balls into pockets. I suppose you'd want to do a viability study first, toss out a bunch of random starts, count collisions, and see if there are any that sink lots of balls and remain at low collision counts, or if the early microseconds of the break involve a huge number of back and forths before the balls scatter.
I think the biggest constraint would be finding out if all ball positions support getting a 9-break. Assuming that a max power shot put in the right place every time is a key to success (to reduce variables), is there a ball position offset that is conducive to a 9-break? Alternatively, if the positions are fixed, is there a shot angle and power that can cause a 9-break? A lot of variables to be sure, but quite interesting to think about!
In real pool, the best breaks come from the tightest racks. Try manually changing the code to ensure that ajacent balls in the rack are touching. Then break with maximum power. Hope this helps!
IF the ball position precision is as high as the reverse eng. number(0.143925) suggest than we have: 287 850 positions in x axis and TIMES 287 850 in z axis. To the power of 9. (9 balls) Times hit power levels - lets say 256 Times the direction of hit - lets say 256 times cue position (x and y axis) - lets say 64 each. wolfram alpha says it is 10^106. If every atom (10^79 )of the universe was a computer, making one wii billard simulation per second since the beginning of time (10^17) we would test only one billionth of the possible hits. Good luck with brute forcing that. All that considering that physics enging is really THAT precise.
This sounds very interesting; if you genuinely want to do this, this is my suggestion: Take the time to recreate a stripped down version of the game, that will simply take the inputs (the 9 randomness values, ir position, etc.) and then calculate the end result as it would happen in the game. This would allow you to test things out much much quicker than by trying to automatically patch the values and test it in Dolphin. Plus, you may find ways to optimize the code even further. And if all else fails, chart all the different end positions and use statistics to determine the odds of a 9 shot.
hey, thanks for the input. we're already sort of doing that within dolphin by disabling some of the rendering, but turning it into a fully headless simulation like you're suggesting would require a much bigger decompilation project. as shown in the video, if we want to do anything with the game's code, we have to piece it together from the raw assembly to turn it into something readable, which none of us currently have the time to do on a large scale. maybe someday though
Funny thing. The RNG in Wii Billiards is actually attention to detail. In real billiards, the balls are manually racked with a loose guide, and jostled slightly prior to the break. Which means that they will, in fact, always be in very slightly randomized positions. The Wii is accurately modelling a human setting up the game.
If you know all the game's underlying physics math, then you could probably run a simulation in Python or something until you get the right combo of starting seed and shot strength.
9ball pool is arguably more popular in the competitive pool scene (I've played in both 8 and 9 ball tournaments and the 9 ball ones always have a bigger field even in the same regions)
People dont play 9 ball in real life? Its THE most popular and televised billiard game in America. Most tournaments are 9 ball. Granted 10 ball is gaining in popularity, as it does take luck out of accidentally making a ball on a legal shot and continuing play. 10 ball requires calling one ball and one pocket. 8 ball is definitely the most well known game and is the easiest to learn and play. Granted, most people dont actually know the real rules to 8 ball anyway. They just play the way someone else told them. Finally, there is a phrase pool players know, "what is the most important shot in pool? The next one."
3 thoughts 1. I highly suspect that if a 9 Break is possible that it may require a very small subset of the possible starting positions **and** an exact break fron the given starting position. Finding it by brute force would be like winning multiple lotery tickets at the same time. 2. This video was amazing. 5 years well worth the effort 3. I wonder if an 8-break is even possible though.
@@eins2001 Eeyup. And I even heard in a video where Efren Reyes and Mike Siegel played against each other in a game of 🎱, one of the announcers mentioned how he heard how 9-ball is to checkers whilst 8-ball is to chess.
While searching for a 9-break by manually specifying the initial positions of the balls is a good lead, it's also important to note that you'll need to verify that there exists a random starting seed that can generate that exact list of positions, which isn't guaranteed.
Hello, I am a maintainer of a billiards game. This is really smart and I am probably going to rip it off to add to my own sim. :D The reason this was done was almost certainly to avoid the common problem of people figuring out a cheesy "optimal" break and spamming it. 9-ball is pretty notable for being a type of billiards where someone can just play a solo game off a good break, and the virtualized mathematical sim that the Wii will do (and games like mine do) is stable, as you prove. Would love to see a decomp of the physics system they used. You can express a complete 2d billiards system in surprisingly little code.
See this kinda confuses me. Did it really take this long to figure out the randomisation of the balls considering the breaks were always random? Seem like the first thing anyone would do for a game that involves random outcomes for fun and varied matches.
Banger video. Good to know you're still breaking down Wii games. Crazy stuff. I also jumped when I saw Philipp Stollenmayer's name pop up because he's a game dev that made several mobile games I've played before. So the fact that you reached out to him and he responded is kind of nuts.
thanks so much, and also wow, that's really cool! i had no idea. i guess he's been around for a long time then because that impossible shot video was uploaded in 2009
This is a chaos theory problem. The solution space is probably not differentiable. I suspect your best chance at brute forcing this involves a super computer. And it still might take a heat death of the universe or two.
I kinda hate how much of the tech world is revolving around AI these days but, this seems like a really good opportunity for it. Setting up a neural net, feeding it the RNG values, and training it with the goal of getting a 9 ball break would be a great tool tor TAS makers to figure out a) if it’s possible, b) what RNG seeds it is and isn’t possible on, and c) whether or not it can be consistent. This is exactly what AI should be for, not stealing the hard work of creators for generating content, but performing repetitive trivial tasks based on extremely precise values to achieve theoretically possible goals!
I just watched the best video about a digital 9 ball game with janky code ever, and it was amazing. Truly fascinating how code with such simple goals remains hidden for so long
Really good video this, short and sweet. Can see the algorithm picking this up and running with it over the next few weeks. Good luck in your journey to finding the 9 break!
If there's one thing I've learned from speedrun communities across who knows how many games, it's that if there's RNG, there's a manip for it. Someone just has to find it.
This was a rollercoaster start to finish. Solid explanation in under 10 min. I really hope the original developer who put in that RNG sees this. I can imagine feeling so proud that someone finally noticed.
I have to say, this is a great credit to the people who coded the game. In real billiards, there's a skill aspect to breaking, but there's also luck. The humidity in the air, minutia of the shot, the cloth on the table, and *the racking of the balls* affect the break, and this makes the break pretty random (though it's possible to practice your break to make it more likely for one ball to go in). In the game, adding slight randomness to the racking of the balls simulates a real aspect of pool, and recreates the real randomness of the break. Really smart!
At 4:44 I was absolutely thinking about dynamical systems and sensitive initial conditions. Offsetting the balls by fractions of pixels on rack would have NO problem achieving an apparently random outcome.
I do enjoy that a very slight bit of RNG was implemented to mimic like the slight randomness of actual sets and that people assumed something was up for so long but collectively just thought "That's crazy Nintendo would never."
Me one minute from the end of this video: "I wonder if someone could run an emulation on a computer that endlessly rolls the first strike until it gets a 9 break and then save the numbers in the placement code." And then you mentioned trying to do something like that. Brilliant stuff man, I hope to one day see a genuine 9 break in engine.
It's frankly amazing how much randomness you can slot into just one tiny rng seed by doing it 9 times in a row. 60 million variations, per ball, all to make a billiards table minigame feel more realistic. I can totally believe that no one's ever copied a shot before now, and there's something kinda special about that, to be honest.
In real life pool, it is definitely possible to come up with a trick shot that makes 9 balls in one shot. Inventing a shot that makes 9 balls in one shot that is roughly in the form of a 9 ball rack would take some creativity and effort, but is probably possible. You might want to study up on the ghost ball and tangent line to get started. That exact position coming up in an actual game is probably about as close to 0 as you can get, though. In the entire 100 year plus history of 9 ball I doubt 8 balls have ever been made on the break (not counting the cue ball), much less 9. 7 is uncommon, but happens from time to time. The most I have seen personally is 6.
I've seen way too many cases of people finding out a strat they thought the community discovered three years ago has been old news for a decade in a different language community to believe there are only four videos of this happening floating around online.
you're right that this scenario has happened far too many times in speedrunning, but i've scoured niconico, bilibili, etc. as well and found nothing. even the most dedicated TASer of wii play, taityo, who is japanese, has never gotten higher than a 7-break. it's possible that there's still something out there though
UPDATE - there is now a centralized server specifically dedicated to billiards research! if you're interested in following this story as it develops, feel free to join: discord.gg/zUe9gZ8YMg
~ ~ ~ ~ ~ ~ ~
hey all, thanks for the support on this video! some responses to frequently asked questions/comments:
- there were previously some issues with the captions of the video that a couple of people brought up - I had incorrectly assumed that they were talking about the timings, but I now realize that there were words that were actually just incorrect. this is because I slightly revised my script before recording it and then mistakenly used a version that didn't have those revisions for the captioning. this issue should be fixed now, but if you come across any other discrepancies, please let me know
- i now know that 9 ball pool is actually far more popular than 8 ball in competitive play, and more popular in general in asian countries! thanks to the irl pool players in the comments for clarifying this
- yes, the game does require you to sink all 9 balls even though the real rules of 9 ball end the game once the 9 ball has been sunk. it's funny to think that if they followed the real rules, none of this would have ever been an issue and this video wouldn't exist
- the cue ball positioning isn't randomized - in the code shown at 4:09, the first line is "if (id != 0) {", which checks that the current ball being affected isn't the cue ball. if it is the cue ball, the code for adding the random offsets won't run. this is also why the rng can be disabled by replacing one assembly instruction - you can simply change the beq (branch if equal) instruction to an unconditional branch so that the code for adding the random offsets never runs for any ball.
- there could definitely be more efficient approaches to this problem involving interfacing directly with the game's physics engine and potentially even machine learning. however, the wii play research team is very small right now, and we have limited time and knowledge to work with when it comes to decompilation and complex math. part of the point of this video was just to get more eyes on this situation, so if you'd like to help or even if you just have some ideas to throw around, please feel free to DM me on discord (username: kataryn) or join the server linked above
9-ball ftw!!
I'm at the 4:45 mark where you talk about the slight offsets. Just want to say before you go further in the video (But watched further anyways just in case you covered it in full already) that it actually makes A LOT of sense to have that very slight degree of variation in the placement. The reason is that when playing any sort of billiards, the racking triangle (for normal pool at least) isn't exactly uhm... perfect every time. There's a lot of detail to this, but essentially, depending on how the person racks the balls up, they will get a slightly different arrangement and placement each time. Not only that, but even though the balls are quite precise in their size, shape, etc; there are always going to be tiny imperfections over time due to play or even original factor conditions.
This means that ultimately to get the exact same result off the break in billiards, absolutely every single condition must match. And that's just not likely to be the case except in extreme circumstances of luck/chance and cheating.
So, (having watched further into the video anyways) no it's not that the game is rigged. It's that billiards is one of those real world games that never really is going to have the exact same conditions multiple times at all or even in a row. And believe me, the players and designers and installers of this game are all generally very well aware of how close to perfect every condition needs to be to get a reliable table going that works how you expect it to.
For instance, a common problem at many bar pool tables, is that they are slightly tilted to one side or the other due to the slope of the floor/ground below and how a building will gradually sink/bend/tilt in areas here and there for over time. (For those who wish to argue that, just consider that not all buildings are made purely of titanium. I.E. Most materials flex/warp/etc over time.)
So the end result for playing pool/billiards of any form, is that no two tables will ever be entirely the same as each other. They'll all have some level of uniqueness to each. And having said that, now we are back to the problem of the position of the billiard balls at break. Depending on how well you rack them and how perfectly you manage to align them, that break could be different for every single shot placed even by a robot. And that's assuming you managed to line the rack up with the correct position on the table as well perfectly. Which probably isn't going to be the case either.
Now, I want to say that I do realize that video games aren't real life, so we expect them to some degree to have a level of repeatability. But! Technically... if you are trying to recreate a sport or real world game in its fullest, you want to include every variable that makes it that sport or real world game. So while it may seem paradoxical to want to include imperfections into a video game... it's actually exactly what you want to do with a game like Billiards.
Finally, to expound upon the point, let's consider what is required to actually create a 'perfect' table.
1. You would need the floor and the table both to be perfectly level on cosmic scale. Think Morty standing on the perfectly level square of floor made by Rick. That level of level. This is because any slight variation in the slope of the surfaces will cause the balls to go a different course than intended dependent upon that slope. Many players tend to recognize when there is a slope at all, and correct for it if need be or avoid that table entirely.
2. You would need your billiards to be made into perfect spheres. Absolutely perfect on the same level as the prior point. Not only that, but they would need to be made of a material even better than the way they are made now. They cannot be scuffed, dinged, or altered permanently in any manner... while still retaining the physical properties that allow a game of billiards to even be played. Good luck. What we use it pretty good already, I forget the exact names of each material, but it works well enough. But if we want a perfect table, even that needs an upgrade.
3. The racking mechanism has to be flawless. Every ball must fit perfectly in such a way that no two racks are ever different. Not only that, but it must be rackable in the exact same position every single time. No exceptions.
4. The environment the table is in also needs to be perfect, or at the very least, all the materials must be impervious to any influence from 'outside forces' like humidity for instance. It may not seem like a big issue, but humidity can be the difference between materials swelling and shrinking. When these things are minimal, it's not much of an issue to most. But if it's a large enough difference to make things change depending on an outside factor; it must not be allowed. So perfect environmental controls are needed.
5. Finally? Maybe... The entire area around the billiards table needs to be able to withstand the weight of the players around it in such a way that it doesn't cause the floor below to flex or bend in any slight manner at all. Once again, it might not be a huge amount, but any small difference is the difference in what causes each shot to be different from before. In buildings with strong floors, this isn't a problem. In buildings with weaker floors... it can be. A very slight one. But one none the less.
So. As you can see, there is likely never going to be a perfect billiards table in existence as far as we know right now with the materials and methods we have available to us. In a video game where everything is a sterile code vacuum, a perfect table could happen of course. But these sorts of games are made to represent reality in video game form, nothing else. So in that sense...
Wii sports did Billiards pretty much perfectly.
In normal games of pool, the closer the balls are together in the triangle, the more they will spread out
Well the reverse-tracing physics approach is ruled out by this comment, which I had been going to say separately. The other direction, randomly changing initial parameters to find a desired outcome, is called 'monte carlo simulation'. In this case you'd need to write a script to check: it would take far too long manually. Have the script run through at the smallest increments systematically. Yeah machine learning mights speed it up, but if you turn off the graphics (I'm assuming that's doable mind) it should be able to run through each scenario so fast that the time spent to program an ML system would actually take longer. The number is large but not THAT large, based on the figures.
Maybe you can get in touch with CodeBullet or another ML TH-camr to build the TAS for 0 RNG. If you can get the 9 break with 0 RNG you can then train it with randomness on single balls while feeding it exact positions so it learns how movement impacts the setup.
Would guess this only marginally ends up helping speedrunning -- you can see if there's something "special" you need to do to go for 9 vs going for 7 or less. Otherwise, it's likely just praying RNG lines up. Though maybe the TAS could identify the best initial shot that has the highest probability given the RNG factors and then humans can just spam that exact shot until RNG hits for them.
that's actually kind of incredible, though. like, it sucks for speedrunners that you just can't get a super reliable break. but the absolute genius of accounting for the fact that in real life, the diamond wouldn't be perfectly packed every time is just beautiful. someone who really cared programmed that minigame.
Yeah I feel like a lot of Nintendo games have little details like that, intentional or coincidental I don't know
It's a great illustration of the Butterfly Effect. The changes to the initial conditions are so slight as to be almost imperceptible, but the impact that they have on the results is immense
@@WolfWalrus Love me some good chaos theory in a Wii game.
Was about to post the same thing. The lack of perfection in real life seems like a critical detail that I'm glad they didn't miss, it makes everything about this more interesting.
Wii play was made with lots of care the video on the tanks mini game music really showed that
I enjoyed this a lot, good job
Hello Mr. Salt
Hmmmmm
Would you look who it is. The man who got me into Wii sports speedrunning
History of Wii Play Speedrun world records?
Hello summoning man
Hold up, that one guy's Mii was just reference points for where to hit the ball. Thats next level!
0:45
yeah that's my own footage, i made the mii for that exact purpose :)
i tend to use my mii's nose as a centerpoint to aim the cue on
billiardo 💪💪
thanks, totally needed to see the eldritch horror that is that mii today
@@5omebodycould just be going for a Mii of Rorschach from Watchmen
I like how the game designers actually incorporated the real-world innacuracies of setting up a billiards table, and that we were somehow surprised to see that the balls weren't perfectly lined up each time
I feel like they just didn't want someone to be able to setup a 9 break every time and this was the easiest way to accomplish thay
@@evwbbeven irl thats virtually impossible ive watched enough to confirm that
@@evwbb i feel like this is an intrinsic mechanic to billiards that would be found in any decent videogame version.
@@evwbb why... would they care about making a 9 break impossible, compared to, you know, simply making the game more realistic, the more obvious motivation?
@@TheAmazingCowpigWell it’s not only about 9 breaks, let’s say it was as realistic as possible, there would still be a “best break”. Even if that was only say 4 balls, if you could replicate it easily it would be kind of dumb
the part where you were like "one in 60? try one in 60 million" and played the Wii fit obese audio clip is comedy gold
5:49 for those looking
That's obese!
@@1unar_eclipse Thanks, saved me some time
only fatties recognize this noise
It's so subtle, and very much like the packing differences you see in pool IRL. It's also a perfect representation of a chaotic system, where very minor, even imperceptible, differences in initial conditions leads to wildly diverging results.
and the best part is, it doesn't look or feel like they did this JUST to prevent players from enjoying the game, but more so to make the game feel as realistic as possible. Nothing worse than when game developers add randomness to a system that didn't need to be random (like a basketball game having a programmed 5% chance to not fall into the hoop for "balance reasons") but in this case, it's an accurate representation of how billiards is set up IRL and thus with no two games being exactly alike, that adds a lot of replay value for casual players (and some risk pressure for speed runners that makes the game more fun to watch and see them adapt to get a faster time in the moment instead of just memorizing and making it another checkbox not worth watching).
Honestly this randomness makes sense considering how balls are racked up in real life. Kind of impressive of the devs to think about doing something like this although they wouldnt be so spaced out
But billiard balls are racked in a very repeatable and accurate way irl
@@tommolldevthere is still some small difference that occurs in the position of the balls irl
@@tommolldev Not in a microscopic scale. The game's simulation doesn't have a microscopic scale (no dust particles, no molecules, no scratches on the balls, no random tiny gusts of wind, etc.) so if a deterministic physics simulation is used, the only way to introduce randomness is to randomize position in this way. It's smart, for sure, although personally I don't think it's *that* impressively smart.
@@tommolldev 🤦🤦🤦🤦🤦🤦🤦🤦
That was my first thought too, that the RNG was an attempt to simulate the minuscule errors and offsets that would realistically occur when setting up a real billiards table, due to how utterly improbable it is that a human hand will plop something down in the same precise spot twice.
im glad the physics are deterministic and that the RNG only comes from initial position.
i need to see the 9 break
My first thought was that maybe the physics is non-deterministic, which is pretty easy to do if you use a variable time step.
Yeah, sounds like from here you don't even need to brute force. It's now a matter of math. You can probably write a script to make the micro adjustments and simulate the results without watching manually and highlighting the combination of variables that result in interesting points like a 9 ball, an 8 ball, or a scratch (something the video didn't bring up, but is worth noting, if the white ball is sunk, that's a scratch and thus a dud, but for curiousity's sake, would it be possible to hit the ball where all 10 balls are sunk? just for fun).
Reminds me of how RNG seeds are brute forced to find the perfect seed that gets the right outcome and what actions it takes to get that. In those games you have to do some brute force to advance the seed just enough, but in this, since all that matters is the position of the cue, the angle, how far back you pull the cue, and maybe how fast you push the cue forward (not sure), all you need is the algorithms for how the balls interact with each other and the walls, then put it all in python and let it run. Then test the successes manually to verify. That's what computer science is all about.
Billiards is chaos theory in practice. Infinitesimal variables all come together to impact how your shot goes, everything from how you are holding your cue, your technique, the condition of the table, where the cueball strikes, everything.
You could make the exact same break hundreds of times and you'll never get the same outcome.
You know it's actually quite funny that no real billiards players ever looked at this, because they could have told you right off that the exact position of the balls in the rack has a dramatic effect on the break, and my immediate assumption is that the game is doing position randomization, since other pool games nintendo has made also do it, Clubhouse games (ds) does it really obviously for example.
very interesting insight. Murasaki, one of the best Wii Play speedrunners and someone I briefly mentioned in the video, actually does have real life pool experience. I don't think he ever mentioned this, but he was one of the first people to put his stake in the "there's definitely RNG" ground
Knowing how to read a rack is definitely something higher level players do. You almost never see lower to mid level players (Fargo
@@exscalliber that's super interesting
@@exscalliberNeeding to learn the rules and nuances of pool? In MY pool game!? It's more likely than you think!
7 BALLS
WHAT THE FU-
9 BALLS
Please return to speedrunning All Golds that was peak content
That moment made Nicro a household name
NINE-BREAK TWENTY-FOUR HOUR CHALLENGE
Small, random changes to the ball position in the rack seems like exactly the correct way to produce randomness in a billiards game, since it is also a source of randomness in a real game.
10 break will happen… even the cue ball goin in 🔥
true
From a real life physics POV, sinking the 9th ball is almost impossible due to the way the balls are set up in a diamond pattern, as the center ball is akin to the middle balls in a newton's cradle, all the force delivered onto is exerted into another ball.
The physics engine in the game may literally not have enough power to move every single ball into a hole.
Good luck, I want to see it happen!
"almost"😎
actually Ivd thought in this and it's more impossible due to a single thing!
_scratching_
that is to say, when you *sink the cueball* or *sink the 8 ball at any time where you didn't call the shot, And not before sinking your solid/stripes.
so in addition to physically getting 8 balls to sink, you'd need them to go in a way where the cueball does not , and the 8 ball goes last.
I kinda think this is actually impossible
unless you just wanna get 9 balls in and also scratch 🤷🏻♀️ odds are palpable in that Instance.
based on this videos evidence and the sheer amount of rng involved I don't think this is gonna happen organically nor in a way that adheres to the game rules
@@TemmiePlays Wii Play uses 9ball rules, not 8ball. You don't have to sink the 8 ball last. You have to hit balls in increasing order, but you can sink any ball any time, no solids or stripes necessary (the balls in game are all solid too)
The 9 gets potted pretty often in real life 9-ball pool, but it's being caromed by other balls into a pocket.
@@TemmiePlaysWell you're basically asking for a 10-ball pot if you include the cue ball. Due to the physics though, the only way that'd happen is if you hit the ball in such a way that the balls bounced off the wall and hit the cue ball in a way that caused it to sink as well. Whcih is less likely due to limitations in how much power you can put in, but I'm sure there are seeds that make it possible. It's all a numbers game at this point, so regardless of physics or skill, this kind of turned into a computer science or math problem now that we know all the variables involved so far and the math never changes in code (unless they also added RNG to the balls bouncing and based that on factors that in no way could be measured but I doubt this game is THAT deep)
@ 4:00 Pro Ghidra tip:
Something I learned in reverse engineering Brawl is that direct reads from FLOAT_address and DOUBLE_address are pretty much always read-only when there’s a series of known bytes there. If you follow the address, you can untick the “volatile” box and it should show the actual proper values that are at those locations instead of just “a float/double exists at this address and we don’t know what it might be”
yeah, I learned that in the process of decompiling the piece of code mentioned in the video and it helped a lot
WHAT
@@kiwidev_ YEAH IT SAVES SO MUCH HASSLE LMAOOO
before I knew that I went and manually named each variable to its value so like... "FLOAT_6" or whatever.
it was hellish - BUT making them as read only makes it SOOOOO much easier to intuit the functions of things with lots of floats ^^
@@_fudgepop01 i totally misunderstood your comment at first - i knew the "FLOAT_address" values were constants but i was using a dolphin memory viewer to look at the values, i didn't know there was a setting to access them directly in ghidra. that's such a timesaver lol
@@kataryn OH HECK YEA I’m glad it helps!! It really was a game changer ^^
the fact that Wii Sports billiards has probably the most realistic depiction of a break diamond between each round is amazing
Reminds me of how Pokemon Heart Gold/Soul Silver's Pokewalker was the most accurate step counter for a time.
The fact that someone hasn't even been able to TAS this yet makes it so incredible. I hope that even if it proves to be theoretically possible with no position deviations, someone is able to accomplish sinking 9 balls even with the randomness of the positions.
I guess you could just run a bot now which would check every possibility strength, angle, hit position and ball position one by one.
Though who knows just how long that would take, not to mention lag might be a factor.
The random variance on the diamond is actually fairly realistic, there's the same kind of variance on a real pool table. Kudos to Nintendo for factoring something like that in.
and not for "fake balance" reasons but to actually simulate IRL variance.
@@MarioMastar Who said _anything_ about "fake balance?"
Definitely feels like the intro to a much longer video, and then it ends.
Which means part 2 in 7 years is gonna be a fuckin' banger.
I really hope that just randomly pops up in my recommendations 7 years from now
Yeah I was expecting 8:49 to lead into a video showing a TAS of a 7 or more break and then it just...ended
That is a clever solution Nintendo added for the sake of realism. Obviously in reality no two shots can ever be identical but the randomness could have been added in a hundred different places. Very smart of them to understand chaos is easiest simulated with slight changes to initial conditions.
you led up to 7 BALLS perfectly omg and included the new one, this is so well made! also 9 ball irl is pretty cool would recommend
I personally prefer it to 8 ball irl for sure
In my country everyone plays nine balls
that randomizing of the small shift of the balls on the rack is so realistic to real billiards that's cracked from the devs on doing that.
I absolutely love how on a video about a 9 break, its exactly 9:00 long
It is very interesting how they’ve added RNG in a way which still leaves it up to the player. Even if it’s not really humanly possible to take advantage of.
Ooohhh, this is incredibly fun.
Bruteforceing like this has been done a few times, Sockfolder's old OoT/SM64/SMB setups and Krithalith's recent work on SM64 spring to mind. The interesting part will be deciding what variables to lock and what to iterate, since even locking the balls there's so many available just in cue speed, cue position, and aim.
Good luck!
Exactly! You could set the balls to always the same position, but there's no guarantee that an 8 or 9 break exists for all cue positions and speeds, it's a really big solution space
Would probably lock all of the cue variables and focus only on adjusting the initial ball positions until you get closer and closer to 9 balls in. Once a ball goes in with a shot, lock its position for the next shot, and brute force the other positions until 2 go in. Then 3, then 4 etc. This would at least be my initial approach.
One thought I have for simplifying the search is, if you can figure out when balls touch, maybe you can work from front to back, find a solution that sinks the front ball after it's only hit the cue ball and one of the ones behind it, then use the random adjustment available on the 3rd ball that the second ball hits, to make the second one sink, etc. If you can reduce it to 1-2 collisions at a time then the behaviour gets a lot closer to deterministic so you can use normal optimization methods like hill climbing to get balls into pockets.
I suppose you'd want to do a viability study first, toss out a bunch of random starts, count collisions, and see if there are any that sink lots of balls and remain at low collision counts, or if the early microseconds of the break involve a huge number of back and forths before the balls scatter.
I genuinely admire the fact that you can make a 10 minute video about Wii play 9 ball billiards. Great video
It's exactly 9 minutes long, which just makes it that much better!
This video until 1:21: "Hey, what aboutTAS?"
This video after 1:21: "Now this is getting interesting!"
Update: ElectrifiedStrawberry finally got the first 9 break in TAS!!!
th-cam.com/video/Dd_BZfO1L24/w-d-xo.html
This is fascinating! May the algorithm smile upon you.
It's not 'rigged'. It's just a good simulator lol. Real billiard has those Tiny differnces, which makes all breaks unique
Adam Neely enjoyer spotted, always nice to see Sungazer's music in random videos lol. Awesome video, also!
I was hyped right when I heard it
Agreed. I heard the into fill and went :o
that shit always puts me in a good mood, came to see if anyone else recognized lol
I am suddenly emotionally invested in the Wii Play Billiards challenge community
I think the biggest constraint would be finding out if all ball positions support getting a 9-break. Assuming that a max power shot put in the right place every time is a key to success (to reduce variables), is there a ball position offset that is conducive to a 9-break? Alternatively, if the positions are fixed, is there a shot angle and power that can cause a 9-break? A lot of variables to be sure, but quite interesting to think about!
That is _such_ a good bit of realism added to a video game!! A lot of care went into making that game, and I'm pleasantly surprised and impressed.
This SLAPS I LOVED wii play as a kid, I will be waiting patiently for the 9 break
In real pool, the best breaks come from the tightest racks. Try manually changing the code to ensure that ajacent balls in the rack are touching. Then break with maximum power. Hope this helps!
It's been done! and it's beautiful!
IF the ball position precision is as high as the reverse eng. number(0.143925) suggest than we have:
287 850 positions in x axis and
TIMES 287 850 in z axis.
To the power of 9. (9 balls)
Times hit power levels - lets say 256
Times the direction of hit - lets say 256
times cue position (x and y axis) - lets say 64 each.
wolfram alpha says it is 10^106.
If every atom (10^79 )of the universe was a computer, making one wii billard simulation per second since the beginning of time (10^17) we would test only one billionth of the possible hits.
Good luck with brute forcing that.
All that considering that physics enging is really THAT precise.
This sounds very interesting; if you genuinely want to do this, this is my suggestion:
Take the time to recreate a stripped down version of the game, that will simply take the inputs (the 9 randomness values, ir position, etc.) and then calculate the end result as it would happen in the game. This would allow you to test things out much much quicker than by trying to automatically patch the values and test it in Dolphin.
Plus, you may find ways to optimize the code even further.
And if all else fails, chart all the different end positions and use statistics to determine the odds of a 9 shot.
hey, thanks for the input. we're already sort of doing that within dolphin by disabling some of the rendering, but turning it into a fully headless simulation like you're suggesting would require a much bigger decompilation project. as shown in the video, if we want to do anything with the game's code, we have to piece it together from the raw assembly to turn it into something readable, which none of us currently have the time to do on a large scale. maybe someday though
@@katarynOh jeez, that would certainly be a task and a half.
Funny thing. The RNG in Wii Billiards is actually attention to detail. In real billiards, the balls are manually racked with a loose guide, and jostled slightly prior to the break. Which means that they will, in fact, always be in very slightly randomized positions. The Wii is accurately modelling a human setting up the game.
I actually uploaded a video 13 years ago of Wii Play getting a 4 break and thinking that was already amazing/lucky. The 7 is just crazy to me
10/10 video but it must be pointed out that your Wii Play Billiards journey began in like 2009
the first obstacle was figuring out how to hit the ball
Guess I should've found the community a decade ago because I could have told you that the starting position of the balls is randomized.
If you know all the game's underlying physics math, then you could probably run a simulation in Python or something until you get the right combo of starting seed and shot strength.
9ball pool is arguably more popular in the competitive pool scene (I've played in both 8 and 9 ball tournaments and the 9 ball ones always have a bigger field even in the same regions)
Yeah 9 ball is pretty much the game at an elite level
I was getting ready to say the same thing... 9-ball is all I play 😅
People dont play 9 ball in real life? Its THE most popular and televised billiard game in America. Most tournaments are 9 ball. Granted 10 ball is gaining in popularity, as it does take luck out of accidentally making a ball on a legal shot and continuing play. 10 ball requires calling one ball and one pocket. 8 ball is definitely the most well known game and is the easiest to learn and play. Granted, most people dont actually know the real rules to 8 ball anyway. They just play the way someone else told them. Finally, there is a phrase pool players know, "what is the most important shot in pool? The next one."
Gotta love the sungazer banger, didn't expect that on a wii play video of all things
3 thoughts
1. I highly suspect that if a 9 Break is possible that it may require a very small subset of the possible starting positions **and** an exact break fron the given starting position.
Finding it by brute force would be like winning multiple lotery tickets at the same time.
2. This video was amazing. 5 years well worth the effort
3. I wonder if an 8-break is even possible though.
Sungazer as background music? Excellent taste!
Phillip is an absolute G for admitting the video is fake. Proper gentleman.
0:06 Actually, 9 ball pool is the game of choice in national World of Pool championships.
Makes sense. It's far more focused on consistency, accuracy, and layup prediction.
@@eins2001 Eeyup. And I even heard in a video where Efren Reyes and Mike Siegel played against each other in a game of 🎱, one of the announcers mentioned how he heard how 9-ball is to checkers whilst 8-ball is to chess.
An incredible video. Smooth, well-edited, well spoken, informative. I was glued to the screen the entire time.
While searching for a 9-break by manually specifying the initial positions of the balls is a good lead, it's also important to note that you'll need to verify that there exists a random starting seed that can generate that exact list of positions, which isn't guaranteed.
electrifiedstrawberry did it in a tas!!!
Hello, I am a maintainer of a billiards game.
This is really smart and I am probably going to rip it off to add to my own sim. :D
The reason this was done was almost certainly to avoid the common problem of people figuring out a cheesy "optimal" break and spamming it. 9-ball is pretty notable for being a type of billiards where someone can just play a solo game off a good break, and the virtualized mathematical sim that the Wii will do (and games like mine do) is stable, as you prove.
Would love to see a decomp of the physics system they used. You can express a complete 2d billiards system in surprisingly little code.
See this kinda confuses me. Did it really take this long to figure out the randomisation of the balls considering the breaks were always random? Seem like the first thing anyone would do for a game that involves random outcomes for fun and varied matches.
Awesome video explaining the journey to a potential 9 break
That sungazer breakdown was hard af ngl
9 minutes ago I had never even heard of Wii Billiards, now i'm excited and anxious to see a potential 9 break. Subbed
Sungazer in the background! Love it.
Banger video. Good to know you're still breaking down Wii games. Crazy stuff. I also jumped when I saw Philipp Stollenmayer's name pop up because he's a game dev that made several mobile games I've played before. So the fact that you reached out to him and he responded is kind of nuts.
thanks so much, and also wow, that's really cool! i had no idea. i guess he's been around for a long time then because that impossible shot video was uploaded in 2009
@@kataryn Yeah I guess!
didn't ever think Wii Play Billiards would somehow be connected to my middle-school addiction to the mobile game "Okay?" all those years ago LMAO.
Loved hearing a bit of Adam Neely's band Sungazer in the background! Nice :)
-Paintspot Infez
Wasabi!
i love the editing on this video: the font especially. good luck on the nine ball sink!
3:46 Recently, Wii Teamed Up to try and take another stab at solving it from the inside out, and Wii Actually Found Something.
0:47 I like the mii with the face to help aim
I'll be honest, this conclusion feels pretty obvious if a TAS couldn't recreate a break
FYI, the guy you emailed is one of the best mobile indie game developers in the world. 🙂
The day that a perfect game of Billiards is legitimately achieved, it better make international news
This is a chaos theory problem. The solution space is probably not differentiable. I suspect your best chance at brute forcing this involves a super computer. And it still might take a heat death of the universe or two.
Several Heat Deaths of the Universe later we're still looking.
it'll involve luck but that's all of speedrun. keep good track of which runs you've tried and focus on parallelizing.
Appreciate the captions 🙌
I didn't realize it was so easy to add captions to youtube videos - I will definitely continue doing it in the future
the wii fit BMI sound at 5:50 got me
I clicked on this video just to say that 9-ball is the most popular cue game world wide. 8-ball is really only played in the USA.
I kinda hate how much of the tech world is revolving around AI these days but, this seems like a really good opportunity for it. Setting up a neural net, feeding it the RNG values, and training it with the goal of getting a 9 ball break would be a great tool tor TAS makers to figure out a) if it’s possible, b) what RNG seeds it is and isn’t possible on, and c) whether or not it can be consistent. This is exactly what AI should be for, not stealing the hard work of creators for generating content, but performing repetitive trivial tasks based on extremely precise values to achieve theoretically possible goals!
This is a stupid comment and totally misses the purpose of machine learning.
I just watched the best video about a digital 9 ball game with janky code ever, and it was amazing. Truly fascinating how code with such simple goals remains hidden for so long
if this gets a million views, just know i predicted it.
Really good video this, short and sweet. Can see the algorithm picking this up and running with it over the next few weeks. Good luck in your journey to finding the 9 break!
If there's one thing I've learned from speedrun communities across who knows how many games, it's that if there's RNG, there's a manip for it. Someone just has to find it.
Running differential evolution to find a global solution might be possible
Great video and incredible discovery. Also you are so crazy awesome for the Sungazer music
Loving the Sungazer music you included!! Absolute jazz fusion goats.
Fr
Aha I thought I was crazy but that is indeed the Class of 09 title music at the start. Impeccable taste you must have
The video is 9 minutes long exactly, nice detail.
Also I particularly like your Groove, I hope we'll see a one-shot game of Wii Play Billiards soon!
Thank you for doing a deep dive on this . I didn't know the depths speedrun have looked over the code but I'm not surprised. Keep it up
This was a rollercoaster start to finish. Solid explanation in under 10 min. I really hope the original developer who put in that RNG sees this. I can imagine feeling so proud that someone finally noticed.
Sometimes the algorithm just gives me a mind-blowing video about a game or topic I never cared about until now.
I have to say, this is a great credit to the people who coded the game. In real billiards, there's a skill aspect to breaking, but there's also luck. The humidity in the air, minutia of the shot, the cloth on the table, and *the racking of the balls* affect the break, and this makes the break pretty random (though it's possible to practice your break to make it more likely for one ball to go in). In the game, adding slight randomness to the racking of the balls simulates a real aspect of pool, and recreates the real randomness of the break. Really smart!
At 4:44 I was absolutely thinking about dynamical systems and sensitive initial conditions. Offsetting the balls by fractions of pixels on rack would have NO problem achieving an apparently random outcome.
I do enjoy that a very slight bit of RNG was implemented to mimic like the slight randomness of actual sets and that people assumed something was up for so long but collectively just thought "That's crazy Nintendo would never."
Me one minute from the end of this video: "I wonder if someone could run an emulation on a computer that endlessly rolls the first strike until it gets a 9 break and then save the numbers in the placement code." And then you mentioned trying to do something like that.
Brilliant stuff man, I hope to one day see a genuine 9 break in engine.
recognized that sungazer song immediately even super quiet hehe
I really want to see a 9 break become a real thing (even if it's only in a tas)
Extremely concise and informative. When someone says they've been wanting to make a vid for years, that's how you know it's gonna be a banger
It's frankly amazing how much randomness you can slot into just one tiny rng seed by doing it 9 times in a row. 60 million variations, per ball, all to make a billiards table minigame feel more realistic.
I can totally believe that no one's ever copied a shot before now, and there's something kinda special about that, to be honest.
hell yeah love the sungazer background music
Never watched one of your videos before but as soon as I heard the Class of 09 music I instantly liked. 😂
In real life pool, it is definitely possible to come up with a trick shot that makes 9 balls in one shot. Inventing a shot that makes 9 balls in one shot that is roughly in the form of a 9 ball rack would take some creativity and effort, but is probably possible. You might want to study up on the ghost ball and tangent line to get started. That exact position coming up in an actual game is probably about as close to 0 as you can get, though. In the entire 100 year plus history of 9 ball I doubt 8 balls have ever been made on the break (not counting the cue ball), much less 9. 7 is uncommon, but happens from time to time. The most I have seen personally is 6.
It's not rigged, its realistic. Watch any billiards tournament, the balls are hand placed, there's almost never perfect placement.
I've seen way too many cases of people finding out a strat they thought the community discovered three years ago has been old news for a decade in a different language community to believe there are only four videos of this happening floating around online.
you're right that this scenario has happened far too many times in speedrunning, but i've scoured niconico, bilibili, etc. as well and found nothing. even the most dedicated TASer of wii play, taityo, who is japanese, has never gotten higher than a 7-break. it's possible that there's still something out there though
Quick, we need Numberphile on this one