Pergunta: Mas não é só usar P2Dist X ou P2BodyDist X?
Resposta: Primeiramente, isso calculária a distância X do player apenas com relação ao P2, e se for uma luta Coop?
Pergunta: Então, eu posso fazer assim (EnemyNear,Pos X) - Pos X?
Resposta: Com isso você irá calcular apenas a distância X!
Pergunta: Mas o que a Distância Real então?
Bom, eu vou tentar explicar mais ou menos como funciona.
Vamos supor que temos 2 players
E temos também suas distâncias X e Y
Mas essas distâncias nem sempre são a verdadeira distância entre um corpo e outro, pois a distância entre um corpo e outro é sempre uma linha reta!
Então a Verdadeira distância seria
Temos então um triângulo retângulo onde a hipotenusa é a distância real e os catetos são as distâncias X e Y!
Como diz o Teorema de Pitágoras:
Resumindo: Distância² = Dist X² + Dist Y²
Pergunta: E como vamos escrever isso no MUGEN?
Primeiramente, vamos armazenar a distância X e Y entre o Player e o inimigo mais próximo em variáveis:
Type = VarSet
Trigger1 = 1
FV = 0
Value = ((EnemyNear,Pos X) - Pos X)
[State -3, Distância Y]
Type = VarSet
Trigger1 = 1
FV = 1
Value = ((EnemyNear,Pos Y) - Pos Y)
Pergunta: Mas por que você está usando "FV" ao invés de "V"?
Resposta: V = Var, FV = FVar, as Vars armazenam apenas valores INTEIROS, enquanto as FVars armazenam valores quebrados, com casas decimais, tornando nosso cálculo muito mais preciso!
Pergunta: Ok, nós armazenamos os valores nas variáveis! Fazer um número elevado ao quadrado é só multiplicar por ele mesmo, mas como vamos calcular a raiz quadrada no final?
Resposta: Já q o MUGEN em sí não possui uma ferramente para extração de raiz, usaremos o mesmo cálcua das calculadoras q existem por ai! Elas utilizam o Número de Euler e Logoratmo para extrair a raiz, chegando na seguinte fórmula:
Traduzindo: A raiz de um número é igual ao Número de Euler elevado a 0,5 vezes o logaritmo LN daquele número.
Para nossa felicidade, o MUGEN possui todas as ferramentas q precisamos parar fazer esses cálculos!
O Número de Euler é um trigger e é representado apenas pela letra "E", mas nós não queremos apenas o Número de Euler, nós queremos elevá-lo à alguma coisa, então, podemos usar o Trigger "Exp" q nada mais é do que o Número de Euler elevado a alguma coisa!
Pergunta: Como funciona o trigger "Exp"?
Resposta: Exp(valor), ou seja, é o número de Euler elevado à algum valor!
Pergunta:e o Logaritmo?
Resposta: O logaritmo é calculado no MUGEN com o trigger "Log", mas nós não queremos um logaritmo normal, nós queremos o logaritmo Ln que existe na fórmula, e felizmente o MUGEN possui o trigger "Ln".
Pergunta: E como fica o código para calcular a distância? Pq até agora a gente só armazenou a distância X e Y...
O código para calcular a distância vai ficar assim:
Type = VarSet
Trigger1 = 1
FV = 2
Value = Exp(0.5*Ln((FVar(0)*FVar(0))+(FVar(1)*FVar(1))))
Pergunta: Não entendi nada daqueles parênteses locos O___O
Resposta: O q acontece é que o MUGEN trabalha apenas com parênteses, mas se quisermos transformar em uma fórmula matemática no papel, ficaria assim:
Exp{0.5*Ln[(FVar(0)*FVar(0))+(FVar(1)*FVar(1))]}
Os cálculos q são realizados primeiro são os q estão dentro dos parênteses, seguidos pelos colchetes e, por fim, a chave, ou seja, a ordem do cálculo ficou:
1º Elevar as distâncias armazenadas ao quadrado
2º Somar os resultados do 1º resultado
3º Tirar o logaritmo do 2º resultado e multiplica-lo por 0,5
4º Elevar o Número de Euler ao 3º resultado
Pergunta: E como eu posso testar pra ver se esse cálculo deu certo?
Resposta: Você pode usar um DisplayToClipboard para escrever os valores das FVars no modo debug!
type = DisplayToClipboard
trigger1 = 1
text = "Dist X = %d || Dist Y = %d || Dist = %d"
params = FVar(0), Fvar(1), Fvar(2)
Se fizermos os cálculos:
26716,556304 = 19600 + 7116,6096
26716,556304 = 26716,6096
Não deu EXATO, mas deu um valor bem aproximado! Pois o MUGEN arredonda algumas casas!
Se você fizer a raiz de 26716,6096, você vai ter o resultado: 163,45216303249...
Pergunta: UIA! Interessante, mas aonde é que eu posso aplicar esse código ai?? .-.
Resposta: Sinceramente, existem poucas apicações para esse código em sí, você pode usá-lo para calcular a distância ao invés de apenas usar a distância X, porque se você quiser fazer um golpe q só é possível se o inimigo estiver perto, normalmente vai usar o P2Dist X, mas e se o inimigo estiver perto mas estiver no ar? Então você pode usar esse código para calcular uma distância mais exata!
Pergunta: Hummm, mas você disse ali em cima "esse códig em sí", o que você quiz dizer com isso?
Resposta: Esse código pode ser melhorado se usarmos trigonometria para calcular os ângulos do triângulo, com isso, poderiamos usar o código em helpers para eles ficarem com o ângulo certinho quando estiver indo na direção do inimigo!
Pergunta: Você vai postar esse código com trigonometria?
Resposta: Não! Apesar de eu gostar muito de matemática, odeio trigonomeria xD
Bom, vou ficando por aqui, espero que esse tutorial seja útil para alguém xD
Flws!