Subject11.lua

From Pocket Rumble Wiki
Jump to: navigation, search

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