Skip to content

Releases

Arceuszada v1.1.0 - Stability, Performance & 60 FPS Improvements

Choose a tag to compare

@CarlosExabyte CarlosExabyte released this 08 Nov 18:54
3d44186

🔧 Fixes & Improvements

  1. Fixed 23% Compilation Crash & Unicode Path Support

Fixed an abrupt crash occurring at approximately 23% during compilation, particularly when processing large subsdk0 files containing 157 chunks.

Root causes:

A Use-After-Free vulnerability in the Batch Patcher (jump_table_fix.h), where buffer reallocation could invalidate pointers still being accessed by the outer processing loop.

ANSI/UTF-8 encoding conflicts when handling installation paths containing accented or non-ASCII characters, causing paths such as Pokémon Legends Arceus to be incorrectly interpreted.

Improvements:

Reworked patch_chunk_in_c to use safe integer offsets (size_t pos) and heap-allocated output buffers (StrBuf).

Increased the Windows linker stack allocation to 16 MB.

Introduced utf8_win.h with Unicode-aware Windows path conversion and automatic encoding fallback.

Integrated Unicode-compatible file and directory operations across the relevant platform and game-building modules.

Improved resource path resolution to prioritize relative ASCII paths when the working directory is already set to the executable directory.

  1. Fixed 2x Game Speed in 60 FPS Mode

Fixed the game running at approximately twice its intended speed when using 60 FPS mode.

This issue affected previous builds, including v1.0.0, v1.1.1, and older precompiled lasgame.dll versions.

Root causes:

Thread-local dispatch caching (dcache) prevented runtime clock hooks from being applied correctly.

HLE clock hooks incorrectly modified the emulated program counter (c->pc) when returning.

Several ARM64 instructions and generated helper functions still contained the original 30 FPS timestep (1/30f), affecting character movement, camera behavior, animations, and Havok physics.

Improvements:

Runtime clock hooks are now installed before the game's main thread is created.

Reworked clock interception with ARM64 signature scanning, HLE overrides, and native x86-64 detours.

Added support for clock-related functions, including get_clock_channel, set_clock_step_ns, set_clock_rate_idx, and f_71019522d0.

Updated the runtime rate table and patched the relevant timestep instructions directly in memory.

Updated jump_table_fix.h to recognize the exact instruction patterns generated by lasgen.exe.

All 22 identified timestep chunks were patched, recompiled, and relinked into the updated lasgame.dll.

The runtime patching also provides compatibility with older precompiled lasgame.dll builds, including the v1.0.8 version.

  1. Improved Performance on Integrated GPUs

Fixed unnecessary CPU overhead caused by static texture processing and adjusted default graphics settings for integrated GPUs.

Root causes:

Static BC4 and R8 textures were incorrectly marked as dynamic, preventing the operating system's write-watch optimization from skipping unnecessary texture hash calculations.

The Arceus game profile was forcing 60 FPS and 100% resolution, even on lower-performance integrated GPUs.

Improvements:

Restored the write-watch optimization for unchanged, previously uploaded textures.

Removed unnecessary forced dynamic flags from static BC4/R8 textures.

Adjusted graphics recommendations for integrated GPUs (VPROF_LIGHT).

Default recommended resolution is now 75% (RES_Q75).

Default recommended frame rate is now 30 FPS for integrated GPUs.

These changes should reduce unnecessary CPU workload and provide more appropriate default settings for hardware with limited graphics performance.

Arceuszada v1.0.9

Choose a tag to compare

@CarlosExabyte CarlosExabyte released this 05 Nov 21:06
3d44186

Pokémon Legends: Arceus Recomp v1.0.9

This release focuses on critical stability fixes, improved jump table handling, build system reliability, and crash diagnostics.

Critical Fixes

  • Prelude Beach Crash (c0000005): Fixed null pointer dereferences during texture aliasing, water rendering, GTAO, HDR snapshots, and Vulkan resource management.

  • Indirect Branch Handling: Fixed unhandled mid-function branches by improving internal jump resolution and dispatch logic.

  • Jump Table Patcher: Reworked jump table scanning to dynamically detect valid labels across all generated modules (main, sdk, subsdk0, and subsdk1), supporting game versions v1.0.0 through v1.1.1.

  • PC Sanitization: Added automatic program counter resets to prevent phantom branches and incorrect execution flow.

  • Build Cache Integrity: Fixed the Generated source changed while being compiled error by ensuring all source patches are applied before SHA256 hashes are generated.

Crash Diagnostics Improvements

  • Added detailed Windows SEH exception logging.

  • Crash reports now include module-relative instruction addresses (RVA).

  • Added full CPU register dumps and backtrace information.

  • Improved crash classification for low-address null references, identifying graphics engine issues more accurately.

Compilation Validation

Successfully compiled four previously problematic source chunks using Zig CC:

Source file | Functions patched | Result -- | -- | -- main_1231.c | 19 | Success main_588.c | 1 | Success sdk_077.c | 5 | Success subsdk0_014.c | 4 | Success

All four compilation tests returned exit code 0.

Build & Distribution

  • Updated launcher version to v1.0.9.

  • Regenerated arceusrecomp.lib with 1,827 exported symbols.

  • Verified launcher initialization with Vulkan 1.4.

  • Removed obsolete Z-A / LASRecomp references from the executable.

  • Updated both the testing package and clean recompilation package.

  • Audited the distribution archive: no Nintendo game ROM or proprietary game files (.nso, .nsp, .xci) are included.

Compatibility

Jump table patching improvements cover generated modules across game versions v1.0.0–v1.0.9.


Note: This release contains significant internal stability and compilation improvements. Further testing across different hardware configurations and game scenarios is still encouraged.

Thank you for supporting the project!

Arceuszada v1.0.8 ( L_jt_fix FIX )

Choose a tag to compare

@CarlosExabyte CarlosExabyte released this 05 Nov 08:08
3d44186
## Release Notes — Arceuszada v1.0.8 (Arceus Recomp)

This release resolves the post-intro loading screen crash on updated ROMs (`v1.0.1` through `v1.1.1`, such as `unhandled mid-function branch to 0x71017f7180 inside f_71017f6878+0x908`) and introduces 6 compilation and runtime safeguards across Windows environments.

---

### 🚀 Key Fixes & Improvements

#### 1. Universal Intra-Function Indirect Branch Dispatcher (`runtime/jump_table_fix.h`)
* **Root Cause Fixed:** In updated game dumps (e.g., `v1.1.1`, which compiles 2,083 object chunks instead of base v1.0.0's 2,067), function addresses shift (such as `f_71017ccbf8` moving `+0x29C80` bytes to `f_71017f6878`), causing unpatched mid-function `BR Xn` jumps to abort during the transition from the intro cutscene to Prelude Beach.
* **Solution:** Replaced address-specific filters and brittle lookback heuristics with a universal `L_jt_fix` local label switch generator. Any function containing an indirect register branch (`c->pc = c->x[...]`) now automatically maps all of its local `L_71<hex>` labels into a zero-overhead `switch (c->pc)` table before falling back to `rt_dispatch(c)` for external tail-calls.

#### 2. Automatic Fallback to `-O0` on Compilation Retries (`runtime/gamebuild.c`)
* If any medium-sized C chunk encounters an LLVM `-O1`/`-O2` out-of-memory error or timeout on systems with tight RAM/pagefile limits, subsequent retry attempts (`u->retries > 0`) automatically force `-O0` to guarantee 100% compilation completion.

#### 3. Smart Generator Concurrency on Low-RAM Systems (`runtime/gamebuild.c`)
* Prevents out-of-memory freezes during the initial 0%–20% code lifting phase on PCs with `<= 9 GB` of RAM by throttling concurrent `lasgen.exe` processes while lifting the massive `main` module.

#### 4. Linker Response File (`@objects.rsp`) for Long Directory Paths (`runtime/gamebuild.c`)
* Passes all 2,067–2,083 `.o` object file paths via `extracted/.gamebuild/objects.rsp` instead of raw command-line arguments, eliminating `CreateProcess` 32,767-character limit failures at 98% when extracted inside deep folder trees.

#### 5. Windows Defender Lock Retry Loop at 99% (`runtime/gamebuild.c`)
* Adds a 15-attempt retry loop (`300 ms` intervals) when moving the newly linked `lasgame.dll` into place, preventing `EACCES` (Access Denied) build failures while Windows Defender scans the newly created ~350 MB binary.

#### 6. Guaranteed 17 MB Shared Font Memory (`runtime/services/pl.c`)
* Enforces `SHMEM_SIZE = 0x1100000` (17 MB) for the `nn::pl` shared memory buffer in strict compliance with the Nintendo SDK.

---

### 📦 How to Update from v1.0.7 or Earlier
1. Extract `Arceuszada-v1.0.8.zip` and overwrite your existing files.
2. **Important (if upgrading from an older version):** Delete `extracted/lasgame.dll` and the `extracted/.gamebuild` folder once so the compiler rebuilds your game code with the new v1.0.8 jump-table dispatcher.
3. Run `Iniciar_Jogo.bat` or `arceusrecomp.exe`

Arceuszada v1.0.8 ( BUX FIX )

Choose a tag to compare

@CarlosExabyte CarlosExabyte released this 04 Nov 21:23
3d44186

Release Notes — Arceuszada v1.0.8 (Arceus Recomp)
This release introduces the 6 definitive shields to completely eliminate failures across any Windows environment (from 0% to 100%), expanding native support for all official game updates (v1.0.1 through v1.1.1), protecting against Windows Defender false positives, overcoming command-line length limits in deep directory paths, managing RAM dynamically on modest PCs, and ensuring correct system shared-memory mapping.

🛡️ The 6 Definitive Shields (0% to 100%)

  1. Automatic Fallback to -O0 on Compilation Retries (runtime/gamebuild.c)
    Problem Solved: On computers with limited RAM or a restricted pagefile, intermediate code files (80 KB to 140 KB) could trigger out-of-memory (OOM) errors or timeouts within LLVM's -O1/-O2 optimizer.

Solution Implemented: If a compilation unit fails on its initial attempt (u->retries == 0), gamebuild.c now automatically forces the -O0 optimization flag on subsequent attempts (u->retries > 0). This ensures 100% of files compile reliably under extreme memory pressure.

  1. Intelligent lasgen.exe Process Limiting on Low-RAM PCs (runtime/gamebuild.c)
    Problem Solved: Launching 4 heavy code generator instances (main, subsdk0, subsdk1, sdk) simultaneously on PCs with ≤ 9 GB of RAM exhausted system memory during the lifting phase of the main file (which contains over 160,000 functions).

Solution Implemented: The launcher now dynamically checks available physical memory. On PCs with up to 9 GB of RAM, the main module generator runs isolated and prioritized before spawning the remaining modules, preventing freezes in the initial 0%–20% range.

  1. Generic Jump Table Detection Across Multiple Game Versions (runtime/jump_table_fix.h)
    Problem Solved: The previous system used a hardcoded static filter restricted solely to base version v1.0.0 addresses (f_71017ccbf8, f_7106227cd8, f_7104855410), which failed when compiling updated ROMs (v1.0.1 through v1.1.1) where function offsets shift.

Solution Implemented: The code inspector in patch_chunk_in_c() has been fully generalized. Along with covering known reference points, it now dynamically scans any function matching void f_(Cpu *c) across all generated .c files containing the dispatch and jump pattern (c->pc = c->x[R]; attribute((musttail)) return rt_dispatch(c);), automatically injecting the correction patch regardless of the exact game version.

  1. Response File (@objects.rsp) for Long Paths in the Linker (runtime/gamebuild.c)
    Problem Solved: In installations located within deep directory structures (such as long Windows user paths), passing over 2,067 compiled .o object paths directly into the zig.exe cc / lld-link command line breached the native 32,767 character limit of CreateProcess, causing critical failures near 98%.

Solution Implemented: All compiled object paths are now securely written to a response file (objects.rsp) using normalized forward slashes (/) and passed by reference to the linker (@.../objects.rsp), completely removing path length restrictions on Windows.

  1. Retry Mechanism Against Windows Defender File Locks (runtime/gamebuild.c)
    Problem Solved: At 99%, right after the linker generates the large temporary DLL (lasgame.dll.tmp, ~350 MB), Windows Defender frequently intercepts the file for real-time scanning, locking the file handle for several seconds and triggering access-denied errors (EACCES / MoveFileExW failure).

Solution Implemented: The final renaming process now features a robust retry loop of up to 15 attempts with 300 ms pauses between them, patiently waiting for the antivirus to release the file handle and ensuring the build finishes successfully without crashing in the final second.

  1. Guaranteed SHMEM_SIZE Allocation of 17 MB (runtime/services/pl.c)
    SDK Compliance Guarantee: Validated and maintained the correct font shared-memory buffer size for nn::pl in runtime/services/pl.c, defined strictly as 0x1100000 (17 MB) to respect official Nintendo requirements and prevent font initialization crashes within the game's UI subsystem.

Arceuszada v1.0.7 (Arceus Recomp)

Choose a tag to compare

@CarlosExabyte CarlosExabyte released this 03 Nov 22:55
3d44186

This release brings critical stability improvements for autonomous compilation of the four modules, severe binary optimizations, and the complete removal of legacy references to ensure a 100% neutral and clean distribution.

🚀 Highlights & Key Changes

  1. Zero Traces & Binary Hardening (-g Strip)
    Total DWARF Debug Path Removal: The Makefile now applies the strip -g command during binary generation (arceusrecomp.exe).

ABI Preservation: The PE export table (.edata) is kept intact, while absolute host paths (C:/Users/Carlos/.../PokeZ-ARecomp) have been completely stripped.

Rigorous Validation: Verification runs without grep -v (strings build/arceusrecomp.exe | grep -iE 'z-a|za recomp|las recomp|pokez|hexveil') return PERFECT_ZERO_LINES (0 references to previous names or repository watermarks).

Size Reduction: The main executable was optimized from 20.4 MB down to 5.34 MB.

  1. Dynamic Generalization of Jump Tables
    Removed static file name guards (strcmp) in runtime/jump_table_fix.h.

The code inspector now dynamically analyzes any generated .c file looking for problematic function signatures (f_71017ccbf8, f_7106227cd8, f_7104855410), ensuring resilience if the compiler reorders chunks or alters block layouts.

Automatic cache cleanup (remove(u->tmp); remove(u->obj);) triggers whenever fixes are injected, forcing an immediate clean recompilation.

  1. Robust Support for All 4 Arceus Modules Without Python (gamebuild.c)
    Disk Fallback Chunk Counting (count_generated_chunks): Fixed a Windows buffering issue where generator logs terminated without the final progress string. If log-based counting fails, the C runtime now scans the .gamebuild// directory on disk and precisely counts all actual generated files (main_000.c through main_1475.c, subsdk0, subsdk1, and sdk).

All 4 official game modules (main, subsdk0, subsdk1, sdk) now compile, validate chunks, and save caches natively in the Launcher without external intervention.

  1. Clear Instructions for Encrypted ROMs (.nsp / .xci)
    Updated the interface in runtime/ui/launcher.mm to display clear bilingual instructions if a user attempts to load an unextracted packaged file:

"Encrypted NSP/XCI detected. Please extract the 'exefs' and 'romfs' folders (using Ryujinx/Yuzu/hactool) into the 'extracted/' folder first."

  1. UI Cleanup & Boot Acceleration
    Disabled Incompatible Tabs: The launcher menu (runtime/ui/menu.mm) strictly hides all legacy Randomizer, Cheats, Warp, Save Editor, and Cosmetics tabs carried over from Link's Awakening. The panel now displays strictly: Controls, Video, Audio, Game, and Exit.

Instant Boot: Added early return checks (if (game_profile_is_arceus()) return;) in texture and recolour routines (recolour.c and texpatch.c), eliminating unnecessary scans for missing legacy RomFS files and speeding up initial game startup.

📦 Usage Instructions
Extract the release .zip archive into a folder of your choice.

Make sure to place your base game's extracted exefs and romfs folders inside the extracted/ directory.

Run Iniciar_Jogo.bat or launch arceusrecomp.exe directly.

Arceuszada v1.0.6

Choose a tag to compare

@CarlosExabyte CarlosExabyte released this 03 Nov 18:13
3d44186

This hotfix resolves the post-character-creation campaign crash (f_71017ccbf8), fixes the startup crash caused by legacy executable aliases (+3596), and prevents memory/window hangs on 8 GB RAM systems.

What's Changed

Post-Intro & Character Creation Crash Fix (Local Jump Tables)

  • Fixed Campaign Transition Crash (f_71017ccbf8, f_7106227cd8, f_7104855410): Resolved an issue where jump tables with intervening SIMD instructions between the scaled add and br xR fell back to musttail return rt_dispatch(c), re-entering the function from its prologue and corrupting this (x19).
  • Built-In C Patcher in gamebuild: Embedded an automatic jump-table patcher directly inside runtime/gamebuild.c (patch_jump_tables_if_needed). New builds and existing caches automatically recompile the 3 affected translation units (main_588, sdk_077, subsdk0_014) in seconds without requiring external Python scripts or a full 2,067-object rebuild.

Startup & Linker Stability

  • Eliminated Dual-Module Host Crash (c0000005 at +3596): Removed legacy lasrecomp.exe / lasrecomp.dll.a aliases so extracted/lasgame.dll binds strictly to the active arceusrecomp.exe process image.
  • Non-Fatal svcBreak & 8 MB Native Thread Stacks: Enforced an 8 MB minimum native Windows stack reservation with a 64 KB SetThreadStackGuarantee across all guest threads and prevented silent exits on diagnostic svcBreak calls.

Memory & UI Responsiveness (8 GB RAM Systems)

  • Fixed pl:u Shared Font Buffer Overflow: Replaced 41 MB Windows CJK font fallbacks (msjh.ttc, malgun.ttf) with the lightweight RomFS fonts (FOT-RodinNTLGPro-DB.BFOTF and FOT-UDKakugoC80Pro-DB.BFOTF, ~7 MB total), staying well within the 17 MB pl:u shared memory limit.
  • Responsive Shader Indexing & RAM Trim: Added periodic SDL_PumpEvents() and watchdog resets during initial shader indexing (7,322 shaders) to prevent Windows "Not Responding" freezes, and added SetProcessWorkingSetSize trimming right after gamebuild completes.

Arceuszada v1.0.5

Choose a tag to compare

@CarlosExabyte CarlosExabyte released this 02 Nov 23:55
3d44186

Pokémon Legends: Arceus Recomp — v1.0.5

This release introduces a complete rebranding to Arceus Recomp (arceusrecomp.exe), critical real-time physics and simulation speed fixes, restored 3D world geometry rendering across Transform Feedback (XFB) passes, major CPU memory-tracking optimizations, and a self-contained multi-module recompilation pipeline.

What's Changed

Real-Time Simulation (1.0x), Havok Physics & Frame Pacing

  • Fixed Slow-Motion Gameplay (Movement, Dodge Rolls & Poké Balls): Anchored frame delta time calculation (rt_arceus_on_present) once per frame at Present time instead of re-sampling across sub-steps. This prevents the 16.6 ms floor quantization across multiple engine clock channels and Havok physics sub-steps, ensuring the game runs at true 1.0x real-time speed regardless of frame rate.
  • Accurate 19.2 MHz Hardware Timer: Updated rt_ticks() to convert Windows QueryPerformanceCounter directly via 128-bit arithmetic to native Switch ticks (CNTVCT_EL0), eliminating animation and physics drift.
  • Sub-Millisecond Thread Scheduling (svcSleepThread): Replaced coarse nanosleep calls with high-resolution Windows Waitable Timers + final sub-millisecond spin-wait (plat_sleep_until_ns), removing 15.6 ms scheduler stalls on Havok physics and worker threads.

Vulkan Rendering & CPU/VRAM Optimization

  • Restored 3D World & Character Visibility: Removed unconditional xm_buf redirection in guest_direct(). Only memory ranges actively written by Transform Feedback sessions (xm_all_written) now route through the XFB mirror buffer, restoring static terrain, buildings, and character meshes to the primary vertex cache.
  • Proper Vulkan XFB Pipeline Barriers: Ensured vkCmdPipelineBarrier2 (TRANSFORM_FEEDBACK_WRITE -> VERTEX_ATTRIBUTE_READ | SHADER_READ) is always emitted outside an active Render Pass (vk_end_pass()), preventing the Vulkan driver from dropping synchronization on animated meshes.
  • Unified Dual Write-Watch Dirty Bitmap (Zero Texture Lag & Fixed Dialogue Fonts): Implemented a centralized Windows GetWriteWatch manager splitting dirty pages into dedicated vtx_dirty_bm and tex_dirty_bm bitmaps. vc_flush no longer wipes page modification bits before the texture manager reads them—eliminating per-draw CPU texture hashing lag while updating dynamic glyph atlases for NPC dialogues instantaneously.
  • Particle & Invalid Buffer Crash Guards: Added safety guards against null indexed draws, bound constant zero vectors for empty vertex streams, enforced fallback to gc_dummy for unmapped spans, aligned dynamic offsets to minUniformBufferOffsetAlignment, and wired VkPipelineCache into compute pipelines to prevent crashes and stutters during Poké Ball throws and battle transitions.

Standalone Rebrand, Multi-Module Linker & UI

  • New Executable & Native Identity (arceusrecomp.exe): Full rebranding across window titles, crash handlers, and logs with a multi-resolution embedded icon. Disabled legacy online auto-update checks to prevent overwriting custom builds.
  • Fixed LoadLibrary Error 126 (ERROR_MOD_NOT_FOUND): Added updated host export definitions and PE import libraries (arceusrecomp.def / arceusrecomp.lib / arceusrecomp.dll.a) to both gamebuild and the standalone zig lld-link scripts so freshly compiled extracted/lasgame.dll binaries link cleanly against arceusrecomp.exe.
  • Self-Contained 4-Module Recompilation Pipeline: Updated the build orchestrator (build_pla.py / build_pla.ps1) and embedded zig/clang toolchain to seamlessly lift, compile, and link all 4 Arceus modules (main, subsdk0, subsdk1, and sdk — ~226,000 functions / 2,067 object chunks).
  • Bilingual Configuration UI (EN / PT-BR): Set English as the default interface language and added an instant runtime language switcher (English / Português (Brasil)) under the ESC settings menu (Game -> Language).

Arceuszada v1.0.0

Choose a tag to compare

@CarlosExabyte CarlosExabyte released this 02 Nov 02:00
90e9fdf

Arceuszada v1.0.0

First public release of Arceuszada, an amateur recompilation project for Pokémon Legends: Arceus.

Included

  • Recompilation tools and scripts.
  • Required project files and dependencies.
  • Automated recompilation and launch scripts.
  • Instructions for setting up the game files.

Requirements

Users must provide their own legally obtained game files, including the extracted ExeFS and RomFS.

Installation

  1. Download and extract the ZIP file.
  2. Set up your game files in the extracted/exefs and extracted/romfs directories.
  3. Run recompilar_arceus.bat or lasrecomp.exe.
  4. After compilation, run executar_arceus.bat.

Disclaimer

This is an unofficial, amateur fan project. It is not affiliated with, endorsed by, or sponsored by Nintendo, Game Freak, or The Pokémon Company.

All trademarks and original game assets belong to their respective owners. This project does not include or distribute original game files.

Credits

This project builds upon existing tools and research. Full credit is given to the original developers and contributors whose work made this project possible. Please refer to the repository README for acknowledgements.

Sorry for the large file size! I'm still working on optimizing the project to make it much lighter and easier to download. I'll do my best to reduce its size in future releases. Thanks for your patience and understanding!