local AbstractMobParent = Object:extend() function AbstractMobParent:new() self:initBasicElements() self.stats = self:createStats() self.skills = self:createSkills() self:initLife() end function AbstractMobParent:initBasicElements() self.name = "PlaceHolder" self.fullname = "PlaceHolder" self.turns = 2 end function AbstractMobParent:createStats() local stats = {} stats.hpmax = 0 stats.ppmax = 0 stats.attack = 0 stats.power = 0 stats.defense = 0 stats.technic = 0 stats.mind = 0 stats.speed = 0 return stats end function AbstractMobParent:createSkills() return {} end -- LIFE FUNCTIONS -- Handle HP and stuff like that function AbstractMobParent:initLife() self.hp = self.stats.hpmax self.pp = self.stats.ppmax self.status = 0 end function AbstractMobParent:setHP(newHP, relative) if (relative) then self.hp = self.hp + newHP else self.hp = newHP end self.hp = math.max(0, self.hp) end function AbstractMobParent:setPP(newPP, relative) if (relative) then self.pp = self.pp + newPP else self.pp = newPP end end function AbstractMobParent:isAlive() return (self.hp > 0) end function AbstractMobParent:getStats() return self.stats end -- Bonus stuff function AbstractMobParent:setBonus(pvFactor, statFactor) self.stats.hpmax = self.stats.hpmax * pvFactor self.hp = self.stats.hpmax self.stats.attack = self.stats.attack * statFactor self.stats.power = self.stats.power * statFactor self.stats.defense = self.stats.defense * statFactor self.stats.mind = self.stats.mind * statFactor self.stats.technic = self.stats.technic * statFactor self.stats.speed = self.stats.speed * statFactor end return AbstractMobParent