The Seed: Tentando explicar em poucas palavras o meu framework para GameDev
Introdução
Se você assistiu o anime Sword Art Online deve conhecer o conceito de Sistema Cardinal apresentado no anime, ele seria como a lógica do Sword Art Online abstraído a uma inteligencia artificial que regularia tudo que ocorre dentro do jogo, desde criação de mobs e missões, gerenciamento de recursos do jogo ... etc.
Sem querer dar spoiler, toda fundação dos novos games MMO do anime, utilizam uma versão menor do sistema cardinal em um conjunto de programas nomeados The-Seed. E esse é ponto em que estou tentando alcançar no meu framework.
Atiçando, e reexplicando o óbvio
Obviamente trazer todo um conceito ficticio pra vida real é impossível pois muitas coisas são apenas liberdades artisticas do seu próprio autor mas isso me instigou a tentar fazer algo remotamente similar, e eu comecei a faze - lo.
Por estupidez ou arrogancia minha, tive que tomar muitas reviravoltas de tragetória como por exemplo:
- Tentei implementar o Sistema Cardinal enquanto estava implementando o Cardinal System.
Basicamente tentei chegar ao fim sem passar pelo meio: explico melhor neste meu post.
E usei a linguagem objetivo para tentar produzir o framework, mesmo sabendo que a linguagem objetivo era muito mais rigida em suas regras e tive que fazer uma substituição.
Estava usando c++ para produzir o framework com generators/templates e um cli descente (like rails) e só depois de uma prototipação pude ver que estava errado. A partir dai foi hora de mudar estrategia e usar Ruby. Explico melhor neste post.
E pois mais que eu quisesse que a resposta do The-Seed fosse 100% feito a mão, eu sabia que era uma tarefa impossível, então usei o bom e velho (e agora impreciso) chatgpt para tirar algumas dúvidas. "Não, ele não está ajudando em 1 linha do meu código" mas, ele me ajudou a enxergar que para ter uma lógica de jogo que funcione corretamente em MMO eu teria que fazer auxilio de outras bibliotecas externas em c++ para o código:
- Boost
- Spdlog
- Crow
Bibliotecas em C++
- Boost
Se você é programador C++ e não conhece o Boost, eu me pergunto seriamente que ferramentas você usa, caso seja um programador Java saiba que boost está para c++ assim como Apache está para Java.
O boost nos oferece várias ferramentas para trabalhar com diversos aspectos, como algortimos mais eficientes, grafos, ponteiros inteligentes, programação generica ... etc.
Ele é basicamente um ecossistema que substitui com sucesso as bibliotecas stl padrão do c++
- Crow
O Crow é um framework web em C++, mas a utilidade que vem sendo mais util a fim de adiciona - lo ao meu é a capacidade de criar websockets em C++, e sim precisa ser C++, primeiro que eu quero um binário único sendo gerado com gasto relativamente baixo de memória.
- Spdlog
É uma ferramenta relativamente nova para se fazer logging em c++, mas é muito eficiente naquilo que se propõe a fazer, então não vejo motivo para não usa - la.
Aonde estamos neste exato momento
Já criei uma gem ruby para o framework, desenhei as arquiteturas que pretendo usar. (É alguma forma de microserviços com diversas DLL rodando em multiprocessos comunicados via named pipes).
Provavelmente usando internamente alguma forma de green threads (uma possível versão do OTP implementado para C++).