Ir para o conteúdo

Desenvolvimento de MMORPG 2D com Engines leves

Réplica destacada

Publicou

Há alguns anos, conheci uma game engine 2D chamada Eclipse Origins. Naquela época, eu já tinha uma vontade enorme de criar jogos, e essa engine só fez aumentar ainda mais esse desejo — especialmente por ser voltada para MMORPGs.

No entanto, lá por 2013/2014, alguns obstáculos acabavam me fazendo desistir pouco depois de começar:

  1. As limitações da engine: Por ter sido desenvolvida com poucos recursos, muitos dos recursos que eu queria implementar precisariam ser criados do zero. Isso exigia um nível de conhecimento e dedicação que eu ainda não tinha na época.

  2. A programação: Comecei a me aventurar no desenvolvimento de software em 2012, mas com 14 anos eu não conseguia entender praticamente nada do código-fonte da engine — que, aliás, era open source (esqueci de mencionar isso). O código era escrito em Visual Basic 6, uma linguagem que já estava bem ultrapassada, lançada em 1998.

  3. A arte: Nunca tive muito talento com arte, e apesar da pixel art parecer “simples” à primeira vista, ela exige horas de dedicação para se chegar a algo realmente agradável. Agora imagine criar arte para um jogo inteiro, com diversas animações... Eu nunca consegui me dedicar o suficiente, porque não era realmente minha praia. Isso se tornava um grande obstáculo. E mesmo com os recursos gratuitos disponíveis na internet, era difícil encontrar algo que combinasse visualmente — e, quando encontrava, sempre faltava alguma animação importante, como ataque, magia, etc.

  4. A criatividade: Esse era outro ponto que sempre me travava. Eu conseguia imaginar o começo e o fim da história, mas o meio... o meio era sempre um buraco. Meus personagens acabavam presos nesse limbo sem desenvolvimento, sem rumo, e isso me desmotivava.

Desde então, fiz várias novas tentativas, mas acabava esbarrando nos mesmos problemas antigos — e em novos também. Às vezes o código-fonte nem compilava, outras vezes já vinha com erros que eu não sabia resolver, além dos desafios constantes com a arte.

Fuçando aqui nas profundezas do meu Facebook, acabei encontrando duas capturas de tela de 2014...

Essa primeira é o mapa inicial — e provavelmente o único que existiu.

FB_IMG_1745410067195.jpg

Essa já é em outra tentativa, com a interface completa da Eclipse Origins.

FB_IMG_1745410426966.jpg

Com o passar dos anos, fui desanimando cada vez mais com essas engines — não necessariamente por causa delas, mas por frustração comigo mesmo, por não conseguir fazer o que eu queria na época.

Em 2019, um novo projeto surgiu na minha vida: a Intersect Engine. Ela me lembrou bastante a Eclipse Origins, mas parecia ser bem melhor — com ênfase no “parecia”. A engine realmente se mostrava mais moderna e bonita, com várias mecânicas legais já prontas. No entanto, dois pontos acabaram me impedindo de continuar:

  1. Falta de performance: A engine não era muito otimizada, travava com frequência, mesmo em computadores mais potentes;

  2. Código fechado: Ela não era open source, o que me impedia de fazer qualquer tipo de alteração mais profunda.

Na época, ainda havia uma promessa do criador da Intersect de torná-la open source, mas por um bom tempo isso parecia que nunca iria se concretizar. Felizmente, essa promessa foi cumprida. Desde então, embora eu não tenha acompanhado de perto o desenvolvimento da engine, percebo que houve uma grande evolução graças à comunidade.

Quando conheci a Intersect, ela estava na versão Beta 6.0. Hoje, está na Beta 8.0. À primeira vista, parece pouca coisa — só dois números a mais —, mas posso garantir que a diferença entre essas versões é imensa. A engine está em outro patamar.

Pensando nisso, decidi tentar mais uma vez criar algo com ela. Não quero colocar nenhum tipo de pressão ou compromisso que possa me frustrar depois, então estou indo com calma, sem grandes expectativas.

Abaixo vou mostrar o que estou planejando fazer e o que já consegui realizar com essa nova versão da Intersect Engine:

Roadmap para um provável Alpha:

  1. Atualizar o login

    1. Remover login por username;

    2. Adicionar login por email;

  2. Adicionar o nível de acesso ao lado do nome de jogadores; Ex: [ADM]Ericles

    1. Ao lado do nome no jogo;

    2. Ao lado do nome no chat;

    3. Ao lado do nome na janela de informações;

    4. Ao lado do nome na janela de grupos;

    5. Ao lado do nome na janela de guilda;

  3. Trocar os botões de ação da interface de grupos

    1. Remove botões de mensagem privada e deletar amigo;

    2. Adicionar TargetContextMenu como botão de ação;

      1. Adicionar opção de enviar mensagem privada;

      2. Adicionar botão de excluir amigo;

      3. Remover botão de troca;

      4. Remover botão de adicionar amigo;

  4. Alterar Guilda

    1. Aumentar interface;

    2. Adicionar Level e EXP da guilda;

    3. Adicionar campo para mensagem geral da guilda;

    4. Adicionar campo para mensagem pessoal dos membros (não vou fazer por enquanto);

    5. Adicionar campo com último login do membro;

    6. Adicionar botão de remover membro;

    7. Adicionar funcionalidade de aumento da capacidade de membros baseado no nível da guilda;

  5. Missões

    1. Adicionar missões de guilda;

    2. Criar missões iniciais da história e secundárias;

  6. Criar mapas iniciais;

  7. Criar itens iniciais.

Esse Roadmap está longe de estar completo para um alpha, mas já é um bom ponto para me guiar. A seguir adicionei algumas imagens do que já tenho pronto:

Essa captura foi tirada logo após conseguir adicionar o rank ao lado do nome dos jogadores dentro do jogo:

image.png

Essa foi após a adição do rank no chat. Acabei tirando o rank e o nome do usuário das mensagens de announcement, pois preferi sem:

image.png

Depois de adicionar o rank na lista de amigos (só funcionou para amigos online por enquanto) e aqui também adicionei o TargetContextMenu como botão de ação. Atualmente não tenho mais a versão antiga para manda como comparação, mas eram apenas dois botões: um de mensagem privada com um ícone de pergaminho e um outro para excluir o amigo com um ícone de X

image.png

Também adicionei o rank do jogador ao lado do nome dele na tela de grupos:

AD_4nXcCg5EvsW5jiBNxppgzJEiO3SnrmfpNUg-sLT2ROgcC7S0TewRFd6IwocrJt-pDEAqAi3cRBSbcKmbFGEcZ_uOvFMn-stATvu2BsCj7i8Zfu-VcRuMdthiVP2pFHBdRZazZpH7qUA?key=8zYxgSZOmTo39f9jcYfURTHh

A próxima atualização que pretendo fazer é na tela de guilda. Atualmente ela é assim:

image.png

Esse é um protótipo de como planejo que seja a nova tela de guilda com tudo que pretendo fazer:

AD_4nXeQrT7tRVXWnOKPMKDwFAwzB1t9heiJB7en1AFHp4GSeyldf0Tz4pxiJAOOB5obMY9ipkOGBtCGswRzsxojLozd05PghZiaY-snvYh5t9ZuMfFcsUQR0y8VGnOTVO79_j6jvCftdA?key=8zYxgSZOmTo39f9jcYfURTHh

Caso queiram, posso trazer uma explicação mais detalhada de tudo o que fiz até agora — mas vamos deixar isso para outro tópico, porque este aqui já ficou bem extenso.

Editado por Ericles

  • Administradores

Caraca, que nostalgico! Eu tive uma experiência bem parecida, mas foi com o RPG Maker XP. Uma das minhas vontades, é tornar essa comunidade um espaço para que os usuários divulguem recursos de desenvolvimento de jogos, assim como também possam publicar seus trabalhos. O marketing da comunidade deve começar em Maio, e esse é um dos caminhos que pretendo seguir!

Eu particularmente adorava passar horas e horas nos fóruns de desenvolvimento buscando por sistemas e assets para os meus jogos. Adorei sua história!

War. War never changes.

  • Autor
1 hora atrás, Astronis disse:

Eu particularmente adorava passar horas e horas nos fóruns de desenvolvimento buscando por sistemas e assets para os meus jogos.

Eu passava horas também. Inclusive, conversando com o jcesar hoje no Discord ele me lembrou do AldeiaRPG, eu morava nesse fórum. Nunca comentava nada, mas tava sempre de olho no que a galera comentava e nos assets e scripts que eles publicavam. Era um tipo de guilty pleasure, sabe? kkkkkkkkkkk

  • Autor

Já adicionei uma boa parte do que vou precisar para a nova interface da guilda no banco de dados. Por enquanto só coloquei o nível da guilda na interface, com intuito de teste.

Descobri que o back envia os parâmetros da guilda separadamente e o front coloca todas essas informações no objeto do Player (achei isso muito absurdo). Depois vou ver uma maneira melhor de fazer isso, mas provavelmente vou precisar adicionar um novo Packet, que será enviado em algum momento depois do login. Talvez somente quando o usuário abrir a interface de guilda? Ainda não sei uma maneira boa de fazer isso.

Em um tópico futuro explico direitinho o que são os packets, mas basicamente o cliente e o servidor ficam trocando informações através de Packets (pacotes), cada ação possui um Packet (até mesmo as de abrir ou fechar uma interface).

image.png

  • Autor

Uma coisa que acabei não mencionando no tópico original é que, além de ser uma engine mais moderna em comparação à Eclipse Origins, a Intersect foi desenvolvida em C#. Levando em conta toda a bagagem de conhecimento que adquiri desde 2014 — e o fato de já ter familiaridade com a linguagem —, ficou muito mais fácil entender o que já está implementado e identificar exatamente o que preciso para desenvolver minhas próprias funcionalidades.

  • Administradores
18 horas atrás, Ericles disse:

Eu passava horas também. Inclusive, conversando com o jcesar hoje no Discord ele me lembrou do AldeiaRPG, eu morava nesse fórum. Nunca comentava nada, mas tava sempre de olho no que a galera comentava e nos assets e scripts que eles publicavam. Era um tipo de guilty pleasure, sabe? kkkkkkkkkkk

Curiosamente, ainda tenho acesso ao meu perfil da AldeiraRPG. Apesar de não interagir lá, também vivia de olho no que a galera comentava, haha!

Pô, não conhecia essa engine. Quando puder, solta um teste aí para a gente ver como tá ficando. Acho que a área de Arquivos vai ser bem útil para esse tipo de coisa no futuro.

War. War never changes.

  • Autor
18 minutos atrás, Astronis disse:

Curiosamente, ainda tenho acesso ao meu perfil da AldeiraRPG.

Acabei de relembrar minha conta do aldeia, bateu até uma nostalgia.

22 minutos atrás, Astronis disse:

Quando puder, solta um teste aí para a gente ver como tá ficando.

Depois vou tentar pegar os créditos do google para criar uma vm para hospedar. Se tudo der certo mês que vem já dá pra ter um pré alfa

Editado por Ericles

  • Autor

Hoje não foquei muito no game devido a algumas outras coisas que precisei fazer — até que procrastinei bastante, na verdade. Porém até que saiu bastante coisa nova. Essa é a interface original do Intersect, que mostrei ontem:

19 horas atrás, Ericles disse:

image.png

Hoje consegui mudar completamente a interface com os dados de criação, fundador e level já integrados com o servidor e funcionando perfeitamente (até onde testei kk)

image.png

Não gostei muito das cores dessa interface nova, mas não sou artista e é assim que vai ficar por um bom tempo. Mas no geral, gostei do resultado.

  • Administradores
16 horas atrás, Ericles disse:

Não gostei muito das cores dessa interface nova, mas não sou artista e é assim que vai ficar por um bom tempo. Mas no geral, gostei do resultado.

Acho que você está indo bem demais sem ser artista, haha! É aquilo, a gente precisa partir de algum ponto para aprimorar um conhecimento.

War. War never changes.

  • Autor

O dia hoje foi de sofrência. Meu objetivo era terminar essa interface ainda hoje, porém vou ficar devendo algumas coisas...

Acabou que personalizar a linha com as informações do usuário foi mais complexo do que parecia. Aquele ContextMenu com as opção de guilda foi o que mais deu trabalho — precisei reescrever todo o código umas três vezes. Em fim, o pior passou. Agora preciso resolver a data, que vai mostrar o último login do jogador (ainda preciso ver essa informação existe no banco) e também preciso resolver problemas desse ContextMenu.

  1. Adicionar labels de cada coluna (Nome | Última vez Online | Status | Ações));

  2. Adicionar e formatar a data de último login do jogador;

  3. Remover o ContextMenu quando o usuário for o próprio jogador;

  4. Remover opções do ContextMenu quando o jogador não possuir tal permissão;

  5. Adicionar as tags de Guilda e AccessLevel ao lado do nome do jogador. Ex: [Líder][ADM]feericles

image.png

  • Autor

Pra dar uma ideia da dificuldade de editar a interface da Intersect, vou enviar uma captura do código.

Basicamente, cada interface do jogo possui um arquivo JSON com muitas informações para cada componente. A captura a seguir representa apenas o Action button que adicionei ao final da linha de usuário na interface de guilda. Lembrando também que esse arquivo não é da interface de guilda, é apenas da linha que recebe as informações do usuário. Outra coisa importante de informar é que o JSON daquele ContextMenu também não é nesse arquivo, é em um que precisei criar do zero, pois não existia na Intersect ainda.

image.png

P.s.: Ainda estou desvendando uma parte das informações desses arquivos de interface. A documentação oficial no site da engine é bem rasa.

  • Autor
4 horas atrás, Ericles disse:
  1. Adicionar labels de cada coluna (Nome | Última vez Online | Status | Ações));

  2. Adicionar e formatar a data de último login do jogador;

  3. Remover o ContextMenu quando o usuário for o próprio jogador;

  4. Remover opções do ContextMenu quando o jogador não possuir tal permissão;

  5. Adicionar as tags de Guilda e AccessLevel ao lado do nome do jogador. Ex: [Líder][ADM]feericles

Ainda consegui concluir quase todos os pontos. Por enquanto falta apenas adicionar o texto informativo para cada coluna. No nome do usuário, preferi deixar apenas uma das tags, ficou muito grande quando envolvia mais de uma. Mantive a tag da guilda para quem só tem ela e mantive a tag de AccessLevel para quem a tem, com prioridade nessa última.

A data do último login foi bem fácil, ela já existe no banco e na entidade do usuário.

image.png

  • Autor
2 horas atrás, Astronis disse:

Ta localizando tanto em en-us como em pt-br?

Na verdade não estou localizando nada. A engine já veio com muita coisa aparentemente localizada, porém não mexi nisso ainda. O que já havia eu mantive em inglês, coisas novas estou colocando em português mesmo. Quando eu conseguir ver direitinho essa parte de localização vou começar a localizar tudo. Se for muita coisa, irei lançar o alfa com a interface em inglês mesmo e, provavelmente, abrir um repositório público pra qualquer pessoa poder colaborar. Mas definitivamente o foco inicial será apenas o português.

  • 3 weeks later...
  • Autor

Passei muito tempo decidindo o que fazer e ainda mais tempo com foco em outras coisas, como meu TCC, por exemplo. Porém consegui avançar bastante. E como já faz bastante tempo que não posto nada aqui, resolvi trazer esse update.

Aqui estão algumas coisas que consegui fazer nesse período (a maioria na madruga de ontem pra hoje kk):

  • Integrei a mensagem de boas vindas na tela da guilda;

  • Coloquei a mensagem de boas vindas para aparecer como um aviso sempre que o usuário logar;

  • Adicionei "Guild Quests" na base do jogo;

  • Implementei EXP de guilda (aquele NPC pelado era o teste para isso);

  • Adicionei uma mensagem que é enviada a todos os membros online para avisar que a guilda subiu 1 nível;

  • Também mexi na ordem que os equipamentos aparecem na aba de personagem, estava uma ordem muito aleatória. Isso parece simples falando, mas me deu uma certa dor de cabeça;

  • Adicionei um novo evento para a adição de EXP de guilda (é o que esse NPC pelado executa para dar o EXP). Esse evento funciona para qualquer uso em mapa, monstros, NPCs e quests.

Não está relacionado a algo que eu fiz, mas um negócio bem interessante que já encontrei pronto no código fonte é a possibilidade de instancias (aquele portal ali). Basicamente já é possível criar instancias individuais, em grupo ou em guilda. Isso já me dá algumas ideias bem interessantes e talvez eu consiga adicionar algum novo tipo de instancia no futuro, se realmente for necessário.

Então, do check list original de guilda, me faltam apenas dois pontos: 1) finalizar a funcionalidade de mensagem de boas vindas (ainda preciso adicionar uma maneira de editar, provavelmente será por comando); e 2) aumentar a capacidade de membros da guilda baseada nos níveis.
Terminando isso já posso avança no desenvolvimento da história e criação dos mapas.

O alfa tá vindo

image.png

Junte-se à conversa

Você pode publicar agora e se registrar mais tarde. Se você tiver uma conta, entre agora para publicar com sua conta.

Visitante
Responder a este tópico...

Informação importante

Olá, gamer! Bem-vindo(a) à Society. Ao continuar navegando e utilizando nossa comunidade, você concorda com nossos Termos de Uso, nossa Política de Privacidade e com as Regras que regem o bom uso deste espaço. Utilizamos cookies junto ao seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que está tudo bem para você em continuar utilizando nosso website.