diff --git a/sonic-radiance.love/game/abstractmobs/utils.lua b/sonic-radiance.love/game/abstractmobs/utils.lua new file mode 100644 index 0000000..fc85fbc --- /dev/null +++ b/sonic-radiance.love/game/abstractmobs/utils.lua @@ -0,0 +1,32 @@ +local StatsUtils = {} + +local CONST = {} + +CONST.EXP_MULTIPLICATOR = 4 +CONST.EXP_RATIO = 5 + +CONST.BASE_STAT = 5 +CONST.BASE_HP = 15 +CONST.BASE_MP = 8 + +CONST.MULT_STAT = 2 +CONST.MULT_HP = 2.7 +CONST.MULT_MP = 1.5 + +function StatsUtils.getExpValue(level) + return math.floor( ( CONST.EXP_MULTIPLICATOR * ( level ^ 3 ) ) / CONST.EXP_RATIO ) +end + +function StatsUtils.getStatValue(level, base) + return math.floor( (((base * CONST.MULT_STAT) * level)/100) ) + CONST.BASE_STAT +end + +function StatsUtils.getHPValue(level, base) + return math.floor( (((base * CONST.MULT_HP) * level)/100) ) + CONST.BASE_HP + level +end + +function StatsUtils.getPPValue(level, base) + return math.floor( (((base * CONST.MULT_MP) * level)/100) ) + CONST.BASE_MP +end + +return StatsUtils diff --git a/sonic-radiance.love/game/characters.lua b/sonic-radiance.love/game/characters.lua index 1d45d8c..32bb403 100644 --- a/sonic-radiance.love/game/characters.lua +++ b/sonic-radiance.love/game/characters.lua @@ -24,6 +24,8 @@ local CharacterManager = Object:extend() +local statsutils = require "game.abstractmobs.utils" + function CharacterManager:new(controller) self.controller = controller self.namelist = require "datas.gamedata.characters" @@ -59,8 +61,8 @@ function CharacterManager:initCharacter(id) local character = self:getCharacterData(id) stats.level = character.startlevel - stats.exp = self:getExpValue(stats.level) - stats.exp_next = self:getExpValue(stats.level + 1) + stats.exp = statsutils.getExpValue(stats.level) + stats.exp_next = statsutils.getExpValue(stats.level + 1) stats.hpmax = character.base_stats.hpmax stats.ppmax = character.base_stats.ppmax stats.attack = character.base_stats.attack @@ -83,16 +85,12 @@ function CharacterManager:initCharacter(id) self.list[id] = character end -function CharacterManager:getExpValue(level) - return math.floor( ( 4 * ( level ^ 3 ) ) / 5 ) -end - function CharacterManager:setLevel(id, newlevel) self.list[id].stats.level = newlevel local stats = self.list[id].stats local exp, exp_next, exp_current - exp = self:getExpValue(stats.level) - exp_next = self:getExpValue(stats.level + 1) + exp = statsutils.getExpValue(stats.level) + exp_next = statsutils.getExpValue(stats.level + 1) exp_current = self.list[id].stats.exp self.list[id].stats.exp = math.max(math.min(exp_current, exp_next - 1), exp) @@ -105,31 +103,19 @@ function CharacterManager:levelUp(id) self:setLevel(id, self.list[id].stats.level + 1) end -function CharacterManager:getStatValue(level, base) - return math.floor( (((base * 2) * level)/100) ) + 5 -end - -function CharacterManager:getHPValue(level, base) - return math.floor( (((base * 2.7) * level)/100) ) + 15 + level -end - -function CharacterManager:getPPValue(level, base) - return math.floor( (((base * 1.5) * level)/100) ) + 8 -end - function CharacterManager:recalculateStats(id) local character = self.list[id] local stats = character.stats local base_stats = character.base_stats - stats.hpmax = self:getHPValue(stats.level, base_stats.hpmax) - stats.ppmax = self:getPPValue(stats.level, base_stats.ppmax) - stats.attack = self:getStatValue(stats.level, base_stats.attack) - stats.power = self:getStatValue(stats.level, base_stats.power) - stats.defense = self:getStatValue(stats.level, base_stats.defense) - stats.mind = self:getStatValue(stats.level, base_stats.mind) - stats.technic = self:getStatValue(stats.level, base_stats.technic) - stats.speed = self:getStatValue(stats.level, base_stats.speed) + stats.hpmax = statsutils.getHPValue(stats.level, base_stats.hpmax) + stats.ppmax = statsutils.getPPValue(stats.level, base_stats.ppmax) + stats.attack = statsutils.getStatValue(stats.level, base_stats.attack) + stats.power = statsutils.getStatValue(stats.level, base_stats.power) + stats.defense = statsutils.getStatValue(stats.level, base_stats.defense) + stats.mind = statsutils.getStatValue(stats.level, base_stats.mind) + stats.technic = statsutils.getStatValue(stats.level, base_stats.technic) + stats.speed = statsutils.getStatValue(stats.level, base_stats.speed) end function CharacterManager:getSkillList(id)