Skip to content

Pokered Save Editor v0.14.1-alpha

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 23 Jun 00:12

Pokered Save Editor v0.14.1-alpha — a free, open-source save-file editor for Pokémon Red & Blue (Gen 1), built with Qt 6 (C++/QML).

It lets you open a .sav and edit your team, items, Pokédex, trainer card, PC boxes and more, with bit-for-bit fidelity (it changes only what you change).

⚠️ Pre-release / alpha — under active development, so expect rough edges and occasional changes to how things work. The downloads are unsigned, so Windows SmartScreen (and some Linux setups) will warn on first launch — that's expected for an alpha, not a problem with the file.

What's new in this release

2026-06-22 -- Static-analysis gate (clang-tidy + cppcheck + qmllint) + 8 analyzer bug fixes

Added the project's missing static-analysis / linting layer. New repo-root .clang-tidy (a curated,
DEFECT-focused check set — clang static analyzer + the high-signal bugprone/performance/unused checks, with
the noisy/style families and three deliberate-project-idiom checks documented-OFF), .cppcheck-suppressions,
scripts/lint.ps1 + scripts/lint.sh (run clang-tidy over build/compile_commands.json, cppcheck if
present, and qmllint — qmllint is informational-only because it can't resolve the project's
C++-registered QML types under the no-qt_add_qml_module design; cppcheck is informational too until a
validation pass), and a lint GitHub Actions workflow. CMAKE_EXPORT_COMPILE_COMMANDS is now forced ON.
clang-tidy runs file-parallel (a serial sweep of ~140 Qt TUs is ~25 min on a 2-core runner) and the
gate is clean (143 TUs, 0 findings).

Running it surfaced real defects, now fixed: PokemonBox::expLevelRangePercent() did integer division
(curExp / expEnd, both var32) before widening to its float return — the fractional percent was always
truncated to 0 until the very top of a level
(fixed to float division + a divide-by-zero guard;
regression-guarded by a new mid-window assertion in tst_pokemonbox); an unguarded toType1->ind deref
in PokemonBox::update()'s type2 else-branch (now guarded, matching the type1 path); a dead store in
PokemonMove's ctor (ppUp = 0 assigned the shadowing parameter, a no-op — removed); a signed/unsigned
char compare in PokemonStorageSet; an int-multiply widening in WorldScripts::reset(); plus cheap
const-ref loop fixes (fontpreviewprovider, eventdbentry, scripts, spriteSet) and a missing switch default
in PokedexModel. One latent finding is suppressed + flagged for review: ~ItemMarketEntry() can call
the pure-virtual _whichType() (UB) on the unusual path where whichType() was never cached during the
object's life — a lifetime refactor of that UAF-historied area, deferred to Twilight. Full ctest 67/67
green. See notes/plans/testing.md → "Static analysis / linting". VERSION 0.14.0-alpha → 0.14.1-alpha (PATCH).

2026-06-17 -- Editor: confirm destructive ops, status badge, evo gating, 3-digit level

Informed-consent + glance polish on the Pokémon editor. New reusable
fragments/general/ConfirmPopup.qml (centered alert modal — title, body, Cancel/Confirm — matching the
storage "Boxes Formatted" warn) with ask(title, body, action, label). One shared popup is threaded
(confirmAsk) PokemonDetails → DetailsPages → MovesTab → PokemonMoveSel, so every destructive action
now confirms first: whole-mon Re-Roll, Reset, Max Out, Correct Data, Evolve /
De-Evolve, the move bulk ops (clear-all-but-first, re-roll all, make all valid), and per-move
Delete / Validate. Non-destructive / individual-field actions (Heal, per-move randomize, per-field
re-rolls) are unchanged. The Evolution group is hidden entirely when the species can neither evolve nor
de-evolve, and each arrow stays disabled when that direction isn't possible. The GlancePane sprite now shows
a status-condition badge (sleep / poison / burn / freeze / paralyze) in its upper-right when afflicted
(same decode + assets as the storage grid), and the level field fits 3 digits ("100"). QML-only;
tst_qml_screens + tst_gui_moves + full ctest (67/67) green; screenshot-verified. VERSION 0.13.1-alpha
→ 0.14.0-alpha (MINOR — a notable UX/safety feature set).

How to get it

Platform File What to do
Windows *-windows-x64-setup.exe Installer — recommended; just run it.
Windows *-windows-x64-portable.zip No-install — unzip and run PokeredSaveEditor.exe.
Linux *-x86_64.AppImage Portable — chmod +x then run.
Linux *-linux-x64-portable.tar.gz Portable tree — extract and run usr/bin/PokeredSaveEditor.

Also attached: *-docs.zip (generated code docs) and *-screenshots.zip (UI screenshots).

Links

Built automatically from main. The deepest technical layer — the raw commit list — is in What's Changed below.

Full Changelog: v0.13.1-alpha...v0.14.1-alpha