A GAZETA DE ALGOL

"O morto do necrotério Guaron ressuscitou! Que medo!"

Ferramentas do usuário

Ferramentas do site


jogos:ps1:desconstruindo_ps1

Essa é uma revisão anterior do documento!


Desconstruindo Phantasy Star I

Nota do Orakio: Há alguns anos, o amigo René “Killgama” Daré anunciou na Lista de Algol um ambicioso projeto de desconstrução do primeiro Phantasy Star. Seu intuito era o de descobrir como o jogo funcionava através da análise detalhada do código.

O René foi postando suas descobertas na lista, e a gente foi ficando cada vez mais maravilhado. A ideia de compilar todo aquele conhecimento foi sendo adiada, até que finalmente o René teve a paciência de organizar tudo de uma forma que todos pudessem entender. Com a palavra, nosso amigo René!

Toda batalha no Phantasy Star funciona através de ataques e defesas sorteadas a cada turno da batalha. Quando aparece um inimigo, parte do código de inicialização cuida de desativar coisas da luta anterior (ex: parede mágica, força extra nos personagens e inimigo) e outras coisas. Nesse momento, o código de inicialização jogo calcula a ordem de ataque, tanto de inimigos quanto de personagens. Lembrando que são 4 personagens (Alis, Myau, Odin e Lutz) e no máximo 8 HPs inimigos, como algumas aparições do SWORM.

Em todos os turnos, uma das primeiras coisas que o jogo faz é definir (de forma totalmente aleatória) a sequencia de ataque de inimigos e personagens do time. Assim pode ser que o inimigo comece primeiro ou que um personagem comece primeiro.

Durante os ataques de um dos personagens do time, os valores são processados assim:

  1. Pega o valor do ATK do personagem que está atacando;
  2. Ajusta o valor de ATK utilizando um valor gerado aleatoriamente. Esse ajuste é feito com o objetivo de reduzir o valor de ATK aleatoriamente, de modo que permaneça pelo menos 3/4 do valor original. Supondo um ATK de 180, 3/4 desse valor é 135, então o valor de ATK a ser utilizado para calcular o dano no inimigo vai ser algo entre 135 e 180, recalculado aleatoriamente cada vez que o personagem ataca;
  3. Pega o valor de DEF do inimigo que está recebendo o ataque;
  4. Ajusta o valor de DEF utilizando um valor gerado aleatoriamente. Esse ajuste é feito com o objetivo de reduzir o valor de DEF aleatoriamente, de modo que permaneça pelo menos 3/4 do valor original. A regra é idêntica a utilizada para calcular o ATK do personagem;
  5. Utilizando-se os valores ajustados, faz a conta DEF-ATK;
  6. Se ATK > DEF, subtrai a diferença do HP do inimigo;
  7. Se (DEF-ATK) < 16, o jogo gera outro numero aleatorio para o ATK ajustado. Esse valor gerado vai ter no máximo o valor do nivel do personagem e no mínimo zero. Então o novo valor é subtraido do HP do inimigo;
  8. Se (DEF-ATK) >= 16, o jogo verifica se a diferença é par ou impar. Se for ímpar, é realizado o mesmo processo de recalcular o ATK com valores entre zero e o nível do personagem. Se o resultado for um número par, o monstro defende o ataque;
  9. Se o HP do inimigo ficar zerado, o inimigo morre.

A lógica é a mesma quando o inimigo está atacando, e em caso de defesa maior que ataque (passos 7 e 8) é utilizado o nível do personagem para calcular o dano do inimigo, já que os inimigos não possuem níveis.

Essa redução aleatória nos valores de ataque e defesa provavelmente foram colocados pelo programador do jogo para dar um efeito mais realista. Algumas vezes o ataque não vai ser tão bom quanto outras e a defesa também pode vacilar deixando o oponente aplicar um golpe mais certeiro.

Você deve estar pensando porque alguém criaria uma regra pra verificar se a diferença entre ataque ou defesa é par ou ímpar. Realmente a descrição que fiz está muito técnica, então vou explicar melhor.

A regra de verificar se a diferença (DEF-ATK) é par ou ímpar apenas faz com que o jogo não permita que defesas sejam 100% garantidas em caso de DEF maior que ATK. Na prática isso significa que teoricamente as defesas falham em 50% das vezes. O percentual exato vai depender de outras questões técnicas, como por exemplo a qualidade do gerador de números aleatórios utilizados para ajustar o DEF e o ATK. Se o gerador apresentar uma tendência de produzir mais números pares do que ímpares por exemplo, esse percentual não será 50%.

Para exemplificar tudo isso, considere esta batalha do grupo contra um WT.DRAGON.

Ataque Quem Ataca ATK Base ATK Efetivo DEF Base DEF Efetivo Diferença Dano Efetivo
1 WT.DRAGN 180 155 193 189 34 0
2 NOAH 85 75 104 92 17 -22
3 ODIN 93 81 104 92 11 -17
4 ALIS 116 106 104 103 -3 -3
5 MYAU 116 115 104 81 -34 -34
6 WT.DRAGN 180 139 188 171 32 0
7 ALIS 116 114 104 102 -12 -12
8 NOAH 85 77 104 95 18 0
9 WT.DRAGN 180 143 188 184 41 -1
10 MYAU 116 90 104 90 0 -18
11 ODIN 93 74 104 89 15 -18
12 ALIS 116 87 104 96 9 -22
13 NOAH 85 66 104 82 16 0
14 MYAU 116 106 104 92 -14 -14
15 ODIN 93 90 104 101 11 -9
16 WT.DRAGN 180 144 188 183 39 -4
17 ALIS 116 89 104 84 -5 -5
18 ODIN 93 69 104 95 26 0
19 MYAU 116 105 104 82 -23 -23
20 WT.DRAGN 180 157 188 173 16 0
21 NOAH 85 74 104 99 25 -10

Alguns pontos importantes:

  • O ATK e DEF efetivo é recalculado em cada ataque, nunca sendo inferior a 3/4 do original;
  • Um valor positivo de diferença entre ATK e DEF significa que o valor efetivo de DEF é maior que o ATK, ativando a função que recalcula o dano em função do nível do personagem;
  • A ordem de ataque é aleatória, conforme já explicado;
  • Valores positivos e pares de diferença entre ATK e DEF resultam em um dano efetivo igual a zero, o que na prática significa que o inimigo ou o personagem se defende do ataque;
  • Valores positivos e ímpares de diferença entre ATK e DEF resultam no recálculo do dano com base no nível do personagem. Nessa batalha o nível de todos os personagems é o máximo (30);
  • Valores negativos de diferença entre ATK e DEF resultam em um dano efetivo direto igual ao valor da diferença, sendo subtraído do HP do personagem ou inimigo.

Quando a mágica HELP (MYAU) é utilizada, o valor efetivo de ATK do personagem que recebeu a magia é cerca de 50% mais elevado que o valor base. De maneira semelhante, quando a mágica TERR (MYAU) é utilizada, o inimigo passa a ter um valor de ATK efetivo cerca de 25% inferior ao valor base.

O WERE BAT quando está com muita raiva também fica com seu ATK elevado em cerca de 50% do valor base, como se ele tivesse utilizado a mágica HELP nele mesmo.

Veja o exemplo de parte da batalha contra o DARKFALZ, onde Myau usou a mágica HELP em ALIS, fazendo seu valor de ATK efetivo ficar mais elevado que o valor base. A mágica só foi utilizada a patrir do ataque número 15, cujos valores estão marcados em negrito.

Número Quem Ataca ATK Base ATK Efetivo DEF Base DEF Efetivo Diferença Dano Efetivo
1 DARKFALZ 255 197 188 157 -40 -40
2 NOAH 85 79 150 138 59 -29
3 DARKFALZ 255 226 230 205 -21 -21
4 MYAU 116 108 150 143 35 -13
5 ALIS 116 102 150 144 42 0
6 DARKFALZ 255 226 188 161 -65 -65
7 NOAH 85 65 150 121 56 0
8 ALIS 116 105 150 118 13 -8
9 DARKFALZ 255 204 193 173 -31 -31
10 ALIS 116 94 150 126 32 0
11 DARKFALZ 255 214 188 169 -45 -45
12 DARKFALZ 255 213 193 173 -40 -40
13 NOAH 85 68 150 127 59 -23
14 DARKFALZ 255 247 230 223 -24 -24
15 ALIS 116 147 150 148 1 -17
16 DARKFALZ 255 244 194 152 -92 -92
17 NOAH 85 67 150 147 80 0
18 MYAU 116 97 150 122 25 -28
19 DARKFALZ 255 237 194 175 -62 -62
20 ALIS 116 145 150 112 -33 -33
21 DARKFALZ 255 221 193 144 -77 -77

Alguns pontos importantes:

  • O DARKFALZ realmente é um inimigo muito forte. No ataque número 16, ele aplicou um dano de 92 pontos ao ODIN;
  • O NOAH mesmo com um ATK base baixo consegue aplicar danos devido ao mecanismo de recálculo do ATK efetivo quando a diferença entre ATK e DEF é positiva e impar, conforme o ataque de número 13. Mesmo com uma diferença positiva de 59 (defesa do DARKFALZ bem maior que o ataque do NOAH), o jogo recalculou o dano baseado no nível do NOAH e gerou um novo dano efetivo com o valor 23 em vez de zero.

Por fim, essa lógica de recálculo do dano efetivo explica o porque de inimigos muito fracos tipo SWORM e SCORPION conseguirem causar um dano significativo quando os personagens estão em níveis muito altos e com armas muito fortes. Nestes casos, como o valor de ataque desses inimigos é muito menor que o valor de defesa dos personagens, o jogo recalcula o dano efetivo do inimigo utilizando o nível dos personagens, frequentemente causando danos acima de 10 pontos.

jogos/ps1/desconstruindo_ps1.1409580102.txt.gz · Última modificação: 2014/09/01 07:01 por kilgamma

Ferramentas da página