freeslot("SKINCOLOR_PRAETOR", "sfx_dbljmp")

skincolors[SKINCOLOR_PRAETOR] = { // darkest green
    name = "Praetor",
    ramp = {104,105,106,107,108,109,110,111,119,119,119,119,119,119,119,119},
    invcolor = SKINCOLOR_RED,
    invshade = 9,
    chatcolor = V_GREENMAP,
    accessible = true
}

function A_InterpolatedTrail(actor, var1, var2) // Thank you Princess Plushima

	for i = 0, var1
		P_SpawnMobj(actor.x-((actor.momx/var1)*i),actor.y-((actor.momy/var1)*i), actor.z-((actor.momz/var1)*i), var2)
	end

end

function A_GaussPierce(actor, var1, var2, player) // Inverted A_InterpolatedTrail

	for i = 0, var1
		P_SpawnMobjFromMobj(actor.target, actor.x+(((actor.momx/var1)*i)-actor.target.x),actor.y+(((actor.momy/var1)*i)-actor.target.y), actor.z+(((actor.momz/var1)*i)-actor.target.z), var2)
	end

end

function A_BFGSpray (actor, var1)

	for i = 0, var1
		P_NukeEnemies(actor, actor, var1*FRACUNIT)
	end
end

function A_RotateShell(actor, var1, var2) // for the shotgun shells

	for i = 0, var1
	if actor.valid
		if actor.RandomSide == nil // countdown
			actor.RandomSide = P_RandomRange(1, 4)
		end
	if actor.ShellTimer == nil // countdown
		P_SetObjectMomZ(actor, 5*FRACUNIT)
		actor.ShellTimer = 2048 //timer
	end
		if (P_IsObjectOnGround(actor) == false) // are the shells flying
			actor.rollangle = (actor.rollangle + ANG15) // SPIIIIIIIIIIIIIIINNNNNNNNNNNNNNNNNNN
		elseif actor.RandomSide == 1
			actor.rollangle = 0 // reset angle
		elseif actor.RandomSide == 2
			actor.rollangle = ANGLE_180 // reset angle
		elseif actor.RandomSide == 3
			actor.rollangle = ANGLE_90 // reset angle
		elseif actor.RandomSide == 4
			actor.rollangle = ANGLE_270 // reset angle
		end
	if actor.ShellTimer >= 1 // countdown
		actor.ShellTimer = $1 -1
	end
		if actor.ShellTimer <= 0
			P_KillMobj(actor, actor, actor) // get rid of the shells
			end
		end
	end
end

addHook("PlayerThink", function(player) // Doom slayer player angle
	if(player.mo.skin == "doomguy")
	if player.cmd.sidemove > 0
	and player.cmd.forwardmove > 0
	player.SlayerDirection = player.mo.angle-ANGLE_45
	elseif player.cmd.sidemove > 0
	and player.cmd.forwardmove < 0
	player.SlayerDirection = player.mo.angle-ANGLE_135
	elseif player.cmd.sidemove > 0
	player.SlayerDirection = player.mo.angle-ANGLE_90
	elseif player.cmd.sidemove < 0
	and player.cmd.forwardmove > 0
	player.SlayerDirection = player.mo.angle+ANGLE_45
	elseif player.cmd.sidemove < 0
	and player.cmd.forwardmove < 0
	player.SlayerDirection = player.mo.angle+ANGLE_135
	elseif player.cmd.sidemove < 0
	player.SlayerDirection = player.mo.angle+ANGLE_90
	elseif player.cmd.forwardmove < 0
	player.SlayerDirection = player.mo.angle-ANGLE_180
	else
	player.SlayerDirection = player.mo.angle
		end
	end
end)

addHook("ThinkFrame", do // makes it so you dont need to breathe in space
	for player in players.iterate
	if player.mo.valid
	and not (player.powers[pw_underwater])
	and(player.mo.skin == "doomguy") then
	player.powers[pw_spacetime] = 233232233
		end
	end
end)

addHook("AbilitySpecial", function(player) // double jump
	if player.mo and player.mo.skin == "doomguy"
	and not (player.pflags & PF_THOKKED)
	and not (player.exiting)
	and (P_IsObjectOnGround(player.mo) == false)
	player.mo.state = S_PLAY_JUMP
	P_SpawnMobjFromMobj(player.mo, P_RandomRange(-10, 10)*FRACUNIT, -5*FRACUNIT, 0, MT_SPINDUST)
	P_SpawnMobjFromMobj(player.mo, P_RandomRange(-10, 10)*FRACUNIT, -5*FRACUNIT, 0, MT_SPINDUST)
	player.pflags = $|PF_JUMPED|PF_THOKKED|PF_STARTJUMP
	S_StartSound(player.mo, sfx_dbljmp)
	if (player.powers[pw_underwater]) // halves vertical momentum when underwater
	P_SetObjectMomZ(player.mo, 5*FRACUNIT)
	else
	P_SetObjectMomZ(player.mo, 10*FRACUNIT)
		end
	end
end)

if not(kirbyabilitytable) // thokin kirby stuff
	rawset(_G, "kirbyabilitytable", {})
end
kirbyabilitytable["doomguy"] = 4 //BOMB

sfxinfo[sfx_dbljmp].caption = "Double Jump"

if srb2p return end // make sure its not persona
addHook("PlayerThink", function(player) // crouch
	if player.mo.skin == "doomguy"
	and not (player.exiting)
	and not G_RingSlingerGametype()
	if (player.cmd.buttons & BT_TOSSFLAG)
	player.height = 30*FRACUNIT
	player.spinheight = 30*FRACUNIT
	player.pflags = $|PF_STARTDASH
	if not (player.mo.state == S_PLAY_CRAWL)
	player.mo.state = S_PLAY_CRAWL
	end
	elseif player.height == 30*FRACUNIT
	and ((player.mo.ceilingz - player.mo.floorz) > skins[player.mo.skin].height + FRACUNIT)
	player.height = 56*FRACUNIT
	player.spinheight = 56*FRACUNIT
	player.mo.state = S_PLAY_STND
		end
	end
end)

addHook("PlayerThink", function(player) // crouch
	if player.mo.skin == "doomguy"
	and not (player.exiting)
	and not G_RingSlingerGametype()
	and player.height == 30*FRACUNIT
	and not (player.mo.state == S_PLAY_CRAWL)
	player.mo.state = S_PLAY_CRAWL
	end
end)