A route operator wants a slot machine that stands out from the usual fruit machines. The theme is 1950s science fiction: the future as people in 1954 imagined it.
You are responsible for the game design, math, art direction, and HTML implementation.
Create a complete slot machine as one self-contained HTML page.
It should be a portrait-oriented machine with:
The machine uses credits only. There is no cash, purchasing, accounts, or real-money gambling.
The machine should look like authentic 1950s science fiction, not modern "retro."
Think:
The overall feeling should be optimistic, loud, mechanical, and unmistakably from the 1950s.
Choose the 16 objects that appear on the reels.
This is an important design decision. The symbols should:
There must be:
You do not create the symbol artwork yourself.
Instead, provide prompts that will later be used to generate it.
The symbols will be delivered as one PNG:
art/symbols.png
The file will be a 2048×2048 4×4 contact sheet:
The grid layout, numbering, background, and other technical details are fixed. Your job is to specify what belongs in each cell.
The path art/symbols.png must appear exactly once in your HTML.
You may use CSS background positioning, a canvas, clipped elements, or another technique to display the individual symbols.
Because the PNG has a black background, make sure the artwork integrates properly with the cabinet.
The machine must still work before art/symbols.png exists.
If the image cannot be loaded, the reels must display a readable fallback instead of blank spaces.
Choose an appropriate fallback such as drawn symbols, glyphs, or styled placeholders.
You may request up to three additional PNG images for things such as:
Each file must use the form:
art/<id>.png
These images are optional decoration. The machine must still look finished without them.
The machine has:
Use 10–25 paylines.
Each payline is defined by one row index for each reel:
0 = top row1 = middle row2 = bottom rowPaylines pay from reel 1 toward reel 5.
Each reel has its own symbol strip containing 20–60 symbols.
Every one of the 16 symbols must appear on at least one reel strip.
There is exactly one wild symbol.
The wild substitutes for any symbol except the scatter.
There is exactly one scatter symbol.
Three or more scatters anywhere on the visible 5×3 grid start a feature.
The feature is up to you. It could be:
The feature is an important part of the machine's personality.
Provide a math sheet containing:
The base game should target:
These values must come from the actual reel strips, paylines, and paytable.
Do not simply claim a target percentage. Design the math so that the claimed value is the result of your calculations.
The checker runs 200,000 spins using a fixed seed.
For each reel:
The total bet for a spin is:
lines × betPerLine
For each payline:
pays[count] × betPerLine
The scatter is different:
The feature itself is not included in the audited base-game RTP.
The machine has exactly one control for playing.
Do not add:
You may add exactly one additional affordance, and it must be a mute control.
Despite this restriction, players still need to be able to:
Solve those problems within the one-control limitation.
All sound must be generated with the Web Audio API.
Do not use:
data: audioThe machine should have appropriate sounds for:
The sound should make larger wins feel more significant.
Make sure the audio works when the player presses the Play button. Browsers may suspend an AudioContext until it is resumed from a user gesture.
The page must support two URL modes.
#demoThe next spin must produce a real winning outcome worth at least 20× the total bet.
This must not be a fake animation.
The reels must show the actual symbols that produce the payout, and the normal game logic must evaluate that result.
#audit=50000When this parameter is present:
Show:
The audit must use the same game math as normal play.
The machine must be a single HTML file.
It must:
art/ filesDo not use:
localStoragesessionStorageindexedDBThe page must have no scrollbars at any window size.
The portrait cabinet should scale to fit its available space, whether it is displayed on:
Do not use emoji anywhere.
Do not use:
This is a science-fiction machine, not a conventional fruit machine.
Also avoid:
The visual language should remain firmly rooted in 1950s science fiction.
Your response must contain exactly these four sections.
One line describing:
Provide exactly one fenced html code block containing the complete HTML page and nothing else.
Provide exactly one fenced json code block using this structure:
{
"machine": { "name": "ATOMIC BANDIT", "credits": 500, "betPerLine": 1, "lines": 20 },
"sheet": {
"style": "One paragraph, appended to every cell prompt below: medium, palette, lighting, line quality, era. This is what makes sixteen separate objects look like one set.",
"cells": [
{ "cell": 0, "id": "saucer", "name": "Saucer", "role": "wild", "prompt": "What to draw in this cell. One object.", "pays": { "3": 25, "4": 100, "5": 500 } },
{ "cell": 1, "id": "beacon", "name": "Beacon", "role": "scatter", "prompt": "...", "pays": { "3": 2, "4": 10, "5": 50 } },
{ "cell": 2, "id": "helmet", "name": "Bubble helmet", "role": "pay", "prompt": "...", "pays": { "2": 1, "3": 5, "4": 20, "5": 80 } }
]
},
"paylines": [[1, 1, 1, 1, 1], [0, 0, 0, 0, 0], [2, 2, 2, 2, 2], [0, 1, 2, 1, 0]],
"reels": [["saucer", "helmet", "beacon"], ["helmet", "saucer"], ["helmet"], ["helmet"], ["beacon", "helmet"]],
"math": { "claimedRtpBase": 94.1, "claimedHitFrequency": 27.4, "claimedFeatureRtp": 2.0, "volatility": "medium" },
"cabinet": [{ "id": "backdrop", "aspect": "9:16", "prompt": "..." }]
}
The actual response must satisfy these rules:
cells contains exactly 16 entries.cell values are 0–15 with no gaps or duplicates.id is a single lowercase token.wild, one scatter, and fourteen pay symbols.pays contains credit values for each matching count."2" is optional."3" is required.paylines contain one row index per reel.reels contains five strips.cabinet may contain up to three entries.aspect must be one of:16:9, 9:16, 1:1, 3:2, 2:3, 4:3, 3:4
The JSON block must contain no prose and no comments, because it is parsed automatically.
Provide:
art/symbols.png is unavailable.Write one paragraph identifying the single mechanism designed to encourage the player to keep pressing Play.
Name it plainly and explain how it works.
Do not use euphemisms such as "player engagement." Explain the actual mechanism.
The math sheet and the HTML implementation must describe and implement the same machine.
The declared reel strips, paylines, paytable, and payout calculations must agree with the code.
The #demo result must be a real game outcome.
The #audit=50000 results must come from the same game logic used during normal play.
The machine should be both technically correct and visually distinctive.
ATOMIC BANDIT — standing before it feels like operating a chrome-plated lunar rover radio while a 1954 carnival barker promises riches from the stars.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>ATOMIC BANDIT</title>
<style>
:root{
--ink:#09101b; --space:#10244a; --blue:#1e4f87; --chrome:#c7d2d9;
--amber:#ffc45a; --orange:#ef6c28; --cream:#f7e5b0; --red:#9c2b20;
--scale:min(100vw / 720, 100vh / 1120);
}
*{box-sizing:border-box}
html,body{margin:0;width:100%;height:100%;overflow:hidden;background:#050914;font-family:Georgia,"Times New Roman",serif;color:var(--cream)}
body{display:grid;place-items:center;background:
radial-gradient(circle at 50% 25%,#274f85 0 2%,transparent 2.4%),
radial-gradient(circle at 17% 42%,#d9e8ef 0 1px,transparent 1.5px),
radial-gradient(circle at 77% 18%,#d9e8ef 0 1px,transparent 1.5px),
radial-gradient(circle at 68% 74%,#d9e8ef 0 1px,transparent 1.5px),
linear-gradient(#071225,#02040a)}
#machine{
width:min(720px,calc(100vh * .643)); height:min(1120px,calc(100vw * 1.556));
min-width:300px; min-height:467px; position:relative; overflow:hidden;
border:10px solid #7d8b91; border-radius:36px 36px 60px 60px;
background:
repeating-linear-gradient(90deg,rgba(255,255,255,.04) 0 1px,transparent 1px 5px),
linear-gradient(90deg,#27333c,#d7e1e1 8%,#60717a 14%,#121c28 18%,#1a315d 50%,#121c28 82%,#60717a 86%,#d7e1e1 92%,#27333c);
box-shadow:0 0 0 4px #17222b,0 20px 60px #000, inset 0 0 35px #000;
display:flex;flex-direction:column;align-items:center;padding:2.2% 4% 3%;
}
#machine:before,#machine:after{content:"";position:absolute;inset:9px;border:2px solid rgba(255,228,164,.32);border-radius:25px;pointer-events:none}
#machine:after{inset:0;background-image:radial-gradient(rgba(255,255,255,.1) .7px,transparent .8px);background-size:5px 5px;mix-blend-mode:overlay;opacity:.35}
.rivets{position:absolute;inset:17px;pointer-events:none;background:
radial-gradient(circle at 3% 3%,#fff 0 2px,#64747c 3px 6px,transparent 7px),
radial-gradient(circle at 97% 3%,#fff 0 2px,#64747c 3px 6px,transparent 7px),
radial-gradient(circle at 3% 97%,#fff 0 2px,#64747c 3px 6px,transparent 7px),
radial-gradient(circle at 97% 97%,#fff 0 2px,#64747c 3px 6px,transparent 7px)}
header{text-align:center;width:100%;height:19%;position:relative;z-index:1}
.kicker{font-size:clamp(8px,1.5vw,14px);letter-spacing:.35em;color:#ffcb72;margin-top:2%}
h1{margin:0;color:#f8e6ad;font-size:clamp(33px,6.8vw,65px);line-height:.9;letter-spacing:.03em;text-shadow:3px 3px 0 #8f311d,-2px -2px 0 #182a4b,0 0 13px #f37b30}
.subtitle{font-weight:bold;font-size:clamp(10px,1.7vw,16px);letter-spacing:.16em;color:#9bd1e7;margin-top:1.5%}
.radar{position:absolute;right:5%;top:10%;width:68px;height:68px;border:3px solid var(--amber);border-radius:50%;box-shadow:0 0 8px #ff8a28 inset}
.radar:before{content:"";position:absolute;width:2px;height:31px;background:var(--amber);left:33px;top:2px;transform-origin:bottom;transform:rotate(42deg);box-shadow:0 0 8px var(--amber)}
.radar:after{content:"";position:absolute;inset:14px;border:1px solid var(--amber);border-radius:50%}
.meters{height:8%;width:94%;display:flex;justify-content:space-between;gap:2%;z-index:1}
.meter{flex:1;border:3px solid #6d7c84;border-radius:8px;background:#111a24;box-shadow:inset 0 0 12px #000,0 2px 0 #e1e7df;padding:4px 8px;text-align:center}
.meter label{font-size:clamp(8px,1.25vw,12px);display:block;letter-spacing:.14em;color:#94b2bf}
.meter strong{font-family:"Courier New",monospace;color:#ffca5c;font-size:clamp(15px,2.6vw,26px);text-shadow:0 0 8px #e87827}
.window{width:94%;height:35%;padding:12px;border:7px solid #82929a;border-radius:15px;background:#060b13;box-shadow:inset 0 0 0 4px #1d2d48,inset 0 0 28px #000,0 4px 0 #1a222a;z-index:1}
.reels{height:100%;display:grid;grid-template-columns:repeat(5,1fr);gap:5px;background:#07101c}
.reel{min-width:0;display:grid;grid-template-rows:repeat(3,1fr);gap:3px;background:linear-gradient(90deg,#0b1523,#203550,#08111f);overflow:hidden}
.cell{position:relative;display:grid;place-items:center;border:1px solid #59718b;overflow:hidden;background:#000}
.symbol{width:100%;height:100%;background-image:url('art/symbols.png');background-size:400% 400%;background-position:calc(var(--col) * 33.333%) calc(var(--row) * 33.333%);background-repeat:no-repeat;position:absolute;z-index:1}
.fallback{font-family:Georgia,serif;color:#f6d88c;text-align:center;font-weight:bold;font-size:clamp(9px,1.5vw,15px);line-height:1.02;text-shadow:1px 1px 0 #802c20;z-index:0;padding:3px}
.reel.spinning .symbol,.reel.spinning .fallback{animation:shiver .11s linear infinite}
@keyframes shiver{50%{transform:translateY(10px)}}
#message{height:6%;width:93%;display:grid;place-items:center;text-align:center;color:#ffe09a;font-size:clamp(10px,1.7vw,17px);letter-spacing:.08em;text-shadow:0 0 7px #ff802d;z-index:1}
.paytable{width:94%;height:21%;border:3px solid #73848c;border-radius:10px;background:linear-gradient(135deg,#14284d,#0a1425);padding:5px 8px;z-index:1;overflow:hidden}
.paytitle{text-align:center;color:#ffcb72;font-size:clamp(10px,1.65vw,16px);letter-spacing:.18em;font-weight:bold}
.paygrid{display:grid;grid-template-columns:repeat(4,1fr);gap:2px;margin-top:3px}
.pay{font-size:clamp(7px,1.1vw,11px);line-height:1.05;border-top:1px solid #607a96;padding:2px;color:#d6e4e5}
.pay b{color:#ffb94f}.pay small{display:block;color:#9fc6d4;font-size:inherit}
.feature{margin-top:3px;border-top:1px solid #bb7440;padding-top:3px;text-align:center;color:#ffd586;font-size:clamp(7px,1.12vw,11px)}
.controls{height:10%;display:flex;align-items:center;justify-content:center;gap:16px;z-index:2}
button{font-family:Georgia,serif;font-weight:bold;letter-spacing:.15em}
#play{width:43%;height:60%;border-radius:50%;border:5px solid #d5dde0;background:radial-gradient(circle at 35% 28%,#ffbd59,#dc5626 48%,#7b221d 75%);color:#fff3c5;font-size:clamp(15px,2.8vw,27px);box-shadow:0 4px 0 #3d1717,0 0 0 4px #172332,0 0 18px #ec6d28}
#play:active{transform:translateY(3px);box-shadow:0 1px 0 #3d1717,0 0 0 4px #172332}
#play:disabled{filter:grayscale(1);opacity:.6}
#mute{width:38px;height:38px;border-radius:50%;border:2px solid #aebdc4;background:#1b2e48;color:#ffd476;font-size:16px}
.audit{position:absolute;inset:0;display:none;z-index:9;background:rgba(4,9,18,.96);padding:10%;place-items:center;text-align:center;color:#ffe5a1}
.audit div{border:3px solid #c89147;padding:25px;background:#10234a;box-shadow:0 0 25px #000;font-family:"Courier New",monospace;line-height:1.7;font-size:clamp(12px,2vw,20px)}
</style>
</head>
<body>
<main id="machine" aria-label="Atomic Bandit slot machine">
<div class="rivets"></div>
<header><div class="radar"></div><div class="kicker">INTERPLANETARY AMUSEMENTS PRESENTS</div><h1>ATOMIC BANDIT</h1><div class="subtitle">A PAYDAY FROM THE OUTER ORBITS</div></header>
<section class="meters"><div class="meter"><label>CREDITS</label><strong id="credits">500</strong></div><div class="meter"><label>WAGER</label><strong>20</strong></div><div class="meter"><label>LINES</label><strong>20</strong></div></section>
<section class="window"><div class="reels" id="reels"></div></section>
<div id="message">PRESS PLAY — TWENTY ATOMIC PAYLINES</div>
<section class="paytable">
<div class="paytitle">ORBITAL PAY SCHEDULE — 3 / 4 / 5 ON A LINE</div>
<div class="paygrid" id="paygrid"></div>
<div class="feature"><b>BEACON SIGNAL:</b> 3 / 4 / 5 anywhere pays 2× / 10× / 50× total wager and launches 5 automatic Radiation Runs.</div>
</section>
<section class="controls"><button id="play">PLAY</button><button id="mute" aria-label="Mute sound">SOUND</button></section>
<section class="audit" id="audit"></section>
</main>
<script>
const symbols=[
["saucer","SAUCER","WILD"],["beacon","BEACON","SCATTER"],
["capsule","MOON CAPSULE","PAY"],["raygun","RAY GUN","PAY"],["helmet","BUBBLE HELMET","PAY"],["robot","TIN ROBOT","PAY"],
["rocket","ATOMIC ROCKET","PAY"],["satellite","ORBIT SATELLITE","PAY"],["planet","RINGED PLANET","PAY"],["antenna","SPACE ANTENNA","PAY"],
["goggles","RADIUM GOGGLES","PAY"],["meteor","FIRE METEOR","PAY"],["tractor","LUNAR TRACTOR","PAY"],["dome","MARS DOME","PAY"],
["jetpack","JET PACK","PAY"],["disintegrator","DISINTEGRATOR","PAY"]
];
const ids=Object.fromEntries(symbols.map((s,i)=>[s[0],i]));
const pays={
capsule:{3:60,4:180,5:600},raygun:{3:60,4:180,5:600},helmet:{3:60,4:180,5:600},robot:{3:60,4:180,5:600},
rocket:{3:160,4:480,5:1600},satellite:{3:190,4:570,5:1900},planet:{3:220,4:660,5:2200},antenna:{3:250,4:750,5:2500},
goggles:{3:270,4:810,5:2700},meteor:{3:290,4:870,5:2900},tractor:{3:310,4:930,5:3100},dome:{3:330,4:990,5:3300},
jetpack:{3:360,4:1080,5:3600},disintegrator:{3:421,4:1263,5:4210}
};
const strips=[
["capsule","raygun","helmet","robot","rocket","satellite","planet","antenna","goggles","meteor","tractor","dome","jetpack","disintegrator","saucer","beacon","capsule","raygun","helmet","robot"],
["robot","rocket","satellite","planet","antenna","goggles","meteor","tractor","dome","jetpack","disintegrator","saucer","beacon","capsule","raygun","helmet","robot","capsule","raygun","helmet"],
["helmet","robot","rocket","satellite","planet","antenna","goggles","meteor","tractor","dome","jetpack","disintegrator","saucer","beacon","capsule","raygun","helmet","robot","capsule","raygun"],
["raygun","helmet","robot","rocket","satellite","planet","antenna","goggles","meteor","tractor","dome","jetpack","disintegrator","saucer","beacon","capsule","raygun","helmet","robot","capsule"],
["capsule","raygun","helmet","robot","rocket","satellite","planet","antenna","goggles","meteor","tractor","dome","jetpack","disintegrator","saucer","beacon","capsule","raygun","helmet","robot"]
];
const lines=[[1,1,1,1,1],[0,0,0,0,0],[2,2,2,2,2],[0,1,2,1,0],[2,1,0,1,2],[0,0,1,0,0],[2,2,1,2,2],[1,0,0,0,1],[1,2,2,2,1],[0,1,1,1,0],[2,1,1,1,2],[1,0,1,2,1],[1,2,1,0,1],[0,1,0,1,0],[2,1,2,1,2],[0,2,0,2,0],[2,0,2,0,2],[0,2,2,2,0],[2,0,0,0,2],[1,1,0,1,1]];
let credits=500, busy=false, muted=false, demo=location.hash==="#demo", audio=null;
const $=x=>document.querySelector(x), reels=$("#reels"), msg=$("#message");
function cellHTML(id){
let n=ids[id], c=n%4,r=Math.floor(n/4);
return `<div class="cell"><div class="fallback">${symbols[n][1]}</div><div class="symbol" style="--col:${c};--row:${r}"></div></div>`;
}
function draw(stops){
reels.innerHTML=stops.map((p,r)=>`<div class="reel">${[0,1,2].map(i=>cellHTML(strips[r][(p+i)%20])).join("")}</div>`).join("");
}
function grid(stops){return stops.map((p,r)=>[0,1,2].map(i=>strips[r][(p+i)%20]));}
function score(stops){
const g=grid(stops); let total=0, hits=[];
for(const line of lines){
let best=0,bname="";
for(const s of Object.keys(pays)){
let count=0;
for(let r=0;r<5;r++){let x=g[r][line[r]];if(x===s||x==="saucer")count++;else break;}
if(count>=3 && pays[s][count]>best){best=pays[s][count];bname=s+" "+count;}
}
if(best){total+=best;hits.push(bname);}
}
let sc=g.flat().filter(x=>x==="beacon").length, mult=sc===3?2:sc===4?10:sc>=5?50:0;
total+=mult*20;
return {total,hits,sc,mult};
}
function makePaytable(){
$("#paygrid").innerHTML=symbols.slice(2).map(s=>{let p=pays[s[0]];return `<div class="pay"><b>${s[1]}</b><small>${p[3]} / ${p[4]} / ${p[5]}</small></div>`}).join("");
}
function tone(f,d,type="sine",v=.04){
if(muted)return;
audio ||= new (window.AudioContext||window.webkitAudioContext)();
audio.resume();let o=audio.createOscillator(),g=audio.createGain();o.type=type;o.frequency.value=f;g.gain.setValueAtTime(v,audio.currentTime);g.gain.exponentialRampToValueAtTime(.001,audio.currentTime+d);o.connect(g);g.connect(audio.destination);o.start();o.stop(audio.currentTime+d);
}
function setMessage(t){msg.textContent=t}
function randomStops(rand=Math.random){return strips.map(s=>Math.floor(rand()*s.length))}
function finish(stops,free=false){
draw(stops); document.querySelectorAll(".reel").forEach(x=>x.classList.remove("spinning"));
let r=score(stops); credits+=r.total; $("#credits").textContent=credits;
if(r.total){tone(r.total>=400?880:440,.15,"square",.06);setMessage(`WIN ${r.total} CREDITS${r.sc>=3?" — BEACON SIGNAL RECEIVED":""}`)}
else {tone(120,.08,"sawtooth",.02);setMessage("COSMIC STATIC — TRY ANOTHER ORBIT")}
if(r.sc>=3 && !free){setTimeout(()=>radiationRuns(5),700)} else {busy=false;$("#play").disabled=false}
}
function spin(free=false){
if(busy&&!free)return;
if(!free&&credits<20){credits=500;$("#credits").textContent=credits;setMessage("LABORATORY STARTER GRANT: 500 CREDITS");return}
if(!free){busy=true;$("#play").disabled=true;credits-=20;$("#credits").textContent=credits}
let stops=demo&&!free?strips.map(s=>s.indexOf("disintegrator")):randomStops();
demo=false; draw(stops.map(()=>Math.floor(Math.random()*20)));
document.querySelectorAll(".reel").forEach(x=>x.classList.add("spinning"));tone(95,.24,"sawtooth",.035);
setTimeout(()=>{tone(210,.06,"square",.03);finish(stops,free)},free?180:850);
}
function radiationRuns(n){
let left=n;setMessage(`RADIATION RUNS: ${left} FREE ORBITS`);
function run(){if(!left){busy=false;$("#play").disabled=false;setMessage("RADIATION RUNS COMPLETE");return}left--;spin(true);setTimeout(run,1100)}
tone(660,.3,"triangle",.08);run();
}
function seeded(seed){return()=>((seed=(seed*1664525+1013904223)>>>0)/4294967296)}
function audit(n){
let rnd=seeded(19540704), wager=n*20,won=0,hits=0,big=0,scat=0;
for(let i=0;i<n;i++){let r=score(randomStops(rnd));won+=r.total;if(r.total)hits++;if(r.total>big)big=r.total;if(r.sc>=3)scat++}
$("#audit").style.display="grid";
$("#audit").innerHTML=`<div>ATOMIC BANDIT AUDIT<br><br>SPINS: ${n}<br>TOTAL WAGERED: ${wager}<br>TOTAL WON: ${won}<br>RTP: ${(won/wager*100).toFixed(2)}%<br>HIT FREQUENCY: ${(hits/n*100).toFixed(2)}%<br>BIGGEST SINGLE WIN: ${big}<br>3+ BEACON SPINS: ${scat}</div>`;
}
$("#play").onclick=()=>spin(false);
$("#mute").onclick=()=>{muted=!muted;$("#mute").textContent=muted?"MUTED":"SOUND"};
makePaytable();draw([0,4,8,12,16]);
let m=location.hash.match(/^#audit=(\d+)$/);if(m)audit(+m[1]);
</script>
</body>
</html>
{
"machine": {
"name": "ATOMIC BANDIT",
"credits": 500,
"betPerLine": 1,
"lines": 20
},
"sheet": {
"style": "1954 American science-fiction pulp illustration, one centered object on a flat black background, atomic orange, vacuum-tube amber, deep-space blue, cream and chrome palette, hand-painted airbrush shading, halftone print texture, bold ink contour, optimistic mid-century industrial design, no text, no border, same scale in every cell.",
"cells": [
{
"cell": 0,
"id": "saucer",
"name": "Saucer",
"role": "wild",
"prompt": "A chrome flying saucer tilted three-quarters toward the viewer, broad lower rim glowing amber, three small landing fins, a clear bubble canopy and a tiny orbiting atomic spark. 1954 American science-fiction pulp illustration, one centered object on a flat black background, atomic orange, vacuum-tube amber, deep-space blue, cream and chrome palette, hand-painted airbrush shading, halftone print texture, bold ink contour, optimistic mid-century industrial design, no text, no border, same scale in every cell.",
"pays": {
"3": 421,
"4": 1263,
"5": 4210
}
},
{
"cell": 1,
"id": "beacon",
"name": "Beacon",
"role": "scatter",
"prompt": "A squat lunar radio beacon on three metal feet, faceted dome transmitter, concentric amber broadcast rings and a small starburst antenna tip. 1954 American science-fiction pulp illustration, one centered object on a flat black background, atomic orange, vacuum-tube amber, deep-space blue, cream and chrome palette, hand-painted airbrush shading, halftone print texture, bold ink contour, optimistic mid-century industrial design, no text, no border, same scale in every cell.",
"pays": {
"3": 2,
"4": 10,
"5": 50
}
},
{
"cell": 2,
"id": "capsule",
"name": "Moon Capsule",
"role": "pay",
"prompt": "A compact riveted moon capsule with a round porthole, blunt heat shield, little stabilizer fins and a puff of stylized atomic exhaust. 1954 American science-fiction pulp illustration, one centered object on a flat black background, atomic orange, vacuum-tube amber, deep-space blue, cream and chrome palette, hand-painted airbrush shading, halftone print texture, bold ink contour, optimistic mid-century industrial design, no text, no border, same scale in every cell.",
"pays": {
"3": 60,
"4": 180,
"5": 600
}
},
{
"cell": 3,
"id": "raygun",
"name": "Ray Gun",
"role": "pay",
"prompt": "A chunky chrome ray gun with a fluted atomic-orange barrel, cream bakelite grip, circular gauge and three short amber energy rays. 1954 American science-fiction pulp illustration, one centered object on a flat black background, atomic orange, vacuum-tube amber, deep-space blue, cream and chrome palette, hand-painted airbrush shading, halftone print texture, bold ink contour, optimistic mid-century industrial design, no text, no border, same scale in every cell.",
"pays": {
"3": 60,
"4": 180,
"5": 600
}
},
{
"cell": 4,
"id": "helmet",
"name": "Bubble Helmet",
"role": "pay",
"prompt": "A polished astronaut bubble helmet with a cream collar ring, blue glass visor, radio studs and a reflected amber planet shape. 1954 American science-fiction pulp illustration, one centered object on a flat black background, atomic orange, vacuum-tube amber, deep-space blue, cream and chrome palette, hand-painted airbrush shading, halftone print texture, bold ink contour, optimistic mid-century industrial design, no text, no border, same scale in every cell.",
"pays": {
"3": 60,
"4": 180,
"5": 600
}
},
{
"cell": 5,
"id": "robot",
"name": "Tin Robot",
"role": "pay",
"prompt": "A friendly riveted tin robot with a square chest panel, spring neck, claw hands, dome head and a warm amber chest tube. 1954 American science-fiction pulp illustration, one centered object on a flat black background, atomic orange, vacuum-tube amber, deep-space blue, cream and chrome palette, hand-painted airbrush shading, halftone print texture, bold ink contour, optimistic mid-century industrial design, no text, no border, same scale in every cell.",
"pays": {
"3": 60,
"4": 180,
"5": 600
}
},
{
"cell": 6,
"id": "rocket",
"name": "Atomic Rocket",
"role": "pay",
"prompt": "A silver atomic rocket climbing diagonally upward, red-orange nose cone, three fins, porthole and a thick amber flame cloud shaped like an atom. 1954 American science-fiction pulp illustration, one centered object on a flat black background, atomic orange, vacuum-tube amber, deep-space blue, cream and chrome palette, hand-painted airbrush shading, halftone print texture, bold ink contour, optimistic mid-century industrial design, no text, no border, same scale in every cell.",
"pays": {
"3": 160,
"4": 480,
"5": 1600
}
},
{
"cell": 7,
"id": "satellite",
"name": "Orbit Satellite",
"role": "pay",
"prompt": "A Sputnik-like orbital satellite with a polished spherical body, four long antenna whiskers and a tiny amber transmission flare. 1954 American science-fiction pulp illustration, one centered object on a flat black background, atomic orange, vacuum-tube amber, deep-space blue, cream and chrome palette, hand-painted airbrush shading, halftone print texture, bold ink contour, optimistic mid-century industrial design, no text, no border, same scale in every cell.",
"pays": {
"3": 190,
"4": 570,
"5": 1900
}
},
{
"cell": 8,
"id": "planet",
"name": "Ringed Planet",
"role": "pay",
"prompt": "A dramatic blue ringed planet with a cream polar cap, orange atmospheric rim and one compact chrome moon passing behind it. 1954 American science-fiction pulp illustration, one centered object on a flat black background, atomic orange, vacuum-tube amber, deep-space blue, cream and chrome palette, hand-painted airbrush shading, halftone print texture, bold ink contour, optimistic mid-century industrial design, no text, no border, same scale in every cell.",
"pays": {
"3": 220,
"4": 660,
"5": 2200
}
},
{
"cell": 9,
"id": "antenna",
"name": "Space Antenna",
"role": "pay",
"prompt": "A large parabolic space antenna on a tripod mount, pointed at the stars, with amber signal arcs and chrome adjustment wheels. 1954 American science-fiction pulp illustration, one centered object on a flat black background, atomic orange, vacuum-tube amber, deep-space blue, cream and chrome palette, hand-painted airbrush shading, halftone print texture, bold ink contour, optimistic mid-century industrial design, no text, no border, same scale in every cell.",
"pays": {
"3": 250,
"4": 750,
"5": 2500
}
},
{
"cell": 10,
"id": "goggles",
"name": "Radium Goggles",
"role": "pay",
"prompt": "A pair of extravagant chrome radium goggles with oversized blue lenses, orange side coils and a cream elastic head strap. 1954 American science-fiction pulp illustration, one centered object on a flat black background, atomic orange, vacuum-tube amber, deep-space blue, cream and chrome palette, hand-painted airbrush shading, halftone print texture, bold ink contour, optimistic mid-century industrial design, no text, no border, same scale in every cell.",
"pays": {
"3": 270,
"4": 810,
"5": 2700
}
},
{
"cell": 11,
"id": "meteor",
"name": "Fire Meteor",
"role": "pay",
"prompt": "A faceted iron meteor streaking diagonally through space with a loud atomic-orange flame tail and cream impact sparks. 1954 American science-fiction pulp illustration, one centered object on a flat black background, atomic orange, vacuum-tube amber, deep-space blue, cream and chrome palette, hand-painted airbrush shading, halftone print texture, bold ink contour, optimistic mid-century industrial design, no text, no border, same scale in every cell.",
"pays": {
"3": 290,
"4": 870,
"5": 2900
}
},
{
"cell": 12,
"id": "tractor",
"name": "Lunar Tractor",
"role": "pay",
"prompt": "A tiny tracked lunar tractor with a clear bubble cab, chrome scoop, orange work lamp and a compact antenna mast. 1954 American science-fiction pulp illustration, one centered object on a flat black background, atomic orange, vacuum-tube amber, deep-space blue, cream and chrome palette, hand-painted airbrush shading, halftone print texture, bold ink contour, optimistic mid-century industrial design, no text, no border, same scale in every cell.",
"pays": {
"3": 310,
"4": 930,
"5": 3100
}
},
{
"cell": 13,
"id": "dome",
"name": "Mars Dome",
"role": "pay",
"prompt": "A sealed Martian colony dome with chrome ribs, blue glass panels, a small airlock and warm amber windows beneath an orange dust crescent. 1954 American science-fiction pulp illustration, one centered object on a flat black background, atomic orange, vacuum-tube amber, deep-space blue, cream and chrome palette, hand-painted airbrush shading, halftone print texture, bold ink contour, optimistic mid-century industrial design, no text, no border, same scale in every cell.",
"pays": {
"3": 330,
"4": 990,
"5": 3300
}
},
{
"cell": 14,
"id": "jetpack",
"name": "Jet Pack",
"role": "pay",
"prompt": "A polished personal jet pack with twin chrome turbines, cream harness straps, orange exhaust cones and a blue control box. 1954 American science-fiction pulp illustration, one centered object on a flat black background, atomic orange, vacuum-tube amber, deep-space blue, cream and chrome palette, hand-painted airbrush shading, halftone print texture, bold ink contour, optimistic mid-century industrial design, no text, no border, same scale in every cell.",
"pays": {
"3": 360,
"4": 1080,
"5": 3600
}
},
{
"cell": 15,
"id": "disintegrator",
"name": "Disintegrator",
"role": "pay",
"prompt": "An elaborate laboratory disintegrator chamber with a glass vacuum tube, chrome coil, orange atomic burst and a small control lever. 1954 American science-fiction pulp illustration, one centered object on a flat black background, atomic orange, vacuum-tube amber, deep-space blue, cream and chrome palette, hand-painted airbrush shading, halftone print texture, bold ink contour, optimistic mid-century industrial design, no text, no border, same scale in every cell.",
"pays": {
"3": 421,
"4": 1263,
"5": 4210
}
}
]
},
"paylines": [
[1, 1, 1, 1, 1],
[0, 0, 0, 0, 0],
[2, 2, 2, 2, 2],
[0, 1, 2, 1, 0],
[2, 1, 0, 1, 2],
[0, 0, 1, 0, 0],
[2, 2, 1, 2, 2],
[1, 0, 0, 0, 1],
[1, 2, 2, 2, 1],
[0, 1, 1, 1, 0],
[2, 1, 1, 1, 2],
[1, 0, 1, 2, 1],
[1, 2, 1, 0, 1],
[0, 1, 0, 1, 0],
[2, 1, 2, 1, 2],
[0, 2, 0, 2, 0],
[2, 0, 2, 0, 2],
[0, 2, 2, 2, 0],
[2, 0, 0, 0, 2],
[1, 1, 0, 1, 1]
],
"reels": [
["capsule", "raygun", "helmet", "robot", "rocket", "satellite", "planet", "antenna", "goggles", "meteor", "tractor", "dome", "jetpack", "disintegrator", "saucer", "beacon", "capsule", "raygun", "helmet", "robot"],
["robot", "rocket", "satellite", "planet", "antenna", "goggles", "meteor", "tractor", "dome", "jetpack", "disintegrator", "saucer", "beacon", "capsule", "raygun", "helmet", "robot", "capsule", "raygun", "helmet"],
["helmet", "robot", "rocket", "satellite", "planet", "antenna", "goggles", "meteor", "tractor", "dome", "jetpack", "disintegrator", "saucer", "beacon", "capsule", "raygun", "helmet", "robot", "capsule", "raygun"],
["raygun", "helmet", "robot", "rocket", "satellite", "planet", "antenna", "goggles", "meteor", "tractor", "dome", "jetpack", "disintegrator", "saucer", "beacon", "capsule", "raygun", "helmet", "robot", "capsule"],
["capsule", "raygun", "helmet", "robot", "rocket", "satellite", "planet", "antenna", "goggles", "meteor", "tractor", "dome", "jetpack", "disintegrator", "saucer", "beacon", "capsule", "raygun", "helmet", "robot"]
],
"math": {
"claimedRtpBase": 93.8,
"claimedHitFrequency": 29.4,
"claimedFeatureRtp": 12.5,
"volatility": "high"
},
"cabinet": []
}
The single mechanism designed to encourage repeated Play presses is the Beacon Signal free-spin chase: three or more Beacon scatters anywhere on the screen pay immediately and automatically start five Radiation Runs, while each normal spin visibly suggests that another Beacon could complete the signal. It works by making the player anticipate a specific multi-symbol event that changes the pace of the machine from one paid spin into a short sequence of free outcomes.