Eu já trabalhava com programação antes de começar a brincar na fonte do Priston, mas minha proficiência é, na verdade, com C#, eu até me habituei com C++, mas é impossível competir com a conveniência das IAs, então toda a manipulação de código foi feita por agentes como Codex, Claude, etc. Outro ponto importante é que esse não é o primeiro jogo em que eu trabalho, já desenvolvi um jogo para Steam (https://store.steampowered.com/app/4529570/Wave_43/?l=brazilian) e outros diversos que não terminei, e especificamente um deles acabou me dando uma boa bagagem que repliquei no Priston, que é esse aqui https://www.reddit.com/r/monogame/comments/1nqzveu/devlog_building_ashen_realms_a_25d_rpg_from/, inacabado também kk.
Como vocês podem notar o meu forte não é desenhar, como muitos, estou no aguardo da IA desenhar e animar de forma consistente.
A SOURCE
Como muitas das sources disponíveis hoje para baixar gratuitamente, essa também vinha com aquele combo: bugs, performance ruim, visualmente cru e sem features. Mas ainda assim, foi o melhor que eu consegui achar naquele momento, tudo "funcionava", e isso já era suficiente para começar.
O PASSO PARA TRÁS
Como diz o ditado, às vezes é necessário dar um passo atrás para conseguir dar dois à frente, isso nunca fez tanto sentido quando "eu" analisei (Claudinho da massa) o código pela primeira vez. E foi o que eu fiz, fiquei alguns meses sem implementar qualquer feature de gameplay e foquei apenas em refatorar, aproveitando para migrar de DX9 para DX11, e eu consigo resumir todo esse tempo de desenvolvimento em uma única palavra: Sofrimento kk
Mas, em algum momento eu consegui, após centenas de problemas e correções eu havia migrado e refatorado por completo o código do jogo.
O GRÁFICO
Ainda tem muita coisa que pode ser implementada, mas acredito ter chegado num ótimo nível visual, e foi aquele jogo inacabado que me indicou o norte da implementação do Priston. Naquele jogo eu precisei criar do zero uma engine para rodar o mesmo, e sim, eu poderia ter usado Unity, Godot, ou até mesmo Unreal, mas como um dev hardcore de code only eu fui para o MonoGame, e nele, é tudo feito na unha mesmo, e eu comecei a implementar na época em que as IAs ainda eram apenas chats, ou seja, tive muita ajuda mas também tive que aprender muita coisa, principalmente na parte de renderização, coisas como métodos de renderização (Forward, Forward+, Deferred, etc.), formas de iluminação, realtime, clustered, baked, e por aí vai.
O primeiro passo foi realizar uma integração com o ImGui para poder fazer ajustes finos de absolutamente tudo que eu implementava no jogo:
Depois de atualizar para o DX11, o primeiro passo foi fazer algo muito parecido com o que fiz naquele jogo, separar a renderização por fases, de forma que eu conseguisse enxergar separadamente a Albedo, Vertex, Normals, etc.. Veja isso:
Unlit
Normals:
E por aí vai..
O que eu implementei para alcançar esse visual foi basicamente:
PBR simplificado — materiais com resposta à iluminação mais realista, principalmente em personagens e armas.
Cascaded Shadow Maps (CSM) — sombras dinâmicas com 3 cascatas.
Baked Shadows — sombras pré-calculadas para o terreno.
Hybrid Shadows — combinação de sombras baked no cenário e dinâmicas nos personagens.
SSAO — Ambient Occlusion em espaço de tela.
Procedural Sky — sistema de céu procedural.
Water Rendering — novo sistema de renderização de água.
HDR Tone Mapping (ACES) — mapeamento de tons cinematográfico.
Color Grading (LUT) — ajuste de cores por tabelas de referência.
Bloom — iluminação difusa em áreas brilhantes.
Depth of Field (DOF) — desfoque baseado na profundidade da cena.
FXAA — antialiasing por pós-processamento.
SMAA — antialiasing com melhor preservação de detalhes.
TAA — antialiasing temporal.
AMD FSR 1.0 — upscaling espacial.
Dynamic Resolution Scaling — ajuste dinâmico da resolução visando manter o FPS-alvo, com integração ao FSR 1.0.
Terrain Painting — pintura de terrenos com diferentes materiais e texturas.
Materialize Editor — editor de materiais por categorias (grama, areia, pedra, madeira, folhagem e metal).
High-Resolution Terrain Textures — suporte a texturas de terreno de 256, 512 e 1024 pixels.
DDS BC1/BC7 Texture Compression — compressão otimizada de texturas.
O SERVIDOR
Para não deixar um tópico muito grande, eu finalizo com outro grande salto que tive que dar no código, que é o lado do servidor, por motivos de performance e principalmente custo, acabei migrando o servidor para rodar no Linux através do Wine, isso me permitiu fazer deploy automático (Launcher, Client e Server) apenas fazendo push para main, o server ficou em um container Docker, e os launchers se auto atualizam e também baixam updates para o client, inclusive o meu instalador acaba pesando apenas 80 MB pois ele só instala o launcher, e depois que abre a primeira vez ele baixa o client completo, que hoje deve estar em torno de 6 GB.
E POR FIM
Espero que esse relato ajude ou inspire quem também está se aventurando pelo código do Priston. Sei que muitos aqui já passaram (ou ainda estão passando kk) pelos mesmos desafios.
Agora estou na reta final para lançar a primeira temporada do KingTale. Se puderem dar uma força curtindo o vídeo, compartilhando ou deixando um feedback, já ajuda demais!
Fala galera, estou há algum tempo desenvolvendo essa refatoração do Priston e gostaria de compartilhar com vocês o que aprendi no caminho.
Vou começar pelo resultado, dêem uma olhada no vídeo e se puderem curtir e compartilhar, ajudaria demais!
Estou na reta final de desenvolvimento para lançar a primeira temporada.
https://www.youtube.com/watch?v=dR0hJ1Pnvpk
Acredito que assim como a maior parte do pessoal aqui, baixei diversas sources para tentar partir da mais completa, e, no meu caso, foi a source que o Draco (https://www.youtube.com/@dracogamesnft) disponibilizou no vídeo https://www.youtube.com/watch?v=ZRUWiXALoBc, queria desde já agradecê-lo por isso.
BACKGROUND
Eu já trabalhava com programação antes de começar a brincar na fonte do Priston, mas minha proficiência é, na verdade, com C#, eu até me habituei com C++, mas é impossível competir com a conveniência das IAs, então toda a manipulação de código foi feita por agentes como Codex, Claude, etc. Outro ponto importante é que esse não é o primeiro jogo em que eu trabalho, já desenvolvi um jogo para Steam (https://store.steampowered.com/app/4529570/Wave_43/?l=brazilian) e outros diversos que não terminei, e especificamente um deles acabou me dando uma boa bagagem que repliquei no Priston, que é esse aqui https://www.reddit.com/r/monogame/comments/1nqzveu/devlog_building_ashen_realms_a_25d_rpg_from/, inacabado também kk.
Como vocês podem notar o meu forte não é desenhar, como muitos, estou no aguardo da IA desenhar e animar de forma consistente.
A SOURCE
Como muitas das sources disponíveis hoje para baixar gratuitamente, essa também vinha com aquele combo: bugs, performance ruim, visualmente cru e sem features. Mas ainda assim, foi o melhor que eu consegui achar naquele momento, tudo "funcionava", e isso já era suficiente para começar.
O PASSO PARA TRÁS
Como diz o ditado, às vezes é necessário dar um passo atrás para conseguir dar dois à frente, isso nunca fez tanto sentido quando "eu" analisei (Claudinho da massa) o código pela primeira vez. E foi o que eu fiz, fiquei alguns meses sem implementar qualquer feature de gameplay e foquei apenas em refatorar, aproveitando para migrar de DX9 para DX11, e eu consigo resumir todo esse tempo de desenvolvimento em uma única palavra: Sofrimento kk
Mas, em algum momento eu consegui, após centenas de problemas e correções eu havia migrado e refatorado por completo o código do jogo.
O GRÁFICO



Ainda tem muita coisa que pode ser implementada, mas acredito ter chegado num ótimo nível visual, e foi aquele jogo inacabado que me indicou o norte da implementação do Priston. Naquele jogo eu precisei criar do zero uma engine para rodar o mesmo, e sim, eu poderia ter usado Unity, Godot, ou até mesmo Unreal, mas como um dev hardcore de code only eu fui para o MonoGame, e nele, é tudo feito na unha mesmo, e eu comecei a implementar na época em que as IAs ainda eram apenas chats, ou seja, tive muita ajuda mas também tive que aprender muita coisa, principalmente na parte de renderização, coisas como métodos de renderização (Forward, Forward+, Deferred, etc.), formas de iluminação, realtime, clustered, baked, e por aí vai.
O primeiro passo foi realizar uma integração com o ImGui para poder fazer ajustes finos de absolutamente tudo que eu implementava no jogo:
Depois de atualizar para o DX11, o primeiro passo foi fazer algo muito parecido com o que fiz naquele jogo, separar a renderização por fases, de forma que eu conseguisse enxergar separadamente a Albedo, Vertex, Normals, etc.. Veja isso:
Unlit
Normals:
E por aí vai..
O que eu implementei para alcançar esse visual foi basicamente:
PBR simplificado — materiais com resposta à iluminação mais realista, principalmente em personagens e armas.
Cascaded Shadow Maps (CSM) — sombras dinâmicas com 3 cascatas.
Baked Shadows — sombras pré-calculadas para o terreno.
Hybrid Shadows — combinação de sombras baked no cenário e dinâmicas nos personagens.
SSAO — Ambient Occlusion em espaço de tela.
Procedural Sky — sistema de céu procedural.
Water Rendering — novo sistema de renderização de água.
HDR Tone Mapping (ACES) — mapeamento de tons cinematográfico.
Color Grading (LUT) — ajuste de cores por tabelas de referência.
Bloom — iluminação difusa em áreas brilhantes.
Depth of Field (DOF) — desfoque baseado na profundidade da cena.
FXAA — antialiasing por pós-processamento.
SMAA — antialiasing com melhor preservação de detalhes.
TAA — antialiasing temporal.
AMD FSR 1.0 — upscaling espacial.
Dynamic Resolution Scaling — ajuste dinâmico da resolução visando manter o FPS-alvo, com integração ao FSR 1.0.
Terrain Painting — pintura de terrenos com diferentes materiais e texturas.
Materialize Editor — editor de materiais por categorias (grama, areia, pedra, madeira, folhagem e metal).
High-Resolution Terrain Textures — suporte a texturas de terreno de 256, 512 e 1024 pixels.
DDS BC1/BC7 Texture Compression — compressão otimizada de texturas.
O SERVIDOR
Para não deixar um tópico muito grande, eu finalizo com outro grande salto que tive que dar no código, que é o lado do servidor, por motivos de performance e principalmente custo, acabei migrando o servidor para rodar no Linux através do Wine, isso me permitiu fazer deploy automático (Launcher, Client e Server) apenas fazendo push para main, o server ficou em um container Docker, e os launchers se auto atualizam e também baixam updates para o client, inclusive o meu instalador acaba pesando apenas 80 MB pois ele só instala o launcher, e depois que abre a primeira vez ele baixa o client completo, que hoje deve estar em torno de 6 GB.
E POR FIM
Espero que esse relato ajude ou inspire quem também está se aventurando pelo código do Priston. Sei que muitos aqui já passaram (ou ainda estão passando kk) pelos mesmos desafios.
Agora estou na reta final para lançar a primeira temporada do KingTale. Se puderem dar uma força curtindo o vídeo, compartilhando ou deixando um feedback, já ajuda demais!
Valeu, galera!
Editado por Vieira