
//Classic spindash behavior by rumia1!
addHook("ThinkFrame", do
	for player in players.iterate
		if player.mo and player.mo.valid
		and not (player.mo.state == S_PLAY_DEAD)
			if(player.mo.skin == "ultclsonic")
				if player.mo.sprite2 == SPR2_FLY_
				or player.mo.sprite2 == SPR2_TIRE
					player.mo.spritexscale = 5*FRACUNIT/4
					player.mo.spriteyscale = 5*FRACUNIT/4
				else
					player.mo.spritexscale = FRACUNIT
					player.mo.spriteyscale = FRACUNIT
				end
			//setting up the variable to check for how many charges the current spindash has
				if player.spincharges == nil
					player.spincharges = 0
				end
			//this one checks how long the spindash has been held for
				if player.dashtime == nil
				or not (player.pflags & PF_STARTDASH)
					player.dashtime = 15
				end
			//and this one checks how many automatic charges we've added, as we can only have 4
				if player.dashcounter == nil
				or not (player.pflags & PF_STARTDASH)
					player.dashcounter = 0
				end
			//checks if player was holding jump last frame
				if player.jumpwasdown == nil
					player.jumpwasdown = 0
				end
				
				if player.forwardwasdown == nil
					player.forwardwasdown = 0
				end
				if player.backwasdown == nil
					player.backwasdown = 0
				end
				if player.leftwasdown == nil
					player.leftwasdown = 0
				end
				if player.rightwasdown == nil
					player.rightwasdown = 0
				end
				
			//makes our life easier
 				if player.pflags & PF_STARTDASH
 					player.dashspeed = player.maxdash
 					player.mindash = player.maxdash - (21*player.dashspeed)
 				end
		
				if player.dashcounter >= 3
					player.dashcounter = 3
				end
				if player.dashtime <= 0
					player.dashtime = 15
				end
				if testing == true then print(player.dashcounter, player.dashtime, player.dashspeed/FRACUNIT, player.spincharges) end
				if (player.pflags & PF_STARTDASH)
					player.jumpfactor = 0
					player.dashtime = $ - 1
					if player.spincharges == 0
						player.mindash = 23*FRACUNIT
						player.maxdash = 25*FRACUNIT
						player.mindash = player.maxdash - (21*player.dashspeed)
					else
						player.maxdash = (25*FRACUNIT) + (player.spincharges*(5*FRACUNIT))
					end
					if (player.cmd.forwardmove >= 25)
					and not (player.forwardwasdown)
					or (player.cmd.forwardmove <= -25)
					and not (player.backwasdown)
					or (player.cmd.sidemove >= 25)
					and not (player.rightwasdown)
					or (player.cmd.sidemove <= -25)
					and not (player.leftwasdown)
					or (player.cmd.buttons & BT_JUMP)
					and not (player.jumpwasdown)
						if player.spincharges < 15
							player.spincharges = $ + 1
						else
							player.spincharges = 15
						end
						S_StopSound(player.mo)
						S_StartSound(player.mo, 478 + player.spincharges)
					end

				else
					player.jumpfactor = skins[player.mo.skin].jumpfactor
					player.spincharges = 0
				end
			//Our "was jump pressed last frame?" check ends here
				player.jumpwasdown = (player.cmd.buttons & BT_JUMP)
				if (player.cmd.forwardmove >= 25)
					player.forwardwasdown = 1
				else
					player.forwardwasdown = 0
				end
				if (player.cmd.forwardmove <= -25)
					player.backwasdown = 1
				else
					player.backwasdown = 0
				end
				if (player.cmd.sidemove >= 25)
					player.rightwasdown = 1
				else
					player.rightwasdown = 0
				end
				if (player.cmd.sidemove <= -25)
					player.leftwasdown = 1
				else
					player.leftwasdown = 0
				end
			end
		end
	end
end)