Frame Pacing is uneven
under review
fpsGenius
In general, frame pacing is terrible. This manifests as persistent micro stutter over the entire game. Happens at all frame rates i could set to with/without vsync. Idk how nobody else has reported this, its excruciatingly obvious to me and i cant unsee it. It seriously hampers the experience.
Ive attached some screenshots of special k's frame time graph so you can see the constant spikes. For reference, the graph should be completely flat for a stutter-free experience.
Also, as a side note, i dont have the option to use my monitors native refresh rate of 360hz, the game seems to max out at 240.
GlitchTheRobot
under review
Pozitiv Amogus
I need to fix the damn
Doodle
Really old bug, been reported to the dev for a while now but lots of users don't seem to notice it, so it went on a backburner it seems.
I can affirm that its not really a stutter, but the notes being tied to the game
music
progression and not the hardware clock.In Godot, the music files are consumed in chunks, which leads to these stutters.
Test code for a community build did alleviate this issue by tying the note movement to the hardware clock and adding sync checks in case of lag.
The fix is utilizing the
Time.get_ticks_usec()
feature to count "ticks" multiplied by delta
when the main gameplay starts, pausing the counting during pause and recounting the difference after the user had unpaused the gameplay.Pseudo code example below
During initialization:
time_begin = Time.get_ticks_usec() # Get an arbitrary tick number as our starting frame
time_tick_current = time_begin + (start_time * 1000000.0) # Set time begin as our starting point
time_delay = AudioServer.get_time_since_last_mix() + AudioServer.get_output_latency() + chosen_game_latency
During
_process()
: if song_is_playing:
time_tick_current += 1000000.0 * delta * GameManager.song_speed_multiplier # Process a tick by a single tick with delta
time = ((time_tick_current - time_begin)) / 1000000.0 # Convert it to current time in seconds
song_position_ = time - time_delay # Apply to game song position coords
waiting_time = song_position # to track at what point we are going to pause
And to keep the sync in check we can just compare whatever
get_playback_position()
is giving us with time
valueslamjam fpsGenius
slamjam
the game does have a 360 mode now but i doubt that would make a difference. i'm using a 240hz monitor and i've tried experimenting with different frame caps and v-sync on/off but it makes no difference. the scrolling beat bar is supper jittery no matter what
fpsGenius
slamjam yeah it really makes the game unplayable for me. I just can't ignore it.