habitica/src/app/algos.coffee

61 lines
1.9 KiB
CoffeeScript
Raw Normal View History

2013-03-02 18:23:43 +00:00
MODIFIER = .02
priorityValue = (priority='!') ->
switch priority
when '!' then 1
when '!!' then 1.5
when '!!!' then 2
else 1
2013-03-02 18:23:43 +00:00
module.exports.tnl = (level) ->
return (Math.pow(level,2)*10)+(level*10)+80
###
Calculates Exp modificaiton based on level and weapon strength
{value} task.value for exp gain
{weaponStrength) weapon strength
{level} current user level
{priority} user-defined priority multiplier
2013-03-02 18:23:43 +00:00
###
module.exports.expModifier = (value, weaponStrength, level, priority='!') ->
levelModifier = (level-1) * MODIFIER
weaponModifier = weaponStrength / 100
strength = 1 + weaponModifier + levelModifier
return value * strength * priorityValue(priority)
2013-03-02 18:23:43 +00:00
###
Calculates HP modification based on level and armor defence
{value} task.value for hp loss
{armorDefense} defense from armor
{helmDefense} defense from helm
{level} current user level
{priority} user-defined priority multiplier
2013-03-02 18:23:43 +00:00
###
module.exports.hpModifier = (value, armorDefense, helmDefense, shieldDefense, level, priority='!') ->
levelModifier = (level-1) * MODIFIER
armorModifier = (armorDefense + helmDefense + shieldDefense) / 100
defense = 1 - levelModifier + armorModifier
return value * defense * priorityValue(priority)
2013-03-02 18:23:43 +00:00
###
Future use
{priority} user-defined priority multiplier
2013-03-02 18:23:43 +00:00
###
module.exports.gpModifier = (value, modifier, priority='!') ->
return value * modifier * priorityValue(priority)
2013-03-02 18:23:43 +00:00
###
Calculates the next task.value based on direction
Uses a capped inverse log y=.95^x, y>= -5
2013-03-02 18:23:43 +00:00
{currentValue} the current value of the task
{direction} up or down
###
module.exports.taskDeltaFormula = (currentValue, direction) ->
if direction is 'up'
delta = Math.max(Math.pow(0.95,currentValue),0.25)
else
delta = -Math.min(Math.pow(0.95,currentValue),5)
2013-03-04 22:04:02 +00:00
#console.log("CV = " + currentValue + " Dir = " + direction + " delta = " + delta)
2013-03-05 09:51:42 +00:00
delta = 20 if delta > 20
2013-03-02 18:23:43 +00:00
return delta