Issue fixes: - D643 (#145 b/c, #149): Original control style is a strict virtual N64 pad (native buttons in stage/menu/watch/tank, per-seat Input.N64Pad remap, Input.N64StickFeel) - D605 + D645 (#145 a): Invert look reaches the original styles; in Original it is the game's own Look up/down, synced with the F10 row - D606 (#144): optional always-visible mission timer - D644 (#146): IA4 decodes as the RDP's I3:A1 (file-select crest drew on a dark square) - D581 (#151): open on the real primary monitor (SDL display 0) and centre every window placement in the display's global bounds; the earlier "display at (0,0)" rule still picked the left monitor - D580 (#153, #156): runtime check of the propDef type/end-of-list fix - D646: F10 dropdown popup stays inside the settings box Frame rate (#148): - D578: Auto follows the display up to 240 (4 presents per sim tick, the renderer's ceiling); 165 and 240 in the Frame rate cap row Rolled in from release/v0.7.0: - D632: release the GL context + window before exit (BSOD 0x119) - D626: Windows per-monitor DPI awareness - D639: exclusive fullscreen uses the desktop mode - verify.sh: a frame-size mismatch fails; demobatch/flicker_scan harness Release gate, licenses, docs: - NOTICE: macOS packaging and pi/ coverage; runtime libraries bundled in the downloads (SDL2/SDL3, zlib, MinGW runtime, macOS GCC runtime) - macOS package ships SDL3, GCC COPYING.RUNTIME and the GPL-3.0 text (tools_pc/dist/GPL-3.0.txt) - README: release date 2026-10-13, "Why play this port", Legal (Apple, runtime licenses), frame-rate text; site date tokens - tools_pc/release_gate.sh: one-command win/deck/mac release checks - release notes, findings D578/D580/D581/D643-D646 + index, porting notes
2.7 KiB
title, description, date, modified_time
| title | description | date | modified_time |
|---|---|---|---|
| Framerate and pacing | How the GoldenEye 007 PC port holds a steady 60 fps, draws frames above 60 on fast displays, and keeps per-frame game timing correct on a fast CPU. | 2026-10-05 | 2026-10-10 |
Framerate and pacing
The port targets a steady 60 fps with VSync and a frame cap, including on low-end GPUs. Since v0.6.0 the cap can also go above 60 on a faster display (see Above 60 fps).
The N64's game code assumed a 60 Hz vertical-interrupt tick — it ran a few ticks per displayed frame. On a PC the CPU is far faster, so left alone the game logic would race ahead. The port handles this in two places:
- Frame pacing happens in
port/src/video.con the render thread (the software RSP thread), which paces the frame and does the swap and FPS accounting. - Per-frame counters in the game are gated with
portN64FrameStep()so they advance at the display rate, not the CPU rate. Getting this wrong is a recurring class of subtle timing bug (a counter that ticks too fast, a stall that isn't real) — the porting notes track these (for example D13, D22 and D486).
On very weak integrated GPUs (Atom/Celeron class) the first launch writes
lighter values for draw distance, LOD distance and anti-aliasing into
ge007.ini so the game still holds 60 fps.
Above 60 fps
Video.FpsCap (F10, Frame rate cap) accepts Auto, 30, 60, 90, 120, 144, 165 and 240.
Auto is the default on fresh installs (an existing ge007.ini keeps its
value) and matches the display's refresh rate, up to 240 (the renderer draws at most four
frames per game tick); on a 60 Hz display it
is plain 60.
- The game still simulates at its original 60 Hz (NTSC) tick. The extra frames are drawn between two game ticks by blending the previous and current frame's matrices (camera and objects), so no game state changes.
- Cost: one game tick of extra latency.
- Inert on 60 Hz displays. The present rate is the lower of the cap and the display's refresh rate. The Original N64 display mode caps at 60.
- Fallbacks: a fast camera turn or a large change in the visible room set draws a full (non-blended) frame instead.
- The design comes from f1zz1ec0ke's PR #137; the port reworked it onto the render worker thread and from a fixed 2x to any present rate, so a 90 Hz Steam Deck OLED works (D578, D583, D584).
Checked by the maintainer: 120 Hz with VSync on a G-Sync display on PC, and 90 fps on the Steam Deck. Known issue: on the Deck at 90, centre firefights in Bunker 1/2 can drop several fps, and Jungle can feel slightly less smooth.
More: porting notes — the timing-related findings (D13, D22, D486).