feat(cbs): initial implementation of damage system
This commit is contained in:
parent
c7a24a2bf3
commit
45c58bcbcd
5 changed files with 73 additions and 0 deletions
|
@ -32,4 +32,37 @@ function Battler:validateAction()
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function Battler:sendDamage(x, y, value, accuracy, isSpecial, isAerial)
|
||||||
|
local stats = self:getStats()
|
||||||
|
local value = value / 10
|
||||||
|
|
||||||
|
if (isSpecial) then
|
||||||
|
value = value * stats.power
|
||||||
|
else
|
||||||
|
value = value * stats.attack
|
||||||
|
end
|
||||||
|
core.debug:print("battler", "sending " .. value .." damage at position <" .. x .. ";" .. y .. ">")
|
||||||
|
|
||||||
|
local fromEnnemy = self.isEnnemy
|
||||||
|
|
||||||
|
local other = self.world:getActorInCase(x, y)
|
||||||
|
if (other ~= nil) then
|
||||||
|
core.debug:print("battler", "sending damage to actor at position <" .. x .. ";" .. y .. ">")
|
||||||
|
other:receiveDamage(value, accuracy, isSpecial, isAerial, fromWho)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function Battler:receiveDamage(value, accuracy, isSpecial, isAerial)
|
||||||
|
local stats = self:getStats()
|
||||||
|
if (fromEnnemy ~= self.isEnnemy) then
|
||||||
|
if (isSpecial) then
|
||||||
|
value = value / stats.mind
|
||||||
|
else
|
||||||
|
value = value / stats.defense
|
||||||
|
end
|
||||||
|
core.debug:print("battler", "taken " .. value .. " damage" )
|
||||||
|
self:setHP(value * -1, true)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
return Battler
|
return Battler
|
||||||
|
|
|
@ -43,6 +43,17 @@ function Ennemy:receiveDatas()
|
||||||
self.data = game.ennemies:getEnnemyData(self.ennid)
|
self.data = game.ennemies:getEnnemyData(self.ennid)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function Ennemy:setHP(value, relative)
|
||||||
|
if (relative) then
|
||||||
|
value = self.hp + value
|
||||||
|
end
|
||||||
|
|
||||||
|
self.hp = value
|
||||||
|
if (self.hp <= 0) then
|
||||||
|
self:destroy()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function Ennemy:getStats()
|
function Ennemy:getStats()
|
||||||
return self.data.stats
|
return self.data.stats
|
||||||
end
|
end
|
||||||
|
|
|
@ -186,16 +186,31 @@ end
|
||||||
|
|
||||||
function Hero:animationEnded(animation)
|
function Hero:animationEnded(animation)
|
||||||
if (animation == "hit1") then
|
if (animation == "hit1") then
|
||||||
|
self:sendDamage(self.x + self.direction, self.y, 33, 100, false, false)
|
||||||
self:changeAnimation("hit2")
|
self:changeAnimation("hit2")
|
||||||
elseif (animation == "hit2") then
|
elseif (animation == "hit2") then
|
||||||
|
self:sendDamage(self.x + self.direction, self.y, 33, 100, false, false)
|
||||||
self:changeAnimation("hit3")
|
self:changeAnimation("hit3")
|
||||||
elseif (animation == "hit3") then
|
elseif (animation == "hit3") then
|
||||||
|
self:sendDamage(self.x + self.direction, self.y, 33, 100, false, false)
|
||||||
core.debug:print("cbs/hero", "normal combo finished, switching actor")
|
core.debug:print("cbs/hero", "normal combo finished, switching actor")
|
||||||
self:changeAnimation("idle")
|
self:changeAnimation("idle")
|
||||||
self.world:switchActiveBattler( )
|
self.world:switchActiveBattler( )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- STATS FUNCTIONS
|
||||||
|
-- Handle character stats and stuff
|
||||||
|
|
||||||
|
function Hero:setHP(value, relative)
|
||||||
|
if (relative) then
|
||||||
|
local hp = game.characters.list[self.charid].stats.hp
|
||||||
|
value = hp + value
|
||||||
|
end
|
||||||
|
|
||||||
|
game.characters.list[self.charid].stats.hp = value
|
||||||
|
end
|
||||||
|
|
||||||
-- DRAW FUNCTIONS
|
-- DRAW FUNCTIONS
|
||||||
-- Draw everything related to the hero
|
-- Draw everything related to the hero
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@ function Parent:new(world, x, y, z)
|
||||||
self.isHero = false
|
self.isHero = false
|
||||||
self.isActor = false
|
self.isActor = false
|
||||||
self.isEnnemy = false
|
self.isEnnemy = false
|
||||||
|
self.isDestroyed = false
|
||||||
|
|
||||||
self:register()
|
self:register()
|
||||||
end
|
end
|
||||||
|
@ -31,6 +32,11 @@ function Parent:register()
|
||||||
self.world:registerActor(self)
|
self.world:registerActor(self)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function Parent:destroy()
|
||||||
|
self.world:destroyActor(self)
|
||||||
|
self.destroyed = true
|
||||||
|
end
|
||||||
|
|
||||||
function Parent:update(dt)
|
function Parent:update(dt)
|
||||||
self:updateSprite(dt)
|
self:updateSprite(dt)
|
||||||
end
|
end
|
||||||
|
|
|
@ -63,6 +63,14 @@ function World:registerActor(actor)
|
||||||
actor.id = self.globalID
|
actor.id = self.globalID
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function World:destroyActor(actorToDestroy)
|
||||||
|
for i, actor in ipairs(self.actors) do
|
||||||
|
if actor == actorToDestroy then
|
||||||
|
table.remove(self.actors, i)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-- INFO FUNCTIONS
|
-- INFO FUNCTIONS
|
||||||
-- Get info from the world
|
-- Get info from the world
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue