Hector.lua

From Pocket Rumble Wiki
Jump to: navigation, search

hector.lua[edit]

Hector = {
	moves = {
		standA = {
			attackbox = {customEffect = "hitEffectSmall", pushback=189 * gameLogicMult, hitStun=12, width=17 * gameLogicMult, height=11 * gameLogicMult, dmg=1, relativeY=33 * gameLogicMult, explosionX = -2 * gameLogicMult, explosionY = 10 * gameLogicMult, priority = 4};
			{
				frames = {1,1,8,2,2,1};
				custom = function(self)
					self:executeSound('lightWhiff', {"sfx", "whiff"})
				end
			};
			{
				type = "active";
				frames = {3,2,4,2};
			};
			{
				type = "recovery";
				frames = {5,2,6,1};
			};
		};
		lowA = {
			attackbox = {customEffect = "hitEffectSmall", pushback=90 * gameLogicMult, hitStun=12, width=25 * gameLogicMult, height=36 * gameLogicMult, dmg=1, relativeY=0 * gameLogicMult, explosionX = -20, explosionY = 15};
			{
				frames = {3,1,4,2,5,2};
				custom = function(self)
					self:executeSound('mediumWhiff', {"sfx", "whiff"})
				end
			};
			{
				type = "active";
				frames = {6,4};
			};
			{
				type = "recovery";
				frames = {6,6,7,3,8,3,9,3};
			};
		};
		lowB = {
			attackbox = {pushUp = -430,pushback=100 * gameLogicMult, hitStun=13, width=47 * gameLogicMult, height=14 * gameLogicMult, dmg=1, relativeY=22 * gameLogicMult, explosionX = -50, explosionY = -10, priority = 3, external = true};
			{ --pushUp = 300
				frames = {1,4}; --1,2,2,2,3,1,4,1,5,1
				custom = function(self)
					self:executeSound('heavyWhiff', {"sfx", "whiff"})
				end
			};
			{
				frames = {2,4};
				custom = function(self)
					self:changeWidth(29)
				end
			};
			{
				type = "active";
				frames = {3,5}; --6,3,7,1
				custom = function(self)
					self:executeEffect('lowBEffect')
					self:executeEffect('lowBEffectFront')
					self:executeEffect('lowBArm')
				end
			};
			{
				type = "recovery";
				frames = {3,7,4,2,5,1,7,1,9,1,11,1,13,1,15,1,17,1,19,7,20,2}; --25
			};
			{
				frames = {21,2}; --2
				custom = function(self)
					self:changeWidth(19)
				end
			};
		};
		standB = {
			attackbox = {pushUp = 163 * gameLogicMult, pushback=45 * gameLogicMult, hitStun=18, width=35 * gameLogicMult, height=14 * gameLogicMult, relativeY =  16 * gameLogicMult, dmg=1, explosionX = -30, explosionY = 10,  priority = 3, external = true};
			{
				frames = {1,4,2,7};
				custom = function(self)
					self:executeSound('heavyWhiff', {"sfx", "whiff"})
				end
			};
			{
				type = "active";
				frames = {3,6};
				custom = function(self)
					self:changeWidth(32)
					self:executeEffect('standBEffect')
				end
			};
			{
				type = "recovery";
				frames ={3,3,4,3,5,3,6,3};
			};
			{
				frames = {7,2,8,7,9,3};
				custom = function(self)
					self:changeWidth(19)
				end
			};
		};
		jumpA = {
			attackbox = {customEffect = "hitEffectSmall", pushback=145 * gameLogicMult, hitStun=14, width=38 * gameLogicMult, height=11 * gameLogicMult, dmg=1, relativeY=15 * gameLogicMult,
			explosionX = -10 * gameLogicMult, explosionY = 5 * gameLogicMult, priority = 4, ignoreCornerPush=true}; --hitstun=16,pushback=145
			{
				frames = {1,3,2,3,3,2}; --{1,3,2,3,3,1}
				custom = function(self)
					self:executeSound('mediumWhiff', {"sfx", "whiff"})
				end
			};
			{
				type = "active";
				frames = {4,2,5,1,4,1};
			};
			{
				type = "recovery";
				frames = {4,1,12,3,13,3}; --2,4,1,16
			};
			endWith = function(self)
				self:executeAnimation("jumpUp", {
				  frames={7,3,8,3,9,4,10,10};
				});
			end
		};
		jumpB = {
			attackbox = {customEffect = "hitEffect2", pushback=44 * gameLogicMult, hitStun=22, width=45 * gameLogicMult, height=22 * gameLogicMult, dmg=1, relativeX= (-35 * gameLogicMult),
			relativeY=44 * gameLogicMult, explosionX = -48, explosionY = -60, priority = 3, ignoreCornerPush=true, external = true}; --pushback=66 * gameLogicMult hitstun=23
			{ --hitstun=22
				frames = {1,5,2,5,3,1}; --11
				custom = function(self)
					self:executeSound('mediumWhiff', {"sfx", "whiff"})
				end
			};
			{
				type = "active";
				frames = {4,7}; --7
				custom = function(self)
					self:executeEffect('jumpBEffect')
				end
			};
			{
				type = "recovery";
				frames = {5,2,6,2,7,2,8,1}; --7
			};
			endWith = function(self)
				self:executeAnimation("jumpB",
				{
					{
					  frames={8,99};
					};
				}
				);
			end
		};
		downForwardA = {
			{
				frames = {4,1,5,1,6,1};
				custom = function(self)
					self:executeSound('naomiHands', {"sfx"})
					if self.health == 0 then
						self:executeAnimation("chipDeath")
					end
				end;
			};
			{
				frames = {8,1,9,1,10,1};
				custom = function(self)
					--self:executeSound('naomiHands', {"sfx"})
				end;
			};
			{
				frames = {12,1,13,1,14,1};
				custom = function(self)
					self:executeSound('naomiHands', {"sfx"})
				end;
			};
			{
				type = "recovery";
				frames = {15,2,16,1};
				custom = function(self)
					if self.health > 1 then
						self:changeHealth(1)
						self:changeMeter(1)
					end
					self:executeProjectile("downForwardAProjectile")
						self:executeEffect("sparkDownForwardA")
				end
			};
			{
				frames = {16,2};
				custom = function(self)
					self.invulnerability = false
				end
			};
			{
				type="recovery";
				frames = {16,7,17,3}; --1,30
				custom = function(self)
					if rootState.infiniteHealth then
						self:returnHealth()
					end
				end
			};
		};
		downBackA = {
			attackType = attackTypes.high;
			attackbox = {customEffect = "hitEffect2", external=true,pushUp=-200*gameLogicMult,pushback=50 * gameLogicMult, hitStun=12, width=50 * gameLogicMult, height=40 * gameLogicMult, relativeY = 0 * gameLogicMult, dmg=1, explosionX = -8 * gameLogicMult, explosionY = -10 * gameLogicMult, priority = 2};
			{
				frames = {1,2,2,1,3,2,4,2}; --17
				custom = function(self)
					self:executeSound('jump', {"sfx", "whiff"})
					-- self:setDust(-40) --0
					self:stopTrails()
					self.throwInvuln = true
					if self.health == 0 then
						self:executeAnimation("chipDeath")
					end
				end
			};
			{
				frames = {5,2}; --this is where going up and down can happen
				custom = function(self)
					self.ySpeed = -1000
				end
			};
			{
				frames = {6,2}; --this is where going up and down can happen
				custom = function(self)
					self.ySpeed = -500
				end
			};
			{
				frames = {7,2}; --this is where going up and down can happen
				custom = function(self)
					self.ySpeed = 0
					self:executeSound('mediumWhiff', {"sfx", "whiff"})
				end
			};
			{
				frames = {8,2}; --this is where going up and down can happen
				custom = function(self)
					self.ySpeed = 500
				end
			};
			{
				frames = {10,2}; --this is where going up and down can happen
				custom = function(self)
					self.ySpeed = 1000
				end
			};
			{
				type="active";
				frames = {11,2};
				custom = function(self)
					self:executeSound('knockdown', {"sfx"})
					-- self:changeSpeed(600,27) --375,27
					if self.health > 1 then
						self:changeHealth(1)
						self:changeMeter(1)
					end
					self.attackbox.exists = true
					self.attacking = true
					self:executeEffect("downBackAEffect")
				end
			};
			-- {
			-- 	frames = {7,3,8,2};
			-- 	custom = function(self)
			-- 		TEsound.stop("whiff")
			-- 		self:executeSound('heavyRush', {"sfx", "whiff"})
			-- 		self.attackbox.exists = false
			-- 		self.attacking = true
			-- 		self:changeSpeed(400,27)
			-- 	end
			-- };
			-- {
			-- 	frames = {9,2};
			-- 	custom = function(self)
			-- 		self.attackbox.pushUp = -200 * gameLogicMult
			-- 		self.attackbox.exists = true
			-- 		self.attacking = true
			-- 	end
			-- };
			{
				type="recovery";
				frames = {12,2,13,9,14,3,15,2,16,2}; --18
				custom = function(self)
					self.throwInvuln = false
					if rootState.infiniteHealth then
						self:returnHealth()
					end
				end;
			};
		};
		downForwardB = {
			attackType = attackTypes.low;
			attackbox = {external=true,pushUp = 180 * gameLogicMult,pushback=110 * gameLogicMult, hitStun=8, width=40 * gameLogicMult, height=15 * gameLogicMult, relativeY = 26 * gameLogicMult, dmg=1, explosionX = 0 * gameLogicMult, explosionY = -2 * gameLogicMult, priority = 2};
			{
				frames = {2,3,3,3,4,2}; --12
				custom = function(self)
					self:executeSound('antlerCharge', {"sfx", "whiff"})
					self:setDust(-40) --0
					self:changeSpeed(600,27) --375,27
					if self.health == 0 then
						self:executeAnimation("chipDeath")
					end
					self:stopTrails()
				end
			};
			{
				frames = {7,2,8,2}; --12
				custom = function(self)
					self:executeSound('antlerAir', {"sfx", "whiff"})
				end
			};
			{
				type="active";
				frames = {9,4};
				custom = function(self)
					self:executeEffect("lowSlashEffect")
					if self.health > 1 then
						self:changeHealth(1)
						self:changeMeter(1)
					end
					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.pushUp = 200 * gameLogicMult
			-- 		self.attackbox.exists = true
			-- 		self.attacking = true
			-- 	end
			-- };
			{
				type="recovery";
				frames = {10,4,11,2,12,2,13,2}; --12
				custom = function(self)
					if rootState.infiniteHealth then
						self:returnHealth()
					end
				end;
			};
		};
		downBackB = {
			attackbox = {customEffect = "hitEffect3", external=true,forceForward = true, pushback=60 * gameLogicMult, hitStun=15, width=50, height=40, dmg=1, priority=1, explosionX= -30, explosionY= 30, relativeY = 0 * gameLogicMult};
			{
				frames = {1,1,2,2,3,2};
				custom = function(self)
					self:executeSound('antlerAir', {"sfx"})
					self.invulnerability = true
					if self.health == 0 then
						self:executeAnimation("chipDeath")
						self.invulnerability = false
					end
				end
			};
			{
				type = "active";
				frames = {4,2,5,1};
				custom = function(self)
					if self.health > 1 then
						self:changeHealth(1)
						self:changeMeter(1)
					end
					self.attackbox.exists = true
					self.attackbox.pushUp = 250 * gameLogicMult
					self.attackbox.pushback = 50 * gameLogicMult
					self.attackbox.relativeY = -36 * gameLogicMult
					self.attackbox.relativeX = -20 * gameLogicMult
					self.attackbox.height = self.attackbox.height + self.height - 20
					self.attackbox.width = 60 * gameLogicMult
					self:executeEffect("downBackBEffect")
				end
			};
			{
				frames = {5,2};
				custom = function(self)
					self.invulnerability = false
				end
			};
			{
				type="recovery";
				frames = {6,2}; --1,30
			};
			{
				frames = {7,2,8,11,9,3,10,3};
				custom = function(self)
					self:executeSound('naomiHands', {"sfx"})
					self:executeEffect("sparkDownBackB")
					if rootState.infiniteHealth then
						self:returnHealth()
					end
				end
			};
		};
		neutralAB = {
			frameData = {{type="startup", frameCount=19}, {type="recovery", frameCount=19}};
			-- attackbox = {onlyKnockdown = true, pushUp = 20 * gameLogicMult, pushback = 100 * gameLogicMult, width=20 * gameLogicMult, height=20 * gameLogicMult, dmg=1, relativeX=0, relativeY = (12 * gameLogicMult),
			-- relativeY=20 * gameLogicMult, priority = 3, special = true};
			{
				frames = {1,4,2,3,3,3,4,3,5,3,6,3};--17
				custom = function(self)
					self:executeSound('tenchiSuperRumble', {"sfx", "turd", "whiff"})
					-- self:changeMeter(1)
				end;
			};
			{
				type = "recovery";
				frames = {7,3,8,3,9,3,10,3,11,3,12,3,13,3};
				custom = function(self)
					if self.meterAmount > 0 then
						self:changeHealth(-self.meterAmount, true)
					end
					self:changeMeter(-self.meterAmount)
					self.invulnerability = true
					self.ignoreInvulnOutline = true
					self.requestSS = true
					TEsound.stop("turd")
					self:executeSound('parryWhiff', {"sfx"})
					self:executeSound('rush', {"sfx"})

				end;
			};
			{
				frames = {14,4,15,3,16,3,17,3,18,3,19,3}; --25
				custom = function(self)
					self:superStopContinue()
					self.invulnerability = false
					self.ignoreInvulnOutline = false
				end
			};
		};
		dashForward = {
			spriteName = "dash";
			special=true;
			attackbox = {external=true,pushUp = 100 * gameLogicMult, pushback=60 * gameLogicMult, hitStun=12, width=80 * gameLogicMult, height=10 * gameLogicMult, relativeX = -85 * gameLogicMult, relativeY = 20 * gameLogicMult, dmg=1, explosionX = -100 * gameLogicMult, explosionY = 0 * gameLogicMult, priority = 2, forceFlip = true};
			{
				frames = {14,1,2,1};
				custom = function(self)
					self:executeSound('launch', {"sfx"})
					self.ignoreCollision = true
				end
			};
			{
				frames = {3,2,4,2,5,2};
				custom = function(self)
					self:changeSpeed(1700)
				end
			};
			{
				frames = {6,1,7,1,8,1,9,1,10,1}; --6,1,7,1,8,1,9,1,10,1
				custom = function(self)
					self:changeSpeed(0)
					self:executeSound('naomiHands', {"sfx"})
					self.x = self.x + (8 * self.flip)
					self.ignoreCollision = false
				end
			};
			{
				type="active";
				frames = {11,1};
				custom = function(self)
					if self.health > 1 then
						self:changeHealth(1)
						self:changeMeter(1)
					end
					self:executeEffect("spark")
					self:executeEffect("downForwardBEffect")
				end
			};
			{
				type="active";
				frames = {11,5,11,2};
				custom = function(self)
				end
			};
			{
				type="recovery";
				frames = {11,7,11,5,12,5}; --11,3,12,4,14,4
				custom = function(self)
					if rootState.infiniteHealth then
						self:returnHealth()
					end
				end
			};
			{
				custom = function(self)
					if (self.enemy.x + self.enemy.width/2 > self.x + self.width/2) then
						self.flip = 1
						self.faceRight = true
					else
						self.flip = -1
						self.faceRight = false
					end
				end
			};
		};
		dashBack = {
			attackbox = {customEffect = "hitEffect4", external=true,pushUp = 227 * gameLogicMult, pushback=60 * gameLogicMult, hitStun=12, width=45 * gameLogicMult, height=10 * gameLogicMult, relativeX = 0 * gameLogicMult, relativeY = 20 * gameLogicMult, dmg=1, explosionX = 1 * gameLogicMult, explosionY = -2 * gameLogicMult, priority = 2};
			special=true;
			{
				frames = {1,2};
				custom = function(self)
					self.flip = self.flip
					self:executeSound('naomiHands', {"sfx"})
					self.ignoreCollision = true
					self.invulnerability = true
				end
			};
			{
				frames = {2,2,4,2,5,2};
				custom = function(self)
					self:changeSpeed(-800)
				end
			};
			{
				frames = {7,1,9,1,10,1}; --6,1,7,1,8,1,9,1,10,1
				custom = function(self)
					self:changeSpeed(0)
					self.invulnerability = false
					self.x = self.x + (8 * self.flip)
					self.ignoreCollision = false
				end
			};
			{
				type="active";
				frames = {11,2};
				custom = function(self)
					if self.health > 1 then
						self:changeHealth(1)
						self:changeMeter(1)
					end
					self:executeEffect("dashBackSpark")
					self:executeEffect("dashBackEffect")
				end
			};
			{
				type="active";
				frames = {11,5};
				custom = function(self)
				end
			};
			{
				type="recovery";
				frames = {11,4,12,3}; --11,16,12,3
				custom = function(self)
					if rootState.infiniteHealth then
						self:returnHealth()
					end
				end
			};
			{
				custom = function(self)
					if (self.enemy.x + self.enemy.width/2 > self.x + self.width/2) then
						self.flip = 1
						self.faceRight = true
					else
						self.flip = -1
						self.faceRight = false
					end
				end
			};
		};
	};
	throw = {
		enemyFrames = {
			{5,28,-11}, --f1
			{6,25,-11}, --f2
			{7,21,-11}, --f3
			{7,19,-11}, --f4
			{1,25,-14}, --f5
			{2,24,-15}, --f6
			{1,25,-14}, --f7
			{5,28,-11}, --f8
			{17,28,-7}, --f9
			{18,27,-7}, --f10
			{19,25,-8}, --f11
			{0,0,0}, --f12
			{0,0,0}, --f13
			{0,0,0}, --f14
			{0,0,0}, --f15
			{5,27,-11}, --f16
			{17,27,-7}, --f17
			{18,26,-7}, --f18
			{19,13,-8}, --f19
			{19,-4,-8}, --f20
			{5,-30,-11}, --f21
			{0,0,0}, --f22
			{0,0,0}, --f23
			{0,0,0}, --f24
		};
		start = {
			{frames = {1,3,2,3,3,3,4,3,5,2}}; --5,2,6,4 --1,4,2,4,3,4,4,2,5,1,6,1
			{
				frames = {6,3,7,3}; --8,4,9,4,10,4,11,4
				custom = function(self)
					self:executeSound('lowAttack', {"sfx"})
					self:throwHitstop(6, 38, 34)
					cameraJitterX = 2
					self.combo = self.combo + 1
					self.enemy:changeHealth(1)
				end
			};
		};
		forward = {
			{
				frames = {8,3,9,3,10,3,11,2}; --11,4,13,2,14,2,15,2
				data = {dmg = 1, hitstop = 9, explosionX= 101, explosionY = 101, changeLocation = 90, changeSpeed = 350, changeYSpeed = -600};
			};
			{
				frames = {12,3,13,3,14,3};
				custom = function(self)
					self:executeSound('heavyAttack', {"sfx"})
					self.combo = self.combo + 1
					self.enemy:changeHealth(1)
					self:throwHitstop(8, 38, 34)
					cameraJitterX = 2
					self.enemy:changeLocation(30)
					self.enemy:changeSpeed(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 = {16,3,17,3,18,3}; --21,4,22,4,23,4
				data = {dmg = 1, changeLocation = 10, changeSpeed = 500, changeYSpeed = -600};
			};
			{
				frames = {19,3,20,3,21,2};
				custom = function(self)
					self:reverseDrawOrder()
					self:changeSpeed(700, 50)
					self:executeSound('grab', "sfx")
					-- self:changeLocation(22)
				end
			};
			{
				frames = {22,2,23,2,24,2};
				custom = function(self)
					-- self:changeLocation(22)
					self.combo = self.combo + 1
					self.enemy:changeHealth(1)
					self.enemy:changeSpeed(-200)
					self.enemy.ySpeed = -190
					self.enemy.y = self.enemy.y + 20
					self.enemy.ignoreGravity = false
					self.ignoreCollision = false
					self.enemy:knockFall()
					self.enemy.animation:gotoFrame(5)
					self.faceRight = not self.faceRight
					self.ignoreFloor = false
					self.enemy.ignoreFloor = false
				end
			};
		};
	};
	animations = {
		idle = {
			frames = {1,4,2,4,3,4,4,4,5,4,6,42,7,6,8,6,9,4,10,4,11,4,12,30};
		};
		turn = {
			frames = {1,4};
		};
		crouchTransition = {
			frames = {1,3};
		};
		crouch = {
			frames = {1,4,2,3,3,37,4,3,5,4,6,4,7,4,8,4,9,4,10,27,11,4,12,4,13,4,14,4};
		};
		crouchTurn = {
			frames = {1,4};
		};
		standTransition = {
			spriteName = "crouchTransition";
			frames = {1,3};
			custom = function(self)
				self.yOffset = -4
			end
		};
		walkForward = {
			frames = {1,5,2,3,3,3,4,5,5,3,7,5,8,5,9,8,10,5};
		};
		walkBack = {
			spriteName = "walkForward";
			{
				frames = {1,5,2,3,3,3,4,5,5,3,7,5,8,5,9,8,10,5};
			};
		};
		jumpUp = {
			frames={2,3,3,6,4,3,5,3,6,10,7,3,8,3,9,4,10,10};
			endWith = "nothing";
		};
		jumpForward = {
			spriteName = "jumpUp";
			frames={2,3,3,6,4,3,5,3,6,10,7,3,8,3,9,4,10,10};
			endWith = "nothing";
		};
		jumpBack = {
			spriteName = "jumpUp";
			frames={2,3,3,6,4,3,5,3,6,10,7,3,8,3,9,4,10,10};
			endWith = "nothing";
		};
		land = {
			spriteName = "jumpUp";
			frames = {11,4};
		};
		airHurt = {
			endWith = "nothing";
			{
				frames = {1,1,2,3,3,4};
			};
			{
				spriteName = "jumpUp";
				frames = {8,4,9,4,10,99};
			};
		};
		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
			};
		};
		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,3,2,3,3,3,4,3,5,3,6,3};
		};
		impact = {
			spriteName = "knockdown";
			frames = {7,3}
		};
		startGroundBounce = {
			spriteName = "knockdown";
			frames = {8,3,9,3,10,4,11,3}
		};
		stopGroundBounce = {
			spriteName = "knockdown";
			frames = {12,2,13,10}
		};
		wakeup = {
			spriteName = "knockdown";
			frames = {14,5,15,5}
		};
		death = {
			spriteName = "knockdown";
			endWith = "nothing";
			frames = {13,1}
		};
		yay = {
			frames = {1,16,2,3,3,3,4,3,5,3,6,3,7,3,8,3,9,3,10,3,11,3,12,3,13,3,14,3,15,3,16,3,17,3,18,7,19,7,20,7,21,7};
			endWith = function(self)
				self:executeAnimation("yayLoop")
			end
		};
		yayLoop = {
			spriteName = "yay";
			frames = {22,7,23,7,24,7,25,7,26,7,27,7};
		};
		win = {
			spriteName = "yay";
			{
				frames = {2,3,3,3,4,3,5,3,6,3};
			};
			{
				frames = {7,3,8,3,9,3};
				custom = function(self)
					self:executeSound("naomiHands", {"sfx"})
				end
			};
			{
				frames = {10,3,11,3,12,3};
				custom = function(self)
					self:executeSound("naomiHands", {"sfx"})
				end;
			};
			{
				frames = {13,3,14,3,15,3,16,3,17,3,18,7,19,7,20,7,21,7, 22,7,23,7,24,7,25,7,26,7,27,7, 22,7,23,7,24,7,25,7,26,7,27,7, 22,7,23,7,24,7,25,7,26,7,27,7, 22,7,23,7,24,7,25,7,26,7,27,7, 22,7,23,7,24,7,25,7,26,7,27,7, 22,7,23,7,24,7,25,7,26,7,27,7, 22,7,23,7,24,7,25,7,26,7,27,7, 22,7,23,7,24,7,25,7,26,7,27,7, 22,7,23,7,24,7,25,7,26,7,27,7};
				custom = function(self)
					self:executeSound("naomiHands", {"sfx"})
				end;
			};
		};
		boo = {
			frames = {1,16,2,3,3,3,4,3,5,3,6,3,7,3,8,3,9,3,10,3,11,3,12,3,13,3,14,3,15,3,16,3,17,3,18,3,19,3,20,3,21,3,22,3,23,3,24,3,25,3,26,3,27,3,28,3};
			endWith = function(self)
				self:executeAnimation("booLoop")
			end
		};
		booLoop = {
			spriteName = "boo";
			frames = {29,12,30,9,31,12,32,9,33,9};
		};
	};
	effects = {
		hitEffect = {
			frames = {3,1,4,1,5,1,6,2,7,1,8,2,9,1,10,1}; --1,1,2,1,3,2,4,3,5,2
		};
		hitEffect2 = {
			layer = "hit";
			frames = {3,1,4,1,5,1,6,2,7,1,8,2,9,1,10,1}; --1,1,2,1,3,2,4,3,5,2
		};
		hitEffect3 = {
			layer = "hit";
			frames = {3,1,4,1,5,1,6,2,7,1,8,2,9,1,10,1}; --1,1,2,1,3,2,4,3,5,2
		};
		hitEffect4 = {
			layer = "hit";
			frames = {3,1,4,1,5,1,6,2,7,1,8,2,9,1,10,1}; --1,1,2,1,3,2,4,3,5,2
		};
		hitEffectSmall = {
			layer = "hit";
			frames = {3,1,4,1,5,1,6,1,7,1,9,1,10,1}; --1,1,2,1,3,2,4,3,5,2
		};
		spark = {
			frames = {1,2,2,2,3,2,4,2,5,2,6,2};
			relativeX = -23;
			relativeY = 17;
		};
		sparkDownForwardA = {
			frames = {1,2,2,2,3,2,4,2,5,2,6,2};
			spriteName = "spark";
			relativeX = -40;
			relativeY = 12;
		};
		sparkDownBackB = {
			frames = {1,2,2,2,3,2,4,2,5,2,6,2};
			spriteName = "spark";
			relativeX = -30;
			relativeY = 6;
			layer = "bottom";
		};
		downForwardBEffect = {
			frames = {1,1,2,1,3,1,4,1,5,1,6,2,7,2,8,2,9,1};
			relativeX = -150;
			relativeY = 10;
		};
		downBackBEffect = {
			frames = {2,2,3,2,4,2,5,2,6,2,7,2};
			relativeX = -32 * gameLogicMult;
			relativeY = -37 * gameLogicMult;
		};
		downForwardAProjectile = {
			frames = {1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,1,10,1,-1,2};
			relativeX = -4;
			relativeY = 0;
		};
		lowBEffect = {
			frames = {1,3,2,2,3,1,4,1,5,1,6,1};
			relativeX = -17 * gameLogicMult;
			relativeY = -1 * gameLogicMult;
			followPlayer = true;
			destroyWhenPlayerHurt = true;
			layer = "bottom";
		};
		lowBEffectFront = {
			frames = {1,3,2,2,3,1};
			relativeX = -17 * gameLogicMult;
			relativeY = -1 * gameLogicMult;
			followPlayer = true;
			destroyWhenPlayerHurt = true;
		};
		lowBArm = {
			frames = {1,13};
			relativeX = -17 * gameLogicMult;
			relativeY = -10 * gameLogicMult;
			followPlayer = true;
			destroyWhenPlayerHurt = true;
			layer = "bottom";
			destroyWhenPlayerCancel = true;
			ignoreHitstop = false;
		};
		jumpBEffect = {
			frames = {1,3,2,2,3,1,4,1,5,1};
			relativeX = -16 * gameLogicMult;
			relativeY = -11 * gameLogicMult;
			destroyWhenPlayerHurt = true;
			followPlayer = true;
			destroyWhenPlayerLand = true;
		};
		standBEffect = {
			frames = {1,3,2,2,3,2,4,2,5,1};
			relativeX = -14 * gameLogicMult;
			relativeY = -2 * gameLogicMult;
			destroyWhenPlayerHurt = true;
			followPlayer = true;
			destroyWhenPlayerLand = true;
		};
		dashBackSpark = {
			spriteName = "spark";
			frames = {1,2,2,2,3,2,4,2,5,2,6,2};
			relativeX = -30;
			relativeY = 17;
		};
		dashBackEffect = {
			frames = {1,1,2,1,3,1,4,1,5,1,6,2,7,2,8,2,9,1};
			relativeX = -30;
			relativeY = 10;
		};
		lowSlashEffect = {
			frames = {1,2,2,2,3,2,4,2,5,2,6,2};
			relativeX = -2 * gameLogicMult;
			relativeY = 20 * gameLogicMult;
		};
		downBackAEffect = {
			frames = {1,2,2,2,3,2,4,2,5,2};
			relativeX = -15 * gameLogicMult;
			relativeY = -18 * gameLogicMult;
			destroyWhenPlayerHurt = true;
			followPlayer = true;
		};
	};
	nameplate = {
		endWith = "nothing";
		frames = {1,6,2,2,3,2,4,2,5,6,6,2,7,2,8,2,9,6,10,2,11,2,12,2,13,6,14,2,15,2,16,3,17,3,18,3,19,3,20,3,21,3,22,3,23,3,24,3};
		custom = function(self, host)
				if host.player1 == true then
					host:executeSound("nameplate", {"sfx", "nameplate1"}, -1)
				else
					host:executeSound("nameplate", {"sfx", "nameplate2"}, 1)
				end
			end;
	};
	projectiles = {
		downForwardAProjectile = {
			relativeX = 27*gameLogicMult;
			relativeY = 0 *gameLogicMult;
			hitStun = 16;
			pushback = 50;
			explosionX = -30 * gameLogicMult;
			width = 36 * gameLogicMult;
			height = 35 * gameLogicMult;
			hitstop = 10;
			priority = 2;
			stayOnScreen = true;
			dontKillEffect = true;
			lifetime = 10;
		};
	};
	colors = {
		default = {
			sprite = {
				{248,244,64}; --main yellow

				{255,30,106}; --sword main trail
				{255,154,182}; --sword light color
				{193,0,67}; --sword outline
			};
			effects = {
				{255,30,106}; --sword main trail
				{255,154,182}; --sword light color
				{193,0,67}; --sword outline
			};

			hit = {255,255,0};

			meterIcon = {
				{255,30,106}; -- main
				{149,0,52}; --shadow

				{255,154,182}; -- lit main
			};
			--generalAssets
				dust = {255,255,0};
				block = {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
				};
		};
		alt1 = {
			sprite = {
				{249,60,60}; --main yellow

				{0,99,231}; --sword main trail
				{67,214,247}; --sword light color
				{20,0,193}; --sword outline
			};
			effects = {
				{0,99,231}; --sword main trail
				{67,214,247}; --sword light color
				{20,0,193}; --sword outline
			};

			hit = {255,0,0};

			meterIcon = {
				{67,214,247}; -- main
				{0,99,231}; --shadow

				{194,242,255}; -- lit main
			};
			--generalAssets
				dust = {255,64,64};
				mainUI = {113, 0, 0};
				health = {255,0,0};
				meterChunk = {
					--meterOne
					{16,143,255}; --darkBlue
					{64,174,255}; --medium blue
					{131,221,251}; --lightest blue

					--meterTwo
					{99,187,255}; --darkblue
					{164,216,255}; --medium blue
					{233,236,255}; --lightest blue
				};
		};
		alt2 = {
			sprite = {
				{240,149,68}; --main yellow

				{255,255,0}; --sword main trail
				{247,255,122}; --sword light color
				{184,180,0}; --sword outline
			};
			effects = {
				{255,255,0}; --sword main trail
				{247,255,122}; --sword light color
				{184,180,0}; --sword outline
			};

			hit = {255,74,0};

			meterIcon = {
				{255,255,0}; -- main
				{153,149,0}; --shadow

				{255,255,165}; -- lit main
			};
			--generalAssets
				dust = {255,164,42};
				mainUI = {187, 72, 0};
				health = {255,102,7};
				meterChunk = {
					--meterOne
					{215,191,0}; --darkGreen
					{246,255,109}; --mediumGreen
					{255,255,255}; --lightestGreen

					--meterTwo
					{254,255,96}; --darkGreen
					{249,255,174}; --mediumGreen
					{255,255,255}; --lightestGreen
				};
		};
		alt4 = {
			sprite = {
				{130,198,0}; --main yellow

				{153,85,193}; --sword main trail
				{233,154,255}; --sword light color
				{59,25,55}; --sword outline
			};
			effects = {
				{153,85,193}; --sword main trail
				{233,154,255}; --sword light color
				{59,25,55}; --sword outline
			};

			hit = {0,255,0};

			meterIcon = {
				{153,85,193}; -- main
				{107,0,149}; --shadow

				{234,212,243}; -- lit main
			};
			--generalAssets
				dust = {0,255,0};
				block = {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
			};
		};
		alt5 = {
			sprite = {
				{81,173,199}; --main yellow

				{255,0,0}; --sword main trail
				{255,154,154}; --sword light color
				{193,0,0}; --sword outline
			};
			effects = {
				{255,0,0}; --sword main trail
				{255,154,154}; --sword light color
				{193,0,0}; --sword outline
			};

			hit = {0,216,255};

			meterIcon = {
				{255,0,0}; -- main
				{149,0,0}; --shadow

				{255,154,154}; -- lit main
			};
			--generalAssets
				dust = {128,183,192};
				mainUI = {0,75,88}; --UIcolor
				health = {0,216,255};
			meterChunk = {
				--meterOne
				{255,0,0}; --dark
				{255,69,69}; --medium
				{255,121,121}; --light

				--meterTwo
				{255,121,121}; --darkGreen
				{255,180,180}; --mediumGreen
				{255,228,228}; --lightestGreen
			};
		};
		alt6 = {
			sprite = {
				{155,155,167}; --main yellow

				{240,128,240}; --sword main trail
				{255,199,247}; --sword light color
				{191,87,199}; --sword outline
			};
			effects = {
				{240,128,240}; --sword main trail
				{255,199,247}; --sword light color
				{191,87,199}; --sword outline
			};

			hit = {162,162,206};

			meterIcon = {
				{240,128,240}; -- main
				{148,0,247}; --shadow

				{255,204,255}; -- lit main
			};
			--generalAssets
				dust = {155,155,167};
				mainUI = {64,64,64}; --UIcolor
				health = {155,155,167};
				meterChunk = {
					--meterOne
					{148,0,247}; --darkGreen
					{191,87,199}; --mediumGreen
					{240,128,240}; --lightestGreen

					--meterTwo
					{240,128,240}; --darkGreen
					{255,175,255}; --mediumGreen
					{255,228,242}; --lightestGreen
				};
		};
		alt7 = {
			sprite = {
				{125,72,123}; --main yellow

				{0,255,0}; --sword main trail
				{149,255,32}; --sword light color
				{0,133,0}; --sword outline
			};
			effects = {
				{0,255,0}; --sword main trail
				{149,255,32}; --sword light color
				{0,133,0}; --sword outline
			};

			hit = {212,0,211};

			meterIcon = {
				{0,255,0}; -- main
				{0,133,0}; --shadow

				{184,255,105}; -- lit main
			};
			--generalAssets
				dust = {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
				};
		};
		alt8 = {
			sprite = {
				{255,151,255}; --main yellow

				{0,220,161}; --sword main trail
				{154,234,255}; --sword light color
				{0,150,193}; --sword outline
			};
			effects = {
				{0,220,161}; --sword main trail
				{154,234,255}; --sword light color
				{0,150,193}; --sword outline
			};

			hit = {255,43,106};

			meterIcon = {
				{0,221,155}; -- main
				{0,102,82}; --shadow

				{169,255,173}; -- lit main
			};
			--generalAssets
				dust = {255,100,146};
				mainUI = {149,0,52};
				health = {255,100,146};
				meterChunk = {
					--meterOne
					{0,151,155}; --darkBlue
					{0,221,180}; --medium blue
					{169,255,183}; --lightest blue

					--meterTwo
					{99,232,255}; --darkblue
					{164,251,255}; --medium blue
					{234,246,255}; --lightest blue
				};
		};

	};

};

function Hector:controlUpdate(left, right, up, down, buttonA, buttonB, tapA, tapB, specialA, specialB)
	self:_controlUpdate(left, right, up, down, buttonA, buttonB, tapA, tapB, specialA, specialB)
end

function Hector:meterAnimation()
	love.graphics.setShader(self.shaders.meterIcon)
	if self.player1 then
		self.meterAnimate:draw(self.sprites.meter.sheet, self.meterX, self.meterY + self.meterJitter, 0, gameLogicMult, gameLogicMult, 0, 0)
		love.graphics.setShader(self.shaders.meterChunk)
		for i=1, 4 do
			local d = i-1
			self.meterChunkArray[i]:draw(self.sprites.meterChunk.sheet, (self.meterX + 148 - 48 - 24 + 16) - (d * 16), self.meterY + 12 + self.meterJitter, 0, gameLogicMult, gameLogicMult, 0, 0)
		end
	else
		self.meterAnimate:draw(self.sprites.meter.sheet, self.meterX, self.meterY + self.meterJitter, 0, -gameLogicMult, gameLogicMult, 0, 0)
		love.graphics.setShader(self.shaders.meterChunk)
		for i=1, 4 do
			local d = i-1
			self.meterChunkArray[i]:draw(self.sprites.meterChunk.sheet, (self.meterX - 148 + 48 + 24 - 16) + (d * 16), self.meterY + 12 + self.meterJitter, 0, -gameLogicMult, gameLogicMult, 0, 0)
		end
	end
	love.graphics.setShader()
end

-- function Hector:superStopUpdate(dt)
-- 	self.miscTimer = self.miscTimer - 1
-- 	if self.miscTimer == 0 then
-- 		self:superStopContinue()
-- 		self.enemy.blockHigh = false
-- 		self.enemy.blockLow = false
-- 		self.enemy:normalHit(self.attackbox)
-- 	end
-- end

function Hector:initiate()
	self:_initiate()
	self.hitLightSFX = "lightAttack"
	self.hitHeavySFX = "heavyAttack"
	self.hitLowSFX = "lowAttack"
	self.hitSpecialSFX = "special"
end

function Hector:changeMeter(amount)
	self.meterAmount = self.meterAmount + amount
	if amount > 0 then
		self.neutralABRequirement = true
		if amount ~= 4 then
			self:setFlicker(self.colors["alt" .. self.colorNum].meterIcon[1][1]*255,self.colors["alt" .. self.colorNum].meterIcon[1][2]*255,self.colors["alt" .. self.colorNum].meterIcon[1][3]*255,3, true)
		end
		if self.meterAmount == 1 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 >= 4 then
			self.meterJitter = 5
			self.meterAmount = 4
		else
			self.meterJitter = 2
		end
	else
		if self.meterAmount == 0 then
			self.meterAnimate = anim8.newAnimation(self.sprites.meter.grid(repeatNum(1,1)), frameTime, 'pauseAtEnd')
			if self.meterAmount < 0 then self.meterAmount = 0 end
			self.neutralABRequirement = false
		end
			for i=1,4 do
  			self.meterChunkArray[i] = anim8.newAnimation(self.sprites.meterChunk.grid(repeatNum(1,1,4,2,2,2,4,2,2,2,4,2,2,2)), frameTime, 'pauseAtEnd')
			end
			self.meterJitter = 5
	end
end

function Hector:resetMeter()
	self.meterChunkArray = {}
	-- self.meterAmount = 3
	for i=1, 4 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[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(1,1)), frameTime, 'pauseAtEnd')
end

function Hector:reset()
	self:_reset()
end

function Hector:fullMeter()
	if self.meterAmount < 4 then
		self.meterAmount = 0
		self.meterAnimate = anim8.newAnimation(self.sprites.meter.grid(repeatNum(3,1)), frameTime, 'pauseAtEnd')
		self:changeMeter(4)
	end
end