The sharp game world is saved immediately after the game ticker has run. However, the latest camera position was read from the Doomsday API variables (DD_VIEW_X etc.), which were updated only during view rendering, separately for each player. This means the view position was not up to date for the new sharp world.
Since it is important that the game retains control of where the camera is, the function R_UpdateConsoleView() was added in libcommon, so that it can tell the engine where the view player is located immediately after the mobj thinkers have been run.
NOTE: For multiple local players, there would have to be separate DD_VIEW_* variables (or these global variables should be refactored away).
Fixing player movement
The sharp game world is saved immediately after the
game ticker has run. However, the latest camera position
was read from the Doomsday API variables (DD_VIEW_X
etc.), which were updated only during view rendering,
separately for each player. This means the view position
was not up to date for the new sharp world.
Since it is important that the game retains control of where
the camera is, the function R_UpdateConsoleView() was
added in libcommon, so that it can tell the engine where
the view player is located immediately after the mobj
thinkers have been run.
NOTE: For multiple local players, there would have to be
separate DD_VIEW_* variables (or these global variables
should be refactored away).