Quinn.lua
From Pocket Rumble Wiki
formatting not fully complete
quinn.lua[edit]
Quinn = { moves = { standA = { attackbox = {pushback=189 * gameLogicMult, hitStun=12, width=17 * gameLogicMult, height=21 * gameLogicMult, dmg=1, relativeY=12 * gameLogicMult, explosionX = 3 * gameLogicMult, priority = 4}; { frames = {1,2,2,2}; custom = function(self) if self.meterAmount > 0 then self:executeMove("standAWolf") else self:executeSound('lightWhiff', {"sfx", "whiff"}) if (self.enemy.x + self.enemy.width/2 > self.x + self.width/2) then self.flip = 1 self.faceRight = true else self.flip = -1 self.faceRight = false end end end }; { type = "active"; frames = {3,1,4,1}; }; { type = "recovery"; frames = {5,2,6,1,7,2}; }; }; standAWolf = { attackbox = {pushback=240 * gameLogicMult, hitStun=12, width=50 * gameLogicMult, height=41 * gameLogicMult, dmg=1, relativeY=-8 * gameLogicMult, explosionX = 3 * gameLogicMult, priority = 4}; { frames = {1,1,2,1,3,3,4,2}; custom = function(self) self:executeSound('heavyWhiff', {"sfx", "whiff"}) if (self.enemy.x + self.enemy.width/2 > self.x + self.width/2) then self.flip = 1 self.faceRight = true else self.flip = -1 self.faceRight = false end end }; { type = "active"; frames = {5,3,6,3,7,2,8,2}; custom = function(self) self:executeEffect("standAWolfEffect") end }; { type = "recovery"; frames = {9,3,10,3,11,3}; }; }; lowA = { attackbox = {customEffect = "hitEffect4", pushback=133 * gameLogicMult, hitStun=16, width=29 * gameLogicMult, height=11 * gameLogicMult, dmg=1, relativeY=25 * gameLogicMult, explosionX = -10, explosionY = -4, priority = 4}; { frames = {1,3,2,2}; custom = function(self) if self.meterAmount > 0 then self:executeMove("lowAWolf") else self:executeSound('mediumWhiff', {"sfx", "whiff"}) if (self.enemy.x + self.enemy.width/2 > self.x + self.width/2) then self.flip = 1 self.faceRight = true else self.flip = -1 self.faceRight = false end end end }; { type = "active"; frames = {3,3,4,1}; custom = function(self) self:executeEffect("lowAEffect") end }; { type = "recovery"; frames = {4,3,5,3,6,3}; }; }; lowAWolf = { attackType = attackTypes.low; attackbox = {customEffect = "hitEffect2",pushback=300 * gameLogicMult, hitStun=13, width=60 * gameLogicMult, height=29 * gameLogicMult, dmg=1, relativeY=12 * gameLogicMult, explosionX = 3 * gameLogicMult, priority = 4}; { frames = {2,3,3,2,4,2}; custom = function(self) self:executeSound('mediumWhiff', {"sfx", "whiff"}) if (self.enemy.x + self.enemy.width/2 > self.x + self.width/2) then self.flip = 1 self.faceRight = true else self.flip = -1 self.faceRight = false end end }; { type = "active"; frames = {5,3,6,3,7,2,8,2}; custom = function(self) self:executeEffect("lowAWolfEffect") end }; { type = "recovery"; frames = {9,2,10,2,11,2}; }; }; standB = { attackbox = {customEffect = "hitEffect3", pushUp= 190, pushback=180 * gameLogicMult, hitStun=17, width=30 * gameLogicMult, height=30 * gameLogicMult, relativeY = -6 * gameLogicMult, relativeX = 2 * gameLogicMult, dmg=1, explosionX = -5 * gameLogicMult, explosionY = 5 * gameLogicMult, priority = 3, ignoreCornerPush = true}; { --hitStun=16 pushback=220 width=37 frames = {2,3,3,2,4,2}; custom = function(self) if self.meterAmount > 0 then self:executeMove("standBWolf") else self:executeSound("jump", {"sfx", "whiff"}) if (self.enemy.x + self.enemy.width/2 > self.x + self.width/2) then self.flip = 1 self.faceRight = true else self.flip = -1 self.faceRight = false end end end }; { frames = {5,1,7,2,8,2}; custom = function(self) self.height = self.height - (11 * gameLogicMult) --(11 * gameLogicMult) self.y = self.y - 20 -- -20 self.throwInvuln = true if self.meterAmount == 0 then self:changeSpeed(600, 25) --600, 30 else self:changeSpeed(750, 35) --600, 30 end self.ySpeed = -70 -- -100 end }; { type = "active"; frames = {9,2}; custom = function(self) self.throwInvuln = false end }; { frames = {10,2}; custom = function(self) self.attackbox.customEffect = "hitEffect" self.attackbox.width = self.attackbox.width - 10 self.attackbox.relativeY = self.attackbox.relativeY + 40 self.attackbox.explosionX = self.attackbox.explosionX - 20 self.attackbox.explosionY = self.attackbox.explosionY - 4 end }; { type = "recovery"; frames = {11,1}; }; { type = "recovery"; frames = {12,2,13,2,14,2,15,2,16,2,17,2,18,4,19,2}; custom = function(self) self.height = standHeight end }; }; standBWolf = { attackbox = {customEffect = "hitEffect5", pushback=133 * gameLogicMult, hitStun=15, width=24 * gameLogicMult, height=42 * gameLogicMult, dmg=1, relativeY=0 * gameLogicMult, explosionX = 4, explosionY = -4, priority = 2}; { frames = {1,2}; custom = function(self) self:executeSound('rush', {"sfx", "whiff"}) if (self.enemy.x + self.enemy.width/2 > self.x + self.width/2) then self.flip = 1 self.faceRight = true else self.flip = -1 self.faceRight = false end end }; { frames = {2,2,3,2,4,2,5,2,6,2}; custom = function(self) self:changeWidth(34) end }; { frames = {7,2,8,1}; custom = function(self) self:changeSpeed(900, 41) end }; { type = "active"; frames = {9,3,10,3,11,3,12,3}; }; { type = "recovery"; frames = {13,2,14,2,15,2,16,2,17,2,18,2}; custom = function(self) self:changeWidth(19) end }; }; lowB = { attackbox = {customEffect = "hitEffect4", pushUp = -300,pushback=100 * gameLogicMult, hitStun=20, width=40 * gameLogicMult, height=11 * gameLogicMult, dmg=1, relativeY=27 * gameLogicMult, explosionX = -50, explosionY = -10, priority = 3}; { frames = {1,1,2,2,3,2,4,2}; --1,2,2,2,3,1,4,1,5,1 custom = function(self) if self.meterAmount > 0 then self:executeMove("lowBWolf") else self:executeSound('heavyWhiff', {"sfx", "whiff"}) --self:changeSpeed(390, 21) if (self.enemy.x + self.enemy.width/2 > self.x + self.width/2) then self.flip = 1 self.faceRight = true else self.flip = -1 self.faceRight = false end if self.meterAmount == 0 then self:changeSpeed(550, 31) else self:changeSpeed(800, 41) end end end }; { type = "active"; frames = {5,2,6,2}; --6,3,7,1 custom = function(self) self:executeEffect("lowBEffect") self:executeEffect("lowBEffect2") end }; { type = "recovery"; frames = {6,15,7,3,8,3,9,3}; --8,3,9,3,10,3,11,3,12,3,13,3,14,3,15,3 }; }; lowBWolf = { attackbox = {customEffect = "hitEffect5", pushUp = 200 * gameLogicMult, pushback=133 * gameLogicMult, hitStun=8, width=24 * gameLogicMult, height=42 * gameLogicMult, dmg=1, relativeY=0 * gameLogicMult, explosionX = -10, explosionY = -4, priority = 2}; { frames = {1,2}; custom = function(self) self:executeSound('rush', {"sfx", "whiff"}) self.jumpAttack = false if (self.enemy.x + self.enemy.width/2 > self.x + self.width/2) then self.flip = 1 self.faceRight = true else self.flip = -1 self.faceRight = false end end }; { frames = {2,2,3,2,4,2}; custom = function(self) self:changeWidth(34) end }; { frames = {5,2,6,1}; custom = function(self) self.ySpeed = -1000 self.gravity = 5000 self:changeSpeed(900, 41) end -- this is where he should start launching up/forward }; { type = "active"; frames = {7,3,8,3,9,3,10,3}; custom = function(self) self.ySpeed = -500 self.gravity = defaultGravity end }; { type = "recovery"; frames = {11,2,12,2,13,2,14,2,15,2,16,2}; custom = function(self) self.ySpeed = 0 self.gravity = defaultGravity -- self.jumpAttack = false self:changeWidth(19) end --this is probably where his offset and location should teleport to move his hurtbox 21 PR pixels to the right and 5 down }; { spriteName = "jumpUpWolf"; frames={7,2,8,2,9,2,10,2}; custom = function(self) -- self.move.name = "lowBWolf" self:changeLocation(21*gameLogicMult) end }; -- endWith = function(self) -- self:executeAnimation("jumpUpWolf", { -- frames={7,2,8,2,9,2,10,2,11,2,12,2}; -- }); -- --this is where in my head I picture your horizontal momentum completely stopping so you just fall straight down -- end --at this point it could also have more recovery on the ground by just playing a version of the land animation, I guess just if it needs a nerf }; jumpA = { attackbox = {customEffect = "hitEffect", attackType = attackTypes.high, pushback=44 * gameLogicMult, hitStun=17, width=30 * gameLogicMult, height=20 * gameLogicMult, dmg=1, relativeX= (-5 * gameLogicMult), relativeY=22 * gameLogicMult, explosionX = 4 * gameLogicMult, explosionY = -20, priority = 4, ignoreCornerPush=true}; { frames = {1,2,2,2,3,3,4,2}; custom = function(self) if self.meterAmount > 0 then self:executeMove("jumpAWolf") else self.ignoreCollision = false self:executeSound('mediumWhiff', {"sfx", "whiff"}) end end }; { type = "active"; frames = {5,17}; --17 custom = function(self) self:executeEffect("jumpAEffect") end }; { type = "recovery"; frames = {6,2,7,2,8,3}; }; endWith = function(self) self:executeAnimation("jumpUp", { frames={10,2,11,2,12,6}; }); end }; jumpAWolf = { attackbox = {landingCancel = true,customEffect = "hitEffect4", pushback=133 * gameLogicMult, hitStun=16, width=90 * gameLogicMult, height=31 * gameLogicMult, dmg=1, relativeY=5 * gameLogicMult, relativeX=-50 * gameLogicMult, explosionX = -10, explosionY = -4, priority = 4}; resetY = false; attackType = attackTypes.high; startWith = "air"; endWith = "air"; ignoreCornerPush = true; { frames = {2,1,3,1,4,2,5,1,6,1}; custom = function(self) self.gravity = defaultGravity self:executeSound('mediumWhiff', {"sfx", "whiff"}) end }; { type = "active"; frames = {8,2,9,2,10,2,11,2,12,2}; custom = function(self) self:executeEffect("jumpAWolfEffect") end }; { type = "recovery"; frames = {14,3,15,2,16,2}; }; endWith = function(self) self:executeAnimation("jumpUpWolf", { frames={10,2,11,2,12,6}; }); end }; jumpADash = { attackType = attackTypes.high; startWith = "air"; endWith = "air"; ignoreCornerPush = true; resetY = false; onCornerTouch = function(self) if self.y < yFloor - 160 and not self.attackbox.exists then if (self.flip == 1 and self.xSpeed > 0) or (self.flip == -1 and self.xSpeed < 0) then self.flip = -self.flip end if self.attacking and not self.attackbox.exists then self.repeatA = false end self:executeMove("connectedOnWallStart") self.runCancel = false end end; attackbox = {attackType = attackTypes.high, pushback=44 * gameLogicMult, hitStun=17, width=30 * gameLogicMult, height=20 * gameLogicMult, dmg=1, relativeX= (-5 * gameLogicMult), relativeY=22 * gameLogicMult, explosionX = -4 * gameLogicMult,explosionY = 20, priority = 4, ignoreCornerPush=true, landingCancel = true}; --pushback=66 * gameLogicMult hitstun=23 { spriteName = "jumpA"; frames = {1,2,2,2,3,3,4,2}; custom = function(self) if self.meterAmount > 0 then self:executeMove("jumpADashWolf") return end self:executeSound('mediumWhiff', {"sfx", "whiff"}) self.ignoreCollision = false end }; { type = "active"; frames = {5,17}; custom = function(self) self:executeEffect("jumpAEffect") end }; { type = "recovery"; frames = {6,2,7,2,8,3}; --2,4,1,16 }; endWith = function(self) self:executeAnimation("jumpUp", { frames={10,2,11,2,12,6}; }); end }; jumpADashWolf = { attackType = attackTypes.high; startWith = "air"; endWith = "air"; ignoreCornerPush = true; resetY = false; spriteName = "jumpAWolf"; onCornerTouch = function(self) if self.y < yFloor - 160 and not self.attackbox.exists then if (self.flip == 1 and self.xSpeed > 0) or (self.flip == -1 and self.xSpeed < 0) then self.flip = -self.flip end if self.attacking and not self.attackbox.exists then self.repeatA = false end self:executeMove("connectedOnWallStartWolf") self.runCancel = false end end; attackbox = {landingCancel = true, customEffect = "hitEffect4", pushback=133 * gameLogicMult, hitStun=16, width=90 * gameLogicMult, height=31 * gameLogicMult, dmg=1, relativeY=5 * gameLogicMult, relativeX=-50 * gameLogicMult, explosionX = -10, explosionY = -4, priority = 4}; { frames = {2,1,3,1,4,2,5,1,6,1}; custom = function(self) self:executeSound('mediumWhiff', {"sfx", "whiff"}) end }; { type = "active"; frames = {8,2,9,2,10,2,11,2,12,2}; custom = function(self) self:executeEffect("jumpAWolfEffect") end }; { type = "recovery"; frames = {14,3,15,2,16,2}; }; endWith = function(self) self:executeAnimation("jumpUpWolf", { frames={10,2,11,2,12,6}; }); end }; jumpB = { attackbox = {customEffect = "hitEffect2", attackType = attackTypes.high, pushback=44 * gameLogicMult, hitStun=19, width=30 * gameLogicMult, height=30 * gameLogicMult, dmg=1, relativeX= (-35 * gameLogicMult), relativeY=22 * gameLogicMult, explosionX = -4 * gameLogicMult,explosionY = 20, priority = 3, ignoreCornerPush=true}; --pushback=66 * gameLogicMult hitstun=23 { frames = {1,3,2,3,3,3,4,2}; custom = function(self) if self.meterAmount > 0 then self:executeMove("jumpBWolf") else self.ignoreCollision = false self:executeSound('mediumWhiff', {"sfx", "whiff"}) end end }; { type = "active"; frames = {5,3,6,3,7,3,8,3,9,3,10,2}; custom = function(self) self:executeEffect("jumpBEffect") end }; { type = "recovery"; frames = {10,1,11,3,12,3}; --2,4,1,16 }; }; jumpBWolf = { attackbox = {landingCancel = true,customEffect = "hitEffect5", pushback=133 * gameLogicMult, hitStun=16, width=29 * gameLogicMult, height=42 * gameLogicMult, dmg=1, relativeY=25 * gameLogicMult, explosionX = -10, explosionY = -4, priority = 2}; resetY = false; attackType = attackTypes.high; startWith = "air"; endWith = "air"; { frames = {2,2,3,1,4,1,5,3,6,1,7,2,8,1,9,1}; custom = function(self) self.ySpeed = 0 self.ignoreGravity = true self:changeSpeed(0) self.gravity = defaultGravity self:executeSound('rush', {"sfx", "whiff"}) end }; { type = "active"; frames = {10,2,11,2,12,2}; custom = function(self) self.ySpeed = 1000 self:changeSpeed(1200) self.ignoreGravity = false end }; { type = "recovery"; frames = {4,3,5,3,6,3}; }; }; jumpBDash = { attackType = attackTypes.high; startWith = "air"; endWith = "air"; ignoreCornerPush = true; resetY = false; onCornerTouch = function(self) if self.y < yFloor - 160 and not self.attackbox.exists then if (self.flip == 1 and self.xSpeed > 0) or (self.flip == -1 and self.xSpeed < 0) then self.flip = -self.flip end if self.attacking and not self.attackbox.exists then self.repeatB = false end self:executeMove("connectedOnWallStart") self.runCancel = false end end; attackbox = {attackType = attackTypes.high, pushback=44 * gameLogicMult, hitStun=19, width=30 * gameLogicMult, height=30 * gameLogicMult, dmg=1, relativeX= (-35 * gameLogicMult), relativeY=22 * gameLogicMult, explosionX = -4 * gameLogicMult,explosionY = 20, priority = 3, ignoreCornerPush=true, landingCancel = true}; --pushback=66 * gameLogicMult hitstun=23 { frames = {1,3,2,3,3,3,4,2}; spriteName = "jumpB"; custom = function(self) if self.meterAmount > 0 then self:executeMove("jumpBDashWolf") end self.ignoreCollision = false self:executeSound('mediumWhiff', {"sfx", "whiff"}) end }; { type = "active"; frames = {5,3,6,3,7,3,8,3,9,3,10,2}; custom = function(self) self:executeEffect("jumpBEffect") end }; { type = "recovery"; frames = {10,1,11,3,12,3}; --2,4,1,16 }; }; jumpBDashWolf = { attackType = attackTypes.high; startWith = "air"; endWith = "air"; ignoreCornerPush = true; resetY = false; spriteName = "jumpBWolf"; onCornerTouch = function(self) if self.y < yFloor - 160 and not self.attackbox.exists then if (self.flip == 1 and self.xSpeed > 0) or (self.flip == -1 and self.xSpeed < 0) then self.flip = -self.flip end if self.attacking and not self.attackbox.exists then self.repeatB = false end self:executeMove("connectedOnWallStartWolf") self.runCancel = false end end; attackbox = {landingCancel = true, customEffect = "hitEffect5", pushback=133 * gameLogicMult, hitStun=16, width=29 * gameLogicMult, height=42 * gameLogicMult, dmg=1, relativeY=25 * gameLogicMult, explosionX = -10, explosionY = -4, priority = 2}; { frames = {2,2,3,1,4,1,5,3,6,1,7,2,8,1,9,1}; custom = function(self) self.ySpeed = 0 self.ignoreGravity = true self:changeSpeed(0) self.gravity = defaultGravity self:executeSound('rush', {"sfx", "whiff"}) end }; { type = "active"; frames = {10,2,11,2,12,2}; custom = function(self) self.ySpeed = 1000 self:changeSpeed(1200) self.ignoreGravity = false end }; { type = "recovery"; frames = {4,3,5,3,6,3}; }; }; downBackB = { attackbox = {customEffect = "hitEffect3", pushUp = 250 * gameLogicMult, pushback=60 * gameLogicMult, hitStun=15, width=78 * gameLogicMult, height=55 * gameLogicMult, dmg=1, relativeY= -18 * gameLogicMult,relativeX = (-29 * gameLogicMult) - (19 * gameLogicMult), priority=1, explosionOnEnemyX = true, explosionX = -14, explosionY = -10, external = true}; { --hitstun=22 frames = {1,1,2,1,3,2,4,2}; custom = function(self) self:executeSound('antlerAir', {"sfx", "whiff"}) self.invulnerability = true end }; { type = "active"; frames = {5,2,6,8}; --1x5 custom = function(self) self:executeEffect("downBackBEffect") end }; { type = "recovery"; frames = {6,17,7,3,8,3}; --18 custom = function(self) self.invulnerability = false end }; }; detransform = { resetY = false; { frames = {1,4,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2}; custom = function(self) self.invulnerability = true self.ignoreInvulnOutline = true self.requestSS = true self:executeSound('tenchiSuperRelease', {"sfx"}) -- self.health = 1 end }; { frames = {1,1}; custom = function(self) self:knockFall() self:superStopContinue() self.invulnerability = false self.ignoreInvulnOutline = false end } }; downForwardB = { attackbox = {customEffect = "hitEffect3", pushUp = 210 * gameLogicMult, pushback=60 * gameLogicMult, hitStun=16, width=25 * gameLogicMult, height=40 * gameLogicMult, dmg=1, relativeY= 0 * gameLogicMult, relativeX = 0, priority=1, explosionOnEnemyX = true, explosionX = -16, explosionY = -18, external = true}; --hitStun=11 { frames = {1,2,2,2,3,2,4,2,3,2,5,1}; --1,2,2,2,3,2,4,2,3,2,5,2 custom = function(self) self:executeSound('mediumWhiff', {"sfx", "whiff"}) end }; { type = "active"; frames = {6,3,7,3,8,3}; custom = function(self) if self.meterAmount == 0 then self:changeSpeed(150,10) else self:changeSpeed(350,20) end self:executeEffect("downForwardBEffect") end }; { type = "recovery"; frames = {8,6,9,2}; custom = function(self) end }; }; downForwardA = { attackbox = {pushUp = 150 * gameLogicMult, pushback=50 * gameLogicMult, hitStun=11, width=25 * gameLogicMult, height=12 * gameLogicMult, dmg=1, relativeY= -8 * gameLogicMult,relativeX = 0, priority=2, explosionOnEnemyX = true, explosionX = 86, explosionY = -18}; { frames = {1,2,2,2,3,2,4,2,5,2,6,2}; custom = function(self) self:executeSound('mediumWhiff', {"sfx", "whiff"}) -- self:changeSpeed(400,15) if self.meterAmount == 0 then self:changeSpeed(650,15) else self:changeSpeed(750,25) end self:changeHeight(26 * gameLogicMult) end }; { type = "active"; frames = {7,2,8,2,9,1}; custom = function(self) self.xSpeed = 0 end }; -- { -- frames = {7,4}; -- custom = function(self) -- self.attackbox.exists = false -- self:changeSpeed(300,10) -- end -- }; -- { -- frames = {4,2}; -- custom = function(self) -- self.attackbox.exists = true -- end -- }; { type = "recovery"; frames = {9,1,10,2,11,3,12,1,13,1}; --10 }; }; downBackA = { attackbox = {customEffect = "hitEffect2", pushUp = 155* gameLogicMult, pushback=60 * gameLogicMult, hitStun=11, width=30 * gameLogicMult, height=25 * gameLogicMult, dmg=1, relativeY= 0 * gameLogicMult,relativeX = 0, priority=2, explosionOnEnemyX = true, explosionX = 0, explosionY = 0}; --195 { frames = {1,2,2,2,3,3}; custom = function(self) self:executeSound('dash', {"sfx", "whiff"}) self:changeSpeed(-600,-20) end }; { frames = {4,4}; custom = function(self) self:executeSound('mediumWhiff', {"sfx", "whiff"}) end }; { custom = function(self) if self.meterAmount == 0 then self:changeSpeed(1000, 45) else self:changeSpeed(1200, 55) end end }; { type = "active"; frames = {5,3,6,3}; custom = function(self) end }; -- { -- frames = {7,4}; -- custom = function(self) -- self.attackbox.exists = false -- self:changeSpeed(300,10) -- end -- }; -- { -- frames = {4,2}; -- custom = function(self) -- self.attackbox.exists = true -- end -- }; { type = "recovery"; frames = {7,3,8,3,9,5}; custom = function(self) self.attackbox.exists = false self:changeSpeed(0) end }; }; neutralAB = { frameData = {{type="startup", frameCount=10}, {type="recovery", frameCount=8}}; { frames = {2,4}; custom = function(self) self:executeSound('tenchiSuperRumble', {"sfx", "turd"}) end }; { frames = {3,3,4,3}; }; -- this is the part that can loop for charging variable amounts { frames = {5,3,6,3,7,3,8,3,9,3,10,3,11,2,12,2}; custom = function(self) self.invulnerability = true self.ignoreInvulnOutline = true self.requestSS = true -- self.health = 1 end }; { frames = {13,2,14,2,15,2}; custom = function(self) TEsound.stop("turd") TEsound.pause("music") self:executeSound('tenchiSuperRelease', {"sfx"}) self:overrideBG() TEsound.playLooping(self.sounds.werewolf, {"music", "theme", "wolf"}) end }; endWith = function(self) self:executeAnimation("neutralAB2") end }; neutralAB2 = { { frames = {13,1,14,1,15,1,16,1,1,2,17,1,2,2,3,3,4,3,5,3,6,3,7,3,8,3,9,3,10,8}; }; { frames = {11,4,12,4}; custom = function(self) self:startTrails("super") self:superStopContinue() self.invulnerability = false self.ignoreInvulnOutline = false self.neutralABRequirement = false self.runSpeed = 500 self:changeMeter(33) self.meterTimer = 7 end }; }; -- neutralABOld = { -- attackbox = {throw = "biteThrow", onlyKnockdown = true, width=20 * gameLogicMult, height=20 * gameLogicMult, dmg=1, relativeX=0, relativeY = (12 * gameLogicMult), -- relativeY=20 * gameLogicMult, priority = 3}; -- { -- frames = {1,3,2,3,3,3}; -- custom = function(self) -- -- self:changeMeter(1) -- end; -- }; -- { -- type = "active"; -- frames = {3,5}; -- }; -- { -- type = "recovery"; -- frames = {4,4}; -- }; -- }; dashA = { resetY = false; attackbox = {attackType = attackTypes.high, pushUp = 100 * gameLogicMult, pushback=44 * gameLogicMult, hitStun=12, width=40 * gameLogicMult, height=20 * gameLogicMult, dmg=1, relativeX= (-5 * gameLogicMult), relativeY=22 * gameLogicMult, explosionX = -4 * gameLogicMult,explosionY = 20, priority = 3, ignoreCornerPush=true}; --pushback=66 * gameLogicMult hitstun=23 onFloorTouch = function(self) self:executeMove("dashFloorRecovery") end; { frames = {4,5,5,5,4,7}; custom = function(self) self.flip = -self.flip self.ignoreCollision = false self.ySpeed = -300 self:changeSpeed(-200) end }; { type = "active"; frames = {4,5,5,5,4,7}; custom = function(self) end }; }; dashB = { resetY = false; onFloorTouch = function(self) self:executeMove("dashFloorRecovery") end; attackbox = {attackType = attackTypes.high, pushUp = -600 * gameLogicMult, pushback=44 * gameLogicMult, hitStun=12, width=30 * gameLogicMult, height=30 * gameLogicMult, dmg=1, relativeX= (-25 * gameLogicMult), relativeY=22 * gameLogicMult, explosionX = -4 * gameLogicMult,explosionY = 20, priority = 3, ignoreCornerPush=true}; --pushback=66 * gameLogicMult hitstun=23 { frames = {4,5,5,5,4,7}; custom = function(self) self.flip = -self.flip self.ignoreGravity = true self.ySpeed = 0 end }; { type = "active"; frames = {4,5,5,5,4,7}; custom = function(self) self.ignoreGravity = false self.ySpeed = 1000 end }; }; dashFloorRecovery = { type = "recovery"; frames = {4,5,5,5,4,7}; custom = function(self) self.ignoreCollision = false end }; diveA = { resetY = false; special = true; -- startWith = "air"; --self.attackbox.attackType == attackTypes.low attackbox = {attackType = attackTypes.high, pushback=44 * gameLogicMult, hitStun=20, width=14 * gameLogicMult, height=30 * gameLogicMult, dmg=1, relativeX= (-16 * gameLogicMult), relativeY=22 * gameLogicMult, explosionX = -4 * gameLogicMult,explosionY = 20, priority = 3, ignoreCornerPush=true}; --pushback=66 * gameLogicMult hitstun=23 { type = "active"; frames = {4,5,5,5,4,7}; custom = function(self) end }; -- { -- type = "recovery"; -- frames = {5,5,4,1}; -- }; }; diveB = { resetY = false; special = true; -- startWith = "air"; attackbox = {attackType = attackTypes.high, pushback=145 * gameLogicMult, hitStun=14, width=29 * gameLogicMult, height=11 * gameLogicMult, dmg=1, relativeY=22 * gameLogicMult, explosionX = -10 + (5 * gameLogicMult), priority = 4, ignoreCornerPush=true}; --hitstun=16,pushback=145 { type = "active"; frames = {4,5,5,5,4,7}; custom = function(self) end }; -- { -- type = "recovery"; -- frames = {5,5,4,1}; -- }; }; biteThrow = { enemyFrames = { {1,54/3,-24/3}, --f1 {1,33/3,-24/3}, --f2 {1,39/3,-24/3}, --f3 {1,39/3,-24/3}, --f4 {1,39/3,-24/3}, --f5 {2,54/3,-42/3}, --f6 {2,57/3,-45/3}, --f7 {0,0,0}, --f8 {0,48/3,-33/3}, --f9 {0,39/3,-33/3}, --f10 {0,48/3,-30/3}, --f11 {1,39/3,-24/3}, --f12 {1,39/3, -24/3}, --f13 {1,54/3,-39/3}, --f14 {1,54/3,-39/3}, --f15 {0,0,0}, --f16 {0,0,0}, --f17 {0,0,0}, --f18 {0,0,0}, --f19 {0,0,0}, --f20 {1,39/3,-24/3}, --f21 {1,24/3,-27/3}, --f22 {4,-39/3,-60/3}, --f23 }; { frames = {21,2,22,4,23,4}; custom = function(self) self:changeMeter(1) end }; --5,2,6,4 --1,4,2,4,3,4,4,2,5,1,6,1 { frames = {27,1}; --8,4,9,4,10,4,11,4 custom = function(self) self.enemy:changeSpeed(-400) self.enemy.ySpeed = -200 self.enemy.y = self.enemy.y + 30 self.enemy.ignoreGravity = false self.ignoreCollision = false self.enemy:knockFall() self.enemy.animation:gotoFrame(5) self.faceRight = not self.faceRight self.ignoreFloor = false self.enemy.ignoreFloor = false end }; { frames = {10,21}; --13 custom = function(self) self.enemy:airHurt() end }; }; -- downBackA = { -- { -- frames = {1,10}; -- }; -- { -- frames = {1,1}; -- custom = function(self) -- self:executeMove("dashJumpBack") -- -- self:changeSpeed(-1000) -- -- self.ySpeed = -320 * gameLogicMult -- -- self.gravity = 1300 * gameLogicMult -- end -- }; -- }; dashBack = { frameData = Template:Type="startup", frameCount=41; { type = "recovery"; frames = {1,5}; custom = function(self) if self.meterAmount > 0 then self:executeMove("dashBackWolf") return end end }; { frames = {1,1}; custom = function(self) self.canJump = false self.throwInvuln = true self:executeMove("dashJumpBack") self:executeSound('jump', {"sfx"}) end }; }; dashBackWolf = { frameData = Template:Type="startup", frameCount=41; { type = "recovery"; frames = {1,5}; }; { frames = {1,1}; custom = function(self) self.canJump = false self.throwInvuln = true self:executeMove("dashJumpBackWolf") self:executeSound('jump', {"sfx"}) end }; }; dashForward = { frameData = Template:Type="startup", frameCount=41; { type = "recovery"; frames = {1,5}; custom = function(self) if self.meterAmount > 0 then self:executeMove("dashForwardWolf") end end }; { frames = {1,1}; custom = function(self) self.canJump = false self.throwInvuln = true self:executeMove("dashJumpForward") self:executeSound('jump', {"sfx"}) end }; }; dashForwardWolf = { frameData = Template:Type="startup", frameCount=41; { type = "recovery"; frames = {1,5}; }; { frames = {1,1}; custom = function(self) self.canJump = false self.throwInvuln = true self:executeMove("dashJumpForward") self:executeSound('jump', {"sfx"}) end }; }; dashJumpBack = { frameData = "nil"; spriteName = "dashBack"; onCornerTouch = function(self) if self.y < yFloor - 160 then -- self.image == self.sprites.jumpUp.sheet then -- self.flip = -self.flip -- end self:executeMove("connectedOnWallStart") self.runCancel = false end end; { type = "recovery"; frames = {2,3,3,3}; custom = function(self) if self.meterAmount > 0 then self:executeMove("dashJumpBackWolf") return end if self.meterAmount == 0 then self:changeSpeed(-1100, -40) else self:changeSpeed(-1600, -50) -- self.invulnerability = true end self.ySpeed = -320 * gameLogicMult self.gravity = 1300 * gameLogicMult self.ignoreCollision = true end }; { frames = {4,2,5,2,6,2,7,2,8,2,9,2}; custom = function(self) self.runCancel = true end }; { spriteName = "jumpUp"; frames = {7,2,8,2,9,2,10,2,11,2}; custom = function(self) -- self.ignoreGravity = true -- self:executeMove("connectedOnWall") end }; { spriteName = "jumpUp"; frames = {12,2,13,2,14,4,15,2}; custom = function(self) self.runCancel = false self.ignoreCollision = false self.throwInvuln = false end }; }; dashJumpBackWolf = { frameData = "nil"; spriteName = "dashBackWolf"; onCornerTouch = function(self) if self.y < yFloor - 160 then -- self.image == self.sprites.jumpUp.sheet then -- self.flip = -self.flip -- end self:executeMove("connectedOnWallStartWolf") self.runCancel = false end end; { type = "recovery"; frames = {2,3,3,3}; custom = function(self) if self.meterAmount == 0 then self:changeSpeed(-1100, -40) else self:changeSpeed(-1600, -40) -- self.invulnerability = true end self.ySpeed = -320 * gameLogicMult self.gravity = 1300 * gameLogicMult self.ignoreCollision = true self.height = 31 * gameLogicMult end }; { frames = {4,2,5,2,6,2,7,2,8,2,9,2}; custom = function(self) self.runCancel = true end }; { spriteName = "jumpUpWolf"; frames = {7,2,8,2,9,2,10,2,11,2}; custom = function(self) -- self.ignoreGravity = true -- self:executeMove("connectedOnWall") end }; { spriteName = "jumpUpWolf"; frames = {12,2,13,2,14,4,15,2}; custom = function(self) self.runCancel = false self.ignoreCollision = false self.throwInvuln = false end }; }; dashJumpOffWall = { resetY = false; onFloorTouch = function(self) self:executeAnimation("idle") self.noInput = false self.ignoreCollision = false self.attacking = false if (self.enemy.x + self.enemy.width/2 > self.x + self.width/2) and (self.noInput == false or self.landingTimer > 0) then self.flip = 1 self.faceRight = true elseif (self.noInput == false or self.landingTimer > 0) then self.flip = -1 self.faceRight = false end end; spriteName = "jumpUp"; { type = "recovery"; frames = {9,3,10,3,11,3,12,8}; custom = function(self) if self.meterAmount > 0 then self:executeMove("dashJumpOffWallWolf") return end self.ignoreGravity = false end }; { frames = {12,3}; custom = function(self) -- self.move.name = "notDashJumpOffWall" end }; }; dashJumpOffWallWolf = { resetY = false; onFloorTouch = function(self) self:executeAnimation("idle") self.noInput = false self.ignoreCollision = false self.attacking = false if (self.enemy.x + self.enemy.width/2 > self.x + self.width/2) and (self.noInput == false or self.landingTimer > 0) then self.flip = 1 self.faceRight = true elseif (self.noInput == false or self.landingTimer > 0) then self.flip = -1 self.faceRight = false end end; spriteName = "jumpUpWolf"; { type = "recovery"; frames = {9,3,10,3,11,3,12,8}; custom = function(self) self.move.name = "dashJumpOffWall" self.ignoreGravity = false end }; { frames = {12,3}; custom = function(self) -- self.move.name = "notDashJumpOffWall" end }; }; dashJumpOffWallFast = { resetY = false; onFloorTouch = function(self) self:executeAnimation("idle") self.noInput = false self.attacking = false self.ignoreCollision = false if (self.enemy.x + self.enemy.width/2 > self.x + self.width/2) and (self.noInput == false or self.landingTimer > 0) then self.flip = 1 self.faceRight = true elseif (self.noInput == false or self.landingTimer > 0) then self.flip = -1 self.faceRight = false end end; spriteName = "dashForward"; { type = "recovery"; frames = {3,1}; custom = function(self) if self.meterAmount > 0 then self:executeMove("dashJumpOffWallFastWolf") end self.ignoreGravity = false end; }; { frames = {3,2,4,3,5,3,6,3,7,3,8,2}; custom = function(self) self.flip = -self.flip end }; { frames = {8,1,9,2}; custom = function(self) -- self.move.name = "notDashJumpOffWall" end }; }; dashJumpOffWallFastWolf = { resetY = false; onFloorTouch = function(self) self:executeAnimation("idle") self.noInput = false self.attacking = false self.ignoreCollision = false if (self.enemy.x + self.enemy.width/2 > self.x + self.width/2) and (self.noInput == false or self.landingTimer > 0) then self.flip = 1 self.faceRight = true elseif (self.noInput == false or self.landingTimer > 0) then self.flip = -1 self.faceRight = false end end; spriteName = "dashForwardWolf"; { type = "recovery"; frames = {3,1}; custom = function(self) self.move.name = "dashJumpOffWallFast" self.ignoreGravity = false end; }; { frames = {3,2,4,3,5,3,6,3,7,3,8,2}; custom = function(self) self.flip = -self.flip end }; { frames = {8,1,9,2}; custom = function(self) -- self.move.name = "notDashJumpOffWall" end }; }; dashJumpForward = { frameData = "nil"; spriteName = "dashForward"; onCornerTouch = function(self) if self.y < yFloor - 160 then if self.image == self.sprites.jumpUp.sheet then self.flip = -self.flip end self:executeMove("connectedOnWallStart") self.runCancel = false end end; { type = "recovery"; frames = {2,3,3,3}; custom = function(self) if self.meterAmount > 0 then self:executeMove("dashJumpForwardWolf") return end if self.meterAmount == 0 then self:changeSpeed(1100, 40) else self:changeSpeed(1600, 50) -- self.invulnerability = true end self.ySpeed = -320 * gameLogicMult self.gravity = 1300 * gameLogicMult self.flip = -self.flip self.ignoreCollision = true end }; { frames = {4,2,5,2,6,2,7,2,8,2,9,2}; custom = function(self) self.runCancel = true end }; { spriteName = "jumpUp"; frames = {7,2,8,2,9,2}; custom = function(self) self.flip = -self.flip -- self.ignoreGravity = true -- self:executeMove("connectedOnWall") end }; { spriteName = "jumpUp"; frames = {10,2,11,2}; custom = function(self) self.runCancel = false self.throwInvuln = false self.ignoreCollision = false -- self.flip = -self.flip -- self.ignoreGravity = true -- self:executeMove("connectedOnWall") end }; { spriteName = "jumpUp"; frames = {12,2,13,2,14,4,15,2}; custom = function(self) end }; }; dashJumpForwardWolf = { frameData = "nil"; spriteName = "dashForwardWolf"; onCornerTouch = function(self) if self.y < yFloor - 160 then if self.image == self.sprites.jumpUp.sheet then self.flip = -self.flip end self:executeMove("connectedOnWallStartWolf") self.runCancel = false end end; { type = "recovery"; frames = {2,3,3,3}; custom = function(self) if self.meterAmount == 0 then self:changeSpeed(1100, 40) else self:changeSpeed(1600, 40) -- self.invulnerability = true end self.height = 31 * gameLogicMult self.ySpeed = -320 * gameLogicMult self.gravity = 1300 * gameLogicMult self.flip = -self.flip self.ignoreCollision = true end }; { frames = {4,2,5,2,6,2,7,2,8,2,9,2}; custom = function(self) self.runCancel = true end }; { spriteName = "jumpUpWolf"; frames = {7,2,8,2,9,2}; custom = function(self) self.flip = -self.flip -- self.ignoreGravity = true -- self:executeMove("connectedOnWall") end }; { spriteName = "jumpUpWolf"; frames = {10,2,11,2}; custom = function(self) self.runCancel = false self.throwInvuln = false self.ignoreCollision = false -- self.flip = -self.flip -- self.ignoreGravity = true -- self:executeMove("connectedOnWall") end }; { spriteName = "jumpUpWolf"; frames = {12,2,13,2,14,4,15,2}; custom = function(self) end }; }; connectedOnWallStart = { resetY = false; { spriteName = "wallCling"; type = "recovery"; frames = {1,3}; custom = function(self) if self.meterAmount > 0 then self:executeMove("connectedOnWallStartWolf") end self.landingCancel = false self.xSpeed = 0 self.ySpeed = 0 self.ignoreGravity = true end }; { frames = {1,1}; custom = function(self) self:executeMove("connectedOnWall") end }; }; connectedOnWallStartWolf = { resetY = false; { spriteName = "wallClingWolf"; type = "recovery"; frames = {1,3}; custom = function(self) self.landingCancel = false self.xSpeed = 0 self.ySpeed = 0 self.ignoreGravity = true end }; { frames = {1,1}; custom = function(self) self:executeMove("connectedOnWall") end }; }; connectedOnWall = { spriteName = "wallCling"; resetY = false; { type = "recovery"; frames = {1,40}; custom = function(self) if self.meterAmount > 0 then self:executeMove("connectedOnWallWolf") return end self:whiteBar() self.xSpeed = 0 self.ySpeed = 0 self.ignoreGravity = true end }; { frames = {1,1}; custom = function(self) self:executeMove("fallFromWall") self.ignoreGravity = false end }; }; connectedOnWallWolf = { spriteName = "wallClingWolf"; resetY = false; { type = "recovery"; frames = {1,40}; custom = function(self) self.move.name = "connectedOnWall"; self:whiteBar() self.xSpeed = 0 self.ySpeed = 0 self.ignoreGravity = true end }; { frames = {1,1}; custom = function(self) self:executeMove("fallFromWall") self.ignoreGravity = false end }; }; fallFromWall = { resetY = false; { spriteName = "jumpUp"; frames = {9,3,10,3,11,3,12,6}; custom = function(self) if self.meterAmount > 0 then self:executeMove("fallFromWallWolf") end end }; }; fallFromWallWolf = { resetY = false; { spriteName = "jumpUpWolf"; frames = {9,3,10,3,11,3,12,6}; }; }; }; throw = { enemyFrames = { {5,34 +21,5}, --f1 {6,28 +21,5}, --f2 {7,26 +21,4}, --f3 {8,27 +21,-2}, --f4 {8,27 +21,-5}, --f5 {8,28 +21,-6}, --f6 {8,28 +21,-6}, --f7 {8,28 +21,-6}, --f8 {10,27 +21,-9}, --f9 {10,27 +21,-9}, --f10 {9,28 +21,-7}, --f11 {8,28 +21,-6}, --f12 {8,28 +21,-6}, --f13 {8,28 +21,-6}, --f14 {8,28 +21,-6}, --f15 {10,29 +21,-8}, --f16 {10,32 +21,-13}, --f17 {0,0,0}, --f18 {0,0,0}, --f19 {0,0,0}, --f20 {0,0,0}, --f21 {0,0,0}, --f22 {0,0,0}, --f23 {8,50,-7}, --f24 {8,50,-8}, --f25 {8,43,-9}, --f26 {8,34,-11}, --f27 {4,28,-16}, --f28 {4,19,-18}, --f29 {0,0,0}, --f30 --16,-27,9 {0,0,0}, --f31 {0,0,0}, --f32 {0,0,0}, --f33 {0,0,0}, --f34 {0,0,0}, --f35 {0,0,0}, --f36 }; start = { {frames = {1,3,2,3,3,3,4,3,5,3,6,2,7,10,8,2,9,2}}; --5,2,6,4 --1,4,2,4,3,4,4,2,5,1,6,1 { frames = {10,1,11,3}; --8,4,9,4,10,4,11,4 custom = function(self) self:executeSound('heavyAttack', "sfx") self:throwHitstop(6, 38, 16) cameraJitterX = 2 self.combo = self.combo + 1 self.enemy:changeHealth(1) end }; }; forward = { { frames = {12,3,13,3,14,3,15,3,16,2,17,2}; --11,4,13,2,14,2,15,2 }; { frames = {18,12,19,3,20,3,21,3,22,3,23,3}; custom = function(self) self:executeSound('special', "sfx") self.combo = self.combo + 1 self.enemy:changeHealth(1) self:throwHitstop(8, 38, 16) cameraJitterX = 2 self.enemy:changeLocation(-33) self.enemy:changeSpeed(300) self.enemy.ySpeed = -250 self.enemy.y = self.enemy.y self.enemy.ignoreGravity = false self.enemy:knockFall() self.ignoreFloor = false self.enemy.ignoreFloor = false end }; }; backward = { { frames = {24,3,25,3,26,3,27,3,28,3,29,3}; --21,4,22,4,23,4 }; { frames = {30,3,31,3,32,3,33,12,34,3,35,3,36,3}; custom = function(self) self:changeLocation(4) self.combo = self.combo + 1 self.enemy:changeHealth(1) self:executeSound('grab', "sfx") self.enemy:changeLocation(-125) self.enemy:changeSpeed(-400) self.enemy.ySpeed = -200 self.enemy.y = self.enemy.y + 20 self.enemy.ignoreGravity = false self.ignoreCollision = false self.enemy:knockFall() self.enemy.ignoreCollision = true self.enemy.animation:gotoFrame(5) self.faceRight = not self.faceRight self.ignoreFloor = false self.enemy.ignoreFloor = false end }; { custom = function(self) self:changeLocation(-4) self.enemy.ignoreCollision = false end }; }; }; animations = { idle = { frames = {2,4,3,7,4,4,5,4,6,4,7,4,8,4,9,7,10,4,11,4,12,4,1,4}; custom = function(self) if self.meterAmount > 0 then self:executeAnimation("idleWolf") end end }; idleWolf = { frames = {1,4,2,5,3,4,4,4,5,4,6,6,7,4,8,5,9,4,10,4,11,4,12,6}; custom = function(self) self.move.name = "idle"; end }; jumpForward = { endWith = "nothing"; frames={2,3,3,4,4,1,5,2,6,2,7,2,8,1,9,2,10,1,11,2,12,1,13,2,14,3,15,20}; custom = function(self) if self.meterAmount > 0 then self:executeAnimation("jumpForwardWolf") end end }; jumpBack = { spriteName = "jumpForward"; endWith = "nothing"; frames={15,3,14,4,13,2,12,2,11,2,10,1,9,2,8,1,7,2,6,1,5,2,4,1,3,3,2,20}; custom = function(self) if self.meterAmount > 0 then self:executeAnimation("jumpBackWolf") end end }; jumpUp = { endWith = "nothing"; frames = {2,7,3,3,4,2,5,2,6,2,7,8,8,2,9,2,10,2,11,2,12,6}; custom = function(self) if self.meterAmount > 0 then self:executeAnimation("jumpUpWolf") end end }; jumpUpWolf = { endWith = "nothing"; frames = {2,7,3,3,4,2,5,2,6,2,7,8,8,2,9,2,10,2,11,2,12,6}; }; jumpForwardWolf = { spriteName = "jumpUpWolf"; endWith = "nothing"; frames = {2,7,3,3,4,2,5,2,6,2,7,8,8,2,9,2,10,2,11,2,12,6}; }; jumpBackWolf = { spriteName = "jumpUpWolf"; endWith = "nothing"; frames = {2,7,3,3,4,2,5,2,6,2,7,8,8,2,9,2,10,2,11,2,12,6}; }; landWolf = { spriteName = "jumpUpWolf"; frames = {13,3,14,5,15,3}; }; land = { spriteName = "jumpForward"; frames = {16,3,17,5,18,3}; custom = function(self) if self.meterAmount > 0 then self:executeAnimation("landWolf") end end }; turn = { frames = {1,4}; custom = function(self) if self.meterAmount > 0 then self:executeAnimation("turnWolf") end end }; turnWolf = { frames = {1,4}; custom = function(self) self.move.name = "turn"; end }; crouchTurn = { frames = {1,4}; custom = function(self) if self.meterAmount > 0 then self:executeAnimation("crouchTurnWolf") end end }; crouchTurnWolf = { frames = {1,4}; }; walkForward = { { frames = {1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,5,13,2,14,2,15,2,16,2,17,2,18,2,19,2,20,2,21,2,22,2,23,2,24,5}; custom = function(self) if self.meterAmount > 0 then self:executeAnimation("walkForwardWolf") end end }; }; walkForwardWolf = { { frames = {2,3}; custom = function(self) self.move.name = "walkForward"; end }; { frames = {3,3,4,3}; custom = function(self) self:executeSound("footstep", "sfx") end }; { frames = {5,3,6,3,7,3,8,3,9,3,10,3,11,3}; custom = function(self) self:executeSound("footstep", "sfx") end }; }; walkBack = { spriteName = "walkForward"; { frames = {23,2,22,2,21,2,20,2,19,2,18,2,17,2,16,2,15,2,14,2,13,2,12,5,11,2,10,2,9,2,8,2,7,2,6,2,5,2,4,2,3,2,2,2,1,2,24,5}; custom = function(self) if self.meterAmount > 0 then self:executeAnimation("walkBackWolf") end end }; }; walkBackWolf = { { frames = {1,3,2,3,3,3,4,3,5,3,6,3,7,3,8,3,9,3,10,3,11,3,12,3}; custom = function(self) self.move.name = "walkBack"; end }; }; crouch = { { frames = {1,3,2,32,3,3,4,3,5,3,6,3,7,28,8,3,9,3,10,3}; custom = function(self) if self.meterAmount > 0 then self:executeAnimation("crouchWolf") end end }; }; crouchWolf = { { frames = {1,3,2,3,3,3,4,3,5,3,6,3,7,3,8,3,9,3,10,3,11,3,12,3,13,3,14,3,15,3,16,3}; }; }; crouchTransition = { frames={1,2}; custom = function(self) if self.meterAmount > 0 then self:executeAnimation("crouchTransitionWolf") end end }; standTransition = { spriteName = "crouchTransition"; frames={1,2}; custom = function(self) self.yOffset = -10 if self.meterAmount > 0 then self:executeAnimation("standTransitionWolf") end end }; crouchTransitionWolf = { frames={1,2}; }; standTransitionWolf = { spriteName = "crouchTransitionWolf"; frames={1,2}; custom = function(self) self.move.name = "standTransition"; end }; 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}; }; airHurt = { endWith = "nothing"; { frames = {1,1,2,3}; }; { spriteName = "jumpUp"; frames = {4,2,5,2,6,2,7,8,8,2,9,2,10,2,11,2,12,6}; }; }; knockdown = { endWith = "nothing"; frames = {1,3,2,3,3,3,4,3,5,3,6,3}; }; impact = { spriteName = "knockdown"; frames = {7,3} }; startGroundBounce = { spriteName = "knockdown"; frames = {8,3,9,3,10,7} }; stopGroundBounce = { spriteName = "knockdown"; frames = {11,2,12,10} }; wakeup = { spriteName = "knockdown"; frames = {13,5,14,5} }; death = { spriteName = "knockdown"; endWith = "nothing"; frames = {12,1} }; 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 }; }; boo = { frames = {1,16,2,2,3,4,4,2,5,2,6,2,7,1,8,6,9,7,10,20,11,5,12,2,13,4,15,2,16,2}; endWith = function(self) self:executeAnimation("booLoop") end }; booLoop = { spriteName = "boo"; frames = {17,42,18,7,19,6,20,7,21,6,22,7,23,6,24,7,25,6,26,7,27,15}; }; yay = { frames = {28,16,1,3,2,6,1,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,2,18,2,19,4,20,4,21,4,22,4,23,4,24,4,25,4,26,4,27,4}; endWith = function(self) self:executeAnimation("yayLoop") end }; yayLoop = { frames = {1,4,2,4,3,4,4,4,5,4,6,4,7,4}; }; win = { spriteName = "yay"; frames = {1,3,2,6,1,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,2,18,2,19,4,20,4,21,4,22,4,23,4,24,4,25,4,26,4,27,4}; custom = function(self) if self.meterAmount > 0 then self:executeMove("winWolf") end end; endWith = function(self) self:executeAnimation("yayLoop") end }; winWolf = { {frames = {1,6,2,3,3,3,4,3,5,3,6,3,7,3,6,3,7,3,6,3,7,3,6,3,8,2,9,2,10,2};}; endWith = function(self) self:executeAnimation("winWolf2") end }; winWolf2 = { { frames = {1,2,2,2,3,2,4,2,5,2,6,12,7,4,8,4,9,4,10,4}; custom = function(self) self:executeSound('tenchiSuperRelease', {"sfx"}) self:meterTimeEnd(true) end }; endWith = function(self) self:executeAnimation("yayLoop") end }; }; effects = { hitEffect = { frames = {1,2,2,2,3,2,4,2,5,1}; }; hitEffect2 = { layer = "hit"; frames = {1,2,2,2,3,2,4,2,5,1}; }; hitEffect3 = { layer = "hit"; frames = {1,2,2,2,3,2,4,2,5,1}; }; hitEffect4 = { layer = "hit"; frames = {1,2,2,2,3,2,4,2,5,1}; }; hitEffect5 = { layer = "hit"; frames = {1,3,2,3,3,2,4,2,2,1}; }; downBackBEffect = { frames = {3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2}; relativeX = -28 * gameLogicMult; relativeY = -26 * gameLogicMult; followPlayer = true; ignoreParry = true; }; lowBEffect = { frames = {1,3,2,2,3,2,4,2}; relativeX = -42 * gameLogicMult; relativeY = 2 * gameLogicMult; followPlayer = true; destroyWhenPlayerHurt = true; destroyWhenPlayerCancel = true; ignoreHitstop = true; }; lowBEffect2 = { frames = {1,3,2,2,3,2,4,2}; relativeX = -42 * gameLogicMult; relativeY = 2 * gameLogicMult; followPlayer = true; destroyWhenPlayerHurt = true; layer = "bottom"; destroyWhenPlayerCancel = true; ignoreHitstop = true; }; lowAEffect = { frames = {1,3}; relativeX = -13 * gameLogicMult; relativeY = -13 * gameLogicMult; followPlayer = true; destroyWhenPlayerHurt = true; destroyWhenPlayerCancel = true; ignoreHitstop = true; }; downForwardBEffect = { frames = {1,2,2,2,3,3,4,2}; relativeX = -18 * gameLogicMult; relativeY = -1 * gameLogicMult; followPlayer = true; destroyWhenPlayerHurt = true; destroyWhenPlayerCancel = true; ignoreHitstop = true; }; jumpBEffect = { frames = {1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2}; relativeX = -18 * gameLogicMult; relativeY = 8 * gameLogicMult; followPlayer = true; destroyWhenPlayerHurt = true; destroyWhenPlayerCancel = true; ignoreHitstop = true; }; jumpAEffect = { frames = {1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2}; relativeX = -4 * gameLogicMult; relativeY = 0 * gameLogicMult; followPlayer = true; destroyWhenPlayerHurt = true; destroyWhenPlayerCancel = true; ignoreHitstop = true; }; nameplateBackground = { frames = {1,5,2,5,3,5,4,5,5,5,6,5}; endWith = "loop"; }; standAWolfEffect = { frames = {1,2,2,2,3,2,4,2,5,2,6,1,7,1}; relativeX = 1 * gameLogicMult; relativeY = -23 * gameLogicMult; followPlayer = true; ignoreParry = true; }; lowAWolfEffect = { frames = {1,2,2,2,3,2,4,2,5,2,6,1,7,1}; relativeX = 15 * gameLogicMult; relativeY = 6 * gameLogicMult; followPlayer = true; ignoreParry = true; }; jumpAWolfEffect = { frames = {1,2,2,2,3,2,4,2,5,2,6,1,7,1}; relativeX = -39 * gameLogicMult; relativeY = -19 * gameLogicMult; followPlayer = true; ignoreParry = true; }; }; nameplate = { endWith = "nothing"; frames = {1,1,2,1,3,3,4,1,5,1,6,3,7,1,8,1,9,3,10,1,11,1,12,3,13,1,14,1,15,6,16,1,17,1,18,3,19,1,20,1,21,3,22,1,23,1,24,6,25,1,26,1,27,6,28,1,29,1,30,3,31,1,32,1,33,3,34,1,35,1,36,6,37,1,38,1,39,3,40,1,41,1,42,3,43,3,44,3,45,6}; --1,5,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2,14,2,15,2} custom = function(self, host) if host.player1 == true then host:executeSound("nameplate", {"sfx", "nameplate1"}, -1) else host:executeSound("nameplate", {"sfx", "nameplate2"}, 1) end end; }; colors = { default = { sprite = { {130,198,0}; --pants green {0,255,0}; --eye glow green {59,25,55}; --claw outline {97,77,121}; --claw dark shadow {149,137,176}; --claw medium shadow {213,191,248}; --claw lightest {153,85,193}; --trails main {255,0,255}; --trails middle {153,0,193}; --trails dithered {204,170,240}; --werewolf lighter {146,115,191}; --werewolf darker }; effects = { {153,85,193}; --trails main {255,0,255}; --trails middle {153,0,193}; --trails dithered }; meterIcon = { {234,212,243}; --lighter color {153,85,193}; --darker color }; hit = {0,255,0}; --generalAssets dust = {0,255,0}; block = {0,255,0}; mainUI = {0, 113, 0}; health = {0,255,0}; meterChunk = { --meterOne {126,11,176}; --darkGreen {190,0,255}; --mediumGreen {185,96,255}; --lightestGreen --meterTwo {180,53,255}; --darkGreen {196,101,255}; --mediumGreen {215,142,255}; --lightestGreen }; trailSuper = { {153,0,193}; --black {255,255,255}; --white {204,142,255}; --other }; }; alt1 = { sprite = { {217,64,64}; --pants green {255,0,0}; --eye glow green {25,43,59}; --claw outline {77,87,121}; --claw dark shadow {137,161,176}; --claw medium shadow {198,191,255}; --claw lightest {0,99,231}; --trails main {59,179,255}; --trails middle {10,69,195}; --trails dithered {170,216,240}; --werewolf lighter {115,146,191}; --werewolf darker }; effects = { {0,99,231}; --trails main {59,179,255}; --trails middle {10,69,195}; --trails dithered }; meterIcon = { {200,232,255}; --lighter color {0,99,231}; --darker color }; hit = {255,0,0}; --generalAssets dust = {255,64,64}; -- trailSuper = {0, 200, 255}; trailSuper = { {0,99,231}; --black {255,255,255}; --white {67,214,247}; --other }; mainUI = {113, 0, 0}; health = {255,0,0}; 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 }; }; alt2 = { sprite = { {245,115,2}; --pants green {255,132,0}; --eye glow green {63,63,0}; --claw outline {127,135,63}; --claw dark shadow {211,205,101}; --claw medium shadow {248,245,191}; --claw lightest {255,223,24}; --trails main {255,255,0}; --trails middle {215,191,0}; --trails dithered {236,240,170}; --werewolf lighter {208,192,44}; --werewolf darker }; effects = { {255,223,24}; --trails main {255,255,0}; --trails middle {215,191,0}; --trails dithered }; meterIcon = { {255,254,138}; --lighter color {232,198,0}; --darker color }; hit = {255,132,0}; --generalAssets dust = {255,164,42}; mainUI = {187, 72, 0}; --UIcolor health = {255,102,7}; 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 }; trailSuper = { {215,191,0}; --black {255,255,255}; --white {255,255,0}; --other }; }; alt3 = { sprite = { {223,216,4}; --pants green {255,255,0}; --eye glow green {69,11,43}; --claw outline {140,79,85}; --claw dark shadow {246,162,185}; --claw medium shadow {245,203,248}; --claw lightest {255,30,106}; --trails main {255,68,167}; --trails middle {226,33,99}; --trails dithered {240,172,170}; --werewolf lighter {224,82,164}; --werewolf darker }; effects = { {255,30,106}; --trails main {255,68,167}; --trails middle {226,33,99}; --trails dithered }; meterIcon = { {255,193,223}; --lighter color {255,30,106}; --darker color }; hit = {255,255,0}; --generalAssets 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 }; }; alt5 = { sprite = { {128,183,192}; --pants green {0,216,255}; --eye glow green {81,0,0}; --claw outline {165,75,67}; --claw dark shadow {233,138,138}; --claw medium shadow {243,207,207}; --claw lightest {239,73,79}; --trails main {255,0,0}; --trails middle {218,8,0}; --trails dithered {240,188,170}; --werewolf lighter {221,86,85}; --werewolf darker }; effects = { {239,73,79}; --trails main {255,0,0}; --trails middle {218,8,0}; --trails dithered }; meterIcon = { {255,200,200}; --lighter color {255,0,0}; --darker color }; hit = {0,216,255}; --generalAssets dust = {128,183,192}; mainUI = {0,75,88}; --UIcolor health = {0,216,255}; 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 }; trailSuper = { {255,0,0}; --medium hand outline {255,255,255}; --white {255,121,121}; --hand trails }; }; alt6 = { sprite = { {104,104,104}; --pants green {155,155,167}; --eye glow green {92,48,89}; --claw outline {130,76,157}; --claw dark shadow {184,126,201}; --claw medium shadow {237,202,234}; --claw lightest {240,128,240}; --trails main {191,87,199}; --trails middle {217,71,255}; --trails dithered {219,170,240}; --werewolf lighter {191,115,188}; --werewolf darker }; effects = { {240,128,240}; --trails main {191,87,199}; --trails middle {217,71,255}; --trails dithered }; meterIcon = { {249,222,255}; --lighter color {240,128,240}; --darker color }; hit = {155,155,167}; --generalAssets dust = {155,155,167}; mainUI = {64,64,64}; --UIcolor health = {155,155,167}; 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 = { {148,0,247}; --black {255,255,255}; --white {240,128,240}; --other }; }; alt7 = { sprite = { {149,70,145}; --pants green {136,17,149}; --eye glow green {45,59,25}; --claw outline {74,104,66}; --claw dark shadow {154,197,115}; --claw medium shadow {198,248,191}; --claw lightest {0,255,0}; --trails main {149,255,32}; --trails middle {75,195,0}; --trails dithered {208,240,170}; --werewolf lighter {123,191,115}; --werewolf darker }; effects = { {0,255,0}; --trails main {149,255,32}; --trails middle {75,195,0}; --trails dithered }; meterIcon = { {204,255,193}; --lighter color {0,255,0}; --darker color }; hit = {136,17,149}; --generalAssets 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,127,148}; --pants green {255,43,106}; --eye glow green {19,35,35}; --claw outline {62,97,94}; --claw dark shadow {137,176,163}; --claw medium shadow {191,237,248}; --claw lightest {29,159,165}; --trails main {0,255,192}; --trails middle {0,123,129}; --trails dithered {170,240,176}; --werewolf lighter {115,191,173}; --werewolf darker }; effects = { {29,159,165}; --trails main {0,255,192}; --trails middle {0,123,129}; --trails dithered }; meterIcon = { {234,212,243}; --lighter color {153,85,193}; --darker color }; hit = {255,43,106}; --generalAssets dust = {255,100,146}; block = {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 Quinn:initiate() self:_initiate() self.hitLightSFX = "lightAttack" self.hitHeavySFX = "heavyAttack" self.hitLowSFX = "lowAttack" self.hitSpecialSFX = "special" end function Quinn:update(dt) self:_update(dt) -- if not self.neutralABRequirement and self.jumpAttack then -- self.invulnerability = true -- end if self.move.name == "jumpA" or self.move.name == "jumpB" then if self:framesUntilFloor() == 2 then self.ignoreCollision = false end end if p.health <= 0 or q.health <= 0 then return end if self.meterTimer > 0 then self.throwInvuln = true self.meterTimer = self.meterTimer - 1 if self.meterTimer == 0 then -- self.meterAmount = self.meterAmount - 1 self:changeMeter(-1) if self.meterAmount == 0 then self:meterTimeEnd() else self.meterTimer = 7 end end end end function Quinn:alwaysUpdate(dt) self:_alwaysUpdate(dt) end function Quinn:controlUpdateHelper(left, right, up, down, buttonA, buttonB, tapA, tapB, specialA, specialB) if not buttonB then self.repeatB = false end if not buttonA then self.repeatA = false end self:dashFlagUpdate(left, right) if buttonA and not self.repeatA then self.gravity = defaultGravity if self.move.name == 'dashJumpBack' or self.move.name == 'dashJumpBackWolf' or (self.move.name == 'dashJumpForward' and self.currentStage >= 3) then self.flip = -self.flip end if self.move.name ~= 'dashJumpOffWall' and self.move.name ~= 'dashJumpOffWallFast' then self.flip = -self.flip self:executeMove("jumpADash") self.repeatA = true self.lastFrameA = true else if self.move.name == 'dashJumpOffWallFast' then self.flip = -self.flip end self:executeMove("jumpA") -- self.repeatA = true -- self.lastFrameA = true end self.ignoreCollision = true self.runCancel = false -- if down then -- self.move.endWith = function() -- self.moves.teleportRecovery.endWith = nil -- self:endAttack() -- local oldrepeat = self.repeatA -- self:checkTurn() -- self:executeMove("lowA") -- self.repeatA = oldrepeat -- end -- else -- self.move.endWith = function() -- self.moves.teleportRecovery.endWith = nil -- self:endAttack() -- local oldrepeat = self.repeatA -- self:checkTurn() -- self:executeMove("standA") -- self.repeatA = oldrepeat -- end -- end -- return elseif buttonB and not self.repeatB then self.gravity = defaultGravity if self.move.name == 'dashJumpBack' or self.move.name == 'dashJumpBackWolf' or (self.move.name == 'dashJumpForward' and self.currentStage >= 3) then self.flip = -self.flip end if self.move.name ~= 'dashJumpOffWall' and self.move.name ~= 'dashJumpOffWallFast' then self.flip = -self.flip self:executeMove("jumpBDash") self.repeatB = true self.lastFrameB = true else if self.move.name == 'dashJumpOffWallFast' then self.flip = -self.flip end self:executeMove("jumpB") -- self.repeatB = true -- self.lastFrameB = true end self.ignoreCollision = true self.runCancel = false end end function Quinn:controlUpdate(left, right, up, down, buttonA, buttonB, tapA, tapB, specialA, specialB) self.blockHigh = false self.blockLow = false if self.meterAmount > 0 then self.inputFrame = 0 end -- if rootState.training and trainingOptions.infiniteMeter and self.meterTimer > 0 then -- self.meterTimer = 100 -- end if tapA then buttonA = true end if tapB then buttonB = true end if self.move.name == 'connectedOnWall' and hitstop <= 0 and self.freezeTime == 0 then -- if buttonA and not self.repeatA then -- self.ignoreGravity = false -- self:executeMove("diveA") -- self.repeatA = true -- elseif buttonB and not self.repeatB then -- self.ignoreGravity = false -- self:executeMove("diveB") -- self.repeatB = true -- end if not buttonB then self.repeatB = false end if not buttonA then self.repeatA = false end -- This is here because I was dashing on accident when tapping forward once after forward dash self.dashInputLeft = 0 self.dashInputRight = 0 self.flagDashLeft = false self.flagDashRight = false -- if down and ((left and self.flip == -1) or (right and self.flip == 1)) then self:executeMove('dashJumpOffWall') self:changeSpeed(500) -- elseif (left and self.flip == -1) or (right and self.flip == 1) then self:executeMove('dashJumpOffWall') self:changeSpeed(950) -- self:changeSpeed(100) local forward = (left and self.flip == -1) or (right and self.flip == 1) if down then self:executeMove('dashJumpOffWall') self:changeSpeed(100) self.gravity = 1000 * gameLogicMult elseif forward then self:executeMove('dashJumpOffWallFast') self:changeSpeed(925) self.gravity = 1000 * gameLogicMult elseif (buttonA and not self.repeatA) or (buttonB and not self.repeatB) then if up then self:executeMove('dashJumpOffWallFast') self:changeSpeed(925) self.gravity = 1000 * gameLogicMult self:controlUpdateHelper(left, right, up, down, buttonA, buttonB, tapA, tapB, specialA, specialB) else self:executeMove('dashJumpOffWall') self:changeSpeed(500) self.gravity = 1000 * gameLogicMult self:controlUpdateHelper(left, right, up, down, buttonA, buttonB, tapA, tapB, specialA, specialB) end end elseif (self.runCancel or self.move.name == 'dashJumpOffWall' or self.move.name == 'dashJumpOffWallFast') and hitstop <= 0 and self.freezeTime == 0 and not (down and right) and not (down and left) then --don't forget to make this false on normalhit self:controlUpdateHelper(left, right, up, down, buttonA, buttonB, tapA, tapB, specialA, specialB) -- if not buttonB then -- self.repeatB = false -- end -- if not buttonA then -- self.repeatA = false -- end -- self:dashFlagUpdate(left, right) -- if buttonA and not self.repeatA then -- self.gravity = defaultGravity -- if self.move.name == 'dashJumpBack' or (self.move.name == 'dashJumpForward' and self.currentStage >= 3) then -- self.flip = -self.flip -- end -- if self.move.name ~= 'dashJumpOffWall' and self.move.name ~= 'dashJumpOffWallFast' then -- self.flip = -self.flip -- self:executeMove("jumpADash") -- self.repeatA = true -- self.lastFrameA = true -- else -- if self.move.name == 'dashJumpOffWallFast' then -- self.flip = -self.flip -- end -- self:executeMove("jumpA") -- -- self.repeatA = true -- -- self.lastFrameA = true -- end -- self.ignoreCollision = true -- self.runCancel = false -- -- if down then -- -- self.move.endWith = function() -- -- self.moves.teleportRecovery.endWith = nil -- -- self:endAttack() -- -- local oldrepeat = self.repeatA -- -- self:checkTurn() -- -- self:executeMove("lowA") -- -- self.repeatA = oldrepeat -- -- end -- -- else -- -- self.move.endWith = function() -- -- self.moves.teleportRecovery.endWith = nil -- -- self:endAttack() -- -- local oldrepeat = self.repeatA -- -- self:checkTurn() -- -- self:executeMove("standA") -- -- self.repeatA = oldrepeat -- -- end -- -- end -- -- return -- elseif buttonB and not self.repeatB then -- self.gravity = defaultGravity -- if self.move.name == 'dashJumpBack' or (self.move.name == 'dashJumpForward' and self.currentStage >= 3) then -- self.flip = -self.flip -- end -- if self.move.name ~= 'dashJumpOffWall' and self.move.name ~= 'dashJumpOffWallFast' then -- self.flip = -self.flip -- self:executeMove("jumpBDash") -- self.repeatB = true -- self.lastFrameB = true -- else -- if self.move.name == 'dashJumpOffWallFast' then -- self.flip = -self.flip -- end -- self:executeMove("jumpB") -- -- self.repeatB = true -- -- self.lastFrameB = true -- end -- self.ignoreCollision = true -- self.runCancel = false -- -- if down then -- -- self.move.endWith = function() -- -- self.moves.teleportRecovery.endWith = nil -- -- self:endAttack() -- -- local oldrepeat = self.repeatB -- -- self:checkTurn() -- -- self:executeMove("lowB") -- -- self.repeatB = oldrepeat -- -- end -- -- else -- -- self.move.endWith = function() -- -- self.moves.teleportRecovery.endWith = nil -- -- self:endAttack() -- -- local oldrepeat = self.repeatB -- -- self:checkTurn() -- -- self:executeMove("standB") -- -- self.throwTimer = 0 -- -- self.repeatB = oldrepeat -- -- end -- -- end -- -- return -- end else self:_controlUpdate(left, right, up, down, buttonA, buttonB, tapA, tapB, specialA, specialB) end end function Quinn:hitFloor(maxY) if self.move.name == "fallFromWall" then self.throwInvuln = false self.attackbox.exists = false self.attacking = false self.gravity = defaultGravity self:executeAnimation("idle") self.noInput = false self.ySpeed = 0 self.ignoreCollision = false if (self.enemy.x + self.enemy.width/2 > self.x + self.width/2) and (self.noInput == false or self.landingTimer > 0) then self.flip = 1 self.faceRight = true elseif (self.noInput == false or self.landingTimer > 0) then self.flip = -1 self.faceRight = false end else self:_hitFloor(maxY) end end function Quinn:reset() self:_reset() self:resetMeter() -- self.meterAmount = 33 self.neutralABRequirement = true end function Quinn:resetMeter() self.meterChunkArray = {} for i=1, 33 do if i==1 then self.meterChunkArray[i] = anim8.newAnimation(self.sprites.meterChunk.grid(repeatNum(6,30)), frameTime) elseif i == 33 then self.meterChunkArray[i] = anim8.newAnimation(self.sprites.meterChunk.grid(repeatNum(4,30)), frameTime) else self.meterChunkArray[i] = anim8.newAnimation(self.sprites.meterChunk.grid(repeatNum(5,30)), frameTime) --6,1,1,2,2,2,3,2,4,2,5,1 end end self:_resetMeter() end function Quinn:changeMeter(amount) --1,2,3 empty grey (leftmost, middle, rightmost) 4,5,6 (filled), 7,8,9 (lit up) 10,11,12 self.meterAmount = self.meterAmount + amount if amount > 0 then if self.meterAmount == 33 then if self.playerNum == 1 then self:executeSound('fullMeter', "sfx", -1) else self:executeSound('fullMeter', "sfx", 1) end -- self.neutralABRequirement = true self.meterAnimate = anim8.newAnimation(self.sprites.meter.grid(repeatNum(2,2,3,1)), frameTime, 'pauseAtEnd') end if self.meterAmount >= 33 then self.meterAmount = 33 self.meterJitter = 5 else self.meterJitter = 2 end for i=1,33 do if i==1 then self.meterChunkArray[i] = anim8.newAnimation(self.sprites.meterChunk.grid(repeatNum(9,1)), frameTime, 'pauseAtEnd') elseif i==33 then self.meterChunkArray[i] = anim8.newAnimation(self.sprites.meterChunk.grid(repeatNum(7,1)), frameTime, 'pauseAtEnd') else self.meterChunkArray[i] = anim8.newAnimation(self.sprites.meterChunk.grid(repeatNum(8,1)), frameTime, 'pauseAtEnd') end end else -- if self.meterAmount == 0 then -- self.meterAnimate = anim8.newAnimation(self.sprites.meter.grid(repeatNum(1,1)), frameTime, 'pauseAtEnd') -- if self.meterAmount < 0 then self.meterAmount = 0 end -- self.neutralABRequirement = false -- end -- for i=1,33 do if self.meterAmount+1 == 33 then self.meterChunkArray[self.meterAmount+1] = anim8.newAnimation(self.sprites.meterChunk.grid(repeatNum(1,1)), frameTime, 'pauseAtEnd') else self.meterChunkArray[self.meterAmount+1] = anim8.newAnimation(self.sprites.meterChunk.grid(repeatNum(2,1)), frameTime, 'pauseAtEnd') end self.meterChunkArray[self.meterAmount] = anim8.newAnimation(self.sprites.meterChunk.grid(repeatNum(4,1)), frameTime, 'pauseAtEnd') -- end -- self.meterJitter = 5 end end function Quinn:meterTimeEnd(ignoreAnim) if not ignoreAnim then self:executeMove("detransform") end self:overrideBG(true) self:hitReset() self.gravity = defaultGravity self.attacking = false self.jumpAttack = false self.landingCancel = false self.attackbox.exists = false self.ySpeed = 0 self.meterAmount = 0 self.meterTimer = 0 self.throwInvuln = false for i=1, 33 do if i==1 then self.meterChunkArray[i] = anim8.newAnimation(self.sprites.meterChunk.grid(repeatNum(3,30)), frameTime) elseif i == 33 then self.meterChunkArray[i] = anim8.newAnimation(self.sprites.meterChunk.grid(repeatNum(1,30)), frameTime) else self.meterChunkArray[i] = anim8.newAnimation(self.sprites.meterChunk.grid(repeatNum(2,30)), frameTime) end end self.runSpeed = 105 * gameLogicMult self:stopTrails() -- self:executeAnimation("stopWolfAir") -- self:executeAnimation("stopWolfHurt") end function Quinn:meterAnimation() love.graphics.setShader(self.shaders.meterIcon) if self.player1 then self.meterAnimate:draw(self.sprites.meter.sheet, self.meterX, self.meterY + self.meterJitter, 0, gameLogicMult, gameLogicMult, 0, 0) love.graphics.setShader(self.shaders.meterChunk) for i=1, 33 do local d = i-1 self.meterChunkArray[i]:draw(self.sprites.meterChunk.sheet, (self.meterX + 122 - 16) - (d * 2), self.meterY + 12 + self.meterJitter, 0, gameLogicMult, gameLogicMult, 0, 0) end else self.meterAnimate:draw(self.sprites.meter.sheet, self.meterX, self.meterY + self.meterJitter, 0, -gameLogicMult, gameLogicMult, 0, 0) love.graphics.setShader(self.shaders.meterChunk) for i=1, 33 do local d = i-1 self.meterChunkArray[i]:draw(self.sprites.meterChunk.sheet, (self.meterX - 122 + 16) + (d * 2), self.meterY + 12 + self.meterJitter, 0, -gameLogicMult, gameLogicMult, 0, 0) end end love.graphics.setShader() end function Quinn:hitResponse(alsoHit, delayHurt, hurtboxHit) -- if self.ignoreCollision then -- self.ignoreCollision = false -- end self:_hitResponse(alsoHit, delayHurt, hurtboxHit) if self.meterAmount > 0 then if self.move.name == "lowBWolf" then self.jumpAttack = true self.noInput = true self.canJump = false elseif self.move.name ~= "jumpAWolf" and self.move.name ~= "jumpBWolf" then self.landingCancel = true end end end function Quinn:jump(customXVelocity, customYVelocity, forceDirection) self.ignoreFloor = true self.invulnerability = false self.throwInvuln = true self.canJump = false self.noInput = true self.blockLow = false self.blockHigh = false self:stopLanding() self.height = standHeight self.y = yFloor - self.height self.backJump = false self.forwardJump = false -- self.height = 31 * gameLogicMult self.ignoreGravity = true --self:checkCrouch() self.xSpeed = 0 self.ySpeed = 0 self.state = "attack" if forceDirection then self:setAnimation(self.sprites.jumpUp, {1,1}) else if self.meterAmount > 0 then self:setAnimation(self.sprites.jumpUpWolf, {1,3}) else self:setAnimation(self.sprites.jumpUp, {1,3}) end end self.animation.onLoop = function() if self.forwardJumpInput and not self.backJumpInput then if self.flip == 1 then self.forwardJump = true else self.backJump = true end elseif self.backJumpInput and not self.forwardJumpInput then if self.flip == 1 then self.backJump = true else self.forwardJump = true end end if forceDirection == 'forward' then self.forwardJump = true self.backJump = false end if self.meterAmount > 0 then self:setAnimation(self.sprites.jumpUpWolf, {1,1}) else self:setAnimation(self.sprites.jumpUp, {1,1}) end self.animation.onLoop = function() self.ignoreFloor = false self:executeSound('jump', "sfx") -- self:setDust(58, false, true) -- self.jumpEffectAnimate = anim8.newAnimation(playerEffects.jumpDust.grid(repeatNum(1,3,2,3,7,1)), frameTime, 'pauseAtEnd') self.height = 31 * gameLogicMult self.ignoreGravity = false self.decay = nil if not customXVelocity then customXVelocity = 105 * gameLogicMult end if self.forwardJump then self:executeAnimation("jumpForward") -- self.state = "jumpLeft" self.xSpeed = customXVelocity * self.flip --self:changeWidth(57) self.height = 31 * gameLogicMult --94 elseif self.backJump then self:executeAnimation("jumpBack") --self.state = "jumpRight" self.xSpeed = customXVelocity * -self.flip --self:changeWidth(57) self.height = 31 * gameLogicMult --94 else self:executeAnimation("jumpUp") self.state = "jump" end self.forwardJump = false self.backJump = false if customYVelocity then self.ySpeed = customYVelocity else self.ySpeed = self.jumpSpeed end self.jumpAttack = true self:stopLanding() end end end function Quinn:fullMeter() if not self.neutralABRequirement and self.meterAmount == 0 then self.neutralABRequirement = true self.meterJitter = 5 self.meterAnimate = anim8.newAnimation(self.sprites.meter.grid(repeatNum(2,2,1,1)), frameTime, 'pauseAtEnd') for i=1, 33 do if i==1 then self.meterChunkArray[i] = anim8.newAnimation(self.sprites.meterChunk.grid(repeatNum(6,1)), frameTime, 'pauseAtEnd') elseif i==33 then self.meterChunkArray[i] = anim8.newAnimation(self.sprites.meterChunk.grid(repeatNum(4,1)), frameTime, 'pauseAtEnd') else self.meterChunkArray[i] = anim8.newAnimation(self.sprites.meterChunk.grid(repeatNum(5,1)), frameTime, 'pauseAtEnd') end end self:executeSound('fullMeter', "sfx", 1) end end function Quinn:normalHit(attackInfo, delayHurt, hurtboxHit) if self.meterAmount > 0 then if self.enemy.attackbox.enemyDragData then return end self:meterTimeEnd() -- self.enemy:killAllEffects() else self:_normalHit(attackInfo, delayHurt, hurtboxHit) end end