// Shitty Sonic 4 Episode II friend Spin-Dash :)

freeslot("SPR_DSPN", "S_D94XKZ_DUOSPIND1", "S_D94XKZ_DUOSPIND2", "S_D94XKZ_DUOSPIND3", "S_D94XKZ_DUOSPIND4", "S_D94XKZ_DUOSPIN", "SKINCOLOR_D94XKZ_DUOSPIND")

states[S_D94XKZ_DUOSPIND1] = {
	tics = -1,
	sprite = SPR_DSPN,
	frame = A|FF_FULLBRIGHT,
	nextstate = S_D94XKZ_DUOSPIND2
}

states[S_D94XKZ_DUOSPIND2] = {
	tics = -1,
	sprite = SPR_DSPN,
	frame = B|FF_FULLBRIGHT,
	nextstate = S_D94XKZ_DUOSPIND3
}

states[S_D94XKZ_DUOSPIND3] = {
	tics = -1,
	sprite = SPR_DSPN,
	frame = C|FF_FULLBRIGHT,
	nextstate = S_D94XKZ_DUOSPIND4
}

states[S_D94XKZ_DUOSPIND4] = {
	tics = -1,
	sprite = SPR_DSPN,
	frame = D|FF_FULLBRIGHT,
	nextstate = S_D94XKZ_DUOSPIND1
}

states[S_D94XKZ_DUOSPIN] = {
	tics = -1,
	sprite = SPR_DSPN,
	frame = E|FF_FULLBRIGHT,
	nextstate = S_D94XKZ_DUOSPIN
}

skincolors[SKINCOLOR_D94XKZ_DUOSPIND] = {
	name = "Duo Spin-Dash",
	ramp = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
	invcolor = SKINCOLOR_BLACK,
	invshade = 15,
	chatcolor = V_INVERTMAP,
	accessible = false
}

addHook("PlayerThink", function(player)
	if player.bot
	and not multiplayer
		if player.botleader
			if (player.botleader.mo.skin == "dark" or player.botleader.mo.skin == "xkz")
			and (player.mo.skin == "dark" or player.mo.skin == "xkz")
				if player.botleader.mo.state == S_PLAY_SPINDASH
				and player.mo.state == S_PLAY_SPINDASH
				and player.pflags & PF_STARTDASH
				and not player.botleader.d94xkzduospindash
					S_StartSound(nil, sfx_kc33, player.botleader)
					player.botleader.d94xkzduospindash = true
				end
				if player.botleader.d94xkzduospindash
					if player.botleader.pflags & PF_SPINNING
					and not (player.botleader.pflags & PF_JUMPED)
						player.powers[pw_nocontrol] = 2
						player.powers[pw_flashing] = 2
						player.mo.momx = player.botleader.mo.momx
						player.mo.momy = player.botleader.mo.momy
						player.mo.momz = player.botleader.mo.momz
						player.mo.flags2 = $|MF2_DONTDRAW
						P_TeleportMove(player.mo, player.botleader.mo.x, player.botleader.mo.y, player.botleader.mo.z)
						player.botleader.mo.scale = FRACUNIT*3/2
						player.botleader.charflags = $|SF_CANBUSTWALLS
						player.botleader.mo.color = SKINCOLOR_D94XKZ_DUOSPIND
						if player.botleader.mo.momx
						or player.botleader.mo.momy
							player.botleader.mo.state = S_D94XKZ_DUOSPIN
						else
							player.botleader.mo.state = S_D94XKZ_DUOSPIND1+(leveltime % 4)
						end
					else
						if player.botleader.pflags & PF_JUMPED
							player.botleader.mo.state = S_PLAY_ROLL
						else
							player.botleader.mo.state = S_PLAY_SPRING
						end
						player.mo.scale = FRACUNIT
						player.mo.flags2 = $ & ~MF2_DONTDRAW
						player.botleader.mo.scale = FRACUNIT
						player.botleader.charflags = skins[player.botleader.skin].flags
						player.botleader.mo.color = player.botleader.skincolor
						player.botleader.d94xkzduospindash = false
					end
				end
			end
		end
	end
end)

addHook("MobjCollide", function(mo, mobj)
	if not (mo and mo.valid) then return end
	if not (mobj and mobj.valid) then return end
	if mo.type != MT_PLAYER then return end
	if (mobj.type != MT_SPIKE and mobj.type != MT_WALLSPIKE) then return end
	if (mo.skin != "dark" and mo.skin != "xkz") then return end
	if not mo.player.d94xkzduospindash then return end
	if mo.z+mo.height < mobj.z then return end
	if mobj.z+mobj.height < mo.z then return end

	P_KillMobj(mobj, mo, mo)
end)

addHook("ThinkFrame", do
	skincolors[SKINCOLOR_D94XKZ_DUOSPIND].ramp = skincolors[SKINCOLOR_SUPERSKY2].ramp
end)