>>50197232>>50195862>>50197337Problem 2) BDSP's pokemon format is fundamentally incompatible with other formats, and pml treats pokemon like game objects and not like data.
PML does not support versioned accesses. Traditionally they work around this by only allowing forward migration, and just converting older format pokemon to newer format pkm.
However, they have promised inter-compatibility between BDSP/PLA/SWSH.
This is a really big issue, because it means they need to convert between the three formats, all of which are different, and some of the conversions there will be lossy, because PLA adds new data that's not present in BDSP/SWSH.
(BDSP's C# version of PML looks like it was made during/after SWSH DLC but before Arceus).
Solution:
They'll need to do the following:
* Stop treating pokemon like game engine objects, and start treating them like binary data. This is the critical step where PKHeX gets to cheat, because we don't represent pokemon as objects in an in-house C++ engine.
* In the backend, begin storing multiple versions of Pokemon (otherwise data will be lost on transfers).
* Create new pml bindings to allow accessors to be created for differing format versions (this amounts to making the whole accessor interface virtual and is a lot of work).
* Create new versioned accessors for the various format, add awareness of the format to their new pokemon class (they shouldn't be using CoreParam here, C++ engine objects are a mistake).
* Implement appropriate logic when synching a pokemon from save -> home to convert from format 1 to formats 2/3, dealing with the lossy conversions somehow.
This is a metric shitload of work.
tl;dr: Gamefreak architected Home to re-use their engine/pokemon library, but this causes huge problems with a fundamentally incompatible format + no support for versioning, because they don't have any way of treating pokemon as binary data.