Underground 2 Revived
Play Need for Speed: Underground 2 (2004) in Chrome and Firefox with WebGPU graphics, Web Audio, up to 120 fps widescreen, controller support, free roam and Online races with friends. Fan project, not
Simule jogos de cassino com fichas fictícias sem dinheiro real
Translation pending
AI summary · website and README
GamesJavaScript · CSSGitHub @PedroHenrique2222OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
Simulador de casa de apostas sem dinheiro real — só diversão! Cadastre-se, receba fichas fictícias (BZ$) e jogue os jogos de cassino da equipe BZG. ⚠️ Este projeto é 100% de brincadeira. Não envolve dinheiro real, apostas reais, pagamentos ou saques de nenhum tipo. Tudo fica salvo só no seu navegador. 📌 Regra deste arquivo: a partir da v1.5, toda mudança feita no projeto é registrada no Changelog no fim deste documento, da mais recente para a mais antiga.Read the full README ↗
Simulador de casa de apostas sem dinheiro real — só diversão! Cadastre-se, receba fichas fictícias (BZ$) e jogue os jogos de cassino da equipe BZG.
⚠️ Este projeto é 100% de brincadeira. Não envolve dinheiro real, apostas reais, pagamentos ou saques de nenhum tipo. Tudo fica salvo só no seu navegador.
📌 Regra deste arquivo: a partir da v1.5, toda mudança feita no projeto é registrada no Changelog no fim deste documento, da mais recente para a mais antiga.
BZG-BET/
├── index.html Lobby (pagina inicial)
├── cadastro.html Tela de cadastro/login (obrigatoria no 1o acesso)
├── profile.html Perfil do jogador (avatar, cor do nome, titulo, temas, stats)
├── passe.html Passe de Batalha (100 niveis, em 10 capitulos)
├── colecao.html Colecao/album de figurinhas dos Bazingas
├── ranking.html Ranking online (Supabase) - saldo/recorde/nivel entre jogadores
├── settings.html Configuracoes (som, tema, turbo, conta)
├── privacidade.html Politica de Privacidade (acessivel sem conta, LGPD)
├── favicon.svg
├── games/ Todas as paginas de JOGO (com aposta) ficam aqui
│ ├── crash.html, double.html, mines.html, tower.html, plinko.html,
│ │ dice.html, hilo.html, roulette.html, blackjack.html,
│ │ raspadinha.html, limbo.html, coinflip.html, horse.html,
│ │ bazinguinha.html, bonanza.html
├── minigames/ Minigames SEM aposta (nao mexem no saldo)
│ ├── torre.html Torre do CBPB_Gamer - empilhar blocos
│ ├── arcoiris.html Sequencia Arco-iris (com Dhani) - memoria, tipo Simon Says
│ ├── sombra.html Sombra Rapida (com Shadow) - reflexo, tipo whack-a-mole
│ └── alien.html Fuga Alienigena (com Alien Jo) - desviar de meteoros, em canvas
├── css/
│ ├── style.css Estilos globais (sidebar, topbar, cards, temas)
│ ├── games/*.css Estilo especifico de cada jogo
│ ├── minigames/*.css Estilo especifico de cada minigame
│ └── pages/*.css Estilo especifico de cada pagina (perfil, passe, colecao, config, cadastro, legal.css p/ privacidade)
└── js/
├── core/ Modulos compartilhados (ver tabela abaixo)
├── games/*.js Logica de cada jogo (com aposta)
├── minigames/*.js Logica de cada minigame (sem aposta)
└── pages/*.js Logica de cada pagina (lobby, perfil, passe, colecao, config, cadastro)
Cada jogo é só HTML + CSS + JS puro, sem build. Uma página em games/ ou minigames/ referencia os arquivos compartilhados com ../ (ex.: ../css/style.css, ../js/core/storage.js). As páginas da raiz (lobby, perfil, config, passe, coleção, cadastro) referenciam sem ../.
js/core/| Arquivo | Função |
|---|---|
storage.js | Tudo fica salvo em UM objeto no localStorage (bazingaBetState): saldo, conta, perfil, estatísticas (incl. recorde de saldo), histórico, cosméticos, Passe de Batalha, colecionáveis, recordes de minigame |
layout.js | Monta a sidebar e a topbar (com o card de perfil e os mini-campos de Nível/Recorde/Maior Prêmio) em toda página; também é o "porteiro": exige cadastro antes de liberar qualquer página, e bloqueia acesso direto aos jogos em desenvolvimento; calcula os prefixos de pasta (games/, minigames/, raiz) dinamicamente |
theme.js | Sistema de temas (dark/light + 10 temas extras desbloqueáveis no Passe) |
sounds.js | Efeitos sonoros gerados por código (Web Audio API, 100% local) + música ambiente (vídeo do YouTube em loop, escondido — única parte do site que depende de internet) |
ui.js | Formatação de dinheiro, toasts (avisos), nome colorido do jogador |
bots.js | Só gera os "outros jogadores" simulados no painel ao vivo do Crash e do Double (ver seção própria) |
particles.js / effects.js | Confete, flash de tela, animação de "Big Win" |
achievements.js | Lista de conquistas + verificação automática |
modes.js | Modo Turbo (acelera as animações) |
battlepass.js | Regras do Passe de Batalha |
collectibles.js | Catálogo dos 110 colecionáveis (Equipe BZG + Amigos dos Bazingas), drop aleatório a cada aposta, recompensa por álbum completo |
leaderboard.js | Ranking online via Supabase (BZG.leaderboard). Login anônimo (sem e-mail) + apelido = o do cadastro + upsert do saldo/recorde/nível (tabela leaderboard) e do maior ganho por jogo (tabela game_scores). Roda em segundo plano em todas as páginas (o layout.js injeta o SDK sozinho fora da página de Ranking). A chave pública fica no topo do arquivo (segurança via RLS) |
Ao abrir o site pela primeira vez em um navegador, a tela de cadastro é obrigatória (cadastro.html) antes de acessar qualquer outra página — isso é verificado por layout.js em toda página que carrega a sidebar/topbar.
O cadastro pede só nome de jogador e senha (sem e-mail), mas não existe servidor nem banco de dados: tudo fica gravado só no localStorage do navegador (dentro do mesmo objeto de sempre, chave account). Por isso:
privacidade.html): página independente, acessível mesmo sem conta (não passa pelo "porteiro" do layout.js) — link no checkbox do cadastro e no rodapé de Configurações. Explica que hoje nada sai do navegador, exceto o tráfego técnico de terceiros (Google Fonts, YouTube da música de fundo). Ver seção LGPD abaixo.Hoje (sem backend), o risco de LGPD é baixo: nome de jogador e senha ficam só no localStorage, quem administra o site nunca recebe nem armazena esses dados. As únicas trocas com terceiros são o carregamento do Google Fonts e do vídeo do YouTube (música de fundo) — ambos processam o IP de quem visita, como a maioria dos sites da internet, e isso está documentado em privacidade.html. O botão "Apagar tudo" em Configurações já cobre o direito de eliminação de dados.
Isso muda quando o modo multiplayer/ranking (planejado com Supabase) for ao ar: nesse momento o site passa a coletar e-mail e estatísticas num servidor de verdade, e vira necessário ter base legal (consentimento no cadastro), e fluxos reais de acesso/correção/exclusão dos dados guardados no servidor. Isso está no escopo do plano de multiplayer.
| Jogo | Tema da equipe BZG | Como funciona | RTP aproximado |
|---|---|---|---|
| 🛶 Canoa Furada | Crash | Multiplicador sobe ao vivo, retire antes de "afundar" | ~96% |
| 🎡 Double | — | Aposta em vermelho/preto/branco (branco paga 14x) | ~93.3% (15 números, padrão Blaze) |
| 🥒 Mines do Pikles | Mines | Revele células fugindo das bombas, cada acerto aumenta o multiplicador | ajustável pelo nº de bombas |
| 🗑️ Lixeira do Linden | Tower | Suba 8 andares sem pisar na armadilha | até ~25x |
| 🎃 Plinko da Abóbora | Plinko | Casa sorteada por RNG binomial (a mesma distribuição de um plinko físico), a bolinha é guiada até ela; 8/12/16 linhas, risco baixo/médio/alto | ~96–97% exato em toda combinação |
| 🎲 Dado 616 | Dice | Escolha acima ou abaixo de um alvo | ~99% |
| 🃏 HiLo do Panetone | HiLo | A próxima carta vem maior ou menor? Multiplicador acumula | ~98–99% |
| 🎯 Roleta | Roulette | Roleta europeia (0–36) com mesa de apostas completa | ~97% (número cheio paga 36x) |
| 🍑 21 do Bogão | Blackjack | Blackjack clássico contra o dealer, natural paga 2.5x | ~99.5% |
| 🎟️ Raspadinha | Scratch | Raspe 9 campos, ache 3 iguais | ~90% |
| 📉 Limbo | Limbo | Escolha um alvo; se o resultado sorteado passar dele, você ganha | ~99% |
| 🔋 Moeda da Pilha | Coinflip | Cara ou coroa, quase 2x | ~98% |
| 🏇 Corrida BZG | Horse | Aposte num dos 6 corredores da equipe BZG; se ele vencer, dobra a aposta (2x fixo), sem odds diferentes por corredor | ~96% |
| 🐯 Bazinguinha | Slot (estilo Fortune Tiger) | 3×3, 5 linhas (3 horizontais + 2 diagonais). ⚡ é curinga. Wild grudento: caiu um ⚡, ele trava e os outros re-giram de graça; enquanto vier ⚡ novo, gira de novo. Tela cheia paga ×10 (máx 2500x) | ~95% |
| 💎 Bazinga Bonanza | Slot (estilo Sweet Bonanza) |
Controles que valem pra todos os jogos de aposta (centralizados em layout.js): apertar Enter num campo de valor já aposta/joga; os botões rápidos ½ / 2x / Máx nunca deixam o valor passar do seu saldo; e o site lembra o último valor apostado em cada jogo (guardado por página no localStorage, chave bzgBet:<caminho>).
dev: true em js/core/layout.js e js/pages/lobby.js e coloque data-dev="true" no <body> da página — o layout.js esconde o link e bloqueia o acesso direto pela URL.Só esses dois jogos mostram outros apostadores simulados entrando na rodada, apostando e retirando ao seu lado — isso é intencional, dá a sensação de rodada compartilhada (como em sites de apostas de verdade) e não afeta o seu resultado nem o RTP. Não existe mais nenhum "jogador falso" em outro lugar do site (o antigo ticker de vitórias no lobby, o ranking diário fake e a contagem de "X jogando agora" nos cards foram removidos — antes de ir pro ar de verdade, não faz sentido mostrar números fictícios como se fossem reais).
CHAPTERS em js/pages/passe.js e SPECIALS em js/core/battlepass.js. Uma barra de navegação rápida no topo pula direto para qualquer capítulo.SPECIALS em battlepass.js, cobre os 100 níveis 1 a 1): 56 avatares (um pra cada personagem + dezenas de novos: 🦖🐳🦋🍕🎸🛸🪐🗿🏰🐬🐘 e mais), 15 cores de nome (as 7 antigas + Aqua, Lava, Tóxico, Realeza, Pôr do Sol, Galáxia, Algodão Doce, Esmeralda), 10 temas extras (os 6 antigos + Sangue, Oceano, Vulcão, Lavanda) e 18 títulos, além do Modo Turbo (nível 30). As cores/temas/títulos novos foram adicionados junto (CSS .bzg-name.color-* e :root[data-skin="*"] em style.css, THEMES em theme.js, TITLES/COLOR_LABELS em battlepass.js).CHAPTER_BONUS em battlepass.js; cada capítulo mostra esse aviso no cabeçalho.passe.html; o botão "Resgatar tudo" resgata todos os níveis já alcançados de uma vez, em qualquer capítulo (incluindo os bônus de capítulo).js/core/collectibles.js:
bzg:bet-recorded → collectibles.rollOnBet() em layout.js). O Passe de Batalha não dá mais figurinhas — de propósito, a Coleção virou uma coleta lenta que depende só da sorte, pra dar valor a completar cada álbum.RARITY/rarityFor() em collectibles.js): cada figurinha é Comum (cinza), Rara (azul), Épica (roxa) ou Lendária (dourada) — derivada da posição no álbum (o último item de cada personagem é sempre o Lendário). O sorteio é ponderado por raridade (Comum peso 12, Rara 5, Épica 2, Lendária 1), então as Lendárias caem bem menos — e como completar o álbum exige a Lendária, a coleta é de propósito longa.reveal() em collectibles.js e os estilos .cr-* em style.css.colecao.html: barra de progresso geral (%), legenda de raridades, faixa de "Últimas" figurinhas (as 6 mais recentes) e cada carta mostra sua raridade com borda/brilho colorido. Tem aba "Álbum" (funcional) e aba .minigames/ (com css/minigames/ e js/minigames/ próprios) e têm sua própria seção na sidebar. Cada um é estrelado por um dos Amigos dos Bazingas.| Minigame | Amigo | Mecânica | Recompensa |
|---|---|---|---|
| 🧱 Torre do CBPB_Gamer | CBPB_Gamer | Empilhar blocos, clique/espaço na hora certa; encaixes perfeitos seguidos fazem a torre voltar a crescer | XP + recorde de andares |
| 🏳️🌈 Sequência Arco-íris | Dhani | Memorize e repita a sequência de cores (tipo Simon Says); cada pad toca uma nota musical própria (vira uma melodia) | XP + recorde de rodadas |
| 🌑 Sombra Rápida | Shadow | Clique nos "olhos" antes que sumam, 30s por rodada; de vez em quando aparece um olho dourado ⭐ que vale 3 | XP + recorde de acertos |
| 👽 Fuga Alienígena | Alien Jo | Desvie de meteoros com o disco voador (mouse/toque/setas); pegue as estrelas ⭐ pra ganhar +2s cada | XP + recorde de segundos |
storage.addXp) e guardam recorde pessoal (storage.reportMinigameScore/getMinigameBest, campo genérico best). Sem relação com os jogos de aposta existentes (ex.: a Torre não tem ligação com "Lixeira do Linden").MINIGAME_ITEMS em layout.js).layout.js (bzg:balance-changed).stats.peakBalance) e Maior prêmio (maior pagamento em uma única aposta, stats.maxWin) — tudo atualiza ao vivo a cada aposta/bônus/recarga.76 conquistas em js/core/achievements.js, cobrindo: primeira aposta, sequências de vitória/derrota, multiplicadores altos, marcos de saldo e de volume apostado, níveis do perfil e do Passe, cosméticos desbloqueados, recargas automáticas, marcos específicos de cada jogo (ex.: acertar o branco no Double, número cheio na Roleta, blackjack natural), progresso na Coleção de colecionáveis (Equipe, Amigos e tudo junto) e recordes nos 4 minigames sem aposta. São verificadas automaticamente a cada aposta.
Não precisa instalar nada: baixe o projeto e dê duplo-clique em index.html. Como não há cadastro ainda nesse navegador, ele vai te mandar direto para cadastro.html — crie uma conta (fictícia) e o resto do site libera. Tudo funciona offline, exceto a música de fundo (ver Tecnologia abaixo), que precisa de internet.
localStorage (uma chave única bazingaBetState, mais bzgTheme/bzgMusic/bzgSfx)js/core/sounds.js. É a única parte do site que depende de internet; sem conexão, ela simplesmente não toca e o resto do site continua funcionando normalmente. Como todo autoplay com som, só começa a tocar depois do primeiro clique/tecla do jogador (mesma regra de navegadores que já valia antes).O site é 100% estático. Publicado no Vercel, com deploy automático a cada push no GitHub:
main publica sozinhojs/core/bots.js apagado.app.html não redireciona mais para fora do site.js/vendor/), sem depender de CDN de terceiros.vercel.json com cabeçalhos de segurança (CSP, anti-iframe, nosniff, etc.).server_now() no Supabase) e o resultado sai do número da rodada — todo aparelho calcula igual, sem servidor pago.js/core/live.js (relógio, presença, mesa, chat) e js/core/chat.js (janela do chat). Tabela nova no Supabase: chat_messages.startMusic/toggleMusic etc. viram funções vazias). A moldura app.html (que só existia para a música não parar) deixou de ser usada: as páginas abrem direto de novo e links antigos app.html#<página> redirecionam para a página.BZG.collectibles.iconHTML(item) usa assets/colecao/<id>.webp (110 imagens a caminho pelo Codex, prompt em docs/codex-colecao-bigwin.md) no álbum, nas recentes e na revelação; sem a imagem, mostra o emoji.assets/bigwin/grande|mega|bazinga.webp atrás do título de cada nível (some se não existir).assets/logo/icone.webp) em todas as páginas.sounds.js ganhou um motor novo (compressor + limitador, reverb leve, envelopes, ruído filtrado, variação de tom, limite de vozes e de frequência nos ticks, nada antes da 1ª interação, pausa com a aba escondida). Todas as funções antigas continuam e soam melhor.
winSmall/winMedium/winBig/winFor, chuva de moedas, contagem com "tic" acelerando, e no Big Win uma fanfarra por nível (Grande/Mega/BAZINGA) com whoosh + impacto ao subir e "coletar" no fim.docs/codex-quentao-bazinguinha-bonanza.md).docs/ref/menor-quentao-desenho.png).assets/logo/logo.webp, gerado pelo Codex) no menu lateral, com zoom leve no hover; se não carregar, volta o desenho SVG antigo. Ícone da aba (app.html) agora é assets/logo/icone.webp.assets/bazinguinha/ e assets/bonanza/ — carregados automaticamente pelo assets.js da v1.28.js/core/assets.js (BZG.assets.preload) — os dois jogos usam cenário, logo, topo, mascotes e símbolos de assets/bazinguinha/ e assets/bonanza/ assim que existirem (prompt em docs/codex-slots-logo.md) e, enquanto não existem, ficam com os desenhos SVG/CSS.initBanner() em lobby.js), com a capa ilustrada inteira e inclinada à direita, a mesma capa ampliada e desfocada no fundo, ícone, selo (NOVO / AO VIVO), nome, descrição e "Jogar agora". Troca a cada 5s, pausa com o mouse em cima, tem setas e dá pra arrastar no celular.assets/capas/<id>.webp, 768×1024, geradas pelo Codex a partir de docs/codex-capas.md), com o nome por cima da faixa escura de baixo e zoom suave no hover. Se uma capa não carregar, o cartão volta sozinho ao visual com ícone.drawWheel em roulette.js): aro de madeira, pista com losangos defletores, casas com separadores dourados, prato central com torre e cruz que giram junto, e desenho nítido em telas retina (canvas 400px lógico × densidade da tela).prefers-reduced-motion). Giro de 6s (metade no Turbo).RESET_TOKEN em theme.js trocado para v1.23-reset — na próxima visita, todo jogador recomeça do zero (saldo, nível, passe, coleção e cadastro). O ranking online (Supabase) é zerado junto, quando esta versão entra no ar.showDailyBonus em layout.js) e as 4 conquistas que dependiam dele (Fiel à casa, 7/14/30 dias). O limite de recarga continua subindo pelo Passe.s-* em icons.js), na grade e nas tabelas de prêmios.js/core/autospin.js): 10, 25, 50 ou 100 giros, botão Parar, espera a animação de vitória grande fechar e para sozinho sem saldo.js/core/icons.js (BZG.icons.tile/art/nav) com um ícone para cada um dos 15 jogos e 4 minigames, mais os ícones de linha do menu e do topo (Lobby, Ranking, Coleção, Passe, Perfil, Configurações, música, efeitos, tema, menu, nível, saldo). Aparecem iguais em qualquer aparelho. Usados no menu lateral, no título da topbar, nos cartões do lobby e na tabela de últimas apostas. Se o arquivo faltar, tudo volta para os emojis antigos.--game-c, definida pelo layout.js). No celular o jogo fica em cima e a aposta embaixo.:root[data-theme="dark"], vermelho #f12c4c, item ativo do menu lateral em vermelho sólido, saldo grudado no botão vermelho Recarregar na topbar. Os outros temas/skins continuam funcionando.BZG.effects.bigWin reescrito): Grande Vitória (azul), Mega Vitória (rosa) e BAZINGA! (dourado). O valor sobe contando e tremendo, e o nível sobe ao vivo durante a contagem com flash, anel e aviso "SUBIU DE NÍVEL!". Confete, moedas e fogos aumentam a cada nível e a tela treme no BAZINGA. Botão Pular/COLETAR, fecha sozinho, mais rápido no modo turbo, e respeita prefers-reduced-motion. Faixas: BAZINGA ≥ 100x, Mega ≥ 25x (ou prêmio ≥ BZ$ 100 mil), senão Grande.app.html guarda o player do YouTube e mostra as páginas num iframe. Toda página aberta direto (link, favorito, /) é redirecionada por theme.js para app.html#<página>; o endereço e o título da aba acompanham a página, e o botão Voltar funciona. As páginas pedem a música para a moldura (BZG.musicHost em sounds.js). Aberto via file://, segue sem moldura.bzg:bet-recorded agora leva won/payout/multiplier/bet, e qualquer vitória ≥ 10x (ou prêmio ≥ BZ$ 25 mil) abre a animação automaticamente — antes só 5 jogos chamavam.hype na tela cheia / grandes prêmios, happy nas vitórias e a cada wild novo do respin), fica de nariz torto na derrota (sad), com aura de calor. Ver .mq-* em css/games/bazinguinha.css e reactMascot() em js/games/bazinguinha.js.transform/opacity/filter (aceleradas por GPU) e respeitam prefers-reduced-motion; a página já se beneficia do carregamento do ranking em tempo ocioso (v1.17).css/games/bonanza.css reescrito) pra diferenciar do Bazinguinha. Agora todos os jogos estão no ar — a seção "Em desenvolvimento" ficou vazia. Ativação: removido data-dev do <body> e a flag dev:true em layout.js/lobby.js.leaderboard.js sincroniza avatar/name_color/title e tem um rowNameHTML(row) que monta isso; reusa as classes globais .bzg-name.color-* / .bzg-title e a nova .lb-avatar. (Precisou de 3 colunas novas em cada tabela do Supabase.)reloadBonus) — jogar todo dia faz a sua rede de segurança crescer (dia 1 = +500 … dia 7+ = +5000). Ver claimBonus() em storage.js e o modal em layout.js.getState() agora é memoizado — antes ele re-lia o localStorage e refazia ~13 merges a cada chamada (e é chamado dezenas de vezes por ação); agora parseia uma vez, saveState atualiza o cache e o evento storage invalida entre abas.requestIdleCallback (a página fica interativa primeiro) e não re-sincroniza em navegação rápida (throttle de 20s via sessionStorage), cortando uploads redundantes a cada troca de página.layout.js, estilos .lbw-* em style.css): agora o ranking aparece no contexto de cada tela, sem precisar abrir a página de Ranking.
ranking.html + js/pages/ranking.js + css/pages/ranking.css): primeira funcionalidade online do projeto. Todo jogador entra no ranking automaticamente com o apelido do cadastro (sem e-mail, sem senha, sem passo extra). Dois quadros:
js/core/leaderboard.js, módulo BZG.leaderboard, SDK @supabase/supabase-js via CDN). Login anônimo por baixo dos panos (cada aparelho ganha um id próprio, só edita a própria linha — garantido por RLS). Duas tabelas: leaderboard (geral) e game_scores (por jogo). A chave pública fica no código de propósito (segurança via RLS). O jogo continua 100% salvo localmente; o Supabase é só a vitrine, sincronizada em segundo plano em toda página (o layout.js injeta o SDK sozinho; offline, só o ranking não atualiza). Novo item "🏆 Ranking" na barra lateral.js/games/plinko.js.reloadCooldownLeft() em storage.js.maybeRespin()/respinRound() em js/games/bazinguinha.js e as regras .ft-cell.locked / .ft-cell.reroll / .ft-banner.respin em css/games/bazinguinha.css.data-dev="true" do <body> de games/bazinguinha.html e a flag dev: true dos itens da Bazinguinha em js/core/layout.js e js/pages/lobby.js (agora com selo NOVO). A paytable da página ganhou um bloco explicando o respin.DROP_CHANCE em collectibles.js) — some com a coleta 3× mais lenta, deixando a Coleção ainda mais valiosa de completar. A raridade por item (peso 12/5/2/1) continua igual.pointer-events:none no fundo; fecha sozinho ou ao tocar). Ver reveal() em collectibles.js + estilos .cr-* em style.css.rarityFor()), com sorteio ponderado (RARITY weights 12/5/2/1) — Lendárias caem bem menos, então completar álbum ficou de propósito mais demorado. Na página da Coleção (colecao.html): barra de progresso geral %, legenda de raridades, faixa "Últimas" (6 figurinhas mais recentes por data) e cada carta com borda/brilho da cor da raridade. Novos exports em collectibles.js (RARITY, rarityFor, rarityMeta).style.css): botões principais ganharam um brilho premium no topo; títulos de seção ganharam uma barrinha de destaque vermelho→amarelo; painéis ganharam um filete de luz no topo; cards de jogo têm uma passada de brilho ao passar o mouse; o lobby entra com um fade suave escalonado (só opacidade, respeitando prefers-reduced-motion). Aplicado nos componentes compartilhados, então melhora Lobby, telas de jogo, Perfil, Passe e Coleção de uma vez.SPECIALS/TITLES/COLOR_LABELS em battlepass.js, THEMES em theme.js e as regras .bzg-name.color-* / :root[data-skin="*"] em style.css. O bônus de capítulo (+BZ$ 5.000 por capítulo, +50.000 no total) não mudou.LEVEL_BASE_XP/LEVEL_STEP_XP em storage.js. O Passe (600 XP fixo por nível) não muda.@media em style.css, passe.css e roulette.css.layout.js, valem pra todos): (1) apertar Enter num campo de valor já aposta/joga, sem precisar clicar no botão; (2) os botões ½ / 2x / Máx nunca passam do seu saldo (o 2x para no que você tem); (3) o site em cada jogo, pra não ter que redigitar toda vez que voltar.reloadBoost agora dão uma figurinha garantida da Coleção do personagem daquele capítulo (novo reward collectible em battlepass.js, chama storage.grantCollectible direto). Passe de Batalha agora tem uma recompensa específica em todos os 100 níveis (nenhum nível "genérico" sobrando).setTimeout da rodada anterior — duas sequências ficavam rodando ao mesmo tempo, causando comportamento errado (sombras/pads acendendo fora de hora, placar estranho). sombra.js agora cancela os timers antigos no início de startGame(); arcoiris.js usa um contador de "geração" (gameToken) pra invalidar cadeias antigas e força limpar todos os pads ao reiniciar. Torre e Fuga Alienígena não tinham esse bug (usam cancelAnimationFrame/redesenho completo a cada frame, sem estado de CSS residual).xpForLevel()/getLevel() em storage.js. As conquistas de nível (10/25/50/75/100 e "Veterano") foram recalculadas pros novos limiares. O Passe de Batalha não muda (continua 600 XP fixo por nível — usa o mesmo XP total, mas com progressão própria).privacidade.html, nova): explica o que é guardado (hoje, nada em servidor — tudo no localStorage), os serviços de terceiros usados (Google Fonts, YouTube) e o que muda quando o multiplayer chegar. Acessível mesmo sem conta; linkada no cadastro e em Configurações.CHAPTER_BONUS em battlepass.js. Aparece como aviso no cabeçalho de cada capítulo em passe.html.storage.js createAccount() não guarda mais e-mail (contas antigas que já tinham o campo continuam funcionando normalmente, o campo só fica sem uso).Object.assign) escondia a falta do dado antes do código de fallback rodar, então o fallback nunca disparava. Também corrigido: claimBonus() (bônus diário) não atualizava o recorde de saldo.bots.js).colecao.html.storage.js generalizou o campo de recorde de minigame de bestFloor (só fazia sentido pra Torre) para best (serve pra qualquer um), com migração automática pra quem já tinha recorde salvo na Torre.stats.peakBalance, novo) e Maior prêmio (stats.maxWin). storage.js agora rastreia o pico de saldo em todo ponto que altera o saldo (aposta, bônus diário, recarga manual/automática).colecao.html; aba "Loja" já visível mas marcada Em breve.minigames/torre.html) — empilhar blocos sem arriscar fichas, dá XP e guarda recorde pessoal. Nova pasta minigames/ (com css/minigames/, js/minigames/) e nova seção "Minigames" na sidebar, preparada para receber mais minigames no futuro.claimBonus() não estava atualizando o recorde de saldo (peakBalance) ao creditar o bônus diário.games/; só lobby, perfil, config, passe e o novo cadastro ficam na raiz. layout.js calcula os caminhos dinamicamente (raiz vs. games/).cadastro.html (nome, e-mail, senha — guardado só no navegador, sem backend). Todo acesso ao site exige conta; "Sair da conta" disponível em Configurações.reloadBoost).bots.js perdeu as funções que só serviam pro ticker/ranking removidos; CSS órfão do ticker/ranking removido de style.css.| 6×5, paga em qualquer lugar (8+ iguais). Cascata, 🎇 bônus (4+ = 10 grátis), 💣 bombas de multiplicador que somam. Compra de grátis por 20x |
| ~94.8% |
XP_PER_TIERbattlepass.jstone exposto em sounds.js).