Introdução
O nosso jogo, IMPUNES, foi pausado desde 2020 para focarmos no Warpunk e outros projetos.
Eu trabalhei em outras coisas, muitos imprevistos, até que em 2022 eu decidi focar totalmente em desenvolvimento de jogos.
Quase ninguém realmente se interessou no jogo Warpunk, mas foi uma importante experiência, e usei de portfólio nesta entrevista de emprego. Então decidimos voltar para o IMPUNES, agora com mais experiência e remasterizado para câmera em terceira-pessoa.
Eu (Junior_Djjr) voltando ao projeto trabalhando praticamente todos os dias desde o primeiro dia de 2022 (se contar os dias que não trabalhei, diminui umas 3 semanas), alguns dias foram 2 horas de trabalho, outros 12 horas, e aqui está o resultado…
Nós já temos:
- Todo o gameplay básico de controle de personagem.
- Uso de armas, com suporte à granada, melee e dual wielding (como pistola dupla).
- Dirigibilidade de veículos com suporte à uma quantidade dinâmica de número de rodas, puxar reboques, danos dinâmicos, LOD, peças de variação extra etc. 1
- Entrar e sair de carros (ainda sem passageiros).
- Inteligência artificial prototipada, inclusive combate básico.
- Suporte à execução de scripts Lua através de console ou arquivo. Inclui centenas de funções para a criação de missões simples para modding. 2
- Sistema de dia e noite com relógio e calendário e alto controle por scripting.
- Interface própria, responsiva e animada que se ajusta com as informações.
- Controle de câmera inteligente e suave criado totalmente com Cinemachine através de blend de câmeras virtuais (como jogos modernos).
- Sistema de minimapa completo com ícones e máscara suave que funciona através de um modelo 3D com perspectiva. Inspirado no funcionamento do GTA V. 4
- Dezenas de diferentes materiais para superfícies (para diferentes sons, efeitos e decals para areia etc). Funcionando mas ainda não todos configurados. Inclui plugin de automação e modo de depuração visual.
- Portões com física (ainda falta os elétricos e laterais.
- Sistema de climas dinâmico que inclui neblina e chuva. 2
- Sistema de tocar qualquer animação através de scripting enviando o nome da animação, com opção de limitar em quais partes do corpo, entre outras opções (inspirado no GTA).
- Sistema de dia e noite usa uma espécie de “timecycle” para variação entre climas, como no GTA, e as janelas e lojas acendem de maneira gradual e aleatória.
- Pássaros gerados proceduralmente que voam em bando e pousam nos locais. 2
- Shader para poças de chuva e sujeira dinâmica, controladas por vertex color. 3
- Você cria o seu próprio personagem do zero: Homem, mulher, gordo, magro, novo, velho.
1 Sistema de veículos já existia antes de 2020, foi uma das únicas coisas que eu preservei para 2022.
2 Sistema de climas, pássaros e console Lua eu fiz anteriormente para o Warpunk mas eram completamente iniciais, eu adaptei e expandi para o IMPUNES.
3 O shader de poças de chuva e sujeira eu fiz entre 2020 e 2022 para aprendizado.
4 O minimapa eu havia feito para o jogo Beetles Underground, mas eu tive que recriá-lo pois este é 3D.
Isto, em menos de 4 meses de trabalho.
Note que todos os itens não estão totalmente prontos, mas estão funcionais. Ainda há muito trabalho pela frente, em polir, expandir etc.
Controle de personagem
Para o controle de personagem nós compramos o Opsive Character Controller para usar de base.
“Mas vocês deviam criar do zero”, como eu sempre digo, não faz sentido fabricar o lápis, o correto é você comprar o lápis para focar no que realmente importa: no desenho. O errado é comprar o desenho. Um jogo GTA-like é muito complexo e grande, não faz sentido gastar meses programando do zero um controlador de personagem em vez de comprar um que outra pessoa já gastou anos trabalhando. Desde o início do projeto já gastamos alguns milhares de reais (no momento, somente do nosso próprio bolso).
Eu trabalhei no polimento, também deixar a movimentação um pouco mais suave, criar a pessoa dinamicamente através de script, adaptada ao criador de personagem etc.
Algo importante a ser considerado é o criador de personagem, que possibilita criar pessoas de diferentes tamanhos, e incrivelmente funcionou muito bem até mesmo em personagens crianças (mas o jogo não terá menores de idade).
Criador de personagem
Estamos usando um sistema gratuito da Unity: UMA.
Estou feliz com os resultados, o desempenho parece bom e relativamente fácil de expandir para a adição de novas roupas, penteados etc.
A nossa ideia com o IMPUNES é algo dinâmico, não linear, algo mais voltado à jogos roleplay com diferentes personagens e missões criadas pela comunidade (e nossas também, por que não?).
Mas o criador de personagem não será usado somente para o jogador, também usaremos para pedestres aleatórios criados proceduralmente! Há um sistema de criar pessoas de modo assíncrono, assim não causa engasgos durante o gameplay e você pode ter pedestres que não repetem, ou quase não repetem.
Imagine um jogo com suporte à missões da comunidade onde você consegue criar cada personagem da missão num editor dentro do jogo! Assim você pode criar ou jogar histórias com personagens próprios etc.
Cada personagem é salvo em uma “receita”, que é simplesmente um pequeno arquivo .txt facilmente compartilhável!
Aproveitando, se você tem experiência com modelagem de pessoas e adaptação para UMA (ou pretende aprender a adaptar), nós estamos contratando.
Carros
Como eu disse anteriormente, uma das únicas coisas que preservamos do jogo antes de 2020, foi o sistema de carros, que é grátis, mas gostamos do quão modular ele é para diferentes tipos de veículos e diferentes gameplays (queremos algo semi-realista, mais arcade).
Eu criei um projeto separado usado para montar veículos pro IMPUNES, isto é útil para a fase de desenvolvimento, mas acredito que no final possa ser migrado para o jogo, assim você vai poder compilar mods de carros de maneira simples!
É sério, basta arrastar um arquivo .fbx de um carro com as peças corretamente nomeadas, que o carro é montado e pronto para dirigir, assim facilitando muito o modding.
Nós usamos URP da Unity, que é um pipeline focado em desempenho em vez de fidelidade gráfica, e finalmente eles adicionaram opção shader “clear coat”!
Isto simula a física de como funciona uma pintura de carro “clear coat”, e fica realmente bonito.
Nós havíamos criado quase 10 carros, mas eles eram lowpoly demais para a câmera em terceira pessoa, portanto o Meck por enquanto só recriou o superesportivo Accipitridae Supernova.
Já há sistema de variações aleatórias de rodas e outras peças, e também disco de freio ficando quente e vermelho ao frear. Eu pretendo fazer algo inspirado no que eu já fiz pro VehFuncs.
Interface / hud / minimapa
A interface do jogo é muito importante para a identidade dele. Eu procurei algo que diferenciasse de qualquer outro jogo.
Ainda está em desenvolvimento, mas você já pode ter uma noção de como está ficando.
Eu gostei muito do minimapa, é basicamente o minimapa do GTA V com laterais suaves, mas redondo. Eu nunca vi algo assim em outro jogo, e inclusive eu acho que faz mais sentido do que um campo de visão quadrado.
O desenho do mapa é um modelo 3D, como funciona em jogos modernos (mas no momento eu estou usando um plano com textura como placeholder).
Eu gosto de interface minimalista, não só pelo estilo, mas porque faz o jogador não se perder na quantidade de informação.
Para compensar o “minimalismo excessivo”, a interface toda tem animações que se ajustam com as informações. Ou seja, quando você entra na água, faz uma animação para a barra azul (de oxigênio) aparecer, e assim arrastará o ícone de arma pra cima. Quando se usa 2 pistolas ao mesmo tempo, a outra aparecerá do lado.
O ícone de arma é também um placeholder, provavelmente usaremos algo estilizado, com mais “alma”.
Perceba que em cima do minimapa há uma lista de objetivos, também animados, e funciona através de scripts programados em Lua.
Scripts Lua
Inspirado no modding para GTA (principalmente na CLEO), eu fiz questão de adicionar suporte à scripts Lua ao IMPUNES, uma linguagem de programação fácil para leigos, interpretada em tempo real a partir de simples textos. Excelente para ser usada como uma linguagem adicional para jogos!
Durante o jogo, ao pressionar um botão, abrirá um console para você digitar códigos em Lua e executá-los durante o jogo. Ótimo para testes.
Mas o mais legal, é carregar arquivos .lua! Eu fiz um simples carregador para a pasta “Documentos”.
Mesmo que você não saiba programação, eu tenho certeza que você entendeu quase tudo do script acima. Este é o meu objetivo! Eu quero que mesmo usuários leigos consigam criar scripts pro jogo. (mas esse “coroutine.yield(0.0)” está péssimo, ainda não consegui mudar o nome).
No futuro, caso o jogo faça muito sucesso etc, nós pretendemos fazer um criador de missões integrado dentro do jogo ou algo assim (como o DYOM do GTA San Andreas). Mas isto é muito demorado, por enquanto scripts Lua são excelentes, também para criar outros mods, como CLEO.
A imagem acima utiliza o auto-completar através de snippets do Visual Studio Code gerado pela Unity, é aceitável por enquanto, mas na versão final do jogo pretendemos criar uma extensão própria (como o gta3script do LINK/2012).
Eu estou muito feliz com esse resultado, e o funcionamento é muito avançado, suportando até mesmo a chamada de eventos (por exemplo, rodar uma parte do script caso receba dano etc).
Inteligência artificial
Eu ainda não dei foco na inteligência artificial, pois é algo difícil de programar, portanto eu decidi fazer isso no futuro, quando eu tiver mais experiência.
Mas eu já fiz uns testes só para eu ter noção.
Estou usando “behavior trees” para a base da inteligência artificial, algo bastante usado por jogos modernos.
Por enquanto eu só fiz protótipos de NPCs andando na rua e reagindo à tiros.
O sistema de tráfego e pedestres deverá ser feito no futuro pelo Chrystian Farias, no momento não é essencial.
Superfícies físicas
Algo chato e cansativo é definir qual material é cada superfície, assim separando o que é concreto, de grama, madeira etc. Ainda mais para um jogo de mundo aberto que se passa numa cidade e você pode atirar em todos os lados etc.
Eu criei um plugin para Sketchup que separa automaticamente cada material de superfície com base no nome da textura (sim, o projeto é tão organizado que conseguimos usar o nome da textura para definir o material físico), e faz uma ponte para a Unity, que ambos dão opção para visualizar cada material numa cor (para depuração).
Cada material tem suas propriedades, não só de sons e efeitos, mas também para definir se um tiro atravessa ou não, separar concreto limpo de concreto sujo etc.
Não só isso, mas eu passei uns bons dias polindo e expandindo o 2nibble Tools, um plugin grátis para auxiliar desenvolvedores de jogos a usarem Sketchup para modelar cenários.
Postes e pássaros
Algo muito importante para a imersão de ambiente brasileiro, são os postes com fios, portanto, nós estamos usando fios com física!
E claro, pássaros voando por aí em bando e pousando nos postes, prédios etc. Por que não?
São as araras do Warpunk, em breve criaremos pombas etc.
Não se preocupe, fios com física não é overkill para o desempenho, há sistema de LOD e a mesh é extremamente lowpoly. É só um leve detalhe para o ambiente ficar mais vivo. Os fios “embolados” serão estáticos.
Sobre os pássaros, compramos um sistema pronto e trabalhei em cima para que fique dinamicamente compatível com um jogo open world.
Shaders
Brasil é bem sujo. A nossa cidade, principalmente nessa área, não será tão suja, mas ainda assim é…
Depois de anos avisando para vocês “ignorem a falta de sujeira”, finalmente eu criei um sistema de sujeira que funciona através de vertex color, que pode ser pintado com um brush dentro da Unity.
E o mesmo brush é também usado para pintar e trocar as variações de texturas das janelas e vitrines!
Eu estou muito orgulhoso de ter tido e praticado essa ideia. Em poucos minutos você tem prédios com janelas acesas variando de cor e textura, muito bonito e prático.
Outras sujeiras e imperfeições serão adicionadas através de decal.
E como eu citei anteriormente, eu também fiz shader de poça de chuva, é claro, controlada pelo nível de chuva do jogo. Para definir onde não deve gerar poças (como embaixo de pontes), também, um brush de vertex color.
Conclusão
E é isso, foi o que eu consegui fazer em pouco mais de 3 meses. O resto da equipe ainda não voltou ao foco. Lembrando que o mapa foi somente remasterizado para a nova câmera em terceira pessoa, e sem mais o foco no mobile, agora o jogo será focado em PC gamer mediano.
É muito cedo para afirmações, mas no momento o jogo está rodando a 200 FPS na minha GTX 1050 2 GB, nos gráficos ultra. Claro, ainda vai cair quando houver props, pedestres e tráfego, mas eu estou feliz, e lembre-se que ainda está em desenvolvimento, nem foi otimizado, o mapa nem tem LOD ainda!
Nota: Nós já compramos nuvens volumétricas e sempre usamos sombras PCSS em nossos jogos, mas ainda não adicionamos ao jogo.
Sobre “holofotes” ao projeto, antes desencorajamos, mas agora já está começando a valer a pena ser divulgado…
Importante:
O projeto foi totalmente renovado, portanto queremos desvincular o nome antigo do projeto (“2NTD”).
Agora o progresso do jogo estará somente nas redes sociais da equipe 2nibble.