I am trying to add fullscreen support to a game, and so far, my observations don't match yours.
I have a 60 Hz monitor, so I am setting my room's speed to 10, to make the problem easy to visualies. If I run the game with sync off, room_speed reads 10, and fps reads 10 (and all movement is unsurprisingly very jerky). However, if I enable sync, room_speed still reads 10, but fps is now 60 (and everything is buttery smooth).
For anything using delta_time, this doesn't really matter. However, my sprite animation speeds are all calculated based on room_speed. Lets say I have a sprite that I want to run at 10 FPS. I set sprite_speed = 10 / room_speed. With sync off, this works correctly regardless of what I set my room speed to. For example, with a room_speed of 10, my image_index goes up by 1 every step and the animation behaves as expected. With sync on though, image_index still goes up by 1 every step (because room_speed still reports 10), but the steps are happening 60 times per seconds, so the animation runs too fast. The same happens with alarms.
Short of animating my sprites manually (I don't really use the built in alarms any more, so that's not such an issue), I don't really know how to work around this. I could use the value of fps, but this can fluctuate depending on load, and I wouldn't want to calculate an animation speed based on a value that could be far from the nominal. You could work around that by re-calculating the speed every step, but at that point you might as well animate the sprite manually.
Is there a way to determine the target frame rate when sync is enabled?