Skip to content

Pokopia Recomp 0.7.9 (build K: Kiwi)

Choose a tag to compare

@github-actions github-actions released this 08 Nov 02:12
9489829

Update: press Update, then Finish update once when it asks (a shader translation fix: only the 32,630 changed shaders of about 99,000 are translated again, not the whole cache).

Highlights

  • Fixed the dashed outline missing around the tiles a move like Rock Smash or Water Gun will hit (#242)
  • Fixed every Link Play visit failing with error 9005: saves made with this project all shared one player id
  • Fixed a shader translation mistake in about a third of the game's shaders
  • Fixed walking and camera turns juddering at a steady 60 fps (#275)

Known issues

  • Linux still runs the game and the shader setup through Proton
  • Mods that replace files containing shaders are not supported; text and texture mods are the intended use
  • Use the game clock in single player only for now

Graphics

  • Fixed walking and camera turns juddering about once a second at 60 fps or less, and constantly with the frame limit off and vsync on (#275)
    • Cause: the fix that keeps the game from running fast above 60 fps also shortened the step of any frame that ran short at 60 fps, such as the frame right after a late one. That frame still stays on screen for a full refresh, so movement lurched
    • Now: shorter steps apply only while the game runs above 60 fps (average over about 16 frames); at 60 fps or less the game's own rule is kept
  • Windows on a small integrated GPU (including the ROG Ally): graphics-pool memory now uses the bounded cache already used under Wine, instead of keeping every imported chunk until Vulkan runs out of device memory and the picture freezes (#234)
  • Fixed the dashed white outline missing around move target tiles and the block placement indicator; only the faint tint showed (#242, #120)
  • Fixed one common shader instruction being translated wrongly in 32,630 of about 99,000 shaders
    • Other small details with the same cause (masks, patterns, dithering, effect switches) may look right now too
    • Something looks worse after this update? Open an issue with a screenshot and pkp.log
  • Until you run Finish update, the game keeps the old translations and the outline stays missing
  • Fixed shaders translated again by Finish update still loading their old translation from the boot preload pack (shader_cache/spirv.preload.pack), so about 6,000 of the most used shaders, the outline's among them, kept the old look
  • Windows on Intel graphics: fixed the game crashing about 3 s after start (access violation in igvk64.dll, Intel UHD Graphics; #270)
    • Before: the game read its pipeline cache back from Intel's driver to save it, and the driver crashed while copying it out
    • Now: on Intel's Windows driver the pipeline cache is loaded but not saved ([nvn] pipeline_cache_save, auto); the driver's own disk cache still keeps compiled pipelines between starts
    • Still not: on Intel, Prepare shaders keeps nothing in pipeline_cache.bin, so pipelines the driver's cache doesn't have are built again at their first use
Before After
Before: tint only After: dashed outline

Link Play

  • Fixed every visit failing with "A communication error occurred" (error 9005), even with the room found and the same mods on both sides
    • Cause: every save made with this project got the same player id (UUID b9ae85ed-...), and the host turns away a visitor with its own id. The runtime's random seed (GetInfo RandomEntropy) was one fixed value on every PC, so the id the game rolls at new game came out the same for everyone
    • Now: the seed comes from the OS random source, so new saves get their own id
    • Saves you already have are repaired at the next start, before the game reads them: the shared id is replaced with a new random one in all its places. Progress is kept; a copy of the save from before goes to uuid-backup\ in your save folder
    • [pkp] uuid_repair = 0 turns the repair off
  • Still cross-plays with pokopia-native 1.3.3: its co-op wire format, discovery, room codes and relay are unchanged since 1.3.0
  • Joining a VPN address (Radmin VPN 26.x, Hamachi 25.x, Tailscale / carrier NAT 100.64.x) on LAN now names the VPN in the refusal and says to turn on internet play for every player
  • Co-op module updated to pokopia-native 1.3.3 (035bd9c); its Interact everywhere and Story co-op sites for game 1.0.5 come along but do nothing here (this project needs 2.0.1). Based on pokopia-native (MIT) windows/src/coop @035bd9c

Launcher

  • Fixed Set up looking frozen on "Checking the setup tools..." or "Scanning game files: 29 of 29" for players whose shader cache was made before 0.7.0 (#269)
    • Before: Set up read every translated shader (about 99,000 files) one at a time to find the ones to translate again, with nothing on screen or in setup.log; on a slow disk that never finished in time
    • Now: the check reads on up to 8 threads, shows "Checking the shaders an earlier version translated: N of M" and writes its progress to setup.log; Pause stops it
  • Fixed pages not scrolling in a small window with animations turned off (Windows: Animation effects off), so rows below Mods in Settings > Game were out of reach (#260)
  • Added warm colour themes: the launcher opens in Live sky, which tints the island art by the time of day and the season; the Colours button at the bottom of the sidebar switches between Live sky, Sunrise (amber to red) and the old violet Dusk, kept per PC
    • Status colours: OK is blue instead of green, so OK, warning and error stay apart with red-green colour blindness

For developers

  • src/kernel/svc_info.cpp: GetInfo RandomEntropy is drawn once per process from the OS random source (tt::rng_fill, so the test tools' deterministic mode stays seeded); [process] entropy_seed still fixes it. It seeds nn::os's generator and with it nn::util::GenerateUuid (main 0x5af08c, the new-game reset 0x5aef60)
  • games/pkp/pkp_save_uuid.cpp: at play install (before the game modules load) a save whose CMNDAT/SYDAT holds b9ae85ed-20e7-4f6b-89a1-9f30fcf9f0f9 gets a random v4 UUID in G00/B00 CMNDAT (zlib from 0x130) and S00 SYDAT, as pkp_uuid.py --set did; the account folder is copied to uuid-backup/<time>/ first, files are replaced by rename and put back on a failed write; a save with an interrupted commit is skipped. Host check: 0x5463c0
  • third_party/miniz: miniz 3.0.2 (MIT) for the zlib streams
  • tools/shaders/ampere/frontend/AmpereEmit.cs EmitLop3Ampere: read LOP3/ULOP3 operands after the predicate destination
    • The decoder (like nvdisasm) puts Pd before Rd (LOP3.LUT P2, RZ, R22, 0x1, RZ, 0xc0, !PT); the emitter read Rd first, so a, b, c and the LUT were one operand late and Pd stayed false
    • 112,542 such instructions in 32,630 corpus blocks; IADD3, LEA, IMAD and MATCH already handled predicate outputs; R2UR, FLO and LDG never carry one here
  • launcher/src-tauri/src/shaders.rs: TRANSLATOR_REV 1 ⇒ 2
    • stale_blocks retranslates the 32,630 hashes in rev2_blocks.txt (SPIR-V differs before/after the fix over the full 2.0.1 corpus)
    • Blocks the game built at runtime (a few hundred, including the outline's lighting shader) are retranslated by translate_missing
    • Loose .spv files are replaced; packed spirv.archive gets a newer segment; the boot preload pack drops changed results.tsv entries
  • runtime/src/gfx/nvn/nvn_shaders.cpp: a shader translated again has a second results.tsv row; the runtime indexed the first (emplace), so the preload pack's line-hash check passed and the old SPIR-V and resource record were used. The last row now wins (at open and in the rescan), and a pack entry whose shader gets a new row while the game runs is neither read nor copied into the next pack
  • The outline is drawn by deferred lighting fs 0cd3176a1c7791d8 (G-buffer neighbour test + world-space checker), not the sky/cloud draws 8010f484/86aa3b21
    • The 0.6.x #120 note credited it to the depth range default (#137); that change affects clouds and stays, but never fixed the outline