QuakeJS Rootless: Prontos para as férias de Natal? :]

Olá a todos!

Lembram-se daqueles Natais em que o maior problema da vossa vida era decidir qual mapa jogar? Quando “trabalho” significava apenas maximizar o número de frags antes do jantar de família? Pois bem, este post é para vocês – e para aquela parte de mim que nunca cresceu completamente.
Hoje vamos falar de algo que me fez sorrir quando descobri: QuakeJS Rootless, um projeto que permite jogar Quake III Arena diretamente no browser, sem instalações, sem complicações, e melhor ainda – facilmente deployável com Docker para vocês montarem o vosso próprio servidor de nostalgia. Mesmo perfeito para esta altura que estamos a entrar.

A Magia das Férias de Natal nos Anos 90/2000

Quem cresceu nos finais dos anos 90 e início dos anos 2000 sabe bem o que eram as férias de Natal. Não existia Netflix, não existia YouTube a valer a pena, e as redes sociais ainda eram uma ideia distante na cabeça do doente do Zuckerberg.
O que existia? LAN parties improvisadas na casa daquele amigo que tinha “internet boa” (256k, era o sonho), cabos de rede espalhados por todo o lado como se fossem decorações de Natal alternativas, e Quake III Arena a correr em resoluções que hoje fariam os vossos olhos sangrar.
Mas a verdade é esta: nunca mais nos divertimos tanto a jogar. Não havia rankings globais, não havia streamers, não havia monetização. Era puro, simples, e absolutamente viciante. Era apenas vocês, os vossos amigos, e a satisfação primordial de acertar um railgun shot perfeito e o sacana do camper escondido algures que fragava como quem respirava.

Enter QuakeJS Rootless: Nostalgia Meets Modern Infrastructure

QuakeJS Rootless é um projeto fascinante que pega num clássico dos FPS e moderniza-o para correr completamente no browser. Sim, leram bem. Sem instalações locais, sem dependências, sem chateações. Só abrem o browser e começam a jogar.
E a parte tecnicamente interessante? Está tudo containerizado e pronto a correr com Docker ou Podman.

But why????

Há várias razões pelas quais este projeto me deixou genuinamente entusiasmado:

  • Preservação de Gaming History: Jogos como Quake III Arena são parte importante da história dos videojogos. Projetos como este garantem que estas experiências não se perdem no tempo. Quem me conhece em pessoa sabe o que eu gosto e ligo a retro computing, e a retro gaming, e Quake, para mim tem um lugar muito especial nesse panteão sagrado.
  • Acessibilidade: Não precisam de uma máquina potente. Não precisam de instalar nada. Qualquer pessoa com um browser moderno pode jogar. É perfeito para aqueles momentos em que querem mostrar aos mais novos (ou relembrar aos mais velhos) como eram os FPS verdadeiros. Convém ter um GPU claro, nem que seja em discreet mode.
  • Self-Hosting: Para os nerds como eu (e presumo que vocês, se estão a ler isto), é fantástico poder montar o vosso próprio servidor. Controlo total, privacidade, e a satisfação de saber que estão a correr o vosso próprio pedaço de história do gaming.
  • Modern Security Practices: A versão “rootless” significa que o container corre sem privilégios de root, o que é sempre uma excelente prática de segurança.

Como Montar o Vosso Próprio Servidor de Nostalgia

Vamos ao que interessa :] Como é que montam isto?

A Forma Mais Rápida (Docker Run)

Se querem começar imediatamente, é literalmente copy e paste isto:

docker run -d \
  --name quakejs \
  -e HTTP_PORT=8080 \
  -p 8080:8080 \
  -p 27960:27960 \
  docker.io/awakenedpower/quakejs-rootless:latest

Sim, é isto. Três comandos e têm Quake III Arena a correr no browser. Abram http://localhost:8080 e comecem a jogar.

A Forma Elegante (Docker Compose)

Para quem gosta de fazer as coisas com estilo (e facilitar futuras gestões), criem um ficheiro docker-compose.yml com o seguinte conteudo:

version: '3.8'
services:
  quakejs:
    container_name: quakejs
    image: awakenedpower/quakejs-rootless:latest
    environment:
      - HTTP_PORT=8080
    ports:
      - '8080:8080'
      - '27960:27960'
    restart: unless-stopped

E depois:

docker-compose up -d

Pronto. Têm um servidor de Quake III Arena a correr em produção, com restart automático e tudo.

A Forma Hardcore (Build Your Own)

Para os verdadeiros entusiastas doentios como eu que querem meter as mãos na massa:

# Clonar o repositório
git clone https://github.com/JackBrenn/quakejs-rootless.git
cd quakejs-rootless

# Build da imagem
docker build -t quakejs-rootless:latest .

# Run do container
docker run -d \
  --name quakejs \
  -e HTTP_PORT=8080 \
  -p 8080:8080 \
  -p 27960:27960 \
  quakejs-rootless:latest

Notas Técnicas para a nerdalhada

O projeto evoluiu bastante desde a versão original. O fork do @JackBrenn implementa várias melhorias importantes:

  • Base Moderna: Usa Debian 13 Slim em vez de Ubuntu 20.04, o que significa imagens mais leves e actualizadas.
  • Node.js Actualizado: Migrou de Node.js 14.x para 22.x LTS. Sim, finalmente alguém que mantém as dependências actualizadas!
  • Nginx em Vez de Apache: Mais leve, mais rápido, mais eficiente. Para servir conteúdo estático e WebSockets, o Nginx para isto é simplesmente superior.
  • Rootless Container: O container corre com um utilizador não-privilegiado (quakejs), o que é excelente do ponto de vista de segurança.
  • Self-Contained: Todos os assets do jogo estão incluídos. Não há dependências de servidores de conteúdo externos. É completamente auto-suficiente.

A Experiência de Jogar

Honestamente? É surpreendentemente boa. O jogo corre suavemente no browser, os controlos respondem bem, e aquela sensação de fazer um perfect rocket jump continua tão satisfatória como há 20 anos.
É claro que não substitui a experiência original de ter o jogo instalado localmente com toda a potência da placa gráfica dedicada. Mas para o que é – jogar casualmente no browser sem instalações – funciona surpreendentemente bem. E corre num browser safari no vosso ipad, em casa da sogra.
Há algo de especial em poder simplesmente mandar um link aos amigos e dizer “vem jogar” sem eles terem que instalar absolutamente nada.

O Espírito do Natal e das LAN Parties

Há qualquer coisa nas férias de Natal que sempre trouxe o melhor do gaming. Talvez seja o tempo livre. Talvez seja o facto de estarmos todos juntos. Talvez seja apenas a nostalgia a falar.
Mas lembro-me claramente daqueles dias em que o maior achievement era dominar completamente um mapa específico, ou finalmente conseguir aquele trick jump que andávamos a tentar há dias. Não havia battle passes, não havia loot boxes, não havia nada disso. Era só skill pura e a satisfação de ser melhor que os teus amigos.
Este projeto, de certa forma, traz um bocadinho dessa magia de volta. Permite-nos revisitar esses momentos, partilhá-los com uma nova geração, ou simplesmente relembrar porque é que nos apaixonámos por videojogos em primeiro lugar.

Montem o Vosso, Partilhem com os Amigos

Uma das coisas mais fixes deste projeto é que é ridiculamente fácil de partilhar. Montem o vosso servidor, exponham-no à internet (com as devidas precauções de segurança, obviamente – reverse proxy com HTTPS, firewall rules, etc.), e mandem o link aos vossos amigos.
Podem fazer uma mini LAN party virtual. Podem reviver aqueles torneios de antigamente. Podem simplesmente ter aquele espaço vosso onde, de vez em quando, vão desabafar com uns frags.
O repositório até inclui um exemplo de configuração de reverse proxy com Nginx para quem quiser fazer isto como deve ser.

Para Quem é Isto?

Gaming Nostalgics: Se têm saudades da era dourada dos FPS arena, isto é para vocês.
Self-Hosting Enthusiasts: Se gostam de correr as vossas próprias coisas e ter controlo total, isto é para vocês. Nerds!
Educadores: Se querem mostrar às gerações mais novas como eram os jogos “antigamente” (sim, já somos velhos), isto é para vocês.
Tech Hobbyists: Se simplesmente gostam de brincar com projectos fixes, isto é definitivamente para vocês.

Há algo de poeticamente apropriado em usar tecnologias modernas (containers, Node.js, WebSockets) para preservar e tornar acessível um jogo que definiu uma era. É a prova de que bom game design é intemporal, e que a nostalgia, quando bem servida, pode ser incrivelmente poderosa.
Este Natal, enquanto todos estão ocupados com os últimos AAA games cheios de microtransações, considerem tirar uma tarde para reviver o passado. Montem um servidor de QuakeJS, chamem uns amigos (remotamente ou não), e relembrem porque é que o gaming competitivo não precisa de gráficos fotorealistas para ser absolutamente viciante.
E se por acaso montarem um servidor público, mandem-me o link. Ainda me lembro de alguns trick shots que quero tentar replicar.

Até ao próximo post, e lembrem-se: na dúvida, rocket jump.

Abraço, Nuno

P.S.: Sim, eu próprio vou montar um servidor destes para a consoada. Não, não vou partilhar as credenciais publicamente porque tenho certeza que alguns de vocês são demasiado bons e vou levar um espancamento de noob. A minha auto-estima tem limites.

P.P.S.: Para quem quiser experimentar sem montar nada, existe um demo público em gibs.oldschoolfrag.com. Mas onde está a piada se não montarem o vosso próprio?

Para referencia: