Executando verificação de segurança...
12

Jogo 3D em C# com apenas 2KB

Recentemente publiquei algo falando que comecei com um computador de 2KB. Queria fazer jogo.

Não é a mesma coisa, a relação é mais complicada e não vou explicar aqui, mas fazer um jogo que faça algo útil com 2KB no executável é algo sem maiores dificuldades... quando você está programando em C. Ou Assembly. Até vai em C++ ou Rust, ou Zig, com as flags certas, mas fazer o mesmo com C# parece impossível.

C# que pegou a ideia inicial de Java (não vou contar toda a história aqui, muitos sabem, muitos sabem algo errado sobre ela), e criou uma tecnologia interessante, mas cheia de defeitos. Naquela época estourou a ideia que hardware não é problema, que você pode desperdiçar recursos, que o importante é ser mais fácil, ter tudo pronto. E de lá pra cá o mercado de Ti "só" tem tomado decisões erradas. Mesmo quando alguns acontecimentos vão mostrando o contrário e precisam voltar atrás. Tanto é mentira isso que algumas das linguagens que mais florescem agora são mais simples, enxutas que permitem mais eficiência geral, pelo menos um lado tem melhorado.

C# em si não é uma linguagem que fará tudo ficar pesado, mas o .NET que é a infra que costuma ser usada para C# ser útil, é pesadíssimo, segue a linha da JVM, é um desperdício e só faz sentido em alguns cenários (nem vou falar como web pode ser pior). Por isso na última década o .NET começou ser enxuto, dar opções para fazer mais simples. Não tem milagre que ele possa fazer, mas é impressionante que antes um Hello World precisava de dezenas de megabytes e agora consegue em kilobytes. E ainda vai melhorar.

Mas pode não ser suficiente usar algumas flags para enxugar tudo isso. Pode precisar ser mais enxuto ainda.

Não que seja sempre uma boa solução, ainda é usado mais como demonstração, mas o .NET ficou tão flexível que existem alternativas de implementação quando precisa de algo muito simples. Tem lá suas desvantagens, mas estão criando bibliotecas simplificadas que abrem mão de alguns recursos para entregar o mesmo que C entrega. mesmo com limitações, não são maiores do que C já tem, então a comparação fica até justa.

Isso já foi feito antes algumas vezes, mas agora o resultado se superou. Quem quiser conhhcer o experimento da pessoa clica aqui.

Tem uns truquezinhos, é verdade, mas atinge o objetivo.

Tela do jogo

Roda no Linux também.

Espero que outras tecnologias comecem pegar esse rumo. O que acha? O que sabe de outras?

Veja o repositório abaixo. Ajuda ver como os jogos eram construídos no passado, onde 2KB fazia coisas incríveis para o tamanho. Usava-se inteligência em vez de força bruta.
Colocar o executável dentro de um QRCode foi a cereja do bolo :D

Observou? Faz sentido para você?

Espero ter ajudado. Em geral estou à disposição na plataforma (sem abusos :D)


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).

Carregando publicação patrocinada...
2

Isto me lembrou do jogo Kkrieger o menor jogo 3D já feito.
Com menos de 100kb.
Se olharmos as roms de jogos ótimos do antigo NES, alguns possuem apenas 256kb (ex: Ninja Gaiden II ou III).

2

Acho válido como prova de conceito e curiosidade. Não acredito que o fluxo seja utilizado para aplicações no MundoReal™. O tamanho é mínimo mas o programa também é mínimo. Rodei no Wine e um core ficou em 100% durante todo o tempo (o que não é legal).

Escrevi um artigo sobre Red onde o programa compilado ficou com 624 bytes. Mas informei que era para aplicações específicas e pessoal especializado (que seria o caso do exemplo em C#). No outro extremo tem o Electron que, uma calculadora bem vagabunda consome dezenas de megabites.

Fico no meio termo. Linguagens compiladas que dexam o programa final com 50K-200K (CLI) como Nim, FreePascal, etc. ou VMs modestas (menos de 1M) mas suficientemente poderosas Red/Rebol, Icon/Unicon, PicoLisp (olhei ontem, não sei nada mas achei legal).

2

É só para mostrar que é possível. Convenhamos que o cara mais mão de vacanão precisa que seja 2KB. Dá para ver que com 200KB já consegue muita coisa, são 2 ordens de magnitude. Claro que vai ficando mais complexo, precisa voltar ter alçgumas parte do .NET para ajudar e começa aumentar mas com 2MB já dá para ter algo útil e com o .NET normal.

2

Ele também fez o jogo Maze com o mesmo compilador, mas para UEFI. Você compila diretamente o .efi a partir disso e roda.

É um pouco maior que 2KB, mas é um sistema operacional completo em menos de 10mb, escrito com C#.

Também tem o sharpfire, que é o efeito de fogo do DOOM, em 8 kb, compatível até mesmo com Windows NT 3.51, e também escrito em C#.

Eu não quero comparar C# com C++ ou C porque seu propósito é muito diferente, mas o Michal é um dos engenheiros que trabalha no runtime do .NET e tem um blog dedicado à low level. O mais interessante é que ele gosta de mostrar que quase qualquer coisa é possível em C#.

1
1

que massa! parabens mano, e tbm destaco como é otimo ler um post aqui no tabnews que nao seja "vale a pena sei la o que...." kkkkk mas agora falando tecnicamente estou pra testar essas minimal api's do .net pra ver se faz uma diferenca significativa tbm... enfim, daora mano

1