No description
Find a file
Kurt 02420d3e93
PKHeX.Core Nullable cleanup (#2401)
* Handle some nullable cases

Refactor MysteryGift into a second abstract class (backed by a byte array, or fake data)
Make some classes have explicit constructors instead of { } initialization

* Handle bits more obviously without null

* Make SaveFile.BAK explicitly readonly again

* merge constructor methods to have readonly fields

* Inline some properties

* More nullable handling

* Rearrange box actions

define straightforward classes to not have any null properties

* Make extrabyte reference array immutable

* Move tooltip creation to designer

* Rearrange some logic to reduce nesting

* Cache generated fonts
* Split mystery gift album purpose
* Handle more tooltips
* Disallow null setters
* Don't capture RNG object, only type enum

* Unify learnset objects
Now have readonly properties which are never null
don't new() empty learnsets (>800 Learnset objects no longer created,
total of 2400 objects since we also new() a move & level array)
optimize g1/2 reader for early abort case

* Access rewrite
Initialize blocks in a separate object, and get via that object
removes a couple hundred "might be null" warnings since blocks are now readonly getters
some block references have been relocated, but interfaces should expose all that's needed
put HoF6 controls in a groupbox, and disable

* Readonly personal data
* IVs non nullable for mystery gift
* Explicitly initialize forced encounter moves
* Make shadow objects readonly & non-null
Put murkrow fix in binary data resource, instead of on startup
* Assign dex form fetch on constructor
Fixes legality parsing edge cases
also handle cxd parse for valid; exit before exception is thrown in FrameGenerator

* Remove unnecessary null checks
* Keep empty value until init
SetPouch sets the value to an actual one during load, but whatever

* Readonly team lock data
* Readonly locks
Put locked encounters at bottom (favor unlocked)

* Mail readonly data / offset
Rearrange some call flow and pass defaults
Add fake classes for SaveDataEditor mocking
Always party size, no need to check twice in stat editor
use a fake save file as initial data for savedata editor, and for
gamedata (wow i found a usage)
constrain eventwork editor to struct variable types (uint, int, etc),
thus preventing null assignment errors
2019-10-16 18:47:31 -07:00
PKHeX.Core PKHeX.Core Nullable cleanup (#2401) 2019-10-16 18:47:31 -07:00
PKHeX.Drawing PKHeX.Core Nullable cleanup (#2401) 2019-10-16 18:47:31 -07:00
PKHeX.WinForms PKHeX.Core Nullable cleanup (#2401) 2019-10-16 18:47:31 -07:00
Tests/PKHeX.Core.Tests PKHeX.Core Nullable cleanup (#2401) 2019-10-16 18:47:31 -07:00
.gitattributes Minor changes to git config files 2015-07-21 00:23:50 +02:00
.gitignore Fix save resigning for USUM, add resources for new pokemon 2017-11-08 11:31:09 -08:00
LICENSE.md Add license. 2015-07-20 20:54:07 -07:00
PKHeX.sln Add .NET Core 3.0 build option for WinForms project (#2396) 2019-10-01 18:12:08 -07:00
README.md Add file references for Let's Go 2019-03-12 11:59:06 -04:00

PKHeX

License

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, *.bk4, *.pb7)
  • 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.

Nintendo 3DS savedata containers use an AES MAC that cannot be emulated without the 3DS's keys, thus a resigning service is required (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

Main Window

Building

PKHeX is a Windows Forms application which requires .NET Framework v4.6.

The executable can be built with any compiler that supports C# 7.

Build Configurations

Use the Debug or Release build configurations when building using the .NET Framework. Use the Mono-Debug or Mono-Release build configurations when building using Mono.

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.

IDE

PKHeX can be opened with IDEs such as Visual Studio or MonoDevelop by opening the .sln or .csproj file.

GNU/Linux

Install MonoDevelop and Mono Runtime with flatpak install --user --from https://download.mono-project.com/repo/monodevelop.flatpakref. 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 (so developers using *BSD, Windows and macOS should be able to reproduce them).