Changes in this build
- #448 Controls: Steam Controller note for Linux players
- #445 Gamepad log: one line with what the pad offers
- #451 CHANGELOG: note for AMD handheld testers
- #442 Linux handhelds: pkp.log starts with one host facts line
- #444 CHANGELOG: regressions and what to test for the AMD handheld build
- #437 Launcher: a Layout panel to move the sidebar and Home sections
- #443 Settings > Testing: Copy handheld report
Update: press Update, then Set up again once (new game hook for Story co-op; your saves and shaders are kept).
Testers on AMD handhelds, please read
This Testing build adds logging and a few device checks, and changes no frame-rate settings. We need your logs to learn what helps on the Steam Deck, ROG Ally, Legion Go and similar devices. Play for about twenty minutes the way you normally do, then open Settings > Testing and press Copy handheld report: it copies one short block with your device, memory, graphics driver, frame summaries and any problems, with user names, folders and addresses removed. Paste it into a bug report and tell us the device, the system (SteamOS, Bazzite and so on), the power mode, your frame cap and what you were doing. If the picture drops to about 10 fps and stays there, or the game freezes, say so and restart the device. This is a Testing build: some rough edges are expected, and your reports are how Stable gets better.
Regressions and known problems
- The Lenovo Legion Go, Go 2, ROG Xbox Ally and MSI Claw A8 now start in handheld mode (picture size, the game's lighter handheld graphics settings, controller prompts, short waits under Proton). This has not been confirmed on those devices yet; if it looks worse than before, set
[am] operation_mode = dockedor[host] handheld = offinpkp.ini - On some Proton versions the memory limit may not trigger, because the reading it compares can be 0 there; this build shows both readings in
pkp.logso we can tell which devices are affected - The Steam Controller (2026) is still not detected under Proton; use another pad there
What to test
- On any AMD handheld (Steam Deck, ROG Ally, Legion Go, Legion Go S, Xbox Ally, Claw A8), under Proton or Windows: play 10 minutes, then send the lines of
pkp.logthat containhost: handheld,pool_copy,footprintandgamepad. Say which BIOS GPU-memory setting you use if you changed it. They show which handheld rule matched, why pool copy is on or off with the graphics memory size, and the two memory readings - On a Legion Go, Go 2, ROG Xbox Ally or MSI Claw A8: check that
pkp.logsayshost: handheld: yes, and tell us whether the picture size, the controller prompts and the frame rate feel right compared with the previous build - If the frame rate falls partway through a session: send the
pkp.loglines that containwaited on the GPUand say how long into the session it began - If Set up stops on a Steam Deck or another Linux handheld: send
shader_cache/harness_error.txtandsetup.log
Controller log
pkp.lognow lists what a connected controller offers: trackpads (and their fingers), rumble, lights, battery, extra buttons (grips, trackpad clicks, touch sensors) and its USB ids; the motion sensors are on the line before it. It is a note for bug reports; nothing about how controllers behave changes
Memory limit
pkp.lognow shows both memory readings (private commit and pagefile usage) in itsfootprintline and in the 75% warning, and says once when the private-commit reading is 0- Before: only the footprint was shown, so on Linux (Proton) a log reading
footprint 0.00 GBcould not tell whether the game used no memory or the reading was blind - Now: the log names both readings; the limit itself is checked exactly as before
- Still not: the memory limit compares private commit, so it cannot trigger while that reading is 0; this only makes that visible in a log
- Before: only the footprint was shown, so on Linux (Proton) a log reading
Launcher layout
- Added a Layout button in the launcher's sidebar, beside Colours and Hide sidebar. It opens a panel where you choose how the launcher is arranged: the sidebar on the left, right, top or bottom, or icons only; the order of the sidebar items, and which of them to hide (Home and Settings always stay); comfortable or compact spacing; and whether the news cards and the chips under the Play button (profile, Link Play and Discord) show on Home. Changes show at once, Reset to default puts everything back, and your choice is kept on your PC
- Before: the launcher had one fixed arrangement
- Now: the arrangement is yours, and the pad, keyboard and touch screen all work in every position. Notices about a problem, such as a crash or a failed update, are never hidden
- Still not: you cannot drag parts around freely yet, and the sections of Home other than the news cards and those chips cannot be moved or hidden
Bug reports from Linux handhelds
pkp.lognow starts with ahost facts:line on Linux (Steam Deck, Legion Go, ROG Ally and other handhelds under Proton): kernel, board and BIOS version, CPU, power governor, the graphics memory split (VRAM, GTT, TTM limit), RAM, swap, zram and whether it runs in Gamescope- Before: reports did not say how the memory was split or how the power was set, so the performance questions could not be answered from the log
- Now: the line holds those facts, read only; it never includes serial numbers, your user name, your computer's name or folder paths, and a value the device does not have is left out
- Still not: it changes nothing about how the game runs; it only helps reports. Not shown on Windows
Graphics driver resets
pkp.lognow says when every frame of a run waits on the graphics card from the start, which is what a driver reset on a Linux handheld looks like. The game cannot fix it: reboot the device. The README's common problems say so too- It also notices a run that starts fine and then slows down: when frames wait on the graphics card for three summary windows in a row,
pkp.logsays when it began (before, it only looked at the start of a run). It is a note for bug reports, not a fix
Shader setup
- When the shader translator stops, setup now writes what it said to
shader_cache/harness_error.txtand shows it insetup.logand in the error (on Linux, Proton hid it, so the log said only that it stopped) - Setup checks that the translator's files are whole before it starts and names what is missing or too short
Screens narrower than 16:9
- Added 4:3 Fix, a very experimental option in Settings > Testing (Testing channel only, off by default) for 4:3, 16:10 and 3:2 screens: full-screen backgrounds, fades and dimming fill the whole picture instead of stopping at a 16:9 strip in the middle. Menus, text and buttons stay where they were. If you have a 4:3 or 16:10 screen, please try it and send
pkp.logwith what looked wrong. It needs a restart of the game to take effect pkp.logalso states how many megapixels a frame costs at the picture's shape
Link Play invites
- Added Copy invite and Paste invite to the launcher's Link Play page: the host copies one message (address, room code and mode) and the friends paste it, instead of typing both. A Tailscale address is recognised and set up as internet play, and the host's page now lists the PC's Tailscale address even without a relay. Typing a Tailscale address into Same network now says what to do instead of just refusing it
- Added Test connection, Check my setup and Friends on my Tailscale to the Link Play page: they say in plain words whether an address answers, what may block friends from joining (firewall, a Public network, client isolation), and which of your Tailscale devices are hosting, with a Join button. They only look and never change anything
Pool copy diagnostics
pkp.lognow states why pool copy is on or off: whether the host is Wine, the graphics card type and its largest device-local memory heap in MiB, and the 8 GiB limit
More handhelds recognised
- The Lenovo Legion Go, Go 2, the ASUS ROG Xbox Ally and the MSI Claw A8 (the ROG Ally X was already recognised) are now treated as handhelds, like the Steam Deck, Legion Go S and ROG Ally
- Before: only the Deck, Legion Go S and ROG Ally were recognised; on the others the game was told it was docked and the picture size and short waits were chosen for a desktop PC
- Now: on these devices the game is told it is in handheld mode and picks its own lighter handheld graphics settings, a window smaller than 1080p is no longer rendered at 1080p, controller prompts stay for the trackpad and touch screen, and (under Proton) short waits sleep instead of spinning.
pkp.logshows which board rule matched in thehost: handheldline - Still not: AYANEO, GPD and OneXPlayer, whose board names are not reliably known (OneXPlayer's also cover Intel models); set
[host] handheld = oninpkp.inifor those. If the handheld graphics settings do not suit your device, set[am] operation_mode = docked(that alone), or[host] handheld = off(all of it)
Steam Controller on Linux
- Settings > Controls now explains, on Linux only, how to get a Steam Controller or other pad working: add the game to Steam and keep Steam Input on for it, and what that means for the grips and trackpads
Gameplay mods
- Settings > Gameplay and
pkp.lognow show which gameplay mods and experimental features are on, so you can see at a glance what a start will use
The Testing tab
- Added a Testing tab to Settings, shown only on the Testing channel: send logs, read them, and switch the features still being tried on or off
- Export and report makes one zip of
pkp.log,pkp.log.prev, the crash files,setup.logandpkp.ini, opens its folder (testing-logsnext topkp.exe) and the bug report form. Drag the zip into the form: the launcher has no GitHub login, so nothing is uploaded for you - Names in paths, your account and server settings and IP addresses are removed before anything is written. Long logs keep their end, so the zip stays under GitHub's 25 MB limit
- View logs shows the end of each file in the launcher, with a filter and a Copy button
- Experimental features has Mouse in the game's menus and the Taller view on 16:10 screens, both off by default. The gameplay options (Camera aim, Running jump, Sort, Search, Quit Game) are off by default in this Testing build; switch them on here
- Export and report makes one zip of
- The touch screen Menu button is automatic: on when the machine has a touch screen, so a handheld keeps its way into the menu
Link Play
- Updated the co-op module to pokopia-native 1.4.0. It still plays with pokopia-native 1.3.0 to 1.4.0 and with earlier builds of this game: the way games talk to each other did not change
- Added automatic port forwarding when you host over the internet without a relay
- Before: your router had to forward port 47600 (TCP and UDP) by hand
- Now: while you host, the game asks your router to forward it (UPnP, NAT-PMP or PCP) and gives it back when you stop. Ask the router to open the port on the Link Play page's Host view (
[net] port_forward) turns it off - Still not: a router with UPnP switched off, or an internet provider that shares one address among many homes, can't be helped by this;
pkp.logsays which, in anat:line. A relay you run on this PC still needs its own port forwarded. Quitting the game while hosting leaves the forwarded port until its one-hour lease runs out
pkp.logno longer contains your whole room code, only its first group, so a log is safe to attach to a bug report. The launcher still shows the whole code
Game
- NVIDIA graphics cards no longer risk a crash (device lost) in three of the game's compute shaders when a loop count is not the game's: the count is held to the size of the table the loop walks (on other cards, to 16384). From pokopia-native 1.4.0;
[nvn] loop_guard = offturns it off - Story co-op (experimental,
[pkp] link_story_coop): the host's own story no longer stops while friends are visiting. Before, any Link Play session turned the host's story talks into "Bring here to say hi!" and paused its requests. From pokopia-native 1.4.0
Launcher
- Added Copy handheld report to Settings > Testing (Testing channel only)
- Before: a tester on an AMD handheld had to send the whole
pkp.log, which holds names and paths, and say by hand what mattered - Now: one press copies a short block with only the useful lines of
pkp.log(handheld detection, graphics card and driver, memory, the frame summaries and any graphics reset or crash), with user names, home folders, addresses and room codes removed, ready to paste into a bug report. Add your device, system, power mode and what you were doing - Still not: it does not send anything and does not replace Export and report when a full log is asked for
- Before: a tester on an AMD handheld had to send the whole
- Added arrow-key navigation to the launcher, for a handheld whose d-pad reaches it as keys
- Before: Steam's default layout for a non-Steam shortcut sends the d-pad as arrow keys, and the launcher ignored them
- Now: the arrow keys move between controls, Enter presses, Escape goes back (closes a question, or returns Home), the same as the pad
- Text boxes, sliders and drop-downs keep the arrows they need
Gameplay
- Fixed camera aim staying off after you used the Joy-Con 2 mouse mode once (#367)
- Before: turning mouse mode off left the game stuck half in it, so camera aim never came back until a restart
- Now: pressing the mouse mode key again fully leaves mouse mode and camera aim works again right away
- Fixed the Joy-Con 2 mouse mode hitting the wrong block (#367)
- Before: clicking broke or placed a block off to the side of the one under the pointer
- Now: your character turns to the block under the pointer before swinging, so the click lands on it
Controls
- Fixed the Mouse Mode Key row in Settings > Mouse (#367)
- Before: pressing a key on the row did nothing, and after one change the row got stuck at the end of its bar
- Now: press left or right on the row (or click it), the row says "Press the new key", then press any key, mouse button or wheel notch. Esc cancels. It works every time, and F1 can't be picked by mistake
- Added Controller Button and Presses rows to the game's own Settings > Controller tab: remap any controller button without the F1 page
- Before: giving a rear grip, a trackpad click or another controller button a Switch button was only possible in Settings (F1) > Controller, or in
controls.ini - Now: on Settings > Controller, press left or right on Controller Button to pick a button (for example Right grip R4), then on Presses pick what it presses on the Switch pad (Default, Nothing, A, B ...). Save as with any other row; Cancel keeps the old layout. A button the file maps to several buttons at once shows Custom and is left as it is
- Still not: it shows one button at a time; the F1 page still lists them all
- Before: giving a rear grip, a trackpad click or another controller button a Switch button was only possible in Settings (F1) > Controller, or in
- Added two more bindable controller buttons: the Steam button and the extra button (the Steam Controller (2026)'s and the Steam Deck's quick-access "...", an Xbox Share, a PlayStation 5 microphone button) (Settings F1 > Controller > Pad buttons, or
guideandmisc1in[padmap]ofcontrols.ini)- Before: they pressed nothing and could not be given a Switch button
- Now: each has a row and can press any Switch button; with the Steam icons on, a prompt for a button you gave them shows an S or three dots. They press nothing until you pick one
- Still not: with Steam running, Steam may keep these two buttons for itself (start the game outside Steam to use them); the Steam Controller (2026)'s trigger clicks are not here, because the controller library in this build does not report them
- Changed the Steam Controller button icons to fit the new Steam Controller (2026)
- Before: the icons were the original 2015 controller's: its small buttons were the
<and>arrows and it had two rear grips, so R4 and R5 (or L4 and L5) both showed "RG" (or "LG") - Now: View and Menu show the same symbols as on a Steam Deck, and each rear grip has its own icon: L4, L5, R4 and R5
- Still not: it needs the new
prompt_icons.pakthat comes with the build; the Steam button, the quick-access (...) button and the trigger clicks have no prompt icon yet
- Before: the icons were the original 2015 controller's: its small buttons were the
How to report
Open a bug report, choose Testing as the channel, say which version you have, and attach pkp.log (and setup.log if Set up ran). Thank you for testing.