damage: truncate, handle weird hitbox data

main
Bryce Allen 10 years ago
parent c53d838c56
commit 12f1813d37

@ -3,6 +3,7 @@ from collections import defaultdict
import json import json
import difflib import difflib
import re import re
import math
from mhapi import skills from mhapi import skills
from mhapi.model import SharpnessLevel, _break_find from mhapi.model import SharpnessLevel, _break_find
@ -11,17 +12,20 @@ from mhapi.model import SharpnessLevel, _break_find
WEAKPART_WEIGHT = 0.5 WEAKPART_WEIGHT = 0.5
def floor(x):
return int(math.floor(x))
def raw_damage(true_raw, sharpness, affinity, monster_hitbox, motion): def raw_damage(true_raw, sharpness, affinity, monster_hitbox, motion):
""" """
Calculate raw damage to a monster part with the given true raw, Calculate raw damage to a monster part with the given true raw,
sharpness, monster raw weakness, and weapon motion value. sharpness, monster raw weakness, and weapon motion value.
""" """
return (true_raw return floor(true_raw
* SharpnessLevel.raw_modifier(sharpness) * SharpnessLevel.raw_modifier(sharpness)
* (1 + (affinity / 400.0)) * (1 + (affinity / 400.0))
* motion / 100.0 * motion / 100.0
* monster_hitbox / 100.0) * monster_hitbox / 100.0)
def element_damage(element, sharpness, monster_ehitbox): def element_damage(element, sharpness, monster_ehitbox):
@ -30,9 +34,9 @@ def element_damage(element, sharpness, monster_ehitbox):
attack, the given sharpness, and the given monster elemental weakness. attack, the given sharpness, and the given monster elemental weakness.
Note that this is independent of the motion value of the attack. Note that this is independent of the motion value of the attack.
""" """
return (element / 10.0 return floor(element / 10.0
* SharpnessLevel.element_modifier(sharpness) * SharpnessLevel.element_modifier(sharpness)
* monster_ehitbox / 100.0) * monster_ehitbox / 100.0)
class MotionType(object): class MotionType(object):
@ -276,7 +280,10 @@ class WeaponMonsterDamage(object):
if self.limit_parts is not None and part not in self.limit_parts: if self.limit_parts is not None and part not in self.limit_parts:
continue continue
#print part, alt
if row["cut"] == -1:
continue
hitbox = 0 hitbox = 0
hitbox_cut = int(row["cut"]) hitbox_cut = int(row["cut"])
hitbox_impact = int(row["impact"]) hitbox_impact = int(row["impact"])
@ -572,8 +579,10 @@ class PartDamage(object):
def average(self, break_weight=0.25, rage_weight=0.5): def average(self, break_weight=0.25, rage_weight=0.5):
if self.break_diff(): if self.break_diff():
assert not self.rage_diff() avg = self.average_break(break_weight)
return self.average_break(break_weight) if self.rage_diff():
return (self.average_rage(rage_weight) + avg) / 2.0
return avg
else: else:
return self.average_rage(rage_weight) return self.average_rage(rage_weight)

Loading…
Cancel
Save