- O 90s.dev é uma nova API de game maker que funciona na web, oferecendo uma experiência de criação de apps com GUI no estilo dos anos 90
- A plataforma não é diretamente um engine de jogos ou um game maker, mas fornece APIs para criar jogos, engines de jogos e ferramentas de criação de jogos
- Tem como características ser baseado em HTML Canvas, tela de 320x180, suporte a WebGL2 e garantia de segurança e desempenho por meio de web workers
- Com um SDK TypeScript-first e suporte à importação de módulos wasm de várias linguagens, permite prototipagem rápida e escalável
- Os usuários podem criar seus próprios apps e compartilhá-los ou carregá-los via GitHub ou NPM, com o objetivo de promover colaboração na comunidade de desenvolvimento e escalabilidade
O significado do lançamento do 90s.dev
- O 90s.dev é uma plataforma de API de game maker de um novo tipo que funciona na web
- Oferece um ambiente de criação de apps com GUI no estilo dos anos 90 e se destaca por suas APIs para criar jogos, engines de jogos e ferramentas de game maker
- O objetivo é formar um ecossistema em que qualquer pessoa possa criar e compartilhar facilmente pixel art, sprites, mapas e outras ferramentas e assets para jogos em HTML Canvas
Principais recursos e visão
Introdução básica à plataforma
- O 90s.dev roda no navegador e tem uma tela em resolução 320x180 (16:9) que preenche a janela web
- Todos os apps são executados em um ambiente de web worker, garantindo melhor segurança e desempenho
- Com canvas offscreen em WebGL2, é possível rodar jogos a até 60fps
- É possível carregar e publicar livremente módulos de apps hospedados no GitHub e no NPM
- O SDK TypeScript amigável ao VSCode oferece suporte a prototipagem rápida
- Também possui compatibilidade com módulos de diversas linguagens compilados para WebAssembly (wasm)
Apps fornecidos por padrão
- Por padrão, oferece apps básicos para criação de assets de jogos, como pixel art, ferramenta de criação de sprites e editor de mapas
- Ferramentas de edição de áudio e música ainda não são fornecidas, mas qualquer pessoa pode desenvolvê-las e publicá-las/compartilhá-las diretamente
- Os apps e ferramentas criados podem ser compartilhados com qualquer usuário por iframe ou link
Inspirações e diferenciais
Ferramentas de desenvolvimento de jogos que serviram de referência
- pico8: voltado ao minimalismo, com suporte a uma única linguagem
- tic80: remove várias limitações do pico8
- love2d: exige uma IDE externa
- picotron: introduz uma arquitetura de sistema operacional
- O 90s.dev é um pico8 metalinguístico e se aproxima mais de um love2d com TypeScript ou de um tic80 focado em expansão vertical
Inovação na GUI e detalhes técnicos
Sistema de layout
- Para reduzir o incômodo do posicionamento manual e redimensionamento, foi implementado um sistema de layout automático simples, porém poderoso
- A view (API) desenha a tela diretamente e usa uma estrutura em árvore de views filhas
Sistema de Ref
- As propriedades da view (tamanho, filhos, cor de fundo etc.) são gerenciadas por meio de um watchable pointer (ref)
- Todos os atributos recebem um objeto de referência (ref), permitindo detectar e refletir automaticamente alterações nas propriedades
- Foi projetado de forma totalmente separada dos refs tradicionais de React/Vue
Composites (conceito de views compostas)
- No JSX, a plataforma inverte tags de string (minúsculas) e tags de valor (maiúsculas), reforçando a separação entre implementação e uso
- Views abstratas são registradas em uma tabela global e podem ser usadas livremente em outras partes do sistema
- Exemplo: a view colorpicker fornece uma implementação padrão, mas pode ser substituída pelo estilo desejado pelo desenvolvedor
- Isso oferece alta flexibilidade e extensibilidade no desenvolvimento de apps com GUI
Distribuição de apps e colaboração da comunidade
Mudança na forma de distribuir apps
- Antes, era usado um drive de compartilhamento
net/ baseado em banco de dados próprio
- Recentemente, passou a suportar hospedagem e importação direta de módulos a partir de NPM/GitHub via CDN
- Exemplo:
/os/fs/ghb/someuser/project@1.0.0/some/file.js
- Com o uso de service workers, foi concluído um mecanismo de carregamento a partir de várias fontes
Participação e colaboração
- Com um design inspirado em sistema operacional, incentiva o desenvolvimento de apps da comunidade além dos apps essenciais (apps básicos)
- Dá suporte à comunicação e colaboração por meio de issue tracker, fórum e wiki (todos em repositórios GitHub)
- Issues: solicitações de recursos e reporte de bugs
- Fórum: anúncios de projetos e discussões
- Wiki: coleção e curadoria de projetos
Compartilhamento de apps
- O compartilhamento de apps é possível por links no formato
/os/#app
- Busca promover, com foco na comunidade, a criação e disseminação livre de apps, bibliotecas e assets
Conclusão e direção
- O 90s.dev é uma plataforma de API que projeta e define o próprio ecossistema de game makers
- Busca um ambiente expansível de criação de jogos na web em que qualquer pessoa possa criar, publicar e usar apps com facilidade
- É uma ferramenta de desenvolvimento de jogos voltada para o futuro, baseada em colaboração comunitária e na filosofia de plataforma aberta
2 comentários
Fico curioso para saber como é o próprio motor do jogo.
Comentários no Hacker News
Compartilhando a experiência de ter acordado às 2 da manhã em um dia de fevereiro e simplesmente começado a programar, numa situação em que já estava cansado de esperar; seguiu escrevendo código e acabou criando uma ferramenta de criação de jogos baseada em API, uma engine de jogos e jogos em si, percebendo que sua verdadeira paixão está no design de APIs; também compartilha como acha incrível ver pessoas encontrando uma paixão desse jeito e se dedicando a ela
Agradece o elogio e lamenta não ter conseguido explicar bem a essência do projeto; na prática, a API é a parte mais interessante, mas isso não fica aparente por fora, o que é frustrante; acha que deveria ter esperado até ter mais exemplos mostrando a usabilidade inovadora da API e se arrepende de ter lançado cedo demais
Dizendo que é o autor deste projeto, agradece pelo feedback; sente claramente que o lançamento foi antecipado e afirma a intenção de melhorar os vários pontos levantados e voltar em alguns meses
Acha que não foi cedo demais, elogia o projeto como algo muito legal e extremamente superprojetado; considera o melhor uso possível da famosa metáfora do bike shed e fica impressionado por terem implementado até um sistema reativo próprio
Considera que o timing foi perfeito para o Show HN; ao procurar o tour Hello World, conseguiu entender intuitivamente que tipo de projeto era; se a pessoa já tem experiência com PICO-8 e React, fica ainda mais interessante; também considera sábia a escolha da proporção 16:9, opinando que a proporção quadrada do PICO-8 é estranha
Agradece por ter lançado cedo e recomenda fortemente a estratégia de lançar com frequência, mencionando que 10.000 repetições são o caminho para o sucesso e enfatizando que uma tentativa só é apenas o começo
Mensagem de incentivo dizendo que não foi um lançamento cedo demais e que o autor está indo muito bem
Embora não tenha aprofundado muito, confessa que está sendo secretamente ainda mais atraído por essa sensibilidade retrô; talvez o conforto sentido ao lembrar tempos antigos, mais simples e tranquilos, reapareça quando vê projetos assim
Pergunta se o app de paint funciona; tentou no Firefox e no Chrome, mas mesmo após escolher uma cor e clicar, nada é desenhado, e também não há nenhum erro no console; em outro ponto, elogia a forma como a estética dos anos 90 foi recriada com sucesso: no começo pareceu algo mais terminal dos anos 70 ou 80, mas olhando melhor percebeu que os anos 90 realmente eram exatamente assim, e demonstra expectativa pelo desenvolvimento futuro
Menciona que lamenta a confusão; só desenvolveu até o seletor de cores e o resto ainda não foi implementado, mas acha que conseguirá terminar em menos de uma hora; ao mesmo tempo, explica que a intenção de desenvolvimento era justamente recriar, com estética dos anos 90, a diversão e o poder de desenvolver apps GUI; quis manter só o encantamento, sem os incômodos, e por isso escolheu o nome 90s.dev
Menciona a possibilidade de ainda não estar implementado; se clicar no botão “hash” no canto superior esquerdo da janela e selecionar “View Source”, dá para ver que só a UI está mockada, e na área de rolagem só aparece código com um padrão decorativo
Também não funciona para mim
Não entende completamente o projeto em si, mas ficou muito encantado com a estética; acha curioso como uma certa atmosfera emocional e elementos visuais, por si só, podem impactar fortemente os sentimentos das pessoas e despertar mais interesse
Pensa em como explicaria a ideia: queria fazer um pico8 mais conveniente de usar, então criou o design e o protótipo em 320x180; ao mesmo tempo, queria todas as conveniências do VS Code e suporte a TypeScript, então acabou planejando uma plataforma na qual se pode criar e distribuir o que normalmente estaria contido nas abas do pico8; olhando agora, sente que isso também foi lançado cedo demais
Gosta da estética em si, mas acha que a proporção 16:9 não combina com PCs dos anos 90; prefere a sensibilidade única dos monitores CRT, que eram mais próximos do formato quadrado
Agradece e desabafa que explicar é algo muito difícil; confessa que este texto também foi uma tentativa de explicar da forma mais curta possível o que criou; mesmo numa versão curta, sente que o conteúdo continua inevitavelmente vago, então diz honestamente que vai desistir
Acha o projeto muito legal, mas sente que começar é um pouco difícil; sugere que seria bom ter um walkthrough simples sobre como criar um minijogo
Agradece e explica que, no momento, a forma de criar jogos é igual ao tutorial de criação de apps, mas pode ser feita criando uma custom view e sobrescrevendo o método
draw; para desempenho, é ainda melhor criar e usar umOffscreenCanvas, e ainda não há uma API que encapsule WebGL2 de forma mais conveniente; promete que no futuro certamente fará um tutorial em que até iniciantes possam criar um jogo completo por conta própria; explica que, por enquanto, como o foco atual está mais em apps, está priorizando o desenvolvimento das ferramentas de criação de jogos (sprites, mapas etc.); compartilha o link do tutorial Hello WorldConsidera o projeto extremamente interessante e diz que se sentiu imediatamente de volta à infância; também gosta de pico8, mas pertence mais a uma geração que cresceu com desktop e GUI, então pico8 parece uma geração cedo demais; este projeto desperta uma nostalgia parecida com comprar CDs de novo
Apresenta também o Picotron, feito pelo desenvolvedor do Pico8; explica que é um sistema operacional desktop semelhante ao Pico8, mas com um pouco menos de restrições; não tem experiência prática, só viu GIFs, mas sente que o paradigma do projeto é parecido, no sentido de ser orientado a uma “plataforma” dentro da qual se pode construir um pico8; acha que, por caminhos diferentes, ambos perseguem o mesmo ideal
Travou no primeiro passo do guia Getting Started: baixou
helloworld.ziplocalmente, abriufiler.app.jsna web e clicou no botão mount comhelloworld/appcomo drive name, mas nada aconteceu; ficou confuso sobre como enviar o arquivo zip para a instância do 90s.devAgradece pelo feedback e diz que provavelmente a pessoa está usando Firefox; essa função depende de
showDirectoryPicker, que o Firefox não suporta, então recomenda usar o Chrome; além disso, no drive name deve ser inserido apenas o nome, sem caminho algum (por exemplo, “foo”), e promete corrigir o guia em breve; depois disso,foo/helloworld.app.jsficará ligado ao caminho local realDiz que gostou muito da estética dos anos 90, especialmente da fonte; percebeu que se sente muito mais atraído por design dos anos 90 do que por pixel art no estilo dos anos 80
Faz uma crítica à landing page: chama o projeto de “game maker” e ao mesmo tempo diz que “não é um game maker”, o que soa contraditório e confuso; aponta falta de consistência na terminologia
Lembra que naming é um problema notoriamente difícil e o considera uma das tarefas mais difíceis da ciência da computação, junto com invalidação de cache