local function giveMiss(tile)
Note.TextColor3 = Color3.fromRGB(255, 80, 80)
Note.Text = 'MISS'
Combo = 0
ComboLabel.Text = ''
spawn(function()
if tile then
tile.ImageColor3 = Color3.fromRGB(255, 80, 80)
wait(0.25)
tile.ImageColor3 = Color3.fromRGB(255, 255, 255)
end
end)
if Score >= 3 then
Score = Score - 3
end
wait(0.25)
Note.Text = ''
end
-- create the tile and move it down. Destroy when at bottom
-- I try using Scrolling:FindFirstChild(Tile.Name) to check if it still exists, and for a split second it does
-- even if I have removed it already (from pressing the key)
spawn(function()
Tile:TweenPosition(UDim2.new(TilePosition.Position.X.Scale, 0, 1, 0), Enum.EasingDirection.Out, Enum.EasingStyle.Linear, timer, true)
wait(timer)
if Scrolling:FindFirstChild(Tile.Name) then
giveMiss()
Tile:Destroy()
end
end)

Can see, the second one I got Perfect and then a Miss as well. As well as the last one, I got Great but then a miss as well.
This is what checks the position when I press the keys
local function checkPosition()
if Debounce then return end
Debounce = true
local BottomTile = Bottom:FindFirstChild(CurrentTile.Name)
if CurrentTile.Position.Y.Scale < 0.7 and CurrentTile.Position.Y.Scale > 0.3 then
local ScorePoints = 0
if CurrentTile.Position.Y.Scale < 0.55 and CurrentTile.Position.Y.Scale > 0.45 then
Note.TextColor3 = Color3.fromRGB(29, 252, 255)
Note.Text = 'PERFECT'
ScorePoints = 5
BottomTile.ImageColor3 = Color3.fromRGB(29, 252, 255)
elseif CurrentTile.Position.Y.Scale < 0.6 and CurrentTile.Position.Y.Scale > 0.4 then
Note.TextColor3 = Color3.fromRGB(79, 255, 114)
Note.Text = 'GREAT'
ScorePoints = 3
BottomTile.ImageColor3 = Color3.fromRGB(79, 255, 114)
else
Note.TextColor3 = Color3.fromRGB(252, 199, 255)
Note.Text = 'OK'
ScorePoints = 1
BottomTile.ImageColor3 = Color3.fromRGB(252, 199, 255)
end
Combo = Combo + 1
if Combo >= 5 then
ComboLabel.Text = 'COMBO ' .. Combo
ScorePoints = ScorePoints + Combo
end
Score = Score + ScorePoints
spawn(function()
createScoreLabel(ScorePoints, BottomTile)
end)
BottomTile:TweenSize(UDim2.new(0.25, 0, 1, 0), Enum.EasingDirection.Out, Enum.EasingStyle.Linear, 0.05, true)
CurrentTile:Destroy()
else
giveMiss(BottomTile)
end
wait(0.05)
if BottomTile then
BottomTile:TweenSize(UDim2.new(0.2, 0, 1, 0), Enum.EasingDirection.Out, Enum.EasingStyle.Linear, 0.05, true)
end
BottomTile.ImageColor3 = Color3.fromRGB(255, 255, 255)
Note.Text = ''
wait(0.5)
Debounce = false
end