-- Persona Support --
if not srb2p return end

-- Stats
charStats["altflchan"] = {
	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 = "mic_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}, {"dodge slash", 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"}, {"evade slash", 49, "dodge slash"},
		
		{"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", 75, "evade slash"},
		
		{"god hand", 85},
	},
}

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

	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_DROPPEDMIC)
					pmic.momz = -30*FRACUNIT
					S_StartSound(pmic, sfx_brakrl)
				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 = "Raise one ally's agility \nby 3 stages.",
	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 == 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_CDUST1
					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"] = {
	name = "Swift Dance",
	type = ATK_PASSIVE|ATK_SLASH|ATK_STRIKE|ATK_PIERCE,
	desc = "Boost Evasion rate\nagainst all physicals \nby 45%",
	power = 45,
	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,
}

-- Weapons
weaponsList["mic_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("mic_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("mic_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 = "altflchan",
	color = SKINCOLOR_GREEN,
	hudcutin = "FLCH_A",
	weak = ATK_SLASH,
	resist = ATK_ELEC|ATK_PSY,
	persona = "sirius",
	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, 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", "god hand"},
	thinker = 	function(mo)
					local btl = server.P_BattleStatus[mo.battlen]
					
					if btl.turn == 1 // On her first turn...
						return attackDefs["red capote"], {mo} -- She'll always start out with Red Capote on herself
					elseif btl.turn == 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
					
					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 = "PVP",
	time = TICRATE*1800,
	items = {{"hyperring", 5}, {"soul food", 5}, {"super1up", 5}, {"patra gem", 5}},
	subpersonas = {},
	waves = {
		{"metalsonic_boss", "flchan_boss"}
	},
}