-- Persona Support --
if not srb2p return end

-- Stats
charStats["pflchan"] = {
	name = "FL Chan",
	basehp = 50,
	basesp = 60,
	persona = "sirius",
	melee_natk = "flchan_atk1",
	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 with more of a focus on support, albeit her low Endurance. She may be weak to Slash skills, but she can eventually avoid them by combining her Agility buffs, Agility debuffs, and dodge passives."
}

-- 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 = 8,
	magic = 8,
	endurance = 6,
	luck = 10,
	agility = 8,
	weak = ATK_SLASH,
	resist = ATK_ELEC|ATK_PSY,
	skills = {
		--{"zio", 1}, {"mapsi", 3},
		--{"media", 5}, {"teardrop", 10},
		--{"sukukaja", 12}, {"sukunda", 15},
		--{"marin karin", 19}, {"swift dance 1", 23},
		
		--{"zionga", 27, "zio"}, {"mapsio", 30, "mapsi"},
		--{"mediarama", 34, "media"}, {"moondrop", 38, "teardrop"},
		--{"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"}, {"stardrop", 65, "moondrop"},
		--{"red capote", 67, "masukukaja"}, {"debilitate", 69, "masukunda"},
		--{"brain jack", 71, "sexy dance"}, {"swift dance 3", 75, "swift dance 2"},
		
		--{"god hand", 85},
		
		{"zio", 1}, {"media", 3},
		{"teardrop", 5}, {"swift dance 1", 10},
		{"mapsi", 12}, {"marin karin", 15},
		{"sukunda", 19}, {"masukukaja", 23},
		
		{"zionga", 27, "zio"}, {"mediarama", 30, "media"},
		{"moondrop", 34, "teardrop"}, {"swift dance 2", 38, "swift dance 1"},
		{"mapsio", 41, "mapsi"}, {"sexy dance", 43, "marin karin"},
		{"masukunda", 46, "sukunda"}, {"ziodyne", 49, "zionga"},
		
		{"mediarahan", 52, "mediarama"}, {"stardrop", 57, "moondrop"},
		{"swift dance 3", 60, "swift dance 2"}, {"mapsiodyne", 65, "mapsio"},
		{"brain jack", 67, "sexy dance"}, {"debilitate", 69, "masukunda"},
		{"red capote", 71, "masukukaja"}, {"thunder reign", 75, "ziodyne"},
		
		{"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. \nMay inflict Shock.",
	target = TGT_ALLENEMIES,
	physical = true,
	anim_norepel = true,
	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["swift dance 1"] = {
	name = "Swift Dance I",
	type = ATK_PASSIVE|ATK_SLASH|ATK_STRIKE|ATK_PIERCE,
	desc = "Boost Evasion rate \nagainst Physical attacks \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 Physical attacks \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 Physical attacks \nby 50%",
	power = 50,
	passive = PSV_DODGE,
	implicit = "brain buster",
}

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_boss"] = {
	name = "Swift Dance",
	type = ATK_PASSIVE|ATK_SLASH|ATK_STRIKE|ATK_PIERCE,
	desc = "Boost Evasion rate \nagainst Physical attacks \nby 50%",
	power = 50,
	passive = PSV_DODGE,
}

-- Team Attack
attackDefs["brain buster"] = {
	name = "Brain Buster",
	type = ATK_STRIKE,
	power = 120,
	accuracy = 80,
	statuschance = 45,
	status = COND_BRAINWASH,
	costtype = CST_HPPERCENT,
	cost = 22,
	desc = "Team-Up (FL Chan & Miku). \nHeavy Strike damage. \n45% 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 == 35 + (#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 = 75,
	level = 99,
	hp = 7560,
	sp = 3240,
	strength = 78,
	magic = 56,
	endurance = 99,
	agility = 56,
	luck = 26,
	melee_natk = "metal_atk1",
	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"},
	thinker = 	function(mo)
					local btl = server.P_BattleStatus[mo.battlen]
					mo.thinkturns = $ and $+1 or 1
					local enemies = mo.enemies
					
					-- If Metal gets Agility debuffs anytime after his first turn, he'll cast Dekunda to get rid of them.
					if mo.thinkturns >= 2
					and mo.buffs["agi"][1] <= -25
						return attackDefs["dekunda"], mo.allies
					end
					
					return generalEnemyThinker(mo)
				end,
}

enemyList["flchan_boss"] = {
	name = "FL Studio Chan",
	skillchance = 75,
	level = 99,
	hp = 5400,
	sp = 6480,
	strength = 67,
	magic = 67,
	endurance = 46,
	agility = 67,
	luck = 79,
	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 = {"stardrop", "swift dance_boss", "mapsiodyne", "brain jack", "debilitate", "red capote", "thunder reign", "god hand"},
	thinker = 	function(mo)
					local btl = server.P_BattleStatus[mo.battlen]
					mo.thinkturns = $ and $+1 or 1
					local enemies = mo.enemies
					
					-- On her first turn, she'll cast Red Capote on herself. On the second turn, she'll buff Metal.
					if mo.thinkturns == 1
						return attackDefs["red capote"], {mo}
					elseif mo.thinkturns == 2
						for i = 1, #mo.allies
							local metal = mo.allies[i]
							return attackDefs["red capote"], {metal}
						end
					end
					
					-- If FL Chan gets Agility debuffs anytime after her second turn, she'll cast Red Capote to get rid of them.
					if mo.thinkturns >= 3
					and mo.buffs["agi"][1] <= -25
						table.remove(btl.turnorder, 2)
						return attackDefs["red capote"], {mo}
					elseif btl.turnorder[2] == mo
						table.remove(btl.turnorder, 2)
					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}, {"dekaja gem", 4}, {"dekunda gem", 4}},
	subpersonas = {},
	waves = {
		{"metalsonic_boss", "flchan_boss"}
	},
}