Jogo #24

Fúria do Vulcão

Volatilidade
Média-Alta (65-75%)
Grid
RTP

24 - FÚRIA DO VULCÃO

Game Design Document (GDD)

Referência: Pompeii (Aristocrat) Gênero: 243 Ways / Reel Power Status: Design Finalizado Data: 2026-04-03 Mercado: Brasil (Lottopar / Paraná)


1. IDENTIDADE E ATMOSFERA

Tema

Civilização Antiga / Desastre Natural. Ruínas de Pompéia com lava e destruição iminente.

Paleta de Cores

Visual


2. DESIGN DE ÁUDIO

Evento Som Duração Características
Ambient Rumble grave constante Loop Sub-bass profundo
Spin Redemoinho de ar 1s Efeito de vento
Win Fanfarra romana clássica 2s Trompete + percussão
15x Mult Explosão distorcida 1.5s Impacto forte
Free Spin Sino épico + tremor 2.5s Celebração
Wild Multi Raio elétrico 0.8s Efeito de energia

3. MECÂNICA CORE

Grade e Sistema

Aposta


4. TABELA DE SÍMBOLOS

Wild (Lava) - MULTIPLICADORES

Rolo 2: Multiplica 3x Rolo 4: Multiplica 5x Combo (R2 + R4): Multiplica 15x

Símbolo 5x 4x 3x 2x
Capacete Ouro 300x 60x 15x 3x
Moeda Romana 200x 40x 10x 2x
Jóia 150x 30x 8x 1.5x
A-K-Q-J-10-9 50-100x 10-20x 3-5x 1x

Scatter (Moeda) - BONUS TRIGGER

Qualquer posição, 3+ = Free Spins

Qty Valor Giros
3 2x bet 10
4 8x bet 15
5 20x bet 20

5. FUNCIONALIDADES ESPECIAIS

5.1 Multiplicadores de Wild

Rolo 2 Wild: × 3 Rolo 4 Wild: × 5 Ambos Presentes: × 15

5.2 Erupção (Visual Feedback)

Quando multiplicadores participam: - Screen shake (eixo Y) - Efeito de fumaça explosiva - Lava lampejos - Som de explosão distorcida

5.3 Tease do Scatter

Se Rolos 1-2 têm Scatter, Rolo 3 fica em destaque (esperança do 3º)


6. BÔNUS: "ERUPÇÃO DE PRÊMIOS"

Trigador: 3+ Scatters (Moedas) Duração: 10-20 Giros Modificação: Frequência de Wilds aumentada 50% Retrigger: Possível (3+ Scatters = +5 Giros)


7. CONFORMIDADE REGULATÓRIA


Versão: 1.0 - Draft Final Aprovação Lottopar Requerida

24 - FÚRIA DO VULCÃO

Technical Design Document (TDD)

Referência: Pompeii (Aristocrat) Arquitetura: Lottopar Core (Pool Finito) Status: Design Finalizado Data: 2026-04-03


1. VISÃO GERAL TÉCNICA

Implementação técnica focada em: - Matrix Filler (Máscara de Exclusão) para 243 Ways - Fatoração de prêmios quebrados usando multiplicadores - Validação interna rigorosa - Feedback háptico/visual


2. REEL STRIPS - 243 WAYS

Configuração

Distribuição Padrão

Posição | Símbolo | Freq --------|---------|------ 0-3 | Wild | 4x (Rolo 2 e 4 específico) 4-7 | Capacete| 4x 8-11 | Moeda | 4x 12-15 | Jóia | 4x 16-19 | A | 4x 20-23 | K | 4x 24-27 | Q | 4x 28-31 | J | 4x 32-35 | 10 | 4x 36-39 | 9 | 4x 40-47 | Buffer | 8x


3. MATRIZ FILLER (EXCLUSION MASK) - CRÍTICO

Problema em 243 Ways

Qualquer símbolo repetido em coluna adjacente paga involuntariamente.

Exemplo: Capacete em R1, Capacete em R2 → Win acidental

Solução: Blacklist por Coluna

```csharp public class WayMatrixFiller {

public void FillEmptyPositions(Grid grid) {

    foreach (var position in grid.GetEmptyPositions()) {

        // 1. Analisar símbolo anterior (adjacente esquerdo)
        int prevReel = position.reel - 1;
        Symbol prevSymbol = grid[position.row, prevReel];

        // 2. Criar blacklist
        List<Symbol> forbidden = new();
        forbidden.Add(prevSymbol);

        // 3. Se rolo anterior tem Wild, proibir símbolos premium
        if (prevSymbol.IsWild) {
            forbidden.AddRange(GetHighPaySymbols());
        }

        // 4. Selecionar símbolo aleatório permitido
        Symbol selected = SelectRandomAllowed(forbidden);
        grid[position.row, position.reel] = selected;

        // 5. Validar após cada inserção
        decimal currentWin = CalculateWaysWin(grid);
        if (currentWin > TargetWin + 0.05m) {
            // Trocar por símbolo mais baixo
            grid[position.row, position.reel] = Symbol.NINE;
            RecalculateWins(grid);
        }
    }
}

private List<Symbol> CreateBlacklist(Symbol prevSymbol, int currentReel) {

    List<Symbol> forbidden = new();
    forbidden.Add(prevSymbol);

    // Se anterior é Wild 3x ou 5x, adicionar restrições
    if (prevSymbol.IsWild) {
        forbidden.AddRange(new[] {
            Symbol.CAPACETE,
            Symbol.MOEDA,
            Symbol.JOSIA
        });
    }

    return forbidden;
}

} ```


4. CÁLCULO DE 243 WAYS

Algoritmo de Win Detection

```csharp public decimal CalculateWaysWin(Grid grid) {

decimal totalWin = 0m;

// 1. Encontrar todos os grupos de símbolos contíguos
var groups = FindSymbolGroups(grid);

// 2. Para cada símbolo não-Scatter
foreach (var symbol in GetUniqueSymbols(grid)) {

    if (symbol.IsScatter) continue;

    // 3. Contar ocorrências em cada coluna
    int[] columnCounts = new int[5];
    for (int reel = 0; reel < 5; reel++) {
        columnCounts[reel] = CountSymbolInReel(grid, reel, symbol);
    }

    // 4. Multiplicar contagens = Ways
    int ways = 1;
    decimal multiplier = 1m;

    for (int reel = 0; reel < 5; reel++) {
        if (columnCounts[reel] > 0) {
            ways *= columnCounts[reel];
        } else {
            ways = 0; // Quebrada
            break;
        }

        // 5. Aplicar multiplicadores de Wild
        if (reel == 1 && grid.HasWild(reel)) {
            multiplier *= 3m;
        }
        if (reel == 3 && grid.HasWild(reel)) {
            multiplier *= 5m;
        }
    }

    if (ways > 0) {
        decimal basePayment = GetPaytableValue(symbol, 5); // 5-of-a-kind
        totalWin += basePayment * ways * multiplier;
    }
}

return totalWin;

} ```

Exemplo Prático

``` Grid: ┌─────────────────────────────┐ │ Cap │ Wild │ Cap │ Wild │ Cap │ │ Cap │ Cap │ Cap │ Cap │ Cap │ │ Moeda│ Moeda│ Moeda│ Moeda│ Moeda│ └─────────────────────────────┘

Cálculo de Ways para Capacete: - Rolo 1: 2 Capacetes (coluna 0,1) - Rolo 2: Wild (multiplica 3x) - Rolo 3: 1 Capacete - Rolo 4: Wild (multiplica 5x) - Rolo 5: 1 Capacete

Ways: 2 × 1 × 1 × 1 × 1 = 2 ways Mult: 3 × 5 = 15x (Combo) Base: Capacete 5+ = 300x Total: 2 × 300x × 15 = 9.000x Aposta ```


5. FATORAÇÃO DE PRÊMIOS QUEBRADOS

Problema

TicketWin = R$ 157,50 (não divisível por multiplicadores)

Solução: Álgebra Linear

```csharp public decimal FactorWaysPayout(decimal targetWin, decimal betPerWay) {

// Tentar decomposição em múltiplas combinações de Ways

// Abordagem 1: Usar 2 símbolos diferentes
decimal symbol1_payout = GetPaytableValue(Symbol.CAPACETE, 5);
decimal symbol2_payout = GetPaytableValue(Symbol.MOEDA, 5);

// 2 ways × 300x + 5 ways × 50x + mult 3x
// = (600 + 250) × 0.50 × 3 = 1.275

// Tentar resolver:
for (int w1 = 1; w1 <= 20; w1++) {
    for (int w2 = 1; w2 <= 20; w2++) {
        decimal calculated = (w1 * symbol1_payout + w2 * symbol2_payout) * 3m;

        if (Math.Abs(calculated - targetWin) < 0.01m) {
            return calculated;
        }
    }
}

// Fallback: Adicionar multiplicador 5x
for (int w1 = 1; w1 <= 20; w1++) {
    for (int w2 = 1; w2 <= 20; w2++) {
        decimal calc1 = w1 * symbol1_payout * 3m; // Rolo 2 Wild
        decimal calc2 = w2 * symbol2_payout * 5m; // Rolo 4 Wild

        if (Math.Abs(calc1 + calc2 - targetWin) < 0.01m) {
            return calc1 + calc2;
        }
    }
}

// Último recurso: Resíduo banking
return ApplyResidueCorrection(targetWin);

} ```


6. VALIDAÇÃO INTERNA

Pre-Submit Validation

```csharp public bool ValidateWaysOutcome(Outcome outcome) {

// 1. Hash integrity
if (!VerifyHash(outcome)) return false;

// 2. Ways math validation
decimal recalc = CalculateWaysFromGrid(outcome.grid);
if (Math.Abs(recalc - outcome.totalWin) > 0.01m) {
    LogError("Ways calculation mismatch");
    return false;
}

// 3. Multiplicador consistency
if (outcome.wild_reel2_present && outcome.mult_3x != 3m) {
    LogError("Reel 2 Wild multiplier error");
    return false;
}

if (outcome.wild_reel4_present && outcome.mult_5x != 5m) {
    LogError("Reel 4 Wild multiplier error");
    return false;
}

// 4. Combo check
if (outcome.wild_reel2_present && outcome.wild_reel4_present) {
    decimal expectedCombo = outcome.mult_3x * outcome.mult_5x;
    if (expectedCombo != outcome.mult_combo) {
        LogError("Combo multiplier error");
        return false;
    }
}

// 5. RTP boundary
decimal rtp = outcome.totalWin / outcome.totalBet;
if (rtp < 0.88m || rtp > 2.5m) {
    LogError("RTP out of bounds");
    return false;
}

return true;

} ```


7. FEEDBACK HÁPTICO E VISUAL

Screen Shake ao 15x

```csharp public void TriggerEruptionFeedback(decimal multiplier) {

if (multiplier >= 15m) {
    // 1. Screen shake Y-axis
    StartCoroutine(ScreenShake(
        duration: 0.8f,
        magnitude: 0.15f,
        frequency: 8f
    ));

    // 2. Bass shaker (se hardware disponível)
    if (bassShaker.IsConnected) {
        bassShaker.Vibrate(duration: 0.8f, intensity: 0.9f);
    }

    // 3. Visual explosão
    SpawnExplosionVFX(reelPositions[1]); // Rolo 2
    SpawnExplosionVFX(reelPositions[3]); // Rolo 4

    // 4. Som de explosão distorcida
    PlaySound("eruption_15x");
}

}

private IEnumerator ScreenShake(float duration, float magnitude, float frequency) {

Vector3 originalPos = mainCamera.transform.position;
float elapsed = 0f;

while (elapsed < duration) {
    float yOffset = Mathf.Sin(elapsed * frequency * Mathf.PI * 2f) * magnitude;
    mainCamera.transform.position = originalPos + new Vector3(0, yOffset, 0);

    elapsed += Time.deltaTime;
    yield return null;
}

mainCamera.transform.position = originalPos;

} ```


8. JSON PAYLOAD EXEMPLO

json { "game_id": 24, "round_id": "VULCAO_777", "round_type": "FREE_SPIN", "spin_number": 5, "total_bet": 6.00, "bet_per_way": 0.024, "ways": 243, "expected_win": 432.00, "actual_win": 432.00, "reel_stops": [0, 4, 8, 12, 0], "grid": [ ["Capacete", "Wild", "Capacete", "Wild", "Capacete"], ["Moeda", "Moeda", "Moeda", "Moeda", "Moeda"], ["Josia", "Josia", "Josia", "Josia", "Josia"] ], "multiplicands": { "reel2_wild": true, "reel4_wild": true, "mult_3x": 3.0, "mult_5x": 5.0, "mult_combo_15x": 15.0, "effective_multiplier": 15.0 }, "ways_breakdown": { "capacete": { "ways": 2, "payout_base": 300, "with_mult": 9000 }, "moeda": { "ways": 3, "payout_base": 50, "with_mult": 2250 } }, "total_ways_win": 432.00, "scatter_count": 0, "presentation": "ERUPTION_15X", "hash": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6", "timestamp": "2026-04-03T14:30:15.456Z" }


9. TESTE DE 243 WAYS

Test Case: Multiplicador Duplo

``` Input: Wild em Rolo 2 E Rolo 4 Expected: Multiplicador 15x aplicado

Verificação: 1. Rolo 2 contém Wild 2. Rolo 4 contém Wild 3. Ganho = Base × 15 4. TicketWin == Calculado ```

Stress Test

``` Métrica: Distribuição de Ways

Esperado: - Win frequency: 30-35% - Average Ways hit: 2-8 ways - 15x combos: ~0.5% de ganhos - RTP: 94% ± 1% ```


10. CONFORMIDADE LOTTOPAR


Versão: 1.0 - Draft Final Certificação: Pendente Lottopar

Prompts de Geração de Arte IA

Clique em qualquer prompt para copiar. Os prompts abaixo são otimizados para Midjourney v6, DALL-E 3, e Stable Diffusion.

🎨 Cenário Principal
Proporção: 16:9
Professional slot game art, Active volcano with molten lava, ultra-detailed environment, immersive 3D background, lush vegetation and natural elements, intense, destructive, powerful, cinematic lighting with golden hour sun rays, color palette: molten orange, deep red, black ash, depth of field creating focal point on game area, hyper-realistic textures, trending on ArtStation, Unreal Engine 5 quality, vibrant and saturated colors, --ar 21:9 --quality 2 --style raw
Dica: Use --no 'text, watermark, logo' para melhor resultado
🏷️ Logo/Título
Proporção: 16:9
Logo design for "Fúria do Vulcão", ornate and elegant typography, bold letters with gold leaf embossing, luxurious gradient background transitioning from molten orange to deep red, intricate decorative borders with volcano motifs, 3D dimensional effect with shadow depth, cinematic lighting, professional branding, high contrast, designed for high-visibility gaming cabinet, --ar 16:9 --quality 2 --style raw
Dica: Use --no 'text, watermark, logo' para melhor resultado
🎰 Símbolo 1
Proporção: 1:1
Premium game symbol for slot machine, volcano creature highly detailed, photorealistic rendering, vibrant colors emphasizing molten orange, deep red, black ash, centered composition with transparent background, dramatic lighting with golden highlights, intricate feather/fur textures, 3D depth, game-ready asset, --ar 1:1 --quality 2 --style raw
Dica: Use --no 'text, watermark, logo' para melhor resultado
🎰 Símbolo 2
Proporção: 1:1
Game symbol: lava, ornate design with molten orange, deep red, black ash color scheme, highly detailed intricate patterns, luxurious appearance, centered on clean background, dimensional shadow effect, professional slot machine graphics, golden accents, --ar 1:1 --quality 2 --style raw
Dica: Use --no 'text, watermark, logo' para melhor resultado
🎰 Símbolo 3
Proporção: 1:1
Collectible symbol: fire, sparkling crystal or gem-like appearance, molten orange and deep red dominant colors, glowing effect with light rays, highly detailed with reflective surfaces, centered composition, professional gaming asset quality, --ar 1:1 --quality 2 --style raw
Dica: Use --no 'text, watermark, logo' para melhor resultado
🎰 Símbolo 4
Proporção: 1:1
Bonus trigger symbol, intense heat, animated energy radiating from center, multiple layers of glow effects in black ash, ornate frame decoration, detailed fine art illustration, professional casino game quality, shimmering and ethereal, --ar 1:1 --quality 2 --style raw
Dica: Use --no 'text, watermark, logo' para melhor resultado
🎰 Símbolo 5
Proporção: 1:1
Premium scatter symbol, luxurious golden coin with destruction imagery, embossed surface detail, reflection and dimension, surrounded by floating particles and light, rich molten orange, deep red, black ash palette, high-end game graphics, professional quality, --ar 1:1 --quality 2 --style raw
Dica: Use --no 'text, watermark, logo' para melhor resultado
🎁 Tela de Bônus
Proporção: 16:9
Bonus round screen for slot game, explosive energy and celebration theme, multiple layers of special effects, molten orange, deep red, black ash dominant colors, dramatic lighting with particle effects, progress bars and multiplier counters visible, luxurious animation frames, cinematic composition, game-ready quality, professional casino graphics, --ar 16:9 --quality 2 --style raw
Dica: Use --no 'text, watermark, logo' para melhor resultado
🖥️ Mockup UI
Proporção: 16:9
Complete game UI mockup for slot machine cabinet, professional layout with reels center stage, molten orange, deep red, black ash theme throughout, game statistics visible (RTP, lines, bet), ornate frame decoration, luxury gaming interface, clear typography, buttons and controls well-positioned, premium aesthetic, high contrast readability, arcade cabinet quality, --ar 16:9 --quality 2 --style raw
Dica: Use --no 'text, watermark, logo' para melhor resultado
Tela de Carregamento
Proporção: 21:9
Splash art loading screen for slot game, dramatic cinematic scene featuring volcano, intense intense, destructive, powerful atmosphere, molten orange, deep red, black ash color palette, volumetric lighting effects, large title text with "Fúria do Vulcão", game studio logo placement, trending on gaming platforms, highly detailed and professionally rendered, advertisement-quality, --ar 21:9 --quality 2 --style raw
Dica: Use --no 'text, watermark, logo' para melhor resultado