* Rewrite tests with XUnit and .Net Core
* Add better "because" message
* Skipping test that was not ready & convert the fact to a theory
* Tweak casing
* Convert select date tests to theories
* Make the GetStringList load lock safer
Update comments / xmldoc
Add a savefile storage compressor (ie array[] with empty interstitials
-> list); return true if the compression moved anything (repopulate
views), and the count of occupied slots in the list.
Add saveblock base class; I haven't really liked how SAV6/7 do all the
logic; I'll still expose properties that will then point to a saveblock.
Cuts down clutter.
Add template Dex manipulator, with gen6/7 implementations
Speculate sequential gp/ge gameversion IDs
Now accounts for the shiny locks & associated restrictions, abusing the
recursion by setting & unsetting the required CPU Trainer's shiny value.
Repoint all test methods to use the new obj methods
Now gets count=2 tests working
yield return new SeedFrame { FrameID = ctr + (l.Seen ? 5 : 7), PID = pid
};
used to be ctr + 6, needs to alternate even-odd
all 2 lock cases pass, but didn't make lock3's pass. Something else is
still amiss :)
break out some classes for the solidified lock objects
commented out test calls = not working
will have to debug in more detail later; the first lock is always
working at least.
data sourced from
https://github.com/ijuintekka/Eligor/blob/master/Eligor/Spread.cs , not
sure if it's perfect.
can't cleanly condense deviating team appearances as double-shadow leads
can't be selectively encountered. didn't feel like modding lockfinder's
recursive algo to be smarter.
move encountertype datasource providing to core
fix rerolling EC not updating characteristic
remove some repeat logic calls
relocate geolocation name fetch to separate class, add tests to ensure
functionality, add languageID->country/region fetch method
Closes#2065 Thanks @WEERSOQUEER !
Single evo species weren't getting flagged in the evolution verification
as they early returned (species matched), just move the sanity check
before that
Closes#2040 , adds test cases:
invalid bulbasaur.wc3: hidden ability
invalid charmander.pcd: hidden ability
valid camerupt: gen3->4 unevolved mismatch
valid leafeon: pcd mismatch -> evolved now matching
should be much easier to maintain; methods are reused with less overall
nesting
bypass savefile language checks if no language set
fix gen2 static gift egg that is really a wild encounter -- egg flag was
set & not cleared -> no wild pkm, bad! Adds test case for this.
(probably isn't a better place to clear, enforces only once per
generation rather than on every yield/end of every static yield)
egg fetch returns array, need to add to the collection
force everything as readonly to prevent adds outside of the constructor
Closes#1988
Thanks @iiippppk !
Closes#1986 , was missing a check if there were any lines in the list.
Calling the method with an empty line set would have yielded an empty
set (behavior unknown). Although calling the method without lines is
unintended, should handle behavior correctly now.
Fix yielding an empty set if the first line(s) are empty.
Add test to verify parsing works for multiple lines.
Add test to verify parsing yields nothing for no lines.
Add test to verify parsing yields nothing for empty lines.
Gen7 weavile can exist in gen4 as sneasel; existing code had pruned it
from gen4. Skip pruning for this case
probably overdid the checks but whatever. works.
Thanks /u/ThrowawayReddNinja for pointing out this false flagged case
with an example!
Had relearnmoves defined but no current moves; better for generator to
spit out all moves rather than the special move (hold back)
store current moves for all link gifts
Correctly fixes#1163 (test cases added), eg wooper->quagsire would
learn yawn at 31 before evolving; the getmoves wouldn't provide yawn
(stopped at 30) with the old code; the lvl decrement was removed in the
incorrect commit, providing a legal verdict which was obtained
incorrectly (dexlevels were inaccurate)
AreEqual checking by Reference? strip out newlines and compare with
string equals instead
add testing method for generating full dex of pkm (still WIP hence
commented out attributes)
only tested for gen7 egg->pkm (not to eventual set)
pretty sure a good chunk of the egg generation logic can be pulled out
for reuse in other IEncounterable generators (IEncounterable
extensions?)
Test parsing glaceon, input must equal output
Test generating encounters for a specific version (exists only on Moon)
Test generating encounters for the same version (add handling trainer
data to permit Tutors)
fixes error in VC generations-present fetch which allowed movesets from
generations 3-6 lul
exclude negative/invalid gameversions
Two checks are performed for Gen 3 & 4:
A: Encounterability (wurmple, ball, ability)
B: RNG Compatibility (frame)
Original code only checked 'A'
Recent code ordered by 'A', but returned anything that matched 'B'. If
'B was not satisfied, an 'A' match would get deferred, allowing for an
eventual B & !A to be returned before a A & !B being returned.
yay bool logic
we want to prefer a RNGFrameMatch as well as a SlotCompatible match
original code (no RNG checks) retrieves with SlotCompatible just fine
recent adding in framematch resulted in deferring compatible if not RNG
frame, yielding !A matches before A & !B
maintain 3 queues (A & B get yielded immediately) to track A!B, !AB, and
!A!B
not necessary to check unown case anymore as it'll fall into the A!B
group. better performant to skip that check in favor of only adding for
fail.
thanks theSlayer!
Species and Nicknamed params were never used; foreign always resulted in
true for cases when it actually mattered.
Filter to the non-fullwidth characters, check the char type (latin base
vs jp/zh/ko) in order to determine if the full/half symbols should be
squished
could be faster replacing char instead of string, so change those
add two test cases for half width & full width string
sanitization/unsanitization
extract EncounterStatic match determination; in doing so fixes "lvl" by
passing byval.
Pichu encounters (2) come before the Gift level 25 pikachu, causing lvl
to be dropped to 5. When pikachu comes around, it compares 5==25 -> bad;
pulling out the method and passing byval allows it to be 25 at the start
of every new encounterstatic checked.
dynamic level -> calc level
no sweet scent -> proc available (rock smash/fish)
change frame checking in encountergenerator to save which frame it was
found on (unused but possibly later can capture this for output)
move MarkEncounterTypeData back above the area size reduction so that
the mark-by-locationID special handling will work
prevent slottype from becoming overwritten if already defined by special
case handling
add examples provided to automated test cases
closes#1648
Refactors the Memecrypto API to improve generalized usage.
Adds unit tests that verify memecrypto works, so that future changes
don't potentially break the code.
species added requires the 'latest personal table' reference to be
USUM's; the other referencs for .SM are fine as there's no possibility
to have a species ID high enough for it to matter.
add docs, move some data fetching to more appropriate class
remove old XP memecrypto support handling, was previously removed due to
net standard/core split
refactor memecrypto to handle multiple save sizes (USUM won't be the
same size save file); placeholder -1 for USUM size
refer to stackexchange links, makes XDRNG PID/IV search so quick (2^3
instead of 2^8 or 2^16; as fast as a gen3 shiny pokemon (2^13=8192 times
as fast as last release)
throw in some auto-inlining to eliminate some overhead in repetitive
search calls
Only usable for searching Method 4 IV spreads -> seeds;
1,3's search uses the same approach as the 1,2 search
I took the 1,2 search derivation to iterate for the next step, which
allows us to not know anything about the middle rand bits.
optimize a little bit more, move the pre-loop add to the initialization
stage; moving to the precomputed section pays off after 256 calls to the
method
fixes 10ANIV pikachu having Thunderbolt twice
un-duplicates CHANNEL event data
adds seed->PIDIV generator template for M1/2/4, CXD, Channel, and BACD
improve pkm converter to update nickname of hatched eggs. isn't perfect
(farfetch'd) but works better than before
Add special ribbon detection (for wc3),
speed up seeds from IVs calc (flip top bit of seed to get the result for
other iteration)
Add a bunch of gen3 event data
Detect channel, only detect Channel PIDIV for RS origin (only really
care about method1/2/4 being used when it shouldn't)
Channel does this weird thing called not setting the met level.
Refactor set suggested met location to a method that can suppress
popups.
I recently learned about targetting multiple frameworks in .Net Standard libraries. The main benefit here si taht PKHeX.WinForms and PKHeX.Tests no longer need to carry around the .Net Core DLLs. While it's now an option, I encourage PKHeX.Core to avoid framework-specific compiler directives.
pkm editor, sav editor, menus, and a manager to glue the storage slots
together
decouples the pkm/sav editors from a static savefile reference.
improves dragdrop/click view/set/delete indication, hides unavailable
contextmenuitems, and fixes a few incorrect references. Box Subviewer
slots now have all the indication/events that the main save editor slots
have.
pls report behavior bugs 👍
The modified form-finding routine generates the PID gen halves in the
reverse order like events. Due to possible collisions with event PIDIVs,
only run it for unown (since that's all it applies to); the analyzing of
PIDIVs to find incorrect usages isn't really feasible (collision) for
this one.
#1103
matches for berry fix zigzagoon
use correct type comparison for checking if national ribbon is to be set
or not; change XDC to CXD for parity with other references
delete incorrect legality message entry (used a few lines up for super
training flags), is unused.
fix for transferred 8<=xor<16 PIDs in which case the encryption constant
is used (as it is the unmodified PID)
Move all sanitization operations from PK* and SAV* to PKX; add general
method for fetching a generation specific string
Changes the Text subform editor to show trash bytes when appropriate.
Special characters to be shown can be easily inserted in the future.
Prefer 32-bit is enabled, so there will be no functional difference from before, except that any of the assemblies can be referenced by a 64-bit process.
Fix possible hang in pk6/pk7 if country/region is unset (continues
loop).
PersonalInfo references are not to be used when calculating stats (use
the savefile table instead)