-
Notifications
You must be signed in to change notification settings - Fork 2.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Bug Report: "Sick" hit window feels offset #2969
Comments
I reported this in #2877 , they thought I was insane, but it’s real |
Also thanks for the visualization, it was hard to describe with only words |
Good to have confirmation on this issue. |
I’ll make one tomorrow |
bug.mp4game and video recorded in 144 fps |
Great demonstration, thank you! Can you send the same video with the score counter showing? I'm curious how many points you're getting per note. |
here's fullscreen bug.fullscreen.mp4 |
also the first image is not very accurate but it explains the point |
Thanks for the videos! I just tested this and replicated the issue. It looks to me like a visually perfect hit (arrow on arrow) is scored perfectly (500 points), but the window is tighter above the arrow and looser below the arrow. I must not have noticed this before due to my own input delay, but this should definitely be addressed for better input accuracy. |
I wonder if this happens because the strum line is visually positioned higher than the code for the hit windows checks for? |
This is probably the cause, but I have no idea what part of the code handles the placement of the hit window If someone finds it, please send it here! |
it might be this? idk much about coding but this is my suggestion
|
That looks like the one! I'll see if I can run the game without that strumline offset. |
After testing, However, a few things broke when I removed the offset, so it may take a bit of fine-tuning to find the right placement for the strumline. This image was when I removed the offset for x rather than y (whoops!) Alternatively (and probably preferably), we could just move the hit window itself a little higher. |
@DoReNtOs If you can reliably reproduce this, can you try going into Options -> Input Offsets and changing your visual offsets, and see if it improves after doing that?
@Hundrec This is incorrect, the notes themselves are affected by the INITIAL_OFFSET, see below: Funkin/source/funkin/play/notes/Strumline.hx Line 359 in 27bf88c
|
Ah, thanks for the clarification! Good thing their positions are handled together. |
I was able to test something. Input.Offset.Test.mp4Notice how if I press just a little bit above the strum it counts as a miss, which is correct behaviour. However, the judgement is still Sick, even though it would need to be Shit, since I would have hit the note just barely. Meaning somewhere here should be the problem: function goodNoteHit(note:NoteSprite, input:PreciseInputEvent):Void
{
// Calculate the input latency (do this as late as possible).
// trace('Compare: ${PreciseInputManager.getCurrentTimestamp()} - ${input.timestamp}');
var inputLatencyNs:Int64 = PreciseInputManager.getCurrentTimestamp() - input.timestamp;
var inputLatencyMs:Float = inputLatencyNs.toFloat() / Constants.NS_PER_MS;
// trace('Input: ${daNote.noteData.getDirectionName()} pressed ${inputLatencyMs}ms ago!');
// Get the offset and compensate for input latency.
// Round inward (trim remainder) for consistency.
var noteDiff:Int = Std.int(Conductor.instance.songPosition - note.noteData.time - inputLatencyMs);
var score = Scoring.scoreNote(noteDiff, PBOT1);
var daRating = Scoring.judgeNote(noteDiff, PBOT1);
... I guess just adding Conductor.instance.inputOffset to the noteDiff, should fix it. var noteDiff:Int = Std.int(Conductor.instance.songPosition - note.noteData.time - inputLatencyMs + Conductor.instance.inputOffset); |
just tried this and it seems to fix it. |
I just tried trying getting a perfect score from a hit (500 point) with visual offset set to 100 and -100, and it doesn't affect the hit window. I still needed to hit a little lower than strumline to get 500 points |
Made something First image shows note 2 frames before it being hit, and the second image show note 1 frame before it being hit (the next frame is note being hit) So I added the lines to show off something Blue lines are the tips of the strum I took the distance between green and orange lines, and added this distance above them, to show the LATEST (because note hit could have happened before, but couldn't be shown before the next frame) position of the tips of the note being hit If the opponent doesn't hit notes perfectly (very unlikely) then all I wrote in this comment makes no sense Also the strum is vertically longer than the notes themselves |
By the way, input offset doesn't change anything either. You still need to press in one exact position to get 500 points |
So this means that the problem with hit window being tighter on top and looser below is caused by strumline being longer than the notes and slightly above, and player percepting it like that, and not with timing or something, because
|
That means that the REAL solution to this issue is to tweak strumline's sprites a little so they match the actual notes, and move it a little lower. But AFAIK devs don't accept pull requests with fan-made or edited official art |
Thanks for the super detailed analysis! I'd like to see what the devs think about this and which solution they like best. |
This has been a very interesting thread so far. For the record, we will consider approving minor tweaks to the official art such as positioning fixes, but not "meaningful" fixes like adding new sprites. |
This is still a thing, right? |
basically when you hit what's on the left you get a "good" but when you hit what's on right you get "sick!!" (image recreated from memory)
![left good right sick](https://private-user-images.githubusercontent.com/88308663/346249227-4b4b2be5-beb3-48bd-84b4-9df95cd5c5ce.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNDQwODQsIm5iZiI6MTczOTM0Mzc4NCwicGF0aCI6Ii84ODMwODY2My8zNDYyNDkyMjctNGI0YjJiZTUtYmViMy00OGJkLTg0YjQtOWRmOTVjZDVjNWNlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEyVDA3MDMwNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTA3NTFmYmQxODM5OTVlMzQ4MWQzNzg1NmI1OTA0YmY1Mjc4MmNhZjNkNDA2YjhlMmU1ODQyNjY0YzY1OTM0YzQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.RtN9wviUxycCxRDWSHKpJZy5bNvt4K7JLtZtfVPhp2E)
The text was updated successfully, but these errors were encountered: