Naomi.lua
From Pocket Rumble Wiki
naomi.lua[edit]
-- require 'class' -- require 'player/AI' Naomi = { moves = { standA = { attackbox = {pushback=189 * gameLogicMult, hitStun=12, width=17 * gameLogicMult, height=11 * gameLogicMult, dmg=1, relativeY=15 * gameLogicMult, explosionX = 4 * gameLogicMult, explosionY = -1 * gameLogicMult, priority = 4}; { frames = {1,3,2,1}; custom = function(self) self:executeSound('lightWhiff', {"sfx", "whiff"}) end }; { type="active"; frames = {3,2}; }; { type="recovery"; frames = {4,1,5,2,6,1}; }; { frames = {6,1}; custom = function(self) self:stopTrails() end }; }; standB = { --183 attackbox = {pushback=183 * gameLogicMult, hitStun=19, width=28 * gameLogicMult, height=10 * gameLogicMult, relativeY = 20 * gameLogicMult, dmg=1, explosionX = 2 * gameLogicMult, explosionY = -2 * gameLogicMult, priority = 3}; { --hitstun: 19 frames = {1,2,2,2,3,1,4,1}; --1,2,2,2,3,2,4,2 custom = function(self) self:executeSound('mediumWhiff', {"sfx", "whiff"}) end }; { type="active"; frames = {5,1,6,1}; --5,1,6,1 }; { type="recovery"; frames = {6,2,7,3,8,2,9,2,10,1}; --6,1,7,3,8,2,9,1,10,1 custom = function(self) self:stopTrails() end }; { frames = {10,1}; }; }; lowA = { --280 attackbox = {pushback=340 * gameLogicMult, hitStun=13, width=20 * gameLogicMult, height=10 * gameLogicMult, relativeY = 20 * gameLogicMult, dmg=1, explosionX = 0 * gameLogicMult, explosionY = 0 * gameLogicMult, priority = 4}; { --hitstun: 16 pushback:300 frames = {1,3,2,4}; custom = function(self) self:changeSpeed(390, 21) self.height = 28 * gameLogicMult self.yOffset = -(15 * gameLogicMult) self.y = yFloor - self.height self:executeSound('heavyWhiff', {"sfx", "whiff"}) end }; { type="active"; frames = {3, 2, 4, 3}; custom = function(self) self.yOffset = -(15 * gameLogicMult) end }; { type="recovery"; frames = {3,3}; custom = function(self) self.yOffset = -(15 * gameLogicMult) end }; { frames = {2,3,1,2}; custom = function(self) self:stopTrails() self.yOffset = -(15 * gameLogicMult) end }; { frames = {1,1}; custom = function(self) self.yOffset = -(15 * gameLogicMult) end }; }; lowB = { attackbox = {pushUp = 325, pushback= 60 * gameLogicMult, hitStun=17, width=20 * gameLogicMult, height=15 * gameLogicMult, relativeY = 21 * gameLogicMult, dmg=1, explosionX = -2 * gameLogicMult, priority = 3}; { --340 frames = {1,2,2,1,3,1}; custom = function(self) self:executeSound('heavyWhiff', {"sfx", "whiff"}) end }; { type="active"; frames = {4, 1, 13, 1}; }; { frames = {5, 1}; custom = function(self) self.height = self.height + 10 self.y = self.y - 10 self.attackbox.height = 48 * gameLogicMult self.attackbox.relativeY = -24 * gameLogicMult + 10 self.yOffset = self.yOffset + 10 self.attackbox.explosionX = -11 * gameLogicMult self.attackbox.explosionY = -14 * gameLogicMult self.attackType = attackTypes.medium end }; { frames = {6, 1, 7, 1, 8, 1}; custom = function(self) self.yOffset = self.yOffset + 10 end }; { type="recovery"; frames = {9,5,10,4,11,4,12,3,12,1}; custom = function(self) self:stopTrails() self.yOffset = self.yOffset + 10 end }; }; jumpA = { attackbox = {pushback=165 * gameLogicMult, hitStun=16, width=17 * gameLogicMult, height=13 * gameLogicMult, dmg=1, relativeY=25 * gameLogicMult, explosionX = 1 * gameLogicMult,explosionY = 3 * gameLogicMult, priority = 4, ignoreCornerPush=true}; { --height=16 frames = {1,3,2,3}; --1,2,2,3,3,2 custom = function(self) self:executeSound('mediumWhiff', {"sfx", "whiff"}) self.attackbox.SFX = "hitLightSFX" end }; { type="active"; frames = {3,2,4,1,5,3}; --4,1,5,5 }; { type="recovery"; frames = {6,3,7,4}; }; -- { -- spriteName = "jumpUp"; -- frames = {4,2,4,14}; --8,2 -- }; endWith = function(self) self:executeAnimation("jumpUp", { frames={4,2,4,14}; }); end }; jumpB = { attackbox = {pushback=90 * gameLogicMult, hitStun=17, width=38 * gameLogicMult, height=11 * gameLogicMult, dmg=1, relativeY=20 * gameLogicMult, relativeX= -33 * gameLogicMult, explosionX = {2 * gameLogicMult, -37 * gameLogicMult}, explosionY = {8 * gameLogicMult, 8 * gameLogicMult}, priority = 3, explosionOnEnemyX = true, ignoreCornerPush=true}; { --hitstun:13 frames = {1,2,2,3,3,2}; --1,2,2,3,3,4 custom = function(self) self:executeSound('heavyWhiff', {"sfx", "whiff"}) end }; { type="active"; frames = {4,5,5,5}; }; { type="recovery"; frames = {6,5,7,2}; --6,5,7,5 }; -- { -- spriteName = "jumpUp"; -- frames = {4,5,4,2}; -- }; endWith = function(self) self:executeAnimation("jumpB", { { frames={7,4}; }; { spriteName = "jumpUp"; frames = {4,5,4,3}; }; } ); end }; downForwardA = { attackbox = {pushback=270 * gameLogicMult, hitStun=19, width=31 * gameLogicMult, height=10 * gameLogicMult, relativeY = 20 * gameLogicMult, dmg=1, explosionX = 1 * gameLogicMult, explosionY = -2 * gameLogicMult, priority = 2}; --hitStun=16 pushback=300 { frames = {1,1,2,1,3,1,4,1,5,1,6,1}; custom = function(self) self:stopTrails() end }; { frames = {6,1}; custom = function(self) self:executeSound('rush', "sfx") -- self.sprites.rushEffect.sheet = self.rushEffectSheet self:setDust(-40) --0 self:changeSpeed(900, 70) --880, 60 self.rushSheet = self.sprites.rushEffect.sheet self.rushPunchEffectAnimate = anim8.newAnimation(self.sprites.rushEffect.grid(repeatNum(1,1,2,1,3,1,4,1,5,1,6,1,7,1)), frameTime, 'pauseAtEnd') end }; { type="active"; frames = {7,1,8,1,9,3}; }; { type="recovery"; frames = {11,6,12,4,14,4}; --11,3,12,4,14,4 custom = function(self) end }; }; downForwardB = { attackbox = {pushback=238 * gameLogicMult, hitStun=13, width=26 * gameLogicMult, height=10 * gameLogicMult, relativeY = 18 * gameLogicMult, dmg=1, explosionX = 0 * gameLogicMult, explosionY = -2 * gameLogicMult, priority = 2}; { frames = {1,4}; custom = function(self) self:setDust(-40) --0 self:changeSpeed(375,27) --375,27 self:stopTrails() end }; { frames = {5,3}; custom = function(self) self:executeSound('heavyRush', {"sfx", "whiff"}) end }; { type="active"; frames = {6,2}; custom = function(self) self.attackbox.exists = true self.attacking = true end }; { frames = {7,1,8,2}; custom = function(self) TEsound.stop("whiff") self:executeSound('heavyRush', {"sfx", "whiff"}) self.attackbox.exists = false self.attacking = true end }; { frames = {9,2}; custom = function(self) self.attackbox.relativeY = 8 * gameLogicMult self.attackbox.width=25 * gameLogicMult self.attackbox.exists = true self.attacking = true end }; { frames = {10,1, 11,2}; custom = function(self) TEsound.stop("whiff") self:executeSound('heavyRush', {"sfx", "whiff"}) self.attackbox.exists = false self.attacking = true end }; { frames = {12,2}; custom = function(self) self.attackbox.relativeY = 28 * gameLogicMult self.attackbox.width=26 * gameLogicMult self.attackbox.exists = true self.attacking = true end }; -- { -- frames = {13,1, 14,2}; -- custom = function(self) -- TEsound.stop("whiff") -- self:executeSound('tenchiDP', {"sfx", "whiff"}) -- self.attackbox.exists = false -- self.attacking = true -- end -- }; -- { -- frames = {15,2}; -- custom = function(self) -- self.attackbox.relativeY = 18 * gameLogicMult -- self.attackbox.exists = true -- self.attacking = true -- end -- }; { type="recovery"; frames = {16,5,17,5}; --16,4,17,4 }; }; downBackA = { attackType = attackTypes.high; attackbox = {pushUp = -4000 * gameLogicMult, pushback=30 * gameLogicMult, hitStun=12, width=31 * gameLogicMult, height=24 * gameLogicMult, relativeX = -26 * gameLogicMult, relativeY = 22 * gameLogicMult, dmg=1, explosionX = -16 * gameLogicMult, explosionY = 8 * gameLogicMult, priority = 2, ignoreCornerPush=true}; { frames = {12,5}; custom = function(self) self.throwInvuln = true self:stopTrails() -- self.height = self.height - 30 -- self.ignoreGravity = true end }; { frames = {1,2,2,1}; custom = function(self) self:setDust(100, false, true) -- self.jumpEffectAnimate = anim8.newAnimation(self.sprites.jumpEffect.grid(repeatNum(1,3,2,3,3,3,4,3,5,3,6,3,7,3)), frameTime, 'pauseAtEnd') -- self.ignoreGravity = false self.height = self.height - 30 self.ySpeed = -1500 self.gravity = 9500 self:changeSpeed(1300, 90) -- self:changeSpeed(1100, 90) --self:changeSpeed(900, 90) self:executeSound('launch', "sfx") end }; { frames = {3,2}; custom = function(self) local difference = math.abs(self.x - self.enemy.x) difference = difference - 2 if difference < 20 then difference = 20 end end; }; { frames = {4,7}; custom = function(self) self:changeSpeed(0) self.ignoreGravity = true self.ySpeed = 0 self.gravity = defaultGravity self:executeSound('heavyRush', "sfx") end; }; { frames = {5,1}; custom = function(self) self.ignoreGravity = false self.gravity = self.gravity + 90000 self.ySpeed = 300 self.dropSheet = self.sprites.dropEffect.sheet self.dropEffectAnimate = anim8.newAnimation(self.sprites.dropEffect.grid(1,1,2,1,3,1,4,1,5,1,6,1,7,1), frameTime, 'pauseAtEnd') self.dpFlip = self.flip if self.dpFlip == 1 then self.dpX = self.x - 39 else self.dpX = self.x + 39 + 36 end end }; { type="active"; frames = {5,1}; }; { frames = {6,2}; custom = function(self) end }; { type="recovery"; frames = {7,3,8,3,9,3}; --7,4,8,4,9,4 custom = function(self) -- self.height = standHeight self.throwInvuln = false self.height = standHeight self.knockdownX = self.x - 66 if self.flip == -1 then self.knockdownX = self.knockdownX + 14 end self.knockedEffect = true self.knockdownEffectAnimate:gotoFrame(1) self.knockdownEffectAnimate.onLoop = function() self.knockedEffect = false end cameraJitterY = 4 self:executeSound('naomiDP', "sfx") self.gravity = defaultGravity self.ySpeed = self.gravity * frameTime end }; { frames = {10,3,11,3}; --10,4,11,4 custom = function(self) self.ignoreCollision = false end }; }; downBackB = { attackbox = {pushUp = 250 * gameLogicMult, pushback=60 * gameLogicMult, hitStun=18, width=47 * gameLogicMult, height=84 * gameLogicMult, relativeX = -36 * gameLogicMult, relativeY = -40 * gameLogicMult, dmg=1, explosionY = -40 * gameLogicMult,explosionX = 0 * gameLogicMult, priority = 1, ignoreCornerPush=true, external = true}; { --pushback: 80 frames = {1,2,2,1,3,1,4,1,5,1,6,1}; custom = function(self) self.invulnerability = true self:stopTrails() end }; --1,4,2,2,3,2 { type="active"; frames = {7,1}; custom = function(self) self:executeSound('naomiDP', "sfx") self.knockdownX = self.x - 64 --96 if self.flip == -1 then self.knockdownX = self.knockdownX + 12 end self.knockedEffect = true self.knockdownEffectAnimate:gotoFrame(1) self.knockdownEffectAnimate.onLoop = function() self.knockedEffect = false end self.ignoreCollision = true cameraJitterY = 3 self.enemy.extHit = true self:executeEffect("pillar") -- self.dpFlip = self.flip -- if self.dpFlip == 1 then -- self.dpX = self.x - 37 -- else -- self.dpX = self.x + 37 + 36 -- end -- -- self.DPexplosionSheet = self.sprites.DPexplosion.sheet -- self.DPexplosionSheet = self.sprites.DPexplosion.sheet -- self.pillarAnimate = anim8.newAnimation(self.sprites.DPexplosion.grid(repeatNum(1,3,2,3,3,2,4,2,5,1,6,3,7,3,8,3,9,2,10,2,11,2,12,1)), frameTime, 'pauseAtEnd') --1,3,2,3,3,2,4,2,5,1,6,3,7,3,8,3,10,2,12,2,15,2,17,1 end }; { frames = {7,4}; --7,3,8,4,9,4,10,6 custom = function(self) end }; { frames = {8,4,9,4}; --7,3,8,4,9,4,10,6 custom = function(self) self.ignoreCollision = false end }; { frames = {10,4}; custom = function(self) end }; { type="recovery"; frames = {10,6,11,6,12,4,13,4}; --10,2,11,6,12,6,13,6 custom = function(self) self.invulnerability = false -- self.invulnerability = false -- self.ignoreCollision = false end }; }; neutralAB = { animation = "neutralABSprite"; { frames = {1,2,2,2,3,1,4,1,5,1,6,1}; --1,1,2,1,3,1,4,1,5,1,6,1 --1,3,2,1,3,1,4,1,5,1,6,2 custom = function(self) self:startTrails("super") self.attacking = false end }; { type="recovery"; frames = {7,2}; --7,2,8,2,9,4,10,3,11,3,12,3,13,3 custom = function(self) -- self:stopTrails() self:executeSound("antlerAir", {"sfx"}) self:executeSound("knockdown", {"sfx"}) self:changeMeter(1) cameraJitterY = 3 self.knockdownX = self.x - 66 + (2 * self.flip) --96 if self.flip == -1 then self.knockdownX = self.knockdownX + 14 end self.knockedEffect = true self.knockdownEffectAnimate:gotoFrame(1) self.knockdownEffectAnimate.onLoop = function() self.knockedEffect = false end end }; { frames = {8,3,9,3,10,2,11,3,12,3,13,3,2,1,1,1}; custom = function(self) self:stopTrails() end }; }; neutralABRecovery = { animation = "neutralABSprite"; { frames = {11,2,12,2,13,1}; custom = function(self) -- self.chargeEffectFrontAnimate = anim8.newAnimation(self.chargeEffectFrontSprite.grid(8,1), frameTime) -- self.chargeEffectBackAnimate = anim8.newAnimation(self.chargeEffectBackSprite.grid(8,1), frameTime) end -- custom = function(self) -- self.chargeEffectAnimate = anim8.newAnimation(self.chargeEffectSprite.grid(repeatNum(17,1)), frameTime) -- self.chargeEffectBackAnimate = anim8.newAnimation(self.chargeEffectSprite.grid(repeatNum(17,1)), frameTime) -- end }; { frames = {13,1}; custom = function(self) self:stopTrails() -- self.chargeEffectAnimate = anim8.newAnimation(self.chargeEffectSprite.grid(repeatNum(17,1)), frameTime) -- self.chargeEffectBackAnimate = anim8.newAnimation(self.chargeEffectSprite.grid(repeatNum(17,1)), frameTime) end }; }; neutralABLoop = { endWith = function(self) self:executeMove("neutralABLoop") end; animation = "neutralABSprite"; { frames = {7,4,8,4}; custom = function(self) self:executeSound("antlerAir", {"sfx"}) self:executeSound("knockdown", {"sfx"}) self.attacking = false self:changeMeter(1) -- self.chargeCancel = false self:addFrameTimeAttack(0,0,8) -- self.haloEffectAnimate = anim8.newAnimation(self.haloEffectSprite.grid(repeatNum(1,2,3,2,2,2,3,2,2,2,3,1)), frameTime, 'pauseAtEnd') -- self.chargeEffectFrontAnimate = anim8.newAnimation(self.chargeEffectFrontSprite.grid(repeatNum(1,1,2,2,3,2,5,2,6,1,7,1)), frameTime) -- self.chargeEffectBackAnimate = anim8.newAnimation(self.chargeEffectBackSprite.grid(repeatNum(1,1,2,2,3,2,5,2,6,1,7,1)), frameTime) -- self:setDust(110, false, true) --70 -- self.heavyLaunchEffectAnimate = anim8.newAnimation(self.heavyLaunchEffectSprite.grid(repeatNum(1,3,2,3,3,3,4,3,5,3,6,3,7,1)), frameTime, 'pauseAtEnd') -- self.heavyLaunchEffect2Animate = anim8.newAnimation(self.heavyLaunchEffectSprite.grid(repeatNum(1,3,2,3,3,3,4,3,5,3,6,3,7,1)), frameTime, 'pauseAtEnd') cameraJitterY = 4 self.knockdownX = self.x - 66 + (2 * self.flip) --96 if self.flip == -1 then self.knockdownX = self.knockdownX + 14 end self.knockedEffect = true self.knockdownEffectAnimate:gotoFrame(1) self.knockdownEffectAnimate.onLoop = function() self.knockedEffect = false end end }; { frames = {9,2,10,2,11,3,12,3,13,3,2,1,3,1,4,1,5,1,6,1}; custom = function(self) -- self.chargeCancel = true end }; }; downForwardAB = { -- animation = "downForwardABSprite"; --pushback:300 special = true; attackbox = {pushback=300 * gameLogicMult, hitStun=16, width=30 * gameLogicMult, height=10 * gameLogicMult, relativeY = 18 * gameLogicMult, dmg=1, explosionX = 0 * gameLogicMult, priority = 2}; { frames = {1,1,2,1,3,1,4,1,5,1,7,1}; --1,1,2,1,3,2,4,2 custom = function(self) -- self:changeSpeed(700, 20) self:startTrails("super") cameraJitterX = 2 self:executeSound('ex', "sfx") self:changeMeter(-2) self.dpFlip = self.flip if self.flip == 1 then self.wingX = self.x - (104 * self.flip) + 2 - 10 -- +2 else self.wingX = self.x - (104 * self.flip) + 36 + 10-- +36 end end }; { frames = {7,1}; custom = function(self) -- self.sprites.rushEffectSprite.sheet = self.rushPunchEffectEX self.rushSheet = self.sprites.rushEffectEX.sheet self.rushPunchEffectAnimate = anim8.newAnimation(self.sprites.rushEffect.grid(repeatNum(1,1,2,1,3,1,4,1,5,1,6,1,7,1)), frameTime, 'pauseAtEnd') end }; { type="active"; frames = {8, 1, 9, 1, 10, 2}; custom = function(self) self:executeSound('rush', "sfx") self.rushWingAnimate = anim8.newAnimation(self.sprites.rushWing.grid(repeatNum(2,2,3,2,4,2,5,2,6,2,7,2,8,2,10,2,11,2,12,2,13,2)), frameTime, 'pauseAtEnd') self.wingFollow = true self:setDust(-40) --0 self:changeSpeed(880, 60) end }; { frames = {11, 2, 12, 2, 13 , 2}; custom = function(self) self.wingFollow = false self:executeSound('heavyRush', {"sfx", "whiff"}) self.attackbox.exists = false self.attacking = true end }; { frames = {14,2}; custom = function(self) self.attackbox.relativeY = 8 * gameLogicMult self.attackbox.exists = true self.attackbox.pushback = 238 * gameLogicMult self.attacking = true end }; { frames = {15,1,16,2}; custom = function(self) self:executeSound('heavyRush', {"sfx", "whiff"}) self.attackbox.exists = false self.attacking = true end }; { frames = {17,2}; custom = function(self) self.attackbox.relativeY = 28 * gameLogicMult self.attackbox.exists = true self.attacking = true -- self:stopTrails() end }; -- { -- frames = {18,1,19,2}; -- custom = function(self) -- self:executeSound('tenchiDP', {"sfx", "whiff"}) -- self.attackbox.exists = false -- self.attacking = true -- end -- }; -- { -- frames = {20,2}; -- custom = function(self) -- self.attackbox.relativeY = 18 * gameLogicMult -- self.attackbox.exists = true -- self.attacking = true -- end -- }; { type="recovery"; frames = {21,3,22,3}; --21,3,22,2 -- custom = function(self) -- end custom = function(self) self:stopTrails() end }; { frames = {22,1}; -- custom = function(self) -- self:stopTrails() -- end }; }; downBackAB = { -- animation = "downBackAB"; special = true; attackType = attackTypes.high; attackbox = {pushUp = 349 * gameLogicMult, pushback=52 * gameLogicMult, hitStun=18, width=47 * gameLogicMult, height=84 * gameLogicMult, relativeX = -36 * gameLogicMult, relativeY = -40 * gameLogicMult, dmg=1, explosionY = 20,explosionX = 20, explosionOnEnemyX = true, explosionOnEnemyY = true, priority = 1, ignoreCornerPush=true, external = true}; --pushUp = 330 pushback=60*gamelogicmult { frames = {1,1}; custom = function(self) self:executeSound('ex', "sfx") cameraJitterY = 2 self.invulnerability = true self:changeMeter(-2) self:startTrails("super") end }; { frames = {1,1}; custom = function(self) end }; { frames = {2,2,3,1}; --1,2,2,4 custom = function(self) -- self.ignoreGravity = true -- self.invulnerability = true self.ySpeed = -1500 --850 --1300 ---1600 self.gravity = 9500 --6100 --9500 -- 14000 -- self:changeSpeed(900, 90) --260 self:changeSpeed(1500, 90) -- self.height = airHeight + 1 self:executeSound('launch', "sfx") -- self:setDust(100, false, true) --70 -- self.heavyLaunchEffectAnimate = anim8.newAnimation(self.heavyLaunchEffectSprite.grid(repeatNum(1,3,2,3,3,3,4,3,5,3,6,3,7,1)), frameTime, 'pauseAtEnd') end }; --1,4,2,2,3,2 { frames = {4,2}; --3,2,4,4 custom = function(self) local difference = math.abs(self.x - self.enemy.x) difference = difference - 2 if difference < 20 then difference = 20 end end; }; { frames = {5,7}; --5,4 custom = function(self) self:changeSpeed(0) self.ignoreGravity = true self.ySpeed = 0 self.gravity = defaultGravity --4100 self:executeSound('heavyRush', "sfx") end; }; { frames = {6,1}; custom = function(self) self.ignoreGravity = false self.gravity = self.gravity + 90000 --9000 self.height = standHeight self.ySpeed = 300 self.dropSheet = self.sprites.dropEffectEX.sheet self.dropEffectAnimate = anim8.newAnimation(self.sprites.dropEffect.grid(1,1,2,1,3,1,4,1,5,1,6,1,7,1), frameTime, 'pauseAtEnd') --1,1,2,1,3,1,4,1,5,1,6,1,7,1 self.dpFlip = self.flip if self.dpFlip == 1 then self.dpX = self.x - 39 else self.dpX = self.x + 39 + 36 end end }; { frames = {6,1}; }; { frames = {7,1}; }; { type="active"; frames = {8,4,9,4,10,4, 11,4}; --9,4,10,4,11,4 custom = function(self) self.height = standHeight self.ignoreCollision = true self.knockdownX = self.x - 66 --96 if self.flip == -1 then self.knockdownX = self.knockdownX + 14 end self.knockedEffect = true self.knockdownEffectAnimate:gotoFrame(1) self.knockdownEffectAnimate.onLoop = function() self.knockedEffect = false end cameraJitterY = 5 self:executeSound('naomiDP', "sfx") if self.flip == 1 then self.wingX = self.x - (104 * self.flip) + 2 else self.wingX = self.x - (104 * self.flip) + 36 -- (12 * self.flip) end self.dropWingAnimate = anim8.newAnimation(self.sprites.dropWing.grid(repeatNum(1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,10,2,11,2,12,2,14,2)), frameTime, 'pauseAtEnd') self.enemy.extHit = true self:executeEffect("exPillar") -- self.dpFlip = self.flip -- if self.dpFlip == 1 then -- self.dpX = self.x - 39 + 2 -- else -- self.dpX = self.x + 39 + 36 -- end -- self.DPexplosionSheet = self.sprites.DPexplosionEX.sheet -- self.pillarAnimate = anim8.newAnimation(self.sprites.DPexplosion.grid(repeatNum(1,3,2,3,3,2,4,2,5,1,6,3,7,3,8,3,9,2,10,2,11,2,12,1)), frameTime, 'pauseAtEnd') --1,3,2,3,3,2,4,2,5,1,6,3,7,3,8,3,10,2,12,2,15,2,17,1 end }; { type="recovery"; frames = {12, 6, 13, 4, 14, 3}; --12,4, 13, 4, 14, 3 custom = function(self) self.ignoreCollision = false self.invulnerability = false self:stopTrails() end }; { frames = {14,1}; custom = function(self) end }; }; dashForward = { animation = "runSprite"; endWith = function(self) self:executeAnimation("run") self.runCancel = true self.forceThrowTech = true self.attacking = false end; { frames = {1,1}; --1,3 custom = function(self) self:startTrails("dash") self.attacking = false self:changeWidth(30) self:setDust(130, false, true) --70 self:executeSound("naomiRun", "sfx") self.heavyLaunchEffectAnimate = anim8.newAnimation(self.sprites.bigDust.grid(repeatNum(1,3,2,3,3,3,4,3,5,3,6,3,7,1)), frameTime, 'pauseAtEnd') end }; { frames = {1,2}; --1,3 custom = function(self) self:changeWidth(30) end }; { frames = {2,2}; --1,3 custom = function(self) self:changeSpeed(380) end }; }; dashBack = { animation = "dashBackSprite"; { type="recovery"; frames = {1,3,2,7,3,2}; --9 custom = function(self) self:startTrails("dash") self:executeSound("dash", "sfx") self:setDust(136, true) --125, true self:changeSpeed(-self.runSpeed * 2.2, -35) --30 end }; { frames = {3,1}; custom = function(self) self:stopTrails() end }; }; runRecovery = { spriteName = "dashForward"; endWith = function(self) self:changeSpeed(0) self:endAttack() self.noInput = false end; { type="recovery"; frames = {10,2,11,1,12,1,13,1}; --9 custom = function(self) self:changeSpeed(350, 50) --30 end }; { frames = {13,1}; custom = function(self) self:stopTrails() self.xOffset = -36 -- self:changeSpeed(0) end }; }; }; animations = { idle = { frameTime = .06; frames = {1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,1,10,1,11,1,12,1,13,1,14,1,15,1,16,1,17,1,18,1,19,1,20,1,21,1,22,1,23,1,24,1,25,1,26,1,27,1,28,1,29,1,30,1,31,1,32,1}; }; crouch = { frameTime = frameTime * 4; frames= {1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,1,10,1,11,1,12,1,13,1,14,1,15,1,16,1,17,1,18,1,19,1,20,1,21,1,22,1,23,1,24,1,25,1,26,1,27,1,28,1,29,1,30,1}; }; walkForward = { frameTime= frameTime * 4; frames= {1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,1,10,1,11,1,12,1,13,1,14,1,15,1,16,1,17,1,18,1,19,1,20,1,21,1,22,1,23,1,24,1}; }; walkBack = { frameTime= frameTime * 5; frames= {1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,1,10,1,11,1,12,1,13,1,14,1,15,1,16,1,17,1,18,1,19,1,20,1,21,1,22,1,23,1,24,1}; }; jumpUp = { frames={3,8,4,4,5,10,6,4,7,4,8,4}; }; jumpForward = { spriteName = "jumpUp"; frames={3,8,4,4,5,10,6,4,7,4,8,4}; }; jumpBack = { spriteName = "jumpUp"; frames={3,8,4,4,5,10,6,4,7,4,8,4}; }; crouchTransition = { frames={1,3}; }; standTransition = { spriteName = "crouchTransition"; frames={1,3}; custom = function(self) self.yOffset = 2 end }; run = { spriteName = "dashForward"; frames={3,4,4,3,5,4,6,3,7,4,8,3,9,4,2,3}; }; preBlock={ spriteName="blockStand"; endWith = "nothing"; frames = {1,1,2,1,3,1}; }; preBlockReverse={ spriteName="blockStand"; frames = {2,1,1,1}; }; preBlockCrouch={ endWith = "nothing"; spriteName="blockCrouch"; frames={1,2,2,1}; }; preBlockCrouchReverse={ spriteName="blockCrouch"; frames={1,2}; }; turn = { frames = {1,4}; }; crouchTurn = { frames = {1,4}; }; airHurt = { endWith = "nothing"; { frames = {1,1}; }; { spriteName = "jumpUp"; frames = {4,4,5,13,6,4,7,4,8,4}; }; }; impact = { spriteName = "knockdown"; frames = {11,3}; }; startGroundBounce = { spriteName = "knockdown"; frames = {11,3,12,2,13,1,14,7} }; stopGroundBounce = { spriteName = "knockdown"; frames = {15, 3, 16, 3, 17, 4} --15, 3, 16, 3, 17, 3 }; wakeup = { spriteName = "knockdown"; frames = {18,4,19,4,20,4} }; death = { spriteName = "knockdown"; endWith = "nothing"; frames = {17,1} }; -- local anim1 = {11,3,12,2,13,1,14,7} --11,3,12,2,13,1,14,7 -- local anim2 = {15, 3, 16, 3, 17, 3} --15, 3, 16, 3, 17, 9 -- local anim3 = {18,4,19,4,20,4} --18,5,19,5,20,5 -- self:_wakeUp(11, 17, anim1, anim2, anim3, 10) --impactFrame, deathFrame, bounceAnim, downAnim, getUpAnim, xEffectOffset knockdown = { endWith = "nothing"; frames = {1,6,2,2,3,2,4,1,5,1,6,2,7,2,8,3,9,2,10,1}; --1,6 }; land = { spriteName = "jumpUp"; frames = {9,4,10,4,11,4}; }; chipDeath = { endWith = "nothing"; { frames={1,3,2,3}; custom=function(self) self.enemy:drawFirst() end }; { frames={3,3,4,3,5,3,6,3}; custom = function(self) self:executeSound("chipDeath", {"sfx"}) end }; { frames={7,3}; custom = function(self) self:executeSound("chipDeath", {"sfx"}) end }; { frames={8,1}; custom = function(self) koFinish = true end }; }; tech = { frames={1,4,2,4,3,4,4,4,5,4}; }; yay = { frames = {1,8,2,4,3,4,4,4,5,4,6,4,7,4,8,15,9,6,10,6}; endWith = function(self) self:executeAnimation("yayLoop") end }; yayLoop = { spriteName = "yay"; frames = {11,45,12,6,13,45,14,6}; }; boo = { { frames={1,4,2,4,3,10,4,2}; }; { frames={5,2,6,2,7,16,8,4,9,8,10,2}; custom = function(self) if self.player1 == true then self:executeSound("hatLeft", {"sfx"}) else self:executeSound("hatRight", {"sfx"}) end end }; endWith = function(self) self:executeAnimation("booLoop") if self.player1 == true then self:executeSound("stompLeft", {"sfx"}) else self:executeSound("stompRight", {"sfx"}) end end }; booLoop = { frames = {1,24,2,2,3,2,4,2,5,2,6,2,7,24,8,2,9,2,10,2,11,2,12,2,1,24,2,2,3,2,4,2,5,2,6,2,7,24,8,2,9,2,10,2,11,2,12,2,1,4,13,4,14,4,13,4,1,8,2,2,3,2,4,2,5,2,6,2,7,24,8,2,9,2,10,2,11,2,12,2}; }; win={ endWith = function(self) self:executeThrow() self:executeMove('winEnd') end; { frames={6,2,7,2,8,1,9,1,10,1,13,40}; custom = function(self) self:drawFirst() self:executeSound('launch', "sfx") end }; { frames={11,1,12,1}; --11,4,12,2 custom=function(self) local difference = math.abs(self.x - self.enemy.x) if self.flip == -1 then difference = difference - 1 end self:changeLocation(difference) end }; }; winEnd = { -- animation="win2Sprite"; endWith = "nothing"; enemyFrames={ {14, -21, 50}, {14, -21, 50}, {13, -21, 53}, {13, -21, 53}, {13, -1, 51}, {13, -1, 43}, {3, 7, 46}, {8, 10, 37}, {8, 6, 30}, {3, 4, 33}, {3, 4, 43}, {1, -7, 37}, {1, -7, 24}, {1, -7, 9}, {1, -7, -8}, {1, 1, 1} }; { frames={1,1}; custom=function(self) -- self.ignoreFloor = true -- self:reverseDrawOrder() self:executeSound(self.hitSpecialSFX, {"sfx"}) self:throwHitstop(6, 20, 50) self.groundExplosionAnimate = anim8.newAnimation(self.sprites.groundExplosion.grid(repeatNum(1,2,2,2,3,2,4,2,5,1,6,1,7,1,8,1,9,1)), frameTime, 'pauseAtEnd') --1,3,2,3,3,2,4,2,5,1,6,2,7,2,8,2,9,1 self.dpFlip = self.flip if self.dpFlip == 1 then self.dpX = self.x + 10 - 120 else self.dpX = self.x - 10 + 36 + 120 end --looking okay with no orange: 1,2,2,3,3,2,4,2,5,1,6,2,7,2,8,2,9,1,11,1 --1,2,2,2,3,2,4,2,5,1,6,1,7,2 --1,3,2,3,3,2,4,2,5,1,6,2,7,2,8,2,9,1 self.enemy.ignoreFloor = true self.enemy.xOffset = self.xOffset self.enemy.yOffset = self.yOffset -- self.enemy:knockFall() -- self.enemy.xSpeed = 30 -- self.enemy.ySpeed = -400 -- self.throwBurn = true if self.flip == 1 then self.wingX = self.x - (104 * self.flip) - 8 else self.wingX = self.x - (104 * self.flip) + 46 -- (12 * self.flip) end -- self.dropWingAnimate = anim8.newAnimation(self.dropWingSprite.grid(repeatNum(1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,10,2,11,2,12,2,14,2)), frameTime, 'pauseAtEnd') self.knockdownX = self.x - 66 --96 if self.flip == -1 then self.knockdownX = self.knockdownX + 14 end self.knockedEffect = true self.knockdownEffectAnimate:gotoFrame(1) self.knockdownEffectAnimate.onLoop = function() self.knockedEffect = false end cameraJitterY = 4 end; }; { frames= {1,1}; custom = function(self) self.enemy:forceEnemyEffect("burn") self:throwHitstop(6, -40, 75) self:executeSound(self.hitSpecialSFX, {"sfx"}) self.groundExplosionAnimate = anim8.newAnimation(self.sprites.groundExplosion.grid(repeatNum(1,2,2,2,3,2,4,2,5,1,6,1,7,1,8,1,9,1)), frameTime, 'pauseAtEnd') --1,3,2,3,3,2,4,2,5,1,6,2,7,2,8,2,9,1 if self.dpFlip == 1 then self.dpX = self.x + 50 - 120 else self.dpX = self.x - 50 + 36 + 120 end end; }; { frames={2,1}; custom = function(self) self:throwHitstop(7, -10, 55) self:executeSound(self.hitSpecialSFX, {"sfx"}) self.groundExplosionAnimate = anim8.newAnimation(self.sprites.groundExplosion.grid(repeatNum(1,2,2,2,3,2,4,2,5,1,6,1,7,1,8,1,9,1)), frameTime, 'pauseAtEnd') --1,3,2,3,3,2,4,2,5,1,6,2,7,2,8,2,9,1 if self.dpFlip == 1 then self.dpX = self.x - 10 - 120 else self.dpX = self.x + 10 + 36 + 120 end end; }; { frames={2,1,3,2}; custom = function(self) self:executeSound(self.hitSpecialSFX, {"sfx"}) self:executeSound('grab', "sfx") end }; { frames={4,2,6,2,7,2,8,2,9,20,10,2,11,2}; custom = function(self) self.enemy:stopEnemyEffect() end }; { frames={12,1,13,1,14,1,15,1}; custom = function(self) self:executeSound('ex', "sfx") self:executeSound('launch', "sfx") -- custom = function(self) -- self:reverseDrawOrder() end }; { frames={16,1}; --16,80 custom=function(self) self.enemy.xOffset = 400 self.enemy.ignoreFloor = false end }; }; }; throw = { -- spriteName = "throw"; enemyFrames = { {5, 24, -14}, {7, 20, -16}, {8, 18, -21}, {9, 17, -23}, {9, 14, -19}, {9, 2, -16}, {9, 0, -16}, {9, 2, -16}, {12, 5, -13}, {13, 7, -16}, {14, 9, -12}, {16, 16, -11}, --16, 16, -11 {0, 0, 0}, {0, 0, 0}, {1, 16, -18}, {1, 11, -21}, {14, -12, -13}, {15, 5, -16}, {16, 22, -10}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; start = { {frames = {1,3,2,3,3,3}}; { frames = {4,1,3,2}; custom = function(self) self:stopTrails() self.attackbox.priority = 1 self:throwHitstop(2, 40, 30) --3, 40, 37 self.enemy:forceEnemyEffect("burn") self:executeSound(self.hitSpecialSFX, {"sfx"}) self.combo = self.combo + 1 cameraJitterX = 1 self.enemy:changeHealth(1) end }; { frames = {4,1,3,2}; custom = function(self) self:throwHitstop(2, 20, 20) cameraJitterX = 1 self:executeSound(self.hitSpecialSFX, {"sfx"}) end }; { frames = {4,1,3,2}; custom = function(self) self:throwHitstop(2, 50, 0) cameraJitterX = 1 self:executeSound(self.hitSpecialSFX, {"sfx"}) end }; { frames = {4,1,3,2}; custom = function(self) self:throwHitstop(2, 30, 50) cameraJitterX = 1 self:executeSound(self.hitSpecialSFX, {"sfx"}) end }; { frames = {5,2,6,2,7,2,8,2}; custom = function(self) self.enemy:stopEnemyEffect() end }; -- { -- frames = {8,4,9,4,10,4,11,4}; -- -- data = {dmg = 1, hitstop = 9, explosionX = 101, explosionY = 101}; --TODO: get correct explosionX and explosionY -- custom = function(self) -- -- self:throwHitstop(8, 40, 37) -- -- self.enemy:changeHealth(1) -- --self.enemy.health = self.enemy.health - 1 -- end -- } }; forward = { { frames = {9,2,10,2,11,2}; -- data = {dmg = 1, hitstop = 9, explosionX= 101, explosionY = 101, changeLocation = 90, changeSpeed = 350, changeYSpeed = -600}; --TODO: get correct explosionX and explosionY }; { frames = {12,1}; custom = function(self) self.ignoreFloor = false self.enemy.ignoreFloor = false cameraJitterY = 4 ignoreCameraJitterX = true self:executeSound(self.hitSpecialSFX, {"sfx"}) self:throwHitstop(12, 0, 164, "burn") self.combo = self.combo + 1 self.enemy:changeHealth(1) self.dpFlip = self.flip if self.dpFlip == 1 then self.dpX = self.x + 10 - 60 else self.dpX = self.x - 10 + 36 + 60 end self.enemy:executeKnockdownEffect(70) -- cameraJitterY = 4 --looking okay with no orange: 1,2,2,3,3,2,4,2,5,1,6,2,7,2,8,2,9,1,11,1 --1,2,2,2,3,2,4,2,5,1,6,1,7,2 --1,3,2,3,3,2,4,2,5,1,6,2,7,2,8,2,9,1 self.groundExplosionAnimate = anim8.newAnimation(self.sprites.groundExplosion.grid(repeatNum(1,2,2,2,3,2,4,2,5,1,6,1,7,1,8,1,9,1)), frameTime, 'pauseAtEnd') --1,3,2,3,3,2,4,2,5,1,6,2,7,2,8,2,9,1 end }; { frames = {13,6,14,6}; custom = function(self) self.enemy:changeLocation(30) self.enemy:changeSpeed(300) --350 self.enemy.ySpeed = -250 self.enemy.y = self.enemy.y + 20 self.enemy.ignoreGravity = false self.enemy:knockFall() ignoreCameraJitterX = false end }; }; backward = { { frames = {15,2,16,2}; -- data = {dmg = 1, changeLocation = 10, changeSpeed = 500, changeYSpeed = -600}; }; { frames = {17,2,18,2}; custom = function(self) self:reverseDrawOrder() self.enemy.flip = -self.enemy.flip end }; { frames = {19,1}; custom = function(self) self:reverseDrawOrder() self.ignoreFloor = false self.enemy.ignoreFloor = false cameraJitterY = 4 ignoreCameraJitterX = true self:executeSound(self.hitSpecialSFX, {"sfx"}) self:throwHitstop(8, 0, 164, "burn") self.combo = self.combo + 1 self.enemy:changeHealth(1) self.dpFlip = self.flip self.enemy:executeKnockdownEffect(90) if self.dpFlip == 1 then self.dpX = self.x - 110 - 50 else self.dpX = self.x + 110 + 36 + 50 end self.groundExplosionAnimate = anim8.newAnimation(self.sprites.groundExplosion.grid(repeatNum(1,2,2,2,3,2,4,2,5,1,6,1,7,1,8,1,9,1)), frameTime, 'pauseAtEnd') end }; { frames = {20,4,21,4,22,4}; custom = function(self) --self.enemy.health = self.enemy.health - 1 --self.enemy:changeLocation(-10) self.enemy:changeSpeed(400) --500 self.enemy.ySpeed = -200 --600 self.enemy.y = self.enemy.y + 20 self.enemy.ignoreGravity = false self.ignoreCollision = false self.enemy:knockFall() ignoreCameraJitterX = false --self.enemy.flip = -self.enemy.flip -- self.enemy.animation:gotoFrame(5) --skip first few frames of knockdown self.faceRight = not self.faceRight end }; { custom = function(self) self:changeLocation(-14) end }; }; }; effects = { pillar = { spriteName = "DPexplosion"; frames = {1,3,2,3,3,2,4,2,5,1,6,3,7,3,8,3,9,2,10,2,11,2,12,1}; relativeX = -37; relativeY = -228; followPlayer = true; ignoreParry = true; }; exPillar = { spriteName = "DPexplosionEX"; frames = {1,3,2,3,3,2,4,2,5,1,6,3,7,3,8,3,9,2,10,2,11,2,12,1}; relativeX = -37; relativeY = -228; -- -106 followPlayer = true; ignoreParry = true; }; hitEffect = { frames = {1,2,2,2,3,2,4,2,5,1,6,1,7,2}; }; ember = { frames = {1,2,2,2,3,2,4,2,5,2,6,1,7,1,8,1,9,1,10,1}; -- relativeX = -20 * gameLogicMult; -- relativeY = -20 * gameLogicMult; gravity = 7; ySpeed = -220; xSpeed = 20; }; emberLeft = { spriteName = "ember"; frames = {1,2,2,2,3,2,4,2,5,2,6,1,7,1,8,1,9,1,10,1}; --{1,2,2,2,3,2,4,2,5,2,6,1,7,1,8,1,9,1,10,1} gravity = 7; ySpeed = -210; xSpeed = -20 }; ember2 = { frames = {1,2,2,2,3,2,4,2,5,4,6,1,7,1,8,1,9,1,10,1}; --{1,4,2,4,3,4,4,4,5,4,6,1,7,1,8,1,9,1,10,1}; --4,4 -- relativeX = -20 * gameLogicMult; -- relativeY = -20 * gameLogicMult; gravity = 8; ySpeed = -120; xSpeed = 5; }; }; nameplate = { { frames = {1,8}; custom = function(self, host) if host.player1 == true then host:executeSound("nameplateClickLeft", {"sfx", "nameplate1"}) else host:executeSound("nameplateClickRight", {"sfx", "nameplate2"}) end end }; { frames = {2,2,3,2}; custom = function(self, host) if host.player1 == true then host:executeSound("nameplateLeft", {"sfx", "nameplate1"}) else host:executeSound("nameplateRight", {"sfx", "nameplate2"}) end host:executeEffect("ember", self.x + 56, self.y + 16 + 10) host:executeEffect("emberLeft", self.x + 56, self.y + 18 + 10) host:executeEffect("ember2", self.x + 46, self.y + 20 + 10) host:executeEffect("ember", self.x + 66, self.y + 30 + 10) host:executeEffect("ember2", self.x + 76, self.y + 26 + 10) host:executeEffect("ember", self.x + 86, self.y + 30 + 10) host:executeEffect("ember2", self.x + 10, self.y + 24 + 10) host:executeEffect("emberLeft", self.x + 12, self.y + 38 + 10) host:executeEffect("ember", self.x + 26, self.y + 32 + 10) host:executeEffect("ember2", self.x + 36, self.y + 14 + 10) host:executeEffect("ember", self.x + 94, self.y + 34 + 10) host:executeEffect("emberLeft", self.x + 20, self.y + 34 + 10) host:executeEffect("ember", self.x + 50, self.y + 12 + 10) host:executeEffect("emberLeft", self.x + 54, self.y + 22 + 10) host:executeEffect("ember2", self.x + 42, self.y + 24 + 10) host:executeEffect("ember", self.x + 60, self.y + 32 + 10) host:executeEffect("ember2", self.x + 72, self.y + 28 + 10) host:executeEffect("ember", self.x + 90, self.y + 28 + 10) host:executeEffect("ember2", self.x + 14, self.y + 26 + 10) host:executeEffect("emberLeft", self.x + 8, self.y + 34 + 10) host:executeEffect("ember", self.x + 32, self.y + 36 + 10) host:executeEffect("ember2", self.x + 30, self.y + 10 + 10) host:executeEffect("ember", self.x + 86, self.y + 30 + 10) host:executeEffect("emberLeft", self.x + 22, self.y + 36 + 10) host:executeEffect("ember", self.x + 56 - 4, self.y + 16 -12) host:executeEffect("emberLeft", self.x + 56 - 4, self.y + 18 -12) host:executeEffect("ember2", self.x + 46 - 4, self.y + 20 -12) host:executeEffect("ember", self.x + 66 - 4, self.y + 30 -12) host:executeEffect("ember2", self.x + 76 - 4, self.y + 26 -12) host:executeEffect("ember", self.x + 86 - 4, self.y + 30 -12) host:executeEffect("ember2", self.x + 10 - 4, self.y + 24 -12) host:executeEffect("emberLeft", self.x + 12 - 4, self.y + 38 -12) host:executeEffect("ember", self.x + 26 - 4, self.y + 32 -12) host:executeEffect("ember2", self.x + 36 - 4, self.y + 14 -12) host:executeEffect("ember", self.x + 94 - 4, self.y + 34 -12) host:executeEffect("emberLeft", self.x + 20 - 4, self.y + 34 -12) host:executeEffect("ember", self.x + 50 - 4, self.y + 12 -12) host:executeEffect("emberLeft", self.x + 54 - 4, self.y + 22 -12) host:executeEffect("ember2", self.x + 42 - 4, self.y + 24 -12) host:executeEffect("ember", self.x + 60 - 4, self.y + 32 -12) host:executeEffect("ember2", self.x + 72 - 4, self.y + 28 -12) host:executeEffect("ember", self.x + 90 - 4, self.y + 28 -12) host:executeEffect("ember2", self.x + 14 - 4, self.y + 26 -12) host:executeEffect("emberLeft", self.x + 8 - 4, self.y + 34 -12) host:executeEffect("ember", self.x + 32 - 4, self.y + 36 -12) host:executeEffect("ember2", self.x + 30 - 4, self.y + 10 -12) host:executeEffect("ember", self.x + 86 - 4, self.y + 30 -12) host:executeEffect("emberLeft", self.x + 22 - 4, self.y + 36 -12) host:executeEffect("ember", self.x + 56 + 8, self.y + 16 + 6) host:executeEffect("emberLeft", self.x + 56 + 8, self.y + 18 + 6) host:executeEffect("ember2", self.x + 46 + 8, self.y + 20 + 6) host:executeEffect("ember", self.x + 66 + 8, self.y + 30 + 6) host:executeEffect("ember2", self.x + 76 + 8, self.y + 26 + 6) host:executeEffect("ember", self.x + 78 + 8, self.y + 30 + 6) host:executeEffect("ember2", self.x + 10 + 8, self.y + 24 + 6) host:executeEffect("emberLeft", self.x + 12 + 8, self.y + 38 + 6) host:executeEffect("ember", self.x + 26 + 8, self.y + 32 + 6) host:executeEffect("ember2", self.x + 36 + 8, self.y + 14 + 6) host:executeEffect("ember", self.x + 88 + 8, self.y + 34 + 6) host:executeEffect("emberLeft", self.x + 20 + 8, self.y + 34 + 6) host:executeEffect("ember", self.x + 50 + 8, self.y + 12 + 6) host:executeEffect("emberLeft", self.x + 54 + 8, self.y + 22 + 6) host:executeEffect("ember2", self.x + 42 + 8, self.y + 24 + 6) host:executeEffect("ember", self.x + 60 + 8, self.y + 32 + 6) host:executeEffect("ember2", self.x + 72 + 8, self.y + 28 + 6) host:executeEffect("ember", self.x + 82 + 8, self.y + 28 + 6) host:executeEffect("ember2", self.x + 14 + 8, self.y + 26 + 6) host:executeEffect("emberLeft", self.x + 8 + 8, self.y + 34 + 6) host:executeEffect("ember", self.x + 32 + 8, self.y + 36 + 6) host:executeEffect("ember2", self.x + 30 + 8, self.y + 10 + 6) host:executeEffect("ember", self.x + 78 + 8, self.y + 30 + 6) host:executeEffect("emberLeft", self.x + 22 + 8, self.y + 36 + 6) end }; { frames = {4,2,5,2}; custom = function(self, host) host:executeEffect("ember", self.x + 56, self.y + 16) host:executeEffect("emberLeft", self.x + 56, self.y + 18) host:executeEffect("ember", self.x + 46, self.y + 20) host:executeEffect("ember2", self.x + 66, self.y + 30) host:executeEffect("ember", self.x + 76, self.y + 26) host:executeEffect("ember2", self.x + 86, self.y + 30) host:executeEffect("ember", self.x + 10, self.y + 24) host:executeEffect("emberLeft", self.x + 12, self.y + 28) host:executeEffect("ember2", self.x + 26, self.y + 32) host:executeEffect("ember", self.x + 36, self.y + 14) host:executeEffect("ember", self.x + 94, self.y + 34) host:executeEffect("emberLeft", self.x + 20, self.y + 34) host:executeEffect("emberLeft", self.x + 20, self.y + 34) host:executeEffect("ember", self.x + 50, self.y + 12) host:executeEffect("emberLeft", self.x + 54, self.y + 22) host:executeEffect("ember2", self.x + 42, self.y + 24) host:executeEffect("ember", self.x + 60, self.y + 32) host:executeEffect("ember2", self.x + 72, self.y + 28) host:executeEffect("ember", self.x + 90, self.y + 28) host:executeEffect("ember2", self.x + 14, self.y + 26) host:executeEffect("emberLeft", self.x + 8, self.y + 34) host:executeEffect("ember", self.x + 32, self.y + 36) host:executeEffect("ember2", self.x + 30, self.y + 10) host:executeEffect("ember", self.x + 86, self.y + 30) host:executeEffect("emberLeft", self.x + 22, self.y + 36) host:executeEffect("ember", self.x + 56 + 4, self.y + 16 - 8) host:executeEffect("emberLeft", self.x + 56 + 4, self.y + 18 - 8) host:executeEffect("ember", self.x + 46 + 4, self.y + 20 - 8) host:executeEffect("ember2", self.x + 66 + 4, self.y + 30 - 8) host:executeEffect("ember", self.x + 76 + 4, self.y + 26 - 8) host:executeEffect("ember2", self.x + 86 + 4, self.y + 30 - 8) host:executeEffect("ember", self.x + 10 + 4, self.y + 24 - 8) host:executeEffect("emberLeft", self.x + 12 + 4, self.y + 28 - 8) host:executeEffect("ember2", self.x + 26 + 4, self.y + 32 - 8) host:executeEffect("ember", self.x + 36 + 4, self.y + 14 - 8) host:executeEffect("ember", self.x + 94 + 4, self.y + 34 - 8) host:executeEffect("emberLeft", self.x + 20 + 4, self.y + 34 - 8) host:executeEffect("emberLeft", self.x + 20 + 4, self.y + 34 - 8) host:executeEffect("ember", self.x + 50 + 4, self.y + 12 - 8) host:executeEffect("emberLeft", self.x + 54 + 4, self.y + 22 - 8) host:executeEffect("ember2", self.x + 42 + 4, self.y + 24 - 8) host:executeEffect("ember", self.x + 60 + 4, self.y + 32 - 8) host:executeEffect("ember2", self.x + 72 + 4, self.y + 28 - 8) host:executeEffect("ember", self.x + 90 + 4, self.y + 28 - 8) host:executeEffect("ember2", self.x + 14 + 4, self.y + 26 - 8) host:executeEffect("emberLeft", self.x + 8 + 4, self.y + 34 - 8) host:executeEffect("ember", self.x + 32 + 4, self.y + 36 - 8) host:executeEffect("ember2", self.x + 30 + 4, self.y + 10 - 8) host:executeEffect("ember", self.x + 86 + 4, self.y + 30 - 8) host:executeEffect("emberLeft", self.x + 22 + 4, self.y + 36 - 8) end }; { frames = {6,1,7,1,8,1,9,1,10,1,11,1,12,1,13,1}; --6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2 custom = function(self, host) host:executeEffect("ember2", self.x + 56, self.y + 6) host:executeEffect("emberLeft", self.x + 56, self.y + 8) host:executeEffect("ember2", self.x + 46, self.y + 10) host:executeEffect("ember2", self.x + 66, self.y + 20) host:executeEffect("ember2", self.x + 76, self.y + 16) host:executeEffect("ember2", self.x + 86, self.y + 20) host:executeEffect("ember2", self.x + 10, self.y + 14) host:executeEffect("emberLeft", self.x + 12, self.y + 28) host:executeEffect("ember2", self.x + 26, self.y + 32) host:executeEffect("ember2", self.x + 36, self.y + 24) host:executeEffect("ember2", self.x + 94, self.y + 24) host:executeEffect("emberLeft", self.x + 20, self.y + 24) host:executeEffect("emberLeft", self.x + 20, self.y + 34) host:executeEffect("ember2", self.x + 50, self.y + 12) host:executeEffect("emberLeft", self.x + 54, self.y + 22) host:executeEffect("ember2", self.x + 42, self.y + 24) host:executeEffect("ember2", self.x + 60, self.y + 32) host:executeEffect("ember2", self.x + 72, self.y + 28) host:executeEffect("ember2", self.x + 90, self.y + 28) host:executeEffect("ember2", self.x + 14, self.y + 26) host:executeEffect("emberLeft", self.x + 8, self.y + 34) host:executeEffect("ember2", self.x + 32, self.y + 36) host:executeEffect("ember2", self.x + 30, self.y + 10) host:executeEffect("ember2", self.x + 86, self.y + 30) host:executeEffect("emberLeft", self.x + 22, self.y + 36) end }; }; colors = { default = { dust = {255,164,42}; mainUI = {187, 72, 0}; health = {255,102,7}; -- trailSuper = {255, 255, 0}; -- trailDash = {255,122,0}; trailSuper = { {215,191,0}; --black {255,255,255}; --white {255,255,0}; --other }; sprite = { {255,132,21}; --naomi orange {255,255,179}; --naomi yellow {128,44,0}; --dark red hands {255,45,0}; --red hands {255,107,9}; --orange hands {255,171,57}; --light orange hands {122,107,0}; --darkest yellow EX {215,191,0}; --dark yellow EX {255,223,24}; --medium yellow EX {255,255,0}; --yellow EX {254,255,119}; --light yellow EX }; effects = { {255,45,0}; --red hands {131,27,19}; --dark red energy {254,125,17}; --orange energy {255,223,23}; --medium yellow energy {215,191,0}; --dark yellow EX {255,255,0}; --yellow EX }; hit = { {255,45,0}; --red hands {255,223,23}; --medium yellow energy }; burn = { {199,56,0}; --black {255,180,0}; --white {248,248,248}; --other }; burnEX = { {225,209,0}; --black {255,255,125}; --white {248,248,248}; --other }; meterChunk = { --meterOne {215,191,0}; --darkGreen {246,255,109}; --mediumGreen {255,255,255}; --lightestGreen --meterTwo {254,255,96}; --darkGreen {249,255,174}; --mediumGreen {255,255,255}; --lightestGreen }; meterIcon = { {215,191,0}; }; }; alt1 = { --red sprite = { {247,0,0}; --naomi orange {194,242,255}; --naomi yellow {142,64,53}; --dark red hands {255,0,0}; --red hands {255,98,80}; --orange hands {254,155,124}; --light orange hands {31,63,86}; --darkest yellow EX {159,234,255}; --dark yellow EX {16,176,255}; --medium yellow EX {0,99,231}; --yellow EX {233,245,255}; --light yellow EX }; effects = { {255,0,0}; --red hands {150,0,44}; --dark red energy {255,0,27}; --orange energy {255,159,178}; --medium yellow energy {0,91,231}; --dark yellow EX {64,174,255}; --yellow EX }; hit = { {255,0,0}; --red hands {255,159,178}; --medium yellow energy }; burn = { {168,0,0}; --black {247,115,101}; --white {248,248,248}; --other }; burnEX = { {0,0,168}; --black {101,143,247}; --white {248,248,248}; --other }; meterChunk = { --meterOne {16,143,255}; --darkBlue {64,174,255}; --medium blue {131,221,251}; --lightest blue --meterTwo {99,187,255}; --darkblue {164,216,255}; --medium blue {233,236,255}; --lightest blue }; meterIcon = { {0,99,231}; }; trailSuper = { {0,99,231}; --black {255,255,255}; --white {67,214,247}; --other }; mainUI = {113, 0, 0}; health = {255,0,0}; dust = {255,64,64}; }; alt3 = { sprite = { {249,243,0}; --naomi orange {243,190,206}; --naomi yellow {122,107,0}; --dark red hands {255,255,0}; --red hands {255,223,24}; --orange hands {215,191,0}; --light orange hands {193,0,67}; --darkest yellow EX {255,30,106}; --dark yellow EX {255,93,163}; --medium yellow EX {255,154,182}; --yellow EX {255,176,226}; --light yellow EX }; effects = { {255,255,0}; --red hands {95,92,0}; --dark red energy {223,225,0}; --orange energy {255,223,23}; --medium yellow energy {255,30,106}; --dark yellow EX {255,154,182}; --yellow EX }; hit = { {255,255,0}; --red hands {255,223,23}; --medium yellow energy }; burn = { {255,209,0}; --black {255,255,125}; --white {248,248,248}; --other }; burnEX = { {219,0,103}; --black {255,135,173}; --white {248,248,248}; --other }; meterIcon = { {219,0,103}; }; dust = {255,255,0}; mainUI = {113, 113, 0}; health = {215,215,0}; meterChunk = { --meterOne {255,16,83}; --darkBlue {255,64,126}; --medium blue {251,131,191}; --lightest blue --meterTwo {255,100,146}; --darkblue {255,164,178}; --medium blue {255,239,233}; --lightest blue }; trailSuper = { {255,30,106}; --black {255,255,255}; --white {255,132,235}; --other }; }; alt4 = { sprite = { {130,198,0}; --naomi orange {187,255,179}; --naomi yellow {0,133,0}; --dark red hands {0,255,0}; --red hands {149,255,32}; --orange hands {198,255,110}; --light orange hands {59,25,55}; --darkest yellow EX {153,85,193}; --dark yellow EX {214,109,255}; --medium yellow EX {233,154,255}; --yellow EX {230,182,255}; --light yellow EX }; effects = { {0,255,0}; --red hands {19,97,14}; --dark red energy {0,200,0}; --orange energy {202,255,127}; --medium yellow energy {153,85,193}; --dark yellow EX {233,154,255}; --yellow EX }; hit = { {0,255,0}; --red hands {202,255,127}; --medium yellow energy }; burn = { {44,154,0}; --black {80,255,0}; --white {248,248,248}; --other }; burnEX = { {128,0,197}; --black {199,125,255}; --white {248,248,248}; --other }; meterIcon = { {153,85,193}; }; dust = {0,255,0}; mainUI = {0, 113, 0}; health = {0,255,0}; meterChunk = { --meterOne {148,0,247}; --darkGreen {191,87,199}; --mediumGreen {240,128,240}; --lightestGreen --meterTwo {240,128,240}; --darkGreen {255,175,255}; --mediumGreen {255,228,242}; --lightestGreen }; trailSuper = { {153,0,193}; --black {255,255,255}; --white {204,142,255}; --other }; }; alt5 = { --blue dust = {128,183,192}; mainUI = {0,75,88}; --UIcolor health = {0,216,255}; sprite = { {128,183,192}; --naomi orange {213,248,255}; --naomi yellow {0,51,62}; --dark red hands {0,216,255}; --red hands {0,162,166}; --orange hands {0,110,125}; --light orange hands {148,0,0}; --darkest yellow EX {255,121,121}; --dark yellow EX {255,69,69}; --medium yellow EX {255,0,0}; --yellow EX {255,228,242}; --light yellow EX }; effects = { {0,216,255}; --red hands {0,35,51}; --dark red energy {0,110,125}; --orange energy {147,255,255}; --medium yellow energy {255,0,0}; --dark yellow EX {255,121,121}; --yellow EX }; hit = { {0,216,255}; --red hands {147,255,255}; --medium yellow energy }; burn = { {0,110,125}; --black {91,232,255}; --white {248,248,248}; --other }; burnEX = { {225,209,0}; --black {255,255,125}; --white {248,248,248}; --other }; meterChunk = { --meterOne {255,0,0}; --dark {255,69,69}; --medium {255,121,121}; --light --meterTwo {255,121,121}; --darkGreen {255,180,180}; --mediumGreen {255,228,228}; --lightestGreen }; meterIcon = { {255,0,0}; }; trailSuper = { {255,0,0}; --black {255,255,255}; --white {255,121,121}; --other }; }; alt6 = { --grey dust = {155,155,167}; mainUI = {64,64,64}; --UIcolor health = {155,155,167}; sprite = { {64,64,64}; --naomi orange {155,155,167}; --naomi yellow {53,0,79}; --dark red hands {191,87,199}; --red hands {148,0,247}; --orange hands {99,0,148}; --light orange hands {191,87,199}; --darkest yellow EX {240,128,240}; --dark yellow EX {255,144,234}; --medium yellow EX {255,175,255}; --yellow EX {255,228,242}; --light yellow EX }; effects = { {99,0,148}; --red hands {53,0,79}; --dark red energy {148,0,247}; --orange energy {191,87,199}; --medium yellow energy {240,128,240}; --dark yellow EX {255,175,255}; --yellow EX }; hit = { {99,0,148}; --red hands {191,87,199}; --medium yellow energy }; burn = { {121,0,170}; --black {213,41,255}; --white {248,248,248}; --other }; burnEX = { {225,209,0}; --black {255,255,125}; --white {248,248,248}; --other }; meterChunk = { --meterOne {148,0,247}; --darkGreen {191,87,199}; --mediumGreen {240,128,240}; --lightestGreen --meterTwo {240,128,240}; --darkGreen {255,175,255}; --mediumGreen {255,228,242}; --lightestGreen }; meterIcon = { {191,87,199}; }; trailSuper = { {148,0,247}; --black {255,255,255}; --white {240,128,240}; --other }; }; alt7 = { sprite = { {155,71,160}; --naomi orange {230,190,243}; --naomi yellow {59,25,55}; --dark red hands {153,85,193}; --red hands {214,109,255}; --orange hands {233,154,255}; --light orange hands {0,133,0}; --darkest yellow EX {0,255,0}; --dark yellow EX {107,255,66}; --medium yellow EX {149,255,32}; --yellow EX {193,255,129}; --light yellow EX }; effects = { {153,85,193}; --red hands {43,0,49}; --dark red energy {110,0,167}; --orange energy {197,147,255}; --medium yellow energy {0,255,0}; --dark yellow EX {149,255,32}; --yellow EX }; hit = { {153,85,193}; --red hands {197,147,255}; --medium yellow energy }; burn = { {128,0,197}; --black {199,125,255}; --white {248,248,248}; --other }; burnEX = { {44,154,0}; --black {80,255,0}; --white {248,248,248}; --other }; meterIcon = { {44,154,0}; }; dust = {171,43,200}; block = {171,43,200}; mainUI = {71,42,69}; health = {171,43,200}; meterChunk = { --meterOne {19,176,11}; --darkBlue {0,255,0}; --medium blue {144,255,96}; --lightest blue --meterTwo {108,255,94}; --darkblue {192,255,162}; --medium blue {240,255,236}; --lightest blue }; trailSuper = { {33,206,0}; --black {255,255,255}; --white {129,255,118}; --other }; }; alt8 = { sprite = { {255,97,254}; --naomi orange {169,255,203}; --naomi yellow {193,0,67}; --dark red hands {255,30,106}; --red hands {255,93,163}; --orange hands {255,154,182}; --light orange hands {0,149,147}; --darkest yellow EX {0,220,161}; --dark yellow EX {79,255,166}; --medium yellow EX {154,234,255}; --yellow EX {203,255,219}; --light yellow EX }; effects = { {255,30,106}; --red hands {103,0,50}; --dark red energy {255,65,148}; --orange energy {255,154,182}; --medium yellow energy {0,220,161}; --dark yellow EX {154,234,255}; --yellow EX }; hit = { {255,30,106}; --red hands {255,154,182}; --medium yellow energy }; burn = { {219,0,103}; --black {255,135,173}; --white {248,248,248}; --other }; burnEX = { {0,154,106}; --black {0,255,216}; --white {248,248,248}; --other }; meterIcon = { {0,154,106}; }; dust = {255,100,146}; mainUI = {149,0,52}; health = {255,100,146}; meterChunk = { --meterOne {0,151,155}; --darkBlue {0,221,180}; --medium blue {169,255,183}; --lightest blue --meterTwo {99,232,255}; --darkblue {164,251,255}; --medium blue {234,246,255}; --lightest blue }; trailSuper = { {0,178,129}; --black {255,255,255}; --white {159,255,180}; --other }; }; }; }; function Naomi:hitFloor() self:_hitFloor() if self.move.name == "land" then self:stopTrails() end end function Naomi:initiate() self.effectFlicker = false self.wingFollow = false self.numCharges = 0 self.drawSmoke = false self.pillarDraw = false self.hitstopExplosionFlipOffset = 136 self.dpX = 0 self.dpFlip = 1 self.hitLightSFX = "naomiLight" self.hitHeavySFX = "naomiLow" self.hitLowSFX = "naomiLow" self.hitSpecialSFX = "naomiSpecial" self.wingX = 0 self.chargeX = 0 --PARENT OVERWRITES self.yOffset = self.defaultYOffset self.xOffset = self.defaultXOffset -- self.AI = AI() self:_initiate() self.pushbackDustOffset = -9 self.requestHitSheet = "burn" self.meterAnimate = anim8.newAnimation(self.sprites.meter.grid(repeatNum(1,1)), frameTime, 'pauseAtEnd') self.neutralABRequirement = true self.downBackABRequirement = false self.downForwardABRequirement = false self.rushSheet = self.sprites.rushEffect.sheet self.dropSheet = self.sprites.dropEffect.sheet self.DPexplosionSheet = self.sprites.DPexplosion.sheet end function Naomi:reset() self:_reset() self.numCharges = 0 self.neutralABRequirement = true end function Naomi:update(dt) self:_update(dt) if self.wingFollow then if self.flip == 1 then self.wingX = self.x - (104 * self.flip) + 2 else self.wingX = self.x - (104 * self.flip) + 36 -- (12 * self.flip) end end if self.state == "hypeJumpRight" then self.xSpeed = self.runSpeed * 1.5 self:changeWidth(57) self.height = 94 --94 elseif self.state == "hypeJumpLeft" then self.xSpeed = self.runSpeed * -1.5 self.height = 94 --84 end end function Naomi:alwaysUpdate(dt) self.effectFlicker = not self.effectFlicker if self.meterAmount >= 54 then --self.meterFull = true self.meterAmount = 0 self.meterPixel = 0 self.numCharges = self.numCharges + 1 --self.meterAnimate:draw(self.meterSheet, self.meterX, self.meterY, 0, 3, 3, 0, 0) self.meterAnimate = anim8.newAnimation(self.meterSprite.grid(self.numCharges + 1,1), frameTime) end if not self.enemy.superStop then -- self.smokeAnimate:update(dt) self.pillarAnimate:update(dt) self.groundExplosionAnimate:update(dt) self.dropWingAnimate:update(dt) self.rushWingAnimate:update(dt) -- self.groundSphereAnimate:update(dt) self.rushPunchEffectAnimate:update(dt) self.dropEffectAnimate:update(dt) end self:_alwaysUpdate(dt) end function Naomi:attackUpdates() self:_attackUpdates() end function Naomi:controlUpdate(left, right, up, down, buttonA, buttonB, tapA, tapB, specialA, specialB) self.blockHigh = false self.blockLow = false if tapA then buttonA = true end if tapB then buttonB = true end if self.runCancel and hitstop <= 0 and self.freezeTime == 0 then --don't forget to make this false on normalhit if not buttonA and self.lastFrameA then self.repeatA = false end if not buttonB and self.lastFrameB then self.repeatB = false end self.lastFrameA = buttonA self.lastFrameB = buttonB if self.training and trainingOptions.infiniteMeter and self.combo == 0 then self:fullMeter() end if up then local tempSpeed = self.xSpeed self:jump(280, self.jumpSpeed * .85, 'forward') self.x = self.x + (19 * self.flip) self:changeWidth(19) local decaySpeed = 30 if tempSpeed < 0 then tempSpeed = -tempSpeed end self:changeSpeed(tempSpeed, decaySpeed) self.runCancel = false self.forceThrowTech = false return elseif buttonA and not self.repeatA then local tempSpeed = self.xSpeed local decaySpeed = 30 if down then self:executeMove('lowA') tempSpeed = tempSpeed + (150 * self.flip) else self:executeMove('standA') self.ABTimer = 0 end self.x = self.x + (19 * self.flip) self:changeWidth(19) if tempSpeed < 0 then tempSpeed = -tempSpeed end self:changeSpeed(tempSpeed, decaySpeed) self.runCancel = false self.forceThrowTech = false return elseif buttonB and not self.repeatB then local tempSpeed = self.xSpeed local decaySpeed = 30 if down then self:executeMove('lowB') else self:executeMove('standB') self.throwTimer = 0 self.ABTimer = 0 end self.x = self.x + (19 * self.flip) self:changeWidth(19) if tempSpeed < 0 then tempSpeed = -tempSpeed end self:changeSpeed(tempSpeed, decaySpeed) self.runCancel = false self.forceThrowTech = false return elseif not right and self.flip == 1 then self:executeMove('runRecovery') self.x = self.x + (19 * self.flip) self.xOffset = -36 self:changeWidth(19) self.runCancel = false self.forceThrowTech = false return elseif not left and self.flip == -1 then self:executeMove('runRecovery') self.x = self.x + (19 * self.flip) self.xOffset = -36 self:changeWidth(19) self.runCancel = false self.forceThrowTech = false return end else self:_controlUpdate(left, right, up, down, buttonA, buttonB, tapA, tapB, specialA, specialB) end end -- function Naomi:throwConnect() -- self.noInput = true -- self:flushBar() -- self.ignoreCollision = true -- self.invulnerability = true -- self.throwForward = true -- self.throwTech = false -- self.attacking = false -- self.image = self.throwSheet -- self.xOffset = -27 -- self.yOffset = -21 -- self.enemy.xOffset = -27 -- self.enemy.yOffset = -21 -- TEsound.play('sounds/throw.mp3', "sfx") -- if self.x >= stageWidth - self.width - 42 then -- self.x = stageWidth - self.width - 45 -- elseif self.x <= 42 then -- self.x = 45 -- end -- if self.flip == 1 then -- self.attackbox.explosionX = self.attackbox.x -23 -- else -- self.attackbox.explosionX = self.attackbox.x + self.attackbox.width + 23 -152 -- end -- self.attackbox.explosionY = self.attackbox.y - 60 -- self:throwAnimations(1, {1,3,2,3,3,3,4,3,5,10,6,3,7,3,8,2}, 1) -- end function Naomi:draw() self:_draw() if flicker then love.graphics.setShader(self.shaders.effects) self.dropWingAnimate:draw(self.sprites.dropWing.sheet, math.floor(self.wingX),22,0,self.dpFlip * gameLogicMult, gameLogicMult) self.rushWingAnimate:draw(self.sprites.rushWing.sheet, math.floor(self.wingX),90,0,self.dpFlip * gameLogicMult, gameLogicMult) end love.graphics.setShader() end function Naomi:hitstunAnimation(hitstun, animType) if animType == 0 then --standlow self.yOffset = 0 elseif animType == 1 then --crouchlow self.yOffset = -42 elseif animType == 2 then --standhigh self.yOffset = 3 elseif animType == 3 then --crouchHigh self.yOffset = -21 self.xOffset = -30 end self:_hitstunAnimation(hitstun, animType) end -- function Naomi:normalHit(hitstun, pushback, ext) -- self:_normalHit(hitstun,pushback,ext) -- end function Naomi:hitResponse(alsoHit, freezeHurt, hurtboxHit) self.wingFollow = false self:_hitResponse(alsoHit, freezeHurt, hurtboxHit) end function Naomi:hitReset() self.chargeCancel = false self.forceThrowTech = false self.wingFollow = false self.dpFollow = false if self.player1 then TEsound.stop("chargeP1") else TEsound.stop("chargeP2") end self:_hitReset() end function Naomi:normalBlock(pushback) if self.blockLow then self.yOffset = -21 else self.yOffset = -3 self.xOffset = -30 end self:_normalBlock(pushback) if self.health <= 0 then self.yOffset = 0 end end function Naomi:wakeUp() -- local anim1 = {11,3,12,2,13,1,14,7} --11,3,12,2,13,1,14,7 -- local anim2 = {15, 3, 16, 3, 17, 3} --15, 3, 16, 3, 17, 9 -- local anim3 = {18,4,19,4,20,4} --18,5,19,5,20,5 self:_wakeUp(10) --impactFrame, deathFrame, bounceAnim, downAnim, getUpAnim, xEffectOffset end function Naomi:dustDraw() self:_dustDraw() love.graphics.setShader(self.shaders.effects) self.pillarAnimate:draw(self.DPexplosionSheet,math.floor(self.dpX), -106,0,self.dpFlip * gameLogicMult,gameLogicMult) self.groundExplosionAnimate:draw(self.sprites.groundExplosion.sheet, math.floor(self.dpX), 70, 0, self.dpFlip * gameLogicMult, gameLogicMult) --80 if self.flip == 1 then self.rushPunchEffectAnimate:draw(self.rushSheet, math.floor(self.x - (38)), 150, 0, gameLogicMult, gameLogicMult) self.dropEffectAnimate:draw(self.dropSheet, math.floor(self.x - 6), math.floor(self.y - 48), 0, gameLogicMult, gameLogicMult) else self.rushPunchEffectAnimate:draw(self.rushSheet, math.floor(self.x + (38 + 38)), 150, 0, -gameLogicMult, gameLogicMult) self.dropEffectAnimate:draw(self.dropSheet, math.floor(self.x + 6 + self.width), math.floor(self.y - 48), 0, -gameLogicMult, gameLogicMult) end if self.drawSmoke then if self.flip == 1 then self.smokeAnimate:draw(self.smokeSheet,self.smokeX + 2,self.smokeY,0,3,3) else self.smokeAnimate:draw(self.smokeSheet,self.smokeX - 66,self.smokeY,0,-3,3) end end love.graphics.setShader() end function Naomi:frameBarAnimation() local ending = 0 while ending <= 60 and self.frameBar[ending] > 0 do if self.frameBar[ending] == 1 then love.graphics.setColor(100, 255, 100) --25,200,25 elseif self.frameBar[ending] == 2 then love.graphics.setColor(255,46,46) --255,25,25 elseif self.frameBar[ending] == 3 then love.graphics.setColor(255,255,100) --25,25,200 elseif self.frameBar[ending] == 4 then love.graphics.setColor(66,214,247) elseif self.frameBar[ending] == 5 then love.graphics.setColor(255,137,52) elseif self.frameBar[ending] == 6 then love.graphics.setColor(255,255,255) elseif self.frameBar[ending] == 7 then love.graphics.setColor(241,62,160) else love.graphics.setColor(50,50,0) end if self.player1 then love.graphics.rectangle("fill", 120 + (3 * ending), 33, 3, 3) --love.graphics.rectangle("fill", 123 + (6 * ending), 33, 3, 3) love.graphics.rectangle("fill", 123 + (3 * ending), 30, 3, 3) --love.graphics.rectangle("fill", 126 + (6 * ending), 30, 3, 3) love.graphics.rectangle("fill", 126 + (3 * ending), 27, 3, 3) --love.graphics.rectangle("fill", 129 + (6 * ending), 27, 3, 3) else love.graphics.rectangle("fill", 681 - (120 + (3 * ending)), 33, 3, 3) --love.graphics.rectangle("fill", 684 - (123 + (6 * ending)), 33, 3, 3) love.graphics.rectangle("fill", 681 - (123 + (3 * ending)), 30, 3, 3) --love.graphics.rectangle("fill", 684 - (126 + (6 * ending)), 30, 3, 3) love.graphics.rectangle("fill", 681 - (126 + (3 * ending)), 27, 3, 3) --love.graphics.rectangle("fill", 684 - (129 + (6 * ending)), 27, 3, 3) end ending = ending + 1 end love.graphics.setColor(255,255,255) end function Naomi:throwHit() self.chargeCancel = false self.attackbox.ignoreCornerPush = false self.ignoreCollision = false self.ignoreGravity = false self.forceThrowTech = false -- self.chargeEffectAnim = anim8.newAnimation(self.chargeEffectGrid(14,1), frameTime) -- self.chargeEffectAnim2 = anim8.newAnimation(self.chargeEffectGrid(14,1), frameTime) self:_throwHit() end function Naomi:meterAnimation() love.graphics.setShader(self.shaders.meterIcon) if self.player1 then self.meterAnimate:draw(self.sprites.meter.sheet, self.meterX, self.meterY - 2 + self.meterJitter, 0, gameLogicMult, gameLogicMult, 0, 0) love.graphics.setShader(self.shaders.meterChunk) for i=1, 4 do local d = i-1 local extra = 0 if i == 2 or i == 4 then extra = 2 end self.meterChunkArray[i]:draw(self.sprites.meterChunk.sheet, (self.meterX + 90) - (d * 16) + extra, self.meterY + 12 + self.meterJitter, 0, gameLogicMult, gameLogicMult, 0, 0) --6,111 end else -- self.meterAnimate:draw(self.meterSprite.sheet, self.meterX, self.meterY - 2, 0, gameLogicMult, gameLogicMult, 0, 0) self.meterAnimate:draw(self.sprites.meter.sheet, self.meterX, self.meterY - 2 + self.meterJitter, 0, -gameLogicMult, gameLogicMult, 0, 0) love.graphics.setShader(self.shaders.meterChunk) for i=1, 4 do local d = i-1 local extra = 0 if i == 2 or i == 4 then extra = 2 end self.meterChunkArray[i]:draw(self.sprites.meterChunk.sheet, (self.meterX - 90) + (d * 16) - extra, self.meterY + 12 + self.meterJitter, 0, -gameLogicMult, gameLogicMult, 0, 0) -- self.meterChunkArray[i]:draw(self.meterChunkSprite.sheet, (self.meterX - 90) + (d * 16), self.meterY + 12, 0, gameLogicMult, gameLogicMult, 0, 0) --6,111 end end love.graphics.setShader() end function Naomi:roundCount() if self.wins > 0 then if self.player1 then love.graphics.draw(self.roundSheet,0,0,0,3,3) else love.graphics.draw(self.roundSheet, 684, 0, 0, -3, 3) end end end function Naomi:resetMeter() self.meterChunkArray = {} for i=1, 6 do self.meterChunkArray[i] = anim8.newAnimation(self.sprites.meterChunk.grid(repeatNum(1,1,4,2,2,2,4,2,2,2,4,2,2,2)), frameTime, 'pauseAtEnd') --6,1,1,2,2,2,3,2,4,2,5,1 end self.meterChunkArray[6].onLoop = function() -- self.meterFull = true self.meterChunkArray[6].onLoop = function() end end self:_resetMeter() end function Naomi:fullMeter() if self.meterAmount < 4 then self.meterAmount = 0 self:changeMeter(4) end end function Naomi:changeMeter(amount) self.meterAmount = self.meterAmount + amount if amount > 0 then if self.meterAmount == 2 or self.meterAmount >= 4 then if self.playerNum == 1 then self:executeSound('fullMeter', "sfx", -1) else self:executeSound('fullMeter', "sfx", 1) end self.meterAnimate = anim8.newAnimation(self.sprites.meter.grid(repeatNum(2,2,3,1)), frameTime, 'pauseAtEnd') end if self.meterAmount >= 2 then self.downBackABRequirement = true self.downForwardABRequirement = true end if self.meterAmount >= 4 then self.meterAmount = 4 self.meterJitter = 5 else self.meterJitter = 2 end else if self.meterAmount <= 1 then self.meterAnimate = anim8.newAnimation(self.sprites.meter.grid(repeatNum(1,1)), frameTime, 'pauseAtEnd') if self.meterAmount < 0 then self.meterAmount = 0 end self.downBackABRequirement = false self.downForwardABRequirement = false end self.meterChunkArray[self.meterAmount + 1] = anim8.newAnimation(self.sprites.meterChunk.grid(repeatNum(1,1,4,2,2,2,4,2,2,2,4,2,2,2)), frameTime, 'pauseAtEnd') self.meterChunkArray[self.meterAmount + 2] = anim8.newAnimation(self.sprites.meterChunk.grid(repeatNum(1,1,4,2,2,2,4,2,2,2,4,2,2,2)), frameTime, 'pauseAtEnd') self.meterJitter = 5 end end function Naomi:changeStock(amount) local oldStock = self.stockAmount self.stockAmount = self.stockAmount + amount if self.stockAmount == 0 then self.downBackABRequirement = false self.downForwardABRequirement = false self.meterAnimate = anim8.newAnimation(self.meterSprite.grid(repeatNum(1,2)), frameTime, 'pauseAtEnd') return else self.downBackABRequirement = true self.downForwardABRequirement = true end if self.stockAmount >= 1 then self.stockAmount = 1 self.meterAnimate = anim8.newAnimation(self.meterSprite.grid(repeatNum(self.stockAmount * 2,2,self.stockAmount * 2 + 1,2)), frameTime, 'pauseAtEnd') for i=1, 4 do self.meterChunkArray[i] = anim8.newAnimation(self.meterChunkSprite.grid(repeatNum(4,2,3,1)), frameTime, 'pauseAtEnd') end return end self.meterAnimate = anim8.newAnimation(self.meterSprite.grid(repeatNum(self.stockAmount * 2,2,self.stockAmount * 2 + 1,2)), frameTime, 'pauseAtEnd') --14 self.meterAnimate.onLoop = function() self.meterAnimate = anim8.newAnimation(self.meterSprite.grid(repeatNum(self.stockAmount * 2 + 1,1)), frameTime) --14 if oldStock < self.stockAmount then self:resetMeter() self.meterAmount = 0 elseif oldStock == 3 and self.meterAmount == 4 then self:resetMeter() self.meterAmount = 0 end end end function Naomi:loadSprites(color) local folder self.color = color folder = 'player/naomi/' -- self.drainR = 242 -- self.drainG = 118 -- self.drainB = 0 -- self.healthRed = 255 -- self.healthGreen = 102 -- self.healthBlue = 7 self:_loadSprites(folder) self.pillarAnimate = anim8.newAnimation(self.sprites.DPexplosion.grid(repeatNum(12,1)), frameTime) self.groundExplosionAnimate = anim8.newAnimation(self.sprites.groundExplosion.grid(repeatNum(9,1)), frameTime) self.dropWingAnimate = anim8.newAnimation(self.sprites.dropWing.grid(14,1), frameTime) self.rushWingAnimate = anim8.newAnimation(self.sprites.rushWing.grid(13,1), frameTime) self.rushPunchEffectAnimate = anim8.newAnimation(self.sprites.rushEffect.grid(7,1), frameTime) self.dropEffectAnimate = anim8.newAnimation(self.sprites.dropEffect.grid(7,1), frameTime) self.meterAnimate = anim8.newAnimation(self.sprites.meter.grid(1,1), frameTime) self.hitEffectAnimate = anim8.newAnimation(self.sprites.hitEffect.grid(repeatNum(1,2,2,2,3,2,4,2,5,1,6,1,7,2)), frameTime) --1,3,2,3,3,2,4,2,5,1,6,3,7,2,8,2,9,1 self.hitEffectAnimate.onLoop = function() self.enemy.showExplosion = false end end