Can't lower contest stats, but there's no cases of them giving a pkm with contest stats in a game that can't obtain contest stats -- let's just reset instead of zero for futureproofing.
Make them extension methods too; add an overload if you want to purposefully maximize them.
0 is legal in most cases except for Gen2 and BDSP!
...it's technically possible to get 0 in BDSP if you have autosave turned on and have an Egg in your party after hatching one before it, but it will hatch immediately on your next game startup, so disallow it anyway.
Closes#3318
Gen8: if held item, only give if can be legally held; if dmax crystal, only give if available.
Gen8b: if held item, only give if can be legally held
Others: unimplemented; pull requests accepted.
Keep the old localizations around for displaying gen6 format memories in their original localization.
I didn't rename the files so the git diff was clean for showing the re-localized lines.
Closes#3302
Still does the same silly ARNG as gen4:
seed = 0x6C078965 * seed + 1;
to advance on each day
Do note that it sets event flag 1711 to true, and sets the absolute value of the "Random" to Work[436]. FLAG_DAILY_RANDOM, WK_DAILY_RANDOM, assumedly for easy use with scripts.
Removes a lot of the offset-by-1 indexing, notably in the `GameStrings.GetLocationName` method which shifted everything 1. BDSP files we dumped don't replicate this off by 1, and I don't see a reason to maintain this off-by-1 for prior games since it's unnecessary quirks to maintain.
Zero indexed ftw.
Some very minor changes made between SWSH and BDSP.
In BDSP (English), the Seal Case and Seal Bag are now localized to Sticker Case and Sticker Bag respectively, but because those items are unobtainable in BDSP, keep the older strings for Gen4's sake.
StreamingAssets\AssetAssistant\FureaiHiroba\fureai\masterdata\PoffinResult.json indicates which text line is used for a given MstID
Change Taste to Smooth to match community's naming
The RAM is pretty dirty for unallocated poffins; slots that have never been filled will have junk with whatever the unallocated pointer was looking at.
An empty poffin slot is just marked as FF, ignores the stats for that slot. Not sure on the naming, but Matt had a single Level 60 poffin -> must be Mild? Thus, all the names are -1 from the textfile array...
Closes#3305
I think it was actually crashing due to the bad GameClear date record, not this extra record data, but we'll still update the head record
Fix note of ENC_SV_DATA start offset now that we know the real size of Record8b
Add actual maximums for all record entries
verify BDSP legality restrictions
Enforce nonzero TID/SID in Trainer Editor window (can use Block Data editor to set whatever without restriction, idc).
#3305
They didn't reference the TamagoWazaIgnore table until v1.1 lmao
mimic BDSP's index fetching and just grab the array of eggmoves directly to avoid the abstraction method's overhead
set evotree back to private because don't need direct access anymore
shininess unrelated to your trainer ID, lol
probably also applies to other predetermined encounters like underground and radar, but those aren't EC-seed regenerated (?)
Remove unused interface declaration
because people couldn't hacc responsibly, I might as well give them a nudge in the right direction.
Doesn't mean I won't check your "random" choices distribution.
Also removes sysflag 1294; the game has a flag reserved for a third captured species in the Soul Room after Latias and Latios but it's never set in scripts... third Lati DLC confirmed??????
These aren't referenced for the spiritomb encounter; according to the scripts, there's a hardcoded function which reads a byte[] and counts the number of nonzero entries.
The UgSaveData structure stores `byte[] TalkedNPCsID`, as described above.
Yay abstractions to hide away the quirks.
BDSP traded eggs set HT_Friendship and the CurrentHandler flag, but the HatchCounter is always the OT_Friendship value.
Trades always receive BaseFriendship, instead of a hardcoded 50. Necessary to not hardcode because it's immutable for eggs.
Clicking the hatch counter label now sets it to the legal minimum hatch counter (best), and control clicking sets it to the max (worst). Check the encounter template for the true maximum.
Big thanks to @SciresM @sora10pls @Lusamine @architdate @ReignOfComputer for testing and contributing code / test cases. Can't add co-authors from the PR menu :(
Builds will fail because azure pipelines not yet updated with net6.
Static encounters (stationary and Max Lair), gift encounters, and some general purpose flags. Can filter most of these out in PKHeX settings by ignoring `KCaptured` and `KReceived`.
* Add metadata flagging for values
Allows users to set a minimum importance for the list displayed.
Could probably make this checkboxes within the flags UI.
* Add setting to filter out gen8 block names
Allows users to filter out unwanted low-value property names.
Co-authored-by: Kurt <kaphotics@gmail.com>
* Providing pkm/sav files via command line (dragging files onto exe / associated file launched) will more intelligently source a partner sav/pkm object if not provided.
* Gen1/2 mainline save files now indicate if they are VC era or GB era (legality implications) in the program title bar.
* Fixes loading VC era save backups not being recognized as VC era (`.bak` extension hides `.dat`)
* Export BAK moved to the SAV tab, which allows Export main to be deleted and Export SAV to be used as the single-click for exporting saves. `CTRL-E` is still the hotkey.
Hope this doesn't regress for stadium tutoring moves
RB eevee with special 2-move set was being flagged (wanted 4 moves cuz the base 2 aren't the normal levelup moves)
capture references for more concise expressions
Should have been "UTC+12"
We can just inline the shifting since it'll always add 12 hours to the current UTC time, thus that's the maximum date value possible