Metrópole Cyberpunk em ASCII: Uma Cidade 3D no Seu Navegador!

Explore uma paisagem urbana futurista e imersiva, construída inteiramente com caracteres ASCII, impulsionada por um leve motor Rust WebAssembly de 283KB e renderizada com WebGL.

Uma Revolução Textual 3D

O desenvolvedor solo Grow Now! Games lançou uma versão jogável online de sua cidade cyberpunk em ASCII. Esta metrópole text-based roda em um motor Rust WebAssembly de apenas 283KB, utilizando um renderizador WebGL para dar vida aos visuais.

Engenharia Por Trás da Ilusão

O coração do projeto é o módulo ascii-city-engine_bg-DqjAhqbp.wasm, um arquivo de 283KB que, ao iniciar, reserva 1.152KB de memória. A geração do mundo é feita em Rust, que então envia arrays de bytes compactados em base64 para o JavaScript, contendo dados como alturas de edifícios, tipos de telhas, superfícies, matizes, saturações e estilos de janelas.

  • Módulos Rust: city.rs, world.rs, population.rs, interiors.rs e rendering.rs são os pilares da criação deste universo.

Renderização Gráfica Inovadora

O renderizador solicita um contexto WebGL e compila um par de shaders de vértice e fragmento. Os caracteres são desenhados em um atlas canvas usando fillText, armazenados em cache por combinação de caractere e cor, e depois carregados na GPU para serem renderizados como quads texturizados.

  • Otimização Visual: Cada célula visível é carregada em um buffer e desenhada com uma única chamada drawArrays por quadro.
  • Compatibilidade: Existem alternativas como o caminho Canvas 2D drawImage para quando o WebGL não está disponível, ou um fillText por célula via parâmetro de URL.

Experiência Multiplataforma

A experiência visual se adapta ao dispositivo:

  • Desktops: Exibem 180 colunas por 80 linhas (14.400 células de caracteres) em fontes Consolas de 10px.
  • Dispositivos Móveis: Reduzem para 48 linhas e entre 96 e 168 colunas, com o motor Rust utilizando um perfil de 160×112.

A Filosofia da Grow Now! Games

A Grow Now! Games se orgulha de criar experiências sem depender de motores de jogos comerciais como Unity ou Unreal, e sem modelos 3D tradicionais, texturas ou shaders. Projetos anteriores incluem:

  • Um jogo de primeira pessoa “Backrooms” para Sega 32X, com um motor de raycasting escrito em C e assembly SH-2.
  • Uma homenagem a Doom multiplayer que implementa raycasting e projeção de sprites como uma pilha de visualizações SQL, atingindo 30 FPS.
  • Thunder Lizard, um roguelike em ASCII, cujas grades de caracteres foram redesenhadas por modelos de imagem em visuais de movimento completo a cerca de 10 FPS.
Baseado no artigo de Tom’s Hardware