Bien sans dresser de tableau j'ai une méthode plus complète encore ! ^^
Ce sont ... Les scripts ^^
Je fais confiance en tes calculs Coeur Sombre, c'est pas ça du tout ^^
Mais la précision des formules exactes est indéniable !
Celles-ci sont stockées dans Game_Battler 3 :
On retrouve deux calculs distincts :
L'attaque, et la compétence.
L'attaque varie selon un schéma assez complet :
- Code:
-
def attack_effect(attacker)
# ƒNƒŠƒeƒBƒJƒ‹ƒtƒ‰ƒO‚ðƒNƒŠƒA
self.critical = false
# ‘æˆê–½’†”»’è
hit_result = (rand(100) < attacker.hit)
# –½’†‚Ìê‡
if hit_result == true
# Šî–{ƒ_ƒ[ƒW‚ðŒvŽZ
atk = [attacker.atk - self.pdef / 2, 0].max
self.damage = atk * (20 + attacker.str) / 20
# ‘®«C³
self.damage *= elements_correct(attacker.element_set)
self.damage /= 100
# ƒ_ƒ[ƒW‚Ì•„†‚ª³‚Ìê‡
if self.damage > 0
# ƒNƒŠƒeƒBƒJƒ‹C³
if rand(100) < 4 * attacker.dex / self.agi
self.damage *= 2
self.critical = true
end
# –hŒäC³
if self.guarding?
self.damage /= 2
end
end
# •ªŽU
if self.damage.abs > 0
amp = [self.damage.abs * 15 / 100, 1].max
self.damage += rand(amp+1) + rand(amp+1) - amp
end
# ‘æ“ñ–½’†”»’è
eva = 8 * self.agi / attacker.dex + self.eva
hit = self.damage < 0 ? 100 : 100 - eva
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
end
# –½’†‚Ìê‡
if hit_result == true
# ƒXƒe[ƒgÕŒ‚‰ðœ
remove_states_shock
# HP ‚©‚çƒ_ƒ[ƒW‚ðŒ¸ŽZ
self.hp -= self.damage
# ƒXƒe[ƒg•Ï‰»
@state_changed = false
states_plus(attacker.plus_state_set)
states_minus(attacker.minus_state_set)
# ƒ~ƒX‚Ìê‡
else
# ƒ_ƒ[ƒW‚É "Miss" ‚ðÝ’è
self.damage = "Miss"
# ƒNƒŠƒeƒBƒJƒ‹ƒtƒ‰ƒO‚ðƒNƒŠƒA
self.critical = false
end
# ƒƒƒbƒhI—¹
return true
end
En clair :
On a plusieurs conditions :
Pour un coup classique :
- Code:
-
atk = [attacker.atk - self.pdef / 2, 0].max
self.damage = atk * (20 + attacker.str) / 20
self.damage *= elements_correct(attacker.element_set)
self.damage /= 100
ça donne :
les dégâts sont l'attaque du joueur moins la défense physique de l'ennemi divisée par deux, le tout multiplié par vingt ajouté à la force de l'attaquant ce même tout divisé par vingt.
Ensuite on a la correction des éléments qui suit un schéma caché dans game_battler 1 et on divise par 100.
Donc : dégâts = (attaque_attaquant - défense_physique_défenseur) * [(20 + attaque_attaquant) / 20]
ça c'est le coup classique ^^
En cas de coup critique on multiplie par deux.
[un coup critique se calcule sur la base :
if rand(100) < 4 * attacker.dex / self.agi
Donc si le résultat d'un teste hasardeux à cent possibilités est inférieur à la dextérité de l'attaquant divisé par l'agilité de l'attaqué ^^]
D'autres conditions :
Si l'attaqué se défend, les dégâts sont divisés par deux.
Il reste des détails comme si le coup réussit ou pas mais à vrai dire j'ai pas tout compris ^^' [La fatigue]
Je me pencherais dessus demain ^^
Donc pour en revenir à ta question, l'attaque qui est indiquée avec une arme est celle qui importe.
Et si tu tapes donc avec une force de 10 et une attaque de 10 tandis que l'adversaire oppose une résistance de 20 on aura :
dégâts = (attaque_attaquant - défense_physique_défenseur) * [(20 + attaque_attaquant) / 20]
dégâts = (10 - 20/2) * [(20+10)/20]
Soit ... Aucuns dégâts ^^'
Hé c'est pas moi qui définit ce que contiennent les scripts ^^' mais selon les calculs ça donnerait
0 * 1,5 = 0
Je peux pas tester, mais je suis sûr de ce que je lis.
3dward.