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
Arcana Survivors — sobreviva sozinho ou em co-op.
Translation pending
GamesJavaScript · CSSGitHub @MrPowerUp82OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
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
Survival roguelite cooperativo para a web, de 1 a 4 jogadores. O cliente estático funciona no GitHub Pages, e o servidor WebSocket roda separadamente em Node.js na VPS. A mesma simulação (server/game.js) roda no navegador no modo offline e no servidor autoritativo no co-op.
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Survival roguelite cooperativo para a web, de 1 a 4 jogadores. O cliente estático funciona no GitHub Pages, e o servidor WebSocket roda separadamente em Node.js na VPS. A mesma simulação (server/game.js) roda no navegador no modo offline e no servidor autoritativo no co-op. Ports para consoles (Nintendo Switch, PS Vita, PSP): A continuação e evolução dos ports foi transferida para o projeto dedicado em C++20: wizard-coop-ports (README local). O novo projeto substitui o port em JavaScript (nx.js) por uma implementação nativa de alta performance (60 FPS, renderer em lote e zero heap por frame).Read the full README ↗
Survival roguelite cooperativo para a web, de 1 a 4 jogadores. O jogo é um site estático (GitHub Pages) e o co-op online é peer-to-peer: quem cria a sala roda a simulação (server/game.js) no próprio navegador e os outros jogadores se conectam a ele por WebRTC, sem servidor próprio. A mesma simulação roda no modo offline.
[!NOTE] Ports para consoles (Nintendo Switch, PS Vita, PSP): A continuação e evolução dos ports foi transferida para o projeto dedicado em C++20: wizard-coop-ports (README local). O novo projeto substitui o port em JavaScript (nx.js) por uma implementação nativa de alta performance (60 FPS, renderer em lote e zero heap por frame).
npm install
npm run dev
O co-op funciona direto no npm run dev: abra duas abas (ou dois navegadores), crie uma sala em uma e entre pela lista ou pelo código na outra. Os pares se encontram por relays públicos do Trystero (trackers BitTorrent), então é preciso internet. Em redes onde a conexão direta falha, informe um servidor TURN: ?turn=turn:host:3478&turnUser=usuario&turnCred=senha.
| Comando | O que faz |
|---|---|
npm run check | ESLint, checagem de tipos via JSDoc (tsc) e todos os testes |
npm test | Simulação, protocolo, rede e animações (node --test) |
npm run sim -- 12 1 | Bots jogam campanhas completas e mostram vitórias, duração dos chefes e pico de inimigos (12 partidas, 1 jogador) |
npm run build | Gera o frontend de produção em dist |
npm run switch:check | Typecheck do port Switch contra o nx.js e testes do bundle Switch |
npm run switch:nro | Gera platforms/switch/ArcanaSurvivors.nro |
O workflow do GitHub Pages executa lint, checagem de tipos e testes antes de publicar.
As 29 folhas base em public/assets/animated/ foram criadas com o modelo de geração de imagem, usando a arte existente como referência. Cada arquivo tem quatro colunas de quadros e cinco linhas: repouso, movimento, ataque, interação e dano. As variantes de cor usam esses mesmos quadros, recoloridos no navegador. O renderizador escolhe o quadro pelos estados visuais acompanhados em src/animation.js; até a folha carregar, a arte original continua visível. As folhas fazem parte do cache offline do PWA. O processo e as referências estão em docs/animated-sheets.md.
[!IMPORTANT] Aviso de migração dos ports: A continuação e o desenvolvimento ativo dos ports de console agora acontecem no projeto nativo em C++20: wizard-coop-ports (README). O port nativo resolve as limitações e quedas de FPS do runtime JavaScript (nx.js), suportando Nintendo Switch, PS Vita e PSP.
As instruções abaixo documentam o port inicial experimental em JavaScript (nx.js).
O mesmo jogo roda no Switch como ArcanaSurvivors.nro (nx.js 1.0.0-beta.6): solo, desafio diário e o co-op local em
tela dividida, com Joy-Con L como Jogador 1 e Joy-Con R como Jogador 2, cada um na horizontal.
npm run switch:install
npm run switch:nro
O .nro sai em platforms/switch/ArcanaSurvivors.nro. Instalação, controles, depuração de Joy-Cons e limitações estão
em platforms/switch/README.md. A simulação, o renderer e o co-op local são os mesmos da web
(src/localCoop.js); só entrada, menus/HUD, fontes e o backend de áudio são específicos do Switch.
Abra a versão publicada em HTTPS (ou localhost) uma vez com internet e aguarde Pronto para jogar sem internet no menu. Os arquivos do jogo, fontes e imagens dos seis reinos ficam salvos no navegador. Depois, é possível fechar e reabrir o jogo sem conexão, pelo mesmo endereço ou pelo aplicativo instalado.
Use Instalar jogo quando disponível, a opção de instalação do navegador ou, no iPhone/iPad, Compartilhar → Adicionar à Tela de Início. Jogar solo, desafio diário, Grimório e Códex funcionam offline; salas cooperativas precisam de internet. O progresso permanente continua salvo neste navegador; partidas em andamento não são salvas ao fechar o aplicativo. Limpar os dados do site também remove o cache e o progresso.
Novas versões exibem Atualizar jogo no menu e só recarregam após esse clique. Termine a partida antes de atualizar. Para testar localmente, execute npm run build e npm run preview, visite o endereço informado, aguarde a preparação e recarregue com a rede desativada. O service worker fica desabilitado em npm run dev.
O precache é gerado pelo vite-plugin-pwa, com caminhos relativos para publicação em subdiretórios do GitHub Pages.
| Fase | Inimigos | Chefe |
|---|---|---|
| Bosque Desperto | Cogumelos, besouros que investem e lodos que se dividem | Raiz Ancestral |
| Cripta Glacial | Esqueletos, espectros e olhos gélidos que atiram à distância | Rei do Inverno |
| Abismo de Brasas | Diabretes, escorpiões que investem, morcegos que explodem e golems de magma | Coração da Caldeira |
| Pântano Espectral | Esporos que disparam espinhos, almas velozes, lodos e escorpiões | Matriarca do Brejo |
| Cidadela Astral | Sentinelas que investem, oráculos que atiram, almas e golems | Arconte Solar |
| Eclipse do Vazio | Asas explosivas, escaravelhos que investem, oráculos e almas | Soberano do Eclipse |
Cada horda dura 300 segundos: são seis fases e 30 minutos de hordas, além das lutas contra chefes e transições, tanto offline quanto online. A dificuldade sobe dentro da fase, e cada fase começa num patamar próprio, em vez de herdar o relógio global. Cada inimigo morde no próprio ritmo: um inimigo sozinho fere pouco, mas ser cercado é perigoso. O XP de cada inimigo acompanha a vida dele.
As fases novas usam pisos próprios e variações de cor dos sprites existentes, preservando a identidade visual. Os pisos e as cores são preparados uma vez no cliente; os limites de inimigos, projéteis e áreas simultâneas continuam iguais.
Eventos marcados movimentam a horda: uma onda de abertura, elites douradas aos 90, 180 e 270 segundos (deixam baú com escolha de poder e ímã que puxa todo o XP) e enxames que cercam o grupo.
Em cada reino surgem dois encontros opcionais: o altar (defenda 15 s) e, aos 60% da horda, um sorteado entre mercador errante (20 moedas da partida por um poder, uma compra por arcanista), santuário amaldiçoado (poder e moedas para todos, mas inimigos ferem 30% mais até o fim do reino) e ladrão de relíquias (uma elite que foge com um baú; derrube-a em 20 s).
A vida do chefe é calculada a partir do dano estimado do grupo no momento da invocação, com duração-alvo crescente de 45 a 90 segundos (a duração real depende da build e das esquivas). Com 66% e 33% da vida, o chefe entra em fúria: onda de choque, lacaios e padrões novos (linhas de raízes, anéis de projéteis, meteoros e investidas telegrafadas). Ataques em área mostram o círculo antes de causar dano. Derrotar o guardião cura 35% da vida e dá uma escolha de poder gratuita no início da fase seguinte. A queda do sexto chefe concede a vitória.
Combos elementais: fogo em inimigo desacelerado (choque térmico), raio em inimigo enraizado (condução) e lâmina lunar em inimigo em chamas (eclipse). No co-op, quando um aliado finaliza o efeito que você aplicou, o combo em equipe causa 2× de dano e carrega o especial dos dois; dois especiais próximos com até 1,5 s de diferença disparam uma Convergência entre os arcanistas.
Especiais: cada personagem tem um especial padrão (Nova glacial, Meteoro, Jardim de espinhos, Passo lunar) e, com o desbloqueio Segundo feitiço, um alternativo (Tempestade de granizo, Égide flamejante, Florescer, Eclipse), escolhido no menu.
No co-op, a escolha de poder tem 15 segundos; depois disso, a primeira opção é aplicada automaticamente.
| Mago | Ataque automático |
|---|---|
| Azul | Raio glacial: desacelera por 1,2 s (40% nos inimigos comuns, 15% nos chefes) |
| Vermelho | Bola de fogo: dano direto e 60% do dano nos inimigos a até 75 unidades |
| Verde | Espinho: atravessa até três inimigos sem atingir o mesmo duas vezes |
| Roxo | Lâmina lunar: colisão mais larga e atravessa até dois inimigos |
Toque ou clique sete vezes no título Arcana Survivors no menu (também funciona com Enter/Espaço ao focar o título). O Desenvolvedor aparece na seleção e o desbloqueio fica salvo neste navegador.
Ele tem 5× de vida, 4× de dano, ataques duas vezes mais rápidos, três projéteis iniciais, +35% de velocidade e 12 de armadura. Código-fonte atravessa até seis alvos, desacelera e explode em área. Seu visual combina um mago ciano com sigilos geométricos e a marca </>.
Reescrever realidade produz uma onda ciano e atinge inimigos em um raio de 600 unidades com 24× o dano, apaga projéteis nesse raio, cura 50% da vida máxima e protege por 3 s. A carga se regenera em 10 s, além dos cristais. Com Segundo feitiço, Restauração do sistema produz uma varredura magenta e elimina todos os inimigos presentes no mapa no instante da ativação, incluindo elites e chefes, independentemente da distância ou vida. Mantém abates, dano, drops e progressão de fase normais; inimigos que surgirem depois da ativação não são afetados. Também cura aliados vivos em até 600 unidades em 100% e protege por 5 s. Maldições que reduzem cura continuam valendo.
Disponível no solo e cooperativo web, mantendo personagens únicos por sala. O desafio diário continua sorteando apenas os quatro magos originais. O segredo é um desbloqueio local, sem exclusividade de conta de desenvolvedor.
Vença os seis reinos no modo Clássico, solo ou cooperativo, para desbloquear permanentemente o Guardião da Aurora neste navegador. O resultado anuncia a recompensa e libera o personagem no menu. Derrotas, abandonos, modo Rápido, Infinito e desafio diário não contam. O desbloqueio segue o mesmo modelo de progresso local do Grimório; vitórias anteriores à inclusão desta recompensa não foram registradas.
O Guardião usa vestes douradas e uma auréola solar. Tem 150 de vida, +35% de dano, +10% de velocidade, 3 de armadura e intervalo de ataque 15% menor, antes das melhorias permanentes. A Lança da aurora atravessa dois alvos. Sua auréola dispara automaticamente um raio solar no inimigo mais próximo a até 280 unidades a cada 5 s, causando 2,5× o dano do personagem. Alvorada causa 6× de dano em 300 unidades, apaga projéteis nesse raio e protege por 1,5 s. Com Segundo feitiço, Coroa da aurora dispara 12 lanças radiais com 3× de dano. Seus especiais carregam com cristais normalmente: não há recarga automática nem eliminação global como no Desenvolvedor. O desafio diário continua usando somente os quatro magos padrão.
The God custa 60.000 moedas no Grimório. A compra é permanente no perfil local e não entra na redistribuição de melhorias. Antes da compra, o personagem aparece bloqueado na seleção. Tem 500 de vida, +50% de dano, +20% de velocidade, 12 de armadura (maior valor inicial do elenco) e intervalo de ataque 15% menor. O Orbe cósmico atravessa três inimigos. Sua habilidade passiva mantém dois planetas orbitais que ferem inimigos por contato, independentemente dos Orbes arcanos comprados durante a partida. Big Bang atinge inimigos em 300 unidades, apaga projéteis próximos e protege por 1,5 s; com Segundo feitiço, Constelação dispara 12 orbes radiais. O desafio diário continua sorteando apenas os quatro magos originais.
Inimigos derrotados deixam XP e podem deixar coração (5%), cristal verde (20%) ou moeda (20%). Quando o chão fica cheio, novos cristais de XP se fundem aos próximos, que mudam de cor conforme o valor. Assim nenhum XP é perdido no limite de 220 drops.
As moedas da partida vão para o Grimório (menu inicial), que vende melhorias permanentes salvas no navegador (Vigor, Potência, Celeridade, Agilidade, Égide, Alcance, Sabedoria, Ganância, Canalização, Destino, Pacto familiar e Fênix) e desbloqueios: Arsenal (escolher a arma inicial), Segundo feitiço (especial alternativo), Ritual infinito e The God. O anfitrião valida graus, desbloqueios e escolhas antes de aplicá-los.
O Códex (menu inicial) registra no navegador cada poder, combo, criatura, guardião e encontro descoberto, com a explicação de como funciona; entradas ainda não descobertas mostram só uma dica. Na aba Bestiário do Códex estão os 30 personagens, criaturas e guardiões. Quem ainda não foi encontrado aparece como silhueta animada, com uma dica de onde procurar; os heróis secretos se revelam ao serem desbloqueados. As prévias usam o mesmo renderizador de sprites da partida e permitem ver repouso, movimento, ataque, interação e dano, inclusive com espelhamento.
A tela final mostra nível, abates, dano e resgates de cada arcanista, além do seu dano por fonte (feitiço, especial, cada arma, combos e convergências).
server/protocol.js).dist.| Arquivo | Responsabilidade |
|---|---|
server/balance.js | Todos os números de balanceamento |
server/game.js | Estado, progressão, drops e o updateGame que orquestra os módulos |
server/enemies.js · bosses.js · weapons.js · combat.js | Spawn e comportamentos, chefes, armas e dano |
server/powers.js · meta.js | Poderes, evoluções, trocas, melhorias permanentes e desbloqueios |
server/curses.js · encounters.js · objectives.js | Maldições, semente do desafio diário, encontros e altar |
server/spatial.js | Grid espacial usado nas colisões |
server/protocol.js · room-host.js | Snapshots compactos e as regras de uma sala (lobby, entrada, reconexão, tick) |
src/p2p/ | Transporte WebRTC (Trystero), anfitrião e convidado, lista de salas abertas |
src/net.js | Sessão co-op, interpolação, previsão e reconexão no cliente |
src/render.js · sprites.js · terrain.js · animation.js | Desenho, sprites pré-recortados, pisos e efeitos visuais |
src/hud.js · menu.js · audio.js · input.js · wallet.js | Interface, menu e loja, sons sintetizados, controles e moedas |
src/music.js · codex.js | Trilha generativa adaptativa (menu, horda, chefe, fúria, vitória) e Códex |
Arte: public/assets/sprites.webp (magos, inimigos antigos, projéteis e drops), public/assets/phases.webp (fases 1 a 3) e public/assets/phases2.webp (fases 4 a 6). Prompts e recortes em public/assets/phases-art.md e public/assets/phases2-art.md. Variações de cor, como a lâmina roxa, o morcego de brasa e o golem de magma, são geradas uma única vez no navegador. A preferência do sistema por movimento reduzido desativa balanços, partículas, rastros, tremor de tela e giros; avisos de perigo e o progresso da ressurreição continuam visíveis.
Ideias e sugestões para o jogo: Guilherme de Lucca Moraes e Luis Paula Alves.