Subject11.lua
From Pocket Rumble Wiki
subject11.lua[edit]
local quinnX = -80; local quinnY = -12; local hectorX = -30; local hectorY = 0; local subject11X = 0; local subject11Y = -100; local sub113AX = -40; local sub113AY = -70; local sub113BX = -40; local sub113BY = -100; local sub111AX = -40; local sub111AY = -70; local sub111BX = 0; local sub111BY = 0; Subject11 = { moves = { standA = { attackbox = {pushback=189 * gameLogicMult, hitStun=12, width=17 * gameLogicMult, height=18 * gameLogicMult, dmg=1, relativeY=13 * gameLogicMult, explosionX = 3 * gameLogicMult, priority = 4}; { frames = {1,2,2,2}; custom = function(self) self:executeSound('lightWhiff', {"sfx", "whiff"}) end }; { type = "active"; frames = {3,2}; }; { type = "recovery"; frames = {3,3}; }; { type = "recovery"; frames = {4,2}; custom = function(self) self:executeEffect("standAEffect") end }; }; standB = { attackbox = {ignoreCornerPush = true, pushUp = 10, pushback=250 * gameLogicMult, hitStun=14, width=60 * gameLogicMult, height=14 * gameLogicMult, relativeY = 8 * gameLogicMult, dmg=1, explosionX = -4 * gameLogicMult, explosionY = -1 * gameLogicMult, priority = 3}; { --hitstun = 18, pushback = 190 * gameLogicMult frames = {3,1,4,2,5,2,6,2,7,2,8,2}; --11 custom = function(self) self:executeSound('mediumWhiff', {"sfx", "whiff"}) end }; { type = "active"; frames = {9,2,10,2,11,2,12,2}; --9 custom = function(self) self:changeLocation(20) end }; { type = "recovery"; frames = {13,2,14,10,15,4}; --18 }; { type = "recovery"; frames = {16,4}; --18 custom = function(self) self:executeEffect("standBEffect") end }; }; lowA = { attackbox = {pushback=133 * gameLogicMult, hitStun=16, width=45 * gameLogicMult, height=11 * gameLogicMult, dmg=1, relativeY=25 * gameLogicMult, explosionX = -6, explosionY = 2, priority = 4}; { frames = {1,3,2,3,3,1,4,1}; custom = function(self) self:executeSound('mediumWhiff', {"sfx", "whiff"}) end }; { type = "active"; frames = {5,1,6,5}; }; { type = "recovery"; frames = {7,3}; custom = function(self) self:changeLocation(30) end }; { -- type = "recovery"; frames = {8,3}; custom = function(self) self:changeLocation(24) self:executeEffect("lowAEffect") end }; }; lowB = { attackbox = {pushUp = 430,pushback=50 * gameLogicMult, hitStun=13, width=40 * gameLogicMult, height=35 * gameLogicMult, dmg=1, relativeY=9 * gameLogicMult, explosionX = -8 - (4 * gameLogicMult), explosionY = 2, priority = 3}; { --pushUp = 300 frames = {1,1,2,2,3,2,4,2}; --1,2,2,2,3,1,4,1,5,1 custom = function(self) self:executeSound('heavyWhiff', {"sfx", "whiff"}) end }; { type = "active"; frames = {5,2,6,2}; --6,3,7,1 custom = function(self) self.height = standHeight self.yOffset = self.yOffset + 16 end }; { type = "recovery"; frames = {6,16}; --8,3,9,3,10,3,11,3,12,3,13,3,14,3,15,3 custom = function(self) self.yOffset = self.yOffset + 16 end }; { type = "recovery"; frames = {7,4}; --8,3,9,3,10,3,11,3,12,3,13,3,14,3,15,3 custom = function(self) self.yOffset = self.yOffset + 16 self:executeEffect("lowBEffect") self:executeEffect("lowBEffect2") end }; }; jumpA = { attackbox = {pushback=145 * gameLogicMult, hitStun=14, width=20 * gameLogicMult, height=20 * gameLogicMult, dmg=1, relativeY=20 * gameLogicMult, explosionX = -10 + (5 * gameLogicMult), priority = 4, ignoreCornerPush=true}; --hitstun=16,pushback=145 { frames = {2,2,3,2,4,2}; --{1,3,2,3,3,1} custom = function(self) self:executeSound('mediumWhiff', {"sfx", "whiff"}) end }; { type = "active"; frames = {5,7}; }; { type = "recovery"; frames = {6,3,1,4}; --2,4,1,16 custom = function(self) self:executeEffect("jumpAEffect") end }; endWith = function(self) self:executeAnimation("jumpUp", { frames={7,2,8,2,9,2,10,20}; }); end }; jumpB = { attackbox = {pushback=44 * gameLogicMult, hitStun=20, width=45 * gameLogicMult, height=10 * gameLogicMult, dmg=1, relativeX= (-40 * gameLogicMult), relativeY=16 * gameLogicMult, explosionX = -4 * gameLogicMult,explosionY = 20, priority = 3, ignoreCornerPush=true}; --pushback=66 * gameLogicMult hitstun=23 { --hitstun=22 frames = {1,3,2,3}; custom = function(self) self:executeSound('mediumWhiff', {"sfx", "whiff"}) end }; { type = "active"; frames = {3,2,4,2,3,2,4,2,3,2,4,2,3,2,4,2}; --4,5,5,5,4,5,5,5,4,5 }; { type = "recovery"; frames = {2,3}; }; { type = "recovery"; frames = {5,4}; custom = function(self) self:executeEffect("jumpBEffect") self:executeEffect("jumpBEffect2") end }; endWith = function(self) self:executeAnimation("jumpUp", { frames={7,2,8,2,9,2,10,20}; }); end }; downBackA = { attackbox = {throw="oneAThrow",width=35 * gameLogicMult, height=12 * gameLogicMult, relativeY = 11 * gameLogicMult, priority = 5, external = true}; { --old hitstun as starter: 25 frames = {1,1,2,3,3,2,4,2}; --1,4,2,8 --8 frames custom = function(self) end }; { -- type = "active"; frames = {5,1,6,3}; --4 frames custom = function(self) -- self.attackbox.width = 20 * gameLogicMult -- self.attackbox.relativeX = -18 * gameLogicMult self:executeSound('heavyWhiff', {"sfx", "whiff"}) end }; { type = "active"; frames = {7,2}; --5,2,6,2,7,2,8,2 -- 2 frames custom = function(self) end }; { frames = {7,6}; --5,2,6,2,7,2,8,2 --6frames custom = function(self) -- self.attackbox.width = self.attackbox.width - 20 -- self.attackbox.relativeX = self.attackbox.relativeX + 20 end }; { type="recovery"; frames = {8,4,9,5}; --4,4 --18 frames custom = function(self) -- self:executeProjectile("orbInert") -- self:executeEffect("orb") end }; { type="recovery"; frames = {10,3,11,3,12,3}; --4,4 --18 frames custom = function(self) self:executeEffect("whiffEffect") end }; }; downForwardA = { attackbox = {throw="threeAThrow",width=16 * gameLogicMult, height=12 * gameLogicMult, relativeY = 11 * gameLogicMult, priority = 5, external = true}; { type = "startup"; frames = {1,2,2,6}; --1,2,2,3 custom = function(self) self:executeSound('antlerCharge', {"sfx", "whiff"}) -- self.height = 8 * gameLogicMult -- self.y = yFloor - self.height end }; { frames = {3,3,4,2}; --5,2,6,2,7,2,8,2 custom = function(self) self:changeSpeed(450) end }; { type = "active"; frames = {5,10}; --5,2,6,2,7,2,8,2 custom = function(self) -- self.height = standHeight -- self.y = yFloor - self.height end }; -- { -- frames = {5,10}; --5,2,6,2,7,2,8,2 -- custom = function(self) -- -- self.height = standHeight -- -- self.y = yFloor - self.height -- end -- }; { type = "recovery"; frames = {6,2,7,1,8,2}; --5,2,6,2,7,2,8,2 --16 custom = function(self) self:executeSound('heavyWhiff', {"sfx", "whiff"}) self:changeSpeed(0) end }; { type = "recovery"; frames = {9,3,10,4,11,4}; custom = function(self) self:executeEffect("downForwardAWhiffEffect") end }; }; downForwardB = { attackbox = {throw="threeBThrow",width=16 * gameLogicMult, height=12 * gameLogicMult, relativeY = 11 * gameLogicMult, priority = 5, external = true}; { spriteName = "downBackA"; type = "active"; frames = {5,2}; --2 custom = function(self) end }; { frames = {6,4}; --4 custom = function(self) end }; { type="recovery"; frames = {7,4,8,4,9,10}; --26 custom = function(self) -- self:executeProjectile("orbInert") -- self:executeEffect("orb") end }; { type="recovery"; frames = {10,4,11,4,12,4}; --4,4 --18 frames custom = function(self) self:executeEffect("whiffEffect") end }; }; downBackB = { startWith = "crouch"; attackbox = {enemyDragData={frame=31,x=10,y=-25}, external=true, forceForward = true, pushUp=300 * gameLogicMult, pushback=160 * gameLogicMult, hitStun=15, width=30, height=26 * gameLogicMult, dmg=1, priority=5, relativeY = -10 * gameLogicMult, relativeX = -5 * gameLogicMult}; attackType = attackTypes.medium; -- endWith = function(self) -- -- self.image = self.jumpForwardSheet -- -- self:setAnimation(self.jumpForwardSprite, {12, 1}) -- -- self:endAttack() -- -- self.canJump = false -- -- self.xOffset = -11 * gameLogicMult -- -- self.yOffset = 0 -- -- self.width = 57 -- -- self.height = 44 * gameLogicMult -- -- self.standingHeight = 44 * gameLogicMult -- -- self.gravity = defaultGravity -- end; { frames = {1,1,1,1,2,1,2,1}; custom = function(self) self.special = true self.height = standHeight self.y = self.y - 16 self.invulnerability = true self:setDust(100, false, true) self:executeSound("jump", "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 }; { type = "active"; frames = {3,3}; custom = function(self) self:changeSpeed(275, 4) self.ySpeed = self.jumpSpeed + (45 * gameLogicMult) --113 self.y = self.y - 30 self.gravity = 2000 --1500 end }; { frames = {3,6}; custom = function(self) end }; { frames = {3,3}; custom = function(self) end }; { type="recovery"; frames = {3,3}; custom = function(self) self:changeWidth(19) if self.enemy.state == "drag" then self:executeThrow("oneBThrow", true) end self.attackbox.exists = false end }; { frames = {3,1}; custom = function(self) end }; { type="recovery"; spriteName = "jumpUp"; frames = {7,6}; custom = function(self) self.invulnerability = false self.throwInvuln = true self:executeEffect ("downBackBWhiffEffect") -- self.state = "DP" end }; { spriteName = "jumpUp"; frames = {8,4,9,4,10,2}; --8,3,9,3,10,19 custom = function(self) self.height = standHeight end }; { spriteName = "jumpUp"; frames = {10,4}; custom = function(self) self.xSpeed = 0 end }; { spriteName = "jumpUp"; frames = {11,3,12,3,13,3,14,3}; custom = function(self) self.throwInvuln = false end } }; dashForward = { endWith = function(self) self:executeAnimation("crawl") self.runCancel = true self.attacking = false self.throwInvuln = true end; { spriteName = "crawl"; frames = {1,1,2,3}; --1,3 custom = function(self) self.yOffset = -86 + 11 -- self:startTrails("dash") self.attacking = false -- self:changeWidth(30) self:changeHeight(23) self:changeLocation(10) -- 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 }; }; neutralAB = { frameData = Template:Type="recovery", frameCount=11; { frames = {1,3,2,2,3,2,4,2,3,2,4,2,5,3,6,2,7,3}; custom = function(self) self.invulnerability = true self.ignoreInvulnOutline = true self.requestSS = true self.meterTimer = 300 self:executeSound('tenchiSuperRumble', {"sfx", "turd"}) end }; { frames = {8,3,9,3}; custom = function(self) self:executeEffect("neutralABEffect") TEsound.stop("turd") self:executeSound('tenchiSuperRelease', {"sfx"}) end }; { frames = {10,4,11,4}; custom = function(self) self:startTrails("super") self:killEffectViaTag("shield") self.armorValue = 1 self:emptyMeter() self:executeEffect("shieldFront") self:executeEffect("shieldRear") end }; { frames = {12,4,13,4}; custom = function(self) self:superStopContinue() self.invulnerability = false self.ignoreInvulnOutline = false self.meterTimer = 300 end }; { frames = {13,3}; custom = function(self) -- self:superStopContinue() end }; }; dashBack = { endWith = function(self) self:executeAnimation("crawl") self.runCancel = true self.attacking = false self.throwInvuln = true end; { spriteName = "crawl"; frames = {1,1,2,3}; --1,3 custom = function(self) self.yOffset = -86 + 11 -- self:startTrails("dash") self.attacking = false -- self:changeWidth(30) self:changeHeight(23) self:changeLocation(-10) -- 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 }; }; dashToStand = { { spriteName = "crawl"; frames = {2,3,1,2,13,2}; --1,3 custom = function(self) self:changeLocation(12) self.throwInvuln = false end }; }; threeAThrow = { enemyFrames = { {7,42,32}, --f1 {8,42,24}, --f2 {8,40,9}, --f3 {31,32,-8}, --f4 {32,15,-19}, --f5 {32,-2,-17}, --f6 {32,-8,-15}, --f7 {32,21,-22}, --f8 {32,48,31}, --f9 {33,51,50}, --f10 {34,50,48}, --f11 {34,50,46}, --f12 {34,50, 49}, --f13 {33,51,50}, --f14 {33,51,50}, --f15 {0,0,0}, --f16 -- {12,52,36}, --f16 {0,0,0}, --f17 {0,0,0}, --f18 }; { frames = {1,1,1,1,1,1,2,1,2,1,2,1}; -- should look like it's still carrying over the forward momentum from the startup custom = function(self) self:changeSpeed(450,20) self:changeWidth(30 * gameLogicMult) end; }; { frames = {3,1,3,1,3,1,4,1,4,1,4,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,7,1,7,1,8,1,8,1,8,1}; -- This part is the hop custom = function(self) self.ySpeed = -1500 self.gravity = 9500 self:changeWidth(30 * gameLogicMult) end }; { frames = {9,3}; -- This is the frame where you're stuck to the ground again custom = function(self) end }; { frames = {10,2,11,2,12,2,13,2,14,2,15,2}; -- This is where the first hit happens, with a knockdown effect, etc. custom = function(self) self.combo = self.combo + 1 self.enemy:changeHealth(1) -- self.ignoreFloor = false -- self.enemy.ignoreFloor = false cameraJitterY = 4 ignoreCameraJitterX = true -- self:executeSound(self.hitSpecialSFX, {"sfx"}) self:throwHitstop(12, 0, 999) self.enemy:executeKnockdownEffect(40) self:executeSound(self.hitSpecialSFX, "sfx") self:executeSound("knockdown", "sfx") end }; { frames = {16,3,17,3,18,19}; -- This is where the second hit happens, the code here is just whatever was already there custom = function(self) self.combo = self.combo + 1 self.enemy:changeHealth(1) self:throwHitstop(8, 70 - (28*gameLogicMult), 44) cameraJitterX = 2 -- self.enemy:changeLocation(30) self.enemy:changeSpeed(300) self.enemy.ySpeed = -250 self.enemy.y = self.enemy.y - 100 self.enemy.ignoreGravity = false self.enemy:knockFall() self.ignoreFloor = false self.enemy.ignoreFloor = false ignoreCameraJitterX = false self:executeSound(self.hitSpecialSFX, "sfx") self:changeWidth(19) end }; { frames = {18,1}; -- This is where the second hit happens, the code here is just whatever was already there custom = function(self) self:executeEffect("threeAThrowEffect") end }; }; oneAThrow = { enemyFrames = { {7,42,32}, --f1 {8,42,24}, --f2 {8,40,9}, --f3 {31,32,-8}, --f4 {32,15,-19}, --f5 {32,-2,-17}, --f6 {32,-8,-15}, --f7 {32,21,-22}, --f8 {32,48,31}, --f9 {33,51,50}, --f10 {34,50,48}, --f11 {34,50,46}, --f12 {34,50, 49}, --f13 {33,51,50}, --f14 {33,51,50}, --f15 {0,0,0}, --f16 -- {12,52,36}, --f16 {0,0,0}, --f17 {0,0,0}, --f18 }; { spriteName = "threeAThrow"; frames = {1,1,1,1,1,1,2,1,2,1,2,1}; -- should look like it's still carrying over the forward momentum from the startup custom = function(self) self:changeWidth(30 * gameLogicMult) end; }; { frames = {3,1,3,1,3,1,4,1,4,1,4,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,7,1,7,1,8,1,8,1,8,1}; -- This part is the hop custom = function(self) self.ySpeed = -1500 self.gravity = 9500 self:changeWidth(30 * gameLogicMult) end }; { frames = {9,3}; -- This is the frame where you're stuck to the ground again custom = function(self) end }; { frames = {10,2,11,2,12,2,13,2,14,2,15,2}; -- This is where the first hit happens, with a knockdown effect, etc. custom = function(self) self.combo = self.combo + 1 self.enemy:changeHealth(1) -- self.ignoreFloor = false -- self.enemy.ignoreFloor = false cameraJitterY = 4 ignoreCameraJitterX = true -- self:executeSound(self.hitSpecialSFX, {"sfx"}) self:throwHitstop(12, 0, 999) self.enemy:executeKnockdownEffect(40) self:executeSound(self.hitSpecialSFX, "sfx") self:executeSound("knockdown", "sfx") end }; { frames = {16,3,17,3,18,19}; -- This is where the second hit happens, the code here is just whatever was already there custom = function(self) self.combo = self.combo + 1 self.enemy:changeHealth(1) self:throwHitstop(8, 70 - (28*gameLogicMult), 44) cameraJitterX = 2 -- self.enemy:changeLocation(30) self.enemy:changeSpeed(300) self.enemy.ySpeed = -250 self.enemy.y = self.enemy.y - 100 self.enemy.ignoreGravity = false self.enemy:knockFall() self.ignoreFloor = false self.enemy.ignoreFloor = false ignoreCameraJitterX = false self:executeSound(self.hitSpecialSFX, "sfx") self:changeWidth(19) end }; { frames = {18,1}; -- This is where the second hit happens, the code here is just whatever was already there custom = function(self) self:executeEffect("threeAThrowEffect") end }; }; threeBThrow = { enemyFrames = { {6,33,37}, --f1 {8,34,17}, --f2 {8,34,-12}, --f3 {31,43,-18}, --f4 {32,42,-25}, --f5 {32,42,-11}, --f6 {32,42,52}, --f7 {34,38,53}, --f8 {0,0,0}, --f9 {0,0,0}, --f10 {0,0,0}, --f11 {0,0,0}, --f12 {31,37,-15}, --f13 {32,41,-27}, --f14 {32,41,-21}, --f15 {32,42,52}, --f16 {34,38,53}, --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 {2,32,-9}, --f24 {4,8,-9}, --f25 {38,-24,-4}, --f26 {38,-25,0}, --f27 {38,-23,-3}, --f28 {31,35,-4}, --f29 {32,57,49}, --f30 {34,53,53}, --f31 {32,52,27}, --f32 {4,34,-1}, --f33 {4,8,-9}, --f34 {38,-23,-5}, --f35 {38,-28,-2}, --f36 {38,-24,-3}, --f37 {2,45,-7}, --f38 {0,0,0}, --f39 {0,0,0}, --f40 {0,0,0}, --f41 {0,0,0}, --f42 }; { frames = {1,3,2,3,3,3,4,3,5,3,6,2,7,2}; custom = function(self) self:changeWidth(30 * gameLogicMult) end }; { frames = {8,1}; --first hitstop where they're slammed into the ground custom = function(self) self.combo = self.combo + 1 self.enemy:changeHealth(1) cameraJitterY = 3 ignoreCameraJitterX = true self:throwHitstop(12, 50, 70) self.enemy:executeKnockdownEffect(40) self:executeSound(self.hitSpecialSFX, "sfx") self:executeSound("knockdown", "sfx") self:changeWidth(30 * gameLogicMult) end }; { frames = {9,3,10,3,11,2,12,2}; custom = function(self) self.enemy:knockFall() self.enemy.ySpeed = -700 self.enemy.y = self.enemy.y - 100 self.enemy.ignoreGravity = false self.ignoreComboEnd = true self.enemy:changeSpeed(-100) self.enemy.ignoreInvulnOutline = true self:changeWidth(30 * gameLogicMult) self:executeEffect("threeBThrowEffect") end }; --during this they're bouncing up in their knockdown { frames = {13,3,14,3,15,2,16,2}; custom = function(self) self.enemy:enterThrow() self.enemy.ySpeed = 0 self.enemy.ignoreGravity = true end }; --this part is just normal stuff { frames = {17,1}; --second hitstop where they're slammed into the ground custom = function(self) self.combo = self.combo + 1 self.enemy:changeHealth(1) cameraJitterY = 3 ignoreCameraJitterX = true self:throwHitstop(12, -20, 70) self.enemy:executeKnockdownEffect(40) self:executeSound(self.hitSpecialSFX, "sfx") self:executeSound("knockdown", "sfx") self.ignoreComboEnd = false end }; { frames = {18,2,19,2,20,2,21,2}; custom = function(self) self.enemy:knockFall() self.enemy.ySpeed = -800 self.enemy.y = self.enemy.y - 100 self.enemy.ignoreGravity = false self.ignoreComboEnd = true self.enemy:changeSpeed(-200) self.enemy.ignoreInvulnOutline = true self:executeEffect("threeBThrowEffect2") end }; --during this they're bouncing up in their knockdown { frames = {22,2,23,2}; custom = function(self) self.ySpeed = -1000 self:changeSpeed(500, 30) end }; -- This is where Sub 11 is leaping up in pursuit of the other player who is still in their knockdown { frames = {24,2,25,2,26,2,27,2}; custom = function(self) self.enemy:enterThrow() self.enemy.ySpeed = 0 self.enemy.ignoreGravity = true end }; --Other player has been snatched again and is reattached doing normal get thrown stuff, sub 11 is launching up into the air with them, if you need to chill on a frame to fill time use frame 27 { frames = {28,2,29,2,30,2}; custom = function(self) self.ySpeed = 2000 end }; --This is what should probably be the downward part of the arc { frames = {31,1}; --third hitstop where they're slammed into the ground, everyone is back on the floor custom = function(self) self.combo = self.combo + 1 self.enemy:changeHealth(1) cameraJitterY = 4 ignoreCameraJitterX = true self:throwHitstop(13, 0, 70) self.enemy:executeKnockdownEffect(40) self:executeSound(self.hitSpecialSFX, "sfx") self:executeSound("knockdown", "sfx") end }; {frames = {32,3,33,3,34,3,35,3,36,3,37,2,38,2}}; --this part is just normal stuff { frames = {39,2,40,12}; --for the last hit the enemy is just tossed custom = function(self) self.combo = self.combo + 1 self.enemy:changeHealth(1) self:executeSound('grab', "sfx") self.enemy:changeSpeed(550) self.enemy.ySpeed = -200 self.enemy.ignoreGravity = false self.ignoreCollision = false self.enemy:knockFall() self.ignoreFloor = false self.enemy.ignoreFloor = false self.ignoreComboEnd = false self:changeWidth(19) end }; { frames = {41,3,42,3}; --for the last hit the enemy is just tossed custom = function(self) self:executeEffect("threeBThrowEffect3") end }; }; oneBThrow = { enemyFrames = { {31,18,-10}, --f1 {10,-6,-3}, --f2 {10,-18,-8}, --f3 {10,-23,-15}, --f4 {10,0,6}, --f5 {0,0,0}, --f6 {0,0,0}, --f7 {0,0,0}, --f8 {0,0,0}, --f9 {0,0,0}, --f10 {0,0,0}, --f11 {35,44,32}, --f12{35,44,32} {36,42,34}, --f13 {37,43,35}, --f14 {13,37,19}, --f15 {10,35,11}, --f16 {8,27,3}, --f17 {4,8,-13}, --f18 {31,-11,-7}, --f19 {10,4,-1}, --f20 {13,26,2}, --f21 {0,0,0}, --f22 }; { frames = {1,1}; --This first part is where the opponent is drawing overtop of Sub11 and then an effect is drawing overtop of the opponent custom = function(self) -- Frame 1 is the frame that you rise up in, probably doesn't actually need to be here in this part but w/e self.ignoreGravity = true; self:changeSpeed(200, 6) self:changeWidth(30 * gameLogicMult) end; }; { frames = {1,2,2,3,3,3,4,4,6}; custom = function(self) -- Frame 1 is the frame that you rise up in, probably doesn't actually need to be here in this part but w/e self:changeWidth(30 * gameLogicMult) end; }; { frames = {6,3,7,12,8,3,9,3,10,5}; -- This is where you throw the other player and they need to start doing knockdown stuff custom = function(self) -- (falling down in the last frame from the actual "knockdown" anim table like they just got juggled, and then doing the impact/ground bounce etc.) self.combo = self.combo + 1 self.enemy:changeHealth(1) -- And I assume the hitstop and damage should happen when they hit the floor. Sorry this is probably a pain in the ass but I don't think there's a less dumb way to do it. self:changeWidth(30 * gameLogicMult) -- self:throwHitstop(8, 38, 34) -- cameraJitterX = 2 self.ignoreComboEnd = true self.ignoreFloor = false self.enemy.ignoreFloor = false self.enemy:changeLocation(100) self.enemy:changeSpeed(150) self.enemy.y = self.y + 30 self.enemy.ySpeed = 400 self.enemy.ignoreGravity = false self.enemy:knockFall() self.enemy.ignoreCollision = true self.ySpeed = -500 self.ignoreGravity = false self:executeSound("grab", "sfx") end; }; { frames = {11,3}; --This is where you accelerate straight down real fast. You should probably have started the downward part of your arc already a little before getting here. custom = function(self) self.ignoreGravity = false self.ySpeed = 2750 end; }; { frames = {12,3}; --this is where Sub 11 is back to the floor and where it goes back to doing regular throw enemy frame stuff, with them even just drawing behind and everything being normal -- A second hit happens approximately here but I'm not entirely sure whether frame 12 or frame 13 will look better for the hitstop custom = function(self) self.combo = self.combo + 1 self.enemy:changeHealth(1) self.enemy:enterThrow() -- self.enemy:changeSpeed(0) -- self.enemy:setAnimation(self.enemy.sprites.getThrown, getThrownFrames, nil, true) -- self.enemy.animation:pause() -- self.enemy.move = "getThrown" -- self.enemy.state = "getThrown" -- self.enemy.ignoreFloor = true -- self.enemy.ySpeed = 0 -- self.enemy.ignoreGravity = true -- self.enemy.noInput = true -- self.enemy.gravity = defaultGravity -- self.enemy.width = 19 * gameLogicMult -- self.enemy.height = standHeight -- self.enemy.attackbox.exists = false -- self.enemy.flip = self.flip -- self.enemy.invulnerability = true -- self.enemy.xOffset = self.xOffset -- self.enemy.yOffset = self.yOffset self:throwHitstop(8, 0, 60) self.ignoreComboEnd = false self:executeSound(self.hitSpecialSFX, "sfx") self:executeSound("knockdown", "sfx") end }; { frames = {13,3,14,6}; --Just regular shit happening }; { frames = {15,3,16,3,17,12,18,2,19,2,20,2,21,2}; --Just regular shit happening custom = function(self) self:executeEffect("oneBThrowEffect") end }; { frames = {22,19}; --This is where Sub 11 has finally tossed the other player and they should take their third chunk of damage and go into their knockdown custom = function(self) self.combo = self.combo + 1 self.enemy:changeHealth(1) self.enemy.ignoreGravity = false self.enemy:knockFall() self.ignoreFloor = false self.enemy.ignoreFloor = false self.enemy:changeLocation(30) self.enemy:changeSpeed(-500) self:changeWidth(19) self.enemy.ignoreCollision = false self.enemy.ySpeed = -400 -- -250 -- self.enemy.y = self.enemy.y self:executeSound("grab", "sfx") end }; { frames = {22,1}; --This is where Sub 11 has finally tossed the other player and they should take their third chunk of damage and go into their knockdown custom = function(self) self:executeEffect("oneBThrowEffect2") end }; }; }; animations = { crawlIdle = { spriteName = "crawl"; frames = {3,4,4,5,5,4,6,5,7,4,8,5,9,4,10,5,11,4,12,5}; custom = function(self) self.yOffset = -86 + 11 self.xOffset = self.xOffset + 6 end }; idle = { frames = {1,6,2,6,3,6,4,6,5,2,6,6,7,6,8,6,9,6,10,6,11,6,12,6,13,6,14,2,15,2,16,3,17,3,18,2,19,6,20,6,21,6,22,6}; }; turn = { frames = {1,4}; }; crouch = { frames = {1,6,2,6,3,12,4,6,5,6,6,6,7,12,8,6}; }; crouchTurn = { frames = {1,4}; }; walkForward = { 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,5,22,1,23,1,24,1,25,1,26,1,27,1,28,1,29,1,30,1,31,1,32,1,33,1,34,1,35,1,36,1,37,1,38,1,39,1,40,1,41,1,42,1,43,1,44,1,45,5,46,1,47,1,48,1}; }; walkBack = { frames = {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,5,22,1,23,1,24,1,25,1,26,1,27,1,28,1,29,1,30,1,31,1,32,1,33,1,34,1,35,1,36,1,37,1,38,1,39,1,40,1,41,1,42,1,43,1,44,1,45,5,46,1,47,1,48,1,1,1}; }; jumpUp = { frames={2,7,3,3,4,2,5,2,6,6,15,4,7,2,8,2,9,3,10,7}; endWith = "nothing"; }; jumpForward = { spriteName = "jumpUp"; frames={2,7,3,3,4,2,5,2,6,6,15,4,7,2,8,2,9,3,10,7}; endWith = "nothing"; }; jumpBack = { spriteName = "jumpUp"; frames={2,7,3,3,4,2,5,2,6,6,15,4,7,2,8,2,9,3,10,7}; endWith = "nothing"; }; land = { spriteName = "jumpUp"; frames = {11,3,12,3,13,3,14,3}; }; crouchTransition = { frames={1,2,2,1}; }; crawlForward = { frames = {1,2,2,3,3,2,4,3,5,2,6,3,7,2,8,3}; custom = function(self) self.yOffset = -86 + 11 self.xOffset = self.xOffset + 6 end }; crawlBack = { frames = {1,3,2,4,3,3,4,4,5,3,6,4,7,3,8,4}; custom = function(self) self.yOffset = -86 + 11 self.xOffset = self.xOffset + 6 end }; standTransition = { spriteName = "crouchTransition"; frames={2,2,1,1}; custom = function(self) self.yOffset = 6 end }; preBlock={ spriteName="blockStand"; endWith = "nothing"; frames = {1,1,2,1,3,1}; }; preBlockReverse={ spriteName="blockStand"; frames = {2,1,1,2}; }; preBlockCrouch={ endWith = "nothing"; spriteName="blockCrouch"; frames={1,2,2,1}; }; preBlockCrouchReverse={ spriteName="blockCrouch"; frames={1,2}; }; 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 }; }; 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,2,9,2,10,2,11,2,12,5} }; stopGroundBounce = { spriteName = "knockdown"; frames = {13,2,14,10} }; wakeup = { spriteName = "knockdown"; frames = {15,3,16,3,17,4} }; death = { spriteName = "knockdown"; endWith = "nothing"; frames = {14,1} }; airHurt = { endWith = "nothing"; { frames = {1,1,2,3,3,4}; }; { spriteName = "jumpUp"; frames = {6,6,15,4,7,2,8,2,9,3,10,7}; }; }; yay = { frames = {1,16,2,4,3,4,4,4,5,4,6,4,7,12,6,3,8,2,9,2,10,2,11,2,12,3,13,3,14,3,15,3}; endWith = function(self) self:executeAnimation("yayLoop") end }; yayLoop = { spriteName = "yay"; frames = {16,3,17,3,18,3,19,3}; }; win = { spriteName = "yay"; { frames = {2,4,3,4,4,4,5,4,6,4,7,12,6,3,8,2,9,2}; custom = function(self) self.runCancel = false self:changeWidth(19) self.height = standHeight end }; { frames = {10,2,11,2,12,3,13,3,14,3,15,3,16,3,17,3,18,3,19,3,16,3,17,3,18,3,19,3,16,3,17,3,18,3,19,3,16,3,17,3,18,3,19,3,16,3,17,3,18,3,19,3,16,3,17,3,18,3,19,3,16,3,17,3,18,3,19,3,16,3,17,3,18,3,19,3,16,3,17,3,18,3,19,3,16,3,17,3,18,3,19,3,16,3,17,3,18,3,19,3,16,3,17,3,18,3,19,3}; custom = function(self) self:executeSound("tenchiSuperRelease", "sfx") end }; }; boo = { frames = {1,16,2,3,3,3,4,5,5,6,6,3,7,2,8,2,9,2,10,16}; endWith = function(self) self:executeAnimation("booLoop") end }; booLoop = { spriteName = "boo"; frames = {11,2,12,5,13,2,14,2,15,2,16,2,17,16,18,2,19,5,20,2,21,2,22,2,23,2,24,16}; }; }; nameplate = { endWith = "nothing"; { frames = {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,33,1,34,1,35,1,36,1}; custom = function(self, host) if host.player1 == true then host:executeSound("nameplate", {"sfx", "nameplate1"}, -1) else host:executeSound("nameplate", {"sfx", "nameplate2"}, 1) end end; }; { spriteName = "nameplate2"; 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,33,1,34,1,35,1,36,1}; }; { spriteName = "nameplate3"; frames = {1,1,2,1,3,1,4,1,5,6,6,6,7,6,8,6,9,6,10,6,11,6,12,6,13,6,14,6,15,6,16,3,17,3,18,3,19,24,20,24,19,24,20,24,19,24,20,24,19,24,20,24,19,24,20,24,19,24,20,24,19,24,20,24,19,24,20,24,19,24,20,24,19,24,20,24,19,24,20,24,19,24,20,24,19,24,20,24,19,24,20,24,19,24,20,24,19,24,20,24,19,24,20,24,19,24,20,24,19,24,20,24,19,24,20,24,19,24,20,24,19,24,20,24}; }; }; throw = { enemyFrames = { {5,17,33}, --f1 {7,18,33}, --f2 {8,21,29}, --f3 {11,17,29}, --f4 {11,23,29}, --f5 {11,19,29}, --f6 {11,21,29}, --f7 {8,21,29}, --f8 {11,23,7}, --f9 {31,26,-5}, --f10 {32,27,-20}, --f11 {32,27,0}, --f12 {32,27,37}, --f13 {33,25,51}, --f14 {24,25,49}, --f15 {0,0,0}, --f16 {0,0,0}, --f17 {0,0,0}, --f18 {0,0,0}, --f19 {8,22,24}, --f20 {11,21,5}, --f21 {32,3,-22}, --f22 {32,-25,-22}, --f23 {0,0,0}, --f24 {0,0,0}, --f25 {0,0,0}, --f26 {0,0,0}, --f27 {0,0,0}, --f28 }; start = { {frames = {1,3,2,3,3,3}}; --5,2,6,4 --1,4,2,4,3,4,4,2,5,1,6,1 { frames = {4,1,5,2,6,2,7,2}; --8,4,9,4,10,4,11,4 custom = function(self) self:throwHitstop(6, 44, 34) cameraJitterX = 2 self.combo = self.combo + 1 self.enemy:changeHealth(1) self:executeSound("lowAttack", "sfx") end }; }; forward = { { frames = {8,3,9,2,10,3,11,4,12,2,13,2,14,2}; --11,4,13,2,14,2,15,2 }; { frames = {14,1}; custom = function(self) self.combo = self.combo + 1 self.enemy:changeHealth(1) self:throwHitstop(5, 58, 70) cameraJitterX = 2 self:executeSound(self.hitSpecialSFX, "sfx") self:executeSound("knockdown", "sfx") end }; { frames = {16,3,17,3,18,3}; custom = function(self) self.enemy:changeLocation(30) self.enemy:changeSpeed(240) --300 self.enemy.ySpeed = -260 -- -250 self.enemy.ignoreGravity = false self.enemy.y = self.enemy.y - 100 self.ignoreFloor = false self.enemy.ignoreFloor = false self.enemy:knockFall() self:executeEffect("throwEffect") end }; }; backward = { { frames = {8,3,20,2,21,1,22,2,23,3}; --21,4,22,4,23,4 data = {dmg = 1, changeLocation = 10, changeSpeed = 500, changeYSpeed = -600}; }; { frames = {24,4}; custom = function(self) self.combo = self.combo + 1 self.enemy:changeHealth(1) self:executeSound('grab', "sfx") self.enemy:changeSpeed(-240) self.enemy.ySpeed = -320 self.enemy.y = self.enemy.y - 16 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 = {25,4,26,4,27,4,28,4}; custom = function(self) self:executeEffect("backThrowEffect") end }; { custom = function(self) self:changeLocation(-4) end }; }; }; effects = { hitEffect = { frames = {1,1,2,1,3,2,4,1,5,2}; --1,1,2,1,3,2,4,3,5,2 }; standAEffect = { frames = {2,2,3,2,4,2,5,2,6,2}; --1,1,2,1,3,2,4,3,5,2 followPlayer = false; relativeX = 5 *gameLogicMult; relativeY = 9 *gameLogicMult; }; standBEffect = { frames = {2,2,3,2,4,2,5,2,6,2}; --1,1,2,1,3,2,4,3,5,2 followPlayer = false; relativeX = 53 *gameLogicMult; relativeY = 4 *gameLogicMult; }; lowAEffect = { frames = {2,2,3,2,4,2,5,2,6,2}; --1,1,2,1,3,2,4,3,5,2 followPlayer = false; relativeX = 8 *gameLogicMult; relativeY = 18 *gameLogicMult; }; lowBEffect = { frames = {2,2,3,2,4,2,5,2,6,2}; --1,1,2,1,3,2,4,3,5,2 followPlayer = false; relativeX = 26 *gameLogicMult; relativeY = -2 *gameLogicMult; }; lowBEffect2 = { layer = "bottom"; frames = {2,2,3,2,4,2,5,2,6,2}; --1,1,2,1,3,2,4,3,5,2 followPlayer = false; relativeX = 23 *gameLogicMult; relativeY = -4 *gameLogicMult; }; jumpAEffect = { frames = {2,2,3,2,4,2,5,2,6,2}; --1,1,2,1,3,2,4,3,5,2 followPlayer = false; relativeX = 13 *gameLogicMult; relativeY = 15 *gameLogicMult; }; jumpBEffect = { frames = {2,2,3,2,4,2,5,2,6,2}; --1,1,2,1,3,2,4,3,5,2 followPlayer = false; relativeX = -14 *gameLogicMult; relativeY = 5 *gameLogicMult; }; jumpBEffect2 = { layer = "bottom"; frames = {2,2,3,2,4,2,5,2,6,2}; --1,1,2,1,3,2,4,3,5,2 followPlayer = false; relativeX = -11 *gameLogicMult; relativeY = 1 *gameLogicMult; }; throwEffect = { frames = {2,2,3,2,4,2,5,2,6,2}; --1,1,2,1,3,2,4,3,5,2 followPlayer = false; relativeX = 35 *gameLogicMult; relativeY = 22 *gameLogicMult; }; backThrowEffect = { frames = {2,2,3,2,4,2,5,2,6,2}; --1,1,2,1,3,2,4,3,5,2 followPlayer = false; relativeX = -2 *gameLogicMult; relativeY = -40 *gameLogicMult; }; whiffEffect = { frames = {2,2,3,2,4,2,5,2,6,2}; --1,1,2,1,3,2,4,3,5,2 followPlayer = false; relativeX = -22 *gameLogicMult; relativeY = -5 *gameLogicMult; }; downForwardAWhiffEffect = { frames = {2,2,3,2,4,2,5,2,6,2}; --1,1,2,1,3,2,4,3,5,2 followPlayer = false; relativeX = -6 *gameLogicMult; relativeY = -8 *gameLogicMult; }; downBackBWhiffEffect = { frames = {2,2,3,2,4,2,5,2,6,2}; --1,1,2,1,3,2,4,3,5,2 followPlayer = false; relativeX = 16 *gameLogicMult; relativeY = -16 *gameLogicMult; }; threeAThrowEffect = { spriteName = "lowBEffect"; frames = {1,1,2,2,3,2,4,2,5,2,6,2}; --1,1,2,1,3,2,4,3,5,2 followPlayer = false; relativeX = 19 *gameLogicMult; relativeY = -16 *gameLogicMult; }; oneBThrowEffect = { spriteName = "standAEffect"; frames = {2,2,3,2,4,2,5,2,6,2}; --1,1,2,1,3,2,4,3,5,2 followPlayer = false; relativeX = 32 *gameLogicMult; relativeY = 16 *gameLogicMult; }; oneBThrowEffect2 = { frames = {1,1,2,2,3,2,4,2,5,2,6,2}; --1,1,2,1,3,2,4,3,5,2 followPlayer = false; relativeX = 29 *gameLogicMult; relativeY = 12 *gameLogicMult; }; threeBThrowEffect = { spriteName = "throwEffect"; frames = {2,2,3,2,4,2,5,2,6,2}; --1,1,2,1,3,2,4,3,5,2 followPlayer = false; relativeX = 33 *gameLogicMult; relativeY = 14 *gameLogicMult; }; threeBThrowEffect2 = { frames = {2,2,3,2,4,2,5,2,6,2}; --1,1,2,1,3,2,4,3,5,2 followPlayer = false; relativeX = 35 *gameLogicMult; relativeY = 14 *gameLogicMult; }; threeBThrowEffect3 = { frames = {2,2,3,2,4,2,5,2,6,2}; --1,1,2,1,3,2,4,3,5,2 followPlayer = false; relativeX = 45 *gameLogicMult; relativeY = 11 *gameLogicMult; }; shieldFront = { frames = {1,4,-1,1,2,4,-1,1,3,4,-1,1,4,4,-1,1,5,4,-1,1,6,4,-1,1,7,4,-1,1,8,4,-1,1}; --1,4 2,3 3,3 4,3 5,3 6,4 7,4 8,4 followPlayer = true; relativeX = -32; relativeY = -14; endWith = "loop"; deathTag = "shield"; layer = "top"; onSpawn = function(self, host) if host.runCancel or host.move.name == "dashForward" or host.move.name == "dashBack" then self.relativeY = -60; self.relativeX = -12; elseif host.state == "getThrown" then if host.enemy.identity == "quinn" then self.relativeX = quinnX; self.relativeY = quinnY; elseif host.enemy.identity == "subject11" then if host.enemy.move.name == "threeBThrow" then self.relativeX = sub113BX; self.relativeY = sub113BY; elseif host.enemy.move.name == "oneBThrow" then self.relativeX = sub111BX; self.relativeY = sub111BY; elseif host.enemy.move.name == "threeAThrow" then self.relativeX = sub113AX; self.relativeY = sub113AY; elseif host.enemy.move.name == "oneAThrow" then self.relativeX = sub111AX; self.relativeY = sub111AY; else self.relativeX = subject11X; self.relativeY = subject11Y; end elseif host.enemy.identity == "hector" then self.relativeX = hectorX; self.relativeY = hectorY; else self.relativeX = -3; self.relativeY = -8; end else self.relativeY = -14; self.relativeX = -32; end if self.flip == 1 then if not self.relativeX then self.relativeX = 0 end self.x = host.x + self.relativeX else if not self.relativeX then self.relativeX = 0 end self.x = host.x + host.width - self.relativeX end if not self.ignoreFollowY then self.y = host.y + self.relativeY end if host.flip ~= self.flip then host:executeEffect("shieldFront") self.exists = false end; if self.flip == 1 then if not self.relativeX then self.relativeX = 0 end self.x = host.x + self.relativeX else if not self.relativeX then self.relativeX = 0 end self.x = host.x + host.width - self.relativeX end if not self.ignoreFollowY then self.y = host.y + self.relativeY end end; onUpdateLast = function(self, host) if host.runCancel or host.move.name == "dashForward" or host.move.name == "dashBack" then self.relativeY = -60; self.relativeX = -12; elseif host.state == "getThrown" then if host.enemy.identity == "quinn" then self.relativeX = quinnX; self.relativeY = quinnY; elseif host.enemy.identity == "subject11" then if host.enemy.move.name == "threeBThrow" then self.relativeX = sub113BX; self.relativeY = sub113BY; elseif host.enemy.move.name == "oneBThrow" then self.relativeX = sub111BX; self.relativeY = sub111BY; elseif host.enemy.move.name == "threeAThrow" then self.relativeX = sub113AX; self.relativeY = sub113AY; elseif host.enemy.move.name == "oneAThrow" then self.relativeX = sub111AX; self.relativeY = sub111AY; else self.relativeX = subject11X; self.relativeY = subject11Y; end elseif host.enemy.identity == "hector" then self.relativeX = hectorX; self.relativeY = hectorY; else self.relativeX = -3; self.relativeY = -8; end else self.relativeY = -14; self.relativeX = -32; end if self.flip == 1 then if not self.relativeX then self.relativeX = 0 end self.x = host.x + self.relativeX else if not self.relativeX then self.relativeX = 0 end self.x = host.x + host.width - self.relativeX end if not self.ignoreFollowY then self.y = host.y + self.relativeY end if host.flip ~= self.flip then host:executeEffect("shieldFront") self.exists = false end; if self.flip == 1 then if not self.relativeX then self.relativeX = 0 end self.x = host.x + self.relativeX else if not self.relativeX then self.relativeX = 0 end self.x = host.x + host.width - self.relativeX end if not self.ignoreFollowY then self.y = host.y + self.relativeY end end; }; shieldRear = { frames = {1,4,-1,1,2,4,-1,1,3,4,-1,1,4,4,-1,1,5,4,-1,1,6,4,-1,1,7,4,-1,1,8,4,-1,1}; followPlayer = true; relativeX = -32; relativeY = -14; endWith = "loop"; deathTag = "shield"; layer = "bottom"; onSpawn = function(self, host) if host.runCancel or host.move.name == "dashForward" or host.move.name == "dashBack" then self.relativeY = -60; self.relativeX = -12; elseif host.state == "getThrown" then if host.enemy.identity == "quinn" then self.relativeX = quinnX; self.relativeY = quinnY; elseif host.enemy.identity == "subject11" then if host.enemy.move.name == "threeBThrow" then self.relativeX = sub113BX; self.relativeY = sub113BY; elseif host.enemy.move.name == "oneBThrow" then self.relativeX = sub111BX; self.relativeY = sub111BY; elseif host.enemy.move.name == "threeAThrow" then self.relativeX = sub113AX; self.relativeY = sub113AY; elseif host.enemy.move.name == "oneAThrow" then self.relativeX = sub111AX; self.relativeY = sub111AY; else self.relativeX = subject11X; self.relativeY = subject11Y; end elseif host.enemy.identity == "hector" then self.relativeX = hectorX; self.relativeY = hectorY; else self.relativeX = -3; self.relativeY = -8; end else self.relativeY = -14; self.relativeX = -32; end if self.flip == 1 then if not self.relativeX then self.relativeX = 0 end self.x = host.x + self.relativeX else if not self.relativeX then self.relativeX = 0 end self.x = host.x + host.width - self.relativeX end if not self.ignoreFollowY then self.y = host.y + self.relativeY end if host.flip ~= self.flip then host:executeEffect("shieldFront") self.exists = false end; if self.flip == 1 then if not self.relativeX then self.relativeX = 0 end self.x = host.x + self.relativeX else if not self.relativeX then self.relativeX = 0 end self.x = host.x + host.width - self.relativeX end if not self.ignoreFollowY then self.y = host.y + self.relativeY end end; onUpdateLast = function(self, host) if host.runCancel or host.move.name == "dashForward" or host.move.name == "dashBack" then self.relativeY = -60; self.relativeX = -12; elseif host.state == "getThrown" then if host.enemy.identity == "quinn" then self.relativeX = quinnX; self.relativeY = quinnY; elseif host.enemy.identity == "subject11" then if host.enemy.move.name == "threeBThrow" then self.relativeX = sub113BX; self.relativeY = sub113BY; elseif host.enemy.move.name == "oneBThrow" then self.relativeX = sub111BX; self.relativeY = sub111BY; elseif host.enemy.move.name == "threeAThrow" then self.relativeX = sub113AX; self.relativeY = sub113AY; elseif host.enemy.move.name == "oneAThrow" then self.relativeX = sub111AX; self.relativeY = sub111AY; else self.relativeX = subject11X; self.relativeY = subject11Y; end else self.relativeX = -3; self.relativeY = -8; end else self.relativeY = -14; self.relativeX = -32; end if host.flip ~= self.flip then host:executeEffect("shieldFront") self.exists = false end; end; }; neutralABEffect = { frames = {1,3,2,2,3,1}; followPlayer = true; relativeX = -32; relativeY = -14; }; shieldDestroy = { frames = {1,2,2,3,3,5,4,2}; followPlayer = true; relativeX = -34; relativeY = -16; onSpawn = function(self, host) -- if host.runCancel or host.move.name == "dashForward" or host.move.name == "dashBack" then -- self.relativeY = -60 -2; -- else -- self.relativeY = -14 - 2; -- end if host.runCancel or host.move.name == "dashForward" or host.move.name == "dashBack" then self.relativeY = -60; self.relativeX = -12; elseif host.state == "getThrown" then if host.enemy.identity == "quinn" then self.relativeX = quinnX; self.relativeY = quinnY; elseif host.enemy.identity == "subject11" then if host.enemy.move.name == "threeBThrow" then self.relativeX = sub113BX; self.relativeY = sub113BY; elseif host.enemy.move.name == "oneBThrow" then self.relativeX = sub111BX; self.relativeY = sub111BY; elseif host.enemy.move.name == "threeAThrow" then self.relativeX = sub113AX; self.relativeY = sub113AY; elseif host.enemy.move.name == "oneAThrow" then self.relativeX = sub111AX; self.relativeY = sub111AY; else self.relativeX = subject11X; self.relativeY = subject11Y; end elseif host.enemy.identity == "hector" then self.relativeX = hectorX; self.relativeY = hectorY; else self.relativeX = -3; self.relativeY = -8; end else self.relativeY = -14; self.relativeX = -32; end if self.flip == 1 then if not self.relativeX then self.relativeX = 0 end self.x = host.x + self.relativeX else if not self.relativeX then self.relativeX = 0 end self.x = host.x + host.width - self.relativeX end if not self.ignoreFollowY then self.y = host.y + self.relativeY end end; onUpdate = function(self, host) -- if host.runCancel or host.move.name == "dashForward" or host.move.name == "dashBack" then -- self.relativeY = -60 -2; -- else -- self.relativeY = -14 - 2; -- end -- if host.flip ~= self.flip then -- host:executeEffect("shieldFront") -- self.exists = false -- end; if host.runCancel or host.move.name == "dashForward" or host.move.name == "dashBack" then self.relativeY = -60; self.relativeX = -12; elseif host.state == "getThrown" then if host.enemy.identity == "quinn" then self.relativeX = quinnX; self.relativeY = quinnY; elseif host.enemy.identity == "subject11" then if host.enemy.move.name == "threeBThrow" then self.relativeX = sub113BX; self.relativeY = sub113BY; elseif host.enemy.move.name == "oneBThrow" then self.relativeX = sub111BX; self.relativeY = sub111BY; elseif host.enemy.move.name == "threeAThrow" then self.relativeX = sub113AX; self.relativeY = sub113AY; elseif host.enemy.move.name == "oneAThrow" then self.relativeX = sub111AX; self.relativeY = sub111AY; else self.relativeX = subject11X; self.relativeY = subject11Y; end elseif host.enemy.identity == "hector" then self.relativeX = hectorX; self.relativeY = hectorY; else self.relativeX = -3; self.relativeY = -8; end else self.relativeY = -14; self.relativeX = -32; end if self.flip == 1 then if not self.relativeX then self.relativeX = 0 end self.x = host.x + self.relativeX else if not self.relativeX then self.relativeX = 0 end self.x = host.x + host.width - self.relativeX end if not self.ignoreFollowY then self.y = host.y + self.relativeY end end; }; }; colors = { default = { sprite = { {71,42,69}; --purple {212,209,227}; --skin {149,255,32}; --main hand green {0,133,0}; --hand dark outline {0,255,0}; --hand bright outline }; effects = { {149,255,32}; --main hand green {0,255,0}; --hand bright outline {94,255,94}; --neutralABEffect 2nd closest color to the outside {188,255,113}; --neutralABEffect color that touches the white {0,204,0}; --shieldRear darker color {118,204,26}; --shieldRear lighter color {229,255,199}; --shieldFront lightest {214,255,170}; -- 2nd lightest {191,255,121}; -- 3rd lightest }; hit = { {59,0,56}; --darkest {136,17,149}; {255,34,208}; --brightest }; meterIcon = { {0,255,0};--main {0,133,0};--shadow {191,255,121};--main lit }; --generalAssets dust = {171,43,200}; block = {171,43,200}; trailSuper = { {0,133,0}; --black {149,255,32}; --white {74,241,93}; --other }; 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 }; }; alt1 = { sprite = { {141,0,0}; --purple {237,208,238}; --skin {9,229,255}; --main hand green {0,111,133}; --hand dark outline {25,124,255}; --hand bright outline }; effects = { {9,229,255}; --main hand green {25,124,255}; --hand bright outline {94,198,255}; --neutralABEffect 2nd closest color to the outside {113,255,229}; --neutralABEffect color that touches the white {0,132,204}; --shieldRear darker color {26,204,173}; --shieldRear lighter color {199,255,244}; --shieldFront lightest {170,255,240}; -- 2nd lightest {121,255,231}; -- 3rd lightest }; hit = { {94,0,0}; --darkest {255,0,0}; {255,67,81}; --brightest }; meterIcon = { {25,124,255};--main {0,53,101};--shadow {132,197,246};--main lit }; dust = {255,64,64}; block = {255,0,0}; -- trailSuper = {0, 200, 255}; trailSuper = { {0,99,231}; --black {255,255,255}; --white {67,214,247}; --other }; trailDash = {255,0,0}; --255,0,0 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 = { {229,109,0}; --purple {236,233,198}; --skin {244,255,78}; --main hand green {122,107,0}; --hand dark outline {255,255,0}; --hand bright outline }; effects = { {244,255,78}; --main hand green {255,255,0}; --hand bright outline {244,255,105}; --neutralABEffect 2nd closest color to the outside {248,255,166}; --neutralABEffect color that touches the white {190,204,0}; --shieldRear darker color {188,212,60}; --shieldRear lighter color {255,255,255}; --shieldFront lightest {252,255,212}; -- 2nd lightest {248,255,141}; -- 3rd lightest }; hit = { {131,27,19}; --darkest {255,100,0}; {255,223,23}; --brightest }; meterIcon = { {255,255,0};--main {122,107,0};--shadow {248,255,141};--main lit }; --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 = { {201,207,0}; --purple {236,234,223}; --skin {255,154,182}; --main hand green {193,0,67}; --hand dark outline {255,0,106}; --hand bright outline }; effects = { {255,154,182}; --main hand green {255,0,106}; --hand bright outline {255,94,120}; --neutralABEffect 2nd closest color to the outside {255,143,172}; --neutralABEffect color that touches the white {204,0,71}; --shieldRear darker color {190,90,88}; --shieldRear lighter color {255,212,245}; --shieldFront lightest {255,202,190}; -- 2nd lightest {255,181,206}; -- 3rd lightest }; hit = { {88,89,0}; --darkest {217,202,0}; {255,255,0}; --brightest }; meterIcon = { {255,30,106};--main {149,0,52};--shadow {255,154,182};--main lit }; --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 }; }; alt4 = { sprite = { {54,82,0}; --purple {191,255,181}; --skin {214,124,228}; --main hand green {153,0,193}; --hand dark outline {153,85,193}; --hand bright outline }; effects = { {214,124,228}; --main hand green {153,85,193}; --hand bright outline {181,116,217}; --neutralABEffect 2nd closest color to the outside {208,138,255}; --neutralABEffect color that touches the white {105,73,130}; --shieldRear darker color {165,108,180}; --shieldRear lighter color {225,199,255}; --shieldFront lightest {211,170,255}; -- 2nd lightest {215,153,255}; -- 3rd lightest }; hit = { {34,53,0}; --darkest {45,149,17}; {0,255,0}; --brightest }; meterIcon = { {153,85,193};--main {92,0,116};--shadow {220,144,232};--main lit }; --generalAssets 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 = { sprite = { {48,80,106}; --purple {213,248,255}; --skin {255,94,112}; --main hand green {117,18,0}; --hand dark outline {255,0,0}; --hand bright outline }; effects = { {255,94,112}; --main hand green {255,0,0}; --hand bright outline {255,75,75}; --neutralABEffect 2nd closest color to the outside {255,114,114}; --neutralABEffect color that touches the white {204,21,0}; --shieldRear darker color {213,66,76}; --shieldRear lighter color {255,199,199}; --shieldFront lightest {255,181,180}; -- 2nd lightest {255,154,153}; -- 3rd lightest }; hit = { {0,35,39}; --darkest {34,123,255}; {0,216,255}; --brightest }; meterIcon = { {255,0,0};--main {113,11,0};--shadow {255,94,112};--main lit }; --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 = { {53,53,57}; --purple {202,202,208}; --skin {255,190,224}; --main hand green {191,87,199}; --hand dark outline {240,128,240}; --hand bright outline }; effects = { {255,190,224}; --main hand green {240,128,240}; --hand bright outline {246,157,255}; --neutralABEffect 2nd closest color to the outside {241,192,255}; --neutralABEffect color that touches the white {181,104,181}; --shieldRear darker color {191,139,188}; --shieldRear lighter color {255,251,255}; --shieldFront lightest {254,223,255}; -- 2nd lightest {250,216,255}; -- 3rd lightest }; hit = { {29,29,29}; --darkest {155,155,167}; {245,245,255}; --brightest }; meterIcon = { {240,128,240};--main {148,67,154};--shadow {241,192,255};--main lit }; --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 }; }; alt8 = { sprite = { {230,119,184}; --purple {233,215,211}; --skin {47,255,237}; --main hand green {45,114,127}; --hand dark outline {0,220,161}; --hand bright outline }; effects = { {47,255,237}; --main hand green {0,220,161}; --hand bright outline {92,250,197}; --neutralABEffect 2nd closest color to the outside {143,255,185}; --neutralABEffect color that touches the white {0,176,143}; --shieldRear darker color {85,204,186}; --shieldRear lighter color {219,255,254}; --shieldFront lightest {195,255,218}; -- 2nd lightest {161,255,179}; -- 3rd lightest }; hit = { {153,0,47}; --darkest {255,43,106}; {255,136,173}; --brightest }; meterIcon = { {0,220,161};--main {45,114,127};--shadow {143,255,185};--main lit }; --generalAssets 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 Subject11:initiate() self:_initiate() self.hitLightSFX = "lightAttack" self.hitHeavySFX = "heavyAttack" self.hitLowSFX = "lowAttack" self.hitSpecialSFX = "special" end function Subject11:hitFloor(maxY) --if self.state == "jump" or self.state == "jumpRight" or self.state == "jumpLeft" then if self.state == "DP" then self:setLandDust(56, false, true) self.throwInvuln = false self.state = "standing" self:setAnimation(self.sprites.jumpUp, {12,2,13,2,7,1,7,1,7,1,9,1,9,1}) --self.image = self.jumpUpSheet self.height = 44 * gameLogicMult self.y = yFloor - self.standingHeight self.standingHeight = 44 * gameLogicMult self.xSpeed = 0 self.gravity = defaultGravity self.ySpeed = self.gravity * frameTime self.animation.onLoop = function() self:executeAnimation("idle") self.noInput = false end else self:_hitFloor(maxY) end end function Subject11:normalBlock(attackInfo) self:changeMeter(1) print(self.meterAmount) -- if self.meterAmount < 5 then self.meterTimer = 300 -- else -- self.meterTimer = 0 -- end self:_normalBlock(attackInfo) end function Subject11:fullMeter() if self.meterAmount < 7 then self.meterAmount = 0 self:changeMeter(7) end end function Subject11: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, 7 do local d = i-1 self.meterChunkArray[i]:draw(self.sprites.meterChunk.sheet, (self.meterX + 122 - 14 + 32) - (d * 16), 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, 7 do local d = i-1 self.meterChunkArray[i]:draw(self.sprites.meterChunk.sheet, (self.meterX - 122 + 14 - 32) + (d * 16), self.meterY + 12 + self.meterJitter, 0, -gameLogicMult, gameLogicMult, 0, 0) end end love.graphics.setShader() end function Subject11:changeMeter(amount) self.meterAmount = self.meterAmount + amount if amount > 0 then if self.meterAmount == 7 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 >= 7 then self.meterJitter = 5 self.meterAmount = 7 else self.meterJitter = 2 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,7 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') end self.meterJitter = 5 end end function Subject11:meterTimeEnd() if self.meterAmount < 7 then self:changeMeter(-self.meterAmount) self.meterAmount = 0 end -- if self.armorValue == 1 then -- self.armorValue = 0 -- self:killEffectViaTag("shield") -- self:executeEffect("shieldDestroy") -- end end function Subject11:resetMeter() self.meterChunkArray = {} for i=1, 7 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:_resetMeter() end function Subject11:emptyMeter() self.neutralABRequirement = false self.meterAnimate = anim8.newAnimation(self.sprites.meter.grid(1,1), frameTime) self:cascadeMeter(7) end function Subject11:cascadeMeter(meterNum) if meterNum == 7 then for i=1, 7 do self.meterChunkArray[i] = anim8.newAnimation(self.sprites.meterChunk.grid(repeatNum(3,1)), frameTime) end end self.meterChunkArray[meterNum] = anim8.newAnimation(self.sprites.meterChunk.grid(repeatNum(4,2,1,2,4,2,1,2)), frameTime) self.meterChunkArray[meterNum].onLoop = function() self.meterChunkArray[meterNum] = anim8.newAnimation(self.sprites.meterChunk.grid(repeatNum(4,2,1,2)), frameTime, 'pauseAtEnd') if meterNum > 1 then self:cascadeMeter(meterNum - 1) else self.meterAmount = 0 self.continueMeterJitter = 0 self.meterJitter = 5 self:resetMeter() end end if meterNum == 3 then self.continueMeterJitter = 2 end end function Subject11:controlUpdate(left, right, up, down, buttonA, buttonB, tapA, tapB, specialA, specialB) if self.armorValue < 1 then self:stopTrails() end 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 self.runCancel = false self.noInput = false self:executeMove('dashToStand') -- 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 self:executeMove('dashToStand') self.repeatA = true self.lastFrameA = true self.runCancel = false -- if buttonB and not self.repeatB and self.neutralABRequirement then -- self.move.endWith = function() -- self.moves.dashToStand.endWith = nil -- self:endAttack() -- local oldrepeat = self.repeatA -- local oldrepeat2 = self.repeatB -- self:checkTurn() -- self:executeMove("neutralAB") -- self.repeatA = oldrepeat -- self.repeatB = oldrepeat2 -- end if down then self.move.endWith = function() self.moves.dashToStand.endWith = nil self:endAttack() local oldrepeat = self.repeatA self:checkTurn() if oldrepeat and ((right and self.flip == 1) or (left and self.flip == -1)) then self:executeMove("downForwardA") elseif oldrepeat and ((right and self.flip == -1) or (left and self.flip == 1)) then self:executeMove("downBackA") else self:executeMove("lowA") end self.ABTimer = 0 self.repeatA = oldrepeat end else self.move.endWith = function() self.moves.dashToStand.endWith = nil self:endAttack() local oldrepeat = self.repeatA self:checkTurn() self:executeMove("standA") self.ABTimer = 0 self.repeatA = oldrepeat end end return elseif buttonB and not self.repeatB then self:executeMove('dashToStand') self.repeatB = true self.lastFrameB = true self.runCancel = false if down then self.move.endWith = function() self.moves.dashToStand.endWith = nil self:endAttack() local oldrepeat = self.repeatB self:checkTurn() if oldrepeat and ((right and self.flip == 1) or (left and self.flip == -1)) then self:executeMove("downForwardB") elseif oldrepeat and ((right and self.flip == -1) or (left and self.flip == 1)) then self:executeMove("downBackB") else self:executeMove("lowB") end self.ABTimer = 0 self.repeatB = oldrepeat end else self.move.endWith = function() self.moves.dashToStand.endWith = nil self:endAttack() local oldrepeat = self.repeatB self:checkTurn() self:executeMove("standB") self.ABTimer = 0 self.throwTimer = 0 self.repeatB = oldrepeat end end return elseif right and not down then -- self:executeMove('runRecovery') -- self.x = self.x + (19 * self.flip) -- self.xOffset = -36 self.xSpeed = 200 self:changeWidth(40) if self.flip == 1 then if self.move.name ~= "crawlForward" then self:executeAnimation("crawlForward") end else if self.move.name ~= "crawlBack" then self:executeAnimation("crawlBack") end end -- self.runCancel = false -- self.forceThrowTech = false return elseif left and not down then -- self:executeMove('runRecovery') -- self.x = self.x + (19 * self.flip) -- self.xOffset = -36 if self.flip == 1 then if self.move.name ~= "crawlBack" then self:executeAnimation("crawlBack") end else if self.move.name ~= "crawlForward" then self:executeAnimation("crawlForward") end end self.xSpeed = -200 self:changeWidth(40) -- self.runCancel = false -- self.forceThrowTech = false return else if self.move.name ~= "crawlIdle" then self:executeAnimation("crawlIdle") end self.xSpeed = 0 self:changeWidth(40) end else self:_controlUpdate(left, right, up, down, buttonA, buttonB, tapA, tapB, specialA, specialB) end end function Subject11:normalHit(attackInfo, delayHurt, hurtboxHit) self.moves.dashToStand.endWith = nil self:_normalHit(attackInfo, delayHurt, hurtboxHit) end