Tek kişilik bir geliştirici olan Grow Now! Games, tamamen ASCII karakterlerden oluşan, yürünebilir siberpunk şehrinin oynanabilir tarayıcı sürümünü çevrimiçi yayınladı. Bu etkileyici metropol, sadece 283KB boyutundaki bir Rust WebAssembly motoru tarafından destekleniyor ve WebGL bir görüntü oluşturucuya veriler sağlıyor. Bu sürüm, geçtiğimiz haftalarda, bir milyondan fazla izlenmeye ve 9.000 yoruma ulaşan ilk videosunun ardından, "ASCII City Update: Interiors, Elevation & Skyscrapers" başlıklı ikinci YouTube videosuyla birlikte kullanıcılara sunuldu.
Yayınlanan sayfa, ascii-city-engine_bg-DqjAhqbp.wasm adlı 283KB'lık bir modülü indiriyor. Bu modül, başlatma sırasında 1.152KB'lık bir doğrusal bellek ayırıyor ve tarayıcı dışında örneklendiğinde 0.1.0 sürümünü bildiriyor. Modülün dışa aktarımları arasında initialise_native_game, step_native_game ve generate_native_local_map gibi fonksiyonlar bulunuyor. Kodun içinde bırakılan hata ayıklama yolları, bu çağrıların arkasındaki Rust kaynak modüllerinin city.rs, world.rs, population.rs, interiors.rs ve rendering.rs olduğunu gösteriyor. Dünya üretimi Rust'ta gerçekleşiyor ve bu veriler JavaScript'e, bina yükseklikleri, döşeme türleri, yüzeyler, renk tonları, doygunluklar, pencere stilleri, ışıklı bayraklar ve kat planı kimliklerini içeren Base64 ile paketlenmiş bayt dizileri olarak aktarılıyor.
Görüntü oluşturucu, bir WebGL bağlamı talep ediyor ve bir köşe (vertex) ile parça (fragment) gölgelendirici (shader) çiftini derliyor. Parça gölgelendirici aşaması, tek bir texture2D araması içeriyor. Karakterler, her biri için bir kez olmak üzere bir atlas kanvasına fillText ile çiziliyor. Bu, her karakter ve renk kombinasyonu için önbelleğe alınıyor, tek bir texImage2D çağrısıyla GPU'ya yükleniyor ve ardından her biri altı köşeli olmak üzere dokulu dörtgenler olarak çiziliyor.
Atlas hücreleri, her karakter genişliği kadar 11 piksel yüksekliğinde ve iki piksel ek boşluğa sahip. Görünür her hücre, her kare için tek bir yükleme (upload) ve tek bir drawArrays çağrısına dahil ediliyor. Bunun altında, WebGL'in kullanılamadığı durumlarda devreye giren bir Canvas 2D drawImage yolu ve doğrudan bir URL parametresi aracılığıyla erişilebilen hücre bazlı bir fillText yolu olmak üzere iki yedek mekanizma bulunuyor.
Masaüstü oturumlarında 180 sütun ve 80 satır, yani 14.400 karakter hücresi, 10 piksel Consolas yazı tipiyle ve her satır için dokuz piksel çözünürlükte işleniyor. Dokunmatik cihazlarda ise bu değer 48 satıra ve 96 ila 168 sütun aralığına düşüyor ve Rust motoru 160'a 112 boyutunda ayrı bir profil kullanıyor. Köşe tamponu (vertex buffer) başlangıçta 2.76MB yer kaplıyor ve bir kare bu alanı aştığında iki katına çıkıyor.
Grow Now! Games, ilk demoyu gösterirken "Unity yok, Unreal yok, 3D model, doku veya gölgelendirici yok" açıklamasını yapmıştı. Benzer şekilde, 1994'ün Sega 32X konsolu için geliştirilen ve saf C ile SH-2 assembly dilinde yazılmış bir ışın izleme (raycasting) motoru üzerinde çalışan bir birinci şahıs Backrooms oyunu bulunuyor. Bir SQL ile kodlanmış Doom çok oyunculu modu, ışın izleme ve sprite projeksiyonunu bir dizi SQL görünümü olarak uygulayarak 128x64 çözünürlükte yaklaşık 30 FPS'ye ulaşıyor. Thunder Lizard adlı bir ASCII roguelike oyunu ise karakter tabanlı ızgarasının, görüntü modelleri tarafından yaklaşık 10 FPS hızında tam hareketli görsellere dönüştürülmesini sağladı.