Naomi.lua

From Pocket Rumble Wiki
Jump to: navigation, search

naomi.lua[edit]

-- require 'class'
-- require 'player/AI'

Naomi = {
	moves = {
		standA = {
			attackbox = {pushback=189 * gameLogicMult, hitStun=12, width=17 * gameLogicMult, height=11 * gameLogicMult, dmg=1, relativeY=15 * gameLogicMult, explosionX = 4 * gameLogicMult, explosionY = -1 * gameLogicMult, priority = 4};
			{
				frames = {1,3,2,1};
				custom = function(self)
					self:executeSound('lightWhiff', {"sfx", "whiff"})
				end
			};
			{
				type="active";
				frames = {3,2};
			};
			{
				type="recovery";
				frames = {4,1,5,2,6,1};
			};
			{
				frames = {6,1};
				custom = function(self)
					self:stopTrails()
				end
			};
		};
		standB = { --183
			attackbox = {pushback=183 * gameLogicMult, hitStun=19, width=28 * gameLogicMult, height=10 * gameLogicMult, relativeY = 20 * gameLogicMult, dmg=1, explosionX = 2 * gameLogicMult, explosionY = -2 * gameLogicMult, priority = 3};
			{ --hitstun: 19
				frames = {1,2,2,2,3,1,4,1}; --1,2,2,2,3,2,4,2
				custom = function(self)
					self:executeSound('mediumWhiff', {"sfx", "whiff"})
				end
			};
			{
				type="active";
				frames = {5,1,6,1}; --5,1,6,1
			};
			{
				type="recovery";
				frames = {6,2,7,3,8,2,9,2,10,1}; --6,1,7,3,8,2,9,1,10,1
				custom = function(self)
					self:stopTrails()
				end
			};
			{
				frames = {10,1};
			};
		};
		lowA = { --280
			attackbox = {pushback=340 * gameLogicMult, hitStun=13, width=20 * gameLogicMult, height=10 * gameLogicMult, relativeY = 20 * gameLogicMult, dmg=1, explosionX = 0 * gameLogicMult, explosionY = 0 * gameLogicMult, priority = 4};
			{ --hitstun: 16 pushback:300
				frames = {1,3,2,4};
				custom = function(self)
					self:changeSpeed(390, 21)
					self.height = 28 * gameLogicMult
					self.yOffset = -(15 * gameLogicMult)
					self.y = yFloor - self.height
					self:executeSound('heavyWhiff', {"sfx", "whiff"})
				end
			};
			{
				type="active";
				frames = {3, 2, 4, 3};
				custom = function(self)
					self.yOffset = -(15 * gameLogicMult)
				end
			};
			{
				type="recovery";
				frames = {3,3};
				custom = function(self)
					self.yOffset = -(15 * gameLogicMult)
				end
			};
			{
				frames = {2,3,1,2};
				custom = function(self)
					self:stopTrails()
					self.yOffset = -(15 * gameLogicMult)
				end
			};
			{
				frames = {1,1};
				custom = function(self)
					self.yOffset = -(15 * gameLogicMult)
				end
			};
		};
		lowB = {
			attackbox = {pushUp = 325, pushback= 60 * gameLogicMult, hitStun=17, width=20 * gameLogicMult, height=15 * gameLogicMult, relativeY = 21 * gameLogicMult, dmg=1, explosionX = -2 * gameLogicMult, priority = 3};
			{ --340
				frames = {1,2,2,1,3,1};
				custom = function(self)
					self:executeSound('heavyWhiff', {"sfx", "whiff"})
				end
			};
			{
				type="active";
				frames = {4, 1, 13, 1};
			};
			{
				frames = {5, 1};
				custom = function(self)
					self.height = self.height + 10
					self.y = self.y - 10
					self.attackbox.height = 48 * gameLogicMult
					self.attackbox.relativeY = -24 * gameLogicMult + 10
					self.yOffset = self.yOffset + 10
					self.attackbox.explosionX = -11 * gameLogicMult
					self.attackbox.explosionY = -14 * gameLogicMult
					self.attackType = attackTypes.medium
				end
			};
			{
				frames = {6, 1, 7, 1, 8, 1};
				custom = function(self)
					self.yOffset = self.yOffset + 10
				end
			};
			{
				type="recovery";
				frames = {9,5,10,4,11,4,12,3,12,1};
				custom = function(self)
					self:stopTrails()
					self.yOffset = self.yOffset + 10
				end
			};
		};
		jumpA = {
			attackbox = {pushback=165 * gameLogicMult, hitStun=16, width=17 * gameLogicMult, height=13 * gameLogicMult, dmg=1, relativeY=25 * gameLogicMult, explosionX = 1 * gameLogicMult,explosionY = 3 * gameLogicMult, priority = 4, ignoreCornerPush=true};
			{ --height=16
				frames = {1,3,2,3}; --1,2,2,3,3,2
				custom = function(self)
					self:executeSound('mediumWhiff', {"sfx", "whiff"})
					self.attackbox.SFX = "hitLightSFX"
				end
			};
			{
				type="active";
				frames = {3,2,4,1,5,3}; --4,1,5,5
			};
			{
				type="recovery";
				frames = {6,3,7,4};
			};
			-- {
			-- 	spriteName = "jumpUp";
			-- 	frames = {4,2,4,14}; --8,2
			-- };
			endWith = function(self)
				self:executeAnimation("jumpUp", {
				  frames={4,2,4,14};
				});
			end
		};
		jumpB = {
			attackbox = {pushback=90 * gameLogicMult, hitStun=17, width=38 * gameLogicMult, height=11 * gameLogicMult, dmg=1, relativeY=20 * gameLogicMult, relativeX= -33 * gameLogicMult, explosionX = {2 * gameLogicMult, -37 * gameLogicMult}, explosionY = {8 * gameLogicMult, 8 * gameLogicMult}, priority = 3, explosionOnEnemyX = true, ignoreCornerPush=true};
			{ --hitstun:13
				frames = {1,2,2,3,3,2}; --1,2,2,3,3,4
				custom = function(self)
					self:executeSound('heavyWhiff', {"sfx", "whiff"})
				end
			};
			{
				type="active";
				frames = {4,5,5,5};
			};
			{
				type="recovery";
				frames = {6,5,7,2}; --6,5,7,5
			};
			-- {
			-- 	spriteName = "jumpUp";
			-- 	frames = {4,5,4,2};
			-- };
			endWith = function(self)
				self:executeAnimation("jumpB",
				{
					{
					  frames={7,4};
					};
					{
						spriteName = "jumpUp";
						frames = {4,5,4,3};
					};
				}
				);
			end
		};
		downForwardA = {
			attackbox = {pushback=270 * gameLogicMult, hitStun=19, width=31 * gameLogicMult, height=10 * gameLogicMult, relativeY = 20 * gameLogicMult, dmg=1, explosionX = 1 * gameLogicMult, explosionY = -2 * gameLogicMult, priority = 2};
			--hitStun=16 pushback=300
			{
				frames = {1,1,2,1,3,1,4,1,5,1,6,1};
				custom = function(self)
					self:stopTrails()
				end
			};
			{
				frames = {6,1};
				custom = function(self)
					self:executeSound('rush', "sfx")
					-- self.sprites.rushEffect.sheet = self.rushEffectSheet
					self:setDust(-40) --0
					self:changeSpeed(900, 70) --880, 60
					self.rushSheet = self.sprites.rushEffect.sheet
					self.rushPunchEffectAnimate = anim8.newAnimation(self.sprites.rushEffect.grid(repeatNum(1,1,2,1,3,1,4,1,5,1,6,1,7,1)), frameTime, 'pauseAtEnd')
				end
			};
			{
				type="active";
				frames = {7,1,8,1,9,3};
			};
			{
				type="recovery";
				frames = {11,6,12,4,14,4}; --11,3,12,4,14,4
				custom = function(self)
				end
			};
		};
		downForwardB = {
			attackbox = {pushback=238 * gameLogicMult, hitStun=13, width=26 * gameLogicMult, height=10 * gameLogicMult, relativeY = 18 * gameLogicMult, dmg=1, explosionX = 0 * gameLogicMult, explosionY = -2 * gameLogicMult, priority = 2};
			{
				frames = {1,4};
				custom = function(self)
					self:setDust(-40) --0
					self:changeSpeed(375,27) --375,27
					self:stopTrails()
				end
			};
			{
				frames = {5,3};
				custom = function(self)
					self:executeSound('heavyRush', {"sfx", "whiff"})
				end
			};
			{
				type="active";
				frames = {6,2};
				custom = function(self)
					self.attackbox.exists = true
					self.attacking = true
				end
			};
			{
				frames = {7,1,8,2};
				custom = function(self)
					TEsound.stop("whiff")
					self:executeSound('heavyRush', {"sfx", "whiff"})
					self.attackbox.exists = false
					self.attacking = true
				end
			};
			{
				frames = {9,2};
				custom = function(self)
					self.attackbox.relativeY = 8 * gameLogicMult
					self.attackbox.width=25 * gameLogicMult
					self.attackbox.exists = true
					self.attacking = true
				end
			};
			{
				frames = {10,1, 11,2};
				custom = function(self)
					TEsound.stop("whiff")
					self:executeSound('heavyRush', {"sfx", "whiff"})
					self.attackbox.exists = false
					self.attacking = true
				end
			};
			{
				frames = {12,2};
				custom = function(self)
					self.attackbox.relativeY = 28 * gameLogicMult
					self.attackbox.width=26 * gameLogicMult
					self.attackbox.exists = true
					self.attacking = true
				end
			};
			-- {
			-- 	frames = {13,1, 14,2};
			-- 	custom = function(self)
			-- 		TEsound.stop("whiff")
			-- 		self:executeSound('tenchiDP', {"sfx", "whiff"})
			-- 		self.attackbox.exists = false
			-- 		self.attacking = true
			-- 	end
			-- };
			-- {
			-- 	frames = {15,2};
			-- 	custom = function(self)
			-- 		self.attackbox.relativeY = 18 * gameLogicMult
			-- 		self.attackbox.exists = true
			-- 		self.attacking = true
			-- 	end
			-- };
			{
				type="recovery";
				frames = {16,5,17,5}; --16,4,17,4
			};
		};
		downBackA = {
			attackType = attackTypes.high;
			attackbox = {pushUp = -4000 * gameLogicMult, pushback=30 * gameLogicMult, hitStun=12, width=31 * gameLogicMult, height=24 * gameLogicMult, relativeX = -26 * gameLogicMult, relativeY = 22 * gameLogicMult, dmg=1, explosionX = -16 * gameLogicMult, explosionY = 8 * gameLogicMult, priority = 2, ignoreCornerPush=true};
			{
				frames = {12,5};
				custom = function(self)
					self.throwInvuln = true
					self:stopTrails()
					-- self.height = self.height - 30
					-- self.ignoreGravity = true
				end
			};
			{
				frames = {1,2,2,1};
				custom = function(self)
					self:setDust(100, false, true)
					-- self.jumpEffectAnimate = anim8.newAnimation(self.sprites.jumpEffect.grid(repeatNum(1,3,2,3,3,3,4,3,5,3,6,3,7,3)), frameTime, 'pauseAtEnd')
					-- self.ignoreGravity = false
					self.height = self.height - 30
					self.ySpeed = -1500
					self.gravity = 9500
					self:changeSpeed(1300, 90)
					-- self:changeSpeed(1100, 90)
					--self:changeSpeed(900, 90)
					self:executeSound('launch', "sfx")
				end
			};
			{
				frames = {3,2};
				custom = function(self)
					local difference = math.abs(self.x - self.enemy.x)
					difference = difference - 2
					if difference < 20 then difference = 20 end
				end;
			};
			{
				frames = {4,7};
				custom = function(self)
					self:changeSpeed(0)
					self.ignoreGravity = true
					self.ySpeed = 0
					self.gravity = defaultGravity
					self:executeSound('heavyRush', "sfx")
				end;
			};
			{
				frames = {5,1};
				custom = function(self)
					self.ignoreGravity = false
					self.gravity = self.gravity + 90000
					self.ySpeed = 300
					self.dropSheet = self.sprites.dropEffect.sheet
					self.dropEffectAnimate = anim8.newAnimation(self.sprites.dropEffect.grid(1,1,2,1,3,1,4,1,5,1,6,1,7,1), frameTime, 'pauseAtEnd')
					self.dpFlip = self.flip
					if self.dpFlip == 1 then
						self.dpX = self.x - 39
					else
						self.dpX = self.x + 39 + 36
					end
				end
			};
			{
				type="active";
				frames = {5,1};
			};
			{
				frames = {6,2};
				custom = function(self)
				end
			};
			{
				type="recovery";
				frames = {7,3,8,3,9,3}; --7,4,8,4,9,4
				custom = function(self)
					-- self.height = standHeight
					self.throwInvuln = false
					self.height = standHeight
					self.knockdownX = self.x - 66
					if self.flip == -1 then self.knockdownX = self.knockdownX + 14 end
					self.knockedEffect = true
					self.knockdownEffectAnimate:gotoFrame(1)
					self.knockdownEffectAnimate.onLoop = function()
						self.knockedEffect = false
					end
					cameraJitterY = 4
					self:executeSound('naomiDP', "sfx")
					self.gravity = defaultGravity
      		self.ySpeed = self.gravity * frameTime
				end
			};
			{
				frames = {10,3,11,3}; --10,4,11,4
				custom = function(self)
					self.ignoreCollision = false
				end
			};
		};
		downBackB = {
			attackbox = {pushUp = 250 * gameLogicMult, pushback=60 * gameLogicMult, hitStun=18, width=47 * gameLogicMult, height=84 * gameLogicMult, relativeX = -36 * gameLogicMult, relativeY = -40 * gameLogicMult, dmg=1, explosionY = -40 * gameLogicMult,explosionX = 0 * gameLogicMult, priority = 1, ignoreCornerPush=true, external = true};
			{ --pushback: 80
				frames = {1,2,2,1,3,1,4,1,5,1,6,1};
				custom = function(self)
					self.invulnerability = true
					self:stopTrails()
				end
			}; --1,4,2,2,3,2
			{
				type="active";
				frames = {7,1};
				custom = function(self)
					self:executeSound('naomiDP', "sfx")
					self.knockdownX = self.x - 64 --96
					if self.flip == -1 then self.knockdownX = self.knockdownX + 12 end
					self.knockedEffect = true
					self.knockdownEffectAnimate:gotoFrame(1)
					self.knockdownEffectAnimate.onLoop = function()
						self.knockedEffect = false
					end
					self.ignoreCollision = true
					cameraJitterY = 3
					self.enemy.extHit = true
					self:executeEffect("pillar")
					-- self.dpFlip = self.flip
					-- if self.dpFlip == 1 then
					-- 	self.dpX = self.x - 37
					-- else
					-- 	self.dpX = self.x + 37 + 36
					-- end
					-- -- self.DPexplosionSheet = self.sprites.DPexplosion.sheet
					-- self.DPexplosionSheet = self.sprites.DPexplosion.sheet
					-- self.pillarAnimate = anim8.newAnimation(self.sprites.DPexplosion.grid(repeatNum(1,3,2,3,3,2,4,2,5,1,6,3,7,3,8,3,9,2,10,2,11,2,12,1)), frameTime, 'pauseAtEnd') --1,3,2,3,3,2,4,2,5,1,6,3,7,3,8,3,10,2,12,2,15,2,17,1
				end
			};
			{
				frames = {7,4}; --7,3,8,4,9,4,10,6
				custom = function(self)
				end
			};
			{
				frames = {8,4,9,4}; --7,3,8,4,9,4,10,6
				custom = function(self)
					self.ignoreCollision = false
				end
			};
			{
				frames = {10,4};
				custom = function(self)
				end
			};
			{
				type="recovery";
				frames = {10,6,11,6,12,4,13,4}; --10,2,11,6,12,6,13,6
				custom = function(self)
				self.invulnerability = false
					-- self.invulnerability = false
					-- self.ignoreCollision = false
				end
			};
		};
		neutralAB = {
			animation = "neutralABSprite";
			{
				frames = {1,2,2,2,3,1,4,1,5,1,6,1}; --1,1,2,1,3,1,4,1,5,1,6,1 --1,3,2,1,3,1,4,1,5,1,6,2
				custom = function(self)
					self:startTrails("super")
					self.attacking = false
				end
			};
			{
				type="recovery";
				frames = {7,2}; --7,2,8,2,9,4,10,3,11,3,12,3,13,3
				custom = function(self)
					-- self:stopTrails()
					self:executeSound("antlerAir", {"sfx"})
					self:executeSound("knockdown", {"sfx"})
					self:changeMeter(1)
					cameraJitterY = 3
					self.knockdownX = self.x - 66 + (2 * self.flip) --96
					if self.flip == -1 then self.knockdownX = self.knockdownX + 14 end
					self.knockedEffect = true
					self.knockdownEffectAnimate:gotoFrame(1)
					self.knockdownEffectAnimate.onLoop = function()
						self.knockedEffect = false
					end
				end
			};
			{
				frames = {8,3,9,3,10,2,11,3,12,3,13,3,2,1,1,1};
				custom = function(self)
					self:stopTrails()
				end
			};
		};
		neutralABRecovery = {
			animation = "neutralABSprite";
			{
				frames = {11,2,12,2,13,1};
				custom = function(self)
						-- self.chargeEffectFrontAnimate = anim8.newAnimation(self.chargeEffectFrontSprite.grid(8,1), frameTime)
					-- 		self.chargeEffectBackAnimate = anim8.newAnimation(self.chargeEffectBackSprite.grid(8,1), frameTime)
				end
				-- custom = function(self)
				-- 	self.chargeEffectAnimate = anim8.newAnimation(self.chargeEffectSprite.grid(repeatNum(17,1)), frameTime)
				-- 	self.chargeEffectBackAnimate = anim8.newAnimation(self.chargeEffectSprite.grid(repeatNum(17,1)), frameTime)
				-- end
			};
			{
				frames = {13,1};
				custom = function(self)
					self:stopTrails()
					-- self.chargeEffectAnimate = anim8.newAnimation(self.chargeEffectSprite.grid(repeatNum(17,1)), frameTime)
					-- self.chargeEffectBackAnimate = anim8.newAnimation(self.chargeEffectSprite.grid(repeatNum(17,1)), frameTime)
				end
			};
		};
		neutralABLoop = {
			endWith = function(self)
				self:executeMove("neutralABLoop")
			end;
			animation = "neutralABSprite";
			{
				frames = {7,4,8,4};
				custom = function(self)
					self:executeSound("antlerAir", {"sfx"})
					self:executeSound("knockdown", {"sfx"})
					self.attacking = false
					self:changeMeter(1)
					-- self.chargeCancel = false
					self:addFrameTimeAttack(0,0,8)
					-- self.haloEffectAnimate = anim8.newAnimation(self.haloEffectSprite.grid(repeatNum(1,2,3,2,2,2,3,2,2,2,3,1)), frameTime, 'pauseAtEnd')
					-- self.chargeEffectFrontAnimate = anim8.newAnimation(self.chargeEffectFrontSprite.grid(repeatNum(1,1,2,2,3,2,5,2,6,1,7,1)), frameTime)
					-- self.chargeEffectBackAnimate = anim8.newAnimation(self.chargeEffectBackSprite.grid(repeatNum(1,1,2,2,3,2,5,2,6,1,7,1)), frameTime)
					-- self:setDust(110, false, true) --70
					-- self.heavyLaunchEffectAnimate = anim8.newAnimation(self.heavyLaunchEffectSprite.grid(repeatNum(1,3,2,3,3,3,4,3,5,3,6,3,7,1)), frameTime, 'pauseAtEnd')
					-- self.heavyLaunchEffect2Animate = anim8.newAnimation(self.heavyLaunchEffectSprite.grid(repeatNum(1,3,2,3,3,3,4,3,5,3,6,3,7,1)), frameTime, 'pauseAtEnd')
					cameraJitterY = 4
					self.knockdownX = self.x - 66 + (2 * self.flip) --96
					if self.flip == -1 then self.knockdownX = self.knockdownX + 14 end
					self.knockedEffect = true
					self.knockdownEffectAnimate:gotoFrame(1)
					self.knockdownEffectAnimate.onLoop = function()
						self.knockedEffect = false
					end
				end
			};
			{
				frames = {9,2,10,2,11,3,12,3,13,3,2,1,3,1,4,1,5,1,6,1};
				custom = function(self)
					-- self.chargeCancel = true
				end
			};
		};
		downForwardAB = {
			-- animation = "downForwardABSprite";
			--pushback:300
			special = true;
			attackbox = {pushback=300 * gameLogicMult, hitStun=16, width=30 * gameLogicMult, height=10 * gameLogicMult, relativeY = 18 * gameLogicMult, dmg=1, explosionX = 0 * gameLogicMult, priority = 2};
			{
			frames = {1,1,2,1,3,1,4,1,5,1,7,1}; --1,1,2,1,3,2,4,2
			custom = function(self)
				-- self:changeSpeed(700, 20)
				self:startTrails("super")
				cameraJitterX = 2
				self:executeSound('ex', "sfx")
				self:changeMeter(-2)
				self.dpFlip = self.flip
				if self.flip == 1 then
					self.wingX = self.x - (104 * self.flip) + 2 - 10 -- +2
				else
					self.wingX = self.x - (104 * self.flip) + 36 + 10-- +36
				end
			end
			};
			{
				frames = {7,1};
				custom = function(self)
					-- self.sprites.rushEffectSprite.sheet = self.rushPunchEffectEX
					self.rushSheet = self.sprites.rushEffectEX.sheet
					self.rushPunchEffectAnimate = anim8.newAnimation(self.sprites.rushEffect.grid(repeatNum(1,1,2,1,3,1,4,1,5,1,6,1,7,1)), frameTime, 'pauseAtEnd')
				end
			};
			{
				type="active";
				frames = {8, 1, 9, 1, 10, 2};
				custom = function(self)
					self:executeSound('rush', "sfx")
					self.rushWingAnimate = anim8.newAnimation(self.sprites.rushWing.grid(repeatNum(2,2,3,2,4,2,5,2,6,2,7,2,8,2,10,2,11,2,12,2,13,2)), frameTime, 'pauseAtEnd')
					self.wingFollow = true
					self:setDust(-40) --0
					self:changeSpeed(880, 60)
				end
			};
			{
				frames = {11, 2, 12, 2, 13 , 2};
				custom = function(self)
					self.wingFollow = false
					self:executeSound('heavyRush', {"sfx", "whiff"})
					self.attackbox.exists = false
					self.attacking = true
				end
			};
			{
				frames = {14,2};
				custom = function(self)
					self.attackbox.relativeY = 8 * gameLogicMult
					self.attackbox.exists = true
					self.attackbox.pushback = 238 * gameLogicMult
					self.attacking = true
				end
			};
			{
				frames = {15,1,16,2};
				custom = function(self)
					self:executeSound('heavyRush', {"sfx", "whiff"})
					self.attackbox.exists = false
					self.attacking = true
				end
			};
			{
				frames = {17,2};
				custom = function(self)
					self.attackbox.relativeY = 28 * gameLogicMult
					self.attackbox.exists = true
					self.attacking = true
					-- self:stopTrails()
				end
			};
			-- {
			-- 	frames = {18,1,19,2};
			-- 	custom = function(self)
			-- 		self:executeSound('tenchiDP', {"sfx", "whiff"})
			-- 		self.attackbox.exists = false
			-- 		self.attacking = true
			-- 	end
			-- };
			-- {
			-- 	frames = {20,2};
			-- 	custom = function(self)
			-- 		self.attackbox.relativeY = 18 * gameLogicMult
			-- 		self.attackbox.exists = true
			-- 		self.attacking = true
			-- 	end
			-- };
			{
				type="recovery";
				frames = {21,3,22,3}; --21,3,22,2
				-- custom = function(self)

				-- end
				custom = function(self)
					self:stopTrails()
				end
			};
			{
				frames = {22,1};
				-- custom = function(self)
				-- 	self:stopTrails()
				-- end
			};
		};
		downBackAB = {
			-- animation = "downBackAB";
		 	special = true;
		 	attackType = attackTypes.high;
		 	attackbox = {pushUp = 349 * gameLogicMult, pushback=52 * gameLogicMult, hitStun=18, width=47 * gameLogicMult, height=84 * gameLogicMult, relativeX = -36 * gameLogicMult, relativeY = -40 * gameLogicMult, dmg=1, explosionY = 20,explosionX = 20, explosionOnEnemyX = true, explosionOnEnemyY = true, priority = 1, ignoreCornerPush=true, external = true};
			--pushUp = 330 pushback=60*gamelogicmult
			{
				frames = {1,1};
				custom = function(self)
					self:executeSound('ex', "sfx")
					cameraJitterY = 2
					self.invulnerability = true
					self:changeMeter(-2)
					self:startTrails("super")
				end
			};
			{
				frames = {1,1};
				custom = function(self)
				end
			};
			{
				frames = {2,2,3,1}; --1,2,2,4
				custom = function(self)
					-- self.ignoreGravity = true
					-- self.invulnerability = true
					self.ySpeed = -1500 --850 --1300 ---1600
					self.gravity = 9500 --6100 --9500 -- 14000
					-- self:changeSpeed(900, 90) --260
					self:changeSpeed(1500, 90)
					-- self.height = airHeight + 1
					self:executeSound('launch', "sfx")
					-- self:setDust(100, false, true) --70
					-- self.heavyLaunchEffectAnimate = anim8.newAnimation(self.heavyLaunchEffectSprite.grid(repeatNum(1,3,2,3,3,3,4,3,5,3,6,3,7,1)), frameTime, 'pauseAtEnd')
				end
			}; --1,4,2,2,3,2
			{
				frames = {4,2}; --3,2,4,4
				custom = function(self)
					local difference = math.abs(self.x - self.enemy.x)
					difference = difference - 2
					if difference < 20 then difference = 20 end
				end;
			};
			{
				frames = {5,7}; --5,4
				custom = function(self)
					self:changeSpeed(0)
					self.ignoreGravity = true
					self.ySpeed = 0
					self.gravity = defaultGravity --4100
					self:executeSound('heavyRush', "sfx")
				end;
			};
			{
				frames = {6,1};
				custom = function(self)
					self.ignoreGravity = false
					self.gravity = self.gravity + 90000 --9000
					self.height = standHeight
					self.ySpeed = 300
					self.dropSheet = self.sprites.dropEffectEX.sheet
					self.dropEffectAnimate = anim8.newAnimation(self.sprites.dropEffect.grid(1,1,2,1,3,1,4,1,5,1,6,1,7,1), frameTime, 'pauseAtEnd') --1,1,2,1,3,1,4,1,5,1,6,1,7,1

					self.dpFlip = self.flip
					if self.dpFlip == 1 then
						self.dpX = self.x - 39
					else
						self.dpX = self.x + 39 + 36
					end
				end
			};
			{
				frames = {6,1};
			};
			{
				frames = {7,1};
			};
			{
				type="active";
				frames = {8,4,9,4,10,4, 11,4}; --9,4,10,4,11,4
				custom = function(self)
					self.height = standHeight
					self.ignoreCollision = true
					self.knockdownX = self.x - 66 --96
					if self.flip == -1 then self.knockdownX = self.knockdownX + 14 end
					self.knockedEffect = true
					self.knockdownEffectAnimate:gotoFrame(1)
					self.knockdownEffectAnimate.onLoop = function()
						self.knockedEffect = false
					end
					cameraJitterY = 5
					self:executeSound('naomiDP', "sfx")

					if self.flip == 1 then
						self.wingX = self.x - (104 * self.flip) + 2
					else
						self.wingX = self.x - (104 * self.flip) + 36 -- (12 * self.flip)
					end
					self.dropWingAnimate = anim8.newAnimation(self.sprites.dropWing.grid(repeatNum(1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,10,2,11,2,12,2,14,2)), frameTime, 'pauseAtEnd')

					self.enemy.extHit = true
					self:executeEffect("exPillar")
					-- self.dpFlip = self.flip
					-- if self.dpFlip == 1 then
					-- 	self.dpX = self.x - 39 + 2
					-- else
					-- 	self.dpX = self.x + 39 + 36
					-- end
					-- self.DPexplosionSheet = self.sprites.DPexplosionEX.sheet
					-- self.pillarAnimate = anim8.newAnimation(self.sprites.DPexplosion.grid(repeatNum(1,3,2,3,3,2,4,2,5,1,6,3,7,3,8,3,9,2,10,2,11,2,12,1)), frameTime, 'pauseAtEnd') --1,3,2,3,3,2,4,2,5,1,6,3,7,3,8,3,10,2,12,2,15,2,17,1
				end
			};
			{
				type="recovery";
				frames = {12, 6, 13, 4, 14, 3}; --12,4, 13, 4, 14, 3
				custom = function(self)
					self.ignoreCollision = false
					self.invulnerability = false
					self:stopTrails()

				end
			};
			{
				frames = {14,1};
				custom = function(self)
				end
			};
		};
		dashForward = {
			animation = "runSprite";
			endWith = function(self)
				self:executeAnimation("run")
				self.runCancel = true
				self.forceThrowTech = true
				self.attacking = false
			end;
			{
				frames = {1,1}; --1,3
				custom = function(self)
					self:startTrails("dash")
					self.attacking = false
					self:changeWidth(30)
					self:setDust(130, false, true) --70
					self:executeSound("naomiRun", "sfx")
					self.heavyLaunchEffectAnimate = anim8.newAnimation(self.sprites.bigDust.grid(repeatNum(1,3,2,3,3,3,4,3,5,3,6,3,7,1)), frameTime, 'pauseAtEnd')
				end
			};
			{
				frames = {1,2}; --1,3
				custom = function(self)
					self:changeWidth(30)
				end
			};
			{
				frames = {2,2}; --1,3
				custom = function(self)
					self:changeSpeed(380)
				end
			};
		};
		dashBack = {
			animation = "dashBackSprite";
			{
				type="recovery";
				frames = {1,3,2,7,3,2}; --9
				custom = function(self)
					self:startTrails("dash")
					self:executeSound("dash", "sfx")
					self:setDust(136, true) --125, true
					self:changeSpeed(-self.runSpeed * 2.2, -35) --30
				end
			};
			{
				frames = {3,1};
				custom = function(self)
					self:stopTrails()
				end
			};
		};
		runRecovery = {
			spriteName = "dashForward";
			endWith = function(self)
				self:changeSpeed(0)
				self:endAttack()
				self.noInput = false
			end;
			{
				type="recovery";
				frames = {10,2,11,1,12,1,13,1}; --9
				custom = function(self)
					self:changeSpeed(350, 50) --30
				end
			};
			{
				frames = {13,1};
				custom = function(self)
					self:stopTrails()
					self.xOffset = -36
					-- self:changeSpeed(0)
				end
			};
		};
	};
	animations = {
		idle = {
			frameTime = .06;
			frames = {1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,1,10,1,11,1,12,1,13,1,14,1,15,1,16,1,17,1,18,1,19,1,20,1,21,1,22,1,23,1,24,1,25,1,26,1,27,1,28,1,29,1,30,1,31,1,32,1};
		};
		crouch = {
			frameTime = frameTime * 4;
			frames= {1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,1,10,1,11,1,12,1,13,1,14,1,15,1,16,1,17,1,18,1,19,1,20,1,21,1,22,1,23,1,24,1,25,1,26,1,27,1,28,1,29,1,30,1};
		};
		walkForward = {
			frameTime= frameTime * 4;
			frames= {1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,1,10,1,11,1,12,1,13,1,14,1,15,1,16,1,17,1,18,1,19,1,20,1,21,1,22,1,23,1,24,1};
		};
		walkBack = {
			frameTime= frameTime * 5;
			frames= {1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,1,10,1,11,1,12,1,13,1,14,1,15,1,16,1,17,1,18,1,19,1,20,1,21,1,22,1,23,1,24,1};
		};
		jumpUp = {
			frames={3,8,4,4,5,10,6,4,7,4,8,4};
		};
		jumpForward = {
			spriteName = "jumpUp";
			frames={3,8,4,4,5,10,6,4,7,4,8,4};
		};
		jumpBack = {
			spriteName = "jumpUp";
			frames={3,8,4,4,5,10,6,4,7,4,8,4};
		};
		crouchTransition = {
			frames={1,3};
		};
		standTransition = {
			spriteName = "crouchTransition";
			frames={1,3};
			custom = function(self)
				self.yOffset = 2
			end
		};
		run = {
			spriteName = "dashForward";
			frames={3,4,4,3,5,4,6,3,7,4,8,3,9,4,2,3};
		};
		preBlock={
			spriteName="blockStand";
			endWith = "nothing";
			frames = {1,1,2,1,3,1};
		};
		preBlockReverse={
			spriteName="blockStand";
			frames = {2,1,1,1};
		};
		preBlockCrouch={
			endWith = "nothing";
			spriteName="blockCrouch";
			frames={1,2,2,1};
		};
		preBlockCrouchReverse={
			spriteName="blockCrouch";
			frames={1,2};
		};
		turn = {
			frames = {1,4};
		};
		crouchTurn = {
			frames = {1,4};
		};
		airHurt = {
			endWith = "nothing";
			{
				frames = {1,1};
			};
			{
				spriteName = "jumpUp";
				frames = {4,4,5,13,6,4,7,4,8,4};
			};
		};
		impact = {
			spriteName = "knockdown";
			frames = {11,3};
		};
		startGroundBounce = {
			spriteName = "knockdown";
			frames = {11,3,12,2,13,1,14,7}
		};
		stopGroundBounce = {
			spriteName = "knockdown";
			frames = {15, 3, 16, 3, 17, 4} --15, 3, 16, 3, 17, 3
		};
		wakeup = {
			spriteName = "knockdown";
			frames = {18,4,19,4,20,4}
		};
		death = {
			spriteName = "knockdown";
			endWith = "nothing";
			frames = {17,1}
		};
		-- local anim1 = {11,3,12,2,13,1,14,7} --11,3,12,2,13,1,14,7
		-- local anim2 = {15, 3, 16, 3, 17, 3} --15, 3, 16, 3, 17, 9
		-- local anim3 = {18,4,19,4,20,4} --18,5,19,5,20,5
		-- self:_wakeUp(11, 17, anim1, anim2, anim3, 10) --impactFrame, deathFrame, bounceAnim, downAnim, getUpAnim, xEffectOffset

		knockdown = {
			endWith = "nothing";
			frames = {1,6,2,2,3,2,4,1,5,1,6,2,7,2,8,3,9,2,10,1}; --1,6
		};
		land = {
			spriteName = "jumpUp";
			frames = {9,4,10,4,11,4};
		};
		chipDeath = {
			endWith = "nothing";
			{
				frames={1,3,2,3};
				custom=function(self)
					self.enemy:drawFirst()
				end
			};
			{
				frames={3,3,4,3,5,3,6,3};
				custom = function(self)
					self:executeSound("chipDeath", {"sfx"})
				end
			};
			{
				frames={7,3};
				custom = function(self)
					self:executeSound("chipDeath", {"sfx"})
				end
			};
			{
				frames={8,1};
				custom = function(self)
					koFinish = true
				end
			};
		};
		tech = {
			frames={1,4,2,4,3,4,4,4,5,4};
		};
		yay = {
			frames = {1,8,2,4,3,4,4,4,5,4,6,4,7,4,8,15,9,6,10,6};
			endWith = function(self)
				self:executeAnimation("yayLoop")
			end
		};
		yayLoop = {
			spriteName = "yay";
			frames = {11,45,12,6,13,45,14,6};
		};
		boo = {
			{
				frames={1,4,2,4,3,10,4,2};
			};
			{
				frames={5,2,6,2,7,16,8,4,9,8,10,2};
				custom = function(self)
						if self.player1 == true then
						self:executeSound("hatLeft", {"sfx"})
					else
						self:executeSound("hatRight", {"sfx"})
					end
				end
			};
			endWith = function(self)
				self:executeAnimation("booLoop")
					if self.player1 == true then
					self:executeSound("stompLeft", {"sfx"})
				else
					self:executeSound("stompRight", {"sfx"})
				end
			end
		};
		booLoop = {
			frames = {1,24,2,2,3,2,4,2,5,2,6,2,7,24,8,2,9,2,10,2,11,2,12,2,1,24,2,2,3,2,4,2,5,2,6,2,7,24,8,2,9,2,10,2,11,2,12,2,1,4,13,4,14,4,13,4,1,8,2,2,3,2,4,2,5,2,6,2,7,24,8,2,9,2,10,2,11,2,12,2};
		};
		win={
			endWith = function(self)
				self:executeThrow()
				self:executeMove('winEnd')
			end;
			{
				frames={6,2,7,2,8,1,9,1,10,1,13,40};
				custom = function(self)
					self:drawFirst()
					self:executeSound('launch', "sfx")
				end
			};
			{
				frames={11,1,12,1}; --11,4,12,2
				custom=function(self)
					local difference = math.abs(self.x - self.enemy.x)
					if self.flip == -1 then difference = difference - 1 end
					self:changeLocation(difference)
				end
			};
		};
		winEnd = {
			-- animation="win2Sprite";
			endWith = "nothing";
			enemyFrames={
				{14, -21, 50},
				{14, -21, 50},
				{13, -21, 53},
				{13, -21, 53},
				{13, -1, 51},
				{13, -1, 43},
				{3, 7, 46},
				{8, 10, 37},
				{8, 6, 30},
				{3, 4, 33},
				{3, 4, 43},
				{1, -7, 37},
				{1, -7, 24},
				{1, -7, 9},
				{1, -7, -8},
				{1, 1, 1}
			};
			{
				frames={1,1};
				custom=function(self)
					-- self.ignoreFloor = true
				-- self:reverseDrawOrder()
				self:executeSound(self.hitSpecialSFX, {"sfx"})
				self:throwHitstop(6, 20, 50)
				self.groundExplosionAnimate = anim8.newAnimation(self.sprites.groundExplosion.grid(repeatNum(1,2,2,2,3,2,4,2,5,1,6,1,7,1,8,1,9,1)), frameTime, 'pauseAtEnd') --1,3,2,3,3,2,4,2,5,1,6,2,7,2,8,2,9,1

				self.dpFlip = self.flip
				if self.dpFlip == 1 then
					self.dpX = self.x + 10 - 120
				else
					self.dpX = self.x - 10 + 36 + 120
				end
				--looking okay with no orange: 1,2,2,3,3,2,4,2,5,1,6,2,7,2,8,2,9,1,11,1
				--1,2,2,2,3,2,4,2,5,1,6,1,7,2
				--1,3,2,3,3,2,4,2,5,1,6,2,7,2,8,2,9,1
					self.enemy.ignoreFloor = true
					self.enemy.xOffset = self.xOffset
					self.enemy.yOffset = self.yOffset
					-- self.enemy:knockFall()
					-- self.enemy.xSpeed = 30
					-- self.enemy.ySpeed = -400
					-- self.throwBurn = true
					if self.flip == 1 then
						self.wingX = self.x - (104 * self.flip) - 8
					else
						self.wingX = self.x - (104 * self.flip) + 46 -- (12 * self.flip)
					end
					-- self.dropWingAnimate = anim8.newAnimation(self.dropWingSprite.grid(repeatNum(1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,10,2,11,2,12,2,14,2)), frameTime, 'pauseAtEnd')

					self.knockdownX = self.x - 66 --96
					if self.flip == -1 then self.knockdownX = self.knockdownX + 14 end
					self.knockedEffect = true
					self.knockdownEffectAnimate:gotoFrame(1)
					self.knockdownEffectAnimate.onLoop = function()
						self.knockedEffect = false
					end
					cameraJitterY = 4
				end;
			};
			{
				frames= {1,1};
				custom = function(self)
					self.enemy:forceEnemyEffect("burn")
					self:throwHitstop(6, -40, 75)
					self:executeSound(self.hitSpecialSFX, {"sfx"})
					self.groundExplosionAnimate = anim8.newAnimation(self.sprites.groundExplosion.grid(repeatNum(1,2,2,2,3,2,4,2,5,1,6,1,7,1,8,1,9,1)), frameTime, 'pauseAtEnd') --1,3,2,3,3,2,4,2,5,1,6,2,7,2,8,2,9,1
					if self.dpFlip == 1 then
						self.dpX = self.x + 50 - 120
					else
						self.dpX = self.x - 50 + 36 + 120
					end
				end;
			};
			{
				frames={2,1};
				custom = function(self)
					self:throwHitstop(7, -10, 55)
					self:executeSound(self.hitSpecialSFX, {"sfx"})
					self.groundExplosionAnimate = anim8.newAnimation(self.sprites.groundExplosion.grid(repeatNum(1,2,2,2,3,2,4,2,5,1,6,1,7,1,8,1,9,1)), frameTime, 'pauseAtEnd') --1,3,2,3,3,2,4,2,5,1,6,2,7,2,8,2,9,1
					if self.dpFlip == 1 then
						self.dpX = self.x - 10 - 120
					else
						self.dpX = self.x + 10 + 36 + 120
					end
				end;
			};
			{
				frames={2,1,3,2};
				custom = function(self)
					self:executeSound(self.hitSpecialSFX, {"sfx"})
					self:executeSound('grab', "sfx")
				end
			};
			{
				frames={4,2,6,2,7,2,8,2,9,20,10,2,11,2};
				custom = function(self)
					self.enemy:stopEnemyEffect()
				end
			};
			{
				frames={12,1,13,1,14,1,15,1};
				custom = function(self)
					self:executeSound('ex', "sfx")
					self:executeSound('launch', "sfx")
				-- custom = function(self)
				-- 	self:reverseDrawOrder()
				end
			};
			{
				frames={16,1}; --16,80
				custom=function(self)
					self.enemy.xOffset = 400
					self.enemy.ignoreFloor = false
				end
			};
		};
	};
	throw = {
		-- spriteName = "throw";
		enemyFrames = {
			{5, 24, -14},
			{7, 20, -16},
			{8, 18, -21},
			{9, 17, -23},
			{9, 14, -19},
			{9, 2, -16},
			{9, 0, -16},
			{9, 2, -16},
			{12, 5, -13},
			{13, 7, -16},
			{14, 9, -12},
			{16, 16, -11}, --16, 16, -11
			{0, 0, 0},
			{0, 0, 0},
			{1, 16, -18},
			{1, 11, -21},
			{14, -12, -13},
			{15, 5, -16},
			{16, 22, -10},
			{0, 0, 0},
			{0, 0, 0},
			{0, 0, 0}
		};
		start = {
			{frames = {1,3,2,3,3,3}};
			{
				frames = {4,1,3,2};
				custom = function(self)
					self:stopTrails()
					self.attackbox.priority = 1
					self:throwHitstop(2, 40, 30) --3, 40, 37
					self.enemy:forceEnemyEffect("burn")
					self:executeSound(self.hitSpecialSFX, {"sfx"})
					self.combo = self.combo + 1
					cameraJitterX = 1
					self.enemy:changeHealth(1)
				end
			};
			{
				frames = {4,1,3,2};
				custom = function(self)
					self:throwHitstop(2, 20, 20)
					cameraJitterX = 1
					self:executeSound(self.hitSpecialSFX, {"sfx"})
				end
			};
			{
				frames = {4,1,3,2};
				custom = function(self)
					self:throwHitstop(2, 50, 0)
					cameraJitterX = 1
					self:executeSound(self.hitSpecialSFX, {"sfx"})
				end
			};
			{
				frames = {4,1,3,2};
				custom = function(self)
					self:throwHitstop(2, 30, 50)
					cameraJitterX = 1
					self:executeSound(self.hitSpecialSFX, {"sfx"})
				end
			};
			{
				frames = {5,2,6,2,7,2,8,2};
				custom = function(self)
					self.enemy:stopEnemyEffect()
				end
			};
			-- {
			-- 	frames = {8,4,9,4,10,4,11,4};
			-- 	-- data = {dmg = 1, hitstop = 9, explosionX = 101, explosionY = 101}; --TODO: get correct explosionX and explosionY
			-- 	custom = function(self)
			-- 		-- self:throwHitstop(8, 40, 37)
			-- 		-- self.enemy:changeHealth(1)
			-- 		--self.enemy.health = self.enemy.health - 1
			-- 	end
			-- }
		};
		forward = {
			{
				frames = {9,2,10,2,11,2};
				-- data = {dmg = 1, hitstop = 9, explosionX= 101, explosionY = 101, changeLocation = 90, changeSpeed = 350, changeYSpeed = -600}; --TODO: get correct explosionX and explosionY
			};
			{
				frames = {12,1};
				custom = function(self)
					self.ignoreFloor = false
					self.enemy.ignoreFloor = false
					cameraJitterY = 4
					ignoreCameraJitterX = true
					self:executeSound(self.hitSpecialSFX, {"sfx"})
					self:throwHitstop(12, 0, 164, "burn")
					self.combo = self.combo + 1
					self.enemy:changeHealth(1)
					self.dpFlip = self.flip
					if self.dpFlip == 1 then
						self.dpX = self.x + 10 - 60
					else
						self.dpX = self.x - 10 + 36 + 60
					end

					self.enemy:executeKnockdownEffect(70)
					-- cameraJitterY = 4
					--looking okay with no orange: 1,2,2,3,3,2,4,2,5,1,6,2,7,2,8,2,9,1,11,1
					--1,2,2,2,3,2,4,2,5,1,6,1,7,2
					--1,3,2,3,3,2,4,2,5,1,6,2,7,2,8,2,9,1
					self.groundExplosionAnimate = anim8.newAnimation(self.sprites.groundExplosion.grid(repeatNum(1,2,2,2,3,2,4,2,5,1,6,1,7,1,8,1,9,1)), frameTime, 'pauseAtEnd') --1,3,2,3,3,2,4,2,5,1,6,2,7,2,8,2,9,1
				end
			};
			{
				frames = {13,6,14,6};
				custom = function(self)
					self.enemy:changeLocation(30)
					self.enemy:changeSpeed(300) --350
					self.enemy.ySpeed = -250
					self.enemy.y = self.enemy.y + 20
					self.enemy.ignoreGravity = false
					self.enemy:knockFall()
					ignoreCameraJitterX = false
				end
			};
		};
		backward = {
			{
				frames = {15,2,16,2};
				-- data = {dmg = 1, changeLocation = 10, changeSpeed = 500, changeYSpeed = -600};
			};
			{
				frames = {17,2,18,2};
				custom = function(self)
					self:reverseDrawOrder()
					self.enemy.flip = -self.enemy.flip
				end
			};
			{
				frames = {19,1};
				custom = function(self)
					self:reverseDrawOrder()
					self.ignoreFloor = false
					self.enemy.ignoreFloor = false
					cameraJitterY = 4
					ignoreCameraJitterX = true
					self:executeSound(self.hitSpecialSFX, {"sfx"})
					self:throwHitstop(8, 0, 164, "burn")
					self.combo = self.combo + 1
					self.enemy:changeHealth(1)
					self.dpFlip = self.flip

					self.enemy:executeKnockdownEffect(90)

					if self.dpFlip == 1 then
						self.dpX = self.x - 110 - 50
					else
						self.dpX = self.x + 110 + 36 + 50
					end
					self.groundExplosionAnimate = anim8.newAnimation(self.sprites.groundExplosion.grid(repeatNum(1,2,2,2,3,2,4,2,5,1,6,1,7,1,8,1,9,1)), frameTime, 'pauseAtEnd')
				end
			};
			{
				frames = {20,4,21,4,22,4};
				custom = function(self)
					--self.enemy.health = self.enemy.health - 1
					--self.enemy:changeLocation(-10)
					self.enemy:changeSpeed(400) --500
					self.enemy.ySpeed = -200 --600
					self.enemy.y = self.enemy.y + 20
					self.enemy.ignoreGravity = false
					self.ignoreCollision = false
					self.enemy:knockFall()
					ignoreCameraJitterX = false
					--self.enemy.flip = -self.enemy.flip
					-- self.enemy.animation:gotoFrame(5) --skip first few frames of knockdown
					self.faceRight = not self.faceRight
				end
			};
			{
				custom = function(self)
					self:changeLocation(-14)
				end
			};
		};
	};
	effects = {
		pillar = {
			spriteName = "DPexplosion";
			frames = {1,3,2,3,3,2,4,2,5,1,6,3,7,3,8,3,9,2,10,2,11,2,12,1};
			relativeX = -37;
			relativeY = -228;
			followPlayer = true;
			ignoreParry = true;
		};
		exPillar = {
			spriteName = "DPexplosionEX";
			frames = {1,3,2,3,3,2,4,2,5,1,6,3,7,3,8,3,9,2,10,2,11,2,12,1};
			relativeX = -37;
			relativeY = -228; -- -106
			followPlayer = true;
			ignoreParry = true;
		};
		hitEffect = {
			frames = {1,2,2,2,3,2,4,2,5,1,6,1,7,2};
		};
		ember = {
			frames = {1,2,2,2,3,2,4,2,5,2,6,1,7,1,8,1,9,1,10,1};
			-- relativeX = -20 * gameLogicMult;
			-- relativeY = -20 * gameLogicMult;
			gravity = 7;
			ySpeed = -220;
			xSpeed = 20;
		};
		emberLeft = {
			spriteName = "ember";
			frames = {1,2,2,2,3,2,4,2,5,2,6,1,7,1,8,1,9,1,10,1}; --{1,2,2,2,3,2,4,2,5,2,6,1,7,1,8,1,9,1,10,1}
			gravity = 7;
			ySpeed = -210;
			xSpeed = -20
		};
		ember2 = {
			frames = {1,2,2,2,3,2,4,2,5,4,6,1,7,1,8,1,9,1,10,1}; --{1,4,2,4,3,4,4,4,5,4,6,1,7,1,8,1,9,1,10,1}; --4,4
			-- relativeX = -20 * gameLogicMult;
			-- relativeY = -20 * gameLogicMult;
			gravity = 8;
			ySpeed = -120;
			xSpeed = 5;
		};
	};
	nameplate = {
		{
			frames = {1,8};
			custom = function(self, host)
				if host.player1 == true then
					host:executeSound("nameplateClickLeft", {"sfx", "nameplate1"})
				else
					host:executeSound("nameplateClickRight", {"sfx", "nameplate2"})
				end
			end
		};
		{
			frames = {2,2,3,2};
			custom = function(self, host)
				if host.player1 == true then
					host:executeSound("nameplateLeft", {"sfx", "nameplate1"})
				else
					host:executeSound("nameplateRight", {"sfx", "nameplate2"})
				end
				host:executeEffect("ember", self.x + 56, self.y + 16 + 10)
				host:executeEffect("emberLeft", self.x + 56, self.y + 18 + 10)
				host:executeEffect("ember2", self.x + 46, self.y + 20 + 10)
				host:executeEffect("ember", self.x + 66, self.y + 30 + 10)
				host:executeEffect("ember2", self.x + 76, self.y + 26 + 10)
				host:executeEffect("ember", self.x + 86, self.y + 30 + 10)
				host:executeEffect("ember2", self.x + 10, self.y + 24 + 10)
				host:executeEffect("emberLeft", self.x + 12, self.y + 38 + 10)
				host:executeEffect("ember", self.x + 26, self.y + 32 + 10)
				host:executeEffect("ember2", self.x + 36, self.y + 14 + 10)
				host:executeEffect("ember", self.x + 94, self.y + 34 + 10)
				host:executeEffect("emberLeft", self.x + 20, self.y + 34 + 10)
				host:executeEffect("ember", self.x + 50, self.y + 12 + 10)
				host:executeEffect("emberLeft", self.x + 54, self.y + 22 + 10)
				host:executeEffect("ember2", self.x + 42, self.y + 24 + 10)
				host:executeEffect("ember", self.x + 60, self.y + 32 + 10)
				host:executeEffect("ember2", self.x + 72, self.y + 28 + 10)
				host:executeEffect("ember", self.x + 90, self.y + 28 + 10)
				host:executeEffect("ember2", self.x + 14, self.y + 26 + 10)
				host:executeEffect("emberLeft", self.x + 8, self.y + 34 + 10)
				host:executeEffect("ember", self.x + 32, self.y + 36 + 10)
				host:executeEffect("ember2", self.x + 30, self.y + 10 + 10)
				host:executeEffect("ember", self.x + 86, self.y + 30 + 10)
				host:executeEffect("emberLeft", self.x + 22, self.y + 36 + 10)

				host:executeEffect("ember", self.x + 56 - 4, self.y + 16 -12)
				host:executeEffect("emberLeft", self.x + 56 - 4, self.y + 18 -12)
				host:executeEffect("ember2", self.x + 46 - 4, self.y + 20 -12)
				host:executeEffect("ember", self.x + 66 - 4, self.y + 30 -12)
				host:executeEffect("ember2", self.x + 76 - 4, self.y + 26 -12)
				host:executeEffect("ember", self.x + 86 - 4, self.y + 30 -12)
				host:executeEffect("ember2", self.x + 10 - 4, self.y + 24 -12)
				host:executeEffect("emberLeft", self.x + 12 - 4, self.y + 38 -12)
				host:executeEffect("ember", self.x + 26 - 4, self.y + 32 -12)
				host:executeEffect("ember2", self.x + 36 - 4, self.y + 14 -12)
				host:executeEffect("ember", self.x + 94 - 4, self.y + 34 -12)
				host:executeEffect("emberLeft", self.x + 20 - 4, self.y + 34 -12)
				host:executeEffect("ember", self.x + 50 - 4, self.y + 12 -12)
				host:executeEffect("emberLeft", self.x + 54 - 4, self.y + 22 -12)
				host:executeEffect("ember2", self.x + 42 - 4, self.y + 24 -12)
				host:executeEffect("ember", self.x + 60 - 4, self.y + 32 -12)
				host:executeEffect("ember2", self.x + 72 - 4, self.y + 28 -12)
				host:executeEffect("ember", self.x + 90 - 4, self.y + 28 -12)
				host:executeEffect("ember2", self.x + 14 - 4, self.y + 26 -12)
				host:executeEffect("emberLeft", self.x + 8 - 4, self.y + 34 -12)
				host:executeEffect("ember", self.x + 32 - 4, self.y + 36 -12)
				host:executeEffect("ember2", self.x + 30 - 4, self.y + 10 -12)
				host:executeEffect("ember", self.x + 86 - 4, self.y + 30 -12)
				host:executeEffect("emberLeft", self.x + 22 - 4, self.y + 36 -12)

				host:executeEffect("ember", self.x + 56 + 8, self.y + 16 + 6)
				host:executeEffect("emberLeft", self.x + 56 + 8, self.y + 18 + 6)
				host:executeEffect("ember2", self.x + 46 + 8, self.y + 20 + 6)
				host:executeEffect("ember", self.x + 66 + 8, self.y + 30 + 6)
				host:executeEffect("ember2", self.x + 76 + 8, self.y + 26 + 6)
				host:executeEffect("ember", self.x + 78 + 8, self.y + 30 + 6)
				host:executeEffect("ember2", self.x + 10 + 8, self.y + 24 + 6)
				host:executeEffect("emberLeft", self.x + 12 + 8, self.y + 38 + 6)
				host:executeEffect("ember", self.x + 26 + 8, self.y + 32 + 6)
				host:executeEffect("ember2", self.x + 36 + 8, self.y + 14 + 6)
				host:executeEffect("ember", self.x + 88 + 8, self.y + 34 + 6)
				host:executeEffect("emberLeft", self.x + 20 + 8, self.y + 34 + 6)
				host:executeEffect("ember", self.x + 50 + 8, self.y + 12 + 6)
				host:executeEffect("emberLeft", self.x + 54 + 8, self.y + 22 + 6)
				host:executeEffect("ember2", self.x + 42 + 8, self.y + 24 + 6)
				host:executeEffect("ember", self.x + 60 + 8, self.y + 32 + 6)
				host:executeEffect("ember2", self.x + 72 + 8, self.y + 28 + 6)
				host:executeEffect("ember", self.x + 82 + 8, self.y + 28 + 6)
				host:executeEffect("ember2", self.x + 14 + 8, self.y + 26 + 6)
				host:executeEffect("emberLeft", self.x + 8 + 8, self.y + 34 + 6)
				host:executeEffect("ember", self.x + 32 + 8, self.y + 36 + 6)
				host:executeEffect("ember2", self.x + 30 + 8, self.y + 10 + 6)
				host:executeEffect("ember", self.x + 78 + 8, self.y + 30 + 6)
				host:executeEffect("emberLeft", self.x + 22 + 8, self.y + 36 + 6)
			end
		};
		{
			frames = {4,2,5,2};
			custom = function(self, host)
				host:executeEffect("ember", self.x + 56, self.y + 16)
				host:executeEffect("emberLeft", self.x + 56, self.y + 18)
				host:executeEffect("ember", self.x + 46, self.y + 20)
				host:executeEffect("ember2", self.x + 66, self.y + 30)
				host:executeEffect("ember", self.x + 76, self.y + 26)
				host:executeEffect("ember2", self.x + 86, self.y + 30)
				host:executeEffect("ember", self.x + 10, self.y + 24)
				host:executeEffect("emberLeft", self.x + 12, self.y + 28)
				host:executeEffect("ember2", self.x + 26, self.y + 32)
				host:executeEffect("ember", self.x + 36, self.y + 14)
				host:executeEffect("ember", self.x + 94, self.y + 34)
				host:executeEffect("emberLeft", self.x + 20, self.y + 34)
				host:executeEffect("emberLeft", self.x + 20, self.y + 34)
				host:executeEffect("ember", self.x + 50, self.y + 12)
				host:executeEffect("emberLeft", self.x + 54, self.y + 22)
				host:executeEffect("ember2", self.x + 42, self.y + 24)
				host:executeEffect("ember", self.x + 60, self.y + 32)
				host:executeEffect("ember2", self.x + 72, self.y + 28)
				host:executeEffect("ember", self.x + 90, self.y + 28)
				host:executeEffect("ember2", self.x + 14, self.y + 26)
				host:executeEffect("emberLeft", self.x + 8, self.y + 34)
				host:executeEffect("ember", self.x + 32, self.y + 36)
				host:executeEffect("ember2", self.x + 30, self.y + 10)
				host:executeEffect("ember", self.x + 86, self.y + 30)
				host:executeEffect("emberLeft", self.x + 22, self.y + 36)

				host:executeEffect("ember", self.x + 56 + 4, self.y + 16 - 8)
				host:executeEffect("emberLeft", self.x + 56 + 4, self.y + 18 - 8)
				host:executeEffect("ember", self.x + 46 + 4, self.y + 20 - 8)
				host:executeEffect("ember2", self.x + 66 + 4, self.y + 30 - 8)
				host:executeEffect("ember", self.x + 76 + 4, self.y + 26 - 8)
				host:executeEffect("ember2", self.x + 86 + 4, self.y + 30 - 8)
				host:executeEffect("ember", self.x + 10 + 4, self.y + 24 - 8)
				host:executeEffect("emberLeft", self.x + 12 + 4, self.y + 28 - 8)
				host:executeEffect("ember2", self.x + 26 + 4, self.y + 32 - 8)
				host:executeEffect("ember", self.x + 36 + 4, self.y + 14 - 8)
				host:executeEffect("ember", self.x + 94 + 4, self.y + 34 - 8)
				host:executeEffect("emberLeft", self.x + 20 + 4, self.y + 34 - 8)
				host:executeEffect("emberLeft", self.x + 20 + 4, self.y + 34 - 8)
				host:executeEffect("ember", self.x + 50 + 4, self.y + 12 - 8)
				host:executeEffect("emberLeft", self.x + 54 + 4, self.y + 22 - 8)
				host:executeEffect("ember2", self.x + 42 + 4, self.y + 24 - 8)
				host:executeEffect("ember", self.x + 60 + 4, self.y + 32 - 8)
				host:executeEffect("ember2", self.x + 72 + 4, self.y + 28 - 8)
				host:executeEffect("ember", self.x + 90 + 4, self.y + 28 - 8)
				host:executeEffect("ember2", self.x + 14 + 4, self.y + 26 - 8)
				host:executeEffect("emberLeft", self.x + 8 + 4, self.y + 34 - 8)
				host:executeEffect("ember", self.x + 32 + 4, self.y + 36 - 8)
				host:executeEffect("ember2", self.x + 30 + 4, self.y + 10 - 8)
				host:executeEffect("ember", self.x + 86 + 4, self.y + 30 - 8)
				host:executeEffect("emberLeft", self.x + 22 + 4, self.y + 36 - 8)
			end
		};
		{
			frames = {6,1,7,1,8,1,9,1,10,1,11,1,12,1,13,1}; --6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2
			custom = function(self, host)
				host:executeEffect("ember2", self.x + 56, self.y + 6)
				host:executeEffect("emberLeft", self.x + 56, self.y + 8)
				host:executeEffect("ember2", self.x + 46, self.y + 10)
				host:executeEffect("ember2", self.x + 66, self.y + 20)
				host:executeEffect("ember2", self.x + 76, self.y + 16)
				host:executeEffect("ember2", self.x + 86, self.y + 20)
				host:executeEffect("ember2", self.x + 10, self.y + 14)
				host:executeEffect("emberLeft", self.x + 12, self.y + 28)
				host:executeEffect("ember2", self.x + 26, self.y + 32)
				host:executeEffect("ember2", self.x + 36, self.y + 24)
				host:executeEffect("ember2", self.x + 94, self.y + 24)
				host:executeEffect("emberLeft", self.x + 20, self.y + 24)
				host:executeEffect("emberLeft", self.x + 20, self.y + 34)
				host:executeEffect("ember2", self.x + 50, self.y + 12)
				host:executeEffect("emberLeft", self.x + 54, self.y + 22)
				host:executeEffect("ember2", self.x + 42, self.y + 24)
				host:executeEffect("ember2", self.x + 60, self.y + 32)
				host:executeEffect("ember2", self.x + 72, self.y + 28)
				host:executeEffect("ember2", self.x + 90, self.y + 28)
				host:executeEffect("ember2", self.x + 14, self.y + 26)
				host:executeEffect("emberLeft", self.x + 8, self.y + 34)
				host:executeEffect("ember2", self.x + 32, self.y + 36)
				host:executeEffect("ember2", self.x + 30, self.y + 10)
				host:executeEffect("ember2", self.x + 86, self.y + 30)
				host:executeEffect("emberLeft", self.x + 22, self.y + 36)
			end
		};
	};
	colors = {
		default = {
			dust = {255,164,42};
			mainUI = {187, 72, 0};
			health = {255,102,7};
			-- trailSuper = {255, 255, 0};
			-- trailDash = {255,122,0};
			trailSuper = {
				{215,191,0}; --black
				{255,255,255}; --white
				{255,255,0}; --other
			};

			sprite = {
				{255,132,21}; --naomi orange
				{255,255,179}; --naomi yellow

				{128,44,0}; --dark red hands
				{255,45,0}; --red hands
				{255,107,9}; --orange hands
				{255,171,57}; --light orange hands

				{122,107,0}; --darkest yellow EX
				{215,191,0}; --dark yellow EX
				{255,223,24}; --medium yellow EX
				{255,255,0}; --yellow EX
				{254,255,119}; --light yellow EX
			};
			effects = {
				{255,45,0}; --red hands

				{131,27,19}; --dark red energy
				{254,125,17}; --orange energy
				{255,223,23}; --medium yellow energy


				{215,191,0}; --dark yellow EX
				{255,255,0}; --yellow EX
			};
			hit = {
				{255,45,0}; --red hands
				{255,223,23}; --medium yellow energy
			};

			burn = {
				{199,56,0}; --black
				{255,180,0}; --white
				{248,248,248}; --other
			};
			burnEX = {
				{225,209,0}; --black
				{255,255,125}; --white
				{248,248,248}; --other
			};
			meterChunk = {
				--meterOne
				{215,191,0}; --darkGreen
				{246,255,109}; --mediumGreen
				{255,255,255}; --lightestGreen

				--meterTwo
				{254,255,96}; --darkGreen
				{249,255,174}; --mediumGreen
				{255,255,255}; --lightestGreen
			};
			meterIcon = {
				{215,191,0};
			};
		};
		alt1 = { --red
			sprite = {
				{247,0,0}; --naomi orange
				{194,242,255}; --naomi yellow

				{142,64,53}; --dark red hands
				{255,0,0}; --red hands
				{255,98,80}; --orange hands
				{254,155,124}; --light orange hands

				{31,63,86}; --darkest yellow EX
				{159,234,255}; --dark yellow EX
				{16,176,255}; --medium yellow EX
				{0,99,231}; --yellow EX
				{233,245,255}; --light yellow EX
			};
			effects = {

				{255,0,0}; --red hands

				{150,0,44}; --dark red energy
				{255,0,27}; --orange energy
				{255,159,178}; --medium yellow energy

				{0,91,231}; --dark yellow EX
				{64,174,255}; --yellow EX
			};
			hit = {
				{255,0,0}; --red hands
				{255,159,178}; --medium yellow energy
			};
			burn = {
				{168,0,0}; --black
				{247,115,101}; --white
				{248,248,248}; --other
			};
			burnEX = {
				{0,0,168}; --black
				{101,143,247}; --white
				{248,248,248}; --other
			};
			meterChunk = {
					--meterOne
					{16,143,255}; --darkBlue
					{64,174,255}; --medium blue
					{131,221,251}; --lightest blue

					--meterTwo
					{99,187,255}; --darkblue
					{164,216,255}; --medium blue
					{233,236,255}; --lightest blue
			};
			meterIcon = {
				{0,99,231};
			};

			trailSuper = {
			{0,99,231}; --black
			{255,255,255}; --white
			{67,214,247}; --other
			};

			mainUI = {113, 0, 0};
			health = {255,0,0};
			dust = {255,64,64};
		};
		alt3 = {
			sprite = {
				{249,243,0}; --naomi orange
				{243,190,206}; --naomi yellow

				{122,107,0}; --dark red hands
				{255,255,0}; --red hands
				{255,223,24}; --orange hands
				{215,191,0}; --light orange hands

				{193,0,67}; --darkest yellow EX
				{255,30,106}; --dark yellow EX
				{255,93,163}; --medium yellow EX
				{255,154,182}; --yellow EX
				{255,176,226}; --light yellow EX
			};
			effects = {

				{255,255,0}; --red hands

				{95,92,0}; --dark red energy
				{223,225,0}; --orange energy
				{255,223,23}; --medium yellow energy

				{255,30,106}; --dark yellow EX
				{255,154,182}; --yellow EX
			};
			hit = {
				{255,255,0}; --red hands
				{255,223,23}; --medium yellow energy
			};
			burn = {
				{255,209,0}; --black
				{255,255,125}; --white
				{248,248,248}; --other
			};
			burnEX = {
				{219,0,103}; --black
				{255,135,173}; --white
				{248,248,248}; --other
			};
			meterIcon = {
				{219,0,103};
			};
			dust = {255,255,0};
			mainUI = {113, 113, 0};
			health = {215,215,0};
			meterChunk = {
				--meterOne
				{255,16,83}; --darkBlue
				{255,64,126}; --medium blue
				{251,131,191}; --lightest blue

				--meterTwo
				{255,100,146}; --darkblue
				{255,164,178}; --medium blue
				{255,239,233}; --lightest blue
			};
			trailSuper = {
			{255,30,106}; --black
			{255,255,255}; --white
			{255,132,235}; --other
			};
		};
		alt4 = {
			sprite = {
				{130,198,0}; --naomi orange
				{187,255,179}; --naomi yellow

				{0,133,0}; --dark red hands
				{0,255,0}; --red hands
				{149,255,32}; --orange hands
				{198,255,110}; --light orange hands

				{59,25,55}; --darkest yellow EX
				{153,85,193}; --dark yellow EX
				{214,109,255}; --medium yellow EX
				{233,154,255}; --yellow EX
				{230,182,255}; --light yellow EX
			};
			effects = {

				{0,255,0}; --red hands

				{19,97,14}; --dark red energy
				{0,200,0}; --orange energy
				{202,255,127}; --medium yellow energy

				{153,85,193}; --dark yellow EX
				{233,154,255}; --yellow EX
			};
			hit = {
				{0,255,0}; --red hands
				{202,255,127}; --medium yellow energy
			};
			burn = {
				{44,154,0}; --black
				{80,255,0}; --white
				{248,248,248}; --other
			};
			burnEX = {
				{128,0,197}; --black
				{199,125,255}; --white
				{248,248,248}; --other
			};
			meterIcon = {
				{153,85,193};
			};
			dust = {0,255,0};
				mainUI = {0, 113, 0};
				health = {0,255,0};
			meterChunk = {
				--meterOne
				{148,0,247}; --darkGreen
				{191,87,199}; --mediumGreen
				{240,128,240}; --lightestGreen

				--meterTwo
				{240,128,240}; --darkGreen
				{255,175,255}; --mediumGreen
				{255,228,242}; --lightestGreen
			};
			trailSuper = {
			{153,0,193}; --black
			{255,255,255}; --white
			{204,142,255}; --other
			};
		};
		alt5 = { --blue
			dust = {128,183,192};
			mainUI = {0,75,88}; --UIcolor
			health = {0,216,255};
			sprite = {
				{128,183,192}; --naomi orange
				{213,248,255}; --naomi yellow
				{0,51,62}; --dark red hands
				{0,216,255}; --red hands
				{0,162,166}; --orange hands
				{0,110,125}; --light orange hands

				{148,0,0}; --darkest yellow EX
				{255,121,121}; --dark yellow EX
				{255,69,69}; --medium yellow EX
				{255,0,0}; --yellow EX
				{255,228,242}; --light yellow EX
			};
			effects = {
				{0,216,255}; --red hands

				{0,35,51}; --dark red energy
				{0,110,125}; --orange energy
				{147,255,255}; --medium yellow energy


				{255,0,0}; --dark yellow EX
				{255,121,121}; --yellow EX
			};
			hit = {
				{0,216,255}; --red hands
				{147,255,255}; --medium yellow energy
			};

			burn = {
				{0,110,125}; --black
				{91,232,255}; --white
				{248,248,248}; --other
			};
			burnEX = {
				{225,209,0}; --black
				{255,255,125}; --white
				{248,248,248}; --other
			};
			meterChunk = {
				--meterOne
				{255,0,0}; --dark
				{255,69,69}; --medium
				{255,121,121}; --light

				--meterTwo
				{255,121,121}; --darkGreen
				{255,180,180}; --mediumGreen
				{255,228,228}; --lightestGreen
			};
			meterIcon = {
				{255,0,0};
			};
			trailSuper = {
			{255,0,0}; --black
			{255,255,255}; --white
			{255,121,121}; --other
			};
		};
		alt6 = { --grey
			dust = {155,155,167};
			mainUI = {64,64,64}; --UIcolor
			health = {155,155,167};
			sprite = {
				{64,64,64}; --naomi orange
				{155,155,167}; --naomi yellow
				{53,0,79}; --dark red hands
				{191,87,199}; --red hands
				{148,0,247}; --orange hands
				{99,0,148}; --light orange hands

				{191,87,199}; --darkest yellow EX
				{240,128,240}; --dark yellow EX
				{255,144,234}; --medium yellow EX
				{255,175,255}; --yellow EX
				{255,228,242}; --light yellow EX
			};
			effects = {
				{99,0,148}; --red hands

				{53,0,79}; --dark red energy
				{148,0,247}; --orange energy
				{191,87,199}; --medium yellow energy


				{240,128,240}; --dark yellow EX
				{255,175,255}; --yellow EX
			};
			hit = {
				{99,0,148}; --red hands
				{191,87,199}; --medium yellow energy
			};

			burn = {
				{121,0,170}; --black
				{213,41,255}; --white
				{248,248,248}; --other
			};
			burnEX = {
				{225,209,0}; --black
				{255,255,125}; --white
				{248,248,248}; --other
			};
			meterChunk = {
				--meterOne
				{148,0,247}; --darkGreen
				{191,87,199}; --mediumGreen
				{240,128,240}; --lightestGreen

				--meterTwo
				{240,128,240}; --darkGreen
				{255,175,255}; --mediumGreen
				{255,228,242}; --lightestGreen
			};
			meterIcon = {
				{191,87,199};
			};
			trailSuper = {
			{148,0,247}; --black
			{255,255,255}; --white
			{240,128,240}; --other
			};
		};
		alt7 = {
			sprite = {
				{155,71,160}; --naomi orange
				{230,190,243}; --naomi yellow

				{59,25,55}; --dark red hands
				{153,85,193}; --red hands
				{214,109,255}; --orange hands
				{233,154,255}; --light orange hands

				{0,133,0}; --darkest yellow EX
				{0,255,0}; --dark yellow EX
				{107,255,66}; --medium yellow EX
				{149,255,32}; --yellow EX
				{193,255,129}; --light yellow EX
			};
			effects = {

				{153,85,193}; --red hands

				{43,0,49}; --dark red energy
				{110,0,167}; --orange energy
				{197,147,255}; --medium yellow energy

				{0,255,0}; --dark yellow EX
				{149,255,32}; --yellow EX
			};
			hit = {
				{153,85,193}; --red hands
				{197,147,255}; --medium yellow energy
			};
			burn = {
				{128,0,197}; --black
				{199,125,255}; --white
				{248,248,248}; --other
			};
			burnEX = {
				{44,154,0}; --black
				{80,255,0}; --white
				{248,248,248}; --other
			};
			meterIcon = {
				{44,154,0};
			};
			dust = {171,43,200};
			block = {171,43,200};
			mainUI = {71,42,69};
			health = {171,43,200};
			meterChunk = {
				--meterOne
				{19,176,11}; --darkBlue
				{0,255,0}; --medium blue
				{144,255,96}; --lightest blue

				--meterTwo
				{108,255,94}; --darkblue
				{192,255,162}; --medium blue
				{240,255,236}; --lightest blue
			};
			trailSuper = {
			{33,206,0}; --black
			{255,255,255}; --white
			{129,255,118}; --other
			};
		};
		alt8 = {
			sprite = {
				{255,97,254}; --naomi orange
				{169,255,203}; --naomi yellow

				{193,0,67}; --dark red hands
				{255,30,106}; --red hands
				{255,93,163}; --orange hands
				{255,154,182}; --light orange hands

				{0,149,147}; --darkest yellow EX
				{0,220,161}; --dark yellow EX
				{79,255,166}; --medium yellow EX
				{154,234,255}; --yellow EX
				{203,255,219}; --light yellow EX
			};
			effects = {

				{255,30,106}; --red hands

				{103,0,50}; --dark red energy
				{255,65,148}; --orange energy
				{255,154,182}; --medium yellow energy

				{0,220,161}; --dark yellow EX
				{154,234,255}; --yellow EX
			};
			hit = {
				{255,30,106}; --red hands
				{255,154,182}; --medium yellow energy
			};
			burn = {
				{219,0,103}; --black
				{255,135,173}; --white
				{248,248,248}; --other
			};
			burnEX = {
				{0,154,106}; --black
				{0,255,216}; --white
				{248,248,248}; --other
			};
			meterIcon = {
				{0,154,106};
			};
			dust = {255,100,146};
			mainUI = {149,0,52};
			health = {255,100,146};
			meterChunk = {
				--meterOne
				{0,151,155}; --darkBlue
				{0,221,180}; --medium blue
				{169,255,183}; --lightest blue

				--meterTwo
				{99,232,255}; --darkblue
				{164,251,255}; --medium blue
				{234,246,255}; --lightest blue
			};
			trailSuper = {
			{0,178,129}; --black
			{255,255,255}; --white
			{159,255,180}; --other
			};
		};

	};
};

function Naomi:hitFloor()
	self:_hitFloor()
	if self.move.name == "land" then
		self:stopTrails()
	end
end

function Naomi:initiate()
	self.effectFlicker = false

	self.wingFollow = false

	self.numCharges = 0

	self.drawSmoke = false

	self.pillarDraw = false

	self.hitstopExplosionFlipOffset = 136

	self.dpX = 0
	self.dpFlip = 1

	self.hitLightSFX = "naomiLight"
	self.hitHeavySFX = "naomiLow"
	self.hitLowSFX = "naomiLow"
	self.hitSpecialSFX = "naomiSpecial"

	self.wingX = 0
	self.chargeX = 0



	--PARENT OVERWRITES
	self.yOffset = self.defaultYOffset
	self.xOffset = self.defaultXOffset
	-- self.AI = AI()

	self:_initiate()

	self.pushbackDustOffset = -9

	self.requestHitSheet = "burn"

	self.meterAnimate = anim8.newAnimation(self.sprites.meter.grid(repeatNum(1,1)), frameTime, 'pauseAtEnd')

	self.neutralABRequirement = true
	self.downBackABRequirement = false
	self.downForwardABRequirement = false

	self.rushSheet = self.sprites.rushEffect.sheet
	self.dropSheet = self.sprites.dropEffect.sheet
	self.DPexplosionSheet = self.sprites.DPexplosion.sheet
end

function Naomi:reset()
	self:_reset()
	self.numCharges = 0
	self.neutralABRequirement = true
end

function Naomi:update(dt)
	self:_update(dt)
	if self.wingFollow then
		if self.flip == 1 then
			self.wingX = self.x - (104 * self.flip) + 2
		else
			self.wingX = self.x - (104 * self.flip) + 36 -- (12 * self.flip)
		end
	end
	if self.state == "hypeJumpRight" then
		self.xSpeed = self.runSpeed * 1.5
		self:changeWidth(57)
		self.height = 94 --94
	elseif self.state == "hypeJumpLeft" then
		self.xSpeed = self.runSpeed * -1.5
		self.height = 94 --84
	end
end

function Naomi:alwaysUpdate(dt)
	self.effectFlicker = not self.effectFlicker
	if self.meterAmount >= 54 then
		--self.meterFull = true
		self.meterAmount = 0
		self.meterPixel = 0
		self.numCharges = self.numCharges + 1
		--self.meterAnimate:draw(self.meterSheet, self.meterX, self.meterY, 0, 3, 3, 0, 0)
		self.meterAnimate = anim8.newAnimation(self.meterSprite.grid(self.numCharges + 1,1), frameTime)
	end

	if not self.enemy.superStop then
		-- self.smokeAnimate:update(dt)
		self.pillarAnimate:update(dt)
		self.groundExplosionAnimate:update(dt)

		self.dropWingAnimate:update(dt)
		self.rushWingAnimate:update(dt)

		-- self.groundSphereAnimate:update(dt)
		self.rushPunchEffectAnimate:update(dt)
		self.dropEffectAnimate:update(dt)
	end
	self:_alwaysUpdate(dt)
end

function Naomi:attackUpdates()
	self:_attackUpdates()
end

function Naomi:controlUpdate(left, right, up, down, buttonA, buttonB, tapA, tapB, specialA, specialB)
	self.blockHigh = false
	self.blockLow = false

	if tapA then
		buttonA = true
	end

	if tapB then
		buttonB = true
	end

	if self.runCancel and hitstop <= 0 and self.freezeTime == 0 then --don't forget to make this false on normalhit
		if not buttonA and self.lastFrameA then
			self.repeatA = false
		end

		if not buttonB and self.lastFrameB then
			self.repeatB = false
		end

		self.lastFrameA = buttonA
		self.lastFrameB = buttonB

		if self.training and trainingOptions.infiniteMeter and self.combo == 0 then
			self:fullMeter()
		end

		if up then
			local tempSpeed = self.xSpeed
			self:jump(280, self.jumpSpeed * .85, 'forward')
			self.x = self.x + (19 * self.flip)
			self:changeWidth(19)
			local decaySpeed = 30
			if tempSpeed < 0 then tempSpeed = -tempSpeed end
			self:changeSpeed(tempSpeed, decaySpeed)
			self.runCancel = false
			self.forceThrowTech = false
			return
		elseif buttonA and not self.repeatA then
			local tempSpeed = self.xSpeed
			local decaySpeed = 30
			if down then
				self:executeMove('lowA')
				tempSpeed = tempSpeed + (150 * self.flip)
			else
				self:executeMove('standA')
				self.ABTimer = 0
			end
			self.x = self.x + (19 * self.flip)
			self:changeWidth(19)
			if tempSpeed < 0 then tempSpeed = -tempSpeed end
			self:changeSpeed(tempSpeed, decaySpeed)
			self.runCancel = false
			self.forceThrowTech = false
			return
		elseif buttonB and not self.repeatB then
			local tempSpeed = self.xSpeed
			local decaySpeed = 30
			if down then
				self:executeMove('lowB')
			else
				self:executeMove('standB')
				self.throwTimer = 0
				self.ABTimer = 0
			end
			self.x = self.x + (19 * self.flip)
			self:changeWidth(19)
			if tempSpeed < 0 then tempSpeed = -tempSpeed end
			self:changeSpeed(tempSpeed, decaySpeed)
			self.runCancel = false
			self.forceThrowTech = false
			return
		elseif not right and self.flip == 1 then
			self:executeMove('runRecovery')
			self.x = self.x + (19 * self.flip)
			self.xOffset = -36
			self:changeWidth(19)
			self.runCancel = false
			self.forceThrowTech = false
			return
		elseif not left and self.flip == -1 then
			self:executeMove('runRecovery')
			self.x = self.x + (19 * self.flip)
			self.xOffset = -36
			self:changeWidth(19)
			self.runCancel = false
			self.forceThrowTech = false
			return
		end
	else
		self:_controlUpdate(left, right, up, down, buttonA, buttonB, tapA, tapB, specialA, specialB)
	end
end

-- function Naomi:throwConnect()
-- 	self.noInput = true
-- 	self:flushBar()
-- 	self.ignoreCollision = true
-- 	self.invulnerability = true
-- 	self.throwForward = true
-- 	self.throwTech = false
-- 	self.attacking = false
-- 	self.image = self.throwSheet
-- 	self.xOffset = -27
-- 	self.yOffset = -21

-- 	self.enemy.xOffset = -27
-- 	self.enemy.yOffset = -21
-- 	TEsound.play('sounds/throw.mp3', "sfx")

-- 	if self.x >= stageWidth - self.width - 42 then
-- 		self.x = stageWidth - self.width - 45
-- 	elseif self.x <= 42 then
-- 		self.x = 45
-- 	end

-- 	if self.flip == 1 then
-- 			self.attackbox.explosionX = self.attackbox.x -23
-- 	else
-- 			self.attackbox.explosionX = self.attackbox.x + self.attackbox.width + 23 -152
-- 	end
-- 	self.attackbox.explosionY = self.attackbox.y - 60

-- 	self:throwAnimations(1, {1,3,2,3,3,3,4,3,5,10,6,3,7,3,8,2}, 1)
-- end

function Naomi:draw()
	self:_draw()
	if flicker then
		love.graphics.setShader(self.shaders.effects)
		self.dropWingAnimate:draw(self.sprites.dropWing.sheet, math.floor(self.wingX),22,0,self.dpFlip * gameLogicMult, gameLogicMult)
		self.rushWingAnimate:draw(self.sprites.rushWing.sheet, math.floor(self.wingX),90,0,self.dpFlip * gameLogicMult, gameLogicMult)
	end
	love.graphics.setShader()
end

function Naomi:hitstunAnimation(hitstun, animType)
	if animType == 0 then --standlow
		self.yOffset = 0
	elseif animType == 1 then --crouchlow
		self.yOffset = -42
	elseif animType == 2 then --standhigh
		self.yOffset = 3
	elseif animType == 3 then --crouchHigh
		self.yOffset = -21
		self.xOffset = -30
	end
	self:_hitstunAnimation(hitstun, animType)
end

-- function Naomi:normalHit(hitstun, pushback, ext)
-- 	self:_normalHit(hitstun,pushback,ext)
-- end

function Naomi:hitResponse(alsoHit, freezeHurt, hurtboxHit)
	self.wingFollow = false
	self:_hitResponse(alsoHit, freezeHurt, hurtboxHit)
end

function Naomi:hitReset()
	self.chargeCancel = false
	self.forceThrowTech = false
	self.wingFollow = false

	self.dpFollow = false
	if self.player1 then
		TEsound.stop("chargeP1")
	else
		TEsound.stop("chargeP2")
	end

	self:_hitReset()
end

function Naomi:normalBlock(pushback)
	if self.blockLow then
		self.yOffset = -21
	else
		self.yOffset = -3
		self.xOffset = -30
	end
	self:_normalBlock(pushback)

	if self.health <= 0 then
		self.yOffset = 0
	end
end

function Naomi:wakeUp()
	-- local anim1 = {11,3,12,2,13,1,14,7} --11,3,12,2,13,1,14,7
	-- local anim2 = {15, 3, 16, 3, 17, 3} --15, 3, 16, 3, 17, 9
	-- local anim3 = {18,4,19,4,20,4} --18,5,19,5,20,5
	self:_wakeUp(10) --impactFrame, deathFrame, bounceAnim, downAnim, getUpAnim, xEffectOffset
end

function Naomi:dustDraw()
	self:_dustDraw()
	love.graphics.setShader(self.shaders.effects)
	self.pillarAnimate:draw(self.DPexplosionSheet,math.floor(self.dpX), -106,0,self.dpFlip * gameLogicMult,gameLogicMult)
	self.groundExplosionAnimate:draw(self.sprites.groundExplosion.sheet, math.floor(self.dpX), 70, 0, self.dpFlip * gameLogicMult, gameLogicMult) --80
	if self.flip == 1 then
		self.rushPunchEffectAnimate:draw(self.rushSheet, math.floor(self.x - (38)), 150, 0, gameLogicMult, gameLogicMult)
		self.dropEffectAnimate:draw(self.dropSheet, math.floor(self.x - 6), math.floor(self.y - 48), 0, gameLogicMult, gameLogicMult)
	else
		self.rushPunchEffectAnimate:draw(self.rushSheet, math.floor(self.x + (38 + 38)), 150, 0, -gameLogicMult, gameLogicMult)
		self.dropEffectAnimate:draw(self.dropSheet, math.floor(self.x + 6 + self.width), math.floor(self.y - 48), 0, -gameLogicMult, gameLogicMult)
	end

	if self.drawSmoke then
		if self.flip == 1 then
			self.smokeAnimate:draw(self.smokeSheet,self.smokeX + 2,self.smokeY,0,3,3)
		else
			self.smokeAnimate:draw(self.smokeSheet,self.smokeX - 66,self.smokeY,0,-3,3)
		end
	end
	love.graphics.setShader()
end

function Naomi:frameBarAnimation()
	local ending = 0
	while ending <= 60 and self.frameBar[ending] > 0 do
		if self.frameBar[ending] == 1 then
			love.graphics.setColor(100, 255, 100) --25,200,25
		elseif self.frameBar[ending] == 2 then
			love.graphics.setColor(255,46,46) --255,25,25
		elseif self.frameBar[ending] == 3 then
			love.graphics.setColor(255,255,100) --25,25,200
		elseif self.frameBar[ending] == 4 then
			love.graphics.setColor(66,214,247)
		elseif self.frameBar[ending] == 5 then
			love.graphics.setColor(255,137,52)
		elseif self.frameBar[ending] == 6 then
			love.graphics.setColor(255,255,255)
		elseif self.frameBar[ending] == 7 then
			love.graphics.setColor(241,62,160)
		else
			love.graphics.setColor(50,50,0)
		end
		if self.player1 then
			love.graphics.rectangle("fill", 120 + (3 * ending), 33, 3, 3)
			--love.graphics.rectangle("fill", 123 + (6 * ending), 33, 3, 3)
			love.graphics.rectangle("fill", 123 + (3 * ending), 30, 3, 3)
			--love.graphics.rectangle("fill", 126 + (6 * ending), 30, 3, 3)
			love.graphics.rectangle("fill", 126 + (3 * ending), 27, 3, 3)
			--love.graphics.rectangle("fill", 129 + (6 * ending), 27, 3, 3)
		else
			love.graphics.rectangle("fill", 681 - (120 + (3 * ending)), 33, 3, 3)
			--love.graphics.rectangle("fill", 684 - (123 + (6 * ending)), 33, 3, 3)
			love.graphics.rectangle("fill", 681 - (123 + (3 * ending)), 30, 3, 3)
			--love.graphics.rectangle("fill", 684 - (126 + (6 * ending)), 30, 3, 3)
			love.graphics.rectangle("fill", 681 - (126 + (3 * ending)), 27, 3, 3)
			--love.graphics.rectangle("fill", 684 - (129 + (6 * ending)), 27, 3, 3)
		end
		ending = ending + 1
	end
	love.graphics.setColor(255,255,255)
end

function Naomi:throwHit()
	self.chargeCancel = false
	self.attackbox.ignoreCornerPush = false
	self.ignoreCollision = false
	self.ignoreGravity = false
	self.forceThrowTech = false
	-- self.chargeEffectAnim = anim8.newAnimation(self.chargeEffectGrid(14,1), frameTime)
	-- self.chargeEffectAnim2 = anim8.newAnimation(self.chargeEffectGrid(14,1), frameTime)
	self:_throwHit()
end

function Naomi:meterAnimation()
	love.graphics.setShader(self.shaders.meterIcon)
	if self.player1 then
		self.meterAnimate:draw(self.sprites.meter.sheet, self.meterX, self.meterY - 2 + self.meterJitter, 0, gameLogicMult, gameLogicMult, 0, 0)
		love.graphics.setShader(self.shaders.meterChunk)
		for i=1, 4 do
			local d = i-1
			local extra = 0
			if i == 2 or i == 4 then
				extra = 2
			end
			self.meterChunkArray[i]:draw(self.sprites.meterChunk.sheet, (self.meterX + 90) - (d * 16) + extra, self.meterY + 12 + self.meterJitter, 0, gameLogicMult, gameLogicMult, 0, 0) --6,111
		end
	else
		-- self.meterAnimate:draw(self.meterSprite.sheet, self.meterX, self.meterY - 2, 0, gameLogicMult, gameLogicMult, 0, 0)
		self.meterAnimate:draw(self.sprites.meter.sheet, self.meterX, self.meterY - 2 + self.meterJitter, 0, -gameLogicMult, gameLogicMult, 0, 0)
		love.graphics.setShader(self.shaders.meterChunk)
		for i=1, 4 do
			local d = i-1
			local extra = 0
			if i == 2 or i == 4 then
				extra = 2
			end
			self.meterChunkArray[i]:draw(self.sprites.meterChunk.sheet, (self.meterX - 90) + (d * 16) - extra, self.meterY + 12 + self.meterJitter, 0, -gameLogicMult, gameLogicMult, 0, 0)
			-- self.meterChunkArray[i]:draw(self.meterChunkSprite.sheet, (self.meterX - 90) + (d * 16), self.meterY + 12, 0, gameLogicMult, gameLogicMult, 0, 0) --6,111
		end
	end
	love.graphics.setShader()
end

function Naomi:roundCount()
	if self.wins > 0 then
		if self.player1 then
			love.graphics.draw(self.roundSheet,0,0,0,3,3)
		else
			love.graphics.draw(self.roundSheet, 684, 0, 0, -3, 3)
		end
	end
end

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

function Naomi:fullMeter()
	if self.meterAmount < 4 then
		self.meterAmount = 0
		self:changeMeter(4)
	end
end

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

function Naomi:changeStock(amount)
	local oldStock = self.stockAmount
	self.stockAmount = self.stockAmount + amount
	if self.stockAmount == 0 then
		self.downBackABRequirement = false
		self.downForwardABRequirement = false
		self.meterAnimate = anim8.newAnimation(self.meterSprite.grid(repeatNum(1,2)), frameTime, 'pauseAtEnd')
		return
	else
		self.downBackABRequirement = true
		self.downForwardABRequirement = true
	end
	if self.stockAmount >= 1 then
		self.stockAmount = 1
		self.meterAnimate = anim8.newAnimation(self.meterSprite.grid(repeatNum(self.stockAmount * 2,2,self.stockAmount * 2 + 1,2)), frameTime, 'pauseAtEnd')
		for i=1, 4 do
  			self.meterChunkArray[i] = anim8.newAnimation(self.meterChunkSprite.grid(repeatNum(4,2,3,1)), frameTime, 'pauseAtEnd')
  		end
		return
	end
	self.meterAnimate = anim8.newAnimation(self.meterSprite.grid(repeatNum(self.stockAmount * 2,2,self.stockAmount * 2 + 1,2)), frameTime, 'pauseAtEnd') --14
	self.meterAnimate.onLoop = function()
		self.meterAnimate = anim8.newAnimation(self.meterSprite.grid(repeatNum(self.stockAmount * 2 + 1,1)), frameTime) --14
		if oldStock < self.stockAmount then
			self:resetMeter()
			self.meterAmount = 0
		elseif oldStock == 3 and self.meterAmount == 4 then
			self:resetMeter()
			self.meterAmount = 0
  		end
	end
end

function Naomi:loadSprites(color)
	local folder
	self.color = color

  		folder = 'player/naomi/'

  		-- self.drainR = 242
  		-- self.drainG = 118
  		-- self.drainB = 0

  		-- self.healthRed = 255
	  	-- self.healthGreen = 102
	  	-- self.healthBlue = 7

  	self:_loadSprites(folder)


  	self.pillarAnimate = anim8.newAnimation(self.sprites.DPexplosion.grid(repeatNum(12,1)), frameTime)
  	self.groundExplosionAnimate = anim8.newAnimation(self.sprites.groundExplosion.grid(repeatNum(9,1)), frameTime)

  	self.dropWingAnimate = anim8.newAnimation(self.sprites.dropWing.grid(14,1), frameTime)
  	self.rushWingAnimate = anim8.newAnimation(self.sprites.rushWing.grid(13,1), frameTime)

  	self.rushPunchEffectAnimate = anim8.newAnimation(self.sprites.rushEffect.grid(7,1), frameTime)
  	self.dropEffectAnimate = anim8.newAnimation(self.sprites.dropEffect.grid(7,1), frameTime)

  	self.meterAnimate = anim8.newAnimation(self.sprites.meter.grid(1,1), frameTime)

  	self.hitEffectAnimate = anim8.newAnimation(self.sprites.hitEffect.grid(repeatNum(1,2,2,2,3,2,4,2,5,1,6,1,7,2)), frameTime) --1,3,2,3,3,2,4,2,5,1,6,3,7,2,8,2,9,1
 	self.hitEffectAnimate.onLoop = function()
 		self.enemy.showExplosion = false
 	end
end