Parker.lua

From Pocket Rumble Wiki
Jump to: navigation, search

parker.lua[edit]

Parker = {
	moves={
		standA = {
			attackbox = {pushback=189 * gameLogicMult, hitStun=12, width=17 * gameLogicMult, height=11 * gameLogicMult, dmg=1, relativeY=10 * gameLogicMult, explosionX = 4 *gameLogicMult, explosionY = 2 * gameLogicMult, priority = 4};
			{
				frames = {1,4};
				custom = function(self)
					self:executeSound('lightWhiff', {"sfx", "whiff"})
				end
			};
			{
				type ="active";
				frames = {2,2};
			};
			{
				type ="recovery";
				frames = {3,3,4,2};
			};
		};
		standB = {
			attackbox = {pushback=250 * gameLogicMult, hitStun=20, width=30 * gameLogicMult, height=12 * gameLogicMult, relativeY = 11 * gameLogicMult, dmg=1, explosionX = 4 * gameLogicMult, explosionY = 2 * gameLogicMult};
			{ --280
				frames = {1,3}; --1,2
				custom = function(self)
					self:executeSound('mediumWhiff', {"sfx", "whiff"})
				end
			};
			{
				frames = {2,2,3,2,4,2}; --2,4,3,3
				custom = function(self)
					-- self:changeSpeed(300 * gameLogicMult, 40)
				end
			};
			{
				type = "active";
				frames = {5,2,6,4}; --4,3,5,2
				custom = function(self)
					self:changeSpeed(500 * gameLogicMult, 170)
					-- self:changeLocation (10 * gameLogicMult)
					-- self:changeSpeed(0,0)
				end
			};
			{
				type = "recovery";
				frames = {6,8}; --5,5,6,4,7,4 --7,4,8,4
			};
			{
				frames = {7,4,8,4};
				custom = function(self)
					self:changeLocation(-4 * gameLogicMult)
				end
			};
		};
		lowA = {
			attackbox = {pushback=160 * gameLogicMult, hitStun=14, width=26 * gameLogicMult, height=11 * gameLogicMult, relativeY=25 * gameLogicMult, explosionX = -8, explosionY = 999 * gameLogicMult, priority = 4};
			{ --pushback: 190
				frames = {1,2,2,1,3,2}; --1,4,2,1
				custom = function(self)
					self:executeSound('mediumWhiff', {"sfx", "whiff"})
				end
			};
			{
				type = "active";
				frames = {4,5}; --3,2,4,3
			};
			{
				type = "recovery";
				frames = {5,4}; --5,4
			};
		};
		lowB = {
			attackbox = {pushUp = -300,pushback=100 * gameLogicMult, hitStun=21, width=35 * gameLogicMult, height=11 * gameLogicMult, dmg=1, relativeY=25 * gameLogicMult, explosionX = - (3 * gameLogicMult), explosionY = 999, priority = 3};
			{
				frames = {1,2,2,4,3,2}; --1,2,2,2,3,1,4,1,5,1
				custom = function(self)
					self:executeSound('heavyWhiff', {"sfx", "whiff"})
				end
			};
			{
				type = "active";
				frames = {4,3}; --6,3,7,1
			};
			{
				type = "recovery";
				frames = {5,1,6,8,7,3}; --8,3,9,3,10,3,11,3,12,3,13,3,14,3,15,3
			};
			--attackbox = {pushUp = 90 * gameLogicMult, pushback=200 * gameLogicMult, hitStun=18, width=16 * gameLogicMult, height=36 * gameLogicMult, dmg=1, relativeY=0 * gameLogicMult, explosionX = -2, explosionY = 6, priority = 4};
			--{ --150 pushback
				--frames = {1,2,2,3,3,2};
				--custom = function(self)
					--self:executeSound('mediumWhiff', {"sfx", "whiff"})
				--end
			--};
			--{
				--frames = {4,2};
				--custom = function(self)
					--self:changeSpeed(2000, 500)
				--end
			--};
			--{
				--type = "active";
				--frames = {5,2,6,2};
				--custom = function(self)
					-- self:changeLocation(25 * gameLogicMult) --I TOOK THIS OUT BECAUSE IT LET YOU TELEPORT THROUGH PEOPLE
				--end
			--};
			--{
				--type = "recovery";
				--frames = {7,4,8,2,9,2};
			--};
		};
		jumpA = {
			attackbox = {pushback=170 * gameLogicMult, hitStun=17, width=20 * gameLogicMult, height=16 * gameLogicMult, dmg=1, relativeY=25 * gameLogicMult, explosionX = -3 * gameLogicMult,explosionY = 6 * gameLogicMult, priority = 4, ignoreCornerPush=true};
			{
				frames = {1,3,2,2,3,1}; --1,6
				custom = function(self)
					self:executeSound('mediumWhiff', {"sfx", "whiff"})
					self.attackbox.SFX = "hitLightSFX"
				end
			};
			{
				type="active";
				frames = {4,2,5,2}; --2,2,3,4
			};
			{
				type="recovery";
				frames = {6,4,7,3}; --6,4,7,4,8,16
			};
			endWith = function(self)
				self:executeAnimation("jumpA", {
					{
				  		frames={7,2,8,4};
				  	};
				  	{
				  		spriteName = "jumpUp";
						frames={11,30};
					}
				});
			end
		};
		jumpB = {
			attackbox = {pushback=80 * gameLogicMult, hitStun=19, width=30 * gameLogicMult, height=45 * gameLogicMult, relativeX = -10 * gameLogicMult, relativeY = -5 * gameLogicMult, explosionY = 40, priority = 3, ignoreCornerPush=true};
			{ --45 * gamelogicmult
				frames = {1,3,2,3,3,2,5,1}; --1,4,2,2
				custom = function(self)
					self:executeSound("mediumWhiff", {"sfx", "whiff"})
				end
			};
			{
				type = "active";
				frames = {6,1}; --3,2
				custom = function(self)
					self:executeEffect("jumpBEffect");
				end
			};
			{
				frames = {6,1};
				custom = function(self)
					-- self.attackbox.height= self.attackbox.height + (20 * gameLogicMult)
				-- 	self.attackbox.height = 37 * gameLogicMult
				-- 	self.attackbox.width = 18 * gameLogicMult
				-- 	self.attackbox.relativeY = 0 * gameLogicMult
				-- 	self.attackbox.relativeX = 0 * gameLogicMult
				end
			};
			{
				frames = {6,3}; --6,2
				custom = function(self)
					-- self.attackbox.height= self.attackbox.height + (20 * gameLogicMult)
					-- self.attackbox.height= self.attackbox.height + (10 * gameLogicMult)
				-- 	self.attackbox.height = 21 * gameLogicMult
				-- 	self.attackbox.width = 30 * gameLogicMult
				-- 	self.attackbox.relativeY = 30 * gameLogicMult
				-- 	self.attackbox.relativeX = -20 * gameLogicMult
				-- 	self.attackbox.explosionX = -15 * gameLogicMult
				-- 	self.attackbox.explosionY = 9 * gameLogicMult
				end
			};
			{
				type="recovery";
				frames = {6,3,7,4}; --10,5,7,3,7,5
			};
			endWith = function(self)
				self:executeAnimation("jumpUp", {
				  frames={10,3,11,20};
				});
			end
		};
		downForwardA = {
			attackbox = {pushback=80 * gameLogicMult, hitStun = 22, width=67 * gameLogicMult, height=12 * gameLogicMult, relativeX = -17 * gameLogicMult, relativeY = 11 * gameLogicMult, dmg=1, explosionX = -6 * gameLogicMult, priority = 2, external = true, projectileMoveStrength=700};
			{ --old hitstun as starter: 25
				frames = {1,3,2,5}; --1,4,2,8
				custom = function(self)
				end
			};
			{
				-- type = "active";
				frames = {3,2,4,2};
				custom = function(self)
					-- self.attackbox.width = 20 * gameLogicMult
					-- self.attackbox.relativeX = -18 * gameLogicMult
					self:executeSound('heavyWhiff', {"sfx", "whiff"})
				end
			};
			{
				type = "active";
				frames = {5,2}; --5,2,6,2,7,2,8,2
				custom = function(self)
					self:executeEffect("downForwardAEffect")
				end
			};
			{
				frames = {6,2,7,2,8,2}; --5,2,6,2,7,2,8,2
				custom = function(self)
					self.attackbox.width = self.attackbox.width - 20
					self.attackbox.relativeX = self.attackbox.relativeX + 20
				end
			};
			{
				type="recovery";
				frames = {9,3,10,3,11,4}; --4,4
				custom = function(self)
					-- self:executeProjectile("orbInert")
					-- self:executeEffect("orb")
				end
			};
		};
		downBackB = {
			{
				frames = {1,3,2,3,3,3}; --1,3,2,5,3,3
				custom = function(self)
					-- self:executeEffect("orbStartupAir")
					self:executeProjectile("orbStartupAir")
					self:executeSound("orbDelay", "sfx")
				end
			};
			{
				type="recovery";
				frames = {5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2,14,2}; --5,3,6,3,7,3,8,2,9,2,10,2,11,2,12,2,13,2,14,2
				custom = function(self)
					-- local originalDecay = self.projectiles.orbInert.decay
					-- self.projectiles.orbInert.decay = 5
					-- self.projectiles.orbInert.ySpeed = -400
					-- self:executeProjectile("orbInert", nil, self.y - 50)
					-- self.projectiles.orbInert.ySpeed = 0
					-- self.projectiles.orbInert.decay = originalDecay
				end
			};
		};
		downForwardB = {
			attackType = attackTypes.high;
			attackbox = {forceForward = true, pushUp = 77 * gameLogicMult, pushback=130 * gameLogicMult, hitStun=16, width=55 * gameLogicMult, height=23 * gameLogicMult, relativeX=-35 * gameLogicMult, relativeY=-10 * gameLogicMult, dmg=1, explosionY = 12 * gameLogicMult,explosionX = 4 * gameLogicMult, priority = 2, projectileMoveStrength=700};
			{
				frames = {1,3,2,3};
				custom = function(self)
					self:executeSound("jump", {"sfx", "whiff"})
					self.throwInvuln = true
				end
			};
			{
				frames = {3,3};
				custom = function(self)
					-- self.invulnerability = true
					self.height = self.height - (11 * gameLogicMult)
					self:changeSpeed(600, 30)
					self.ySpeed = -300 -- -300
					-- self:executeSound("heavyWhiff", {"sfx", "whiff"})
				end
			}; --1,4,2,2,3,2
			{
				frames = {4,3,5,3};
				custom = function(self)
					-- self.invulnerability = true
					-- self.height = self.height - (11 * gameLogicMult)
					-- self:changeSpeed(600, 30)
					-- self.ySpeed = -300 -- -300
					-- self.attackbox.width = 15 * gameLogicMult
					self:executeSound("heavyWhiff", {"sfx", "whiff"})
				end
			};
			{
				type="active";
				frames = {6,3};
				custom = function(self)
					-- self.attackbox.width = 55 * gameLogicMult
					-- self.attackbox.relativeX = -35 * gameLogicMult
					-- self:executeSound("heavyWhiff", {"sfx", "whiff"})
				end
			};
			{
				frames = {7,3};
				custom = function(self)
					self.attackbox.exists = false
				end
			};
			{
				frames = {8,3}; --7,3,8,4,9,4,10,6
				custom = function(self)
					-- self.height = standHeight
					self.y = yFloor - standHeight
					self.ySpeed = 0
					self.ignoreGravity = true
					-- self.yOffset = self.yOffset - (4 * gameLogicMult)
					-- self.height = standHeight
					self:executeSound("mediumWhiff", {"sfx", "whiff"})
				end
			};
			{
				frames = {9,3};
				custom = function(self)
					self.height = standHeight
					-- self.ignoreGravity = false
					self.attackbox.exists = true
					self.attacking = true
					self.attackbox.height = 31 * gameLogicMult
					self.attackbox.width = 30 * gameLogicMult
					self.attackbox.relativeY = 0 * gameLogicMult
					self.attackbox.relativeX = 0 * gameLogicMult
					self.attackbox.explosionX = -4 * gameLogicMult
					self.attackbox.explosionY = 9 * gameLogicMult
					self.attackbox.pushUp = -300 * gameLogicMult
					self.attackbox.pushback = 220 * gameLogicMult --250
					self.attackbox.hitStun = 12 --16
					self.attackbox.projectileMoveStrength = 0
					self.throwInvuln = true
				end
			};
			{
				frames = {10,3};
				custom = function(self)
					self.attackbox.height = 21 * gameLogicMult
					self.attackbox.relativeY = 10 * gameLogicMult
					self.throwInvuln = false
					self.ignoreGravity = false
				end
			};
			{
				type="recovery";
				frames = {11,3,12,3,13,3,14,3,15,3,16,3}; --10,2,11,6,12,6,13,6
				custom = function(self)
					-- self.invulnerability = false
				end
			};
		};
		downBackA = {
			{
				frames = {1,3,2,3,3,3}; --1,3,2,5,3,3
				custom = function(self)
					self:executeEffect("orbStartupFloor")
				end
			};
			{
				type="recovery";
				frames = {5,3,6,3,7,3,8,3,9,3,10,3}; --5,3,6,3,7,3,8,3,9,5,10,4
				custom = function(self)
					self:executeProjectile("orbInert")
				end
			};
		};
		neutralAB = {
			{
				type="startup";
				frames = {1,2,2,2,3,6,4,2,5,2,6,2};
				custom = function(self)
					self:executeSound('parryWhiff', {"sfx", "whiff"})
					self:executeSound('mediumWhiff', {"sfx", "whiff"})
					self:startTrails("super")
					self.parry = true
					self.attacking = false
					self:changeMeter(-1)
					self:setFrameBar({{type="active", frameCount=16}, {type="recovery", frameCount=15}})
					-- self:changeWidth(30)
				end
			};
			{
				type="recovery";
				frames = {7,7,8,7}; --4,5,5,5,6,5
				custom = function(self)
					self.parry = false
					self:changeWidth(19)
				end
			};
			{
				frames = {8,1};
				custom = function(self)
					self:stopTrails()
				end
			};
		};
		parryConnectMid = {
			spriteName = "parryMid";
			{
				type = "recovery";
				frames = {1,3,2,3};
				custom = function(self)
					self.invulnerability = true
					self.ignoreInvulnOutline = true
					self:executeSound("parry", "sfx")
					self:executeSound("parry2", "sfx")
					cameraJitterX = 6
					self:flushBar()
					self:changeWidth(19)
					self:checkTurn(true)
					self:executeEffect("neutralABEffect")
					self.alwaysDrawFront = true
					self.requestSS = true
					self.attacking = true
					self:changeMeter(1)
					self:executeEffect("parrySparkMid")
				end
			};
			{
				frames = {3,15,4,2};
				custom = function(self)
					self.invulnerability = false
					self.ignoreInvulnOutline = false
					-- self:executeEffect("neutralABEffect")
					-- self.attacking = true
					-- self.requestSS = true
				end
			};
			endWith = function(self)
				self.attacking = false
				self.parry = false
				self:superStopContinue()
				self:endAttack()
				self:stopTrails()
			end
		};
		parryConnectLow = {
			spriteName = "parryLow";
			{
				type = "recovery";
				frames = {1,3,2,3};
				custom = function(self)
					self.invulnerability = true
					self.ignoreInvulnOutline = true
					self:executeSound("parry", "sfx")
					self:executeSound("parry2", "sfx")
					cameraJitterX = 6
					self:flushBar()
					self:changeWidth(19)
					self:checkTurn(true)
					self:executeEffect("neutralABEffect")
					self.alwaysDrawFront = true
					self.requestSS = true
					self.attacking = true
					self:changeMeter(1)
					self:executeEffect("parrySparkLow")
				end
			};
			{
				frames = {3,15,4,2};
				custom = function(self)
					self.invulnerability = false
					self.ignoreInvulnOutline = false
					-- self:executeEffect("neutralABEffect")
					-- self.attacking = true
					-- self.requestSS = true
				end
			};
			endWith = function(self)
				self.attacking = false
				self.parry = false
				self:superStopContinue()
				self:endAttack()
				self:stopTrails()
			end
		};
		parryConnectHigh = {
			spriteName = "parryHigh";
			{
				type = "recovery";
				frames = {1,4,2,4};
				custom = function(self)
					self.invulnerability = true
					self.ignoreInvulnOutline = true
					self:executeSound("parry", "sfx")
					self:executeSound("parry2", "sfx")
					cameraJitterX = 6
					self:flushBar()
					self:changeWidth(19)
					self:checkTurn(true)
					self:executeEffect("neutralABEffect")
					self.alwaysDrawFront = true
					self.requestSS = true
					self.attacking = true
					self:changeMeter(1)
					self:executeEffect("parrySparkHigh")
				end
			};
			{
				frames = {3,15,4,2};
				custom = function(self)
					self.invulnerability = false
					self.ignoreInvulnOutline = false
					-- self:executeEffect("neutralABEffect")
					-- self.attacking = true
					-- self.requestSS = true
				end
			};
			endWith = function(self)
				self.attacking = false
				self.parry = false
				self:superStopContinue()
				self:endAttack()
				self:stopTrails()
			end
		};
		dashForward = {
			{
				type = "recovery";
				frames = {1,2};
				custom = function(self)
					-- self.alwaysDrawBehind = true
					-- self.invulnerability = true
					-- self.ignoreCollision = true
					-- self:executeSound("dash.ogg", "sfx")
					-- self:setDust(0)
					-- self:changeSpeed(self.runSpeed * 3, 35)
				end
			};
			{
				type = "recovery";
				frames = {2,2,3,2,4,2,5,2,6,2,7,2};
				custom = function(self)
					self.alwaysDrawBehind = true
					self.invulnerability = true
					self.ignoreCollision = true
					self:executeSound("dash", "sfx")
					self:setDust(-40)
					self:changeSpeed(self.runSpeed * 3, 35)
				end
			};
			{
				frames = {8,3,9,3};
				custom = function(self)
					self.invulnerability = false
					self.ignoreCollision = false
				end
			};
		};
		dashBack = {
			spriteName = "dashForward";
			-- {
			-- 	type = "recovery";
			-- 	frames = {7,3};
			-- 	custom = function(self)
			-- 		-- self.alwaysDrawBehind = true
			-- 		-- self.invulnerability = true
			-- 		-- self.ignoreCollision = true
			-- 		-- self:executeSound("dash.ogg", "sfx")
			-- 		-- self:setDust(140, true)
			-- 		-- self:changeSpeed(-self.runSpeed * 2.8, -35)
			-- 		-- self.ignoreCollision = true
			-- 	end
			-- };
			{
				type = "recovery";
				frames = {7,1,6,2,5,2,4,2,3,2,2,1,1,1};
				custom = function(self)
					self.alwaysDrawBehind = true
					self.invulnerability = true
					self.ignoreCollision = true
					self:executeSound("dash", "sfx")
					self:setDust(140, true)
					self:changeSpeed(-self.runSpeed * 2.8, -35)
				end
			};
			{
				frames = {8,3,9,3};
				custom = function(self)
					self.invulnerability = false
					self.ignoreCollision = false
				end
			};
		};
	};
	animations={
		idle = {
			{
				--TODO: animation timer is never getting weird and out of sync like it used to with custom frame times due to how animations reset
			    -- frameTime = .1;
				frames = {2,4,3,26,4,7,5,7,6,7,7,7,8,18,9,5,10,4,11,4,12,4,13,26,14,7,15,7,16,7,17,7,18,5,19,9,20,4,21,4,22,4,1,4};
			};
		};
		walkForward = {
			spriteName = "walk";
			{
				frameTime = .018;
				--TODO: animation timer is never getting weird and out of sync like it used to with custom frame times due to how animations reset
			    -- frameTime = .2;
				frames = {1,4,2,5,3,4,4,5,5,4,6,5,7,4,8,5,9,4,10,5};
			};
		};
		walkBack = {
			spriteName = "walkBack";
			{
				frameTime = .018;
				--TODO: animation timer is never getting weird and out of sync like it used to with custom frame times due to how animations reset
			    -- frameTime = .2;
				frames = {1,5,2,6,3,5,4,6,5,5,6,6,7,5,8,6,9,5,10,6};
			};
		};
		crouch = {
			{
				--TODO: animation timer is never getting weird and out of sync like it used to with custom frame times due to how animations reset
				frames = {1,6,2,6,3,25,4,6,5,6,6,42};
			};
		};
		jumpUp = {
			frames={2,4,3,3,4,3,5,3,6,3,7,3,8,6,9,3,10,3,11,3};
			endWith = "nothing";
		};
		jumpForward = {
			spriteName = "jumpUp";
			frames={2,4,3,3,4,3,5,3,6,3,7,3,8,6,9,3,10,3,11,3};
			endWith = "nothing";
		};
		jumpBack = {
			spriteName = "jumpUp";
			frames={2,4,3,3,4,3,5,3,6,3,7,3,8,6,9,3,10,3,11,3};
			endWith = "nothing";
		};
		land = {
			spriteName = "jumpUp";
			frames = {12,3,13,3,1,3,14,3};
		};
		crouchTransition = {
			frameTime = frameTime *3;
			frames={1,1};
		};
		standTransition = {
			spriteName = "crouchTransition";
			frameTime = frameTime *3;
			frames={1,1};
			custom = function(self)
				self.yOffset = -6
			end
		};
		turn = {
			frames = {1,4};
		};
		crouchTurn = {
			frames = {1,4};
		};
		tech = {
			frames={1,4,2,4,3,4,4,4,5,4};
		};
		preBlock={
			spriteName="blockStand";
			endWith = "nothing";
			frames = {1,1,2,1,3,1};
		};
		preBlockReverse={
			spriteName="blockStand";
			frames = {2,1,1,1};
		};
		preBlockCrouch={
			endWith = "nothing";
			spriteName="blockCrouch";
			frames={1,2,2,1};
		};
		preBlockCrouchReverse={
			spriteName="blockCrouch";
			frames={1,2};
		};
		knockdown = {
			endWith = "nothing";
			frames = {1,6,2,3,3,1,4,2,5,2,6,2,7,1,8,2}; --1,6,2,3,3,2,4,2,5,2,6,2,7,2,8,2
		};
		impact = {
			spriteName = "knockdown";
			frames = {9,3}
		};
		startGroundBounce = {
			spriteName = "knockdown";
			frames = {9,1,10,1,11,3,12,3,13,3,14,2}
		};
		stopGroundBounce = {
			spriteName = "knockdown";
			frames = {14,1, 15, 3, 16,8}
		};
		wakeup = {
			spriteName = "knockdown";
			frames = {17,5,18,5}
		};
		airHurt = {
			endWith = "nothing";
			{
				frames = {1,1,2,3};
			};
			{
				spriteName = "jumpUp";
				frames = {8,9,9,4,10,4,11,99};
			};
		};
		death = {
			spriteName = "knockdown";
			endWith = "nothing";
			frames = {16,1}
		};
		chipDeath = {
			endWith = "nothing";
			{
				frames={1,3,2,3};
				custom=function(self)
					self.enemy:drawFirst()
				end
			};
			{
				frames={3,3,4,3,5,3,6,3};
				custom = function(self)
					self:executeSound("chipDeath", {"sfx"})
				end
			};
			{
				frames={7,3};
				custom = function(self)
					self:executeSound("chipDeath", {"sfx"})
				end
			};
			{
				frames={8,1};
				custom = function(self)
					koFinish = true
				end
			};
		};
		win = {
			spriteName = "yay";
			frames = {2,6,3,6,4,6,5,6,6,6,7,6,8,6,9,6,10,6,11,6,12,6,13,6,14,6,15,6,16,6,17,6,18,6,19,6,20,6,21,6,22,6,23,6,24,3,25,3,26,3,27,3,28,6,29,6,30,40,31,6,32,6,33,6};
			endWith = function(self)
				self:executeAnimation("yayLoop")
			end
		};
		yay = {
			frames = {1,18,2,6,3,6,4,6,5,6,6,6,7,6,8,6,9,6,10,6,11,6,12,6,13,6,14,6,15,6,16,6,17,6,18,6,19,6,20,6,21,6,22,6,23,6,24,3,25,3,26,3,27,3,28,6,29,6,30,40,31,6,32,6,33,6};
			endWith = function(self)
				self:executeAnimation("yayLoop")
			end
		};
		yayLoop = {
			spriteName = "yay";
			frames = {34,3,35,3,36,3,37,3,38,3,39,3,40,3,41,3,42,3,43,3,44,3,45,45,46,6,47,60,48,6};
		};
		boo = {
			frames = {1,24,2,4,3,6,4,6,5,38,6,4,7,2,8,2,9,2,10,2,11,4,12,6,13,2,14,2,15,2,16,2};
			endWith = function(self)
				self:executeAnimation("booLoop")
			end
		};
		booLoop = {
			spriteName = "boo";
			frames = {17,6,18,1,19,1,20,1,19,1,18,1,19,1,20,1,17,6,18,1,19,1,20,1,19,1,18,1,19,1,20,1,17,6,18,1,19,1,20,1,19,1,18,1,19,1,20,1,17,24,18,1,19,1,20,1,19,1,18,1,19,1,20,1};
		};
	};
	throw = {
		enemyFrames = {
			{5,12 + 4,-14}, --f1
			{6,6 + 4,-14}, --f2
			{7,1 + 4,-14}, --f3
			{2,5 + 8,-17}, --f4
			{1,4 + 8,-16}, --f5
			{1,3 + 8,-16}, --f6
			{1,3 + 8,-16}, --f7
			{1,3 + 8,-16}, --f8
			{1,3 + 8,-16}, --f9
			{2,4 + 8,-18}, --f10
			{12,16 + 8,-14}, --f11
			{0,0,0}, --f12
			{0,0,0}, --f13
			{0,0,0}, --f14
			{0,0,0}, --f15
			{0,0,0}, --f16
			{0,0,0}, --f17
			{6,3 + 4,-14}, --f18
			{5,6 + 4,-14}, --f19
			{17,5 + 4,-10}, --f20
			{18,4 + 4,-10}, --f21
			{19,2 + 4,-11}, --f22
			{12,0 + 4,-14}, --f23
			{0,0,0}, --f24
			{0,0,0}, --f25
			{0,0,0} --f26
		};
		start = {
			{frames = {1,3,2,3,3,3,3}}; --5,2,6,4 --1,4,2,4,3,4,4,2,5,1,6,1
			{
				frames = {4,1}; --8,4,9,4,10,4,11,4
				custom = function(self)
					self:throwHitstop(6, 38, 34)
					cameraJitterX = 2
					self.combo = self.combo + 1
					self.enemy:changeHealth(1)
					self:executeSound(self.hitSpecialSFX, "sfx")
					self.enemy:forceEnemyEffect("shock", "getThrown")
					self.enemy.xOffset = -30
					self.enemy.yOffset = -8
				end
			};
			{
				frames = {5,3,6,7};
				custom = function(self)
					self.enemy:stopEnemyEffect(true)
				end
			};
		};
		forward = {
			{
				frames = {7,2,8,2,9,2}; --11,4,13,2,14,2,15,2
				data = {dmg = 1, hitstop = 9, explosionX= 101, explosionY = 101, changeLocation = 90, changeSpeed = 270, changeYSpeed = -600};
				custom = function(self)
					self:executeEffect("orbThrowStartup")
					self:executeSound("orbLoop", "sfx")
				end
			};
			{
				frames = {10,1};
				custom = function(self)
					self:executeEffect("orbThrowActive")
					self.combo = self.combo + 1
					self.enemy:changeHealth(1)
					self:executeSound(self.hitSpecialSFX, "sfx")
					self:throwHitstop(9, 38, 34)
					self.enemy:forceEnemyEffect("shock", "getThrown")
					cameraJitterX = 2
					self.enemy.xOffset = -30
					self.enemy.yOffset = -8
					self:executeSound("lightning", "sfx")
				end
			};
			{
				frames = {10,2,11,1};
				custom = function(self)
					self.enemy:stopEnemyEffect(true)
				end
			};
			{
				frames = {11,2};
				custom = function(self)
				end
			};
			{
				frames = {12,3,13,3,14,3,15,3,16,3,17,3};
				custom = function(self)
					self.enemy:changeLocation(30)
					self.enemy:changeSpeed(240) --300
					self.enemy.ySpeed = -250
					self.enemy.y = self.enemy.y + 20
					self.enemy.ignoreGravity = false
					self.enemy:knockFall()
					self.ignoreFloor = false
					self.enemy.ignoreFloor = false
				end
			};
		};
		backward = {
			{
				frames = {18,3}; --21,4,22,4,23,4
				data = {dmg = 1, changeLocation = 10, changeSpeed = 500, changeYSpeed = -600};
				custom = function(self)
					self:changeSpeed(700, 50) --800,50
					if self.enemy.x > 600 or self.enemy.x < 42 then --590, 60
						self.enemy:throwForceLocation(-60)
					else
						self.enemy:throwForceLocation(-10)
					end
				end
			};
			{
				frames = {19,3,20,3,21,3,22,3};
				custom = function(self)
					self:changeLocation(18)
				end
			};
			{
				frames = {24,1}; --23,3,24,8,25,3,26,3
				custom = function(self)
					-- self.xOffset = self.xOffset - 60
					self:throwHitstop(8, -60, 34)
					self:executeSound(self.hitHeavySFX, "sfx")
					self.enemy:resetThrowForceLocation()
					self.ignoreFloor = false
					self.enemy.ignoreFloor = false
					self.combo = self.combo + 1
					self.enemy:changeHealth(1)
					self.enemy:changeSpeed(-300)
					self.enemy.ySpeed = -200 --600
					self.enemy.y = self.enemy.y + 20
					self.enemy.ignoreGravity = false
					self.enemy:forceEnemyEffect("shock", "knockdown")
					-- self:changeLocation(90)
					-- self.enemy:knockFall()
					-- self:changeLocation(-90)
				end
			};
			{
				frames = {24,7,25,3,26,3};
				custom = function(self)
					self.enemy:stopEnemyEffect(true)
					self.enemy:knockFall()

				end
			};
			{
				custom = function(self)
					self.ignoreCollision = false
					-- self:changeLocation(60)
				end
			};
		};
	};
	effects = {
		hitEffect = {
			frames = {1,3,2,2,3,1,4,2,5,1}; --1,1,2,1,3,2,4,3,5,2
		};
		standBEffect = {
			frames = {6,6,7,3,8,3,9,3,10,3,11,3};
			relativeX = 40;
			relativeY = 18;
			destroyWhenPlayerHurt = true;
		};
		downBackBEffect = {
			frames = {1,3,2,3,3,3,4,3,5,3,6,3,7,3};
			relativeX = 40;
			relativeY = -54;
			destroyWhenPlayerHurt = true;
		};
		jumpBEffect = {
			-- layer = "middle";
			frames = {1,2,2,2,3,2,4,2};
			relativeX = -26; --30
			relativeY = -10;
			destroyWhenPlayerHurt = true;
			followPlayer = true;
			destroyWhenPlayerLand = true;
		};
		downForwardAEffect = {
			frames = {1,2,2,2,3,2,4,2};
			relativeX = -40;
		};
		orbStartupFloor = {
			spriteName = "orbSpawn";
			frames = {1,2,2,2,3,2,4,2,5,2,6,2,7,2};
			relativeX = 4;
			relativeY = 20;
			destroyWhenPlayerHurt = true;
			followPlayer = true;
			custom = function(self, host)
				host:executeSound("orbForm", "sfx")
			end
		};
		orbStartupAir = {
			relativeX = 4;
			relativeY = 20;
			destroyWhenPlayerHurt = true;
			-- relativeY = -50;
			-- ySpeed = -30;
			-- decay = 10;
			{
				frames = {1,2,2,2,3,2,4,2,5,2,6,1,7,1};
				custom = function(self)
					self.ySpeed = 0;
					self.decay = 0;
					self.followPlayer = true;
					self.destroyWhenPlayerHurt = true;
				end
			};
			{
				frames = {8,1,9,2,10,2,11,2,12,2,1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,1,9,2,10,2,11,2,12,2,1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,1,9,2,10,2,11,2,12,2};
				custom = function(self)
					self.ySpeed = -400; -- -340
					self.decay = 17.2; -- 12
					self.followPlayer = false;
					self.destroyWhenPlayerHurt = false;
				end
			};
			{
				custom = function(self, host)
					host:executeSound("orbForm", "sfx")
					if self.flip == 1 then
						host:executeProjectile("orbInert", self.x + 6, self.y + 10)
					else
						host:executeProjectile("orbInert", self.x - 6 - 16, self.y + 10)
					end
					self.exists = false
				end
			};
		};
		-- fireball = {
		-- 	frames = {};
		-- 	endWith = "loop";
		-- 	relativeX = 0;
		-- 	relativeY = 0;
		-- 	destroyWhenPlayerHurt = false;
		-- };
		orb = {
			frames = {10,1,1,3,2,1,10,1,3,1,10,1,3,1,9,1,4,1,9,1,1,3,10,3,9,3,6,3,7,3};
			relativeX = -11 *gameLogicMult;
			relativeY = -10 *gameLogicMult;
			destroyWhenPlayerHurt = false;
			layer = "top";
		};
		orbInert = {
			frames = {4,3,5,1,6,2,7,1,8,2,9,1,10,2,11,1,12,2,13,4,14,4,15,4,16,5,1,5,2,5,3,5};
			endWith = "loop";
			relativeX = -3 *gameLogicMult;
			relativeY = -5 *gameLogicMult;
			destroyWhenPlayerHurt = false;
			custom = function(self, host)
				host:executeSound("orbLoop", "sfx", host:distanceFromCamera(self.x))
			end
		};
		orbDestroy = {
			frames = {1,2,2,2,3,2,4,2,5,4,6,4,7,4,8,4};
			flicker = true;
			relativeX = -12 *gameLogicMult;
			relativeY = -12 *gameLogicMult;
		};
		orbThrowStartup = {
			spriteName = "orbSpawn";
			frames = {1,1,2,1,3,1,4,1,5,1,6,1,7,1};
			relativeX = 30 * gameLogicMult;
			relativeY = 10 * gameLogicMult;
			layer = "top";
		};
		orbThrowActive = {
			spriteName = "orb";
			frames = {10,1,3,1,9,1,4,1,9,1,1,3,10,3,9,2,6,2,7,2};
			-- frames = {1,2,2,2,3,2,4,2,9,1,1,1,10,1,9,1,6,1}; --4,8,9,1,1,1,10,1,9,1,6,1
			relativeX = 20*gameLogicMult;
			relativeY = 4*gameLogicMult;
			layer = "top";
		};
		neutralABEffect = {
			frames = {1,2,8,4,9,2,10,2};-- 4,1,5,1,6,1, --1,2,2,2,3,2,4,2,5,2,6,2,7,2
			flicker = true;
			relativeX = -16 * gameLogicMult; -- -4
			relativeY = -9 * gameLogicMult; -- -9
		};
		lightningStrikeNoOrb = {
			layer = "middle";
			frames = {1,1,2,1,3,1,4,1,5,1,6,1};
			relativeY = -70 * gameLogicMult;
			relativeX = -4 * gameLogicMult;
			followPlayer = true;
		};
		lightningStrike = {
			frames = {1,1,2,1,3,1,4,1,5,1,6,1};
			relativeX = -20;
			relativeY = -64;
		};
		parrySparkMid = {
			spriteName = "parrySpark";
			frames = {1,2,2,2,3,2,4,1,5,1,6,1};
			relativeX = -46;
			relativeY = -88;
		};
		parrySparkHigh = {
			spriteName = "parrySpark";
			frames = {1,2,2,2,3,2,4,1,5,1,6,1};
			relativeX = -76;
			relativeY = -120;
		};
		parrySparkLow = {
			spriteName = "parrySpark";
			frames = {1,2,2,2,3,2,4,1,5,1,6,1};
			relativeX = -56;
			relativeY = -50;
		};
		chainLightning = {
			frames = {1,1,2,3,3,3,4,3,5,3,6,3,7,3};
			layer = "middleTop";
		};
		slapSpark = {
			frames = {1,1,2,1,3,1,4,1,5,1,6,1};
			layer = "top";
		};
		nameplate = {
			-- frames = {1,5,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2,14,2,15,2};
			endWith = "nothing";
			{
				frames = {1,1,2,1,3,3,4,1,5,2,6,2};
				custom = function(self, host)
					if host.player1 == true then
						host:executeSound("typewriterLeft", {"sfx", "nameplate1"})
					else
						host:executeSound("typewriterRight", {"sfx", "nameplate2"})
					end
				end
			};
			{
				frames = {7,3,8,1,9,3,10,1,11,2,12,2};
				custom = function(self, host)
					if host.player1 == true then
						host:executeSound("typewriterLeft", {"sfx", "nameplate1"})
					else
						host:executeSound("typewriterRight", {"sfx", "nameplate2"})
					end
				end
			};
			{
				frames = {13,3,14,1,15,3,16,1,17,2,18,2};
				custom = function(self, host)
					if host.player1 == true then
						host:executeSound("typewriterLeft", {"sfx", "nameplate1"})
					else
						host:executeSound("typewriterRight", {"sfx", "nameplate2"})
					end
				end
			};
			{
				frames = {19,3,20,1,21,3,22,1,23,2,24,2};
				custom = function(self, host)
					if host.player1 == true then
						host:executeSound("typewriterLeft", {"sfx", "nameplate1"})
					else
						host:executeSound("typewriterRight", {"sfx", "nameplate2"})
					end
				end
			};
			{
				frames = {25,3,26,1,27,3,28,1,29,2,30,2};
				custom = function(self, host)
					if host.player1 == true then
						host:executeSound("typewriterLeft", {"sfx", "nameplate1"})
					else
						host:executeSound("typewriterRight", {"sfx", "nameplate2"})
					end
				end
			};
			{
				frames = {31,3,32,1,33,3,34,1,35,3,36,2};
				custom = function(self, host)
					if host.player1 == true then
						host:executeSound("typewriterLeft", {"sfx", "nameplate1"})
					else
						host:executeSound("typewriterRight", {"sfx", "nameplate2"})
					end
				end
			};
		};
		-- nameplate = {
		-- 	frames = {1,5,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2,14,2,15,2};
		-- 	endWith = "nothing";
		-- };
	};
	projectiles = {
		orbStartupAir = {
			lifetime = 67;
			width = 8 * gameLogicMult;
			height = 6 * gameLogicMult;
			noAttackbox = true;
			dontKillEffect = true;
			dontDrawBox = true;
		};
		orbInert = {
			destroyEffect = "orb";
			sfx = "orb";
			xSpeed = 0; --default 350
			relativeX = 5 *gameLogicMult; --29*gameLogicMult
			relativeY = 16 *gameLogicMult;
			hitStun = 16;
			pushback = 250;
			width = 8 * gameLogicMult;
			height = 6 * gameLogicMult;
			hitstop = 10;
			priority = 1;
			noAttackbox = true;
			moveable = true;
			effectOnMove = "slapSpark";
			updateDuringHitstop = true;
			-- cornerStop = true;
			stayOnScreen = true;
			decay = 20;
			ifMultiple = function(self, host, otherProjectile)
				local leftX, rightX, leftY, rightY, width, angle
					if self.x < otherProjectile.x then
						leftX = self.x + self.width/2
						rightX = otherProjectile.x + otherProjectile.width/2
						leftY = self.y
						rightY = otherProjectile.y
					else
						leftX = otherProjectile.x + otherProjectile.width/2
						rightX = self.x + self.width/2
						leftY = otherProjectile.y
						rightY = self.y
					end

					local orb_centery_offset = 3*gameLogicMult
					leftY = leftY + orb_centery_offset
					rightY = rightY + orb_centery_offset

					width = math.dist(leftX,leftY, rightX,rightY)
					--width = bit.dist(leftX,leftY, rightX,rightY)
					angle = math.angle(leftX,leftY, rightX,rightY)
					--angle = bit.angle(leftX,leftY, rightX,rightY)

				host.moves.chainLightning.rotate = angle
				host.moves.chainLightning.maskWidth = width/gameLogicMult
				host.moves.chainLightning.oy = host.sprites.chainLightning.height/gameLogicMult

				host:executeEffect("chainLightning", leftX, leftY, 1)

				local distWidth = rightX - leftX
				local distHeight = leftY - rightY
				local chunkXOffset = -host.projectiles.chainChunk.width/2
				local chunkYOffset = host.projectiles.chainChunk.height/2
				local chunkCount = 10
				local chunkDistWidth = distWidth / (chunkCount-1)
				local chunkDistHeight = distHeight / (chunkCount-1)
				for i=1, chunkCount do
					host:executeProjectile("chainChunk", leftX + chunkXOffset , leftY - chunkYOffset, 1)
					chunkXOffset = chunkXOffset + chunkDistWidth
					chunkYOffset = chunkYOffset + chunkDistHeight
				end
				host:executeSound("lightning", "sfx", host:distanceFromCamera(leftX + distWidth/2))
				host:executeProjectile("chainLargeChunk", leftX - 18, leftY - 20, 1)
				host:executeProjectile("chainLargeChunk", rightX - 18, rightY - 20, 1)
				otherProjectile:destroy()
				self:destroy()
			end;
		};
		orbActive = {
			-- sfx = "orbDestroy";
			lifetime = 5;
			width = 20;
			height = 20;
			priority = 2;
			hitStun = 78;
			pushback = 0;
			hitstop = 10;
		};
		lightningStrike = {
			sfx = "lightningStrike";
			lifetime = 6;
			width = 60;
			height = 84 * gameLogicMult;
			priority = 2;
			hitstop = 5;
			pushback = 50;
			pushUp = 300 * gameLogicMult;
			hitStun = 8;
			dontKillEffect = true;
		};
		chainLightning = {
			lifetime = 5;
			width = 0;
			height = 30;
			priority = 1;
			hitStun = 40; --78
			pushback = 0;
			hitstop = 10;
			dontKillEffect = true;
		};
		chainChunk = {
			effect = "nil";
			deathTag = "chain";
			stunlock = true;
			lifetime = 15;
			width = 20;
			height = 20;
			priority = 1;
			hitStun = 46;
			pushback = 0;
			hitstop = 10;
			blockStun = 24;
		};
		chainLargeChunk = {
			effect = "nil";
			deathTag = "chain";
			stunlock = true;
			lifetime = 15;
			width = 36;
			height = 40;
			priority = 1;
			hitStun = 46;
			pushback = 0;
			hitstop = 10;
			blockStun = 24;
		};
	};
	colors = {
		default = {
			sprite = {
				{64,64,64};--suit
				{155,155,167};--tie
				{248,248,248};--skin

				{99,0,148};--dark hand outline
				{148,0,247};--medium hand outline
				{191,87,199};--bright hand outline
				{255,228,242};--bright hand fill
				{240,128,240};--hand trails
			};
			effects = {
				{53,0,79};--lightning darkest
				{99,0,148};
				{148,0,247};
				{191,87,199};
				{240,128,240};
				{255,175,255};
				{255,228,242};--lightning lightest
			};
			meterIcon = {
				{148,0,247}; --dark
				{191,87,199}; --medium
				{240,128,240}; --light
			};
			hit = {
				{53,0,79};--inner frame 1
				{99,0,148};--outer frame 1

				{255,175,255};--innter frame 2
				{168,168,236};--outer frame 2

				{148,0,247};--frame 5
			};
			dust = {155,155,167};
			mainUI = {64,64,64}; --UIcolor
			health = {155,155,167};
			meterChunk = {
				{148,0,247}; --dark
				{191,87,199}; --medium
				{240,128,240}; --light
			};
			trailSuper = {
				{148,0,247}; --black
				{255,255,255}; --white
				{240,128,240}; --other
			};
		};

		alt1 = { --red
			sprite = {
				{116,61,61};--suit
				{247,0,0};--tie
				{248,248,248};--skin

				{0,16,111};--dark hand outline
				{0,0,247};--medium hand outline
				{0,99,231};--bright hand outline
				{221,243,255};--bright hand fill
				{67,214,247};--hand trails
			};
			effects = {
				{0,9,66};--lightning darkest
				{0,16,111};
				{0,0,247};
				{0,99,231};
				{67,214,247};
				{155,244,255};
				{221,243,255};--lightning lightest
			};
			meterIcon = {
				{0,99,231}; --dark
				{67,214,247}; --medium
				{194,242,255}; --light
			};
			hit = {
				{0,9,66};--inner frame 1
				{0,16,111};--outer frame 1

				{155,244,255};--innter frame 2
				{245,245,152};--outer frame 2

				{0,99,231};--frame 5
			};
			dust = {255,64,64};
			trailSuper = {
				{0,99,231}; --black
				{255,255,255}; --white
				{67,214,247}; --other
			};
			mainUI = {113, 0, 0};
			health = {255,0,0};
			meterChunk = {
				{16,143,255}; --darkBlue
				{64,174,255}; --medium blue
				{131,221,251}; --lightest blue
			};
		};
		alt2 = { --orange
			sprite = {
				{112,90,55};--suit
				{255,132,21};--tie
				{248,248,248};--skin

				{89,76,0};--dark hand outline
				{154,144,0};--medium hand outline
				{215,191,0};--bright hand outline
				{255,255,179};--bright hand fill
				{244,245,0};--hand trails
			};
			effects = {
				{53,46,0};--lightning darkest
				{89,76,0};
				{154,144,0};
				{215,191,0};
				{244,245,0};
				{251,255,105};
				{255,255,179};--lightning lightest
			};
			meterIcon = {
				{242,182,0}; --dark
				{255,255,0}; --medium
				{253,255,142}; --light
			};
			hit = {
				{53,46,0};--inner frame 1
				{89,76,0};--outer frame 1

				{251,255,105};--innter frame 2
				{191,229,223};--outer frame 2

				{215,191,0};--frame 5
			};
			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
			};
			trailSuper = {
				{215,191,0}; --black
				{255,255,255}; --white
				{255,255,0}; --other
			};
		};
		alt3 = {
			sprite = {
				{114,114,0};--suit
				{249,243,0};--tie
				{248,248,248};--skin

				{128,0,78};--dark hand outline
				{191,0,112};--medium hand outline
				{221,0,133};--bright hand outline
				{255,228,242};--bright hand fill
				{255,70,131};--hand trails
			};
			effects = {
				{82,0,50};--lightning darkest
				{128,0,78};
				{191,0,112};
				{221,0,133};
				{255,70,131};
				{255,155,218};
				{255,228,242};--lightning lightest
			};
			meterIcon = {
				{247,0,82}; --dark
				{255,78,171}; --medium
				{255,130,209}; --light
			};
			hit = {
				{82,0,50};--inner frame 1
				{128,0,78};--outer frame 1

				{255,155,218};--innter frame 2
				{168,202,236};--outer frame 2

				{191,0,112};--frame 5
			};
			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 = {
				{56,94,23};--suit
				{71,238,27};--tie
				{248,248,248};--skin

				{98,0,110};--dark hand outline
				{120,0,165};--medium hand outline
				{159,0,197};--bright hand outline
				{240,228,255};--bright hand fill
				{153,85,193};--hand trails
			};
			effects = {
				{59,0,66};--lightning darkest
				{98,0,110};
				{120,0,165};
				{159,0,197};
				{153,85,193};
				{198,155,255};
				{240,228,255};--lightning lightest
			};
			meterIcon = {
				{112,0,183}; --dark
				{153,85,193}; --medium
				{202,128,240}; --light
			};
			hit = {
				{59,0,66};--inner frame 1
				{98,0,110};--outer frame 1

				{198,155,255};--innter frame 2
				{168,236,223};--outer frame 2

				{120,0,165};--frame 5
			};
			dust = {0,255,0};
			mainUI = {0, 113, 0};
			health = {0,255,0};
			meterChunk = {
				--meterOne
				{148,0,247}; --darkGreen
				{191,87,199}; --mediumGreen
				{240,128,240}; --lightestGreen

				--meterTwo
				{240,128,240}; --darkGreen
				{255,175,255}; --mediumGreen
				{255,228,242}; --lightestGreen
			};
			trailSuper = {
			{153,0,193}; --black
			{255,255,255}; --white
			{204,142,255}; --other
			};
		};
		alt5 = { --blue
			sprite = {
				{0,75,88};--suit
				{128,183,192};--tie
				{248,248,248};--skin

				{148,0,0};--dark hand outline
				{255,0,0};--medium hand outline
				{255,69,69};--bright hand outline
				{255,228,228};--bright hand fill
				{255,121,121};--hand trails
			};
			effects = {
				{74,0,0};--lightning darkest
				{148,0,0};
				{255,0,0};
				{255,69,69};
				{255,121,121};
				{255,180,180};
				{255,228,228};--lightning lightest
			};
			meterIcon = {
				{255,0,0}; --dark
				{255,69,69}; --medium
				{255,121,121}; --light
			};
			hit = {
				{75,0,0};--inner frame 1
				{148,0,0};--outer frame 1

				{255,163,163};--innter frame 2
				{176,223,228};--outer frame 2

				{255,0,0};--frame 5
			};
			dust = {128,183,192};
			mainUI = {0,75,88}; --UIcolor
			health = {0,216,255};
			meterChunk = {
				{255,0,0}; --dark
				{255,69,69}; --medium
				{255,121,121}; --light
			};
			trailSuper = {
				{255,0,0}; --black
				{255,255,255}; --white
				{255,121,121}; --other
			};
		};
		alt7 = {
			sprite = {
				{72,42,69};--suit
				{161,128,180};--tie
				{248,248,248};--skin

				{0,148,23};--dark hand outline
				{1,198,0};--medium hand outline
				{36,232,0};--bright hand outline
				{206,255,147};--bright hand fill
				{0,255,0};--hand trails
			};
			effects = {
				{0,79,19};--lightning darkest
				{0,148,23};
				{1,198,0};
				{36,232,0};
				{0,255,0};
				{149,255,32};
				{206,255,147};--lightning lightest
			};
			meterIcon = {
				{53,136,0}; --dark
				{108,255,23}; --medium
				{208,255,147}; --light
			};
			hit = {
				{0,79,19};--inner frame 1
				{0,148,23};--outer frame 1

				{149,255,32};--innter frame 2
				{236,230,168};--outer frame 2

				{1,198,0};--frame 5
			};
			dust = {171,43,200};
			block = {171,43,200};
			mainUI = {71,42,69};
			health = {171,43,200};
			meterChunk = {
				--meterOne
				{19,176,11}; --darkBlue
				{0,255,0}; --medium blue
				{144,255,96}; --lightest blue

				--meterTwo
				{108,255,94}; --darkblue
				{192,255,162}; --medium blue
				{240,255,236}; --lightest blue
			};
			trailSuper = {
			{33,206,0}; --black
			{255,255,255}; --white
			{129,255,118}; --other
			};
		};
		alt8 = {
			sprite = {
				{136,53,83};--suit
				{255,124,254};--tie
				{248,248,248};--skin

				{0,91,90};--dark hand outline
				{0,131,132};--medium hand outline
				{0,171,160};--bright hand outline
				{205,236,255};--bright hand fill
				{0,220,161};--hand trails
			};
			effects = {
				{0,60,65};--lightning darkest
				{0,91,90};
				{0,131,132};
				{0,171,160};
				{0,220,161};
				{141,224,255};
				{205,236,255};--lightning lightest
			};
			meterIcon = {
				{0,141,134}; --dark
				{0,220,161}; --medium
				{128,240,128}; --light
			};
			hit = {
				{0,60,65};--inner frame 1
				{0,91,90};--outer frame 1

				{141,224,255};--innter frame 2
				{236,168,195};--outer frame 2

				{0,131,132};--frame 5
			};
			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 Parker:initiate()
	self:_initiate()
	self.pushbackDustOffset = 0
	self.requestHitSheet = "shock"
	self.hitLightSFX = "parkerLight"
	self.hitHeavySFX = "parkerHeavy"
	self.hitLowSFX = "parkerLow"
	self.hitSpecialSFX = "parkerSpecial"
end

function Parker:reset()
	self:_reset()
	self:resetMeter()
	self.neutralABRequirement = true
end

function Parker:resetMeter()
	self.meterChunkArray = {}
	-- self.meterAmount = 3
	self.neutralABRequirement = true
	for i=1, 3 do
  		self.meterChunkArray[i] = anim8.newAnimation(self.sprites.meterChunk.grid(repeatNum(2,1)), frameTime, 'pauseAtEnd') --6,1,1,2,2,2,3,2,4,2,5,1
  	end
  	self.meterChunkArray[3].onLoop = function()
  		-- self.meterFull = true
  		self.meterChunkArray[3].onLoop = function() end
  	end
  self:_resetMeter()
  self:fullMeter()
  self.meterAnimate = anim8.newAnimation(self.sprites.meter.grid(repeatNum(3,1)), frameTime, 'pauseAtEnd')
end

-- TODO: rename to drawMeter or make a drawOverEverything
function Parker:meterAnimation()
	if not KILLSHADERS then
		love.graphics.setShader(self.shaders.meterIcon)
	end
	if self.player1 then
		self.meterAnimate:draw(self.sprites.meter.sheet, self.meterX, self.meterY + self.meterJitter, 0, gameLogicMult, gameLogicMult, 0, 0)
		if not KILLSHADERS then
			love.graphics.setShader(self.shaders.meterChunk)
		end
		for i=1, 3 do
			local d = i-1
			self.meterChunkArray[i]:draw(self.sprites.meterChunk.sheet, (self.meterX + 122 - 48) - (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)
		if not KILLSHADERS then
			love.graphics.setShader(self.shaders.meterChunk)
		end
		for i=1, 3 do
			local d = i-1
			self.meterChunkArray[i]:draw(self.sprites.meterChunk.sheet, (self.meterX - 122 + 48) + (d * 16), self.meterY + 12 + self.meterJitter, 0, -gameLogicMult, gameLogicMult, 0, 0)
		end
	end
	love.graphics.setShader()
end

function Parker:changeMeter(amount)
	self.meterAmount = self.meterAmount + amount
	if amount > 0 then
		self.neutralABRequirement = true
		if self.meterAmount == 1 then
			self.meterAnimate = anim8.newAnimation(self.sprites.meter.grid(repeatNum(4,2,3,1)), frameTime, 'pauseAtEnd')
		else
			self.meterAnimate = anim8.newAnimation(self.sprites.meter.grid(repeatNum(3,1)), frameTime, 'pauseAtEnd')
		end
		-- if self.meterAmount == 2 or self.meterAmount >= 4 then
		-- 	self:executeSound('fullMeter', "sfx")
			-- self.meterAnimate = anim8.newAnimation(self.sprites.meter.grid(repeatNum(2,2,3,1)), frameTime, 'pauseAtEnd')
		-- end
		-- if self.meterAmount >= 2 then
		-- 	self.downBackABRequirement = true
		-- 	self.downForwardABRequirement = true
		-- end
		-- if self.meterAmount >= 4 then
		-- 	self.meterAmount = 4
		-- 	self.meterJitter = 5
		-- else
		-- 	self.meterJitter = 2
		-- end
	else
		if self.meterAmount <= 0 then
			self.neutralABRequirement = false
			self.meterAnimate = anim8.newAnimation(self.sprites.meter.grid(repeatNum(1,1)), frameTime, 'pauseAtEnd')
		-- 	if self.meterAmount < 0 then self.meterAmount = 0 end
		-- 	self.downBackABRequirement = false
		-- 	self.downForwardABRequirement = false
		end
  	self.meterChunkArray[self.meterAmount + 1] = anim8.newAnimation(self.sprites.meterChunk.grid(repeatNum(1,1,4,2,2,2,4,2,2,2,4,2,2,2)), frameTime, 'pauseAtEnd')
		self.meterJitter = 5
	end
end

function Parker:fullMeter()
	if self.meterAmount < 3 then
		self.meterAmount = 0
		self:changeMeter(3)
	end
end