github TheAnsarya/Nexen v1.4.33
Nexen v1.4.33 — Quality, Stability & Migration Improvements | 18 Commits, 12 Issues Closed, 5134 Tests Passing

latest releases: v1.4.41, v1.4.40, v1.4.39...
one month ago

Nexen v1.4.33 — Quality, Stability & Migration Improvements

18 commits | 12 issues resolved | 5,134 tests passing (3,690 C++ + 1,444 .NET) | Zero warnings

Nexen v1.4.33 is a comprehensive quality-and-stability release that wraps up the v1.4.32 performance triage and GameDataManager migration epic. This release features per-game data migration improvements, CI modernization to Node 24, WonderSwan timing validation hardening, a complete SteamOS guide rewrite, codebase cleanup eliminating all stale TODOv2 markers, and benchmark infrastructure for evidence-based performance work.


Highlights

Feature Details
Per-game data migration prompt ROM load now prompts before migrating save states and battery saves to per-game folders — no more unexpected file moves
CI modernization (Node 24) GitHub Actions workflows force Node 24 runtime, eliminating all deprecated Node.js 16/20 warnings
WonderSwan timing validation Hardened timing gate tests with multi-event ordering checks for improved WS/WSC emulation confidence
TODOv2 marker triage All 20 files with stale TODOv2 markers converted to issue-scoped TODO(#issue) references
Performance benchmark infrastructure Hotpath benchmark artifacts stabilized with repeatable scripts and evidence-backed triage
SteamOS guide rewrite Complete rewrite of the Steam Deck / SteamOS installation guide with Nexen-specific instructions
Pause behavior fix Menu/config auto-pause suppressed during ROM load transitions for seamless game startup

Fixed

Per-game migration now requires user confirmation — #1274

The GameDataManager migration pipeline now checks for pending save state and battery save migrations before moving files. A confirmation dialog (ConfirmGameDataMigration) is displayed to the user, and a new GetPendingMigrationCount() API provides pre-migration enumeration. This prevents the jarring experience of files being silently reorganized on first load after an update.

Menu/config pause suppressed during ROM load — #1290, #1300

When "Pause when in menu" or "Pause when in config" was enabled, opening a ROM could trigger an unintended auto-pause during the load transition. The pause guard now correctly suppresses auto-pause events that fire during ROM load, ensuring seamless game startup.

Pansy.Core package-only enforcement — #1298, #1302

CI now validates that Pansy.Core is consumed strictly as a NuGet package (not a project reference), preventing accidental coupling between the Nexen and Pansy solutions. A UI resource prep step was added to the package-only validation lane to ensure the build completes end-to-end.

UTF-8 stream compatibility and test warnings — #1297

Restored UTF-8 stream compatibility for cross-platform builds and reduced test warning noise from StringUtilities size_t assertions. Also fixed escaped newline sequences (\n) appearing as literal text in published GitHub issue comments.

COMPILING.md Pansy dependency documentation — #1298, #1299

Added documentation for the Pansy.Core NuGet dependency and created decoupling plans for future separation.


Changed

GitHub Actions: Node 24 runtime — #1303

All CI workflows now set FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true in the environment, forcing the GitHub Actions runner to use Node 24 for all JavaScript-based actions. This eliminates the deprecation warnings that were cluttering every CI run since GitHub announced the Node 16/20 sunset.

TODOv2: issue-scoped TODO triage — #1281

All 20 files containing stale TODOv2 markers (inherited from the Mesen2 era) have been triaged. Each marker was either:

  • Converted to TODO(#issue) format with a tracking issue reference
  • Resolved and removed if the work was already done
  • Documented as intentional divergence from upstream

SteamOS / Steam Deck guide — #1282, #1283

The SteamOS.md guide was entirely stale Mesen2 content. It has been completely rewritten with:

  • Nexen-specific download and installation instructions
  • Desktop Mode and Game Mode configuration
  • Controller mapping guidance
  • Performance tips for Steam Deck hardware
  • Linked from the main README.md documentation section

First-party warning reduction — #1297

Batch reduction of first-party compiler warnings across Utilities/ and Core.Tests/. The CI windows warning delta is now gated on first-party signal only, preventing third-party header noise from blocking merges.


Added

WonderSwan timing gate hardening — #1285, #1287, #1076

Multi-event ordering assertions added to WS timing gate tests, providing improved validation of frame-level event sequencing. This work is part of the ongoing WonderSwan PPU accuracy investigation (#1076) and ensures that timing regressions are caught automatically.

Hotpath benchmark stabilization — #1216, #1218

  • Repeatable run-memory-hotpath-benchmarks.ps1 script with labeled, timestamped JSON output
  • GBA ProcessInternalCycle distribution coverage benchmarks
  • Evidence-backed performance triage documentation showing that [[likely]]/[[unlikely]] annotations had no measurable effect on the tested hotpaths
  • Documented approach for future PGO/profiling-guided optimization

Per-game migration count API — #1274

New GetPendingMigrationCount() method and localized ConfirmGameDataMigration dialog resource for the migration prompt flow.


Performance

Hotpath branch-prediction triage — #1216

Real emulator-path microbenchmarks were created for GBA and NES memory hotpaths to evaluate whether [[likely]]/[[unlikely]] C++20 attributes would improve performance. After rigorous benchmarking with --benchmark_repetitions=3 and multiple runs:

  • Result: No statistically significant improvement detected
  • Conclusion: Modern compilers (MSVC v145, clang 18) already optimize these branches well
  • Next step: PGO (Profile-Guided Optimization) is the recommended path for further hotpath gains

Issues Resolved in This Release

Issue Title Type
#1274 Add migration flow for legacy scattered game data fix
#1281 Triage 21 stale TODOv2 comments from Mesen2 era refactor
#1282 SteamOS.md is entirely stale Mesen2 content docs
#1283 SteamOS guide rewrite docs
#1285 WS timing gate scaffold test
#1287 Expand WS timing scaffold to multi-event timeline test
#1290 Pause when in menu and config dialogs problem fix
#1297 Triage and reduce third-party warning debt fix
#1298 COMPILING.md does not mention Pansy dependency fix
#1299 Pansy decoupling plans docs
#1300 Pause suppression during ROM load fix
#1302 Enforce package-only Pansy.Core consumption fix
#1303 Enforce Node 24 for GitHub Actions ci

Validation Summary

Check Result
Release x64 build Success (zero warnings)
C++ tests (Google Test) 3,690 passed, 0 failed
.NET tests (xUnit v3) 1,444 passed, 0 failed
Total 5,134 tests passed

Downloads

Windows

Build Download Notes
Standard Nexen-Windows-x64-v1.4.33.exe Single-file, recommended
Native AOT Nexen-Windows-x64-AoT-v1.4.33.exe Faster startup, larger binary

Linux

Build Download Notes
AppImage x64 Nexen-Linux-x64-v1.4.33.AppImage Recommended for most users
AppImage ARM64 Nexen-Linux-ARM64-v1.4.33.AppImage Raspberry Pi 4/5, etc.
Binary x64 (clang) Nexen-Linux-x64-v1.4.33.tar.gz Requires SDL2
Binary x64 (gcc) Nexen-Linux-x64-gcc-v1.4.33.tar.gz Requires SDL2
Binary ARM64 (clang) Nexen-Linux-ARM64-v1.4.33.tar.gz Requires SDL2
Binary ARM64 (gcc) Nexen-Linux-ARM64-gcc-v1.4.33.tar.gz Requires SDL2
Native AOT x64 Nexen-Linux-x64-AoT-v1.4.33.tar.gz Faster startup

macOS (Apple Silicon)

Build Download Notes
Standard Nexen-macOS-ARM64-v1.4.33.zip App bundle
Native AOT Temporarily unavailable .NET 10 ILC compiler bug

Full Changelog: v1.4.32...v1.4.33

Don't miss a new Nexen release

NewReleases is sending notifications on new releases.