Pixel Puzzles Ultimate Jigsaw Puzzles

Pixel Puzzles Ultimate Jigsaw Puzzles

Not enough ratings
Low FPS fix / Устранение лагов
By dart193
ENGLISH:
Do you experience low FPS or stuttering during the game? Is the perfomance of the game worse than a few years ago? Fear not, there is a simple fix!

РУССКИЙ:
У вас начала проседать частота кадров во время игры? Картинка дергается даже в маленьком окне на супермощном компе? Игра больше хочет летать? Не беда! У Дарта есть решение!
   
Award
Favorite
Favorited
Unfavorite
ENGLISH: The fix.
The game seems to rely on Windows timing function to determine how to properly release processor when the game finishes processing current frame but the next one is still many milliseconds away. However, this has always been known as a tricky thing. WIth the game being more complicated than before, this method broke… but actually not!

[nerd_stuff]
The following might not exactly be true, but observations imply at least similar mechanism.

The game determines how much time remains till the next frame. If it is more than “SleepMargin”, it sleeps. On Windows, sleep(int time) function will usually not work properly if BeginTimePeriod was not called properly in the code. By default, Windows will either yield right away or will wake the process after time quota, which is ~17ms. This causes frames to skip and is easy to reproduce in C++.

However, SleepMargin is a parameter that is loaded on startup from ini file.
[\nerd_stuff]

Looks like the solution is to increase the value from default “1” to more than a frame. I did 80, although 16.666 for 60FPS or 20 for 50FPS should be enough.

So, the solution:
In game folder “steamapps\common\Pixel Puzzles Ultimate”, there is “options.ini”. It contains 5 lines of text, last of which is SleepMargin=1.

Change that to SleepMargin=80, and the game won't stutter anymore.

You may experience short stuttering when the game loads anyway though. If that is the case, change CreateTexturesOnDemand=1 to CreateTexturesOnDemand=0. This seems to preload all of the textures at the cost of increased startup time but eliminates stuttering shortly after load.

If all the above removed lags from the game when you do nothing, but the game stutters each time you do some action, the problem is in savefile then: its an ini file which stores whether a piece was locked into place as a separate value for each piece. It gets bloated and, since HDD speeds are not too high, reading and writing that file will bottleneck the game performance.

Note that the savefile contains only “pieces locked” data. Actual game progress, like whether puzzle was completed at least once, your hints, your gold pieces, etc., is stored in steam stats and achievements. You can disable steam cloud and remove that file to remove those lags; this will cause all puzzles to have their pieces to unlock. If you have puzzles that need one more piece to be finished and you are waiting for double/triple gold events to score big, deleting this file will be devastating to you. But if not, you can try that, BUT MAKE SURE TO BACKUP THE FILE FIRST!
РУССКИЙ: Решение проблемы.
Игра, по всей видимости, использует функции Windows для определения необходимости освобождения процессорного времени, если игра уложила все свои вычисления во время одного кадра, а следующий наступит через несколько миллисекунд или больше. Эти функции требуют некоторой наладки и вызывают проблемы даже у опытных программистов. Похоже, что последние обновления сломали этот механизм. Но, на самом деле, это не так!

[для_программистов]
Следующий абзац строится на предположении и наблюдении и может быть не совсем верен, но, как минимум, в игре происходит нечто подобное.

Игра определяет, сколько времени осталось до следующего кадра. Если больше, чем "SleepMargin", тогда она возвращает управление процессором операционной системе. На Windows, функция sleep(int time) должна пробудить процесс через число миллисекунд, равное time, но если при этом не была правильно вызвана функция BeginTimePeriod, приложение проспит либо 0, либо целое число квот времени. По умолчанию, квота времени равна примерно 17 миллисекундам. Из-за этого происходят проблемы с корректным пробуждением процесса.

Но! SleepMargin - это параметр, который прописан в options.ini. Его можно поменять.
[\для_программистов]

По логике, чтобы игра снова работала нормально, необходимо установить этот параметр в значение, которое больше, чем длина одного кадра в миллисекундах. Это 16.666 для 60 герц и 20 для 50 герц. Лично я поставил 80, чтобы сразу наверняка.

Итак, РЕШЕНИЕ:
В папке "steamapps\common\Pixel Puzzles Ultimate" есть файл "options.ini". Он содержит пять строк текста. Последняя строка - SleepMargin=1.

Поменяйте эту строке на SleepMargin=80, и все проблемы с лагами должны исчезнуть.

У вас, однако, могут остаться лаги в течение нескольких первых секунд после запуска игры. Это можно поправить, поменяв CreateTexturesOnDemand=1 на CreateTexturesOnDemand=0. Это заставляет игру сразу загрузить все текстуры в память, а не создавать их налету. При этом время загрузки игры немного увеличится, но стартовая анимация логотипа компании тоже будет работать на 60 кадрах в секунду.

Если мои советы решили проблемы с производительностью в то время, когда вы ничего не делаете, но игра продолжает подвисать каждый клик, тогда проблема кроется в файле сохранений. Товарищи разработчики решили хранить ваш прогресс в файле типа ini, причем каждый кусочек паззла - это текстовая строка, а хранит она по факту один бит. В итоге этот файл жутко раздувается, но читается и записывается каждый ваш клик по меню или по кусочку паззла. А, так как диски - штука пока ещё медленная, игра тормозит.

Файл сохранения хранит только информацию о том, "приклеился" ли каждый конкретный кусочек к полю или нет, причем туда попадают только приклеевшиеся кусочки. При этом ваш фактический прогресс, а именно факт прохождения каждого паззла, число подсказок, золотые кусочки, и т.д., хранятся в статистке стим и достижениях. Вы можете отключить облако стим и удалить файл сохранения: при этом все ваши кусочки перестанут быть приклеенными. Если у вас много паззлов, в которых остался только один кусочек, и вы ждете двойного/тройного золота, удаление этого файла приведёт к катастрофе. Если же нет, вы можете удалить этот файл, НО ОБЯЗАТЕЛЬНО СДЕЛАЙТЕ РЕЗЕРВНУЮ КОПИЮ ФАЙЛА!
3 Comments
dart193  [author] 31 May, 2021 @ 9:56am 
Glad I could help. Especially that this requied a lot of research to find.
Azerty831 31 May, 2021 @ 6:38am 
Works perfectly, thank you mister !
N.G. 2 Mar, 2021 @ 5:06am 
Файл сохранения хранит не только информацию о кусочка, но ещё инфу о последних пазлах - те что в шапке отображаются, а также инфу о настройках интерфейса, и самое печальное - о настройках игры (поворот, чувствительность и т.д.) После удаления приходится всё перенастраивать - или нужно оставлять в файле раздел save. При этом вариантов кроме удаления файла, когда у тебя собрано уже много пазлов - я не вижу. Сразу игра перестаёт умирать