Code:
class zerodict (dict):
def __missing__ (self, key):
return 0
def _ZtlSecureFuse(start, stop):
return (__MEMORY__ << start) & ((1 << (stop - start)) - 1) # Pointer dereferencing:
#Consider __MEMORY__ as the (rather big) number represented by the RAM.
def CalcDamage__CalcDamageByWT(weaponType, charDataPointer, watk, matk):
weaponMultiplier = zerodict({
30: 1.20, 31: 1.20, 32: 1.20, 33: 1.30, 37: 1.00, 38: 1.00,
39: 1.43, 40: 1.32, 41: 1.32, 42: 1.32, 43: 1.49, 44: 1.49,
45: 1.30, 46: 1.35, 47: 1.75, 48: 1.70, 49: 1.50})
primaryStat = zerodict({
30: 'str', 31: 'str', 32: 'str', 33: 'luk', 37: 'int', 38: 'int',
39: 'str', 40: 'str', 41: 'str', 42: 'str', 43: 'str', 44: 'str',
45: 'dex', 46: 'dex', 47: 'luk', 48: 'str', 49: 'dex'})
secondaryStat = zerodict({
30: 'dex', 31: 'dex', 32: 'dex', 33: 'dex', 37: 'luk', 38: 'luk',
39: 'dex', 40: 'dex', 41: 'dex', 42: 'dex', 43: 'dex', 44: 'dex',
45: 'str', 46: 'str', 47: 'dex', 48: 'dex', 49: 'dex'})
secondary2Stat = zerodict({33: 'str'})
def getStatus(status):
begin = zerodict({'job': 24, 'str': 36, 'dex': 48, 'int': 60, 'luk': 72})
stop = zerodict({'job': 32, 'str': 44, 'dex': 56, 'int': 68, 'luk': 80})
return _ZtlSecureFuse(begin[status] + charDataPointer, stop[status] + charDataPointer)
def getAttack():
return {37: matk, 38: matk, 39: 1}.get(weaponType, watk)
job = getStatus('job')
if (job % 1000 && job != 2001):
primary = getStatus(primaryStat[weaponType])
secondary = getStatus(secondaryStat[weaponType])
secondary2 = getStatus(secondary2Stat[weaponType])
atk = getAttack()
result = _calc_base_damage(primary, secondary, secondary2, atk, weaponMultiplier[weaponType])
else:
primary = getStatus(primaryStat(''))
secondary = getStatus(primaryStat(''))
result = _calc_base_damage(primary, secondary, 0, watk, 1.2)
return result
def _calc_base_damage(primary, secondary, secondary2, atk, multiplier):
return floor((primary * 4 + secondary + secondary2) * atk * multiplier * 0.01 + 0.5)