Jogo #14

Cyber Sampa

Volatilidade
Grid
RTP

Cyber Sampa — Game Design Document (GDD)

Versão: 1.0 Data: 2026-04-03 Mercado: Paraná, Brasil (Regulação Lottopar) Referência Global: UK Fruit Machines / Skill Nudge


1. Identificação

Campo Valor
Nome Cyber Sampa
Tipo Nudge & Hold / Skill Game
Grid 6x5 (Pay Anywhere)
RTP 90-97%
Volatilidade Média
Hit Frequency 32%
Tema Tecnologia futurista + São Paulo urbano

2. Mecânica Core (Nudge & Hold)

2.1 Estrutura Base

``` ┌──────────────────────────────────┐ │ 6 Rolos Verticais │ │ Cada rolo contém 2-7 símbolos │ │ Sem linhas fixas (Pay Anywhere) │ └──────────────────────────────────┘

Condição de Vitória: 8+ símbolos iguais em qualquer lugar da tela (não precisa estar em linha) ```

2.2 Nudge Logic

Após o giro normal, alguns rolos podem "piscar" oferecendo a chance de EMPURRAR (nudge):

``` Rolo Parado: [B] [B] [SYMBOL X] [SYMBOL Y] [B] ↓ Oferta: Empurrar (+1 posição para cima)?

Se Jogador Clicar: Rolo se Move: [B] [SYMBOL X] [SYMBOL Y] [B] [?] ↑ Novo símbolo entra ```

Critério para Oferecer Nudge: - Se há 7 símbolos iguais em um rolo - E empurrando faria render 8+ (vitória) - Então oferecer nudge (máx 1 por rolo)

2.3 Hold Feature

Após o giro, o jogador pode escolher "HOLD" (manter) rolos selecionados:

``` Rolos Atuais: [A] [B] [B] [C] [D]

Jogador marca: HOLD em Rolo 2 e 3 (os dois [B])

Próximo Giro: Apenas Rolos 1, 4, 5, 6 giram Rolos 2 e 3 mantêm [B]

Novo resultado pode criar vitória com [B] + outros símbolos ```


3. Paytable (Pay Anywhere)

Símbolo 8 9 10 11 12+ Função
7 (BAR) 50x 100x 200x 400x 800x Premium
Buzina 25x 50x 100x 200x 400x Alto
Engrenagem 10x 20x 40x 80x 160x Médio
Números Aleatórios 2x 4x 8x 16x 32x Baixo

Pay Anywhere: Sem linhas. Qualquer 8+ símbolos na grade = vitória.


4. Bônus: Multiplicador Acumulativo

4.1 Gatilho

4.2 Multiplicador Global

Durante Free Spins, cada vitória tem seu multiplicador SOMADO em um multiplicador global:

``` Giro 1: Vitória com 8 Buzinas Multiplicador: 2x Acumulado: 2x

Giro 2: Vitória com 9 Engrenagens Multiplicador: 3x Novo Acumulado: 2x + 3x = 5x (Próximas vitórias serão multiplicadas por 5x)

Giro 3: Vitória com 10 Números Payout = 8x × 5x (multiplicador acumulado) = 40x Novo Acumulado: 5x + 2x = 7x ```

Importante: Multiplicador NUNCA reseta até fim do bônus (diferente de multiplicador tradicional)


5. Análise de RTP

RTP Hit Frequency Multiplicador Máx Usado Em
90% 30% 12x Rua
94% 32% 18x Standard
97% 35% 25x+ VIP

6. Pool Finito Integration

6.1 Controlando Nudges e Holds

Diferente de um jogo puro RNG, em um sistema regulado, os Nudges e Holds são pré-determinados:

```python def determine_available_nudges(target_prize, reel_config): """ Determina quais rolos terão nudge oferecido para garantir que o prêmio final seja o esperado """

# Se prêmio é R$ 120,00 e há 7 Buzinas em um rolo
# O servidor pré-determina que este rolo receberá nudge offer

nudge_config = {
    "reel_1": False,
    "reel_2": True,   # Oferecerá nudge
    "reel_3": False,
    "reel_4": True,   # Oferecerá nudge
    "reel_5": False,
    "reel_6": False
}

return nudge_config

```


7. Simulação Financeira (30 dias)

``` Aposta Média: R$ 8,00 Giros por Hora: 70 (mais lento que Cluster Pays) Horas: 12 × 30 dias

Coin-In Mensal: 70 × 12 × 30 × R$ 8 = R$ 201.600 GGR (6%): R$ 12.096 ```


8. Design Temático (Cyber São Paulo)

8.1 Symbols

8.2 Visuais


9. Conformidade Lottopar


Conclusão

Cyber Sampa oferece pseudo-skill element (Nudge & Hold) mantendo total controle regulatório. Multiplicador acumulativo no bônus cria variância extrema que atrai apostadores agressivos.

Data: 2026-04-03 Status: Pronto para Desenvolvimento

Cyber Sampa — Technical Design Document (TDD)

Versão: 1.0 Data: 2026-04-03 Arquitetura: Pay Anywhere + Nudge/Hold Logic Plataforma: Lottopar


1. Reel Strip Configuration

1.1 Estrutura dos Rolos

Diferente de Megaways, cada rolo tem altura FIXA (5 símbolos vistos) mas com ofertas de Nudge:

python REEL_STRIPS = { "reel_1": [ "7", "BUZINA", "ENGRENAGEM", "NUMERO", "7", "NUMERO", "BUZINA", "ENGRENAGEM", "7", "NUMERO", ... ], # Total 30-40 posições "reel_2": [...], # ... "reel_6": [...] }


2. Nudge Detection Algorithm

2.1 Quando Oferecer Nudge

```python def should_offer_nudge(reel_config, target_prize): """ Determina se oferecerá nudge para um rolo específico """

nudge_offers = []

for reel_idx in range(6):
    current_symbols = reel_config[reel_idx]

    # Contar símbolos iguais no rolo
    for symbol in PAYABLE_SYMBOLS:
        count = current_symbols.count(symbol)

        if count == 7:
            # Se temos 7 símbolos iguais
            # Verificar: empurrando faria 8+?
            next_symbol = get_next_symbol_from_strip(reel_idx)

            if next_symbol == symbol:
                # Sim! Oferecemos nudge
                nudge_offers.append({
                    "reel": reel_idx,
                    "symbol": symbol,
                    "current_count": 7,
                    "after_nudge_count": 8
                })

return nudge_offers

```


3. Nudge Application

3.1 Processamento do Nudge

```python def apply_nudge(reel_idx, current_reel_position): """ Executa o empurrão """

# Deslocar visualmente o rolo (+1 posição)
old_position = current_reel_position
new_position = (old_position + 1) % len(REEL_STRIPS[reel_idx])

# Atualizar reels
REEL_STRIPS[reel_idx][new_position] move up (visualizar)

return new_position

```


4. Hold Logic

4.1 Seleção de Hold

```python class HoldManager: def init(self): self.held_reels = set() # Índices de rolos presos

def toggle_hold(self, reel_idx):
    """Jogador marca rolo para HOLD no próximo giro"""
    if reel_idx in self.held_reels:
        self.held_reels.remove(reel_idx)
    else:
        self.held_reels.add(reel_idx)

def spin_with_holds(self):
    """
    Próximo giro: apenas rolos NÃO em hold giram
    Rolos em hold mantêm símbolos
    """
    new_reel_config = []

    for reel_idx in range(6):
        if reel_idx in self.held_reels:
            # Manter o rolo atual
            new_reel_config.append(CURRENT_REELS[reel_idx])
        else:
            # Girar normalmente
            new_position = random.randint(0, 39)  # 40 posições no strip
            new_reel_config.append(REEL_STRIPS[reel_idx][new_position])

    return new_reel_config

```


5. Pay Anywhere Validation

5.1 Detectar Vitória (Qualquer lugar, não linhas)

```python def find_winning_pay_anywhere(grid): """ grid: 6x5 (6 rolos, 5 posições visíveis) Encontra 8+ símbolos iguais em qualquer lugar """

winning_combos = []

for symbol in PAYABLE_SYMBOLS:
    # Contar todas ocorrências deste símbolo na grade
    positions = []
    for reel in range(6):
        for pos in range(5):
            if grid[reel][pos] == symbol:
                positions.append((reel, pos))

    if len(positions) >= 8:
        payout = PAYTABLE[symbol][len(positions)]
        winning_combos.append({
            "symbol": symbol,
            "count": len(positions),
            "positions": positions,
            "payout": payout
        })

return winning_combos

```


6. Acumulador Multiplicador de Bônus

6.1 Lógica de Bônus

```python class BonusMultiplierAccumulator: def init(self): self.accumulated_multiplier = 0 self.spin_count = 0

def add_multiplier(self, spin_multiplier):
    """Adiciona novo multiplicador ao acumulador"""
    self.accumulated_multiplier += spin_multiplier
    return self.accumulated_multiplier

def apply_to_payout(self, base_payout):
    """Aplica multiplicador acumulado"""
    return base_payout * self.accumulated_multiplier

def process_bonus_spin(self, winning_symbols_count):
    """
    Processa 1 giro do bônus
    """
    # Determinar multiplicador DESTE giro
    spin_mult = self.calculate_spin_multiplier(winning_symbols_count)

    # Adicionar ao acumulador
    total_mult = self.add_multiplier(spin_mult)

    # Próximas vitórias usarão total_mult
    return total_mult

def calculate_spin_multiplier(self, count):
    """Multiplicador baseado no count"""
    if count < 8:
        return 0  # Sem vitória
    elif count <= 9:
        return 2
    elif count <= 10:
        return 3
    elif count <= 11:
        return 4
    elif count <= 12:
        return 5
    else:
        return 10  # 12+ símbolos

```

6.2 Exemplo de Bônus

``` Giro 1: 8 BARs encontrados Spin Multiplier = 2x Accumulated = 0 + 2 = 2x Payout = 50x × 2 = 100x

Giro 2: Sem vitória Spin Multiplier = 0 Accumulated = 2x (não muda)

Giro 3: 10 Buzinas encontradas Spin Multiplier = 3x Accumulated = 2 + 3 = 5x Payout = 100x × 5 = 500x

Giro 4: 8 Engrenagens encontradas Spin Multiplier = 2x Accumulated = 5 + 2 = 7x Payout = 10x × 7 = 70x

Total Bônus = 100 + 0 + 500 + 70 = 670x ```


7. JSON Payloads

7.1 Giro Normal com Nudge Offer

json { "spin_result": { "reel_config": [ ["7", "BUZINA", "ENGRENAGEM", "NUMERO", "7"], ["NUMERO", "NUMERO", "NUMERO", "NUMERO", "NUMERO"], ["7", "7", "7", "7", "BUZINA"], ["ENGRENAGEM", "BUZINA", "ENGRENAGEM", "BUZINA", "ENGRENAGEM"], ["NUMERO", "NUMERO", "NUMERO", "7", "NUMERO"], ["BUZINA", "BUZINA", "BUZINA", "NUMERO", "NUMERO"] ], "pay_anywhere_wins": [ { "symbol": "7", "count": 8, "payout": 100 } ], "nudge_offers": [ { "reel": 2, "symbol": "7", "reason": "7 symbols, nudge would make 8" } ], "total_win": 100, "bonus_triggered": false } }

7.2 Bônus

json { "bonus_session": { "num_spins": 10, "spins": [ { "spin_num": 1, "winning_symbols": {"7": 10}, "spin_multiplier": 3, "accumulated_multiplier": 3, "base_payout": 200, "final_payout": 600 }, { "spin_num": 2, "winning_symbols": {"BUZINA": 9}, "spin_multiplier": 3, "accumulated_multiplier": 6, "base_payout": 50, "final_payout": 300 } ], "total_bonus_win": 2500 } }


8. RTP Validation

```python def validate_rtp_with_holds_and_nudges(num_sessions=10000): """ Simula com Holds e Nudges incluídos """ total_wagered = 0 total_paid = 0

for _ in range(num_sessions):
    # Spin base
    wager = 10.0
    base_payout = run_spin()
    total_wagered += wager
    total_paid += base_payout

    # Jogador aleatoriamente aplica holds
    if random.random() < 0.3:
        # Jogador usa holds
        held_payout = run_spin_with_holds()
        total_paid += held_payout

observed_rtp = total_paid / total_wagered
expected_rtp = 0.94

assert abs(observed_rtp - expected_rtp) < 0.02
print(f"✓ RTP: {observed_rtp:.4f}")

```


9. Reel Strip Definition

```python REEL_1 = [ "7", "BUZINA", "NUMERO", "7", "ENGRENAGEM", "NUMERO", "7", "BUZINA", "NUMERO", "7", "BUZINA", "7", "NUMERO", "ENGRENAGEM", "NUMERO", "7", "BUZINA", "7", "NUMERO", "ENGRENAGEM", "NUMERO", "7", "BUZINA", "NUMERO", "7", "ENGRENAGEM", "NUMERO", "7", "BUZINA", "NUMERO", "7", "NUMERO", "BUZINA", "7", "ENGRENAGEM", "NUMERO", "7", "NUMERO", "BUZINA", "7" ]

Pesos aproximados:

7: ~25% (40 of 160 posições)

BUZINA: ~20%

ENGRENAGEM: ~15%

NUMERO: ~40%

```


10. Hardware & Performance


Conclusão

Cyber Sampa combina Nudge (pseudo-skill) com Pay Anywhere e multiplicador acumulativo. Implementação relativamente direta mas exige validação cuidadosa de que multiplicador acumulado não exceeds caps.

Data: 2026-04-03 Status: Pronto para Desenvolvimento

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, Cyberpunk São Paulo cityscape, ultra-detailed environment, immersive 3D background, lush vegetation and natural elements, futuristic, urban, cyberpunk, cinematic lighting with golden hour sun rays, color palette: neon cyan, electric purple, dark gray, 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 "Cyber Sampa", ornate and elegant typography, bold letters with gold leaf embossing, luxurious gradient background transitioning from neon cyan to electric purple, intricate decorative borders with cyberpunk São Paulo 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, cyberpunk São Paulo creature highly detailed, photorealistic rendering, vibrant colors emphasizing neon cyan, electric purple, dark gray, 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: holograms, ornate design with neon cyan, electric purple, dark gray 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: circuit boards, sparkling crystal or gem-like appearance, neon cyan and electric purple 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, neon signs, animated energy radiating from center, multiple layers of glow effects in dark gray, 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 futuristic city imagery, embossed surface detail, reflection and dimension, surrounded by floating particles and light, rich neon cyan, electric purple, dark gray 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, neon cyan, electric purple, dark gray 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, neon cyan, electric purple, dark gray 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 cyberpunk São Paulo, intense futuristic, urban, cyberpunk atmosphere, neon cyan, electric purple, dark gray color palette, volumetric lighting effects, large title text with "Cyber Sampa", 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