Skip to content

Releases: raulzrrs/letsgo-recomp

v0.5.0: a new launcher, SSAO / GI and 60 / 120 fps

Choose a tag to compare

@raulzrrs raulzrrs released this 20 Oct 02:05

A new launcher, new graphics options and 60 / 120 fps. A good part of it is Iván Serrano's work (@Vancete, #15 and #16).

Original settings vs. 0.5.0
The same frame rendered by this port with the game's original settings (left) and 0.5.0's (right). Not a Switch capture.

New

  • A launcher: its own window, with pages for the game files and options, Graphics, Image and sound, Controls and Mods, and a big Play button. The F12 menu in the game has the same look and the same settings, applied while you play.
  • Graphics: anti-aliasing SMAA, TAA or AMD FSR 3.1 (FSR 3.1 also upscales a lower render resolution); otherwise FSR 1 or bilinear. Ambient occlusion (SSAO) and indirect light (GI), off / low / medium / high. Brightness, contrast, saturation, sharpness.
  • Frame rate limit: 30, 60 or 120 fps (experimental), switched while playing. The player now walks and turns at the same speed at 60 and 120 fps as at 30 (at 60 they walked at about 85 % of the speed).
  • FSR 3.1 frame generation (experimental, with FSR 3.1 anti-aliasing).
  • Mods: translations, textures and other LayeredFS mods, several at once, in the order you choose. Open the mods folder shows where to copy one by hand.
  • Skip controller selection (Game page): the game starts at the Game Freak logo.

Fixed

  • SSAO and GI flickered as the camera moved (rocks, bushes, characters), in the world and in battles.
  • With SSAO or GI on, grass showed through the white of the title screen's opening.
  • Ghosting with TAA / FSR 3.1 on the player's eye and on flowers and grass while the camera moves.

Known issues: switching to TAA while playing shows one or two black frames; the 2x interface shows a few frames of thin stripes during an area change; 60 / 120 fps and frame generation are experimental.

Tested with the zip built for this release, in fresh folders without MSYS2 on the PATH: on Eevee, the game set up from scratch in the launcher (copied and recompiled), then played to the world; on Pikachu, the world and the menu. The new graphics were played on both games, in the world and in battles. Frame generation was tested by #16's author, not here.

Updating from 0.4.x: with the game closed, unzip over your folder (it keeps the game files, saves, mods and settings). The game library is not rebuilt.

v0.4.2: no more crash when your partner enters a wild battle

Choose a tag to compare

@raulzrrs raulzrrs released this 19 Oct 19:28

A wild battles fix (#6).

  • No more crash when your partner enters a wild battle. The game stopped whenever your partner (the Pikachu or
    Eevee you started with) entered a wild battle while it was the one walking with you - leading the party or
    switched in. Early in the game nobody else walks with you, so that was the usual case. The battle brings in the
    field model of the Pokémon walking with you, and the kind of battle this mode uses has none for the partner.
    Until that is supported, in that situation touching a wild Pokémon starts the game's own catch, as without the
    mode.
  • With another Pokémon walking with you, wild battles work, your partner included. 0.4.1 had sent some of those
    encounters to the catch too.

Tested with the zip built for this release, in fresh folders without MSYS2 on the PATH: Eevee and Pikachu load a save,
reach the world and open the menu. The wild battle rule was checked from the source tree with a Route 1 save (the
partner walking alone: the game's catch, no crash) and with a save where another Pokémon walks along (battles, the
partner entering included).

Updating from 0.4.x: with the game closed, unzip over your folder (keeps the game files, saves, translations and
settings). The game library is not rebuilt.

v0.4.1: wild battles no longer crash early in the game

Choose a tag to compare

@raulzrrs raulzrrs released this 19 Oct 16:43

A fix for wild battles (#6).

  • Wild battles no longer crash early in the game. With your partner in the first party slot, no other Pokémon
    walks with you, and the game's static battle (the one wild battles reuse) was made for a companion: the game stopped
    right after "A wild ... appeared!". Until battles without a companion are supported, those encounters go to the
    game's own catch. With another Pokémon first in the party (Menu → Party → Move Pokémon), the battles run as before.

Tested with the zip built for this release, in fresh folders without MSYS2 on the PATH, on Eevee and Pikachu: a save
reaches the world and opens the menu, and a Route 1 save with the partner first walks into wild Pokémon with wild
battles on and gets the game's catch, without crashing.

Updating from 0.4.0: with the game closed, unzip over your folder (keeps the game files, saves, translations and
settings). The game library is not rebuilt.

v0.4.0: graphics settings (F12), FSR 3.1, sharper text and interface

Choose a tag to compare

@raulzrrs raulzrrs released this 19 Oct 14:17

A graphics release, most of it contributed by @Vancete (#8 to #13). Thank you!

  • In-game settings on F12 (on a controller: − and + together, then Settings): volume, brightness, contrast,
    saturation and the effects below, applied live and saved to larecomp.ini. LARECOMP_MENU_KEY picks another key
    (Steam takes F12 for screenshots).
  • TAA anti-aliasing besides SMAA, and FSR 3.1 upscaling with AMD's presets (Native AA, Quality, Balanced,
    Performance, Ultra Performance). AMD's amd_fidelityfx_vk.dll ships next to the exe; without it, FSR 1.
  • Ambient occlusion (SSAO) and indirect light (GI), experimental and off by default.
  • Smoother shadows, on by default (the game samples its shadow map without filtering); F12 Shadow filter →
    Game's gives the old look. Better background blur and depth of field in menus and on the title screen, on by
    default (blur_quality = 0 turns it off).
  • Sharper text at high resolutions, always on: the game's glyph cache is drawn again at 2x or more (1080p
    fullscreen: 2x).
  • Sharper interface (2x), optional: a start-screen button makes the menus' images again at twice their
    resolution from your own game files, with waifu2x (downloaded once from GitHub, 35 MB, checked by its SHA-256).
    About 550 MB in cache/; 90 to 100 s on an RTX 3080. Each image is checked against the original before it is kept.
  • Fixes the world drawn wrong after a catch (0.3.2): black trees, bushes with a sign's texture, no dirt path
    until the area changed.

Tested with the zip built for this release, in fresh folders with copies of the game files and saves, without MSYS2
on the PATH: Eevee (FSR 3.1 + TAA + SSAO) and Pikachu (defaults) load a save, reach the world and open the menu. From
the source tree, on both games: every effect on at 30 and 60 fps, 2x text in 1080p fullscreen, and the 2x interface
made and compared on / off. All on NVIDIA (RTX 3080 here, RTX 5070 Ti by @Vancete); not tested on AMD or Intel
GPUs
- feedback is welcome in an issue.

Updating from 0.3.x: with the game closed, unzip over your folder (keeps the game files, saves, translations and
settings). The game library is not rebuilt.

v0.3.2

Choose a tag to compare

@raulzrrs raulzrrs released this 18 Oct 12:25
  • Fixes the launcher forgetting your settings (0.3.1): it saved larecomp.ini with some lines run together, so
    the next start went back to the defaults for 60 fps, the resolution, anti-aliasing, the translation, movie audio,
    the fps counter, the d-pad and wild battles. Fixed, and a file saved by 0.3.1 is read correctly: tested with one,
    every setting came back.
  • Game folders with accents or other non-Latin letters work (for example a Windows user folder named with an
    accent). Tested with a folder named in Cyrillic and Portuguese letters: 0.3.1 could not open the game there, 0.3.2
    runs it.
  • Less memory reserved: the game's threads no longer commit 256 MB of stack each up front. Pewter City, Eevee:
    committed memory 7.2-7.4 GB -> 4.7 GB; the memory actually in use is unchanged. Helps on PCs with little RAM or a
    small page file.
  • Less GPU time: fragment and compute shaders unpack half-precision values natively. RTX 3080, Pewter City at 2x
    resolution: 4.0 -> 3.75 ms of GPU per frame (the frame rate at the game's 30 fps does not change on this machine).
    Frames look the same.
  • Fixes from LAS Recomp, the project this port is built on: render passes no longer hand empty color slots to the
    driver (they crash Intel UHD 630 drivers there; not tested here on Intel), a GPU fence race, duplicate pipelines,
    and shader instruction details. A rare crash when two game threads touch new memory at the same moment is fixed
    too (found in another port of the same runtime; not seen in Let's Go).
  • After a crash, no extra "Visual C++ Runtime Library" box. A controller Windows does not recognise can be added with
    your own SDL mapping line in gamecontrollerdb.txt next to the exe.
  • Tested with Eevee and Pikachu 1.0.0 on the regression routes (world, menus, area change); saving from the menu checked with Eevee.
  • Upgrading: unzip over your install (no new setup).
  • Tested with the zip built for this release, unzipped into a new folder named with accented letters, the game files of 0.3.x installs of both games, started without MSYS2 on the PATH (no recompiling needed): Eevee and Pikachu load a save and reach the world; the start screen rewrote a settings file saved by 0.3.1 with every setting kept.

Updating: with the game closed, unzip over your folder (keeps the game files, saves, translations and settings).

v0.3.1

Choose a tag to compare

@raulzrrs raulzrrs released this 18 Oct 09:34
  • Fixes the world breaking after a capture (found playing 0.3.0 with 60 fps on): after entering and leaving a
    capture, fences, signs and ferns could show flat or dark until you changed area. The cause was older than 0.3.0 and
    only luck kept it hidden: when the game rebuilt a texture in place (it streams them), the texture slot the game had
    registered kept pointing at the freed copy, so what it showed depended on what the memory allocator put there next.
    The render thread and the video-memory models of 0.3.0 changed the allocation pattern, which made it show. Slots
    now follow the texture when the game rebuilds it.
  • Tested here with a new unattended loop that walks in the grass of Viridian Forest and runs from each encounter
    (Eevee and Pikachu 1.0.0, both 0.3.0 options on): the world looked the same before and after every encounter. The
    0.3.0 performance options stay on by default.
  • Upgrading: unzip over your install (no new setup).

Updating: with the game closed, unzip over your folder (keeps the game files, saves, translations and settings).

v0.3.0

Choose a tag to compare

@raulzrrs raulzrrs released this 18 Oct 07:03

A performance release. Everything below was measured on one machine (Core i5-14600KF, RTX 3080, Windows 11), with
runs taken in turn (A, B, A, B...) because the same frame varies 10-18 ms of GPU time between runs. Not measured on
other graphics cards
(AMD, Intel, integrated): feedback is welcome in an issue.

  • The graphics work runs on its own thread (on by default). The game's calls into the Vulkan backend used to run
    on the game's own thread, in the chain that also runs its logic. Unlimited frame rate on the Pewter City route:
    Eevee 126.9 -> 185.5 fps (frame time ratio 1.46, 95% interval 1.40-1.53), Pikachu 132.1 -> 191.4 fps (1.45, 1.31-1.54);
    the 99th percentile frame time drops from 13.3 to 9.9 ms. At the game's own 30 fps cap you will not see more frames:
    the gain is CPU headroom. The paced 60 fps mode is
    unchanged (16.63 ms per frame with and without). Rendered frames match the old path within the run-to-run noise;
    the Vulkan validation layers report no errors on the regression routes of both games. render_thread = 0 in
    larecomp.ini (or LARECOMP_RENDER_THREAD=0) turns it off.
  • Models are read from video memory on dedicated GPUs. The vertex and index data was read by the GPU in place from
    the game's memory (system memory, over PCIe) for every vertex invocation. It is copied to VRAM now: GPU time of the
    Pewter City frame 10.2 -> 1.2 ms. Integrated GPUs keep the old path (not tested). vertex_read = direct in larecomp.ini (or
    LARECOMP_VERTEX_READ=direct) goes back to it.
  • Mutex waits no longer stall the game threads. A contended lock spun briefly before sleeping on a condition
    variable (~1000 contended locks per frame per thread, ~12 us each on Windows). The paced 60 fps mode now holds 60.0
    fps (it was 58.8-59.3); unlimited frame rate went from about 60 to 65-74 fps at the time.
  • larecomp.ini edited by hand on Windows works: lines ending in CR+LF kept the CR in the value, so
    resolution = dynamic, upscaler = bilinear and the percentage modes fell back silently.
  • Dynamic resolution (resolution = dynamic, ini only) judged a steady 30 fps as too slow and dropped to 0.60
    scale; it budgets by the scene's pace now.
  • For developers: a much faster regression battery (6 routes of both games in ~100 s, was ~30 min), an interleaved
    A/B performance test with a confidence interval, per-draw GPU timing and a frame time CSV (docs/DEPURACAO.md,
    docs/PESQUISA-GPU.md).
  • Upgrading from 0.2.x: unzip over your install; no new setup (the game library is not rebuilt).
  • Tested with the zip built for this release, unzipped over 0.2.x installs of both games and started without MSYS2 on the PATH (no recompiling needed): Eevee loads a save and reaches the world (Route 2); Pikachu boots with the render thread on and plays the opening movie.

Updating: with the game closed, unzip over your folder (keeps the game files, saves, translations and settings).

0.2.2: offline communication screens

Choose a tag to compare

@raulzrrs raulzrrs released this 17 Oct 18:03

From the second patch in issue #1, thanks again to
@porstobotgovna:

  • No more crashes on the communication screens. The network services (nifm, ssl, bsd, ldn) didn't exist:
    the game got an empty session and closed when opening local wireless, Mystery Gift or internet co-op. They now
    answer like a console that is offline. Tested on both games (Eevee and Pikachu 1.0.0): local trade searches for
    a player and B goes back; Mystery Gift stays on "Connecting..." (that screen has no way out offline: the game
    waits with no timeout and ignores B, as on a console without Nintendo's servers); the Pokémon GO settings
    search and B goes back to the menu.
  • The other Bluetooth (btm:u) commands answer with no data, like a console with nothing paired.
  • Tested with the zip downloaded from this release, unzipped over 0.2.1 installs of both games (no recompiling
    needed): each one boots a save and reaches the local trade search.

Updating: with the game closed, unzip over your folder (keeps the game files, saves, translations and settings).

0.2.1: Let's Go Pikachu

Choose a tag to compare

@raulzrrs raulzrrs released this 17 Oct 17:04

From issue #1, with thanks to @porstobotgovna, who played
Let's Go, Pikachu! 1.0.2 on an AMD RX 7800 XT with Windows 10 and sent a patch:

  • Supports Let's Go, Pikachu! (and updated games): the launcher accepts either game by its program id, shows
    which one is set up, keeps Pikachu's saves in save-pikachu\ and installs translations for the set-up game.
    Tested here with Pikachu 1.0.0: setup (13 to 17 minutes), a new game through the title movie, Professor Oak and the
    name screen, and played (from a copy of an Eevee save) with 60 fps, wild battles and the PT-BR translation. Each
    folder holds one set-up game: to have both, unzip the release twice. 60 fps and wild battles work on Pikachu 1.0.0 too: their hooks and the generator's instruction patches
    are addresses in the game's executable, now in a table per build (the same functions in Pikachu, found by comparing
    the code instruction by instruction, tools/addrmap.py). Other builds (the updates) get neither (greyed out on the
    start screen). The game is told its real version (1.0.0 / 1.0.2) instead of always 1.0.0.
  • Fixes a crash at boot (c0000005 accessing 0x38) on some Windows 10 machines, whose Yu Gothic Regular font
    breaks the game's font engine: Yu Gothic Medium and MS Gothic come first now. LARECOMP_FONT=<file> overrides it.
  • Pokémon GO Park settings: the game waited on a Bluetooth pairing event that was never created and aborted; the
    event exists now, and a wait on an empty handle slot waits on the others.
  • Fixes wild battles with 60 fps on (0.2.0, both games): the battle counted as a menu and got in-between frames;
    it runs at 30 fps like the game's own battles now.
  • Flat dumps (the code files next to the RomFS's bin/) are set up too.
  • The overlay (close the game?, name entry) speaks English, Portuguese or Russian, from the system language
    (LARECOMP_LANG=en|pt|ru).
  • Crash reports list the last calls to the host, and the previous run's log is kept as lasrecomp-prev.log.
  • Tested with the zip downloaded from this release, unzipped twice without development tools on PATH: Eevee 1.0.0
    and Pikachu 1.0.0 set up from exefs + romfs.bin / romfs (13 minutes each), an Eevee save in Viridian City with
    the PT-BR translation and 60 fps in the world, and a new Pikachu game with the translation installed from its .rar
    (Professor Oak's lines in Portuguese).

To play both games, unzip the release into two folders and set each one up with its game.

0.2.0

Choose a tag to compare

@raulzrrs raulzrrs released this 17 Oct 13:08

Two experimental options on the start screen, both off by default:

  • 60 fps (experimental). The overworld runs at 60 fps natively: the game's own time step is halved there, so
    walking, the camera and the world's animations are smooth at the right speed. Menus and the Pokédex keep the game's
    30 updates per second and are shown at 60 with an in-between frame. Battles and captures stay at 30 fps, as the game
    made them (their timelines count frames; an in-between frame there was tried and left out). Tested by playing:
    world, menus and Pokédex at 60 without speed-ups; battles and captures at normal speed.
  • Wild battles (experimental). Touching a wild Pokémon starts a classic battle against it (its species, level,
    gender, IVs and level-up moves) and then the capture, like the game does with Snorlax and the legendary birds.
    Played on Route 1. Not done yet: split experience, nature and shiny of the touched Pokémon, regional forms, Pokémon
    with an aura; other areas not tested.

Also:

  • Controller stick dead zone, adjustable on the start screen ("Keyboard and mouse"): a stick at rest no longer
    moves the Poké Ball aim.
  • Known issue, also in 0.1.2: the colored aura of special wild Pokémon sometimes disappears for a single frame
    (docs/PROGRESSO.md, item 6).
  • Tested with the zip downloaded from this release, in a new folder without development tools on PATH: setup from a
    game folder with exefs and romfs (13 minutes to recompile on a 20-thread CPU), a new game through the controller
    screen, the title movie, Professor Oak and the character and name screens, and the Brazilian Portuguese fan
    translation installed from its downloaded .rar (Professor Oak's lines in Portuguese). With both options on (another
    clean folder): the world at 60 fps and a classic battle started by touching a wild Pidgey.