Ludovic comentou:
A alguns anos atrás eu iniciei um tópico assim, mas no caso eu já tinha definido tudo o que queria. Acho que falta informação aí amigo, afinal "Lógica de sistema tactics" é um assunto extremamente vasto.
O que você tem pronto?
E não entendi essa dos mapas, não é só criar um mapa no padrão do maker?? Procure aulas de mapeamento no RPG Maker ou explique melhor sua dúvida.
Se você é um iniciante, então sinto muito, você tem um loooonnnngo caminho pela frente até chegar ao ponto de criar algo assim, sendo que até hoje ninguém das américas conseguiu criar nenhum sistema do tipo tático. O único que presta mais ou menos é o Tomoaky SRPG para RMVX, mesmo assim tem erros demais que acabam tornando-o não viável. Infelizmente não tem este script para MV e de acordo a experiência com as outras engines vai demorar, mas não tanto quanto antigamente devido a rapidez com que o povo se adaptou ao Javascript.
A lógica é mover personagens num mapa limitado, sendo que cada personagem possui seu alcance de movimento diferenciado dos outros, alcance de ataque também diferente. A dificuldade fica por conta de duas coisas: O Pathfind que é o sistema que irá mover de forma inteligente os personagens e o sistema de inteligência artificial para fazer escolhas baseadas na estratégia do mapa em si. Eu criei um sistema tático em 2013 totalmente por eventos, mas infelizmente a inteligencia não ficou lá essas coisas, está 100% jogável e é o sistema do jogo Maker Zone.
Eu estarei aqui para desenvolver isso junto com você, daqui a alguns meses também vou fazer um projeto tático e para isso vou tentar criar este sistema.
Então ludovic, o que quis dizer com mapa foi de gerar um mapa quadradinho e talz, e a primeira vista eu não tinha intenção de fazer isso com MV em si, queria abstrair principalmente os conceitos como a Ellye fez para poder fazer isso em qualquer linguagem ou com qualquer engine. Sou bem novato sim nos makers e engines por isso estava querendo abstrair para tentar fazer isso para web, para rodar em browser, primeiramente em 2D bem chapado e depois talvez com SVG ou Canvas e dar alguma beleza ao todo.
Por isso falei em mapa, para começar com ele, pois acho que seria um bom inicio, saber ver as classes para criar o mapa depois algo para gerar ele, e gerar os terrenos de forma aleatória e talz, etc.
Espero que continue sim, ajudando e quem sabe podemos trazer isso sim para o MV e como você é mais experiente quando começar o seu deixe saber mais sobre e talz, pois para eu começar a fazer isso para o rpg maker eu vou ter que entender todos os esquemas (como os nomes Actors, Scene etc) e por hora nem sei onde encontrar isso.
Mas obrigado por tudo, espero ter esclarecido mais, e não fui tão específico pois acho que cada coisa pode funcionar em separado certo? tipo ter algo que gere o mapa, depois ter algo que cuide dos personagens, depois ter algo que cuide das habilidades etc.
Ellye comentou:
Eu realmente recomendo começar com algo menor; tentar começar com algo desse porte é meio frustrante e tal. Mas entendo também a empolgação de já querer fazer exatamente aquilo que realmente tem vontade.
De qualquer forma, vamos lá... abstraindo a maneira de implementação de um sistema Tactics típico, independente da engine.
Você vai precisar ter, ao menos:
- Um tipo de entidade que representarão os personagens na batalha, tanto os personagens do jogador quanto os inimigos. Usando a nomenclatura do RM, vamos chamar essa entidade de "Battlers", e mais especificamente vamos chamar os personagens do jogador de "Actors" e os inimigos de "Enemies". Essa entidade Battler precisará possuir todos os dados necessários sobre as unidades: atributos, informações de sprite, etc.
- Uma array ou outro tipo de lista com os Battlers presentes na batalha.
- Um tipo de entidade de "ação", que seria usada para criar ataques, skills, itens, etc. Cada battler teria sua lista de ações válidas.
- Um tipo de entidade que represente os tiles do mapa. Esse tipo de entidade precisa de atributos como o tipo de terreno, a altura do tile, e qualquer outro tipo de informação sobre tile.
- Uma array (ou outra forma de conjunto, claro) de Tiles, oordenada de forma a montar o mapa a partir dela.
- Algumas informações extras da iniciação da batalha em si, como a zona do mapa em que se pode iniciar unidades, tiles iniciais dos inimigos, objetivo de batalha, efeito de derrota, etc.
Ok... tudo isso são só os pré-requisitos específicos aqui, sem falar no básico para uma engine funcional (uma forma de mover entre cenas, um window manager, um input manager, etc, etc). Assumindo que já temos tudo isso:
- Assim que a Scene de batalha começa, precisamos ler a array de tiles e desenhar eles na tela a partir disso. Cada instância da entidade Tile vai dizer o tipo de terreno e a altura do tile, então desenhamos de maneira apropriada baseando nisso.
- Colocamos os inimigos em seus tiles iniciais e desenhamos seus sprites neles.
- Damos um highlight nos tiles válidos para deploy inicial das unidades do player, e abrimos a janela de Prompt para o jogador selecionar cada unidade e selecionar o tile onde ela irá ficar. Esse processo fica em loop até todas unidades terem sido selecionadas; após isso uma caixa de confirmação aparece para que o jogador inicie a batalha.
- Dentro da batalha, temos um loop de rounds. Cada round vai ter um turno do jogador e um turno dos inimigos. No turno do jogador, pegamos a array com os Battlers da party, organizamos por ordem de iniciativa, e para cada um deles damos um prompt de janela para o jogador dar input nos comandos.
- Um comando de "Move", por exemplo, precisaria calcular baseado na velocidade da unidade, e nos modificadores daquela unidade para os diferentes tipos de tile (e alturas), quais tiles são alcançáveis para essa unidade nesse turno, e dar highlight neles e deixa-los selecionáveis para movimento. Se a ação de movimento for então realizada, precisa ser aplicada a animação no sprite, com um pathing até o tile desejado, e atualizas as coordenadas nos atributos do battler.
- Similarmente, ao selecionar uma ação como "Attack" ou outras skills, o jogo precisaria calcular o range baseado nos atributos da Action e no mapa ao redor, e então deixar o jogador escolher qual tile dentro desse range pretende executar a ação. No caso da ação ser executada, precisa então executar as animações de sprite e calcular os efeitos, como danos, chances de status, etc - e depois calcular qualquer efeito colateral disso (se alguém ficou com 0 de HP, precisa ser removido do combate, ou se alguem tem counter-attack, precisa efetuar, etc).
- Após todos battlers do jogador agirem, o jogo passaria para o turno dos inimigos. Cada inimigo precisaria ter alguma forma programada para decidir qual ação tomar, ou talvez poderia ser usada uma AI geral básica para todos (algo extremamente básico seria: ande em direção a um oponente mais próximo até entrar em range para atacar, ataque se já estiver em range). Tudo aqui funcionaria mais ou menos igual ao turno do jogador, com a diferença que não haveria janelas de input (ao invés disso seriam decididos pela AI).
- Os rounds se repetiram em loop assim até que as condições de fim de batalha sejam preenchidas, checadas a cada fim de ação.
Ellye quando você diz entidade posso presumir que esteja falando em classe OO certo?
Agradeço muito a visão geral que você deu de tudo, eu vou ver por essas semanas e tentar desenvolver essa classe que faça o mapa, gere os tiles, tipo de terrenos e exiba isso nem que for com id ou números por hora e ai quando eu tiver isso no browser eu volto aki e ai podemos continuar pensando e abstraindo mais.
Obrigado pessoal
PS: Acho que vou criar isso tudo no Github também ai quando tiver o repositório eu aviso aqui também