Infelizmente teremos que pausar novamente o desenvolvimento do jogo IMPUNES, pois, na verdade, durante todos esses 5 meses de desenvolvimento, somente eu (Junior_Djjr) trabalhei nele, e é óbvio que eu não consigo fazer tudo sozinho. Na parte da programação, eu acredito que sim, com mais 1 ou 2 anos, mas criar um jogo estilo GTA requer muito trabalho de modelagem, animações, sons e tudo mais. Eu sozinho levaria muitos anos para finalizar isso (eu também fiz praticamente todo o cenário), e já estou velho tendo de trabalhar com outras formas de ganhar dinheiro.
Há 2 meses atrás eu postei a última atualização do progresso do jogo, recentemente eu voltei por alguns dias, comprando um novo melhor sistema de carros, mais similar ao GTA V (assim agora há nada no jogo antes de 2022, somente o cenário, que foi remasterizado com o passar do tempo). Mas logo decidimos pausar, ainda não há nada novo para mostrar pra vocês.
Naquele dia eu abri doações e falei que eu demoraria um pouco para voltar no jogo porque eu tinha trabalhos pagos para fazer, e as doações renderam 40 reais, eu agradeço à todos que apoiaram, mas trabalhar neste jogo em vez de freelances e outros jogos menores, ainda não é vantajoso, o jogo é grande e precisamos de uma equipe habilidosa para ajudar. Uns podem dizer para criarmos um crowdfunding, mas eu acho que não renderia muito, somente iria nos obrigar a terminar o jogo — no momento não fizemos nada disso, portanto (ainda) temos a liberdade de parar quando precisar, mas me desculpe por quem doou esperando algo a mais do IMPUNES, não que o jogo tenha sido cancelado, mas pode demorar para voltar.
De qualquer forma, eu peguei os 40 reais que vocês doaram e juntei mais 20 para comprar um pack de texturas PBR, para ajudar não só no IMPUNES, mas todos nossos outros futuros jogos. Todas as próximas doações serão para a 2nibble em geral (mas que também ajuda indiretamente no IMPUNES, é claro).
Recentemente eu também gastei uma boa grana comprando uma RTX 3060, e quem me conhece sabe, eu não jogo muitos jogos, eu comprei principalmente para trabalhar com Unity. Eu realmente estou levando isto à sério.
E o Warpunk?
Eu poderia voltar a trabalhar no Warpunk, que é um jogo relativamente fácil de concluir.
O grande problema é que, como eu já esperava mesmo antes de iniciar o projeto, poucas pessoas se interessam nesse jogo — não só o público, mas também as pessoas que poderiam me ajudar. Parece que só eu estou animado.
Na verdade, a ideia inicial do Warpunk era um jogo grátis de código aberto, mas eu gostei tanto do resultado que passei a usar assets pagos para melhorar a qualidade (por exemplo, pathfinding altamente otimizado). Então a ideia de um jogo de código aberto foi por água abaixo.
Pelo menos foi um jogo que serviu muito para aprendizado e portfólio, inclusive eu o usei nesta entrevista de emprego. Eu não sei se realmente voltarei a trabalhar nele, precisa de muitos incentivos, é possível até que eu venda o projeto ou algo assim. Jogos RTS não são muito a nossa cara.
Nosso atual projeto
Atualmente estamos trabalhando num jogo puzzle em primeira pessoa, com uma mecânica inédita.
Foi uma ideia que eu tive em 2019, na época fizemos um protótipo da mecânica e tudo pareceu promissor, mas desde lá deixamos a ideia armazenada para o futuro.
Infelizmente nós não podemos divulgar a ideia de mecânica desse jogo, não é algo “fenomenal”, mas é original e não existe nenhum outro jogo igual.
Todas as (pouquíssimas) pessoas que eu falei a ideia, ficaram animadas e afirmaram que devíamos finalizar o quanto antes.
Chrystian Farias, que é um programador 14X melhor que eu, está trabalhando no funcionamento da mecânica base, e eu vou cuidar do resto. A parte difícil já foi feita, agora é só continuar.
O estilo será inspirado no jogo Portal 1, inclusive pretendemos incluir uma personagem “vilã” para te guiar, com dublagem, mas o jogo tem nada a ver com portais.
Este novo projeto requer muita pouca modelagem, então ainda é possível que algumas pessoas da equipe trabalhem na parte da modelagem do IMPUNES durante isso, veremos. Criar este jogo será principalmente programação, portanto eu consigo terminar mesmo sozinho, mas terei umas ajudas do resto da equipe também.
Isto é tudo o que eu posso dizer, e infelizmente eu não posso continuar fazendo “devlogs” aqui no site para mostrar o progresso do jogo, é necessário esperar até que este jogo fique (quase) pronto e finalmente possamos divulgá-lo, algo que pode demorar mais de 1 ano… Se tudo ir bem, e valer a pena, é possível que seja divulgado numa futura BGS, ainda não sabemos como as coisas irão rolar.
Para quem não viu, eu anunciei que eu voltei a trabalhar no nosso jogo IMPUNES diariamente desde o início do ano (pulei só um mês), ou seja, finalmente tratando esse projeto de maneira séria.
1 mês e meio depois, aqui estão as novas coisas que eu (Junior_Djjr) fiz no jogo:
O vídeo resume quase toda essa postagem, assista com atenção!
E esse vídeo foi criado por um script externo programado em Lua, como se fosse uma missão custom, legal né?
Iremos pausar o jogo por algumas semanas ou meses, pois eu (Junior_Djjr) tenho alguns outros trabalhos acumulados pra fazer.
O que foi feito:
Mapa completamente otimizado com LODs gerados pelo Simplygon.
Sistema de fogo com propagação simples, programado do zero.
Adição de postes com fios com física que reage dinamicamente ao vento.
A quantidade de nuvens influencia no gráfico do jogo.
Transição de nuvens sincronizado com climas, como chuva, garoa etc.
A chuva molha o chão gradualmente, criando poças que refletem o mundo.
Gotas de chuva pela tela, que reagem com a física.
Água da chuva escorrendo pelos telhados.
Nova animação de andar feminino (ainda será ajustado, estamos sem animadores).
Poças volumétricas que fazem transição suave com as poças falsas do shader de superfície.
Diferentes materiais recebem diferentes efeitos de molhado, por exemplo, a grama absorve água, portanto o reflexo tem mais rugosidade e gera menos poças.
A água da chuva primeira se acumula entre os vãos da superfície (por exemplo, entre os blocos da calçada).
Janelas e vitrines com novas texturas de variação aleatória.
Recriado a praça.
Novas fontes de letras.
Som ambiente dinâmico.
Ícones das armas são gerados dinamicamente através do modelo da arma e shader estilizado e editor.
LOD (Level Of Detail)
Dentro desse pouco mais de 1 mês, 2 semanas foram somente para criar LOD do mapa do jogo.
Para isso, eu usei Simplygon, também usado por jogos como The Witcher 3, Uncharted, Borderlands 3, Gears 5, Control, Far Cry 5, RE7, Mafia 3, MGSV etc…
O problema é que nenhuma solução de LOD é perfeita, esta também requer trabalhos manuais. Portanto cada modelo, antes de passar pelo gerador de LOD, eu precisei fazer um “pré-LOD” para a geração ser melhor.
Demorou, mas valeu muito a pena, afinal, quanto melhor é o LOD, mais próximo da câmera pode usar, e portanto, mais otimização de desempenho. Isso também entra na questão de quantos níveis de LOD usaremos. Eu pensei em 2 níveis, mas quanto mais níveis, mais trabalho terá para deixar cada um deles caprichado (e será necessário fazer shadermap para colocar reflexos nas janelas por exemplo), portanto, no momento eu estou usando somente 1 nível, mas com atenção maior naquele único nível. Quando o mapa ficar grande (com zona rural, ou seja, vai demorar) eu pretendo mudar para 2 níveis.
Só não há LOD na torre de todos os prédios (exceto um), pois é melhor fazer manualmente, mas é bem demorado e chato, portanto fica pra depois.
O jogo ainda está vazio demais para comparações de FPS (o aumento do FPS foi baixo pois o jogo ainda não tem carga o suficiente no CPU, e mapa em si é muito leve pra GPU), mas em draw calls, o LOD fez o jogo cair de 6 mil para somente 2 mil draw calls (em referência, uma cena do GTA V tem 3~5 mil draw calls), portanto estamos no caminho certo. Economizou 150 mil triângulos e 200 MB.
Sistema de fogo com propagação
Há muitos sistemas de fogo prontos para comprar ou baixar grátis por aí, mas todos são “avançados” demais para o nosso jogo, onde o fogo é só uma consequência, não uma mecânica central.
Pensando nisso, e também porque eu estava muito curioso pelo desafio, eu programei o meu próprio sistema de propagação de fogo do zero, somente com o básico necessário.
Eu fiz também o efeito visual do fogo, que é também influenciado pelo vento (eu sei o quão importante é o vento para a imersão do jogo, portanto eu quero que tudo tenha influência). O efeito ficou bonito na minha opinião, o que não é difícil, só basta encontrar uma boa textura de animação que o resto é detalhe (por exemplo, perceba como eu simulei o brilho do fogo influenciando na cor da fumaça, e o tamanho do fogo muda a velocidade da animação, um detalhe importante pro realismo).
E é óbvio, o material da superfície influencia no nível de combustível e propagação: grama gera médio combustível mas muita propagação; madeira gera muito combustível mas pouca propagação etc. Assim como a chuva apaga o fogo.
Após um ponto ser queimado, será armazenado um cachê onde evitará que aquele ponto seja queimado de novo (uma simples simulação de que acabou o “combustível para queimar”), e assim, naturalmente gerou um efeito de espalhamento a partir de um centro.
Eu programei o sistema de propagação da maneira mais simples possível, por otimização, e a quantidade de pontos de fogo influencia na qualidade do fogo em si. Isto é, diminuirá a quantidade de pequenas partículas e fumaça, afim de evitar o FPS cair caso haja realmente muitos pontos de fogo no seu jogo.
Mas ainda falta otimização para diminuir os pontos de luz e som, algo bem chato de fazer, farei depois…
Gráficos
Falando novamente sobre as nuvens volumétricas.
Há um valor médio da cobertura das nuvens no céu, portanto eu usei esse valor para alterar o gráfico do jogo de maneira dinâmica.
Isto é, há uma fonte de iluminação ambiente vinda principalmente de cima, que simula a luz que o céu emite (afinal, não é só o Sol que emite luz, o próprio céu emite uma luz azul também, por isso as sombras são azuis), este tom azul, no entanto, é coberto pela quantidade de nuvens no céu do jogo, assim diminuindo a iluminação de cima pra baixo, e a cor do céu (deixando os tons menos azuis por exemplo).
Esta é uma solução muito melhor do que usar valores pré-definidos (como normalmente jogos fazem), pois as nuvens correlacionarão dinamicamente com o gráfico do jogo. Lembrando que também há sombra de nuvem.
Outra coisa importante para uma boa simulação de gráficos nublados, é deixar as sombras mais suaves (com mais blur), mas o sistema de sombras que a gente comprou (e usamos no jogo NPD) ainda não está disponível pro URP então temos que aguardar.
Perceba também que a parte de cima das superfícies ficam mais escuras, simulando superfícies molhadas. O asfalto ficou quase preto, semelhante ao mundo real (peguei todas as referências daqui).
Durante esse tempo eu também fiz mais ajustes visuais nos gráficos do jogo, como as cores da iluminação e mais shadermaps para materiais. O asfalto ficou bem mais realista.
Climas
Eu já havia programado o sistema de climas para o Warpunk, mas assim como o ciclo de dia e noite, eu decidi refazer do zero, sincronizado com o sistema de nuvens que a gente usa.
Isto é, climas e nuvens estão completamente correlacionados, cada nuvem tem valores que fazem uma transição suave, e alguns dos valores, são usados para o clima do jogo.
Por exemplo, haverá diferentes formatos de nuvens para garoa, chuva média, chuva forte… E algo um tanto interessante…
Através de compute shaders do DirectX 11, é possível detectar a quantidade de nuvens que estão literalmente em cima de você, isto quer dizer que eu posso usar isto para definir a chuva! Isso mesmo, só haverá chuva caso de fato exista uma nuvem de chuva em cima de você!
O problema: Menos controle sobre o momento de chover ou não chover. Claro, você pode desativar para forçar a chuva caso alguma missão queira que seja feita totalmente na chuva, mas pense no free roam, a qualidade gráfica das nuvens (principalmente, se você desativar as nuvens volumétricas durante o gameplay) possibilitará o jogador a controlar a existência ou não de chuva no jogo, simplesmente trocando as nuvens no menu de qualidade gráfica. Uma solução é fazer um tempo de “penalidade”, por exemplo 1 minuto para o nível da chuva poder mudar, mas também possibilitaria usar a penalidade para benefício.
Portanto eu não sei se eu realmente vou incluir este detalhe, é algo aparentemente novo, que eu consegui fazer, um detalhe que não existe nem em jogos AAA (pelo que eu saiba), provavelmente será uma opção no menu do jogo e só se ativará em free roam, fora de missão, e fora de um possível futuro multiplayer, e também precisará ser desativado caso jogue em DX10. Deem opiniões e ideias nos comentários.
Poças de chuva
Eu criei o shader de poças de chuva, com pingos (ripples), já faz um tempinho, mas agora fiz ajustes finais e sincronizei as poças com o CPU com uma solução legal, mas também um pouco óbvia.
O caso é, as poças são geradas no shader, rodando na GPU, e eu preciso identificá-las para colocar efeitos sonoros e visuais quando você pisa em cima de uma poça (ou melhor, um chão molhado). Então agora as poças são geradas com uma textura global, que se repete no mundo todo, por cima da superfície, e no CPU, eu converto a coordenada do jogo para o pixel da textura, dessa forma eu consigo ter o nível de molhado daquele local, e assim usar isso para adicionar efeitos ou influenciar na física dos carros. Uso vertex color para “pintar” os locais que não molham.
Isto é para as poças falsas que simula o chão molhado, mas eu também fiz poças volumétricas, que fazendo blend perfeito com as poças falsas.
As poças volumétricas são uma pequena simulação de água que pode estar sempre presente em buracos no mapa, e crescem conforme a chuva, como acumulação. O efeito visual da poça acumulando ficou muito bom.
E outro detalhe muito bom é a acumulação de água primeiro entre os vãos da superfície, por exemplo, bloquinhos da calçada.
Eu só fiz isso porque era fácil, eu sei que é um detalhe pequeno demais, mas não há nenhum impacto no desempenho.
Gotas de água na tela
Nós compramos um sistema avançado que simula gotículas de água grudadas na câmera do jogo, refratando (com distorção) a imagem da tela.
Há gotas estáticas (redondas) e dinâmicas (que escorrem pela tela), como postfx na GPU, que aparecem principalmente quando a câmera está olhando pra cima durante a chuva, e eu programei um simples sistema para simular a reação física das gotas.
Por exemplo, se a câmera está indo rápido para o lado direito, as gotas irão se esticar em direção ao lado esquerdo. Sim, eu sei, não é a coisa mais incrível do mundo pois até GTA clássicos têm isso. Mas eu fiz parecido, e inclusive simulei a gravidade das gotas escorrendo conforme a direção que a câmera está apontada.
Água escorrendo nos telhados
E aqui um shader que eu me irritei diverti muito em fazer!
Os telhados do jogo não podem acumular poças como o chão, portanto, eu fiz um simples shader que adiciona água escorrendo na direção da face do telhado.
A questão é que é fácil fazer uma textura animada por cima do mapeamento de outra textura, mas isso é falho, houve alguns poucos telhados que as telhas estavam invertidas (assim a água caía pra cima, não vale a pena ficarmos testando e corrigindo isso), e as cumeeiras são mapeadas na horizontal, portanto eu tive que fazer um cálculo de direção com base na face, o que é simples mas eu sou noob em shader (e matemática em geral), mas consegui e fiquei muito feliz com o resultado!
Eu tentei o mesmo em outras superfícies, mas a solução não é perfeita. À primeira vista você pode pensar que basta isso para por exemplo fazer um rio com água com direção de fluxo, ou água escorrendo pelas valas, mas não é verdade, requer algo muito mais avançado para possibilitar coisas assim, esta é uma solução simples pensada somente em telhados e superfícies inclinadas simples.
Aproveitando, no mesmo shader eu adicionei uma simulação de madeiras na parte de baixo dos telhados.
Isto porque o mapa do jogo foi criado quando a ideia ainda era um jogo simples com câmera vista de cima, portanto não havia detalhes embaixo dos telhados (como tábuas), e adicionar um novo material embaixo do telhado é uma tarefa muito chata (lembre-se, a telha de cima tem que fazer sentido com a telha de baixo), e não legal pra otimização, uma solução mais simples foi fazer um shader que, automaticamente, adiciona um overlay de tábuas para tudo o que está na direção de baixo, assim não teremos absolutamente nenhum trabalho adicional na parte de baixo dos telhados, também diminuindo o número de materiais e texturas. Não há profundidade 3D, mas o nosso jogo é assim mesmo, gráfico simples e leve.
Janelas e vitrines
Criei as texturas variáveis para as janelas e vitrines. São aleatórias, mas como eu expliquei anteriormente, posso usar vertex alpha para escolher qual usar.
A ideia inicial era usar shader de interior falso, para simulação de profundidade parallax, o problema é que cada vitrine precisa fazer um pouco de sentido (não ser como GTA Trilogy), portanto é um trabalho adicional desnecessário. Quem sabe no futuro, mas no momento temos coisas mais importantes para focar.
Portanto eu criei várias texturas completamente genéricas, para poder usar nas vitrines sem nenhum problema de falta de lógica, e eu realmente gostei do resultado, não tanto quando está acesa, mas ainda pintarei as vitrines acesas para dar vida, ficará melhor.
Postes com fios com física
Adicionei postes com fios em todo o mapa atual (exceto em algumas ruas que ligarão com próximas quadras).
O modelo dos postes foi criado pelo Meck há alguns anos atrás, e só usado agora.
Como eu disse anteriormente, eu quero que o mapa reagindo ao vento, para aumentar a imersão e vida do ambiente. Portanto, os fios dos postes reagem com o vento atual! (direção, intensidade).
Foi bem chatinho, pois eu tive que fazer um sistema novo para adicionar os fios automaticamente em cada poste.
Os fios são meshes 3D, portanto eu usei o mínimo de segmentos possível para diminuir o peso do modelo (que facilmente ocupa milhares de vértices), e usa fios com espessura num formato de triângulo. Umas pessoas podem dizer que eu devia usar fios com duas faces cruzadas (GTA Trilogy fez assim) para economizar 2 triângulos cada segmento, mas conte o número de vértices e veja, a única coisa que você vai ganhar é um fio com iluminação bugada.
Mas isso é só o começo. Ainda há somente 1 modelo de poste, nós pretendemos adicionar mais variações, pinturas na base do poste, transformador podendo atirar para quebrar e coisas assim.
E o principal: Brasil é assustadoramente lotado de fios, mesmo regiões ricas, há postes com muitos fios, principalmente na parte de baixo, e obviamente não podemos usar física neles, portanto, faremos futuramente de uma maneira otimizada, com texturas alpha. O mesmo vale para os fios que saem do poste e vão para as casas, poderíamos fazer também 3D com física, mas não é legal para o desempenho.
Fonte de texto e som ambiente
Gastei um tempinho pesquisando por boas fontes para usar nos textos do jogo, decidi usar Tauri para textos gerais, Paytone One para textos impactantes, e Ubuntu Mono para scripts.
À primeira vista eu achei a Paytone One “divertida” demais, mas pensando bem, por que o jogo tem que parecer sério?
Sobre sons ambientes, eu criei um sisteminha para usar um valor real entre 0 e 1 para definir uma transição entre 3 sons ambientes diferentes para a cidade, onde cada um é um nível de intensidade de sons da cidade (você pode ouvir no vídeo). Assim, basta eu definir a intensidade com base na quantidade de carros e pessoas por volta de você para dinamicamente ter diferentes sons ambientes para diferentes locais da cidade.
Já esquecendo, eu também recriei esta praça. Ainda não estava remasterizada e era estranha com pouco espaço.
Inclusive, memorizem ela hoje, ainda sem os bancos, sem a estátua, sem as flores, sem as árvores… Em breve vocês verão como ficará!
Provavelmente na próxima postagem de progresso do jogo, haverá árvores (finalmente), e assim a ambientação do mapa ficará muito mais interessante.
Ícones das armas
E para finalizar, finalmente a roda de armas e hud têm ícones de armas!
Na postagem anterior eu usei imagens placeholders para os ícones das armas, e ainda coloquei um “PH” grande em cima para deixar claro que não se trata de ícones finais do jogo, avisei no post, vídeo, e mesmo assim houve pessoas reclamando que os ícones estavam feios… Sério?
Enfim, aqui estão os bonitinhos:
Você pode dizer “bonito mas poderia ser melhor”, mas veja a sacada: isto não são imagens desenhadas, são renderizações do modelo 3D da arma com shader estilizado!
Isto é extremamente importante, pois possibilita criar novas armas, inclusive instalar mods de armas, sem a necessidade de desenhar um ícone novo! E todo mundo que já baixou mods de armas pro GTA SA, sabe que isso é um grande problema, pois os modders não se esforçam, ou simplesmente não sabem desenhar os ícones. Este problema não existirá no IMPUNES.
Dentro do próprio jogo, eu criei uma espécie de “gerador de ícone”, onde você posiciona a arma dentro de um quadrado. Note que isto não irá gerar a imagem do ícone, isto só irá configurar a posição para gerar a imagem posteriormente, conforme a resolução da sua tela etc.
Isto não é o editor da Unity, isto é a imagem do jogo. Essas setas dos eixos (pivot) estão implementadas dentro do jogo para você ajustar a posição e rotação da arma, ainda com pequenos bugs na renderização mas fácil resolver.
Não só isso, devido à usar um shader estilizado, é possível trocar o estilo dos ícones alterando o shader, ou valores do material, para novas cores etc, e todas as armas (inclusive mods) automaticamente terão o novo estilo que você definiu!
E lembrando de novo que essas armas são placeholders do sistema de armas que estamos usando, não são as armas do jogo (obviamente criaremos armas brasileiras).
Doações
Pela primeira vez, depois de tantos anos trabalhando sem receber 1 centavo, nós finalmente abrimos doações!
Pix
Qualquer valor; instantâneo; sem tarifas. Neste caso é somente Brasil.
Eu recomendo fortemente que você leia a página de doação/financiamento para entender a importância de financiar a gente.
Nota: No momento, as doações são para toda a 2nibble, não especificamente IMPUNES — mas de qualquer forma, também ajuda indiretamente, é claro.
Como eu já disse várias vezes, durante esses anos, eu (Junior_Djjr) tirei milhares de reais do meu próprio bolso para investir nesse jogo, para mostrar algo para vocês antes de pedir ajuda, e eu já até neguei bons empregos para focar nisso, que de fato é algo que eu gosto.
O dinheiro será usado para recuperar os gastos antigos, e o que sobrar, será usado para gastos futuros, renda extra para membros da equipe, ou contratação de trabalhos terceiros.
Não pode ajudar financeiramente? Simplesmente divulgue o nosso trabalho, espalhe a nossa ideia.
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.
Para quem não viu, mês passado eu anunciei que eu voltei a trabalhar no nosso jogo IMPUNES diariamente desde o início do ano (pulei só um mês), ou seja, finalmente tratando esse projeto de maneira séria.
Lá eu fiz uma grande postagem mostrando tudo o que já foi feito no jogo durante esse tempo:
1 mês e meio depois, aqui estão as novas coisas que eu (Junior_Djjr) fiz no jogo:
O que foi feito:
Roda de armas inspirada no GTA V, mas melhor.
Menu de pausa inspirado no GTA V, mas melhor.
O minimapa já está praticamente 100% pronto como produção final. Inclusive o desenho dele.
Adaptação de hud para qualquer aspect ratio (como monitores ultra wide, desde 800×600 até 4K).
Adicionado nuvens volumétricas [o mesmo sistema que compramos há anos atrás], incluindo um total novo sistema de ciclo de dia e noite e estações do ano.
Criado sistema de contadores de valores, barras e tempo na tela (para ser usado em missões etc).
Adaptado diversos tipos de armas placeholders (pistola, fuzil, shotgun, sniper, lança-mísseis, faca, espada, lanterna).
Criado centenas de shader maps para texturas que faltam, principalmente normal/bump maps e ambient occlusion maps.
Melhorias no controle do personagem e câmera.
Usar a mão para empurrar portas e portões.
Sistema de fogo com espalhamento.
Minigame de chutar pênalti.
Minigame de pênalti
Direto ao mais divertido: Eu criei um minigame para bater pênalti em qualquer gol de qualquer quadra do jogo!
Não tem como ser um GTA brasileiro sem ter futebol envolvido. Claro, é difícil demais criar toda uma mecânica de jogar futebol (será que no futuro eu farei??), mas chutar pênalti já é divertido o bastante.
Não é muito importante fazer esse tipo de coisa logo no início do desenvolvimento do jogo, mas eu não me importo, o meu objetivo principal é finalizar, de qualquer forma, eu faria isso em qualquer outro momento. A bola foi feita pelo Meck.
Também, não é só um minigame, é toda uma base de sistema de atividades. Em outras palavras, a base agora está pronta para adicionar mais minigames e atividades sem muito trabalho.
O minigame ficou simples mas legal, com boa curva de aprendizado. No futuro daria para fazer uma AI de goleiro, e estaria mais próximo de um real jogo de futebol de quadra. Também pretendo basquete.
Roda de armas
O conceito de seleção de armas em forma de roda já existe desde muito antes do GTA IV, e está cada vez mais obrigatório em qualquer jogo do gênero.
Meu objetivo: uma roda de armas limpa, simples, com personalidade, que não ocupa muito a visão e sem poluição visual.
A roda de armas do GTA V é boa, é uma boa fonte de inspiração, mas eu encontrei vários problemas para melhorar:
Problemas:
A Rockstar teve a ideia de haver “caixas” onde as armas são mostradas no meio, o problema é que nem todas as armas encaixam dentro desse espaço, enquanto outras encaixam, isso causa a sensação de desorganização.
Cada espaço pode guardar mais de uma arma, mas você não vê quais são as outras, e pior, para você ver que tem mais do que uma arma, é necessário você olhar para o número embaixo do nome da arma que fica no centro da roda, não na arma. Isso causa confusão e lhe faz não notar que você tem mais de uma naquele espaço.
A ideia da Rockstar foi deixar o centro da roda vazia, para preservar a visão de onde você estava mirando antes de trocar a arma, mas eles quebraram isso, pois quando você tem uma arma com silenciador etc, aparece textos grandes exatamente no centro, tapando a visão. Inclusive, eu acho a visão de fundo borrada até demais. Engraçado que o GTA Trilogy quebrou isso também, colocando o nome da arma exatamente no centro em vez de levemente pra cima.
Não há personalidade. Ninguém olha para um ícone de armas do GTA V e fica “uau, que nostalgia, quantas lembranças”, agora pense num ícone de arma do GTA San Andreas, há tanta personalidade que as pessoas até tatuam eles!
Até hoje eu não acredito como que a Rockstar programou a roda de armas no mouse. Eles só simularam a posição do analógico, ou seja, existe uma dificuldade maior em selecionar os cantos diagonais, e por exemplo, se você está com o mouse em cima, mas quer a arma do lado (diagonal superior direito), a sua reação natural é arrastar o mouse pra direita, mas ele seleciona a arma direita, não na diagonal. É um erro de UX simplesmente bobo e muito fácil de ser resolvido.
Soluções:
As armas de fato têm diferentes tamanhos, e mesmo se usar ícones quadrados, o espaço é menor nas diagonais. Portanto em vez de tentar encaixar no espaço, faça o espaço aberto: deixe as extremidades esfumaçadas, como se não tivesse um fim, ou seja, os ícones ficarão propositalmente soltos pra fora.
Coloque as setas de seleção da arma do lado do próprio ícone da arma (não é óbvio?) e mostre o ícone minimizado dos lados, para você ter uma prévia do que você tem em cada lado, agilizando a troca. Eu também pensei em abrir uma segunda roda externa para a escolha, mas isso criaria limitação da quantidade de armas. E pretendo colocar um indicativo de número em algum lugar.
Em vez de um texto, simplesmente use ícones para identificar quais são os attachments daquela arma. No caso da minha roda eu não coloquei pois ainda não pretendemos adicionar tal sistema no jogo, provavelmente no futuro.
Esses ícones do formato real da arma, virada de lado, são muito sem graça, estilo muito rodado, precisa inventar algo mais único, por exemplo na diagonal estilizado, como era nos GTAs clássicos. Eu ainda não inventei, mas pretendo algo assim, mas que seja fácil de fazer, pois a minha ideia é que seja possível adicionar armas como forma de mod/addon.
Eu programei uma seleção de roda de armas no mouse melhor do que GTA V com somente 10 linhas de código (sem o problema que eu mencionei acima). Duvida? Está aqui o código, uso livre.
Enfim, foi isso o que eu consegui, uma roda de armas ainda mais simples e agradável do que a do GTA V. Obviamente os ícones e textos são placeholders que ainda serão trocados.
Menu de pausa
Eu fiz a mesma “ciência” também no menu de pausa.
Meu objetivo: Um menu simples e bonito, mas que tenha alguma personalidade, sem poluição visual, que você tenha fácil visão de cada elemento da janela (sem muitas mudanças de layout) e de fácil expansão.
De novo o menu do GTA V é uma boa inspiração, principalmente porque é relativamente simples de ser programado, mas quando parei pra analisar, há uma quantidade de problemas graves…
Problemas:
O item do menu atualmente selecionado é com fundo branco, no entanto, o anteriormente selecionado (pai ativo) também é branco, e o outro também… É um erro de UX que nem um amador faria, sinceramente. Você às vezes se perde onde está a sua atual seleção, pois as seleções anteriores estão da mesma cor.
Alguns painéis de configurações, principalmente o de configurações gráficas, são muitas linhas, relativamente pequenas, que o nome está na esquerda, e a opção está na extrema direita, você precisa ficar movendo os olhos de maneira muito distante para ver qual é cada opção configurada. Eu notei o problema desde a primeira vez que abri esse menu no jogo.
Outra coisa que eu sempre odiei é a necessidade de por exemplo apertar Enter para começar a trocar uma opção, e voltar para confirmar, ir para o próximo item, entrar de novo etc. A navegação, especialmente no menu de opções, é muito travada e nada agradável, e às vezes você fica confuso se você está ou não dentro de uma troca de opções ou troca de linha, pois a cor não difere.
Não existe fundo, somente existe elementos, e a separação dos elementos é o fundo do jogo. Isto é muito feio, olhe o rosto do Franklin acima, não tem como achar isso bonito, é bagunçado, não há limitações claras do layout do menu, e o fundo é brilhante demais causando poluição.
Não está muito claro quando um menu é escrolável. Eles tentaram deixar “minimalista” colocando um indicador no final, mas às vezes você não nota, ou não entende que aquilo indica que há mais coisa embaixo, na real parece um botão.
Algumas barras são números pré-definidos de opções (passos), por exemplo você pode selecionar 5 níveis, mas elas não indicam com traços onde são os níveis, eu sempre achei isso um leve incômodo em vários jogos.
O mapa é a guia selecionada por padrão, o que faz sentido, mas ela é a primeira da lista. A segunda é o resumo, que também é uma guia frequentemente acessada. Para ir até o final do menu, se aperta pra esquerda para inverter o final, mas nós não temos naturalmente essa ideia e várias vezes ficarmos apertando pra direita até o final. Perceba que com essa lógica, a guia “Game”, que também é importante, é a mais confusa de ser rapidamente acessada, e a “Settings” é a mais distante, sendo que ela fica no meio.
Soluções:
Os itens ativos (pais, anteriormente selecionados) são marcados com uma linha para a direção onde o menu foi navegado. Por exemplo, a guia “Settings” indica pra baixo, “Audio” indica pra direita.
Em vez do texto da direita ser alinhado na direita, alinhe na esquerda a partir do centro do painel. Por que não? Assim os textos não ficam tão distantes, sem aquele espaço vazio gigantesco no centro.
Em vez de entrar e sair da seleção de opções, entre uma vez e continue lá, trocando as linhas normalmente, por que não? E use uma cor de destaque para deixar claro que você está dentro da seleção de opções.
Essa remoção de fundo parece uma frescura contra os “design boxy”, de fato é interessante para apresentações de web design, mas eu acho péssimo para a UX de um jogo, especialmente num menu com muitas opções. Neste caso, eu acho muito importante que o menu todo seja definido num layout de caixa estática onde as pessoas entendem claramente as extensões da janela, sem o fundo estourar por cima de onde você está vendo.
Outra coisa que eu acho frescura é a remoção da barra de scroll. Mesmo que esteja jogando com um gamepad, a barra de scroll é um padrão universal, você nem precisa tocar nela (pense em smartphones), ela é um indicador importante de onde você está, que aquela janela é escrolável e o quão grande ela é.
Para separar as barras com níveis de passos pré-definidos, adicionei traços separando cada nível, e o número de traços é de fato os níveis que você pode selecionar. Por ter só 2 traços, ou 10…
Eu deixei a guia ‘Mapa” no centro, “Jogo” na esquerda e “Resumo” na direita, sendo que as extremidades são as coisas menos acessadas: “Perfil” e “Configurações”. Isto dá uma melhor visão de que você começa do meio e aperta somente 1 ou 2 vezes pro lado para alcançar qualquer guia, algo que no GTA V você inconscientemente apertaria 5 vezes para ir até o outro lado. Eu prefiro evitar essa ideia de “aperte pra esquerda para ir para a direita”, pois não é intuitiva para a nossa mente.
E é este o resultado. Eu demorei quase 1 semana programando todo o sistema de menu, e está basicamente pronto, só falta botar o conteúdo. No momento eu só fiz um pequeno sistema de trocar configurações do jogo.
Perceba que no “Valdir” (meu nome) eu quis colocar o nome do seu jogador em vez de “Perfil”, para ficar algo mais humanizado. Lá eu penso em colocar todas as informações sobre o seu jogador, estatísticas do gameplay etc.
Modéstia à parte, este menu ficou mais bonito e com User eXperience melhor do que o do GTA V (algo que não é tão difícil assim de ser alcançado, eu nunca vi alguém elogiar o menu do GTA V).
Ok, mas e a guia do mapa? Tem algo nela?
Minimapa/radar
Eu evito elogiar meus próprios trabalhos, mas eu não consigo deixar de dizer que isto ficou lindo…
Desde o início eu falei: eu quero um desenho de mapa bonito, icônico, e eu fiz esse, inspirado no GTA San Andreas, mas com menos cores e mais tons de cinza para mais detalhes.
O tom de cinza médio indica os “semi obstáculos”, geralmente coisas que estão lá mas não necessariamente são um obstáculo para você, ou então, a área de lazer dos prédios (deste modo o formato da torre do prédio fica em branco).
Isto não é uma imagem, é uma mesh 3D com materiais pintados, portanto haverá como você carregar ou criar seus próprios estilos de cor nas configurações do jogo! Eu também pretendo deixar a opacidade configurável.
Ultimamente os jogos estão deixando o minimapa cada vez mais enxutos e sem graça, sem personalidade. Por exemplo o minimapa do GTA IV e do GTA V de nova geração, que é só um negócio preto com tons de cinza. Jogos de corrida são literalmente só a rua. O meu objetivo foi algo icônico, memorável.
“Ah, mas fazem dessa forma porque não querem mostrar detalhes demais do mundo do jogo, o seu minimapa mostra detalhes demais.”, eu não me importo, colocando na balança, eu prefiro algo bonito, cheio de cores e detalhes, do que algo chato e sem graça. Lembre-se, o minimapa é parte essencial do visual do jogo, está na sua visão a todo o momento, não é um simples detalhe.
E em comparação com o minimapa do GTA Trilogy, perceba que este também tem perspectiva e o cursor que indica a posição do player também é levemente afastado do centro. Mas não há nenhuma imprecisão do cálculo de posição e desenho (como acontece no GTA Trilogy onde o player aparece dentro de prédios e muda a posição conforme gira a câmera), aqui tudo é milimetricamente preciso (como a GSG errou em algo tão simples??), e eu achei um erro o GTA Trilogy deixar o cursor do player tão pra trás, e com tanta perspectiva, você vê muito o que está na frente, mas quase nada do que está atrás, assim atrapalhando ver os inimigos que estão atrás de você. E como você pode ver, não tem a porcaria do serrilhado como no GTA Trilogy.
Controle do personagem
Eu ajustei bastante a velocidade e blend das animações de andar. Ainda não pude me dedicar à melhorar as animações, e eu acho que é melhor esperar alguém específico para trabalhar nas animações do jogo.
Mas algo muito legal que eu fiz, foi a mão empurrando portas e portões dinamicamente, automaticamente, igual GTA V.
Perceba também que ao segurar uma arma na mão direita, ele usará a mão esquerda, exceto se a arma for pesada demais para segurar com uma mão só (como uma RPG), neste caso não usará mão nenhuma.
Para isso eu fiz um controlador para definir qual mão está ocupada, e qual a importância de cada mão. Eu espero que algo assim possibilite, no futuro, o personagem por exemplo segurar uma lata de refri numa mão e ainda conseguir usar uma pistola com a outra. Veremos se eu consigo.
Ainda tem bastante coisa para refinar no controlador do personagem, ele é muito completo e avançado mas não tão cosmeticamente polido como jogos AAA, mas não é tão importante agora e requer maiores trabalhos com animações.
Eu já havia criado todo o sistema de calendário, relógio e transição de dia e noite do IMPUNES, além de um simples sistema de clima (que eu pretendia recriar pois era básico demais), portanto eu pretendia usar somente as nuvens, mas eu gostei tanto do sistema de dia e noite desse asset que eu vou jogar tudo fora (na verdade, provavelmente vou polir para vender barato na Unity Asset Store), e assim migrar todo o jogo para esse novo sistema.
Além de nuvens lindas, bem otimizadas e com muitas opções de formações e níveis de qualidade (claro, você pode desativar as nuvens volumétricas, pois elas são pesadas), todo o sistema de ciclo de tempo é muito caprichado.
IMPUNES é inspirado em Balneário Camboriú – SC, portanto eu configurei a latitude e longitude conforme a cidade real para ver se o posicionamento do Sol é realista, e para a minha surpresa, o horário de nascer e pôr do Sol se bateu com o site sunrise-and-sunset.com.
É sério, dentro do jogo, em Junho o Sol se põe às 17:30 e em Janeiro às 20:00. Se você perguntar para alguém que mora em BC, vai dizer que é isso mesmo.
A lua também tem posicionamento realista, variando cada dia, mês, ano, naturalmente gerando as fases da Lua. Eu estou até curioso se é possível ter, naturalmente, um eclipse solar no jogo.
Outra coisa que eu fiquei impressionado, é que essas nuvens são volumétricas, feitas para serem vistas de baixo pra cima, para melhor desempenho, mas durante o jogo, eu posso trocá-las por nuvens de “voar entre”, para melhor visualização com aviões voando entre e acima delas, e o formato da nuvem é preservado durante troca! Nem GTA V consegue isso de maneira convincente, e GTA Trilogy nem sequer é possível chegar na nuvem (mais ou menos). Ou seja, no futuro você vai poder pegar um avião e ir até uma nuvem, e ela realmente estará lá, de maneira otimizada.
O meu sistema de ciclo de dia e noite era aceitável, mas este é incrível, o problema era a necessidade de esperar 365 dias para ver todas as estações, mas eu editei o algoritmo do Sol para um calendário curto de 24 dias. Afinal, eu quero que você desfrute das diferenças entre as estações do ano, ainda mais por ser uma cidade praiana do Sul do Brasil, ou seja, no inverno haverá muitas pessoas agasalhadas, neblina, e no verão haverá muita gente na praia. Eu quero proporcionar essas diferenças de gameplay para trazer uma maior imersão. Ou seja, na minha ideia, em 19 horas de gameplay você terá todas as estações do ano, dentro de dias de 48 minutos (como GTA V e vários outros jogos).
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.
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
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.
“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).
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.
Farias, que é o principal programador do IMPUNES/2NTD, está sem tempo para ajudar, e visto que há somente 3 membros ativos, mesmo que eu (Junior_Djjr) saiba programar, desde o início eu estou encarregado da modelagem, e eu nunca programei um jogo completo, portanto eu prefiro que IMPUNES seja programado principalmente pelo Farias, que trabalha profissionalmente nisto, portanto ele faria algo melhor.
Nós da 2nibble temos 4 outras ideias de jogos, mas infelizmente somos uma só equipe, de atualmente só 3 pessoas (Junior_Djjr, Meck e Vítor Kuhn). Nós decidimos começar a focar numa dessas ideias.
Antes que você pense negativo, na verdade, um projeto paralelo nos vai ajudar muito com aprendizado e alguns sistemas podem ser reutilizados. Portanto o IMPUNES/2NTD voltará muito mais forte do que antes!
IMPUNES/2NTD está pausado há 2 anos (desde 2018; desconsiderando 3 meses usados em uma remasterização para a câmera baixa em terceira pessoa). Durante esse meio tempo, nós criamos o NPD e fizemos 2 protótipos de jogos ainda sem detalhes, um jogo mobile de corrida e um puzzle inspirado em Portal com mecânica inédita. Mas decidimos iniciar uma outra ideia, e começamos ela em Fevereiro deste ano.
Assista ao vídeo que mostra a situação atual do IMPUNES/2NTD, explica de forma resumida, e mostra o gameplay do nosso novo jogo, também com explicações resumidas:
Novamente, este vídeo resume tudo, e com somente 4 minutos mostra muita coisa interessante sobre ambos os jogos.
Resumo
Warpunk se trata de um jogo RTS (Real Time Strategy; estratégia em tempo real) multiplayer que se passa num universo de ficções punk.
O jogo conta com 3 raças:
Steampunk
Tecnologias à vapor e metais. Inspirado na era vitoriana, mas inclui tecnologias como energia elétrica.
Solarpunk
Tecnologias ecológicas e energia limpa.
Cyberpunk
Tecnologias de cibernética e muitos neons.
Cada uma pode lutar contra raças diferentes ou iguais.
Gameplay
O gameplay se resume em construir construções, gerar energia, coletar recursos, construir unidades de combate e realizar pesquisas para liberar upgrades, e finalmente, destruir todas as construções e/ou unidades dos inimigos. Semelhante à maioria dos jogos RTS, mas inspirado principalmente no Earth2150 e Age Of Empires.
No futuro haverá um modo campanha e singleplayer básico, mas no momento o foco é multiplayer.
O multiplayer funciona de cliente para cliente, ou seja, focado para você jogar com amigos utilizando a Steam. Mas provavelmente também haverá como hospedar salas públicas. Não haverá nenhum tipo de servidor nosso, nem rankings.
Mapa
O mapa é gerado proceduralmente, sendo assim, cada batalha é uma nova experiência.
Num modo de jogo comum, os jogadores aparecem em locais aleatórios, normalmente num mapa procedural, sendo assim, ninguém sabe exatamente onde o outro está, o que pode gerar uma jogatina cheia de surpresas.
O gameplay pelo mundo é modular, ou seja, não existe bases estáticas, você tem a liberdade de construir o que quiser em qualquer lugar, desde que você consiga coletar os recursos para conseguir construir, e tais recursos podem estar espalhados em diferentes locais do mapa. Em outras palavras, é um RTS de mundo aberto e procedural.
“Ah, mas um mapa gerado proceduralmente é só algo aleatório, não é natural e tático”, está certo meu caro questionador anônimo, mesmo que a geração procedural seja minimamente sofisticada, havendo até mesmo estradas com casas, há também um editor de mapa dentro do jogo.
Além de uma seed que pode ser compartilhada (como no Minecraft), você pode jogar mapas criados por você ou pela comunidade, utilizando um editor de terreno e objetos que roda dentro do jogo, e você pode editar os mapas gerados para deixá-los melhores.
Sonoplastia
Temos noção da importância de uma boa trilha sonora. Cada civilização terá suas próprias músicas de fundo durante o gameplay. Provavelmente vozes informativas em português e inglês (queremos contratar profissionais para isto; se você tem microfone profissional, nos contate), e estamos prestes a gastar em torno de 700 reais com licenciamento de músicas.
Especulações finais
Quando concluído — o nosso objetivo é uma versão alpha ainda em 2020 — será vendido na Steam com um preço que pode variar em torno de 10 reais. O preço pode aumentar ou abaixar conforme a qualidade do trabalho final.
Depois do gameplay multiplayer totalmente funcional, pretendemos algum modo campanha básico.
Não temos certeza sobre a criação de ferramentas de suporte à mods, pois não é tão prático e útil em jogos focados em multiplayer competitivo.
Progresso atual
Eu (Junior_Djjr) estive trabalhando neste jogo quase todos os dias durante 3 meses (desde Fevereiro de 2020). É o primeiro jogo que eu estou realmente programando (Nibble: Pizza Delivery foi programado pelo Farias). Até o momento eu já programei 19 mil linhas de código (se considerar a programação de ferramentas, testes, códigos deletados, recriados etc acredito que é em torno de 25 mil).
Já foi criado:
Gerador de mapa procedural
A base do funcionamento está feita, mas ainda há muito pela frente.
Ainda tem muito o que melhorar para ficar algo realmente natural e complexo, mas não vamos focar tanto nisto pois provavelmente será mais comum pessoas usarem mapas criados manualmente. De qualquer modo, a geração procedural é útil para gerar um mapa inicial para em seguida fazer edição manual.
Utiliza uma mistura de diferentes gradient noises, como o ridged multifractal noise (muito usado nas montanhas e praias) e simplex noise (para criar detalhes finos, como imperfeições). E a água não é um plano gigante embaixo do solo, são tiles que só são visíveis conforme um algorítimo. E há também um outro algorítimo que evita a geração de águas ou ilhas pequenas demais (um problema comum em mapas procedurais). Aproveitando, se você é programador Unity, eu agradeço qualquer ajuda na programação de uma geração de mesh baseada nas laterais do terreno, para assim, em vez de tiles, gerar uma mesh de água. Mesmo que este mapa procedural não seja algo tão sofisticado, eu estou começando a ficar feliz com o resultado, está ficando ótimo para os padrões de um RTS.
A geração inclusive cria estradas de terra com casas. Mesmo que as estradas não sejam realmente úteis como um caminho, gerou uma boa imersão, deixando o cenário mais complexo.
Editor de mapa Além de mapas aleatórios, Warpunk tem um editor de mapa implementado dentro do jogo.
Ainda é um protótipo, mas com base funcional. Ainda não há interface, salvamento/carregamento de mapas, nem editor de objetos.
O importante é, não é só uma edição de terreno com texturas automáticas, você pode pintar o terreno com brush de diferentes texturas, e não estou falando de um círculo, é de fato um brush, que utiliza imagem, como editores de imagem, como Photoshop. Tudo foi muito difícil de conseguir, e eu estou muito feliz que eu tenha conseguido, pois eu vejo a edição de mapa como um ponto crucial para este jogo.
Estilos de ambiente
Não haverá só este ambiente de floresta tropical (que inclusive é inspirada no Brasil), mas também uma floresta fria (de pinheiros), deserto de areia, e neve.
Cada um com suas texturas, vegetação, props entre outras características.
Por exemplo, armas que causam efeito de calor serão menos potentes em ambiente de neve. Floresta tropical chove muito, e isto diminui a intensidade do sol, fazendo com que a energia solar do Solarpunk seja menos aproveitada (ideias futuras).
No momento, todos os props e a vegetação está sendo modelada pelo Meck utilizando Blender, com um estilo que é otimizado para câmera alta, tanto visualmente quanto no desempenho gráfico.
Construções
O jogo haverá diferentes fábricas, geração de energia, coleta de recursos etc para cada civilização, inclusive utilizando diferentes mecânicas. As construções estão sendo modeladas por mim, Meck e Vítor Kuhn, sendo que o trabalho de finalização e otimização fica por conta do Meck.
Ainda há somente 2 construções não finalizadas, que é a geração de energia e fabricação de unidades do Steampunk, criadas para ter uma ideia de estilo das construções futuras. Se nota que nem há janelas ainda, faltam muitos detalhes e melhorias, mas já dá para ter noção.
Perceba também que o jogo é semi-baseado em grade. As unidades andam livremente, mas a parte da construção funciona por uma grade.
A parte que realmente constrói as construções ainda não foi feita, mas basicamente funcionará levando uma unidade construtora até o local, e assim iniciará uma animação de construção.
Interface
Obviamente a interface do jogo não será como o mostrado atualmente, mas já dá para ter uma noção do layout.
A interface ainda será minimamente estilizada e com botões melhor imaginados.
Movimentação de unidades Para total desempenho de centenas de unidades, o jogo não utiliza física. A movimentação é simples, mas eficaz, utilizando A* Pathfinding como base, que usa vários núcleos do processador para encontrar o caminho mais curto para cada unidade (pode usar todos, mas notei que acima de 4 núcleos não é benéfico, pelo menos para o i5 9600KF (6 núcleos) que tenho hoje).
Um detalhe interessante é que, por árvores atrapalharem demais a locomoção pelo mapa, elas são derrubáveis ao passar por elas, mas as unidades não simplesmente passam nas árvores como se fossem nada, a inteligência artificial calcula se vale ou não a pena derrubar a árvore, ou desviar dela. Por exemplo, se o desvio for grande demais, a unidade prefere derrubar as árvores. Pouco ainda foi trabalhado. Provavelmente haverá diferentes modos de formação de esquadrão, e “gravar” e “tocar” sequências de comandos.
Seleção, múltiplas seleções A experiência de usuário é muito importante num jogo RTS, e pensando nisto, estou dando prioridade à maneira que o jogador seleciona múltiplas unidades e construções do jogo. Múltipla seleção de unidade é básico, mas em vários jogos RTS não sofisticados não é possível selecionar e editar múltiplas construções ao mesmo tempo, como fábricas, e Warpunk é uma exceção. Mesmo que você selecione construções de diferentes tipos, o jogo lhe dará todos os botões de todas as construções que você selecionou, para comandar várias ao mesmo tempo. Isto é muito útil para desligar todas ao mesmo tempo, dar os mesmos comandos para diferentes fábricas, centros de pesquisas etc.
Montagem de unidade Até o momento, o sistema mais complexo do jogo (mais de 1 semana pra ser criado).
Funciona como um sistema de “tuning” de carros. Você escolhe o corpo, e em seguida há slots (espaços) de ataque e defesa para você clicar, e assim selecionar a arma (ou blindagem, ou campo de força, qualquer coisa). A UX foi organizada pensando em ações rápidas, e todas as informações visíveis para o jogador à todo o momento. Cada corpo, cada arma, cada upgrade, tem um custo e tempo de produção, e é claro, dano, alcance, vida etc. Em vez de ícones e texto, tudo funciona como visualização do modelo 3D rotacionando na tela em forma de prévia, e lá você visualiza a prévia da sua unidade final com todos os upgrades instalados e suas estatísticas, custo, tempo de produção, tipo de locomoção etc.
Você pode nomear as suas unidades construídas, e os outros jogadores poderão ver o nome que você deu (um pequeno detalhe que pode gerar umas zoeiras). Caso você não dar o nome, o próprio jogo gerará um nome para você com base no nome do corpo, e utilizando um extenso dicionário de palavras relacionadas com aquela raça. Por exemplo na Steampunk há palavras como “Victorian”, “Inventor” e “Furnace”; Solarpunk há “Heartwood”, “Salmonberry” e “Symbiosis”; Cyberpunk há “Computeritis”, “Nano” e “Orwellian”. Não só isto, a geração de nome também considera o tipo de locomoção, por exemplo na água, Steampunk pode selecionar “Whale”; Solarpunk “Chordata”; Cyberpunk “Bait” etc. E o mesmo vale para o ar, e veículos anfíbios (por exemplo, “Frog”). Cada dicionário há em torno de 70 à 100 palavras. Mesmo que não seja algo espetacular, eu gostei da ideia, é muito melhor do que utilizar números.
Por fim, as unidades salvas ficam numa lista de fabricação (compartilhada entre todas as fábricas da sua base, desde que sejam do mesmo tipo de locomoção). E você pode clicar num botão do lado da prévia para reabrir a interface, e assim editar a sua unidade já criada com novos upgrades que você liberou. Cancelar uma unidade atualmente sendo fabricada, gera um processo de “reciclagem” até que a nova unidade se inicie. Durante a reciclagem, os recursos gastos voltam (mas não 100%). Haverá também um centro de reciclagem para você reciclar unidades já fabricadas.
Você pode, com certeza, montar uma lista ordenada de quais unidades são construídas, inclusive quantas de cada uma. O sistema é idêntico ao Earth2150, isto é, a ordem que você clica em cada unidade, será a ordem de execução, e clicar mais de uma vez em uma, criará uma lista de execução, e será mostrado um número e uma barra de progresso da fabricação atual, e total (contanto todas as repetições).
Você pode perceber que a interface não mostra algumas informações importantes, não se preocupe, ainda há muito pela frente, muita coisa ainda será feita.
Árvore de upgrades, pesquisa Outra coisa que me rendeu 1 semana de trabalho (na verdade, eu esperava mais).
Como todo bom RTS, você tem uma árvore para liberar upgrades, normalmente peças, como armas cada vez melhores, e é claro, para ter bons upgrades, você começa do começo. Você clica em algum upgrade, e o jogo gera uma linha de execução até aquele upgrade, assim, cada upgrade é “pesquisado” utilizando recursos coletados, e tempo. Cada upgrade liberado, aparece na interface de montagem de unidade. Uma mecânica interessante, é que você pode sim ter mais de uma central de pesquisa trabalhando junto, e você pode sim liberar um upgrade mais rapidamente quando duas centrais de pesquisa trabalham na mesma coisa, no entanto, a cada central de pesquisa adicional, o custo de produção aumenta e o tempo de produção não cai pela metade. As porcentagens ainda não foram escolhidas pois isto é algo a ser decidido durante os testes de balanço de gameplay.
Assim como a fabricação das unidades, há também a reciclagem, que retorna gradualmente os gastos atuais caso você a cancela. Do lado do técnico, eu montei o sistema da lista de upgrades utilizando uma visualização gráfica com nodes (nós). Isto é facilita muito a organização das ordens e configuração de propriedades de cada upgrade, o que é importante no momento de configurar o balanço do gameplay.
Pássaros
O jogo inclui pássaros procedurais que viajam em bandos pelo mapa, e podem pousar em locais determinados (por exemplo nas construções que você constrói).
Neste caso eu não programei o sistema, foi comprado pronto (40 reais muito bem gastos). Meck ainda modelará mais variações de pássaros.
O ambiente de estilo tropical é baseado no Brasil, portanto haverá pássaros brasileiros nele com seus próprios áudios.
Estamos pensando em adicionar outros animais selvagens decorativos, mas não é prioridade.
Ciclo de dia e noite, climas Foi criado todo o sistema de relógio e calendário, e por fim, o ciclo de dias e noites do jogo, inclusive climas.
— na imagem acima as construções estão com texturas provisórias, portanto não há janelas ainda —
O sistema é modular e preciso. É possível inclusive avançar anos simplesmente enviando um valor de horas. E é claro, para uma boa imersão, há climas, como chuva e névoa. Eu estou muito feliz com o resultado da chuva. Eu utilizei efeitos especiais criados pelo Digital Ruby, o mesmo criador do sistema de nuvens volumétricas do IMPUNES/2NTD.
Eu criei transições graduais naturais para a chuva, que pode chover mais, menos, há tempos nublados, as nuvens se formam gradualmente fechando o céu, alteração de vento que inclusive altera a maneira que as fumaças e vegetação do jogo age (no vídeo o tronco das árvores estão sendo impactados pelo vento; já foi corrigido com vertex color), e por fim, o chão se molha, e continua molhado, sendo seco gradualmente baseado na intensidade atual do Sol, além da chuva limpar unidades sujas, e chão molhado sujar mais quando a unidade anda. Há também o clima de névoa, que tem mais chances de ser iniciado em manhãs, e em breve vou usar a chuva como base para criar a neve caindo. Também falta raios, que, mesmo com a câmera não mostrando o céu, ainda será necessário criá-los pois são visíveis no reflexo da água.
Shaders próprios Este jogo está longe de ser um “asset pack”, mesmo os shaders foram criados por nós. Eu (Junior_Djjr) criei um shader de água para suprimir somente as necessidades do jogo — afinal, não precisamos de uma água sofisticada com vertex displacement etc. Deste modo, mesmo bonita, a água tem um excelente desempenho gráfico.
O reflexo da água é em tempo real. Eu utilizei um script que gera um cubemap “assíncrono falso”, isto é, cada frame captura um lado do ambiente ao redor da câmera e aquele lado é jogado para o reflexo, e este mesmo reflexo é utilizado em literalmente todos os reflexos do jogo, sendo assim, devido ao jogo ser baseado em PBR, numa só captura de reflexos é possível ter não só os reflexos, mas em geral uma iluminação que combina com o ambiente ao redor. O desempenho ficou muito bom, ocupando somente 0,8 milissegundos de processamento em uma cena básica numa GTX 1050 2 GB. Unidades e construções utilizam um shader que, além de detalhes pintáveis para diferenciar jogadores, suporta acumulação de neve realista adicionada somente na parte de cima do objeto. A mesma acumulação de neve será usada para todos os props do jogo em cenários de neve. E é claro, a acumulação é gradual.
Nos cenários de terra, quando a unidade anda, é acumulado uma leve poeira no corpo e muita terra/lama nas rodas (como as lagartas dos tanques). Ao chover, a sujeira é limpa, e devido ao chão ficar molhado (com lama), ao andar irá sujar mais do que quando o clima está seco, assim como na vida real. Mas o real destaque está no shader de texturas stochastic procedurais, que soluciona completamente a repetição de texturas. Se trata de uma adaptação do rotoscope baseado no paper de Thomas Deliot e Eric Heitz, e por fim implementada por mim (Junior_Djjr) no shader de terreno da Unity com Universal Render Pipeline. Assim, o terreno do Warpunk não terá tiling com efeito de repetição de textura, como é visto de costume em vários jogos.
O resultado me deixou de boca aberta, não há nenhuma repetição notável, nem corte de interseção, e eu não notei nenhuma queda de desempenho do jogo. Mesmo assim, nós podemos simplesmente dar a opção de desativar isto. É basicamente uma mistura procedural de um UV mapping triangular baseado numa textura já existente, ou seja, melhor desempenho do que materiais procedurais do Substance. Nós usaremos isto também para algumas texturas do IMPUNES/2NTD, como gramas. Você também quer isto em seu jogo? Liberamos gratuitamente no Github.
Curta a página da 2nibble no Facebook para acompanhar o desenvolvimento deste e outros projetos:
Nós contamos com vocês num futuro crowdfunding (financiamento coletivo) para cobrir custos de produção e licenciamento de músicas, e é claro, você receberá prêmios por isto. Faremos dentro de alguns meses.
Diferente do IMPUNES/2NTD, que está em fase de prototipagem, nós já estamos incentivando que você divulgue o Warpunk, e podemos fazer futuras parcerias com isto. Caso dúvidas, nos contate na página do Facebook. Há também um tópico no Fórum MixMods para discussões.