Commit graph

103 commits

Author SHA1 Message Date
Kurt
d4ce0644c8 Simplify block property names
[...]Block -> [...]  since it's kinda redundant, we already know by its
type.
Rename offset ints that collide
2019-10-18 20:42:03 -07:00
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
Kurt
b81a1e1e29 Refactoring
Increase abstraction for arbitrary slot get/set operations, and fracture
SAV4 behavior for each game type.

Adds: Undo/Redo of party slot changes
Fixes: Fixed Gen5 daycare slot 2 reading, and EXP reading
Fixes: Some slot color glitchiness
Fixed: Box layout editor now hides the flag label if no flags are
present
Fixed: Gen7 box flags are now shown (unknown purpose lol)
Changed: savefile objects are generally smaller (removed a few shared
offset fields)
2019-09-02 19:30:58 -07:00
Kurt
9ed47cc8fd Minor tweaks, no functional change 2019-07-21 12:30:21 -07:00
Kurt
a608e0b252 Minor clean
Remove some unnecessary properties from SaveFile
Enumerate checksum flag results for GC memcard checking
Remove unnecessary checks on savefile type
Add some documentation
Decapitalize some method parameters
2019-07-14 15:06:45 -07:00
Kurt
7225b2b87b Add more sav1/2 option properties
Closes #2321
Closes #2322
no gui as SimpleTrainer is kinda getting overloaded; use linqpad or wait
for someone to make a GUI for the specific games
2019-06-09 14:15:42 -07:00
Kurt
455ab32722 Retain override version on clone
Also hide the pika friend label when YW features hidden #2283
2019-06-09 13:48:51 -07:00
Kurt
1b028198ad
Split gen5-7 saves with inheritance (#2319)
refer to pull request comments for summary
2019-06-08 19:56:11 -07:00
Kurt
4f347fbfa9 Misc reductions
no functional change
2019-03-30 16:21:45 -07:00
Kurt
609db23dc5 Consolidate pouch load/set 2019-03-30 16:10:14 -07:00
Kurt
bb8cf5d3d8 Simplify get/decrypt pkm access 2019-03-29 19:43:33 -07:00
Kurt
5dcf2f4dc8 Use enum instead of nullable bool tristate 2019-03-29 17:52:26 -07:00
Kurt
b1ead9e630 Split StringConverter into smaller pieces
reduces loading time (don't have to allocate conversion arrays when
launching a gen7 game), and separates things to easier to manage
locations

reworks gen3 string encode/decode, no longer does 3->4->5 and 5->4->3;
instead goes straight to the end result without an intermediary format.

String sanitization should probably be broken up rather than reused, oh
well.
2019-03-20 21:50:44 -07:00
Kurt
8a08d32dff Simplify pkm constructors
remove Identifier param. 99% of the time, identifier is not provided,
resulting in a useless call

end result:
provide 'create new' and 'create from' constructors
2019-03-16 18:41:56 -07:00
Kurt
13a6d16cb9 Relocate checksum/dexform logic 2019-03-16 12:01:21 -07:00
Kurt
fb8aa3bba0 Lowercase parameter 2019-02-19 20:26:20 -08:00
Kurt
a385a8481d Misc tweak to savefile export
Use flags to request header/footer in the output
gets rid of the DSV/GCI bool arguments
2019-02-18 21:59:57 -08:00
Kurt
f481404503 Misc clean 2019-02-02 10:19:41 -08:00
Kurt
13090c0ced misc gen1 updates
sav1: assign personal table based on (detected/provided) version
catchrate editor: allow to use savefile personal
remove gb era prompt whenever gb/blank loaded; have it as a setting (can
be overridden for VC now). keep allowgbera as autodetect
personaltable: track format for debugging purposes/info

update translations
2019-01-21 20:06:02 -08:00
Kurt
c591d2a69d Misc updates
condense some logic
2019-01-11 17:44:51 -08:00
Kurt
efb9b7eba2 Misc cleanup
removes clickonce logic/reference
2018-12-10 20:32:08 -08:00
Kurt
4c1232855f Add getstring method with non-sav data 2018-12-04 22:00:57 -08:00
Kurt
7ef5d9e547 Add pk1 current level property party->box setter
https://projectpokemon.org/home/forums/topic/47086-bug-trades-between-two-saves-1g/?do=findComment&comment=235241

fresh encounters have yet to be boxed and don't have the value; set it
whenever setting a Stored slot.
2018-08-19 13:35:20 -07:00
Kurt
75d700c171 Fix sav1 jp load order
oops
2018-08-14 20:12:10 -07:00
Kurt
259feae038 re-allow event flag editing on gen1
closes #2088
2018-08-07 07:54:14 -07:00
Kurt
421c522eb4 Fix gen1 sav load
Starter fetches via Offsets, which was null, reorder the init
Thanks @Ninjistix !
Closes #2087
2018-08-06 21:29:47 -07:00
Kurt
0296f98777 Add offset table for sav1
calling Japanese ? X : Y on every single access is too excessive, just
compute one layout for each type whenever the first sav1 requires it.

could probably reduce the amount of properties by reusing others + shift
value; offsets are different due to string lengths being different
2018-08-05 20:27:25 -07:00
Kurt
fc73eee570 Extract PokemonList* to inherited class
Logic is essentially identical; implement a base class and have the
generation specific structures implment the differences.

Reduce the verbosity a little
2018-08-05 17:28:54 -07:00
Kurt
02a6d26e1b Break apart BAKName into smaller components
simplifies definition & makes it easier to update bakname usage later
2018-07-29 21:51:45 -07:00
Kurt
b16015e8e5 Split InventoryPouch to inheriting classes 2018-07-29 13:55:07 -07:00
Kurt
da839988af Simplify RBY checksum calc
utilize unchecked byte overflow
remove unnecessary zeroing -- t's immediately after the checksummed
region. even if it was included, chk += 0 is still 0.
2018-07-21 19:24:09 -07:00
Kurt
a81c28f114 Upgrade FolderList to show recent/backups
sortable grid like the ReportGrid for pkm, can open/browse individual
files
2018-07-15 17:48:31 -07:00
Alexander Hoischen
517441a982 Implement IsDaycareOccupied for SAV1 (#2036)
This commit implements IsDaycareOccupied for generation 1 saves. The
byte which tracks if the daycare is occupied should normally only be
0x01 or 0x00, so I decided that all other values mean that the daycare
is probably corrupted and thus not occupied. SetDaycareOccupied is not
implemented, since I am not sure what other flags the game normally sets
in this scenario and daycare is read-only anyway.

The GUI displays the Pokemon's index to the right for some reason, but I
don't have saves to test this for other generations, so it might be
unrelated to this change.
2018-06-29 16:18:42 -07:00
Kurt
51a4d8095d Handle jp OT string length copy
Closes #1949
was using international length (11) instead of (6)
2018-05-16 16:58:00 -07:00
Kurt
99005d8fc0 Refactoring
more discards & simplifications
2018-05-12 12:28:48 -07:00
Kurt
71faaee31c Refactor savefile tid/sid to int
can now use TrainerID editor control on a savefile... soon?
2018-04-28 11:06:58 -07:00
Kurt
9bb4120ff9 add faster pkm slot presence check
instead of checking if the array is empty, only check PID and species
2018-03-18 16:22:21 -07:00
Kurt
102550174e Simplification
invalid/unknown usages were incorrectly interchangable; dex-sets were
looking at Unknown which was impossible for some cases.

only use GameVersion.Unknown as a temp placeholder for later resolution
by the user.
2018-03-11 18:07:48 -07:00
Kurt
f9002c6cc9 Add trashbyte copy for OT import on gen1/2
Closes #1849
NAME_LENGTH is 11 for both gens and the offsets don't vary between
languages, so it's a simple fetch.
2018-02-22 22:42:50 -08:00
Kurt
ee1196a57d Set playedtime accurately
closes #1847
override playtimestring if max time... better than nothing
2018-02-21 15:22:43 -08:00
Kurt
a1f2f8708a Refactoring
pass identifier on cloning pkm
remove unnecessary ref for passing Data (not modifying array reference)
const some magic numbers
2017-12-27 16:36:24 -08:00
Kurt
3445b46526 Remove unnecessary array cloning
new objects would always clone the input array; only clone on object
cloning (keep the original array reference on initial creation from
bytes)
2017-12-26 21:38:19 -08:00
Kurt
60e719a65a Misc refactoring
more usum prep
don't allocate empty array on every savefile creation (use linq All
comparison)
add percent seen/caught savefile properties for data analysis purposes
2017-10-31 09:24:54 -07:00
Kurt
69cf1eaa9c add more pkhex.core xml documentation
adds a bunch of documentation useful for those unfamiliar with the core
library
2017-10-23 23:12:58 -07:00
Kurt
44c80bd722 Exclude light ball pikachu from gen1 species setter
Thanks Dunsparce!

https://projectpokemon.org/home/forums/topic/41880-yellow-version-pikachu-editing-bug/

non-functional change but fix misuse of gameversion checks (used X/Y
instead of YelloW)
2017-10-22 17:11:48 -07:00
Kurt
228b0e84fb Simplify some dex interaction
utilize get/set flag method calls, add xml docs for the two methods
2017-10-18 21:43:42 -07:00
Kurt
bbff1e086a relax RB/Y detection when no starter chosen
value is 0 until a starter is chosen
2017-09-24 16:58:19 -07:00
Kurt
4950909d97 Add Red/Blue vs Yellow savefile detection
use the player's starter choice species value :)
2017-09-24 16:36:51 -07:00
Kurt
12187a5128 Expose gen2 RTC resetkey
#1487

also expose gen1 event flags (well, the crappy ones at least)
constants/event_constants.asm
2017-09-23 22:13:48 -07:00
Kurt
80196f75ef Refactoring
split Core.PKX into smaller classes, only StringConverter is exposed for
outside namespaces
2017-07-31 23:03:51 -07:00
Kurt
3f38b123a3 Refactoring
mostly renaming things, includes a little bit of added sugar and
splitting methods to simplify the codebase.

all methods are now PascalCase
2017-06-17 18:37:19 -07:00
Kurt
a70a4d5e3f Switch to c# 7 get/set expressions
Add gen5 battle box locked flags
no functional change otherwise, just shorter
2017-05-12 20:32:43 -07:00
Evan Dixon
52c4fbbe97 Converted PKHeX.Core to .Net Standard
Refactored and rearranged things as needed to allow the change
2017-05-11 23:34:18 -05:00
Renamed from PKHeX/Saves/SAV1.cs (Browse further)