Hacking Homebrew PKSE - Pokemon Save Editor

  • Thread starter Thread starter kiasta
  • Start date Start date
  • Views Views 5,491
  • Replies Replies 10
  • Likes Likes 4

kiasta

Member
Newcomer
Joined
Jan 3, 2025
Messages
15
Reaction score
10
Trophies
0
Age
41
XP
70
Country
United States

PKSE - Pokemon Save Editor v1.0.2​



Source and binary can be found here: https://github.com/kiasta/PKSE

Greetings everyone! I have developed a switch homebrew application for editing Pokemon save files -- PKSE (Pokemon Save Editor). I used PKHeX heavily as a resource and I am very thankful for their hard work!

Current games supported:
  • Legends: Z-A
  • Scarlet/Violet
  • Brilliant Diamond/Shining Pearl
  • Legends: Arceus
  • Sword/Shield
  • Let's Go Pikachu/Eevee
  • FireRed/LeafGreen

I would strongly suggest making a backup with Checkpoint or a similar tool before using my save editor.



LOOSE DEVELOPMENT ROADMAP
  • Event injection + event-flag enable
  • PKSM bank import/export interop
  • Legality Layer 3 — encounter matching
  • Legalize" button — auto-fix to nearest legal


SCREENSHOTS

dark2.jpg


dark3.jpg

dark5.jpg



I HAVE PERSONALLY TESTED THIS WITH THE 22.5.0 FIRMWARE.
INSTRUCTIONS: Place the PKSE.nro file in your "smdc:/switch" directory. Must use title override for newer firmwares 21+.
If anyone has any suggestions or feedback feel free to leave it here, thanks!


Source and binary can be found here: https://github.com/kiasta/PKSE
 
Last edited by kiasta,
Nice to see an app like this being made that target current switch games !

FYI I opened several issues regarding optimizations / bugs for the current codebase.

Keep up the good work !
 
  • Like
Reactions: kiasta
Nice to see an app like this being made that target current switch games !

FYI I opened several issues regarding optimizations / bugs for the current codebase.

Keep up the good work !

Thanks a lot! There's another one with more features around here with more features, but not open-source. But I'm pretty close on getting the missing titles integrated. Thanks for the suggestions, much appreciated!
Post automatically merged:

Version 0.0.1 Release Candidate 1

- Fixed offsets for Pokemon Legends: Z-A. Now party/box Pokemon and items can now be modified.

https://github.com/kiasta/PKSE/releases/tag/0.0.1_rc1
 

Version 0.0.1 Official Release

  • Fixed various issues with Base Stats and IV/EV calculation
  • Added regional variant and individual Pokemon form Base Stat changes for IV/EV and Stat calculation
  • Several UI fixes
  • Save logic fixes
  • Instruction tooltip fixes
  • Heavy file and code restructuring
https://github.com/kiasta/PKSE/releases/tag/0.0.1_Release
Post automatically merged:

Version 0.0.2 Release​

Changelog:​

  • Fixed issue where shiny Pokemon had improper PID generation based on trainer OT instead of the Pokemon's OT.
  • Added project and build support for Visual Studio 2026
https://github.com/kiasta/PKSE/releases/tag/0.0.2
 
Last edited by kiasta,

Version 0.0.3 Release​

This release brings several enhancements and bug fixes.​

Enhancements:​

  • Added option to delete a save backup
  • Updated MAKEFILE to include Regional Variants/Forms sprites
  • Added Pokemon Types and Type banner sprites
  • Added Pokemon sprite to the Pokemon Details modal

Bug fixes:​

  • Fixed issue causing Pokemon shininess to toggle off when modifying IV/EV values
  • Fixed the incorrect back navigation logic from Save Backups screen
  • Fixed Dialog when leaving Trainer View Screen with unsaved changes
https://github.com/kiasta/PKSE/releases/tag/0.0.3_Release
 

Version 1.0 Release​

This release brings several new features, title support, a whole new UI interface and a plethora of bug fixes.​

Supported games (read, edit, write):​

  • Legends: Z-A
  • Scarlet/Violet
  • Brilliant Diamond/Shining Pearl
  • Legends: Arceus
  • Sword/Shield
  • Let's Go Pikachu/Eevee
  • FireRed/LeafGreen

Editing:​

  • Party & box Pokemon: species, level, stats, IVs/EVs (AVs in Let's Go),
    nature, ability, moves, held item, ball, OT/met/origin, shininess, gender,
    and ribbons.
  • Trainer info and item pouches, with per-game item and count limits.
  • Pokemon creator: build one from scratch in any game's format, with legal
    values highlighted.
  • Legality checker: flags illegal values as you edit (informational; it never
    blocks or changes anything).
  • Cross-game bank: PKSE-native storage every supported game shares. A Pokémon
    deposited from one game is converted into the destination's format on
    withdrawal, preserving its origin (OT, IDs, met data, IVs, nature, PID).

Interface & save handling:​

  • HOME-style UI (NanoVG) with 256px HD sprites, full touch controls, and
    scrollable storage and lists.
  • On-console backup and restore, with retained backup history.
  • Per-game save-version and DLC detection.
  • On-screen error reporting (including when no backups are present).
 
Last edited by kiasta,
  • Like
Reactions: Doredialilligan
Version 1.0.2 Hotfix Release

Met/egg locations, pre-Switch origins, and 7 missing HD sprites bug fixes

Met/Egg location bug:
Met/egg location showed "(none)" for banked location IDs. PKHeX banks these IDs by ID / 10000 (bank 0 = in-world, 3 = Link Trade / region + Pokémon HOME/GO transfers / "a picnic", 4 = events, 6 = egg sources). The generator only emitted bank 0, so traded, HOME-transferred, and egg Pokémon rendered "(none)". Now emit every bank and route by threshold, mirroring PKHeX LocationSet6.

Pre-Switch Origins bug:
HOME transferred Pokémon from a pre-Switch game showed Origin "Unknown" and met/egg "(none)". PKSE only recognised the Switch-era origin games. getOriginGameName now names every origin version byte (Gen 1-9), and location lookup carries one table set per generation (added Gen 4/5/6/7 = HGSS/BW2/XY/SM) routed on the origin generation, per PKHeX GameStrings.GetLocations. A Gen 3/4 (and Pokémon GO) MET ID is remapped into the current format's numbering when the mon is transferred up, so it is named with the format table -- a Platinum starter link-traded to Violet reads met = "a Link Trade"; Gen 5+ keep their own table; a Gen 4 egg stays on the Gen 4 table. An unset met date (00/00) now shows "(none)" instead of "00/00/2000". Verified against a real Violet save: every transferred mon resolves.

Missing HD Sprites bug:
The HD sprite set was fetched by NAME from pokemondb, which needs a name->dex map. That map dropped Mimikyu and six other species/forms whose display name didn't match pokemondb's URL slug. Once the old 96px PokeAPI fallback was removed, they rendered blank.

Fix the class of bug at the source: fetch PokeAPI's HOME renders by NUMERIC id instead (base = National Dex number, forms = 10000+ ids), so there is no name map to get wrong. New tools/gen_hdsprites.py downloads and downscales them from 512->256px (Pillow), fails on any missing base sprite, and is pinned to a PokeAPI/sprites commit for reproducibility.

Retire the whole download-based pipeline from the Makefile (the old low-res sprites/forms targets and the HD hdsprites/hdforms targets); `make` / `make all` no longer fetch Pokemon sprites. Delete the name-map tool files and document the one-time fetch step in the README.

https://github.com/kiasta/PKSE/releases/tag/1.0.2_Release
 

Site & Scene News

Popular threads in this forum