Rewrites a good amount of legality APIs pertaining to: * Legal moves that can be learned * Evolution chains & cross-generation paths * Memory validation with forgotten moves In generation 8, there are 3 separate contexts an entity can exist in: SW/SH, BD/SP, and LA. Not every entity can cross between them, and not every entity from generation 7 can exist in generation 8 (Gogoat, etc). By creating class models representing the restrictions to cross each boundary, we are able to better track and validate data. The old implementation of validating moves was greedy: it would iterate for all generations and evolutions, and build a full list of every move that can be learned, storing it on the heap. Now, we check one game group at a time to see if the entity can learn a move that hasn't yet been validated. End result is an algorithm that requires 0 allocation, and a smaller/quicker search space. The old implementation of storing move parses was inefficient; for each move that was parsed, a new object is created and adjusted depending on the parse. Now, move parse results are `struct` and store the move parse contiguously in memory. End result is faster parsing and 0 memory allocation. * `PersonalTable` objects have been improved with new API methods to check if a species+form can exist in the game. * `IEncounterTemplate` objects have been improved to indicate the `EntityContext` they originate in (similar to `Generation`). * Some APIs have been extended to accept `Span<T>` instead of Array/IEnumerable |
||
|---|---|---|
| .github | ||
| PKHeX.Core | ||
| PKHeX.Drawing | ||
| PKHeX.Drawing.Misc | ||
| PKHeX.Drawing.PokeSprite | ||
| PKHeX.WinForms | ||
| Tests/PKHeX.Core.Tests | ||
| .editorconfig | ||
| .gitattributes | ||
| .gitignore | ||
| icon.png | ||
| LICENSE | ||
| PKHeX.sln | ||
| README.md | ||
PKHeX
Pokémon core series save editor, programmed in C#.
Supports the following files:
- Save files ("main", *.sav, *.dsv, *.dat, *.gci, *.bin)
- GameCube Memory Card files (*.raw, *.bin) containing GC Pokémon savegames.
- Individual Pokémon entity files (.pk*, *.ck3, *.xk3, *.pb7, *.sk2, *.bk4)
- Mystery Gift files (*.pgt, *.pcd, *.pgf, .wc*) including conversion to .pk*
- Importing GO Park entities (*.gp1) including conversion to .pb7
- Importing teams from Decrypted 3DS Battle Videos
- Transferring from one generation to another, converting formats along the way.
Data is displayed in a view which can be edited and saved. The interface can be translated with resource/external text files so that different languages can be supported.
Pokémon Showdown sets and QR codes can be imported/exported to assist in sharing.
PKHeX expects save files that are not encrypted with console-specific keys. Use a savedata manager to import and export savedata from the console (Checkpoint, save_manager, JKSM, or SaveDataFiler).
We do not support or condone cheating at the expense of others. Do not use significantly hacked Pokémon in battle or in trades with those who are unaware hacked Pokémon are in use.
Screenshots
Building
PKHeX is a Windows Forms application which requires .NET Framework v4.6, with experimental support for .NET 6.0.
The executable can be built with any compiler that supports C# 10.
Build Configurations
Use the Debug or Release build configurations when building. There isn't any platform specific code to worry about!
Dependencies
PKHeX's QR code generation code is taken from QRCoder, which is licensed under the MIT license.
PKHeX's shiny sprite collection is taken from pokesprite, which is licensed under the MIT license.
PKHeX's Pokémon Legends: Arceus sprite collection is taken from the National Pokédex - Icon Dex project and its abundance of collaborators and contributors.
IDE
PKHeX can be opened with IDEs such as Visual Studio by opening the .sln or .csproj file.
GNU/Linux
GNU/Linux is not the main Operating System of developers of this program so there may be bugs; some may come from non GNU/Linux specific code of Mono/Wine, so other users may not be able to reproduce the error you are experiencing.
