"Não consigo ler nada..."
- Juntou-se
- 04 de Novembro de 2020
- Postagens
- 169
- Bravecoins
- 1.639
- Área
- Roteiro
- Motor de jogo
- RPG Maker MV
Olá, pessoal! Espero que estejam bem.
Ao experimentar ou iniciar o desenvolvimento de um novo projeto de RPG Maker, um aspecto pode ser debatido entre as pessoas e o próprio desenvolvedor em suas ideias de Game Design: mantenho o uso padrão de batalhas aleatórias, realizo modificações dentro deste recurso ou faço a criação de inicialização de batalhas com os eventos circulando pelo mapa? Eu imagino que isso não possa ser problema para você que saiba bem de seus princípios de desenvolvimento ou em casos de desafios e competições com um curto prazo de entrega, porém, pense no desenvolvedor que está indeciso ou não conhece uma forma eficaz de aplicar.
De qualquer forma, vamos as Dicas do Tigrão!
Ao experimentar ou iniciar o desenvolvimento de um novo projeto de RPG Maker, um aspecto pode ser debatido entre as pessoas e o próprio desenvolvedor em suas ideias de Game Design: mantenho o uso padrão de batalhas aleatórias, realizo modificações dentro deste recurso ou faço a criação de inicialização de batalhas com os eventos circulando pelo mapa? Eu imagino que isso não possa ser problema para você que saiba bem de seus princípios de desenvolvimento ou em casos de desafios e competições com um curto prazo de entrega, porém, pense no desenvolvedor que está indeciso ou não conhece uma forma eficaz de aplicar.
De qualquer forma, vamos as Dicas do Tigrão!
Batalhas Aleatórias: Clássicas, mas Limitadas
Antes de Lunar: The Silver Star e Chrono Trigger, RPGs antigos usavam batalhas aleatórias principalmente por limitações técnicas. Com o hardware da época, era mais fácil gerar combates de forma aleatória, usando a movimentação do jogador e uma fórmula de passos para determinar quando uma batalha começaria. Isso economizava memória e processamento, já que não era necessário desenhar ou gerenciar inimigos visíveis no mapa. Além disso, as batalhas aleatórias garantiam um fluxo constante de encontros, mantendo a dificuldade e o progresso do jogador balanceados sem a necessidade de eventos complexos ou inimigos visíveis.
Suponhamos que o desenvolvedor se mantenha na forma padrão, ou clássica como preferir: após configurar o mapa com a quantidade de Passos para Encontro, Tropas de Encontros, Frequências e Áreas (Mapa Inteiro ou Especificar por ID de Região), as batalhas aleatórias estão prontas. O desenvolvedor faz os testes e/ou solicita a um colega testar a proporção de tempo e passos entre a locomoção livre e a inicialização da batalha aleatória. Considere que o tempo de locomoção nos testes foi curta, em outras palavras, a taxa de batalhas aleatórias foi alta, seja pela baixa quantidade de Passos para Encontro comparado ao tamanho do mapa, seja por outro motivo plausível.
Para os desenvolvedores que não conhecem um pouco de programação ou lógica de programação: a fórmula padrão consiste no uso da quantidade de Passos para Encontro, inserida nas configurações do mapa.
Javascript:
// (Exemplo) RPG MAKER MV - Linhas 7567 até 7570 de rpg_objects.js
Game_Player.prototype.makeEncounterCount = function() {
var n = $gameMap.encounterStep();
this._encounterCount = Math.randomInt(n) + Math.randomInt(n) + 1;
};
“Isso significa que, quando o Contador de Encontros é reiniciado (por exemplo, após uma batalha), um número aleatório é escolhido entre 1 e (aproximadamente) o dobro do valor de "Passos" do mapa. Se você definir o valor médio de Passos por Encontro como 40 nas configurações do mapa, então será escolhido um número aleatório entre 1 e 80, e assim que você tiver caminhado essa quantidade de passos, um Encontro será iniciado.” - Wavelength, de Forums RPG Maker Web
Javascript:
// RPG MAKER VX Ace - Linhas 203 até 206 de Game_Player
// Antes
def make_encounter_count
n = $game_map.encounter_step
@encounter_count = rand(n) + rand(n) + 1
end
// Depois
def make_encounter_count
n = $game_map.encounter_step
@encounter_count = (n / 1.5) + (rand(n) / 2)
end
Javascript:
// RPG MAKER MV - Linhas 7567 até 7570 de rpg_objects.js
// Antes
Game_Player.prototype.makeEncounterCount = function() {
var n = $gameMap.encounterStep();
this._encounterCount = Math.randomInt(n) + Math.randomInt(n) + 1;
};
// Depois
Game_Player.prototype.makeEncounterCount = function() {
var n = $gameMap.encounterStep();
this._encounterCount = (n / 1.5) + (Math.randomInt(n) / 2);
};
Javascript:
// RPG MAKER MZ - Linhas 8260 até 8263 de rmmz_objects.js
// Antes
Game_Player.prototype.makeEncounterCount = function() {
const n = $gameMap.encounterStep();
this._encounterCount = Math.randomInt(n) + Math.randomInt(n) + 1;
};
// Depois
Game_Player.prototype.makeEncounterCount = function() {
const n = $gameMap.encounterStep();
this._encounterCount = (n / 1.5) + (Math.randomInt(n) / 2);
};
Encontros por Eventos: Mais Controle e Imersão
Os encontros por eventos no mapa, por outro lado, permitem que o jogador veja os inimigos e escolha interagir com eles, criando uma experiência mais estratégica e imersiva. Além disso, esse método permite uma maior personalização das batalhas, como evitar encontros em áreas específicas ou criar inimigos que perseguem o jogador.
Vamos à criação de um evento simples de encontro.
Este evento controla uma batalha com o uso de uma tropa específica ou qualquer tropa configurada no mapa (Mapa Inteiro ou Especificar por ID de Região), que ocorre quando o jogador interage ou se aproxima de um inimigo. Caso o jogador vença, o inimigo "desaparece" com um efeito visual e é apagado. Se o jogador fugir, o inimigo permanece no mapa, mas com um efeito temporário, ficando semitransparente e podendo atravessar o jogador (e vice versa) por um tempo antes de se recuperar.
Eu recomendo utilizar uma Rota Predefinida, configurada de uma forma que não tenha aproximação a paredes e tetos, preferencialmente se movimentando apenas dentro de uma ID de Região. A Switch 0001 (Inactive Event) com condição de ativa e inativa serve para que o evento não inicie seus comandos novamente (sendo ele mesmo ou o jogador fazendo a interação entre eles) caso esteja no "modo semitransparente" após o jogador fugir da batalha.
Em cada saída de mapa com encontros por eventos, sempre desative essa switch no evento de teletransporte.
Eu recomendo utilizar uma Rota Predefinida, configurada de uma forma que não tenha aproximação a paredes e tetos, preferencialmente se movimentando apenas dentro de uma ID de Região. A Switch 0001 (Inactive Event) com condição de ativa e inativa serve para que o evento não inicie seus comandos novamente (sendo ele mesmo ou o jogador fazendo a interação entre eles) caso esteja no "modo semitransparente" após o jogador fugir da batalha.
Em cada saída de mapa com encontros por eventos, sempre desative essa switch no evento de teletransporte.
Código:
◆Se:Inactive Event é ON
◆
:Se Não
◆Esperar:12 quadros
◆Processamento de Batalha:Igual a Encontro Aleatório
:Se Vencer
◆Esperar:25 quadros
◆Definir Rota de Movimento:Este Evento (Esperar)
: :◇ SE:Collapse1 (40, 150, 0)
: :◇ Esperar:8 quadros
: :◇ Opacidade:204
: :◇ Esperar:5 quadros
: :◇ Opacidade:153
: :◇ Esperar:5 quadros
: :◇ Opacidade:102
: :◇ Esperar:5 quadros
: :◇ Opacidade:51
: :◇ Esperar:5 quadros
: :◇ Opacidade:0
◆Esperar:20 quadros
◆Apagar Evento
◆
:Se Fugir
◆Esperar:20 quadros
◆Definir Rota de Movimento:Este Evento
: :◇ Ativar Switch:0001
: :◇ SE:Attack2 (50, 150, 0)
: :◇ Opacidade:120
: :◇ Atravessar ON
: :◇ Animação Parado OFF
: :◇ Esperar:240 quadros
: :◇ SE:Attack2 (50, 150, 0)
: :◇ Animação Parado ON
: :◇ Atravessar OFF
: :◇ Opacidade:255
: :◇ Desativar Switch:0001
◆
:Fim
◆
:Fim
Caso queiram um tópico mais avançado com interações diferentes relacionados a eventos de encontro, comentem abaixo. Comentem também que métodos de inicialização de batalha você utiliza ou já utilizou nos projetos.