Repository navigation
Releases: stoatworks-labs/jackpot
Release list
v0.2.0
Your own values on the money wheel, from a plain text file (#1), in both SW Jackpot and SW Jackpot Over.
- Wheel files. Write your values in any text editor, one a line, save as
.txtand choose it with Wheel File.- A leading
*makes that segment the jackpot (black and gold, the On Jackpot shower). - A leading
%makes it a red joker-style win (the On Win shower). - Only marked segments win; a file with no markers never does.
- 🍒 🍋 🍊 🔔 🍉 💎 7️⃣ on a line of their own are drawn as the slot machine's reel art.
- Lowercase is printed as capitals and accents are dropped. Characters the type can't print are left out, and the log says so if a whole value comes out blank.
- A file can be UTF-8 (with or without a BOM), UTF-16 or Windows-1252 (Notepad's three), up to 1 MB and 1,000 values.
- A leading
- The new controls, in the Money Wheel group:
- Segments (2–54): with no file, a smaller Big Six;
- Wheel File;
- Lines (In Order, or Random: N values drawn by Seed, and drawn again only when something changes, never per spin);
- Short File (Repeat the values round the wheel, or Fewer Segments).
- Labels shrink to fit. Up to 32 characters on 2 segments, down to 7 on 41–54. The result board shows the whole value.
- Results on your own wheel:
- Jackpot lands on a
*, Win on any marked segment, and Near Miss beside a*; - Fixed Number is the file's line number, as an editor counts it.
- Jackpot lands on a
- Change it mid-spin and nothing is lost. The spin lands, its result and shower play out, the board stays up for 3.5 s, then the new wheel is painted.
- Saved compositions open as before. The new controls sit after Clapper, which moves the later ones down the list. Resolume stores values by name, so nothing should be lost, though I haven't watched it reopen one yet. With no file and Segments at 54 the wheel draws exactly what v0.1.1 did.
- Font File opens its font the way Wheel File does, so on Windows a font in a folder with a non-ASCII name should now load. I haven't tried that one in Resolume.
What is verified
- Offline, with the plugin's own harness on this Mac:
- every Result on wheels of 2 to 54 segments lands as asked, and is read back out of the picture;
- segments are equal, every label sits inside its own, and the draw is fair by chi-square;
- every encoding above is read correctly, and bad files fall back and say why;
- 13 new models that are wrong on purpose are each caught (37 in all), as are 17 of 17 one-character mutants;
- at the defaults, 4,500 frames over ten scenes are byte for byte v0.1.1's.
- In Resolume Arena 7.27.1 on Windows (software rendering, an MSVC build of this code):
- wheel files from a folder named
räder ✓ 🎰, and as Notepad saves UTF-8, "Unicode" and ANSI; - the emoji;
- a PNG renamed to .txt (the Big Six stays, and the log says why);
- an edited file chosen again;
- a Jackpot spin with its board and shower, and Fixed Number 3 landing on line 3;
- Segments changed mid-spin.
- wheel files from a folder named
- The fleet's Arena gate on the same build: 19 of 19 checks. All 54 and 56 controls match, and both file fixtures load. 28 and 30 controls were shown to move the picture, Segments, Lines and Short File among them, and none was dead.
- Not verified:
- wheel files have never been loaded into Resolume on a Mac;
- I haven't watched a saved composition restore the renumbered controls;
- nothing has run with sound (the Windows box has no sound device).
Full Changelog: v0.1.1...v0.2.0
v0.1.1
Two fixes from the first report off a real rig (#3, #2).
-
The shower's pile clears itself. In v0.1.0 nothing ever cleared the floor over time:
- the only limit was a cap on pieces at rest;
- pieces that came to rest tilted more than about 16° never counted towards it and stayed forever;
- chips that rolled off the front or back of the table were never removed, and some were drawn floating mid-picture;
- the invisible height of the pile never went down, so new pieces landed on air;
- with Shower on Always, the pool filled and the shower stopped after a few minutes.
Now every piece fades about 12 s after it is thrown, oldest first, whatever it is made of. Pieces off the table go at once, the pile's height drains with it, and the shower keeps falling however long it runs. Switching Chips to Coins doesn't wipe the floor; the old pieces age out.
-
Play sits at the top of the panel. Resolume puts a control in one group only, so Play disappeared when the Game group was collapsed. Game and Play now sit at the top, outside any group. Nothing is renumbered, so saved compositions open as before.
What is verified
- Offline:
- A new
jptest --pilefails on v0.1.0 (743 pieces left 30 s after the last shower, 363 of them chips; 234 of 4,000 thrown in the last 10 s of a minute on Always) and passes now (0 left; 4,000 of 4,000). --nameschecks that Play is ungrouped.tools/verify.shpasses in full, including two new mutants.
- A new
- In Resolume Arena 7.27.1 on Windows (software rendering, a build of this code), with Shower Only on Always: chips, then coins. The chips were gone about 14 s after the switch, the shower kept falling, and the floor was clear 15 s after Shower Off.
- Not verified: Play's place in the panel has not been looked at in Resolume.
Full Changelog: v0.1.0...v0.1.1
v0.1.0
The first release of Jackpot: the casino floor for Resolume Arena and Avenue, as two FFGL plugins, a source (SW Jackpot, JP01) and the same games over your clip (SW Jackpot Over, JP02). A one-armed bandit, a roulette wheel, the money wheel, a craps table and the lottery drum, with chips and coins showering on a win. Press Play: the game plays out with real physics and comes to rest on a random result, or the one you set, at exactly Spin Time, or on the next beat or bar.
The one idea: every casino game is decided before it is shown, and every one has a symmetry the physics cannot see. A roulette rotor's 37 (or 38) frets are identical, so the numbered ring can be turned by whole pockets; the money wheel's 54 pegs are identical, so the painted segments can be turned by whole segments; each die is drawn as R(t)·S, turned by its own rotation group; lottery balls are alike until the numbers are dealt out to them. So each game is simulated honestly, ahead of time, and then the paint is turned so the result is the one asked for. The motion you see is exactly what the physics produced, and the turn is never seen happening. The slot machine needs no trick: its stops are the result, drawn on a 64-stop virtual reel as every machine since Telnaes's 1984 patent draws them, so near misses happen as often as on the real thing. Results read against your bet: Random (weighted as the real game), Win, Jackpot, Near Miss, Lose, or a Fixed number.
Downloads: universal macOS bundles (Apple silicon and Intel) as a .dmg or .zip, and a Windows x64 installer or .zip. The macOS build is signed and notarised; the Windows build is unsigned, so SmartScreen warns once. Every download carries both plugins: Jackpot.bundle and Jackpot Over.bundle (Jackpot.dll and Jackpot Over.dll on Windows). Drop both into Extra Effects.
What is measured (offline, tools/verify.sh, a harness that drives the real plugin classes in a headless GL context, at 320×180 and 640×360):
- Slots. Every Result on 3 and 5 reels, both symbol sets, 1,632 pulls: every reel at rest exactly on its drawn stop, the last at Spin Time. 192 payline symbols read out of the picture, none wrong. Over 400,000 pulls the seven lands 0.01534 of the time (the table's 1/64 is 0.01562) and the blanks beside it 0.18848 (12/64 = 0.18750): 12.3 near misses per jackpot seven on the virtual reel, 2.0 on a fair strip. At speed the reels are within 0.011 of the strip integrated over the shutter.
- Roulette. Every number of both wheels, Fixed: the ball at rest in the pocket painted with it, 75 of 75, and 40 of 40 read from the picture. Turning the rotor by 1, 5, 18 and 36 pockets leaves the ball's path bit-identical. The ball leaves the track within 0.47% of v² = g r tan 14°.
- Money wheel. Every value, Fixed, and 14 of 14 read from the picture; the pegs and the clapper bit-identical under the turn; every one of 114 peg passages took energy.
- Craps. Every total 2–12: the faces on top of the dice as drawn add up to it, every throw reaches the back wall, and the pass line plays through a scripted shooter.
- Lottery. 16 draws of 10 to 75 balls: the rack shows the numbers drawn, every drawn ball rises up the tube, and no two balls overlap more than 1.75 mm.
- Shower. A falling coin within 0.009 of the closed form under quadratic drag; 1.1 million contact steps, none adding energy; and Euler's disk: as a coin leans over, the contact's rate rises 2.5× within 6% of Ω² = 4 g / (r sin α), which nothing was written to do.
- Duration. Every game at rest at exactly Spin Time (3, 6 and 12 s) and moving a frame before; Land On ends 64 waits each on a beat or bar boundary.
- The effect. The clip untouched where there is no game, and everywhere at Mix 0, to 1.2×10⁻⁷.
- Controls. 21 deliberately wrong models are all detected, 10 one-character mutants of the shipped GLSL and C++ are all caught, and all 46 parameters change the picture.
In Resolume Arena 7.27.1 on macOS (Apple M4 Max, 2026-10-09): both plugins register (SW Jackpot JP01 a source, SW Jackpot Over JP02 an effect); SW Jackpot in a clip played the slot machine's jackpot and roulette's 7 RED as asked, at Spin Time, and the plugin's log recorded both plays and no warning or error. The Over effect, the other three games, Land On against Arena's transport and a saved composition were not tried there.
Windows, in Resolume Arena 7.27.1 (win-lab, Mesa llvmpipe, no GPU, 2026-10-09): a CI build of this source loads from Extra Effects, SW Jackpot registers as JP01, a source, and SW Jackpot Over as JP02, an effect; all 50 and 52 host controls match the declaration (the two names at Resolume's length limit complete); both render with a font loaded from file, and Arena's log stays clean: 17 passed, 0 failed of the fleet gate's checks. The gate never presses Play, so it shows only the controls that change an idle picture: 25 on the source and 27 on the effect did, and none read dead. The 16 that act only on a play were not measured there, and no game has run on Windows. Software rendering says nothing about a GPU or about speed.
What is assumed, or unconfirmed. The physics is the plugin's own and checked against the laws it should obey, not fitted to filmed casino equipment: the roulette ball is a point on a profile of cones, the clapper a spring, the lottery's air a jet and some turbulence, the chips single-point contacts. Craps throws are a stickman's ordinary ones, so a long Spin Time is met by the shooter's hold and at most a 0.6× slow motion; short Spin Times are played fast (a 3 s lottery at about 3×). The slot machine and the money wheel are drawn face on in 2D; roulette, craps and the lottery are ray-traced. Whether Resolume's barPhase is a usable downbeat, which Land On trusts, is unmeasured.
Cost: at 1080p on an Apple M4 Max, the median frame mid-play is 0.6 ms for the slot machine, 4.0 ms for roulette, 0.5 ms for the money wheel, 2.3 ms for craps, 1.2 ms for a 49-ball lottery. A play is planned on a worker thread, so it starts a frame or two after the press: craps 1 ms, roulette 13 ms, the lottery 46 ms and the money wheel 57 ms.
Not done. No presets, no browser demo and no OpenFX port.
- User guide: https://stoatworks-labs.com/software/jackpot/guide/
- Project page: https://stoatworks-labs.com/software/jackpot/
- Video: https://www.youtube.com/watch?v=-s5chJo2Idc