// Multi-Thok

addHook("PlayerThink", function(player)
	if player.mo and player.mo.valid
		if player.mo.skin == "dark"
			if player.pflags & PF_THOKKED
				player.mo.rollangle = 0
				if player.cmd.buttons & BT_JUMP
				and not player.mo.target
				and not player.dark94thokked
					if player.mo.state != S_PLAY_ROLL
						player.mo.state = S_PLAY_ROLL
					end
					if (player.dark94thokcharge and player.dark94thokcharge >= 6)
						player.mo.momx = $*8/9
						player.mo.momy = $*8/9
						player.mo.momz = 0
					end
					if player.dark94thokcharge
						player.dark94thokcharge = $+1
						if player.dark94thokcharge == 6
							S_StartSound(nil, sfx_kc47, player)
						end
						if player.dark94thokcharge > 4*TICRATE
							S_StartSound(nil, sfx_kc46, player)
							player.mo.state = S_PLAY_PAIN
							player.pflags = $ & ~PF_JUMPED & ~PF_THOKKED
							player.dark94thokcharge = 0
						end
					else
						player.dark94thokcharge = 1
					end
					player.pflags = $|PF_JUMPED
				else
					player.dark94thokked = true
					if not player.mo.target
						if player.dark94thokcharge
							if player.dark94thokcharge >= 6
								P_SpawnThokMobj(player)
								if player.dark94thokcharge >= 105
									S_StartSound(nil, sfx_supert, player)
									if player.powers[pw_super]
										P_NukeEnemies(player.mo, player.mo, 700*FRACUNIT)
									end
									P_InstaThrust(player.mo, player.mo.angle, 150*player.mo.scale)
								elseif player.dark94thokcharge >= 70
									S_StartSound(nil, sfx_kc31, player)
									if player.powers[pw_super]
										P_NukeEnemies(player.mo, player.mo, 350*FRACUNIT)
									end
									P_InstaThrust(player.mo, player.mo.angle, 120*player.mo.scale)
								else
									S_StartSound(nil, sfx_zoom, player)
									if player.powers[pw_super]
										P_NukeEnemies(player.mo, player.mo, 100*FRACUNIT)
									end
									local dark94thokghost = P_SpawnGhostMobj(player.mo)
									dark94thokghost.fuse = 4
									dark94thokghost.colorized = true
									P_InstaThrust(player.mo, player.mo.angle, 80*player.mo.scale)
								end
							end
							player.dark94thokcharge = 0
						end
						if player.speed > 140*player.mo.scale
							local dark94thokfire = P_SpawnGhostMobj(player.mo)
							dark94thokfire.target = player.mo
							dark94thokfire.fuse = 10
							dark94thokfire.tics = 5
							dark94thokfire.frame = S|FF_FULLBRIGHT
							dark94thokfire.sprite = SPR_FIRS
							dark94thokfire.dark94thokfire = true
							A_CapeChase(dark94thokfire)
						end
						if player.speed > 100*player.mo.scale
							local dark94thokghost = P_SpawnGhostMobj(player.mo)
							dark94thokghost.fuse = 4
							dark94thokghost.colorized = true
						end
					end
					player.pflags = $|PF_JUMPED
					if player.mo.state != S_PLAY_ROLL
						player.mo.state = S_PLAY_ROLL
					end
					player.mo.rollangle = 0
					if player.mo.target
						player.dark94tricktime = 1*TICRATE
						if P_RandomRange(1, 5) == 1
							player.dark94trickstate = S_PLAY_ROLL
							player.dark94trickrollangle = false
							player.dark94trickangle = false
						elseif P_RandomRange(1, 5) == 2
							player.dark94trickstate = S_PLAY_SPRING
							player.dark94trickrollangle = true
							player.dark94trickangle = true
						elseif P_RandomRange(1, 5) == 3
							player.dark94trickstate = S_PLAY_WAIT
							player.dark94trickrollangle = false
							player.dark94trickangle = true
						elseif P_RandomRange(1, 5) == 4
							player.dark94trickstate = S_PLAY_RIDE
							player.dark94trickrollangle = false
							player.dark94trickangle = true
						elseif P_RandomRange(1, 5) == 5
							player.dark94trickstate = S_PLAY_RUN
							player.dark94trickrollangle = true
							player.dark94trickangle = true
						end
					else
						player.dark94tricktime = 0
						player.dark94trickstate = nil
						player.dark94trickrollangle = false
						player.dark94trickangle = false
					end
				end
			else
				player.dark94thokked = false
				player.dark94thokcharge = 0
				if player.dark94tricktime
					if P_PlayerInPain(player)
						player.mo.rollangle = 0
						player.dark94tricktime = 0
					else
						if ((P_MobjFlip(player.mo) == 1 and player.mo.momz > 0) or (P_MobjFlip(player.mo) == -1 and player.mo.momz < 0))
						or (player.dark94tricktime < 35 and not P_IsObjectOnGround(player.mo))
							local dark94trickghost = P_SpawnGhostMobj(player.mo)
							dark94trickghost.fuse = 4
							dark94trickghost.colorized = true
							if player.dark94tricktime == 33
								S_StartSound(nil, sfx_kc48, player)
							end
							if player.dark94trickstate
								player.mo.state = player.dark94trickstate
							end
							if player.dark94trickrollangle
								player.mo.rollangle = $+ANG20
							end
							if player.dark94trickangle
								player.drawangle = $+ANG20
							end
							if player.dark94tricktime == 1
								player.mo.state = S_PLAY_SPRING
								player.mo.rollangle = 0
							end
							player.dark94tricktime = $-1
						else
							local dark94trickghost = P_SpawnGhostMobj(player.mo)
							dark94trickghost.fuse = 4
							dark94trickghost.colorized = true
							S_StartSound(nil, sfx_kc55, player)
							player.mo.state = S_PLAY_SPRING
							player.mo.rollangle = 0
							player.dark94tricktime = 0
						end
					end
				end
			end
		end
	end
end)

addHook("MobjThinker", function(mobj)
	if mobj and mobj.valid
	and mobj.dark94thokfire
		A_CapeChase(mobj)
	end
end, MT_GHOST)