feat(cbs): add condition to choregraphy system
This commit is contained in:
parent
56e9af6ac3
commit
a60f6ade6c
4 changed files with 66 additions and 29 deletions
|
@ -17,17 +17,17 @@ return {
|
|||
-- if not nil : {ox, oy, shape, size, affectedByDirection}
|
||||
|
||||
choregraphy = { -- the main attack choregraphy
|
||||
{'setAnimation', 'hit1', true},
|
||||
{'addGFX', 'hitGFX', 0.75, 0, true, false},
|
||||
{'sendDamage', 33, 100, false, false},
|
||||
{'setAnimation', 'hit2', true},
|
||||
{'addGFX', 'hitGFX', 0.75, 0, true, false},
|
||||
{'sendDamage', 33, 100, false, false},
|
||||
{'setAnimation', 'hit3', true},
|
||||
{'addGFX', 'hitGFX', 0.75, 0, true, false},
|
||||
{'sendDamage', 33, 100, false, false},
|
||||
{'setAnimation', 'idle', false},
|
||||
{'wait', 0.5}
|
||||
{'setAnimation', "none", 'hit1', true},
|
||||
{'sendDamage', "none", 33, 100, false, false},
|
||||
{'addGFX',"sentDamage", 'hitGFX', 0.75, 0, true, false},
|
||||
{'setAnimation', "none", 'hit2', true},
|
||||
{'sendDamage', "none", 33, 100, false, false},
|
||||
{'addGFX',"sentDamage", 'hitGFX', 0.75, 0, true, false},
|
||||
{'setAnimation', "none", 'hit3', true},
|
||||
{'sendDamage', "none", 33, 100, false, false},
|
||||
{'addGFX',"sentDamage", 'hitGFX', 0.75, 0, true, false},
|
||||
{'setAnimation', "none", 'idle', false},
|
||||
{'wait', "none", 0.5}
|
||||
},
|
||||
|
||||
onContact = { -- if the attack move and touch multiple ennemies, you can add
|
||||
|
@ -38,16 +38,23 @@ return {
|
|||
--[[
|
||||
CHOREGRAPHY POSSIBLE EFFECTS
|
||||
-- "wait" :: Simply wait before doing the next command
|
||||
-- :: {"wait", duration}
|
||||
-- :: {"wait", condition, duration}
|
||||
|
||||
-- "setAnimation" :: Change the animation of the battler
|
||||
-- {"setAnimation", animation, blockProcess}
|
||||
-- {"setAnimation", condition, animation, blockProcess}
|
||||
|
||||
-- "addGFX" :: Show a GFX relatively to the target position
|
||||
-- :: (player if target is nil)
|
||||
-- :: {"addGFX", "gfxname", x, y, affectedByDirection, blockProcess}
|
||||
-- :: {"addGFX", condition, "gfxname", x, y, affectedByDirection, blockProcess}
|
||||
|
||||
-- "sendDamage" :: Send Damage on the whole target Area
|
||||
-- ::
|
||||
-- :: {"sendDamage", damageEffect, accuracy, isSpecial, isAerial}
|
||||
-- :: {"sendDamage", condition, damageEffect, accuracy, isSpecial, isAerial}
|
||||
|
||||
CONDITION TYPES
|
||||
--
|
||||
-- "sentDamage" :: an ennemy have received damage
|
||||
--
|
||||
--
|
||||
|
||||
]]
|
||||
|
|
16
sonic-radiance.love/datas/gamedata/skills/spinattack.lua
Normal file
16
sonic-radiance.love/datas/gamedata/skills/spinattack.lua
Normal file
|
@ -0,0 +1,16 @@
|
|||
return {
|
||||
name = "Spin Dash",
|
||||
cost = "05",
|
||||
target = nil, -- No targeting capacity
|
||||
effectArea = {1, 0, "line", 5, true}, -- which area is affected by the attack
|
||||
choregraphy = {
|
||||
{"setAnimation", "none", "spindash", false},
|
||||
{"wait", "none", 0.5},
|
||||
{"setAnimation", "none", "spin", false},
|
||||
{"dashForward", "none", 12, true},
|
||||
{'sendDamage', 120, 100, false, false},
|
||||
{'addGFX', "sentDamage", 'hitGFX', 0.75, 0, true, false},
|
||||
{'jumpBack', "none", true},
|
||||
{'setAnimation', "none", 'idle', false},
|
||||
}
|
||||
}
|
|
@ -54,6 +54,9 @@ function Battler:sendDamage(x, y, value, accuracy, isSpecial, isAerial)
|
|||
if (other ~= nil) then
|
||||
core.debug:print("battler", "sending damage to actor at position <" .. x .. ";" .. y .. ">")
|
||||
other:receiveDamage(value, accuracy, isSpecial, isAerial, fromWho)
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -156,6 +156,8 @@ function Hero:receiveSignal(action_type, id)
|
|||
elseif (action_type == "attack") then
|
||||
--self:changeAnimation("hit1")
|
||||
self:startChoregraphy("attack")
|
||||
elseif (action_type == "skill") then
|
||||
self:startChoregraphy(id)
|
||||
else
|
||||
self:switchActiveBattler( )
|
||||
end
|
||||
|
@ -219,6 +221,8 @@ function Hero:startChoregraphy(skill, dx, dy)
|
|||
self.choregraphy.dx = dx or self.x
|
||||
self.choregraphy.dy = dy or self.y
|
||||
|
||||
self.choregraphy.haveSentDamage = false
|
||||
|
||||
self.isChoregraphyActive = true
|
||||
end
|
||||
|
||||
|
@ -234,9 +238,16 @@ function Hero:switchAction()
|
|||
if nextAction == nil then
|
||||
self.isChoregraphyActive = false
|
||||
self:switchActiveBattler()
|
||||
else
|
||||
local condition = nextAction[2]
|
||||
if (condition == "sentDamage") and (not self.choregraphy.haveSentDamage) then
|
||||
core.debug:print("cbs/hero", "you didn't do damage, skipping " .. nextAction[1])
|
||||
self:switchAction()
|
||||
else
|
||||
self:doChoregraphyAction(nextAction)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
function Hero:doChoregraphyAction(choregraphyAction)
|
||||
|
@ -244,11 +255,11 @@ function Hero:doChoregraphyAction(choregraphyAction)
|
|||
self.choregraphy.changeAction = true
|
||||
|
||||
if type == "wait" then
|
||||
local duration = choregraphyAction[2] or 1
|
||||
local duration = choregraphyAction[3] or 1
|
||||
self:wait(duration)
|
||||
elseif type == "setAnimation" then
|
||||
local animation = choregraphyAction[2]
|
||||
local blockProcess = choregraphyAction[3]
|
||||
local animation = choregraphyAction[3]
|
||||
local blockProcess = choregraphyAction[4]
|
||||
self:changeAnimation(animation)
|
||||
if (blockProcess) then
|
||||
self.choregraphy.blockedBy = animation
|
||||
|
@ -257,20 +268,20 @@ function Hero:doChoregraphyAction(choregraphyAction)
|
|||
elseif type == "sendDamage" then
|
||||
local xx = self.x + self.direction
|
||||
local yy = self.y
|
||||
local power = choregraphyAction[2]
|
||||
local accuracy = choregraphyAction[3]
|
||||
local isSpecial = choregraphyAction[4]
|
||||
local isAerial = choregraphyAction[5]
|
||||
self:sendDamage(xx, yy, power, accuracy, isSpecial, isAerial)
|
||||
local power = choregraphyAction[3]
|
||||
local accuracy = choregraphyAction[4]
|
||||
local isSpecial = choregraphyAction[5]
|
||||
local isAerial = choregraphyAction[6]
|
||||
self.choregraphy.haveSentDamage = self:sendDamage(xx, yy, power, accuracy, isSpecial, isAerial)
|
||||
elseif type == "addGFX" then
|
||||
local sprite = choregraphyAction[2]
|
||||
local dx = choregraphyAction[3]
|
||||
local dy = choregraphyAction[4]
|
||||
local affectedByDirection = choregraphyAction[5]
|
||||
local sprite = choregraphyAction[3]
|
||||
local dx = choregraphyAction[4]
|
||||
local dy = choregraphyAction[5]
|
||||
local affectedByDirection = choregraphyAction[6]
|
||||
if (affectedByDirection) then
|
||||
dx = dx * self.direction
|
||||
end
|
||||
local blockProcess = choregraphyAction[6]
|
||||
local blockProcess = choregraphyAction[7]
|
||||
|
||||
local x = self.x
|
||||
local y = self.y
|
||||
|
|
Loading…
Reference in a new issue