-- Persona Support --
if not srb2p return end

-- Stats
charStats["pflchan"] = {
	name = "FL Chan",
	basehp = 50,
	basesp = 60,
	persona = "sirius",
	melee_natk = "flchan_atk1",
	melee_satk = "flchan_atk2",
	supercolor_start = SKINCOLOR_SUPERPERIDOT1,
	atk = 45,
	acc = 80,
	crit = 5,
	wep = "flmic_01",
	weptype = WPT_HAMMER,
	anim_stand = {SPR_PLAY, A, 8, "SPR2_STND"},
	anim_stand_hurt = {SPR_PLAY, A, 1, "SPR2_STND"},
	anim_stand_bored = {SPR_PLAY, A, B, A, B, A, B, A, B, 15, "SPR2_WAIT"},
	anim_guard = {SPR_PLAY, C, 2, "SPR2_RUN"},
	anim_move = {SPR_PLAY, A, B, C, D, E, F, G, H, 2, "SPR2_WALK"},
	anim_run = {SPR_PLAY, A, B, C, D, E, F, G, H, 2, "SPR2_RUN"},
	anim_atk = {SPR_PLAY, A, B, C, D, E, F, G, H, 1, "SPR2_ROLL"},
	anim_aoa_end = {SPR_PLAY, H, G, F, E, D, C, B, A, 1, "SPR2_ROLL"},
	anim_hurt = {SPR_PLAY, A, 35, "SPR2_PAIN"},
	anim_getdown = {SPR_PLAY, A, 1, "SPR2_PAIN"},
	anim_downloop = {SPR_PLAY, A, 1, "SPR2_PAIN"},
	anim_getup = {SPR_PLAY, A, 1, "SPR2_SPNG"},
	anim_death = {SPR_PLAY, A, 30, "SPR2_DEAD"},
	anim_revive = {SPR_PLAY, A, 1, "SPR2_SPNG"},
	anim_evoker = {SPR_PLAY, A, 8, "SPR2_BACT"},
	anim_evoker_shoot = {SPR_PLAY, B, 8, "SPR2_BACT"},
	anim_special1 = {SPR_PLAY, A, B, C, D, E, 2, "SPR2_MICG"},
	vfx_summon = {"sfx_flsum1", "sfx_flsum2", "sfx_flsum3"},
    vfx_skill = {"sfx_flskll", "sfx_fldo3"},
    vfx_item = {"sfx_flitem", "sfx_flitm2"},
    vfx_hurt = {"sfx_flhurt"},
    vfx_hurtx = {"sfx_flxhrt"},
    vfx_die = {"sfx_fldie"},
    vfx_heal = {"sfx_flheal"},
    vfx_healself = {"sfx_flheal"},
    vfx_kill = {"sfx_flkll1", "sfx_flkll2"},
    vfx_1more = {"sfx_fl1mor"},
    vfx_crit = {"sfx_flcrit"},
    vfx_aoaask = {"sfx_flaoa"},
    vfx_aoado = {"sfx_fldo1", "sfx_fldo2", "sfx_fldo3", "sfx_fldo4"},
    vfx_aoarelent = {"sfx_flrlnt1", "sfx_flrlnt2"},
    vfx_miss = {"sfx_flmiss"},
    vfx_dodge = {"sfx_fldodg", "sfx_flkll1"},
    vfx_win = {"sfx_flwin1", "sfx_flwin2", "sfx_flwin3"},
    vfx_levelup = {"sfx_fllvlu"},
	icon = "ICO_FLCH",
	hudbust = "H_FLCBAR",
	hudaoa = "H_FLCAOA",
	aoa_quote = "Let's make these guys \nchange their tune!",
	hudcutin = "FLCH_A",
	tip = "A 'jack of all trades' kind of support with Electric, Psychic, and Strike skills for attacking. Her Agility buffs and debuffs can help her team get up to speed. She may be weak to Slash skills, but she can eventually avoid them."
}

-- Persona
personaList["sirius"] = {
	name = "Sirius",
	arcana = ARCANA_STAR,
	sprite = SPR_SIRI,
	startframe = 0,
	anim_idle = {SPR_SIRI, A, B, C, D, E, F, 10},
	anim_atk = {SPR_SIRI, A, G, H, I, J, K, H, 2},
	strength = 7,
	magic = 10,
	endurance = 6,
	luck = 9,
	agility = 8,
	weak = ATK_SLASH,
	resist = ATK_ELEC|ATK_PSY,
	skills = {
		{"zio", 1}, {"mapsi", 3},
		{"media", 5}, {"lunge", 10},
		{"sukukaja", 12}, {"sukunda", 15},
		{"marin karin", 19}, {"swift dance 1", 23},
		
		{"zionga", 27, "zio"}, {"mapsio", 30, "mapsi"},
		{"mediarama", 34, "media"}, {"assault dive", 38, "lunge"},
		{"masukukaja", 41, "sukukaja"}, {"masukunda", 43, "sukunda"},
		{"sexy dance", 46, "marin karin"}, {"swift dance 2", 49, "swift dance 1"},
		
		{"ziodyne", 52, "zionga"}, {"mapsiodyne", 57, "mapsio"},
		{"mediarahan", 60, "mediarama"}, {"gigantic fist", 65, "assault dive"},
		{"red capote", 67, "masukukaja"}, {"debilitate", 69, "masukunda"},
		{"brain jack", 71, "sexy dance"}, {"swift dance 3", 75, "swift dance 2"},
		
		{"god hand", 85},
	},
}

-- Dungeon Ability
DNG_Abilities["pflchan"] = {

	jfunc = 	function(p)
					local mo = p.mo

					P_SetObjectMomZ(mo, FRACUNIT*10)
					mo.state = S_MICDROP_MIDAIR
					local pmic = P_SpawnMobjFromMobj(mo, 0, 0, 0, MT_DUNGEONMIC)
					if mo.eflags & MFE_VERTICALFLIP
						pmic.momz = 30*FRACUNIT
					else
						pmic.momz = -30*FRACUNIT
					end
					S_StartSound(pmic, sfx_brakrl)
					pmic.target = mo
				end,

	func =		function(p)
					local mo = p.mo

					if mo.p_abl
						if ((mo.eflags & MFE_VERTICALFLIP) and mo.momz < 0)
						or (not (mo.eflags & MFE_VERTICALFLIP) and mo.momz > 0)
						else
							mo.state = S_PLAY_FALL
							p.pflags = $ & ~PF_JUMPED
							mo.p_abl = false
						end
					end
				end,
}

-- Normal Melee Attack
attackDefs["flchan_atk1"] = {
	name = "Mic Drop",
	type = ATK_STRIKE,
	power = 45,
	accuracy = 80,
	statuschance = 5,
	status = COND_SHOCK,
	costtype = CST_HP,
	cost = 0,
	desc = "A violent, musical shockwave",
	target = TGT_ALLENEMIES,
	physical = true,
	anim_norepel = true,
	anim = function(mo, targets, hittargets, timer)
		if timer == TICRATE/3
			ANIM_set(mo, mo.anim_special1, false)
		end
		if timer == TICRATE/2
		or timer == TICRATE/2 + 8
			if timer == TICRATE/2
				localquake(mo.battlen, 30*FRACUNIT, 5)
				playSound(mo.battlen, sfx_pstop)
			end
			local ang = 0
			for i = 1, 24 do
				local m = P_SpawnMobj(mo.x, mo.y, mo.z, MT_DUMMY)
				m.state = S_MUSICNOTE2
				m.scale = FRACUNIT/2
				m.fuse = TICRATE
				m.destscale = FRACUNIT*4
				m.friction = FRACUNIT
				m.angle = ang
				P_InstaThrust(m, m.angle, 50*FRACUNIT)
				m = P_SpawnMobj(mo.x, mo.y, mo.z, MT_DUMMY)
				m.state = S_QUICKBOOM1
				m.scale = FRACUNIT
				m.fuse = TICRATE
				m.friction = FRACUNIT
				m.destscale = FRACUNIT*4
				m.angle = ang
				m.color = SKINCOLOR_LAVENDER
				P_InstaThrust(m, m.angle, 60*FRACUNIT)
				for i = 1, 8
					m = P_SpawnMobj(mo.x, mo.y, mo.z + (mo.height*2), MT_DUMMY)
					m.state = S_MUSICNOTE1
					m.fuse = TICRATE
					m.friction = FRACUNIT
					m.scale = FRACUNIT
					m.destscale = FRACUNIT*4
					m.angle = ang + P_RandomRange(-15, 15)*ANG1
					P_InstaThrust(m, m.angle, 50*FRACUNIT + P_RandomRange(-16, 16)*FRACUNIT)
				end
				ang = $ + (360/24)*ANG1
			end
		end
		if timer == TICRATE/2 + 10
			for k,v in ipairs(hittargets)
				damageObject(v)
			end
		end
		if timer == TICRATE*2
			return true
		end
	end,
}

-- Custom Skills
attackDefs["red capote"] = {
	name = "Red Capote",
	type = ATK_SUPPORT,
	costtype = CST_SP,
	cost = 24,
	desc = "Maximizes one ally's \nagility regardless of \ndebuffs.",
	target = TGT_ALLY,
	superbuff = true,	-- powerful buff
	nocast = 	function(targets, n)	-- we can't cast this skill if this function returns true
					local target = targets[n]
					if target.buffs["agi"][1] >= 75
						BTL_logMessage(targets[1].battlen, "Limit reached")
						return true
					end
				end,
	anim = function(mo, targets, hittargets, timer)
		local target = hittargets[1]

		if timer == 19
			target.buffs["agi"][1] = 0
		end
		
		if timer == 20
			playSound(mo.battlen, sfx_buff2)
			buffStat(target, "agi", 75)
			target.mindcharge = true
			BTL_logMessage(targets[1].battlen, target.name.." is building up Speed...")
			for i = 1,16
				local dust = P_SpawnMobj(target.x, target.y, target.z, MT_DUMMY)
				dust.angle = ANGLE_90 + ANG1* (22*(i-1))
				dust.state = S_CDUST1
				P_InstaThrust(dust, dust.angle, 30*FRACUNIT)
				dust.color = SKINCOLOR_GREEN
				dust.scale = FRACUNIT*2
			end

		elseif timer > 20 and timer <= 50

			if leveltime%2 == 0
				for i = 1,16

					local thok = P_SpawnMobj(target.x+P_RandomRange(-70, 70)*FRACUNIT, target.y+P_RandomRange(-70, 70)*FRACUNIT, target.z+P_RandomRange(0, 50)*FRACUNIT, MT_DUMMY)
					thok.state = S_BOXSPARKLE1
					thok.momz = P_RandomRange(3, 10)*FRACUNIT
					thok.color = SKINCOLOR_GREEN
					thok.tics = P_RandomRange(10, 35)
					thok.scale = FRACUNIT*3/2
				end
			end

			for i = 1, 8
				local thok = P_SpawnMobj(target.x+P_RandomRange(-70, 70)*FRACUNIT, target.y+P_RandomRange(-70, 70)*FRACUNIT, target.z+P_RandomRange(0, 50)*FRACUNIT, MT_DUMMY)
				thok.sprite = SPR_SUMN
				thok.frame = F|FF_FULLBRIGHT|TR_TRANS50
				thok.momz = P_RandomRange(6, 16)*FRACUNIT
				thok.color = SKINCOLOR_GREEN
				thok.tics = P_RandomRange(10, 35)
			end
		elseif timer == 60
			target.mindcharge = false
			return true
		end
	end,
}

attackDefs["swift dance 1"] = {
	name = "Swift Dance I",
	type = ATK_PASSIVE|ATK_SLASH|ATK_STRIKE|ATK_PIERCE,
	desc = "Boost Evasion rate \nagainst all physicals \nby 15%",
	power = 15,
	passive = PSV_DODGE,
}

attackDefs["swift dance 2"] = {
	name = "Swift Dance II",
	type = ATK_PASSIVE|ATK_SLASH|ATK_STRIKE|ATK_PIERCE,
	desc = "Boost Evasion rate \nagainst all physicals \nby 30%",
	power = 30,
	passive = PSV_DODGE,
	implicit = "brain buster",
}

attackDefs["swift dance 3"] = {
	name = "Swift Dance III",
	type = ATK_PASSIVE|ATK_SLASH|ATK_STRIKE|ATK_PIERCE,
	desc = "Boost Evasion rate \nagainst all physicals \nby 50%",
	power = 50,
	passive = PSV_DODGE,
	implicit = "brain buster",
}

attackDefs["swift dance_boss"] = {
	name = "Swift Dance",
	type = ATK_PASSIVE|ATK_SLASH|ATK_STRIKE|ATK_PIERCE,
	desc = "Boost Evasion rate \nagainst all physicals \nby 50%",
	power = 50,
	passive = PSV_DODGE,
}

-- Super Melee Attack
attackDefs["flchan_atk2"] = {
	name = "Super Mic Drop",
	type = ATK_ALMIGHTY,
	power = 45,
	accuracy = 90,
	statuschance = 100,
	status = COND_SHOCK,
	costtype = CST_HP,
	cost = 0,
	desc = "An extremely violent, musical shockwave",
	target = TGT_ALLENEMIES,
	physical = true,
	anim_norepel = true,
	anim = function(mo, targets, hittargets, timer)
		if timer == TICRATE/3
			ANIM_set(mo, mo.anim_special1, false)
		end
		if timer == TICRATE/2
		or timer == TICRATE/2 + 8
			if timer == TICRATE/2
				localquake(mo.battlen, 30*FRACUNIT, 5)
				playSound(mo.battlen, sfx_pstop)
			end
			local ang = 0
			for i = 1, 24 do
				local m = P_SpawnMobj(mo.x, mo.y, mo.z, MT_DUMMY)
				m.state = S_MUSICNOTE2
				m.scale = FRACUNIT/2
				m.fuse = TICRATE
				m.destscale = FRACUNIT*4
				m.friction = FRACUNIT
				m.angle = ang
				P_InstaThrust(m, m.angle, 50*FRACUNIT)
				m = P_SpawnMobj(mo.x, mo.y, mo.z, MT_DUMMY)
				m.state = S_QUICKBOOM1
				m.scale = FRACUNIT
				m.fuse = TICRATE
				m.friction = FRACUNIT
				m.destscale = FRACUNIT*4
				m.angle = ang
				m.color = SKINCOLOR_LAVENDER
				P_InstaThrust(m, m.angle, 60*FRACUNIT)
				for i = 1, 8
					m = P_SpawnMobj(mo.x, mo.y, mo.z + (mo.height*2), MT_DUMMY)
					m.state = S_MUSICNOTE1
					m.fuse = TICRATE
					m.friction = FRACUNIT
					m.scale = FRACUNIT
					m.destscale = FRACUNIT*4
					m.angle = ang + P_RandomRange(-15, 15)*ANG1
					P_InstaThrust(m, m.angle, 50*FRACUNIT + P_RandomRange(-16, 16)*FRACUNIT)
				end
				ang = $ + (360/24)*ANG1
			end
		end
		if timer == TICRATE/2 + 10
			for k,v in ipairs(hittargets)
				damageObject(v)
			end
		end
		if timer == TICRATE*2
			return true
		end
	end,
}

-- Team Attack
attackDefs["brain buster"] = {
	name = "Brain Buster",
	type = ATK_STRIKE,
	power = 120,
	accuracy = 80,
	statuschance = 20,
	status = COND_BRAINWASH,
	costtype = CST_HPPERCENT,
	cost = 22,
	desc = "Team-Up (FL Chan and Miku) \nHeavy Strike damage. \n20% Brainwash chance.",
	target = TGT_ALLENEMIES,
	nocast = function(targets, n)
		local tgt = targets[n]
		local battlen = tgt.battlen
		local skincheck = "hatsunemiku"
		local checkteam = tgt.enemies
		local found
		for i = 1, #checkteam do
			if checkteam[i].skin == skincheck
				found = true
				break
			end
		end
		if not found
			BTL_logMessage(battlen, "Miku's not here!")
			playSound(battlen, sfx_not)
			return true
		end
	end,
	hudfunc = function(v, mo, timer)
		for i = 1, #mo.allies do
			local target = mo.allies[i]
			local firstt = TICRATE - timer
			local t = (TICRATE - (firstt*2))
			local t2 = (t<<FRACBITS)/3
			local t3 = t2
			local scale = t*FRACUNIT/6
			local trflag = V_70TRANS
			if firstt < 15
				trflag = V_90TRANS - (V_10TRANS)
			end
			if scale > 0
			and timer < TICRATE
				v.drawScaled(160<<FRACBITS, 100<<FRACBITS, scale, v.cachePatch("H_1M_B"), trflag)
				v.drawScaled(160<<FRACBITS, 100<<FRACBITS, scale, v.cachePatch("H_1M_C"))
			end
			t3 = FixedMul(t3, t3)
			t3 = $+ FixedMul(t3, t2)
			local pp = v.cachePatch(charStats[mo.skin] and charStats[mo.skin].hudaoa or "")
			if mo.status_condition == COND_SUPER
			and charStats[mo.skin] and charStats[mo.skin].hudsaoa
				pp = v.cachePatch(charStats[mo.skin].hudsaoa)
			end
			if timer <100
				v.drawScaled((150)<<FRACBITS + t3/3, (80)<<FRACBITS +t3/8, FRACUNIT/2, pp, V_SNAPTOLEFT, v.getColormap(TC_DEFAULT, mo.color))
				pp = v.cachePatch(charStats["hatsunemiku"] and charStats["hatsunemiku"].hudaoa or "pflchan")
				if target.skin == "hatsunemiku"
					v.drawScaled((150)<<FRACBITS - t3/3, (80)<<FRACBITS -t3/7, FRACUNIT/2, pp, V_SNAPTOLEFT, v.getColormap(TC_DEFAULT, target.color))
				end
				--v.drawScaled((120)<<FRACBITS -t3/3, (70)<<FRACBITS +t3/8, FRACUNIT/2, v.cachePatch("H_FPASSLAME1"), V_SNAPTOLEFT)
				--v.drawScaled((113)<<FRACBITS +t3/3, (83)<<FRACBITS -t3/7, FRACUNIT/2, v.cachePatch("H_FPASSLAME2"), V_SNAPTOLEFT)
			end
		end
	end,
	anim = function(mo, targets, hittargets, timer)
		for i = 1, #mo.allies do
			local target = mo.allies[i]
			if timer == 1
				if target.skin == "hatsunemiku"
					VFX_Play(target, VFX_AOADO)
				end
			end
		end
		if timer == 1
			mo.fangle = 0
			mo.fdist = 400
			mo.columns = {}
			playSound(mo.battlen, sfx_aoado)
			VFX_Play(target, VFX_AOADO)
		end
		for k,v in ipairs(hittargets)
			local target = v
			local time = timer - 6*(k-1)
			if time >= 20 and time <= 21
				if time == 20
					damageObject(target)
					playSound(mo.battlen, sfx_pstop)
				end
				if not target.plyr
					localquake(mo.battlen, 7*FRACUNIT, 5)
				end
				for i=1,16
					local b = P_SpawnMobj(target.x, target.y, target.z+2*FRACUNIT, MT_DUMMY)
					b.momx = P_RandomRange(-3, 3)*FRACUNIT
					b.momy = P_RandomRange(-3, 3)*FRACUNIT
					b.momz = P_RandomRange(4, 16)*FRACUNIT
					b.state = S_AOADUST1
					b.frame = A|FF_FULLBRIGHT
					b.scale = FRACUNIT*3
					b.destscale = FRACUNIT/12
				end
				for i=1,16
					local b = P_SpawnMobj(target.x, target.y, target.z+20*FRACUNIT, MT_DUMMY)
					b.momx = P_RandomRange(-8, 8)*FRACUNIT
					b.momy = P_RandomRange(-8, 8)*FRACUNIT
					b.momz = P_RandomRange(-8, 8)*FRACUNIT
					b.state = S_AOADUST1
					b.frame = A|FF_FULLBRIGHT
					b.scale = FRACUNIT*3
					b.destscale = FRACUNIT/12
				end
			elseif timer == 25 + (#hittargets-1)*6
				return true
			end
		end
	end,
}

-- Weapons
weaponsList["flmic_01"] = {
	name = "Seis Mic",
	type = WPT_HAMMER,
	rarity = 1,
	element = ATK_STRIKE,
	atk = 300,
	desc = "A microphone that makes \na violent, musical shockwave \nwhen it's dropped hard enough.",
	slot = "iron fist",
}

weaponsList["dyna mic"] = {
	name = "Dyna Mic",
	type = WPT_HAMMER,
	rarity = 3,
	element = ATK_ELEC,
	atk = 900,
	desc = "A microphone that produces \nso much static, that lightning \ncan come out at times.",
	ma = 1,
	lu = 1,
	slot = "elec amp",
}

weaponsList["rhyth mic"] = {
	name = "Rhyth Mic",
	type = WPT_HAMMER,
	rarity = 5,
	element = ATK_PSY,
	atk = 1500,
	desc = "A microphone that automatically \namplifies the bass on one's \nvoice.",
	ma = 3,
	lu = 3,
	slot = "psy amp",
}

-- Velvet Shop
table.insert(shopList["velvet_shop_mp1"].weapons, {makeWeapon("flmic_01", 10), 800, nil, 4})
table.insert(shopList["velvet_shop_mp1"].weapons, {makeWeapon("dyna mic"), 4000, 3})
table.insert(shopList["velvet_shop_mp1"].weapons, {makeWeapon("rhyth mic"), 12500, 6})

-- Void Shop
table.insert(shopList["void_shop"].weapons, {makeWeapon("flmic_01", 10), 700, nil, 6})
table.insert(shopList["void_shop"].weapons, {makeWeapon("dyna mic"), 1500, 6, 12})
table.insert(shopList["void_shop"].weapons, {makeWeapon("rhyth mic"), 2000, 12})

-- Vision Quest Stuff
enemyList["metalsonic_boss"] = {
	name = "Metal Sonic",
	skillchance = 95,
	level = 99,
	hp = 7560,
	sp = 3240,
	strength = 78,
	magic = 56,
	endurance = 99,
	agility = 56,
	luck = 26,
	melee_natk = "metal_atk1",
	thinker = generalEnemyThinker,
	boss = true,
	skin = "metalsonic",
	color = SKINCOLOR_COBALT,
	hudcutin = "MSON_A",
	weak = ATK_ELEC,
	resist = ATK_STRIKE|ATK_NUCLEAR,
	persona = "palladion",
	noroguerandom = true,
	noroguebuff = true,
	anim_stand = {SPR_PLAY, A, 8, "SPR2_STND"},
	anim_stand_hurt = {SPR_PLAY, A, 1, "SPR2_STND"},
	anim_stand_bored = {SPR_PLAY, A, B, A, B, A, B, A, B, 10, "SPR2_WAIT"},
	anim_guard = {SPR_PLAY, A, 1, "SPR2_WALK"},
	anim_move = {SPR_PLAY, A, 2, "SPR2_WALK"},
	anim_run = {SPR_PLAY, A, 2, "SPR2_RUN"},
	anim_atk = {SPR_PLAY, A, B, C, D, E, 1, "SPR2_ROLL"},
	anim_aoa_end = {SPR_PLAY, E, D, C, B, A, 1, "SPR2_ROLL"},
	anim_hurt = {SPR_PLAY, A, 35, "SPR2_PAIN"},
	anim_getdown = {SPR_PLAY, A, 1, "SPR2_PAIN"},
	anim_downloop = {SPR_PLAY, A, 1, "SPR2_PAIN"},
	anim_getup = {SPR_PLAY, A, B, C, D, E, F, 1, "SPR2_ROLL"},
	anim_death = {SPR_PLAY, A, 30, "SPR2_DEAD"},
	anim_revive = {SPR_PLAY, A, B, C, D, E, F, 1, "SPR2_ROLL"},
	anim_evoker = {SPR_PLAY, A, 8, "SPR2_SPNG"},
	anim_special1 = {SPR_PLAY, A, 2, "SPR2_SPNG"},
	anim_sepcial2 = {SPR_PLAY, A, 2, "SPR2_DASH"},
	vfx_summon = {"sfx_mssum1", "sfx_mssum2"},
    vfx_skill = {"sfx_msskl1", "sfx_msskl2"},
    vfx_item = {"sfx_mssum1", "sfx_mssum2"},
    vfx_hurt = {"sfx_mshrt1", "sfx_mshrt2"},
    vfx_hurtx = {"sfx_msskl2"},
    vfx_die = {"sfx_msmis1"},
    vfx_heal = {"sfx_mssum1", "sfx_mssum2"},
    vfx_healself = {"sfx_mssum1", "sfx_mssum2"},
    vfx_kill = {"sfx_mssum1", "sfx_mssum2"},
    vfx_1more = {"sfx_msdge1"},
    vfx_crit = {"sfx_msskl2"},
    vfx_aoaask = {"sfx_msaoi1"},
    vfx_aoado = {"sfx_msskl2"},
    vfx_aoarelent = {"sfx_msmis1"},
    vfx_miss = {"sfx_msmis1"},
    vfx_dodge = {"sfx_msdge1"},
    vfx_win = {"sfx_mswin1"},
    vfx_levelup = {"sfx_mswin1"},
	skills = {"dekunda", "swordbreaker", "matarukaja", "power charge", "freidyne", "mafreidyne", "pralaya", "akasha arts"},
}

enemyList["flchan_boss"] = {
	name = "FL Studio Chan",
	skillchance = 95,
	level = 99,
	hp = 5400,
	sp = 6480,
	strength = 56,
	magic = 79,
	endurance = 46,
	agility = 67,
	luck = 78,
	melee_natk = "flchan_atk1",
	boss = true,
	skin = "pflchan",
	color = SKINCOLOR_GREEN,
	hudcutin = "FLCH_A",
	weak = ATK_SLASH,
	resist = ATK_ELEC|ATK_PSY,
	persona = "sirius",
	noroguerandom = true,
	noroguebuff = true,
	turns = 2,
	anim_stand = {SPR_PLAY, A, 8, "SPR2_STND"},
	anim_stand_hurt = {SPR_PLAY, A, 1, "SPR2_STND"},
	anim_stand_bored = {SPR_PLAY, A, B, A, B, A, B, A, B, 15, "SPR2_WAIT"},
	anim_guard = {SPR_PLAY, C, 2, "SPR2_RUN"},
	anim_move = {SPR_PLAY, A, B, C, D, E, F, G, H, 2, "SPR2_WALK"},
	anim_run = {SPR_PLAY, A, B, C, D, E, F, G, H, 2, "SPR2_RUN"},
	anim_atk = {SPR_PLAY, A, B, C, D, E, F, G, H, 1, "SPR2_ROLL"},
	anim_aoa_end = {SPR_PLAY, H, G, F, E, D, C, B, A, 1, "SPR2_ROLL"},
	anim_hurt = {SPR_PLAY, A, 35, "SPR2_PAIN"},
	anim_getdown = {SPR_PLAY, A, 1, "SPR2_PAIN"},
	anim_downloop = {SPR_PLAY, A, 1, "SPR2_PAIN"},
	anim_getup = {SPR_PLAY, A, 1, "SPR2_SPNG"},
	anim_death = {SPR_PLAY, A, 30, "SPR2_DEAD"},
	anim_revive = {SPR_PLAY, A, 1, "SPR2_SPNG"},
	anim_evoker = {SPR_PLAY, A, 8, "SPR2_BACT"},
	anim_evoker_shoot = {SPR_PLAY, B, 8, "SPR2_BACT"},
	anim_special1 = {SPR_PLAY, A, B, C, D, E, 2, "SPR2_MICG"},
	vfx_summon = {"sfx_flsum1", "sfx_flsum2", "sfx_flsum3"},
    vfx_skill = {"sfx_flskll", "sfx_fldo3"},
    vfx_item = {"sfx_flitem", "sfx_flitm2"},
    vfx_hurt = {"sfx_flhurt"},
    vfx_hurtx = {"sfx_flxhrt"},
    vfx_die = {"sfx_fldie"},
    vfx_heal = {"sfx_flheal"},
    vfx_healself = {"sfx_flheal"},
    vfx_kill = {"sfx_flkll1", "sfx_flkll2"},
    vfx_1more = {"sfx_fl1mor"},
    vfx_crit = {"sfx_flcrit"},
    vfx_aoaask = {"sfx_flaoa"},
    vfx_aoado = {"sfx_fldo1", "sfx_fldo2", "sfx_fldo3", "sfx_fldo4"},
    vfx_aoarelent = {"sfx_flrlnt1", "sfx_flrlnt2"},
    vfx_miss = {"sfx_flmiss"},
    vfx_dodge = {"sfx_fldodg", "sfx_flkll1"},
    vfx_win = {"sfx_flwin1", "sfx_flwin2", "sfx_flwin3"},
    vfx_levelup = {"sfx_fllvlu"},
	skills = {"ziodyne", "mapsiodyne", "gigantic fist", "red capote", "debilitate", "brain jack", "swift dance_boss", "god hand"},
	thinker = 	function(mo)
					local btl = server.P_BattleStatus[mo.battlen]
					mo.thinkturns = $ and $+1 or 1
					local enemies = mo.enemies
					
					if mo.thinkturns == 1 // On her first turn...
						return attackDefs["red capote"], {mo} -- She'll always start out with Red Capote on herself
					elseif mo.thinkturns == 2 // On her second turn...
						for i = 1, #mo.allies
							local metal = mo.allies[i]
							return attackDefs["red capote"], {metal} -- She'll buff Metal
						end
					end
					
					if mo.thinkturns == 3 // On her third turn...
						return attackDefs["mapsiodyne"], mo.enemies -- She'll cast Mapsiodyne
					end
					
					if mo.thinkturns >= 3 // For every turn after her third one...
					and mo.buffs["agi"][1] >= -25 // If she doesn't get an agility debuff...
						if btl.turnorder[2] == mo // After the first turn...
							table.remove(btl.turnorder, 2) -- Don't attack again
						end
					end
					
					if mo.thinkturns >= 3
					and mo.buffs["agi"][1] == -25 // If she gets an agility debuff...
						return attackDefs["red capote"], {mo} -- Casts Red Capote
					end
					
					return generalEnemyThinker(mo)
				end,
}

BTL_challengebtllist[#BTL_challengebtllist+1] = {
	name = "Programmed Pals",
	description = {"Metal Sonic and FL Chan form a", "powerful alliance together. Take them on", "in this little demonstratory battle."},
	level = 99,
	music = "SMT3FB",
	time = TICRATE*1800,
	items = {{"hypercombiring", 4}, {"soul food", 4}, {"super1up", 4}, {"me patra gem", 4}},
	subpersonas = {},
	waves = {
		{"metalsonic_boss", "flchan_boss"}
	},
}