Version 1.0.2: 60 frames a second by default
Version 1.0.2 is out for Apple Silicon and Intel Macs. The change is one setting, and it matters more than I expected.
What Frame skip is
PSU has a setting called Frame skip. You can reach it in the Windows option tool that ships with the game, and it has four choices. The game reads it from PsuIlluminus.ini as [performance] INT, a number from 1 to 4. I found out what the numbers mean by reading the game's code while I was chasing a different problem. 1 runs the game at 60 frames a second, 2 at 30, 3 at 20 and 4 at 15. Players call the choices frame skip 0, 1, 2 and 3, so that is what the launcher now calls them.
When the key is missing from the file, the game picks 2, which is 30 frames a second. My launcher never touched the key, so every Mac player was on frame skip 1 without ever choosing it.
Why it matters
A player in the Clementine Discord told me that on the slower settings you walk slower than people on the faster ones, and that travel PAs only work on frame skip 0. The game ties its movement to the frame rate, so a lower setting is not just a less smooth picture. I had treated the key as something to stay away from because it looked like frame pacing. That was too cautious. It is a normal player option, it never goes above the game's own 60, and the Mac client was the only one that had no way to change it.
(Thanks to Jess Victorix from the Clementine Discord for the tip. I'm happy to take the name out if you would rather not be listed.)
How to change it
Open Settings, go to the Game tab, and pick a Frame skip from the pop-up next to Resolution. The choices read 0 (60 fps), 1 (30 fps), 2 (20 fps) and 3 (15 fps). The new value is written to the game's ini when you press Play. A fresh install, or an ini without the key, gets 0. If you already set a value yourself, for example with the Windows option tool, the launcher keeps it.
The cap has not moved. The lowest number the game accepts is 1, and that is its own 60 frames a second, so nothing here makes the game faster than it was built to run.
What I measured, and what I have not
On my M4 Pro, with no network, the title screen and the menu hold 60.0 frames a second. A frame takes 16.67 ms on average, and in the steady stretches the slowest frame was between 16.9 and 19.1 ms. A few frames take much longer when a scene changes. The worst were 358 ms and 409 ms, when the game falls back to my slow path for code the translation does not cover. I did not change that this time.
On the title screen the game's drawing calls, including the wait inside Present, take about 13 ms of each 16.7 ms frame. I have not worked out how much of that is real work and how much is waiting for the display, so I do not know how much room a busy scene leaves. I have not run a town visit or a fight at 60 yet, because I do not test against the live server by script. I will do that myself after this is out. If you play on 1.0.2, please send me frame-hitches.txt and launcher.log after a town visit and a fight. They are in the logs folder, and the Advanced tab has an Open Logs Folder button. If your Mac is older than mine and 60 does not hold, tell me which Mac it is. Setting Frame skip to 1 puts you back on 30.
One more fix
The sound dropped out in 1.0.1 and I fixed that. Separately, on macOS every sleep in the game was ending about 3.4 ms late, and that was most of why the first online session averaged 28 frames a second instead of the 30 the game was asking for. That fix went out in 1.0.1 and the numbers are in the performance notes in the repo.
Still not right
The stalls at scene changes are still there. The delay before sound starts in a mission is still there. The Intel build still has not run on a real Intel Mac.