// Wall Slide

freeslot("S_DARK94_WALLSLIDE")

states[S_DARK94_WALLSLIDE] = {
	sprite = SPR_PLAY,
	frame = SPR2_ROLL|E,
	tics = -1,
	nextstate = S_DARK94_WALLSLIDE
}

addHook("PlayerThink", function(player)
	if player.mo and player.mo.valid
		if player.mo.skin == "dark"
			if player.cmd.buttons & BT_USE
			and not P_IsObjectOnGround(player.mo)
				player.dark94wallsliding = true
			else
				player.dark94wallsliding = false
			end
		end
	end
end)

addHook("MobjMoveBlocked", function(mo, mobj, line)
	if mo and mo.valid
	and not (mobj and mobj.valid and mobj.flags & (MF_MONITOR|MF_ENEMY|MF_BOSS))
		if mo.skin == "dark"
			if line and line.valid
				if mo.player.dark94wallsliding
					if (leveltime % 3) == 0
						S_StartSound(mo, sfx_kc44, mo.player)
						P_SpawnMobjFromMobj(mo, 0, 0, mo.height/2, MT_DUST)
					end
					mo.momx = $*8/9
					mo.momy = $*8/9
					if P_MobjFlip(mo) == 1
						if mo.momz > 0
							mo.momz = $*14/15
						else
							mo.momz = -(5*mo.scale)
						end
					else
						if mo.momz < 0
							mo.momz = $*14/15
						else
							mo.momz = 5*mo.scale
						end
					end
					mo.state = S_DARK94_WALLSLIDE
				elseif not P_IsObjectOnGround(mo)
					if mo.state == S_DARK94_WALLSLIDE
						S_StartSound(mo, sfx_kc52, mo.player)
						mo.angle = $+ANGLE_180
						mo.player.drawangle = mo.angle
						mo.momz = 15*mo.scale*P_MobjFlip(mo)
						P_InstaThrust(mo, mo.angle, 10*FRACUNIT)
						mo.state = S_PLAY_JUMP
					end
				end
			elseif mobj and mobj.valid
				if mo.player.dark94wallsliding
					if (leveltime % 3) == 0
						S_StartSound(mo, sfx_kc44, mo.player)
						P_SpawnMobjFromMobj(mo, 0, 0, mo.height/2, MT_DUST)
					end
					mo.momx = $*8/9
					mo.momy = $*8/9
					if P_MobjFlip(mo) == 1
						if mo.momz > 0
							mo.momz = $*14/15
						else
							mo.momz = -(4*mo.scale)
						end
					else
						if mo.momz < 0
							mo.momz = $*14/15
						else
							mo.momz = 4*mo.scale
						end
					end
					mo.state = S_DARK94_WALLSLIDE
				elseif not P_IsObjectOnGround(mo)
					if mo.state == S_DARK94_WALLSLIDE
						S_StartSound(mo, sfx_kc52, mo.player)
						mo.angle = $+ANGLE_180
						mo.player.drawangle = mo.angle
						mo.momz = 15*mo.scale*P_MobjFlip(mo)
						P_InstaThrust(mo, mo.angle, 10*FRACUNIT)
						mo.state = S_PLAY_JUMP
					end
				end
			end
		end
	end
end)