#tog-analytics.tog-wrap{
--gold:#fbbf24;
--gold-2:#f59e0b;
--emerald:#10b981;
--red:#ef4444;
--text:#f8fafc;
--muted:#cbd5e1;
--line:rgba(255,255,255,.12);
--panel:rgba(15,23,42,.72);
--panel-2:rgba(30,41,59,.58);
--shadow:0 8px 28px rgba(0,0,0,.22);
color:var(--text);
font-family:Arial,Helvetica,sans-serif;
background:transparent;
max-width:1200px;
margin:0 auto;
}
#tog-analytics *{box-sizing:border-box}
#tog-analytics .tog-grid{
display:grid;
grid-template-columns:repeat(12,1fr);
gap:20px;
}
#tog-analytics .tog-card{
background:var(--panel);
border:1px solid rgba(251,191,36,.18);
border-radius:20px;
box-shadow:var(--shadow);
padding:20px;
backdrop-filter:blur(3px);
}
#tog-analytics .tog-card h3{
margin:0 0 8px;
color:var(--gold);
font-size:24px;
line-height:1.2;
}
#tog-analytics .tog-card p{
margin:0 0 14px;
color:var(--muted);
line-height:1.6;
font-size:15px;
}
#tog-analytics .span-6{grid-column:span 6}
#tog-analytics .span-12{grid-column:span 12}
#tog-analytics .canvas-box{
position:relative;
width:100%;
height:360px;
}
#tog-analytics .canvas-box.tall{height:420px}
#tog-analytics canvas{
width:100%;
height:100%;
display:block;
background:transparent;
}
#tog-analytics .mini-metrics{
display:grid;
grid-template-columns:repeat(4,1fr);
gap:14px;
margin-top:16px;
}
#tog-analytics .metric{
background:var(--panel-2);
border:1px solid rgba(255,255,255,.08);
border-radius:16px;
padding:14px;
text-align:center;
}
#tog-analytics .metric .k{
display:block;
color:var(--muted);
font-size:12px;
text-transform:uppercase;
letter-spacing:.08em;
margin-bottom:6px;
}
#tog-analytics .metric .v{
display:block;
color:var(--text);
font-size:24px;
font-weight:700;
}#tog-analytics .golden-spins{
display:grid;
grid-template-columns:repeat(3,1fr);
gap:18px;
margin-top:10px;
}
#tog-analytics .spin-box{
background:var(--panel-2);
border:1px solid rgba(255,255,255,.08);
border-radius:18px;
padding:18px;
text-align:center;
position:relative;
overflow:hidden;
}
#tog-analytics .spin-box::before{
content:"";
position:absolute;
inset:0;
background:radial-gradient(circle at top, rgba(251,191,36,.12), transparent 55%);
pointer-events:none;
}
#tog-analytics .spin-books{
font-size:34px;
line-height:1;
margin-bottom:10px;
}
#tog-analytics .spin-title{
font-size:18px;
font-weight:700;
color:var(--text);
margin-bottom:6px;
}
#tog-analytics .spin-sub{
color:var(--muted);
font-size:14px;
line-height:1.5;
min-height:44px;
margin-bottom:12px;
}
#tog-analytics .spin-badge{
display:inline-flex;
align-items:center;
justify-content:center;
width:58px;
height:58px;
border-radius:999px;
border:2px solid var(--gold);
color:var(--gold);
font-size:24px;
font-weight:700;
box-shadow:0 0 18px rgba(251,191,36,.28);
}
#tog-analytics .spin-foot{
margin-top:10px;
color:var(--gold);
font-size:13px;
text-transform:uppercase;
letter-spacing:.08em;
font-weight:700;
}#tog-analytics .legend{
display:flex;
flex-wrap:wrap;
gap:12px 18px;
margin-top:12px;
color:var(--muted);
font-size:13px;
}
#tog-analytics .legend span{
display:inline-flex;
align-items:center;
gap:8px;
}
#tog-analytics .dot{
width:12px;
height:12px;
border-radius:999px;
display:inline-block;
}#tog-analytics .notes{
margin-top:12px;
color:var(--muted);
font-size:14px;
line-height:1.6;
}@media (max-width: 900px){
#tog-analytics .span-6{grid-column:span 12}
#tog-analytics .golden-spins{grid-template-columns:1fr}
#tog-analytics .mini-metrics{grid-template-columns:repeat(2,1fr)}
}
@media (max-width: 560px){
#tog-analytics .mini-metrics{grid-template-columns:1fr}
#tog-analytics .canvas-box{height:320px}
#tog-analytics .canvas-box.tall{height:380px}
#tog-analytics .tog-card h3{font-size:21px}
}
The Mathematical Balance
This doughnut chart shows the long-run split between player return and house edge. Temple of Gold is a high-volatility slot, so real sessions can swing far above or below the theoretical average.
RTP95.28%
House Edge4.72%
VolatilityVery High
Max Win5,000x
Symbol Hierarchy & Payouts
Premium symbols dominate the payout model. The top symbol creates a steep reward jump, which supports the slot’s top-heavy design and bonus-driven win distribution.
Values shown below use the source payout structure from your research: Female Adventurer 500x, Golden Statue 200x, Golden Artifact 75x, Golden Wheel 75x, Ace/King 15x, Queen/Jack/10 10x.
The Golden Free Spins
Temple of Gold’s defining twist is the tiered bonus trigger. More Book scatters at entry means more expanding symbols from the start, making the feature stronger before the first free spin is even played.
📖📖📖
3 Scatters
Triggers 10 free spins with the classic Book setup.
1
📖📖📖📖
4 Scatters
Boosts the feature with two expanding symbols for more reel coverage.
2
📖📖📖📖📖
5 Scatters
The premium trigger that starts the round with three expanding symbols.
3
Hit Frequency
Based on your research, the closest comparative baseline suggests an overall hit frequency of around 30%. This means some kind of win lands roughly once every 3.33 spins, although many of those wins will be small.
Estimated winning spins: 30%
Estimated non-winning spins: 70%
Gameplay Dynamics Analysis
The base game and free spins behave very differently. The base game offers more frequent small returns, while the feature concentrates most of the meaningful win potential into fewer, more explosive moments.
Base Game
Free Spins
Relative scores are analytic visualisations rather than official developer metrics. They are meant to express the shift in feel from the base game to the feature.
(function () {
const root = document.getElementById('tog-analytics');
if (!root) return;const COLORS = {
gold: '#fbbf24',
gold2: '#f59e0b',
emerald: '#10b981',
red: '#ef4444',
text: '#f8fafc',
muted: '#cbd5e1',
line: 'rgba(255,255,255,0.12)',
slate: '#94a3b8',
slate2: 'rgba(148,163,184,0.25)'
};function dprCanvas(canvas) {
const ratio = Math.max(window.devicePixelRatio || 1, 1);
const rect = canvas.getBoundingClientRect();
const width = Math.round(rect.width * ratio);
const height = Math.round(rect.height * ratio);
canvas.width = width;
canvas.height = height;
const ctx = canvas.getContext('2d');
ctx.setTransform(ratio, 0, 0, ratio, 0, 0);
return { ctx, width: rect.width, height: rect.height };
}function clear(ctx, w, h) {
ctx.clearRect(0, 0, w, h);
}function roundRect(ctx, x, y, w, h, r, fill, stroke) {
const rr = Math.min(r, w / 2, h / 2);
ctx.beginPath();
ctx.moveTo(x + rr, y);
ctx.arcTo(x + w, y, x + w, y + h, rr);
ctx.arcTo(x + w, y + h, x, y + h, rr);
ctx.arcTo(x, y + h, x, y, rr);
ctx.arcTo(x, y, x + w, y, rr);
ctx.closePath();
if (fill) ctx.fill();
if (stroke) ctx.stroke();
}function centerText(ctx, text, x, y, size, color, weight) {
ctx.fillStyle = color;
ctx.font = (weight || 700) + ' ' + size + 'px Arial';
ctx.textAlign = 'center';
ctx.textBaseline = 'middle';
ctx.fillText(text, x, y);
}function leftText(ctx, text, x, y, size, color, weight) {
ctx.fillStyle = color;
ctx.font = (weight || 400) + ' ' + size + 'px Arial';
ctx.textAlign = 'left';
ctx.textBaseline = 'middle';
ctx.fillText(text, x, y);
}function drawDonut(canvasId, percent) {
const canvas = document.getElementById(canvasId);
if (!canvas) return;
const { ctx, width, height } = dprCanvas(canvas);
clear(ctx, width, height);const cx = width / 2;
const cy = height / 2;
const radius = Math.min(width, height) * 0.28;
const ring = radius * 0.28;
const start = -Math.PI / 2;
const full = Math.PI * 2;
const p = percent / 100;ctx.lineCap = 'round';ctx.beginPath();
ctx.strokeStyle = 'rgba(255,255,255,0.08)';
ctx.lineWidth = ring;
ctx.arc(cx, cy, radius, 0, full);
ctx.stroke();const grad = ctx.createLinearGradient(cx - radius, cy, cx + radius, cy);
grad.addColorStop(0, COLORS.gold);
grad.addColorStop(1, COLORS.gold2);ctx.beginPath();
ctx.strokeStyle = grad;
ctx.lineWidth = ring;
ctx.arc(cx, cy, radius, start, start + full * p);
ctx.stroke();centerText(ctx, percent.toFixed(2) + '%', cx, cy - 8, 34, COLORS.text, 700);
centerText(ctx, 'RTP', cx, cy + 28, 15, COLORS.muted, 700);const lx = 26;
const ly = height - 46;
ctx.fillStyle = COLORS.gold;
roundRect(ctx, lx, ly, 14, 14, 7, true, false);
leftText(ctx, 'Return to Player', lx + 22, ly + 8, 13, COLORS.muted, 400);ctx.fillStyle = COLORS.red;
roundRect(ctx, lx + 180, ly, 14, 14, 7, true, false);
leftText(ctx, 'House Edge', lx + 202, ly + 8, 13, COLORS.muted, 400);
}function drawHorizontalBars(canvasId, data) {
const canvas = document.getElementById(canvasId);
if (!canvas) return;
const { ctx, width, height } = dprCanvas(canvas);
clear(ctx, width, height);const margin = { top: 20, right: 30, bottom: 40, left: 170 };
const chartW = width - margin.left - margin.right;
const chartH = height - margin.top - margin.bottom;
const max = Math.max.apply(null, data.map(d => d.value));
const barGap = 12;
const barH = (chartH - barGap * (data.length - 1)) / data.length;ctx.strokeStyle = COLORS.line;
ctx.lineWidth = 1;for (let i = 0; i {
const y = margin.top + i * (barH + barGap);
const barW = chartW * (d.value / max);ctx.fillStyle = 'rgba(255,255,255,0.05)';
roundRect(ctx, margin.left, y, chartW, barH, 8, true, false);const grad = ctx.createLinearGradient(margin.left, y, margin.left + barW, y);
grad.addColorStop(0, d.color);
grad.addColorStop(1, d.color2 || d.color);
ctx.fillStyle = grad;
roundRect(ctx, margin.left, y, barW, barH, 8, true, false);leftText(ctx, d.label, 14, y + barH / 2, 13, COLORS.text, 700);
leftText(ctx, d.value + 'x', margin.left + Math.min(barW + 10, chartW - 36), y + barH / 2, 12, COLORS.muted, 700);
});
}function drawHitFrequency(canvasId, winPct) {
const canvas = document.getElementById(canvasId);
if (!canvas) return;
const { ctx, width, height } = dprCanvas(canvas);
clear(ctx, width, height);const margin = { top: 24, right: 24, bottom: 46, left: 58 };
const chartW = width - margin.left - margin.right;
const chartH = height - margin.top - margin.bottom;
const losePct = 100 - winPct;
const items = [
{ label: 'Winning Spins', value: winPct, color: COLORS.emerald },
{ label: 'Non-Winning Spins', value: losePct, color: COLORS.red }
];
const barW = 90;
const gap = 90;
const startX = margin.left + (chartW - (barW * 2 + gap)) / 2;for (let i = 0; i {
const x = startX + i * (barW + gap);
const h = chartH * (item.value / 100);
const y = margin.top + chartH - h;ctx.fillStyle = 'rgba(255,255,255,0.05)';
roundRect(ctx, x, margin.top, barW, chartH, 12, true, false);const grad = ctx.createLinearGradient(x, y, x, margin.top + chartH);
grad.addColorStop(0, item.color);
grad.addColorStop(1, 'rgba(255,255,255,0.10)');
ctx.fillStyle = grad;
roundRect(ctx, x, y, barW, h, 12, true, false);centerText(ctx, item.value + '%', x + barW / 2, y - 16, 16, COLORS.text, 700);
centerText(ctx, item.label, x + barW / 2, height - 18, 12, COLORS.muted, 700);
});centerText(ctx, '~1 win every 3.33 spins', width / 2, 20, 14, COLORS.gold, 700);
}function drawRadar(canvasId, labels, baseData, featureData) {
const canvas = document.getElementById(canvasId);
if (!canvas) return;
const { ctx, width, height } = dprCanvas(canvas);
clear(ctx, width, height);const cx = width / 2;
const cy = height / 2 + 6;
const radius = Math.min(width, height) * 0.30;
const rings = 5;
const count = labels.length;function point(i, value) {
const angle = -Math.PI / 2 + (Math.PI * 2 * i / count);
const r = radius * (value / 100);
return {
x: cx + Math.cos(angle) * r,
y: cy + Math.sin(angle) * r
};
}ctx.strokeStyle = COLORS.line;
ctx.lineWidth = 1;for (let ring = 1; ring <= rings; ring++) {
ctx.beginPath();
for (let i = 0; i < count; i++) {
const p = point(i, (100 / rings) * ring);
if (i === 0) ctx.moveTo(p.x, p.y);
else ctx.lineTo(p.x, p.y);
}
ctx.closePath();
ctx.stroke();
}for (let i = 0; i {
const p = point(i, v);
if (i === 0) ctx.moveTo(p.x, p.y);
else ctx.lineTo(p.x, p.y);
});
ctx.closePath();
ctx.fillStyle = fill;
ctx.strokeStyle = stroke;
ctx.lineWidth = 2;
ctx.fill();
ctx.stroke();data.forEach((v, i) => {
const p = point(i, v);
ctx.beginPath();
ctx.arc(p.x, p.y, 4, 0, Math.PI * 2);
ctx.fillStyle = stroke;
ctx.fill();
});
}plot(baseData, '#94a3b8', 'rgba(148,163,184,0.16)');
plot(featureData, COLORS.gold, 'rgba(251,191,36,0.22)');
}function renderAll() {
drawDonut('togRtpChart', 95.28);drawHorizontalBars('togPayoutChart', [
{ label: 'Female Adventurer', value: 500, color: '#fbbf24', color2: '#f59e0b' },
{ label: 'Golden Statue', value: 200, color: '#10b981', color2: '#0f9f6e' },
{ label: 'Golden Artifact', value: 75, color: '#94a3b8', color2: '#64748b' },
{ label: 'Golden Wheel', value: 75, color: '#94a3b8', color2: '#64748b' },
{ label: 'Ace / King', value: 15, color: '#64748b', color2: '#475569' },
{ label: 'Queen / Jack / 10', value: 10, color: '#475569', color2: '#334155' }
]);drawHitFrequency('togHitChart', 30);drawRadar(
'togDynamicsChart',
['Hit Frequency', 'Win Potential', 'Bonus Strength', 'Base Game Value', 'Variance'],
[70, 20, 10, 45, 90],
[35, 100, 100, 15, 80]
);
}let resizeTimer;
function onResize() {
clearTimeout(resizeTimer);
resizeTimer = setTimeout(renderAll, 120);
}renderAll();
window.addEventListener('resize', onResize);
})();