BeamNG.Earth
BeamNG.drive용 1:1 비율 실시간 지구, 실제 고도·위성 이미지·부동 원점·보조 서버에서 LOD 스트리밍
포켓볼 없이 시작해 9지역, 로그라이크, 메가·테라·Z·지거맥스, 멀티플레이를 무료 브라우저에서 즐깁니다
Comece como um inicial, sem Pokébola, e sobreviva. 9 regiões, Roguelike, Mega/Tera/Z-Move/Gigantamax e multiplayer. Grátis, no navegador.
게임JavaScript · CSSGitHub @JonasSprocatti온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
RPG no navegador em que você é o Pokémon: sem treinador e sem Pokébola. Você começa como um inicial, explora as rotas de uma região (um mapa por Gen, de Kanto a Paldea), luta contra selvagens, foge de treinadores que querem te capturar, faz amigos, enfrenta os Alfas de cada rota e, no fim do mapa, os lendários daquela Gen. Os dados vêm ao vivo da PokéAPI (1025 espécies, golpes, habilidades, evoluções), e as contas seguem as fórmulas dos jogos: stats com IV/EV e natureza, dano com STAB, tipos e crítico, estágios, status, XP por curva de crescimento e captura da Gen 3/4.README 전문 보기 ↗
RPG no navegador em que você é o Pokémon: sem treinador e sem Pokébola. Você começa como um inicial, explora as rotas de uma região (um mapa por Gen, de Kanto a Paldea), luta contra selvagens, foge de treinadores que querem te capturar, faz amigos, enfrenta os Alfas de cada rota e, no fim do mapa, os lendários daquela Gen.
Os dados vêm ao vivo da PokéAPI (1025 espécies, golpes, habilidades, evoluções), e as contas seguem as fórmulas dos jogos: stats com IV/EV e natureza, dano com STAB, tipos e crítico, estágios, status, XP por curva de crescimento e captura da Gen 3/4.
Feito em JavaScript puro (ES modules), sem build e sem dependências. Funciona offline e, com conta, salva na nuvem.
Na primeiríssima vez que o jogo abre neste aparelho (sem nenhum save ainda), ele mostra um tour rápido antes da criação: explica que você é o Pokémon (não um treinador), e faz você abrir a loja e comprar um item, lutar contra um Pokémon selvagem de demonstração, ver o que acontece quando um treinador tenta te capturar (e como isso muda por dificuldade) e termina com um resumo do que é uma Run. É pulável a qualquer momento e não mexe em nenhum save de verdade — o Pokémon e o dinheiro do tour são só de mentirinha. Dá para rever quando quiser no botão ❓ Tutorial, disponível em qualquer tela (menu ☰ no celular).
Cada jornada é uma run. Você começa só com os iniciais e, jogando, desbloqueia novas espécies para as próximas runs. Os contadores somam todas as suas jornadas Roguelike:
A tela inicial e a tela 🏅 Conquistas mostram os desbloqueados e os que estão quase lá, e a tela de fim mostra o que aquela run liberou. Só jornadas Roguelike contam para desbloquear — mas a espécie desbloqueada pode ser usada em todos os modos.
São 5 Pokémon de missão que não existem no mundo até a sua conta cumprir a missão deles: não aparecem na rota, não entram na Pokédex da rota, não vêm na caça shiny e nenhum treinador carrega um. Cada missão soma a carreira inteira (todas as jornadas, qualquer modo) e nunca anda para trás:
| Pokémon | Missão |
|---|---|
| 🪙 Gholdengo | juntar ₽100.000.000 somando o maior saldo de cada jornada — as 999 moedas do Gimmighoul, em escala de carreira |
| 👻 Spiritomb | derrotar 180.000 Pokémon |
| ⚙️ Melmetal | derrotar 50.000 Pokémon do tipo Aço |
| 🥀 Shedinja | chocar 100 ovos |
| ✨ Arceus | fechar as 9 Gens no Roguelike |
Cumprida a missão, a espécie passa a aparecer selvagem a partir da próxima jornada — e dali em diante ela funciona como qualquer outra: derrotar, fazer amizade ou evoluir para ela a libera para jogar. Enquanto a missão não sai, a Pokédex completa daquela Gen espera por ela: esse é o ponto, o bicho é o último selo da região. O progresso de cada uma fica na tela 🏅 Conquistas, com o número exato e quanto falta — a missão é pública, só o esforço é grande.
Rota esgotada: no Roguelike, quando o seu nível passa do dobro do teto de uma rota, ela para de dar encontros — nada de farmar em rota fraca. Você continua entrando e vendo a Pokédex dela.
Sem segunda chance: no Roguelike, se você desmaiar, a run acaba (nem Revive salva). Se um aliado desmaiar, ele é perdido para sempre, e o Centro não traz de volta. Ser capturado também encerra a run. O Centro é pago (com desconto por vitória) e você começa no nível 5.
Vencer a run: vença os lendários da última rota do mapa. A run termina em vitória e o mapa da Gen seguinte fica liberado para as próximas runs (Gen 1 → Gen 2 → … → Gen 9).
| Modo | Treinador te captura? | Centro Pokémon | Desmaios | Na criação | Pontos |
|---|---|---|---|---|---|
| Roguelike | sim: fim da run | pago, −10% por vitória | nenhum: desmaiou, acabou; aliado desmaiado é perdido | nível 5; iniciais + desbloqueados | ×1,5 |
| Fácil | nunca | grátis | ilimitados | escolhe tudo | ×1 |
| Médio | nunca | pago, −10% por vitória desde a última visita | 3 livres, depois gasta Revive | escolhe tudo | ×1,2 |
| Difícil | sim: você foge depois, sem a mochila e com metade do dinheiro | pago | 3 livres, depois Revive | nível 5 | ×1,5 |
| Hardcore | sim: fim de jogo | pago | 3 livres, depois Revive | nível 5, natureza e habilidade sorteadas | ×2 |
| 🎲 Full Randomizer | como no Difícil | pago | 3 livres, depois Revive | tudo sorteado, até a espécie | ×1,5 |
Sem Revive depois do 3º desmaio (Médio para cima), é Game Over.
Um modo separado, de RPG japonês medieval fantástico: você anda com uma comitiva de quatro, cada Pokémon
tem um ofício na luta e os inimigos vêm em grupo. O combate está jogável de ponta a ponta e a história está
inteira: dez capítulos, do Vale do Orvalho à Nascente, com quatro finais (36 mapas, 100 personagens, 31
missões — o resumo está em docs/saga-historia.md e o roteiro completo, fala por fala, em docs/saga-roteiro.md).
O capítulo 1 é o tutorial: o Pichu, do lado de onde você chega, ensina a andar, conversar, abrir o mapa e o
diário; o Cabo Lairon, no portão norte, explica a Guarda e a Ruína e manda você pra uma luta de treino na praça,
depois ensina Perícia e petisco; e a entrada do bosque avisa que o mato alto chama luta. O modo segue só pra admin e testadores enquanto é jogado
e ajustado.
🗺 Um mundo pra andar, com cara de jogo. Na Saga não há lista de rotas: há um mapa em pixel art que ocupa a tela inteira. Você anda casa a casa (setas, WASD, o direcional da tela, ou tocando no lugar pra onde quer ir), a câmera desliza junto, o seu Pokémon dá um pulinho a cada passo e respira parado, e você passa atrás das copas e das casas — e a copa fica translúcida enquanto você estiver atrás dela. Saída pela borda do mapa tem uma seta amarela piscando (e a folhagem por cima dela fica meio transparente, pra trilha aparecer); tocar numa árvore anda até a casa livre mais perto, preferindo a saída. A ficha, a mochila e o registro viram gavetas abertas pelos botões da tela. No celular, uma 🕹 alavanca no canto: segure e arraste pra andar sem parar (no teclado, é só segurar a seta). Funciona em pé e deitado: o mapa sempre enche a tela, a missão em andamento aparece numa linha só quando muda, e se recolhe sozinha em 6 s (o texto inteiro fica no 📖, com a bolinha), e deitado a barra do site vira só ₽ e ☰ no canto. Neste modo o Pokémon é sempre o sprite 2D, seja qual for o estilo escolhido em ⚙ Ajustes — pra combinar com o mapa.
⚔ A luta numa tela só. Cena, registro e comandos aparecem juntos, sem rolar a página: em pé, um embaixo do outro; deitado ou no computador, a cena à esquerda e o registro com os comandos à direita. Os quatro golpes cabem em 2×2, e a ficha e a comitiva abrem em gaveta por cima da luta. A arte é do Liberated Pixel Cup (tiles de 32×32, na mesma escala dos sprites dos Pokémon) — créditos abaixo.
📖 Três capítulos, treze mapas. 1 · A Fonte Calada (a aldeia de Pedralume, o Bosque do Orvalho, a Estrada Velha, as Ruínas da Fonte) · 2 · O Passo dos Laços (a serra tomada por um acampamento de caçadores, a toca dos refugiados, a gruta de um Alfa ferido) · 3 · A Cidade das Arenas (a primeira cidade humana, onde crianças fazem Pokémon lutar por moedas — em cima de uma Fonte). Cada capítulo corresponde a uma rota da Gen: encontros, níveis e Alfa saem dela.
🧍 Humanos, e nenhum deles é só vilão. Caçadores que comem Pokémon porque uma praga matou o gado deles; crianças que armam laço de arame pra ter um parceiro na arena; e gente que corta laço de madrugada, trata bicho ferido e duvida do que a própria cidade faz. Bando, criança, caçador e Alfa ficam à vista no mapa.
💬 Personagens com conversa de verdade. Esbarre em alguém pra falar. O que cada um diz muda com o que você já fez, com quem ajudou e até com . Um balão marca quem tem missão nova e um quem espera por você.
💥 Golpe de área agora pega em área. Com mais de um Pokémon por lado, Earthquake, Surf, Rock Slide, Discharge, Hyper Voice e companhia param de bater num só: eles acertam todo mundo que o golpe alcança de verdade. Os que pegam o outro lado (Rock Slide, Muddy Water) limpam o grupo inimigo; os que pegam todo mundo em volta (Earthquake, Surf) respingam no seu próprio aliado — e é por isso que o inimigo pensa duas vezes antes de usar um com o bando dele em campo. Pegando mais de um, o dano em cada alvo sai 25% menor, como nas batalhas duplas dos jogos; pegando um só, sai cheio.
🤝 E o golpe de companheiro também. O outro lado da mesma moeda: Helping Hand, Coaching, Howl, Heal Bell, Aromatherapy, Life Dew, Jungle Healing, Aromatic Mist, Dragon Cheer, Decorate, Heal Pulse, Floral Healing, Acupressure, Follow Me e Rage Powder miram quem está do seu lado, não o inimigo em foco — e até aqui caíam no vazio ou, pior, no bicho errado (o Heal Pulse curava quem usou e o Decorate subia os atributos do inimigo). Agora cada um acha o destinatário de verdade: Helping Hand deixa o próximo golpe do companheiro 50% mais forte, Heal Bell e Aromatherapy limpam o status do lado inteiro, Howl sobe o Ataque de todos, Coaching e Dragon Cheer só valem pros companheiros (sem nenhum em campo, o golpe avisa e falha), Heal Pulse e Floral Healing vão pro companheiro mais ferido, e Follow Me/Rage Powder fazem o inimigo mirar em você, poupando quem está ao seu lado. Vale pros dois lados: a matilha selvagem e o treinador com mais de um em campo usam tudo isso — e a IA deles sabe que esse tipo de golpe falha quando estão sozinhos.
Isso acordou duas habilidades que até aqui não tinham o que fazer: Damp (ninguém em campo, dos dois lados, consegue usar Explosion/Self-Destruct — e o Aftermath de quem cai também fica mudo) e Telepathy (não leva o golpe de área do próprio colega). Friend Guard, Battery, Power Spot, Steely Spirit e Plus/Minus também passaram a valer do lado inimigo, que antes só enxergava um Pokémon por vez.
A bola não é só pra você: com o HP na metade ou menos, o treinador mira em qualquer um do seu lado — e escolhe o mais fraco, que é o que um caçador faria. A chance usa a taxa de captura da espécie (a sua vem da Pokédex; a de aliado usa a média).
E ser capturado deixou de ser o fim na hora. Se a bola se fechar em você e ainda houver aliado de pé, a luta continua sem você: eles partem pra cima do treinador, e derrotar ele te liberta. Se todos caírem, aí sim você foi levado. Vale pro outro lado também: aliado preso volta se você vencer — mas se você fugir ou perder, ele fica com o treinador e você não o vê mais. (Nos modos Fácil e Médio você nunca é capturado de verdade; o aliado, sim — e ele volta ao vencer, então não encerra nada.)
Turnos com barra de "quem está agindo", prioridade e velocidade, precisão e evasão, crítico, status (queimado, envenenado, paralisado, dormindo, congelado, confuso) e dano residual.
Apaixonado: Atração (e o Charme Fofo de quem você encosta) deixa o alvo sem atacar em metade dos turnos — só vale entre gêneros opostos, e Oblivious e Aroma Veil não caem nessa.
Congelado derrete: 20% de chance de sair sozinho por turno, mas golpe de Fogo descongela quem leva, golpe quente (Roda de Fogo, Fogo Sagrado, Investida Flamejante, Água Fervente, Bola de Fogo…) descongela quem usa — e no sol forte ninguém congela.
As barras de HP e XP animam ao mudar de valor, e o PP pisca quando muda — nada salta direto pro número novo. Quem apanha treme e pisca na cor do tipo do golpe (fogo acende laranja, água acende azul; dano sem tipo fica no vermelho) e quem ataca dá um pulinho. Tudo isso respeita a preferência de "reduzir animações" do aparelho e pode ser desligado em ⚙ Ajustes → Som e animações — desligado, o combate também fica mais rápido, porque a pausa entre as mensagens existia pra dar tempo de ver a animação.
Cena mais viva: quem ataca dá um pulo, quem apanha pisca vermelho, quem se cura pisca verde, e status (queimado, envenenado, paralisado, congelado) e mudanças de atributo pulsam sutilmente enquanto durarem.
Mais de 200 habilidades com efeito de verdade, iguais no single player e no multiplayer (Intimidate e as outras de "entrar em campo" agora também valem no multiplayer):
Na batalha, a cena fica presa no topo (os dois lados, com HP e status de toda a equipe) enquanto você rola o resto da página — e os golpes vêm logo abaixo dela (dois por linha, com tipo, poder, PP e a seta de vantagem), depois Mochila / Fugir e o registro. Ficha, aliados, missões e mochila continuam todos ali, um embaixo do outro: nada fica escondido atrás de aba nenhuma, e você vê o Pokémon enquanto escolhe o golpe.
Celular deitado: a cena da luta fica grudada na lateral esquerda, da altura inteira da tela e sempre visível (em vez de presa no topo, que sobraria pouca altura numa tela baixa) — golpes, registro e painéis ficam numa coluna à direita, que rola por baixo dela sem nunca levar a batalha embora. Os botões de golpe ali são mais baixos e ficam 2 em cima e 2 embaixo; em luta de grupo a coluna da cena alarga e se divide em duas (inimigos | você), e a barra do site some pro canto.
Modo opcional, ligado no começo da jornada. Quando você revela todas as espécies de uma rota (10 derrotados de cada), pode escolher uma delas para ser a única que aparece ali — bom para caçar um shiny ou farmar uma espécie. Dá para trocar ou parar a caça quando quiser, rota por rota. Muda só o Pokémon selvagem: treinadores, itens, dinheiro e as frases de ambientação continuam com a mesma chance.
Enquanto um repelente está valendo, o aviso na tela de explorar mostra quantas explorações faltam e traz um ✕ Cancelar efeito: mudou de ideia, desliga na hora (as explorações que sobraram são perdidas — o item já foi gasto).
As rotas e as missões podem ser atualizadas sem atualizar o jogo. O pacote de conteúdo fica guardado no seu aparelho: o jogo abre com o que você tem, inclusive sem internet, e quando há conexão ele confere se saiu versão nova. Se saiu e nada do que você está fazendo depende do que mudou, passa a valer na hora e o log avisa; se depende — uma missão que você já começou a cumprir, ou o Alfa da rota em que você está —, a atualização espera a sua próxima jornada em vez de bagunçar a que está em andamento.
Depois do primeiro acesso o jogo abre sem internet, e guarda sozinho tudo o que você encontra. Em ⚙ Ajustes → Jogar offline dá para baixar um mapa inteiro de uma vez — ou o jogo inteiro, com os nove mapas (Pokémon, golpes e sprites) — para que nada apareça sem imagem quando você estiver sem rede. A tela mostra quanto de cada mapa já está guardado e quanto espaço isso ocupa no aparelho. O download do jogo todo passa de 100 MB e leva alguns minutos: use uma rede boa e deixe a tela aberta.
Em ⚙ Ajustes → Sprites, escolha entre três estilos: Clássico (pixel-art de sempre), 3D (o render usado em Pokémon HOME e nos jogos mais recentes — mesmo modelo 3D, só que renderizado em 2D; sem versão de costas, então na batalha o seu Pokémon aparece de frente também, igual já acontece hoje com espécies sem sprite de costas clássico) e Animado (os GIFs do Pokémon Showdown, com versão de costas de verdade). Se algum Pokémon ou forma não tiver a imagem do estilo escolhido, a tela cai sozinha de volta pro sprite clássico. Download opcional e separado do download normal, em ⚙ Ajustes → Jogar offline — 3D baixa 2 imagens por Pokémon (frente normal e shiny), Animado baixa 4 (frente e costas, normal e shiny). (Corrigido: os GIFs animados não têm todos o mesmo formato — antes a imagem esticava pra caber na caixa; agora ela encolhe proporcionalmente, sem distorcer.)
Cada Pokémon da equipe pode segurar um item, que age sozinho na batalha. E o selvagem também segura: cerca de 1 em 12 aparece com algo barato na mão — Fruta Oran, Lum, Sitrus, uma das 17 frutas de aperto por tipo, Faixa Muscular ou Óculos do Sábio. O item aparece num chip 🎁 na plaquinha dele, então você vê antes de a fruta ser comida. Para ficar com ele: Thief ou Covet (roubam, se o seu Pokémon estiver de mãos vazias), as habilidades Pickpocket e Magician, ou Knock Off — que não rouba, derruba (o item se perde, e isso vale mesmo se você já estiver segurando algo). Vencer na porrada quase nunca entrega o item: ele cai no chão em 2,5% das vitórias contra quem estava segurando. Quem vira seu aliado com um petisco chega segurando o que tinha. Alfas, lendários e o chefe da semana não seguram nada — já vêm fortes o bastante. Para equipar: loja → 🎒 Para segurar, e depois "Segurar" na mochila (ou direto pelo atalho na ficha). Nada disso precisa de dinheiro: explorando, as frutas caem em qualquer rota (cerca de 1 em 6 dos itens achados — são 20 contando as 17 de aperto por tipo, então cada uma continua sendo sorte) e os segurados permanentes (Restos, Orbe da Vida, Faixa Escolha…) caem da 4ª rota em diante, no mesmo degrau dos itens de evolução. Só os itens de prêmio de raide não aparecem no chão — esses continuam sendo de vencer o chefe da semana. A ficha mostra o que cada um leva, com botão para guardar de volta.
Os itens aparecem separados em 🧪 Cura e status · ⚔ Em batalha · 🎒 Para segurar · 💎 Evolução · 🍖 Petiscos · ✨ Especiais, tanto na mochila quanto na loja. Na mochila, cada divisão abre e fecha num toque e o cabeçalho diz quantos itens tem dentro — com a mochila cheia, a lista aberta de uma vez era grande demais pra achar algo no celular. Item de evolução leva um marcador 💎, e quando ele serve pra alguém do seu lado o marcador diz o nome: "💎 Serve pro seu Electabuzz". Na loja, cada item mostra a descrição do que faz dentro do próprio cartão — antes isso só existia como dica ao passar o mouse, que no celular não existe.
Os itens mais caros do jogo, e os únicos que mexem no que um Pokémon trouxe de nascença. Só na loja: não aparecem explorando nem como prêmio de Alfa.
Os três só funcionam fora de batalha e perguntam em quem usar quando você tem aliados.
Na mochila, o botão ⚡ de um item o coloca junto dos botões principais da tela — ao lado de Explorar fora da luta, ao lado de Mochila e Fugir dentro dela. Dá para marcar até dois, e eles respondem às teclas 1 e 2. Serve para não abrir a mochila e procurar a Poção a cada turno. A escolha vale para a jornada e some se o item acabar (volta sozinha quando você comprar outro).
Tocar num item da loja abre um pequeno HUD: −10 / − / campo / + / +10 / Máx, com o total e o troco atualizando na hora (limite de 99 ou o que o dinheiro alcança). Ao confirmar, aparece um aviso 🛒 "Comprou N× item" com quantos você tem na mochila. Enter confirma, Esc ou tocar fora cancela.
Cada item da mochila tem um botão Vender (metade do preço de compra) — ou Jogar fora, pra quem não tem preço de loja (achado explorando, prêmio de Alfa…). Mesmo HUD de quantidade da compra, só que ao contrário.
No Roguelike e no Hardcore, um chefe especial ocupa a rota final da Gen dele numa caixa roxa brilhante (e o sprite dele aparece na escolha de mapa). O primeiro é o Eternatus Eternamax (Gen 8). Uma tentativa a cada 8 horas, sem fuga, imune a status, e perder não encerra a jornada. (🧪 Modo beta temporário: essa espera está desligada pros testers experimentarem a Raid com mais liberdade — volta a valer depois do teste.)
Na lista de amigos (tela 👤 Conta), Ver perfil mostra o ícone, a insígnia escolhida, o selo de Treinador do Alpha, desde quando joga, os números das jornadas (vitórias, Gens fechadas, melhor pontuação, maior nível, derrotados, shinies, espécies desbloqueadas, mais jogado), as insígnias de evento (as que tem e as que faltam) e as últimas 5 runs. Só amigos veem o perfil um do outro (precisa rodar a migração do Supabase).
Não precisa fazer uma run até a Gen do chefe: o Pokémon principal de cada jornada Roguelike/Hardcore que você termina (venceu, perdeu ou encerrou) entra no Hall da Fama com o nível que tinha (guarda os 30 melhores, sincroniza com a conta). Na 🏟 Arena você leva de 1 a 3 deles contra o chefe da semana. Não mexe em nenhuma jornada em andamento, perder não custa nada, vale a mesma tentativa de 8 horas. Prêmio: Pokémon na Pokédex, insígnia e título (1ª vitória) e os itens de raide da semana. Diferença pra luta dentro de uma run: sem Mega/Tera/Z-Move/Gigantamax. A tela inicial e a Arena trazem o texto "Como funcionam os chefes da semana".
🎒 Loja de preparo: toda jornada terminada deixa 10% do seu dinheiro máximo como saldo de conta, pra sempre. Na Arena, esse saldo compra cura, revive, itens de stat e itens de segurar (pelo mesmo preço da loja normal) — escolha quem equipa cada item de segurar antes de entrar na luta. Os itens de raide (Cristal de Ruptura e companhia) continuam só de prêmio, não se compram.
☄ Sala de Raide (multiplayer): pra enfrentar o chefe da semana em GRUPO sem precisar de uma jornada em andamento, crie ou entre numa sala no 👥 Multiplayer e escolha o modo "☄ Sala de Raide". Chame amigos direto (se estiver logado) ou passe o código da sala. Cada jogador leva de 1 a 3 Pokémon do PRÓPRIO Hall da Fama, compra e equipa itens na PRÓPRIA Loja de preparo — tudo isso independente do que os outros fazem — e marca ✅ Pronto. O anfitrião só consegue começar quando todo mundo estiver pronto. Durante a luta, cura, itens de stat, itens de raide e Revive/Max Revive (dá pra reviver um companheiro sem esperar o time inteiro cair) saem do saldo da conta, não de uma mochila de run. Não mexe em nenhuma run de ninguém (como a Arena); o prêmio da semana (itens de raide, insígnia, Pokédex) vai pra conta de cada jogador que participar da vitória. 💬 Chat da sala: qualquer sala (Raide, Co-op ou PvP) tem um chat pra combinar estratégia com quem está com você, no lobby ou já lutando. 💥 Impacto: quem apanha sacode e pisca na cor do tipo do golpe, com o som do impacto — o mesmo par da batalha de um jogador. O motor roda só no anfitrião, então a tremida viaja pendurada na linha do dano e cada cliente anima o cartão do seu lado.
Três conquistas de conta sobre os aliados (fora do modo Fácil): Casa cheia (feche uma Gen com a equipe e o esconderijo lotados), Lobo solitário (feche uma Gen sem recrutar ninguém) e Cemitério de parceiros (perca 15 parceiros em batalha numa mesma run). Cada uma dá vantagem na próxima jornada, como as outras badges.
Quem espera no esconderijo não fica só esperando: dois parceiros guardados lá que sejam de gêneros opostos e tenham um grupo-ovo em comum (os mesmos dos jogos) podem aparecer com um ovo — e ninguém conta de onde veio. Lendário, mítico e companhia (o grupo "sem ovos") não botam. O Ditto cruza com qualquer um, sem olhar gênero nem grupo, e é o único par de quem não tem gênero (Magnemite, Voltorb, Beldum, Klink…) — exatamente como nos jogos. Dois Dittos não dão nada, e a espécie do filhote vem sempre do outro lado. O ovo choca de dois jeitos ao mesmo tempo: cada exploração é um passo e cada minuto de relógio também é um passo — esse segundo vale com o jogo fechado, então o ovo avança enquanto você não está jogando e abre na hora em que você voltar. Espécie mais demorada pede mais (de 100 a 400 passos, seguindo os ciclos de choco dos jogos), o que dá de 1h40 a 6h40 sem jogar, ou bem menos se você explorar. Cabem 3 ovos chocando ao mesmo tempo, e o painel de Aliados mostra só a barra, com quanto falta nos dois jeitos de contar: o que tem dentro é segredo até ele abrir.
O painel de Aliados diz em que pé está o ninho, mesmo antes de existir ovo: se os guardados formam casal (com os nomes dos dois), se são todos do mesmo sexo, se falta grupo-ovo em comum, ou se é só guardar mais um. Sem isso a mecânica era invisível — dava pra jogar uma jornada inteira sem descobrir que o ninho é o esconderijo, não a equipe.
Quando abre, nasce a forma base da mãe no Nv. 5, com um golpe herdado do parceiro e 3 IVs puxados do melhor dos dois pais. Se a mãe é de uma forma regional, o filhote nasce na forma regional daquele mapa (a Sandslash de Alola põe um Sandshrew de Alola). Ele entra na equipe se houver vaga, ou vai esperar no esconderijo. Ovo pronto sem lugar nenhum pra nascer fica parado até você abrir espaço — não se perde.
🥚 Golpe-ovo: cada espécie tem golpes que só se aprendem nascendo, e o filhote pode vir com um deles. Se um dos pais já sabe um golpe-ovo da espécie do bebê, ele nasce sabendo, de graça — é a regra dos jogos. Como os pais daqui são selvagens recrutados (e selvagem só sabe golpe de nível), há também a chance de sortear um da lista mesmo sem pai que saiba: sem isso a mecânica praticamente nunca apareceria. A chance exata está na 📈 Taxas.
🪨 Dois itens de criação na loja (divisão 🥚 Criação), que não fazem nada em batalha e tudo no esconderijo:
Juntos, os dois são o que transforma o esconderijo numa criadoria de verdade: guarde o casal com os melhores IVs, equipe o Nó do Destino e a Pedra Eterna, e cada ovo sai melhor que o anterior.
Cada guardado tem a ficha completa ali mesmo: no painel de Aliados, todo mundo que está no esconderijo abre em "Ver ficha completa" com a tabela de atributos (valor, base, IV, EV), a natureza, o vínculo, a habilidade e os quatro golpes com PP e descrição — a mesma ficha de um aliado, só em leitura. Dá pra comparar antes de decidir quem trazer de volta e quem deixar cruzando. Reordenar golpe e trocar item continuam só pra quem está na equipe: traga o bicho e mexa à vontade.
Duas conquistas de conta saem daí: Criadouro (choque 100 ovos somando a carreira) faz toda jornada nova começar com o ovo de um pseudo-lendário sorteado, e Guardião do ninho (1.000 ovos) acrescenta o ovo de um lendário ou mítico. Esses também são segredo: você só descobre qual era quando ele chocar.
Badge de conta que muda uma regra: cause 1.000.000 de dano com os seus golpes, somando a carreira inteira, e todo Pokémon que você começar a jogar daí em diante nasce com os 6 IVs em 31. Só conta o dano que você bate — golpe de aliado, veneno, armadilha e recuo não entram, e o modo Fácil não acumula (como em todo progresso de conta). O interruptor "jogar sem as vantagens da conta" na criação desliga ela junto com as outras.
A irmã dela, do outro lado do campo: recrute 500 aliados somando a carreira inteira e, daí em diante, todo Pokémon selvagem das rotas nasce com os 6 IVs em 31. Quem você fizer amizade vem perfeito — e os filhotes dos ovos dele também. O preço é honesto e está na descrição da badge: quem te enfrentar também nasce perfeito. Alfa, lendário e chefe já tinham IVs 31 desde sempre, então pra eles nada muda; equipe de treinador continua sorteando, porque aquele Pokémon é do treinador e não da rota. Também desliga junto no "jogar sem as vantagens da conta".
Quem criou a conta durante o Alpha ganha, para sempre, uma Poké Ball dourada com o α na tela 👤 Conta (e ao lado do nome no topo). A regra é a data de criação da conta, que vem do servidor (ALPHA_ATE em js/alpha.js); quem entra depois não consegue.
Uma tela com tudo o que mudou no jogo, da versão mais nova para a mais antiga, com as correções e uma piadinha por versão. Quando sai uma atualização nova, o botão fica marcado até você ler.
Uma tela com tudo o que o jogo sorteia, em números: o que cada clique em "Explorar" pode dar, qual item você acha e com que chance, a taxa de um Pokémon brilhante, como a taxa de aparição de uma espécie na rota é calculada, a chance de cair numa manada rota por rota, quantos Pokémon um treinador tem e o que eles carregam, a fórmula da captura balanço por balanço, os passos de um ovo, o crítico por degrau, a duração de cada status, de onde vem cada ₽ e cada ponto de XP, e como a pontuação da jornada é montada. Nenhum número é digitado na tela: cada porcentagem é lida da mesma constante que o sorteio usa, então a página não tem como ficar desatualizada. Fica em 📈 Taxas, em qualquer tela (menu ☰ no celular).
A tela inicial mostra quantas pessoas estão jogando no momento — sem dizer quem, só quantas. Dá pra desligar em ⚙ Ajustes (detalhes na Política de Privacidade).
O jogo pode avisar fora da aba: o aviso aparece na tela de qualquer jeito, e a notificação é o extra pra quando você está em outro lugar. Liga em ⚙ Ajustes → Notificações (o navegador só deixa pedir permissão num clique seu, então é um botão). Recusou? Dá pra liberar no cadeado ao lado do endereço; o jogo não insiste.
Com a conta ligada, ele também manda lembretes com o jogo fechado — um convite pra terminar o que ficou pela metade:
É no máximo um lembrete por dia, sempre o motivo mais interessante (ovo na frente de badge, badge na frente do parceiro parado), e chega a qualquer hora — inclusive de madrugada, se foi de madrugada que o ovo ficou pronto. Quem joga todo dia nunca recebe nada: o prazo conta da última vez que você abriu o jogo. Desmarcar em ⚙ Ajustes cancela na hora — o aparelho é desinscrito, não é só uma caixinha desmarcada. No iPhone, lembrete só funciona depois de adicionar o jogo à tela de início (é limitação do Safari).
O texto é escrito no seu aparelho, na última vez que você jogou, e o servidor só entrega — ele não sabe nada do seu jogo além do que já está escrito na notificação.
Um Pokémon carrega 4 golpes, e a cada nível você decide o que esquecer. Dois itens deixam você voltar atrás — e valem tanto para você quanto para qualquer aliado (você escolhe em quem usar e qual golpe ele esquece):
O jogo só mostra o que aquele Pokémon realmente pode aprender, e nunca repete um golpe que ele já sabe.
Cada golpe da lista tem botões ▲▼ pra reordenar do jeito que preferir — não gasta turno nem muda o golpe em si, é só a posição na lista. Vale na ficha (fora e durante a batalha, na sua run) e nas Raides (Arena e sala de multiplayer).
Além de subir de nível, os Pokémon evoluem como nos jogos:
As batalhas têm tempo, mostrado no topo com os turnos restantes:
Cada lado tem o seu, mostrado no topo da luta (🛡 o seu, ⚔ o do inimigo):
Duram 5 turnos e só valem para quem está no chão (Voador e Levitate flutuam e ficam de fora de tudo, inclusive da cura):
Missões que vão aparecendo conforme você joga, em duas famílias:
Só as missões do mapa em que você está aparecem — e os prêmios sobem conforme a rota: Poções na primeira, Max Revive e ₽12.000 nas últimas.
Chegou ao teto? O XP não some mais: tudo o que você ganha além do nível 100 vira pontuação da jornada (cada 1.000 de XP = 3 pontos, ou seja, o equivalente a mais um nível lá em cima rende quase os mesmos 100 pontos de um nível de verdade). A tela de fim mostra a linha XP além do nível 100 pra quem chegou lá. A conta é derivada do XP acumulado do Pokémon, então vale retroativamente — e o servidor recalcula a pontuação com a mesma regra.
Um jogador cria a sala e passa o código de 4 letras — ou manda o 🔗 link do convite, que já abre o jogo dentro da sala. Até 6 entram. Não precisa de conta. O anfitrião escolhe:
Com qual Pokémon entrar (escolhido dentro da sala, no lobby, onde você já vê o tipo de luta e quem chegou — dá para trocar de ideia até marcar ✅ Pronto): o da sua run (a luta conta para ela), um convidado, os seus Pokémon do Hall da Fama ou 👁 só assistir. O convidado é escolhido entre os iniciais, Pikachu, Eevee e as espécies desbloqueadas no Roguelike (Nv. 5, emprestado só para a sala). A opção do Hall leva de 1 a 3 campeões de jornadas Roguelike/Hardcore já terminadas, no nível de verdade deles — pra jogar sem precisar de uma run em andamento nem se contentar com um Nv. 5. Os dois são emprestados só para a sala: não mexem em nenhum save e não ganham recompensa. Quem entra como espectador fica na sala, vê a luta e usa o chat, sem entrar em time nenhum. Pokémon desmaiado não impede de entrar: o Centro Pokémon está dentro da sala.
O lobby mostra o código em destaque (com 📋 copiar código e 🔗 copiar convite), um cartão por jogador com o que ele trouxe e em que pé está — 👑 anfitrião, ✅ pronto, ⏳ escolhendo, 👁 assistindo. O ✅ Pronto vale em todos os modos, e quando o botão de começar está apagado ele diz por quê (quem ainda está escolhendo, qual time está vazio…).
Ganhos da run de outra pessoa: se você lutou no seu nível real, XP, EVs, dinheiro, itens (35% de chance por vitória) e prêmios de Alfa voltam com você para a sua run. Se o Balancear ajustou o seu nível, a luta vale como diversão e não leva ganhos.
A luta acontece numa cena de batalha como a do jogo sozinho: campo ao fundo, sprites grandes (o seu de costas), placa com tipos, HP, status e mudanças de atributo. Cada um escolhe o golpe e o alvo de cada Pokémon seu; o turno sai quando todos escolherem, ou em 45 segundos, no automático — com barra de tempo, fichas de quem já escolheu (✓ / ⏳) e 📜 turnos anteriores pra reler o que passou.
Na tela inicial e no topo do jogo. Escolha Bug ou Sugestão, dê um título e descreva. Não precisa de conta. Os bugs podem levar um anexo técnico (versão, navegador, tela, Pokémon, últimas linhas do registro, nada pessoal), que você vê antes de enviar. Sem internet, fica guardado e é enviado depois.
Imagens (com conta): dá para anexar até 2 imagens de até 2 MB cada (o tamanho de 2 prints de celular ou de computador — PNG, JPG ou WebP; no computador, cole com Ctrl+V). O jogo reduz o print antes de enviar. Anexar exige estar na conta — enviar o relato, não: sem conta não há a quem amarrar o envio, e a caixa de prints aceitava arquivo de qualquer um sem limite (auditoria de segurança, 29/09/2026). Sem conta a tela explica isso no lugar do seletor, com o botão de entrar ao lado. Quem mantém vê os arquivos no painel do Supabase em Storage → relatos-imagens (bucket privado); a coluna imagens da tabela relatos guarda os caminhos. Precisa da migração 20260925160000_relatos_imagens.sql (a integração com o GitHub aplica sozinha ao dar merge no main); sem ela, relato com imagem cai na fila e relato sem imagem continua funcionando.
Para quem mantém o jogo — onde ler os relatos: eles caem na tabela relatos do Supabase. Pela regra de acesso (RLS), cada conta só enxerga os próprios relatos pelo jogo; quem mantém lê tudo no painel do Supabase, que trabalha como administrador:
relatos (dá para ordenar por criado_em e filtrar por tipo ou status).select criado_em, tipo, status, titulo, descricao, contexto
from relatos
order by criado_em desc
limit 50;
O campo status tem um vocabulário fechado por CHECK no banco (20260929140000_relatos_status.sql): novo (recebido) → lido (na fila) → resolvido (virou mudança no jogo) ou arquivado (analisado, mas não vira mudança). O INSERT continua preso a 'novo' — o jogo nunca deixa alguém mudar isso de fora. Há ainda resposta (uma nota curta sua, que o jogador lê) e resolvido_em. Não existe tela de administração dentro do jogo — é de propósito, para não haver caminho pelo navegador que leia relato de outra pessoa.
Acompanhar o próprio relato: quem envia com a conta aberta vê, na própria tela 🐞 Relatar, a seção "Seus relatos" com a situação de cada um — ⏳ Aguardando, 👀 Em análise, ✅ Atendido ou 📦 Arquivado — mais a sua nota, quando houver. Sem conta o envio funciona igual, mas não há como ligar o relato à pessoa depois (a regra do banco é "cada conta lê só os próprios"), e a tela explica isso em vez de aparecer vazia.
Para fechar relatos sem abrir o painel:
node ferramentas/relatos-admin.mjs --resolver 57,58 --nota "Corrigido na versão 4.3"
node ferramentas/relatos-admin.mjs --arquivar 59 --nota "Fora do escopo por enquanto"
As 1025 espécies do jogo: as que você já encontrou aparecem com sprite e nome, as outras ficam como "?". Toque em quem você conhece para abrir a ficha completa — tipos, todos os atributos base, habilidades com descrição, e quantas vezes você já viu, derrotou e recrutou aquela espécie.
A ficha também responde onde achar: em quais rotas de quais mapas ele aparece, com a chance de encontro, e se ele é Alfa de alguma rota ou participa de uma luta final. Conta a carreira inteira e a jornada em andamento.
✨ Pokédex shiny: o botão no topo troca a grade por outra, com o mesmo formato e os sprites brilhantes — acesas só as espécies que você já viu shiny. É a dex de colecionador: 1025 espécies, um shiny a cada 4.096 encontros, e três números próprios no topo (espécies, shinies encontrados no total e quantos viraram seus). Vale o shiny encontrado, recrutado ou não. Um aviso na tela explica o único buraco: shiny de antes de 11/10/2026 só está lá se você o recrutou, porque até então o encontro brilhante não sobrevivia ao fim da jornada.
Tudo o que você acumula ao longo da carreira inteira, jornada após jornada — e a que está em andamento conta junto. A cada vitória o jogo registra os tipos do Pokémon derrotado, a espécie que você estava usando, o golpe que finalizou e o elemento dele.
É o que vai desbloquear as gimmicks: Mega Evolução (1.000 golpes finais sendo aquela espécie), Terastalização (200 derrotados de um tipo), Z-Moves (250 eliminações com o golpe, ou 500 com o elemento) e Gigantamax (nível 50 com a espécie em 25 jornadas). Mais os marcos de caçada: 1.000 · 10.000 · 100.000 · 1.000.000 de derrotados.
O abate do aliado conta para a espécie que você está usando; tipo e golpe só contam quando o golpe final foi seu. O modo Fácil não acumula — ele é treino. A Mega só acumula para espécies que têm Mega — derrotar sendo uma que não megaevolui não enche barra nenhuma; as outras gimmicks contam tudo.
A Mega Evolução já é jogável. Conquistar a Mega de uma espécie libera a compra da Pedra Mega (₽15.000 na loja, só para a sua espécie) — e é preciso segurá-la para megaevoluir; Rayquaza é a exceção e megaevolui por saber Dragon Ascent. Com a pedra na mão, aparece um botão ⚡ na batalha que não gasta o turno — você megaevolui e ataca na mesma rodada. A forma muda status, tipos, habilidade e aparência, e dura até o fim da batalha; Charizard e Mewtwo perguntam X ou Y, e Groudon e Kyogre usam o nome certo, Reversão Primitiva. Do outro lado, Alfa, lendários e treinadores também megaevoluem — quando caem à metade do HP, o que dá uma segunda fase à luta. Só você megaevolui do seu lado: aliado não. A Terastalização também já é jogável. Cada tipo é conquistado à parte (200 derrotados daquele tipo) e, na batalha, você escolhe entre os que já tem — o botão 💎 também não gasta o turno. Terastalizado, você passa a ter um tipo só para receber golpe (um Charizard Tera Água deixa de tomar 4× de Pedra), e o STAB segue a regra dos jogos: golpe do tipo Tera que você já tinha bate ×2, um tipo Tera novo bate ×1,5, e o STAB antigo continua valendo. Dá para usar Tera e Mega na mesma batalha. O Z-Move precisa do Cristal Z (₽12.000, liberado ao conquistar um Z) e, ao contrário dos outros, é o seu turno: converte um golpe seu num golpe muito mais forte, uma vez por batalha. O Gigantamax é a única sem item — conquistado (nível 50 com a espécie em 25 jornadas), dobra o seu HP por 3 turnos, transforma todo golpe num golpe Max e deixa o seu Pokémon gigante na tela. As quatro gimmicks já são jogáveis.
Do outro lado, Alfa, lendários e treinadores megaevoluem ou terastalizam ao cair à metade do HP — uma virada por luta, nunca as duas. A Mega do inimigo só aparece de nível 40 em diante; o Tera dele pode vir em qualquer rota. Só Pokémon de treinador gigantamaxam (no mesmo gatilho e na mesma "uma virada por luta": quem não tem Mega sorteia entre Tera e Gigantamax) e só treinadores e Alfas usam Z-Move: o treinador sempre carrega um, o Alfa só de vez em quando (chance baixa, sorteada no começo da luta), e é um golpe de dano por luta, num turno sorteado.
Vínculo de Batalha (Ash-Greninja). Mesma economia da Pedra Mega, mas com espécie própria: 1.000 golpes finais sendo Greninja liberam a compra do item Vínculo de Batalha (₽15.000, só funciona nele). Segurando-o, derrubar um oponente vira Ash-Greninja automaticamente pro resto da luta — atributos mais altos e Water Shuriken vira poder fixo 20 com sempre 3 acertos (a versão normal é poder 15 e 2 a 5 acertos aleatórios). Não é um botão: é automático, como qualquer habilidade — e dura até o fim da batalha.
No co-op o seu Pokémon principal também usa as quatro gimmicks (selvagens, Alfa e chefe da semana), com as mesmas regras e as suas próprias conquistas, Pedra Mega e Cristal Z: os botões ⚡ 💎 🔴 🌀 aparecem acima dos golpes, na sua vez, e valem uma vez por luta. Aliados, Pokémon convidado e PvP ficam de fora, e nada disso muda o Pokémon da sua run depois da luta. Os derrotados do co-op também contam para a barra da Mega e para os marcos de caçada.
A melhor jornada de cada jogador, geral ou por espécie, com a sua posição destacada. Dá para ver sem conta; para aparecer, entre e termine jornadas. A pontuação é recalculada no servidor a partir dos números da jornada, e números impossíveis são recusados.
Os painéis (Ficha, Missões, Aliados, Mochila, Registro) podem ser arrastados, redimensionados, recolhidos e trocados de coluna. Na luta, a cena fica no centro e os golpes logo abaixo dela, antes do registro. Botão ↺ Layout volta ao padrão. No celular vira uma coluna só.
ES modules não carregam por file://, então é preciso um servidor:
python -m http.server 3000
Depois abra http://localhost:3000/jogar.html — o jogo mora em jogar.html; a raiz (index.html) é a página de apresentação do site, gerada por ferramentas/gerar-paginas.mjs.
Login e nuvem (opcional): siga supabase/COMO-CONFIGURAR.md. Sem isso, o jogo funciona inteiro, só que local.
Publicar: qualquer hospedagem estática (usamos a Vercel), com a raiz do repositório como pasta pública e sem comando de build.
Aparecem só pra quem está logado numa conta com perfis.admin no Supabase (nuvem.ehAdmin) — são de diagnóstico, não conteúdo de jogo:
dados-rotas.js), pra uma instalação nova já nascer com a versão certa.js/dados-saga-mundo.js pra colar no repositório.node --test (sem caminho) roda tests/*.test.js: fórmulas de batalha, captura, missões, carreira, layout dos painéis, sanidade das tabelas de dados e a lista de arquivos do modo offline. O GitHub Actions roda os testes a cada push (aba Actions).
O schema vive em supabase/migrations/ e sobe sozinho pela integração nativa do Supabase com o GitHub (no painel: Settings → Integrations → GitHub, com working directory / — a raiz, porque o campo pede o diretório que CONTÉM a pasta supabase/ — e Deploy to production na branch main). Cada mudança no banco é um arquivo novo na pasta; ao fazer merge no main, o Supabase aplica os que ainda não rodaram. Migration já aplicada nunca é editada.
| Pasta/arquivo | O que tem |
|---|---|
jogar.html, css/estilo.css | O jogo (a página que carrega os módulos) e o estilo |
index.html e as outras páginas do site | Geradas por ferramentas/gerar-paginas.mjs: apresentação, guia em 6 capítulos, sobre, privacidade, termos, contato (não editar à mão) |
js/regras.js | Fórmulas puras (dano, stats, captura, missões, pontuação…), todas testadas |
js/dados.js | Tabelas: tipos, naturezas, itens, missões, dificuldades, iniciais, ordens |
js/mapas.js, js/dados-mapas.js | Mapas por Gen: rotas, taxas de aparição, Alfas, lendários, Pokédex da rota. dados-mapas.js é gerado da PokéAPI por ferramentas/gerar-mapas.ps1 (não editar à mão) |
js/golpe.js, js/habilidades.js, js/especiais.js | Motor único dos golpes, a tabela de habilidades e a de golpes especiais (Protect, Rest, Explosion, carga/recarga…) |
CLAUDE.md | Guia de quem mexe no código: como rodar, arquitetura, armadilhas e convenções. Mantido curto de propósito (é lido por inteiro a cada sessão de trabalho) |
docs/features.md | Como cada coisa foi construída: o que foi considerado, o que foi simplificado de propósito, o que ficou de fora — mais o detalhe por arquivo |
docs/historico.md | Post-mortems dos bugs já corrigidos: o relato do jogador, o que foi descartado no diagnóstico e a lição |
docs/auditoria-batalha.md | Auditoria de golpes e habilidades contra o motor. ⚠️ Desatualizada (parou na 2ª leva de habilidades): não reflete nem o total nem o que já está implementado. Para a contagem de verdade, vale IMPL.size em js/habilidades.js |
js/relatos.js | Bugs e sugestões |
js/batalha.js, js/amizade.js, js/progressao.js, js/itens.js, js/missoes.js, js/mundo.js | Regras narradas do jogo |
js/render.js, , |
Os tiles, os enfeites e os humanos do mundo da Saga (img/saga/atlas.png e img/saga/gente.png) são arte aberta do Liberated Pixel Cup — Lanea Zimmerman (Sharm), Stephen Challener (Redshrike), Charles Sanchez, Manuel Riecke, Daniel Armstrong e os autores das camadas do Universal LPC Spritesheet Character Generator —, usados e redistribuídos sob CC-BY-SA 3.0. A lista completa está em img/saga/CREDITOS.txt. Esses dois arquivos são obra derivada e seguem a mesma licença; o resto do repositório, não. Nada ali foi tirado de jogo comercial: os sprites dos Pokémon continuam vindo da PokéAPI.
Código-fonte disponível para leitura, mas não é open source: todos os direitos são reservados ao autor (ver LICENSE). Os dados de Pokémon vêm da PokéAPI; Pokémon é marca da Nintendo/Game Freak/Creatures Inc. — este projeto não tem afiliação oficial com nenhuma delas.
A raiz do domínio é uma página, não o jogo (desde 11/10/2026). index.html apresenta o PokéRPG em texto — o que é, como é a primeira partida, o que tem dentro, as seis dificuldades — e leva pro jogo, que mora em jogar.html. O link de convite do multiplayer continua sendo /?sala=XXXX: a home desvia pro jogo assim que vê o parâmetro, então nenhum convite já enviado quebrou.
Fora do jogo existem doze páginas estáticas com endereço próprio: a apresentação (index.html), sobre.html, guia.html, privacidade.html, termos.html, contato.html e os seis capítulos do guia (guia-comecar, guia-batalha, guia-mundo, guia-transformacoes, guia-progresso, guia-multiplayer). O rodapé de toda tela linka as cinco do meio (o rodapé some durante a batalha); os capítulos ficam fora dele de propósito — onze links iguais em toda página escondem os links legais, que são o motivo do rodapé existir —, e se alcançam pelo índice em guia.html e pela navegação no pé de cada capítulo. Elas existem por dois motivos: o jogo inteiro é montado em JavaScript dentro de uma <div> vazia, numa URL só, então sem elas não há nada que um buscador consiga ler nem endereço pra dar pra política de privacidade; e o cadastro do AdSense pede esse endereço.
O guia é a documentação do jogo pra quem joga: dificuldades e primeiros passos, a batalha inteira (ordem do turno, dano, status, clima, terreno, telas e armadilhas, aliados, IA), o mundo (rotas, Pokédex da rota, Alfas, lendários, Santuário, formas regionais, caçadores), as quatro transformações, o progresso que sobrevive à jornada (XP, evoluções, missões, carreira, medalhas, Hall da Fama, chefe da semana) e o multiplayer.
São geradas por ferramentas/gerar-paginas.mjs a partir de js/site.js (constantes: e-mail de contato, aviso de marca, PAGINAS e CAPITULOS_GUIA), js/texto-privacidade.js (a política, compartilhada com a tela de dentro do jogo), ferramentas/conteudo-site.mjs (sobre, termos, contato) e ferramentas/conteudo-guia.mjs (o guia). Mexeu no texto-fonte → node ferramentas/gerar-paginas.mjs; tests/paginas.test.js falha se o publicado estiver desatualizado. robots.txt e sitemap.xml acompanham.
Estado atual (11/10/2026): reprovado por "conteúdo de baixo valor" no primeiro pedido de revisão. O motivo mais provável está medido em docs/adsense.md: a raiz do domínio era o jogo — <div id="app"> vazia, 5 palavras de HTML — então a página mais importante do site era a única sem conteúdo nenhum. O jogo passou a morar em jogar.html e a raiz virou uma página de apresentação de verdade (~890 palavras, com os links pro guia). O código do AdSense continua carregado no <head> de todas as páginas, sem exibir anúncio (AD_SLOT_INICIO/AD_SLOT_GUIA vazios em js/config.js) — é o estado certo pra revisão. A segunda revisão espera o site ganhar tráfego: "presença consistente na web" também é critério, e reenviar na semana seguinte sem nada ter mudado de fato costuma levar a nova negativa.
Como o consentimento funciona: js/consent.js roda antes do script do Google, síncrono, e declara o consentimento como negado (Consent Mode v2) — sem cookie de anúncio e sem personalização. Um banner pergunta na primeira visita; ao aceitar, js/ads.js manda o sinal ao Google. A escolha fica salva e muda a qualquer hora em ⚙ Ajustes, e recusar não limita nada no jogo. ⚠️ Esse banner é caseiro e não é uma CMP certificada pelo Google — sem uma, tráfego do EEE/Reino Unido/Suíça não recebe anúncio personalizado; a CMP entra depois da aprovação (ver docs/adsense.md).
Depois de aprovado: crie as unidades de anúncio (Anúncios → Por unidade de anúncio) e cole os ids em AD_SLOT_GUIA (páginas de conteúdo) e AD_SLOT_INICIO (fim da tela inicial) em js/config.js — o resto já está pronto. Em outras telas, cada slot é uma chamada a blocoAds(id) seguida de ativarSlots() depois de desenhar a tela. Nunca perto dos botões de batalha (clique acidental vira tráfego inválido, que é banimento), e anúncios automáticos ficam desligados no painel pelo mesmo motivo.
A Política de Privacidade está publicada em dois lugares com o mesmo texto: a tela 🔒 dentro do jogo e privacidade.html, explicando o que cada serviço (Supabase, PokéAPI, jsDelivr, Google Fonts, AdSense, Vercel) coleta.
📜 Missões, e 🕯 missões secretas. O 📖 Diário guarda as missões em andamento, os itens-chave, os dons e a reputação. Missão secreta não aparece em lugar nenhum até você tropeçar nela: ninguém avisa que existe. Missão que uma escolha sua deixou sem saída (quem a pediu foi embora) sai das em andamento e fica no diário como perdida.
⚖ Três ordens e escolha com consequência. ⚒ Ordem da Forja, 🌿 Círculo do Bosque e 🌑 Corte do Abismo querem a mesma coisa, cada uma por um motivo defensável. Ajudar uma custa a outra, uma porta fechada não reabre, e cada capítulo tem três desfechos — um deles só existe pra quem achou o que estava escondido (dá pra acalmar um Alfa ferido em vez de derrubá-lo, se você levar o remédio certo).
✨ Dons. Habilidades que só a Saga dá, ganhas por escolha e não por nível: cada desfecho ensina um dom diferente, e eles valem em batalha (ou no mapa) pelo resto da jornada.
🗺 Carta da região. Toque no nome do lugar, no canto da tela, e abre o mapa da região: cada lugar que você já visitou aparece desenhado, com você marcado no ponto exato. Onde ainda não pisou é só um vulto com "?" — dá pra ver que existe, não o que é nem por onde se entra (alguns só abrem com uma missão que nenhuma placa anuncia). As regiões por descobrir aparecem trancadas na lista, e as setas folheiam as que você já conhece.
🌊 Dez capítulos e quatro finais. Charco, minas, um bosque que vai embora andando, uma ponte partida, um deserto de sal, a serra gelada — cada região com o seu chão, o seu Alfa e a sua decisão. No fim, os Antigos (os lendários da região) não são derrotados: são feitos escutar, e o que você diz a eles depende de tudo o que carregou até ali. Um dos finais só existe pra quem chegou com as três ordens ainda sentadas no mesmo fogo.
💔 Reputação vira gente. Perto do fim, cada ordem que você prejudicou manda cobrar — e chama de volta o companheiro da sua comitiva que for dela. Ele vai embora de verdade (o que segurava fica com você).
Seis ofícios, lidos dos atributos e do que a espécie aprende (nada de tabela escrita à mão): 🛡 Guardião segura a linha · 💚 Curandeiro cura e limpa · 🔮 Arcano lança o fogo de longe · ⚔ Guerreiro abate · 🕯 Encantador enfeitiça · 🎻 Bardo ergue a comitiva. Quem tem dois perfis sai com o nome composto (Miltank é Curandeiro-Guardião); o ofício não muda na evolução.
Ameaça (aggro): o inimigo não mira mais alguém aleatório — mira quem mais chamou atenção. O Guardião atrai o dobro só por existir, e curar atrai 1,5×. É o que faz um "tanque" existir.
Janela de comandos no espírito dos Final Fantasy clássicos: ⚔ Atacar · ✨ Perícia · 🎒 Mochila · 🏃 Fugir.
Oito perícias (duas do Guardião e do Curandeiro, uma dos outros quatro): não gastam PP, custam recarga em turnos. Brado de Ferro, Muralha, Bálsamo, Purificar, Selo Arcano, Estocada, Marca e Canção de Guerra. A perícia é a sua ação da rodada, como um golpe.
🛡 Guarda, Brecha e Ruína: cada inimigo traz escudos (3 um selvagem, 6 um Alfa, 10 o chefe da semana), visíveis na cena abaixo do HP. Golpe super efetivo e crítico abrem 1 Brecha; status e a Marca abrem meia. Zerar a Guarda põe o inimigo em Ruína: ele perde o turno, os bônus que acumulou somem e tudo dói 50% mais — depois a Guarda volta cheia.
Comande a comitiva: toque num companheiro pra escolher o golpe ou a perícia dele. Quem você não comandar segue a Ordem de sempre. Seu comando fecha a rodada.
Grupo inimigo de 1 a 3 por rota (nas três primeiras ainda pode ser 1×1), e o Alfa vem com dois lacaios. Escolher o alvo é um segundo toque; com um inimigo só, ataca direto.
Fila da rodada no topo da cena: a ordem provável, por velocidade (quem está em Ruína vai pro fim com 💥).
A ficha marca quais estão ativas.
supabase/migrations/20261013180000_beta_testers.sql aplicada.ferramentas/olhar.mjs (desenvolvimento, no Raspberry Pi): abre o jogo num Chromium sem janela, roda um roteiro (clicar, andar, abrir tela) e tira foto — é como se confere CSS numa máquina sem monitor. Precisa de sudo apt install chromium-headless-shell.dados-musica.js. Tema que passe do teto de agudo (880 Hz) ou com a frase fora do compasso é recusado na hora, com o motivo — a mesma trava que os testes cobram no repositório.js/paineis.jsjs/layout.js| Tela e painéis modulares |
js/criacao.js, js/fim.js, js/carreira.js, js/roguelike.js | Criação, fim de jornada, carreira e desbloqueios do Roguelike |
js/nuvem.js, js/conta.js, js/config.js, js/ranking.js | Login, nuvem (Supabase) e ranking global |
js/segurados.js | Efeito de cada item segurado (Restos, Orbe da Vida, frutas…) |
js/auto.js, js/notificacoes.js | 🤖 Auto-explorar (só admin) e as notificações do navegador |
js/dados-patchnotes.js, js/tela-patchnotes.js, js/novidades.js | Notas de atualização e o aviso de novidade |
js/navegacao.js, js/ajustes.js, js/tela-ajustes.js | Barra de navegação das telas, escolha de fonte e a tela de ajustes |
js/som.js, js/dados-musica.js | Cries, música procedural e som de impacto por tipo (Web Audio API, desligado por padrão) · as tabelas da trilha (tema por bioma, contexto por tela) |
js/editor-musica.js, js/tela-editor-musica.js | 🎵 Editor de músicas (só admin): o rascunho e o bloco pra colar (puro) · a tela |
js/editor-conteudo.js, js/tela-editor-conteudo.js | 🧰 Editor de conteúdo (só admin): missões globais, preço de item e as badges (texto, prêmio e criar nova) |
js/conteudo.js, js/conteudo-nuvem.js | 📦 Atualização de conteúdo pela nuvem: validar e aplicar (puro) · cache, busca e publicar |
js/evolucao.js | Condições de evolução (pedra, troca, vínculo, hora, golpe…) e as regras equivalentes dos casos raros |
js/saves.js, js/tela-saves.js | Jornadas salvas (várias runs em andamento) e a tela delas |
js/mp-motor.js, js/mp-sanear.js, js/mp-regras.js, js/mp-rede.js, js/mp-cartao.js, js/mp-telas.js, js/mp-resultado.js, js/multiplayer.js | Multiplayer: motor do turno, conferência do que chega pela rede e regras da sala (puros, testados), rede, desenho dos Pokémon, telas, resultado no save e a orquestração da sala |
sw.js | Modo offline |
supabase/ | Banco (schema.sql) e passo a passo de configuração |
CLAUDE.md | Mapa técnico detalhado (para quem mexe no código) |
ctx.reordenar); em luta de sala o golpe avisa que ali não dá.dados-ref/golpes.tsv × a tabela de especiais × os ailment que o motor trata) só acusa três nomes, e os três são falso positivo de um dump de 2020 — eles funcionam pelo caminho comum. O que resta são tetos conscientes dentro de golpes que funcionam, registrados em docs/features.md ("A cauda longa dos golpes").tests/gimmicks-coop-inimigo.test.js)/security-review como segunda opinião: 7 achados corrigidos — mochila e inventário de conta só saem com pedido do próprio jogador (mp-regras.itensADescontar), desistir restrito ao PvP, duas brechas de endereço de imagem viraria-código fechadas, par de amizade congelado no servidor e penalidade de pontuação com teto nos dois lados