Commit graph

2115 commits

Author SHA1 Message Date
Matt
cbf6c1e1b6
Unban Star Sweet and Ribbon Sweet (#2670)
Item drops from the new Milcery distribution Raids.
2020-01-30 19:30:17 -08:00
Kurt
774dec5123 Add milcery distro nests 2020-01-30 16:44:51 -08:00
Archit Date
c8a16a1f71
fix yamask/runerigus form handling (#2669)
fixes #2668
2020-01-29 16:11:56 -08:00
Kurt
dd07126d83 Relocate level suggestions to EncounterSuggestion 2020-01-28 16:21:38 -08:00
Kurt
3111a8dc62 Cast the array a little safer
bad hacks with invalid future gen evolutions yield no evolution data, which results in empty arrays.
2020-01-26 23:58:14 -08:00
Kurt
f0fb6a2371 Play with living dex gen a little
generate altforms too, store in a list
2020-01-25 22:54:25 -08:00
Kurt
c301ce88ab Update Random to be a bit more thread safe
Random isn't thread safe; users of PKHeX.Core.dll might run multithreaded operations (see PKSM + ALM), so we need to have a thread-specific RNG available.

Thread Local get; to improve performance, save the random object locally whenever it is used more than once in the method.

https://docs.microsoft.com/en-us/dotnet/api/system.threading.threadlocal-1?redirectedfrom=MSDN&view=netframework-4.8
https://stackoverflow.com/questions/18333885/threadstatic-v-s-threadlocalt-is-generic-better-than-attribute/18337158#18337158
2020-01-25 21:49:52 -08:00
Kurt
9b062bc770 Remove unused legality check strings
Fix spanish translation messages not being loaded
2020-01-25 17:37:47 -08:00
Kurt
ffa70e7626 Move files
no functional change, just putting stuff in a more appropriate folder
2020-01-25 17:22:20 -08:00
Kurt
3813d5dba9 Readonly init EvolutionMethod
Add xmldoc
2020-01-25 15:42:17 -08:00
Kurt
9c28ffacc0 Simplify N's pkm encounter handling
Readonly PID; sparkle is True always, so it's a const instead of a mutable property.
2020-01-25 12:31:56 -08:00
Kurt
7a7358d0e5 Flag g4 bad met locations for hatched eggs
Traded eggs in gen4 can have from any game (since version isn't updated on hatch).
Use the hashsets, and remove the incorrect array. The incorrect array allowed stuff like Pokéwalker to be a "valid met location", hah.
2020-01-25 12:19:59 -08:00
Kurt
c730dfa1ba Remove empty ushort[1], improve item combo fetch
held item list now allocates less (concat arrays instead of ienumerables)
item list already prunes out of range items, so simplify data source fetch
simplify item list prune (return as list, so we can call RemoveAll instead of Where.ToList)
2020-01-24 23:29:45 -08:00
Kurt
94eee74e5c Add another rhydon lvl 46 loc
Ty @slp32 for reporting in #2633, && anubis (discord) for finding the actual level without being asked /s
2020-01-24 17:56:42 -08:00
Kurt
ecfcbbc4cb Verify full raid result with known seed 2020-01-23 00:11:07 -08:00
Kurt
d9c162b5cf Fix criteria comparison
Closes #2651
2020-01-21 09:05:39 -08:00
Kurt
5be9c6bcc8 Remove unnecessary null handling
objects are no longer null
2020-01-20 23:32:05 -08:00
Kurt
5bb51b07ac Check Footprint Ribbon for gen8
gen7 used same as gen6, we just need to restrict gen!=8
add placeholder LGPE origin check; that'll likely throw a wrench into things when HOME happens (next month?).
2020-01-20 23:09:28 -08:00
Egzon
1a3d8b1fab Fix Seedot and Nuzleaf swarm moves (#2648) 2020-01-20 14:31:59 -08:00
Kurt
d788af45cd Unban HA mimikyu
Only one encounter for mimikyu = A4 }, // Mimikyu
Update manual banlist to permit it
Closes #2646
2020-01-19 19:02:53 -08:00
Kurt
63ea57436f Make the template IV/contest stat array readonly
See prior commits
no longer need to clone subarrays, they're shared immutable
2020-01-18 19:11:29 -08:00
Kurt
843330a375 Remove unnecessary null checks
this is a null free project /s
dont provide null, else u deserve to get an exception
2020-01-18 16:57:25 -08:00
Kurt
8312c52cc1 Make Move[] readonly list
contract: don't modify the template movesets
mystery gift now exposes IRelearn, remove unnecessary type checks
2020-01-18 16:46:38 -08:00
Kurt
0cd9c47953 Make Relearn array for encounters readonly
No change em
2020-01-18 16:31:24 -08:00
Kurt
bd9ec72d98 Misc tweaks
Add more direct legality analysis constructors
evo count is >= 1
fix invalid test message
disallow gen2 moves if transferred from gen1
use ^1 instead of len-1 for netcore test project
2020-01-16 23:22:54 -08:00
Kurt
c739af4767 Extract item restrictions to separate class
Move similar classes to folder
2020-01-16 19:27:29 -08:00
Kurt
baf46f9a3a cache form/species/format on first get
very minor perf consideration, since those values are immutable (except for cross thread shenanigans)
2020-01-16 19:23:29 -08:00
Kurt
e97970023a Add swsh battle-only forms 2020-01-16 19:03:47 -08:00
Egzon Qukovci Jusufi
deece433a5 Add SWSH Legends to the Tables (#2637) 2020-01-15 20:49:19 -08:00
Kurt
aecc08f65c Remove duplicate electrode encounter
3IV requirement isn't required for wild slots that are also at the same level-location
Closes #2636

ty @dstevenson12 !
2020-01-14 18:39:25 -08:00
Kurt
f4162d2dce Add another corviknight location
ty anubis
Closes #2633
2020-01-13 22:36:00 -08:00
Kurt
11978dab4f Make pgt ranger manaphy IsEgg true 2020-01-12 23:00:32 -08:00
Kurt
81f280f4d1 Update EncounterSuggestion.cs
weaken legality check, we only check moves
2020-01-12 20:49:33 -08:00
Kurt
5a20dc707d Rewrite encounter suggestions
Don't clone legality templates, and keep suggested information minimal -- this isn't automod
2020-01-12 19:40:36 -08:00
Kurt
eaeebea923 Remove another method shortcut
EncounterSuggestion needs a facelift anyway
2020-01-12 17:00:03 -08:00
Kurt
3b5c7062ac Minor perf improvement
pass in, don't constantly fetch
helps generated IL code be slightly more efficient
2020-01-12 16:49:12 -08:00
Kurt
a8c28369b6 Add Yamask-1 max hp calc for formArg compare
Closes #2632 ty @CanoeHope
2020-01-12 16:22:56 -08:00
Kurt
d5948b9dbe Add relearn moves to Except comparison
Burn Up ho-oh is dumb
2020-01-12 16:09:35 -08:00
Kurt
48fd36a9a2 Handle g4 shedinja learn case too
change 291/292 to Shedinja/Ninjask for easy enum reference check
2020-01-12 14:34:29 -08:00
Kurt
61ecb52347 Remove unnecessary allocation 2020-01-12 12:06:33 -08:00
Kurt
82eaf39d45 Remove method alias for init mysterygift db 2020-01-12 11:41:23 -08:00
Kurt
9ed441885a Remove manual personal info fix
Change FDDC from 47 -> 41
SM is 40, as the tutor isn't possible in that game.
2020-01-12 11:39:43 -08:00
Kurt
f6fb54aecc Move shedinja/egg evo chain short circuit
Some routes use the evolutiontree directly instead of this method (with the same name); should probably consolidate but meh

This causes Shedinja to yield the correct evolution chain when called directly (because nothing naturally evolves to shedinja; it's created out of thin air as a clone)

Take the egg short circuit with it to keep things simple
2020-01-11 21:43:58 -08:00
Kurt
0eca1bbd1c g3 shedinja api usage fix
see comments in src for justification
need ninjask moves if gen3; dl.Count is guaranteed to be >= 1
2020-01-11 21:41:24 -08:00
Kurt
d3f6d5935f Add form argument legality checks
Closes #2611 (Alcremie)
Closes #2604 (Runerigus)
2020-01-10 16:33:40 -08:00
Kurt
fdd321dd8c Make memory 6 fishy if textvar present
Closes #2621
2020-01-10 16:08:34 -08:00
Kurt
be92d4436e Rearrange argument check order
USUM evo table has Meowstic with Arg=-1, which early aborted.
Closes #2627
2020-01-10 16:02:22 -08:00
Kurt
718d00f970 Ban ha slowpoke-1 2020-01-09 23:50:15 -08:00
Kurt
51d2fc9d93 Update with slowpoke-1/new raid data
TransferVerifier: Revise transfer check to allow slowpoke-1 (slowpoke-0 is flagged via next check)
2020-01-09 18:44:45 -08:00
Kurt
0dd4d1fe7a Remove unnecessary casts 2020-01-06 17:50:18 -08:00
Kurt
3d581283c2 Minor clean
move Text.cs manual Courier new() to the designer, have it dispose when form is disposed. Set it as the numericupdown's font and just reuse that :)
2020-01-05 18:46:30 -08:00
Kurt
7caeebd772 Add formcount for scatterbug/spewpa
USUM had 20 for both, but XY/AO/SM had only 1 (vivillon had 20); make
them consistent so that our generated evolution paths behave correctly

Add meowstic specific evolution form modifier... so silly
simpler to have it inlined with the sSpecies, for jit optimization

could probably do this with silvally but meh, things work fine now

Closes #2603
2020-01-04 22:31:46 -08:00
Kurt
68e6644d40 Split off shared nest class, deduplicate logic
use generics to have shared logic in one spot
Handle downleveled distribution/crystal(soon?) data
2020-01-04 11:44:16 -08:00
Kurt
308e6fa291 Add temp workaround for version encounter fetch
PKX.Generation is 8, which returns SWSH evo tree; evo tree doesn't have
non-galar-native species data, so stuff like Ambipom don't get reversed
properly.

use math.max for tree fetch when appropriate:
- egg generator: pre-evolutions like pichu should be allowed if pk1
- don't fetch format twice, just do math.max
2020-01-04 11:14:25 -08:00
Kurt
15779513f5 Add stubs for raid correlation verifiers/generators
Not going to implement this within the base repo as z3 is too large of a
dependency and is platform specific.

If anyone wants to implement as a plugin project, just inject your new
methods via the setters on the static func/action at the top of the 3
classes.

Since z3's searches aren't instant, I'd recommend caching recent results
in a dictionary, as re-parses are common. Something like the Wordfilter
is what you'd be aiming for :)

Closes #2617
2020-01-03 20:03:04 -08:00
Kurt
0788780404 Add bewear motostoke crossover location
Closes #2619
2020-01-03 19:14:03 -08:00
Kurt
fe8e5e3fd9 Add more string search methods
exposes some common string search operations that can be useful for
parsing user entered data
2020-01-02 12:06:58 -08:00
Kurt
b55dc37e05 Extend some logic
make summary more accessible
2020-01-02 10:55:37 -08:00
Kurt
166f8d82e5 Misc clean
Refactor out some logic, make "en" literals reference one spot (where
appropriate)
2020-01-01 19:07:21 -08:00
Kurt
7e490b8dcc Add lanturn/bronzong alt locations
Closes #2613
2019-12-31 21:47:28 -08:00
Kurt
14eae5f62d Add magikarp distribution data 2019-12-30 22:32:12 -08:00
Kurt
3b2b86950f Ignore symbols (apostrophe) for string matching
Farfetch'd vs Farfetch’d
2019-12-30 15:39:13 -08:00
Kurt
84c5f6e914 Add another met location for gastro-1
Closes #2612
2019-12-30 15:11:54 -08:00
Kurt
9864f23427 Handle Bridge Field->Stony Wilderness berry tree
Closes #2610
2019-12-29 12:48:34 -08:00
Kurt
d6471e2b3b Add more pelipper & dusclops strong locs
ty anubis
2019-12-29 11:28:29 -08:00
Kurt
ce62d63c5a Fix eggmove fetch for move check
Closes #2609
2019-12-29 10:17:07 -08:00
Kurt
bfd9bf6b53 Simplify formchange calls
Don't use the dex chain for certain checks, it's unnecessary.
2019-12-28 19:00:01 -08:00
Kurt
8493471793 Add alcremie form change case 2019-12-28 18:59:00 -08:00
Kurt
3280adcb9f Add another location for Golurk & Galvantula
Closes #2606
2019-12-28 18:03:20 -08:00
Kurt
b294eba181 Fix combee gender check
silly convoluted checks
#2603
2019-12-27 19:17:08 -08:00
Kurt
940cdccb6b Restrict downleveled to lvl % 5 == 0 2019-12-27 00:17:59 -08:00
Kurt
ceae77c677 Add load-line overlap location for Den 27/42
The nest is situated right next to the load line, and may be accessed
from either map (across the load line), resulting in a Dusty Bowl
Pumpkaboo-0.

Many thanks to Anubis on Discord for figuring this (very silly) thing
out !
2019-12-26 18:59:02 -08:00
Kurt
5cb3556eee Add Move PP verification
Eggs already had it, adding now for regular pkm
Closes #2602
2019-12-26 14:28:01 -08:00
Kurt
6c7065fb7b Fix bool compare
oops
https://github.com/kwsch/PKHeX/issues/2600#issuecomment-569134146
ty @slp32 !
2019-12-26 13:12:10 -08:00
Kurt
bb7c94dadb Add seismitoad location
https://github.com/kwsch/PKHeX/issues/2570#issuecomment-568235086
2019-12-26 13:04:44 -08:00
Kurt
baf0f52f06 Handle downleveled raids
Closes #2573
- self-hosted raids can be downleveled too (see cufant), probably only
by 1 rank
- min-rank check now checks for downleveled cases

- Add extra gyarados/ferrothorn locations
2019-12-26 12:59:16 -08:00
Kurt
4740fab5ec Have separate encounter yielder for gen8
the "Strong" static encounters can be near-matches with wild encounter
slots; example is a evolved Cutiefly->Ribombee with Quiver Dance.

Remove unnecessary IsLink/FriendSafari check for this gen8 method

https://github.com/kwsch/PKHeX/issues/2573#issuecomment-569126371
2019-12-26 12:32:48 -08:00
Kurt
420307d4bf Make non-exportable saves (fake) act as VC saves
https://github.com/kwsch/PKHeX/issues/2600#issuecomment-569125853
2019-12-26 12:21:35 -08:00
Kurt
0c7d347a29 Add Delibird distribution data, split files
ROM nest data definitions are already pretty hefty and won't be revised;
split out the future content
2019-12-25 14:26:49 -08:00
Kurt
e6dcf64abe Disallow Spiky Ear Pichu eggs
sneaky gen4 bad hacks are bad
2019-12-24 13:21:56 -08:00
Kurt
ea5ca7b2d2 Add Ingredients to swsh held item list
Closes #2597
2019-12-22 12:16:06 -08:00
Kurt
3b2ebbb84f Add PID check for gen4/5 Combee->Vespiquen evo
Closes #2593
2019-12-21 16:52:56 -08:00
Kurt
7edfe4543f Flag eggs with HT string
Closes #2586
Modify PKM Info already clears it, but if disabled, will be flagged.
2019-12-21 16:01:51 -08:00
Kurt
8309060298 Add more egg verification for statnature/techrecord 2019-12-21 14:51:52 -08:00
Kurt
7889a0abe6 Simplify form egg move handling
Closes #2588
2019-12-21 13:37:20 -08:00
Kurt
d7bc68d7a5 Add HT case for capture memory check
#2570
https://github.com/kwsch/PKHeX/issues/2570#issuecomment-568149050
2019-12-20 19:47:40 -08:00
NotTsunami
a05b38ab39 Legality: Add Nature and Gender to Gen 8 Trades (#2591)
Closes #2589 
https://bulbapedia.bulbagarden.net/wiki/In-game_trade#Sword_and_Shield
2019-12-20 10:48:46 -08:00
Kurt
506e64186a Rearrange & re-do "CanHaveMemory" value check
Closes #2581
2019-12-11 19:37:57 -08:00
Kurt
108233b45f Add glalie/skuntank locations
#2570
2019-12-10 19:54:26 -08:00
Kurt
fcdd7019d3 Add missing shadow yanma location ID
Closes #2577 thanks @HoppyShnell ! -- this looks like the final met
location ID?!

Not sure if Murkrow (locked) is missing one; moved duplicate-location
Heracross and made it use the same locks.
2019-12-10 19:22:46 -08:00
Kurt
9a87647409 Add more static encounter locations
Some of these are probably crossovers
#2570
2019-12-09 19:28:57 -08:00
Kurt
c85c8ded5c Fix crossover location compare, add formchange
Rotom can change forms, first time it's available in the wild. Fun.
Fix crossover location comparison (was always returning false).
2019-12-09 19:28:28 -08:00
Kurt
281c1ae744 Skip SWSH untraded link trade eggs if trade-memory
just read the comments & code, this one is an annoying oversight
untraded pkm /should/ never have HT memory data, but sometimes it do be
like that

Closes #2571
2019-12-09 16:23:29 -08:00
Kurt
aa2241ba66 Fix unchangeable OT friendship to compare correctly
Closes #2572 ty @sora10pls for confirming that evo chains are necessary
for VC transfer
2019-12-09 15:50:03 -08:00
Kurt
0fa25b4c8c Fix VC transfer evo chain population
Move EncounterOriginal to Legal info; needed in order to pass the
correct encounter to the EvoChain fetch.

The EncounterOriginal 'hack' might be unnecessary with the current state
of the legality checker... maybe can see if it can be removed later.
2019-12-09 15:48:54 -08:00
Matt
5395cf6bab Update UnreleasedHeldItems_8 (#2575) 2019-12-09 12:35:50 -08:00
Kurt
8acb336d51 Use enum for species comparisons
slightly easier to read with named values
2019-12-08 17:39:19 -08:00
Kurt
475dc02101 Add edge case handling for indeedee shared egg moves
#2416
2019-12-08 12:08:21 -08:00
Kurt
c6ef2a845d Fix ribbon compare
oops
2019-12-07 23:39:32 -08:00
Kurt
4611146807 Update memory verifier
Adds handling for SW/SH quirks
Closes #2545
2019-12-07 23:36:39 -08:00
Kurt
19b1564eb2 Split history and memory verifiers
Rewrite a bunch of the history verification stuff
Fix a few test cases with incorrect OT Friendship (transferred), and
missing GeoCountry

Need to rewrite memory verification next
(All test cases currently pass)
#2545
2019-12-07 18:12:31 -08:00
Kurt
34452c2818 Add gen8 ribbon verification 2019-12-07 11:58:56 -08:00
Kurt
aa3d63e982 Add Mr. Rime to splitbreed table
Closes #2567
2019-12-07 00:04:46 -08:00
Kurt
861d7b6014 Remove unnecessary parameters for species fetch
#2567
2019-12-07 00:00:49 -08:00
Kurt
2b1aee7c38 Gen8: Update rules for having BestFriends ribbon
Closes #2562
ty @iiippppk
2019-12-06 20:22:23 -08:00
Kurt
d08e3a3f81 Fix form change evolution linking
GetDestinationForm for gen7+ is fine
gen7 and gen8 use the "form" argument as the destination form; -1 means
don't change
espurr-F just gets forced to 1 in gen7 since it's -1

Closes #2564 ty @iiippppk
2019-12-06 19:31:18 -08:00
Kurt
d24a09f7c9 Make level min/max virtual for nest
Closes #2566
be sure to set the correct flawless IV count & dynamax level so that the
encounter matches
2019-12-06 19:17:26 -08:00
Kurt
862a446eb3 Fix form sanitization for de-evolution
Better to handle things this way, we know for sure the form it HAS to
originate as.
Closes #2565
ty @iiippppk !
2019-12-06 19:00:41 -08:00
Kurt
be38a60267 Fix handling for get evolutions method
only used for Zukan7b, but add in handling so that it works for <=gen6
games, and supports form alterations too!

update style to match GetPreEvolutions

could probably update this to yield tuples (species, form) but LGPE/SWSH
only needs species. If there's the need for tuples later, should be ez
tweak.
2019-12-06 18:16:11 -08:00
Kurt
314d8f6b58 Update form destination handling
espurr-F evolves to form-1 from form0, even tho the form arg is -1 (gen7
consideration)
gen8 has 0/1 for the two evolutions, dictating the destination form
2019-12-06 17:36:36 -08:00
Kurt
f7620908df dummy out empty evo species 2019-12-06 17:21:38 -08:00
Kurt
eac3804c7b Clean up dexlevel/evocriteria constructor usage
DexLevel was the initial abstraction, which was expanded/reused for
evolution details

I should probably merge the two classes since everything is passed as
EvoCriteria
The encounter generators do some silly form fuzzy match which can now be
more accurately checked since I've moved Form to DexLevel... maybe a
future commit can clean that up.

encounterarea2 was reusing this class, just use a throwaway readonly
struct as our temp value storage
2019-12-05 23:04:24 -08:00
Kurt
b49c5a5a8a Rewrite evolution lineage generating
- Use tail recursion and a lookup table (species | form) for reversing
- generate the reversal lookup by extrapolating all species-form
destination values (EvolutionLink)
All tests pass, and no special handling for forms is required. Kinda
suspicious that it works this simply...

Redo evolution banning (no wormhole for non-Alolan evolutions in SM), in
a style that we can ban the Gigantamax event evolutions
(pika/meowth/eevee). Their evolutions can't be resulted from a pre-evo,
because the in-game routine early aborts if the gigantamax flag is set
for those species.

Update gen4 personal tables (formCount was 0, needs to be a minimum of 1
by default)

Closes #2537
2019-12-05 22:32:47 -08:00
Kurt
786d9c8f18 Handle shedinja encounter balls
nincada -> spawn shedinja = pokeball (wild encounter rules if gen3)
shedinja encounter = wild encounter rules
2019-12-05 16:40:14 -08:00
Kurt
b2fc99e50a Update nest dist/crystal location get/check 2019-12-04 19:04:36 -08:00
Kurt
e333f9b441 Add orbeetle 65 loc
thanks @sora10pls
2019-12-03 19:59:10 -08:00
Kurt
71318c9bd5 Add clarification/notes 2019-12-03 19:54:06 -08:00
Kurt
ab7cf3252e Add snorlax raid dist data 2019-12-03 18:25:06 -08:00
Kurt
d3f7e7bf07 Minor simplifications
format >= 6 is always true (early return in entry)
don't double-flag/check memory presence in OTs from gen5 and below (hist
and OT verifier)

rename method; I'll probably rework the flow of things for gen6
verification and gen8 verification since the rules are slightly
different
2019-12-02 16:36:53 -08:00
Kurt
a844fb5249 Add strong dubwool location
https://projectpokemon.org/home/forums/topic/55654-new-pokemon-to-fix-on-pkhex/?tab=comments#comment-251010
2019-12-01 00:02:02 -08:00
Matt
7b7a161ac9 Minor fixes (#2547)
Fix Sinistea/Polteageist Form names (as per Strategy Guide)
Add Eternamax menu sprite
2019-11-30 13:19:22 -08:00
Kurt
f3ecff272c Update HA8 banlist
Closes #2544
Closes #2543
2019-11-29 22:33:11 -08:00
Kurt
2ee6fbb7e9 Only flag bred stuff for no-breed
Closes #2542
2019-11-29 18:54:07 -08:00
Matt
bc9be36123 Add more Gen 8 static encounter locations (#2540)
Also add West Sea Shellos/Gastrodon to transfer form banlist
2019-11-29 10:03:35 -08:00
Matt
faf936bceb Update Gen 8 transfer banlist (#2536)
Alolan Forms can't be obtained yet, same with Hoenn Zigzagoon/Linoone and Unova Stunfisk.
2019-11-28 18:42:22 -08:00
Kurt
f25b36a306 Minor tweaks
Remove unused stuff
add some comments/xmldoc
Move Trainer1 to classes that use it
2019-11-28 14:00:55 -08:00
Kurt
ea2f7f338b Add weather indication to detailed parse output 2019-11-28 12:56:26 -08:00
Kurt
2c0b85ef21 Add form banlist for g8
Weezing-0 has no de-evolution path (nothing evolves to it)
Just ban these forms existence in SW/SH
2019-11-28 12:09:55 -08:00
Kurt
f0cf28fbad Flag bred transfer mons
#2416
2019-11-28 11:51:23 -08:00
Kurt
e8bdc34a18 Tweak gift generator
Yield ranger manaphy gift as possible (encmoveset generator)
Move ranger manaphy equals check to PGT
2019-11-28 10:42:24 -08:00
Archit Date
897b97ceed comment typo fix (#2535)
lul
2019-11-28 10:35:18 -08:00
Kurt
7a51e48747 Add wc8 star/square pid types 2019-11-28 09:46:48 -08:00
Kurt
f5307c142b Use format sensitive move knowable check
Closes #2534
2019-11-27 23:07:41 -08:00
Kurt
5a1bffb2ba Split wild encounters for crossover & weather
Certain Mark values (ribbon) are only obtainable if the encounter was
obtained in some weather (I really hope there's no crossover cases for
this), and non-symbol encounters can't wander to another zone.

I wonder if you can wander from one zone with one exclusive weather, to
another zone, and get an 'unobtainable' mark (with the new zone's
weather) on the crossover mon's weather. yikes lmao
2019-11-27 22:46:14 -08:00
Kurt
a0ee7a3e51 Add route 2 lapras location
ty Waves (discord)
https://www.serebii.net/pokearth/galar/route2.shtml#xy-lake
2019-11-27 19:44:14 -08:00
Kurt
5761f03f94 Add OT memory details for gen6 ingame trades 2019-11-27 19:30:28 -08:00
Kurt
907f036956 Disregard OT memory values on gen7 origin 2019-11-27 16:01:12 -08:00
Kurt
c4951f1650 Add strong piloswine location
ty wowjinxy
2019-11-27 11:34:20 -08:00
Kurt
4cd358833a Add corvisquire static enc location
https://projectpokemon.org/home/forums/topic/55611-corvisquire-route-3/
thanks ThePunish3D!
2019-11-26 18:20:52 -08:00
Kurt
b95ab53e92 Finalize unreleased item banlist 2019-11-26 17:16:57 -08:00
Kurt
5b932c961f Merge branch 'master' of https://github.com/kwsch/PKHeX 2019-11-26 16:58:44 -08:00
Kurt
08e293dadc Add SimpleTrainerInfo constructor
zeroes out console region data if not present in game
2019-11-26 16:55:28 -08:00
Chris
f23874b1ae
Safari/Sports Ball is also not released 2019-11-27 01:55:15 +01:00
Kurt
4182b22686
Update Unreleased Items(SwSh) (#2529)
https://www.serebii.net/swordshield/items.shtml

only Pixie Plate & Normal Gem are in the Game yet.
2019-11-26 16:13:30 -08:00
Kurt
5883acd5b9 Fix florges/floette evo tree
No personal stats for those evos different from main species
2019-11-26 16:12:35 -08:00
Chris
ba43631d40
Update Unreleased Items(SwSh)
https://www.serebii.net/swordshield/items.shtml

only Pixie Plate & Normal Gem are in the Game yet.
2019-11-27 01:08:31 +01:00
Kurt
9cb56be3dd Add bronzong/galvantula strong loc
previous Bronzong location is likely a crossover case

ty wowjinxy
2019-11-26 11:39:17 -08:00
Kurt
15ef6555a8 Add WC8 memory & fix fallthrough
ty @sora10pls
2019-11-26 11:22:01 -08:00
Kurt
ef425af835 Add memory / console region checks for pb7/pk8
yeah your initial hacks were hacks

It appears there's a bug (in the game) for link trade memories --
applied to the OT memory instead of HT memory?? Fun!
2019-11-26 11:01:09 -08:00
Kurt
7960f2d748 Don't set console region data for pb7/pk8+ 2019-11-26 10:46:32 -08:00
Kurt
445fdee2ba Add shared memory interface (encounter) 2019-11-26 10:46:16 -08:00
Kurt
0f96b3c4d5 Add Species specific arg memories 2019-11-26 10:44:36 -08:00
Kurt
e8f5ac8a00 Minor clean 2019-11-25 22:51:07 -08:00
Kurt
7a10311207 Unban scrafty/scraggy HA
new EncounterStatic8N(Nest87,3,4,4) { Species = 560, Ability = A4 }, //
Scrafty
2019-11-25 20:31:42 -08:00
Kurt
c416fc5fa1 Update handling for invalid genNumber
all edge case movepool stuff is IGeneration; we're fine just using
IGeneration.Generation
2019-11-25 18:33:38 -08:00
Kurt
5dde0f5c43 Merge Error flag into Parsed
Simplify some logic with ??=
2019-11-25 18:32:50 -08:00
Kurt
c5593470df Add 2 more static enc locations, swap yield order
Private report with 3 specimens, 2 undocumented met locations
The other was a Gigantamax which matched another static encounter,
resulting in a partial match being accepted (the real match came after,
but was never iterated to).

Rather than adding deferrals for Enc8, do nest stuff first since it's
the most restrictive

In the past we didn't really have duplicate static encounters with
slightly different permissions.

Thanks @ReignOfComputer & {reporting user}!
2019-11-25 17:57:25 -08:00
Kurt
b37a0c5bfe Add downleveled regular raid movepool verification
#2416
Not having enough badges pulls the level of the captured mon down

need more info if the other raid types behave similarly
2019-11-25 08:52:03 -08:00
Kurt
5dec94d456 Handle banned form eggs with more flexibility
Closes #2519
better to not generate the encounter as opposed to flagging it after
generation
2019-11-25 00:16:16 -08:00
Kurt
6ca8571759 Add stomp min level for Steenee
Closes #2520
2019-11-24 23:50:10 -08:00
Kurt
b588af8300 Ban meowstic-1 hidden ability
Closes #2521
2019-11-24 23:14:42 -08:00
Kurt
0dcd9b744a Include swsh held items to valid items list
Closes #2518
2019-11-24 22:34:51 -08:00
Kurt
c446ff5b51 Fix non-galar egg moves passing
Closes #2516
2019-11-24 18:18:26 -08:00
Kurt
e1e7bf321b Add South Lake Miloch for den 42
#2416
2019-11-24 11:07:31 -08:00
Kurt
aeb3ee6cec Fix shedinja evo chain logic
#2416
2019-11-24 09:49:54 -08:00
Kurt
64d94903ff Change fixed ability
0=abil1
1=abil2
2=abil4
3=abil1/2
4=any

probably same as WC8 etc

doesn't have any impact as there's other encounters that allow Hidden
2019-11-24 06:26:33 -08:00
Kurt
113d16fa5d Fix darumaka->darmanitan blizzard move
#2416

Looks like the only issues left are:
Shedinja
Crossover/Bleed locations
Static Encounter locations
2019-11-23 22:48:02 -08:00
Kurt
96f6db0e38 Add recognition for distribution raids
Closes #2457
2019-11-23 22:23:43 -08:00
Kurt
52cd8ae855 Revise HA banlist
https://www.smogon.com/forums/threads/sword-shield-battle-mechanics-research.3655528/post-8291236
2019-11-23 20:50:56 -08:00
Kurt
09d1d0e799 Add darumaka to galar origin
lol oops
Closes #2508 thanks @iiippppk !
2019-11-23 19:45:18 -08:00
Kurt
5df6565597 Add fast ball
Closes #2507
2019-11-23 19:12:53 -08:00
Kurt
cccf2a1939 Fix flawless IV count check
#2506 trapinch
2019-11-23 14:46:09 -08:00
Archit Date
f96eafa682 grab correct evo stage 1 from evocriteria list (#2503)
EncounterMovesetGenerator was using the de-evolution order in the passed evocriteria list
2019-11-23 09:01:09 -08:00
Kurt
e70a2f40b8 Add den crossover via online share
fix ability deferral for non-HA (eg. A4 mr rime encounter)
2019-11-23 08:27:50 -08:00
Kurt
b29fc5216e Add shared moveset transfer
Closes #2501 for now
2019-11-23 07:27:06 -08:00
Kurt
c27b1d0bb8 Revise hidden ability banlist
Might need to remove entries once the Distribution raid data is added.
2019-11-23 07:12:50 -08:00
Chris
03ee264d0c Add Vanilluxe Multiple Encounters (#2499)
* Add Vanilluxe Multiple Encounters

Vanilluxe spawns also on any Lake if its snowing
2019-11-22 21:32:39 -08:00
Kurt
9e4c408ac7 Fix galar form egg move fetch
Closes #2500
2019-11-22 21:32:05 -08:00
Kurt
26b21d8603 Rewrite reverse evo lineage rectifier
Closes #2479
Fixes Silvally in swsh not having evo reversal content for each form
2019-11-22 21:04:34 -08:00
Kurt
d25f388bf5 Fix dexnav relearn checks
Closes #2491
Thanks @NinFanBoyFTW !
2019-11-22 19:59:40 -08:00
Chris
97f156364d Update Multiple Encounters for Lakes (#2498)
happens also for:

Drifloon, Wingull, Goldeen, Frillish, Magikarp

but theese aren't listed, feel free to add new encounters.
2019-11-22 18:26:47 -08:00
Chris
e90d2fbc29 Also Seaking have multiple Locations (#2495)
^
2019-11-22 08:05:46 -08:00
Chris
4c9815c17e Add Multiple Gyarados Spawns (#2493)
Gyarados Spawns in Area 1:
North/East/South/West Lake Miloch, 

Area 2:
the Lake of Outrage (in a Wild Area)
2019-11-22 08:04:17 -08:00
Chris
8bdc110e2b Added Multiple Lapras Spawns (#2492)
Lapras Spawns in Area 1:
North/East/South/West Lake Miloch, 

Area 2:
the Lake of Outrage (in a Wild Area)
2019-11-22 08:03:16 -08:00
Kurt
4b3d85d5e6 Add multi-location strong encounter handling
#2484
OH BOY REUSED INDEXES
smart to save space, but a small pain for legality

feels pretty bad breaking up abstractions for every minor difference in
verification...
2019-11-21 21:44:41 -08:00
Kurt
5235c9b252 Revert "Add lapras encounter location?"
This reverts commit e4e516d1c2.
2019-11-21 21:14:45 -08:00
Kurt
e4e516d1c2 Add lapras encounter location?
#2484
The other lapras encounter was found by @sora10pls and was lv56; we're
assuming this other lapras is the encounter (for now).
2019-11-21 20:59:24 -08:00
Kurt
4c8dd0cb3a Defer rather than reject
#2490
2019-11-21 20:05:20 -08:00
Archit Date
e93bc5e67c Misc Nest Fixes (#2490)
* fix A3 and A4 ability values

private > internal so it can be used in Encounter Nest matching

* reject ability number 4 if ability is from A3
2019-11-21 20:03:02 -08:00
Kurt
b9e32c67a0 Add encounter static deferral oop
We've already been doing something similar for the deferral check; just
merge the logic into the base object
Closes #2489
2019-11-21 20:02:08 -08:00
Archit Date
93028b3439 modify nest locations based on serebii (#2483)
https://serebii.net/swordshield/maxraidbattles.shtml
2019-11-20 23:02:54 -08:00
Kurt
f6c6639078 Add online den location
There's still the down-leveled issue with high level moves. fun.
2019-11-20 23:02:31 -08:00
Kurt
f30a14ebf0 Disallow dynamax level on story legends
ty @sora10pls
2019-11-20 18:15:21 -08:00
Kurt
473afb8377 Initial rough draft of nest location matching
nest data doesn't match what's expected, but recognition is ready for
tweaks
2019-11-20 17:07:55 -08:00
Kurt
c6f515c755 Use more performat array join 2019-11-20 17:07:55 -08:00
ReignOfComputer
f19193c66f Static Locations Update (#2475)
* Static Locations Update

- Removed version lock on Motostoke Stadium Vulpix (may want to investigate Growlithe)
- Wild Area Updates
- Other Static Updates

* Squeeze in 2 more Statics

* Rhydon Static Location

Last one I promise.
2019-11-20 11:38:25 -08:00
Kurt
8294d77464 Add Carkol static loc 2019-11-19 20:24:12 -08:00
Kurt
2c5a7cd5de Add linoone strong loc 2019-11-19 19:41:30 -08:00
Kurt
feef1c1122 Add 2 more strong locations 2019-11-19 19:27:57 -08:00
Chris
7ef4fce89e Add Eevveelutions Spawns for Lake of Outrage (#2471)
All Eeveelutions spawns at the Lake of Outrage, based on the weather?
2019-11-19 19:21:41 -08:00
Kurt
18b20e09d2 Add leafeon location 2019-11-19 19:03:39 -08:00
Kurt
e6476e943b Change Gender to OT Gender
ty @sora10pls for confirmation
2019-11-19 18:55:03 -08:00
Kurt
0f4598ff66 Update some comparisons 2019-11-19 18:02:57 -08:00
Kurt
85fa6e0273 Add more strong encounter locations 2019-11-19 17:07:11 -08:00
Matt
ea80718919 Unban GO Shiny Tentacool (#2468)
* Unban GO Shiny Tentacool

* Also unban GO Shiny Meowth
2019-11-19 13:54:29 -08:00
Kurt
fa344208b2 Add crossover location handling
Closes #2461 by implementing slightly differently

Dictionary instead of new[] every area
Checks original met location first before attempting the dictionary
lookup (missing in pull request)
Easy path forward if LGPE crossover is needed

Potential issues: Since encounter types aren't marked, shaking trees and
fishing encounters are allowed to cross over. Maybe need to have some
marking for encounter slots or something...
2019-11-19 08:38:18 -08:00
ReignOfComputer
0230dafe2b Wild Area Updates from RoC's PC (#2460) 2019-11-19 08:13:53 -08:00
Kurt
a368b81519 Minor clean 2019-11-18 22:48:03 -08:00
ReignOfComputer
0ef6f024d6 Wild Area Updates from #2416 (#2459)
https://github.com/kwsch/PKHeX/issues/2416
2019-11-18 22:21:13 -08:00
Kurt
f88388cb70 Add Form (AltForm) to IEncounterable interface
All of the encounterable templates have Form anyway; funny that I was
consistent naming them all differently than pkm.AltForm :)

Closes #2452
2019-11-18 22:20:55 -08:00
ReignOfComputer
6d95fa5884 Wild Area Updates from RoC's PC (#2456) 2019-11-18 20:26:38 -08:00
Kurt
1df90199e3 Rework GetBaseSpecies to return EvoCriteria
#2452
2019-11-18 20:26:11 -08:00
Kurt
5a4c026dc7 Restrict egg related species fetch to EvoCriteria
#2452
2019-11-18 20:10:39 -08:00
Kurt
535397cf5e Consolidate egg ctor with args
Form is an absolute requirement for the encounter data.

#2452
2019-11-18 20:01:48 -08:00
Kurt
2b76fe148d Fix property reference for Darmanitan-G
lul
Closes #2453
2019-11-18 19:29:05 -08:00
Kurt
5e1937d8b4 Fix fossil8 to unbreedable
Not needed in the HA banlist table since it can't breed.

Closes #2451 thanks @iiippppk !
(undiscovered egg group)
2019-11-18 19:26:01 -08:00
Kurt
1ea3976805 Split up Encounters8
Nests in their own file
Encounter types in their own files
2019-11-18 19:23:01 -08:00
Kurt
e9fdc721df Add chewtle 2019-11-18 18:42:10 -08:00
Kurt
3aa3a29264 Add 3 more static enc locations 2019-11-17 22:04:52 -08:00
Kurt
38abafab99 Catch some evolution edge cases 2019-11-17 22:04:41 -08:00
Kurt
47be249331 Rework evo tree chaining to track form
Now recognizes & reverses form-changing evolution chains like Sirfetch'd

basically the whole process is to build the tree but point in the
opposite direction (for de-evolution paths)
2019-11-17 21:45:53 -08:00
Kurt
4bcf60746b Add egg move sharing checks
Was referencing wild caught mons that are given a single egg move; this
logic handles shared egg moves too via daycare.

Probably need to rework SplitBreed into a dictionary; this might not
catch Mime/etc split breeds if they have different tables.
2019-11-17 17:14:21 -08:00
Kurt
c2dce518c2 Invert sign of fake met locations
Suggested encounters check < 0
2019-11-17 16:03:53 -08:00
Kurt
d4c5919e5e Revisions for some static encounters
Identified a few more
2019-11-17 15:50:41 -08:00
Kurt
13adc38ee8 Add elemental tutors
Closes #2443
Capture some array references to avoid re-fetching array -- array
reference is readonly so it probably won't matter
2019-11-17 11:13:57 -08:00
Kurt
ea822e9fcd Add raid flawless IV check (speculation) 2019-11-17 09:55:27 -08:00
Kurt
86a20afe8e Minor style fix 2019-11-17 09:47:10 -08:00
Kurt
23c04cf809 Add beast ball to wild balls 2019-11-16 22:22:21 -08:00
Kurt
f20f6cd4bb Only check east asian script chars on gen7&below
Closes #2437 thanks @iiippppk !
2019-11-16 17:47:26 -08:00
Kurt
31c09c52e8 Add initial nieve check for ball inheritance
Closes #2438
2019-11-16 17:45:51 -08:00
Kurt
31f9a5f4d8 Correctly locate pk8 foreign transfer checks 2019-11-16 16:05:45 -08:00
Kurt
524ceb7bf9 Fix dracozolt species ID
heh dunno how that happened
2019-11-16 15:02:32 -08:00
Kurt
dbda5e6934 Update comments
align all, add location text for motostoke 3(4) encounters
2019-11-16 14:37:00 -08:00
Kurt
e5bd026eec Add static crustle location
ty @ReignOfComputer
2019-11-16 12:46:24 -08:00
Kurt
ce4cd2c60f Add non-levelup evo methods to validator 2019-11-16 11:52:40 -08:00
Kurt
d65e3369c9 Add toxtricity evo check
refer to sub_71007805B0 for algo
2019-11-16 11:01:00 -08:00
Kurt
3be4fde2d5 Prevent non-galar forms for wild match
uses the same logic as the wild area boost lines above
2019-11-16 10:35:08 -08:00
Kurt
29d52e065f Don't generate invalid sister-pair eggs 2019-11-16 09:00:05 -08:00
Kurt
d1e9bc3877 Update evo dictionary and unreleased list
#2416 thanks @AnalogMan151
2019-11-16 08:18:12 -08:00
Kurt
d3b2a798fa Fix evo via move check (tsareena)
Closes #2427
2019-11-16 08:01:49 -08:00
Kurt
981ed9a253 Add technical record flag editor & api 2019-11-15 23:12:28 -08:00
Kurt
848737b2a0 Remove giga gender lock
can be female
2019-11-15 21:05:19 -08:00
Kurt
025e36c5fc Add treasure items to valid held item table 2019-11-15 19:50:22 -08:00
Kurt
ab7e920410 Update toxel static encounter def
flawless attack IVs, yay
2019-11-15 19:43:09 -08:00
Kurt
451694da28 Flag past gen transfers
not valid yet
2019-11-15 19:37:04 -08:00
Kurt
cefb56a749 Sword/Shield Update 2019-11-15 17:52:08 -08:00
Kurt
a6b6383538 Handle more messages
un-nest some classes, tooltip/menu disposing
2019-10-27 20:39:15 -07:00
Kurt
9401b7a790 More readonly struct tweaks
help dat compiler
minor clean elsewhere
2019-10-26 23:18:25 -07:00
Kurt
46640d48a3 Misc clean
un-nest classes,
move some logic to core,
update some get-only properties that return arrays to methods
2019-10-26 12:58:55 -07:00
Kurt
e3efa65160 Cleanup
handle messages for dirty cleaning :)
2019-10-26 12:33:58 -07:00
Kurt
1c418e8394 Add advanced format output
groups together by encounter slottype (grass, water, etc) for a little
more detail
2019-10-25 19:53:32 -07:00
Kurt
f0b320eb28 Remove [Relic Gold] from g7 item banlist
Closes #2404 ty @CaptainBarnaklez (aka Glitch Guide Gabe on Discord)
2019-10-20 15:55:13 -07:00
Kurt
bb84ec4e89 Handle some vs message suggestions 2019-10-19 20:33:17 -07:00
Kurt
c3a6fd2a64 Handle bad gennumber indexes
Maybe returning 0 for "bad gen" will prevent bad array indexing...
2019-10-18 20:50:38 -07:00
Kurt
fee92e4f32 Handle past gen transfer evochain for new evos
basically Math.Max(2, format);
we always want permissible evo chains when fetching encounters
Closes #2403 ty @Rayqo !
2019-10-17 18:23:50 -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
a70769dc76 Remove static encounter voltorb def
unused ingame; only electrodes are static

Closes #2399, ty @steph9009 !
2019-10-11 08:19:35 -07:00
Kurt
4baf745af8 Use some c#8 sugar
static local functions
switch expressions
using usings :)

nullable next?
2019-10-07 18:40:09 -07:00
Kurt
87f43a47d8 Bump lang version to 8
some lang upgrades
2019-10-04 20:10:50 -07:00
Kurt
255cdc6ae0 Seal r2
https://www.reddit.com/r/csharp/comments/dd5c1o/til_sealed_override_modifier/

only a few instances for now
2019-10-04 15:56:22 -07:00
Kurt
d3b0c392b2 Minor tweaks
no functional change
2019-10-03 22:21:33 -07:00
Kurt
8d8adde2b1 sealed
sealedsealedsealedsealedsealedsealedsealedsealedsealedsealedsealedsealedsealedsealedsealedsealedsealedsealedsealedsealedsealedsealedsealedsealedsealedsealedsealedsealed
2019-10-03 19:09:02 -07:00
Kurt
ffe3a4ba15 Relocate resource naming for sprite fetch to draw 2019-10-03 18:23:40 -07:00
Matt
72a751b9ce Update GO Shiny Banlist (#2397)
oddish family
2019-10-02 20:04:49 -07:00
Kurt
03c3610eb5 Handle level20 transferred feebas edge case
Closes #2394 thanks @iiippppk !
2019-09-27 20:22:54 -07:00
Kurt
7013d4f0c8 add 7->8 transfer legality check
currently flags anything transferred as illegal, which is the right
thing to do until home is released.
2019-09-24 23:28:05 -07:00
Kurt
825e06130e Add nullable reftype compiler checks to test proj
New in c# 8
Assert.True(check for null) doesn't give a hint that the obj isnt null
afterwards.
Assert.NotNull does have the compiler hint attribute
could probably use fluentexpression syntax, but resharper doesn't pick
up on the nonnullable hint like vs does.
GeneratorTests: swap FirstOrDefault to First, can keep the fluent style
and resharper gets the hint.

tl;dr : resharper doesn't look at external lib for hints, gotta use
Assert.NotNull or something that doesn't return null
2019-09-23 18:13:51 -07:00
Kurt
ab0b8979e9
Add swsh content placeholders (#2392)
placeholder content until real data is dumped
2019-09-23 16:56:47 -07:00
Kurt
8912f76726 Clean up super training medal checks
Futureproof with transfer considerations
This is just a guess; gen7 didn't update the medal count and if we
assume pk8 overhauls the structure for a new console, they'll drop old
data.

With c#8 later next week, will move SuperTrainingMedalCount() to a
default interface method ez.
2019-09-20 20:55:36 -07:00
Kurt
3c50983afd Use less efficient IsLevelWithinRange, for clarity
See previous commit for discussion; it's easier to read and maintain
this rather than have the precomputed min/max comparisons.

LevelMin - minDecrease <= min && max <= LevelMax + maxIncrease;
See EncounterArea7b:
Since we know min and minDecrease (0) before doing the linq filter we
can precompute the lowbound, same for highbound; but this isn't
immediately obvious to the reader. The perf cost is pretty much
negligible in the big picture, so leave it in the more readable state.

Thanks @fattard & @ammako !

#2389
2019-09-19 22:54:53 -07:00
Kurt
a4a0e3ac6e Fix flute level amp direction
The inputs to "IsLevelWithinRange" are the highest value the
lowest-level can be, and the lowest value the highest level can be...
seems confusing (hence the original error).

If a slot is 6-7, with a wild encounter (flute), we can go +/-3 from
6-7, which is 3-10.
With an encounter of level 5, the inputs are: 5+3, and 5-3 (8, 2).
Since 8>lvlmin and 2<lvlhi, we can get a level 5 pkm from the slot
(using a negative flute yielding a -1 adjustment).

I could probably refactor it to be a 3-input signature (lvl, lvlneg,
lvlpos), and have it do LevelMin - lvlneg <= lvl && lvl <= LevelMax +
lvlpos

I should probably refactor these methods to do minLevel & maxLevel (so
baseSpecies.Level to CurrentLevel for pkm that lost their original met
data) but nothing needs the extra logic at this time.
2019-09-19 22:37:56 -07:00
Kurt
7e70d83664 Add missing filter overrides
Were using default filter behavior, which needs to be tweaked to account
for the original met location/level not being present (ie skip the
minLevel bounds check).

Hardcode logic for HasOriginalMetLocation for simplicity

Closes #2389 , thanks @Ammako !
2019-09-19 16:19:07 -07:00
Kurt
b41f2a3062 Extract logic from PKX
Extract Species Name logic to SpeciesName
Extract Language logic to Language
Remove FormConverter wrapper for string[] fetch
Rearrange some logic to more appropriate locations, update access
modifiers / types
Move some pkm array methods to arrayutil, make generic

PKX.GetVCLanguage was a dupe of _K12.GuessedLanguage() so just expose
the method

PKX is now back to pkm data manip only
2019-09-18 19:58:23 -07:00
Matt
84f72ed2b9 Unban GO Shiny Mewtwo (#2387)
Ultra Bonus Unlock (Week 3)
2019-09-16 15:04:52 -07:00
Kurt
0fe42a1db3 Minor tweaks
no functional change
2019-09-14 11:48:07 -07:00
Kurt
972e35a289 Minor reorganization
Move the ea32->array creation to the actual class
2019-09-13 09:08:12 -07:00
Kurt
aa6f803ba9 fix g7sm trade strings
borked in a prior commit, nice string reference
2019-09-13 08:36:21 -07:00
Kurt
734aa33898 Split encounter areas, relocate slot finding to obj
Now logic is reasonably split, and each format of area has its own way
of yielding slots

Too much junk with checking flute boosts or catch combo applicability;
just let the area dictate how slots match.
2019-09-12 23:20:52 -07:00
Kurt
477187a66c Split EncounterArea into game-specific classes
Generating encounters from an EncounterArea is getting a little stupid
without inheritance; each type can now have its own specific behavior
without checking for each individual type of generation pattern. Will
add the abstract method implementations in a future commit

Move some string[] array fetch (for all languages) to Util
2019-09-11 22:06:24 -07:00
Kurt
c5ebbbbe15 Minor clean
Magic number -> const usage
default(T) -> default (c#7.x feature)
remove some unused stuff
fix indentation in some spots
2019-09-10 22:07:50 -07:00
Kurt
62d08d7c30 Misc clean
split some methods with optional parameters=null
add more xmldoc
replace some magic numbers -> enum/const references
consolidate common array operations (span soon maybe?)
2019-09-10 00:21:51 -07:00
Matt
5ab0005de7 Update GO Shiny Banlist (#2384)
Ultra Unlock Bonus, Week 2.
2019-09-09 21:07:30 -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
Matt
afd4ff25a5 Fix off-by-one (#2382) 2019-09-02 19:28:48 -07:00
Kurt
0fc9b4dd15 Fix lgpe init
oops prior commit
2019-09-02 19:07:20 -07:00
Kurt
ef5ff32c3c Add GO transfer restrictions for min level
Closes #2381

Keep Raichu and Marowak at the end for ez referencing. Keep a separate
refence for alolan kanto stuff for futureproofing

Might want to improve the EncounterArea abstraction to do the
slot-finding labor themselves, but whatever, hardcode stuff until swsh
throws new monkey wrenches in. A good idea would be a dictionary with
level forcings [species | form << 10] = X and use the dictionary to
check on slot creation
2019-09-02 18:38:12 -07:00
Kurt
cf574337e9 Rewrite encounter move suggestion logic
more straightforward logic flow, don't repeat same <= 2 comparison
2019-08-14 16:35:25 -07:00
Matt
fb4a33ce7e
Unban GO Shiny Poliwag
Yokohama GO Fest
2019-08-05 21:06:57 -04:00
ReignOfComputer
33ae5b3ac5 Add Realgam Tower to Colosseum Encounters (#2368)
https://github.com/kwsch/PKHeX/issues/2367
2019-07-30 08:43:30 -07:00
Matt
79127d02e4 Update GO Shiny banlist (#2365) 2019-07-26 15:33:19 -07:00
Kurt
db632905fd Remove WasEgg setter
WasEgg (aka WasDefinitelyAnEgg) from stored properties is one thing,
WasEgg from encounter info is another; don't mix
2019-07-25 17:42:20 -07:00
Matt
9cab2e366d Misc Let's Go updates (#2361) 2019-07-15 09:05:53 -07:00
Kurt
d153224af1 Add traded egg allowance for nickname
store bool for reuse, not any slower :)
Closes #2320
2019-07-11 22:55:41 -07:00
Kurt
1de685c6d8 Add Happy Hour/Hold Hands
per confirmation from @PP-theSLAYER

https://projectpokemon.org/home/forums/topic/53818-these-events-are-flagged/?do=findComment&comment=246918
they probably won't release these two moves tho, LGPE has become stale
2019-07-08 22:18:15 -07:00
Kurt
90cc8ca3ec Add Celebrate for lgpe valid move filter
event move only
still haven't bothered finding the table in the exefs that results in
the pkm with an oob move being dummied. hardcoded based on data for now
:)
2019-07-08 22:14:21 -07:00
Kurt
605b410d52
Make Distribution Super Training missions invalid
Was initially implemented as fishy during SM's initial implementation. Any nonzero value in this byte is invalid, don't even bother checking unused/count.

Now that Gen6 (and Gen7) are no longer current gen, any hope for them being released is the same as hoping for Gen4's Azure Flute Arceus. Thus we mark as invalid :)

Closes #2353 by effect of no longer flagging as Fishy. I think that my initial implementation of VC stuff had assumed the Generation==7, but later used 1/2 for factual correctness.
2019-07-08 12:12:16 -07:00
Kurt
fef4dbb9dc More super training checks
Check the secret unlocked/complete flags for eggs
Check the count for VC, and flags too (even though they're checked
later, just do it here)
#2353
2019-07-07 15:04:58 -07:00
Kurt
7a2b27ebbe Provide min level to evochain fetch
Feels pretty brittle with all the optional parameters; if things get
funky for SW/SH it may warrant a rewrite of this portion

Closes #2345 ty @iiippppk !
2019-07-02 08:34:28 -07:00
Kurt
b5945624eb Add VC2 trade OT gender check
Closes #2343 ty @WEERSOQUEER !

#2338 was referenced by
4d08e21126
, that commit was incorrect. Looks like these 2 have OT Gender female.

Instead of marking every trade MALE except for these two, just update
the handling (i'll probably regret this lol)
2019-06-29 17:43:09 -07:00
Kurt
4eb3f8529b Filter Species & Moves for legal combobox display
LGPE will missingno your pokemon if it's not a Kanto/M&M, or one of its
moves is not obtainable. For the user's benefit, filter down these
sources to the non-baddata list.

Item filtering and ball filtering might be something to think about for
the future, but not much benefit vs effort.
2019-06-29 08:19:01 -07:00
Matt
08ea140f17 Update GO Shiny banlist for GO 3rd Anniversary (#2342)
* Update GO Shiny banlist for GO 3rd Anniversary
2019-06-28 11:04:23 -07:00
Kurt
c8747d4ede Apply OT mismatch deferral to gen2
Check the OT length for the deferral

other encounters are more permissive than trades, hence why we defer
unless we know for certain. Same OTs are possible, except for the
too-long ones!

Closes #2338 , thanks @WEERSOQUEER !
2019-06-27 21:38:24 -07:00
Kurt
4d08e21126 Explicitly check VC in-game trade gender
can't have Female ever, so check == 0
#2338
2019-06-27 21:24:08 -07:00
Kurt
da93a19c05 Add edge-case transfer OT cases
Needs to be checked prior to the strict Array Index search, as we can't
have an exact string match.
can probably be revised to a StartsWith to only check for the specific
language match, but that's a little less obvious & extra work :)
#2338
2019-06-26 21:19:37 -07:00
Kurt
71fdd01a93 Fix Stationary haxorus encounter gen
remove unnecessary %25 check (only applicable for gen4 encounters),
unneeded for gen5 method.

add a test case to generate a haxorus for all natures, verify shininess

Closes #2336
2019-06-26 20:37:26 -07:00
Kurt
444eab0756 Add mystry mew seed table
no validation for wc3 encounters yet, dunno when that will happen
2019-06-25 21:15:56 -07:00
Matt
7472ba8152 Encounters cleanup (#2335) 2019-06-25 10:55:35 -07:00
Kurt
6b18208ccb Fix g2 trade OT check
Closes #2332 thanks @WEERSOQUEER !
2019-06-24 15:45:52 -07:00
Kurt
63c705061d Add recognition for Method 3 encounters
Pass them as Legal for wild encounters similar to M1/M2/M4.
Add test cases & test pkm validation
Add pid generator support

I decided against checking these PIDIVs after all others; inlined
methods.

Closes #2328 , thanks @pokecal !
2019-06-19 19:15:06 -07:00
Matt
59a7e247cb Update GO Shiny banlist (#2325) 2019-06-13 08:46:53 -07:00
Matt
186adca755 Unban GO Shiny Onix (#2323) 2019-06-10 22:33:34 -07:00
pokecal
84d1354e2f Update EncounterArea.cs (#2318)
fix FishingTable of Route12,13(same as R32), R14(water inaccessible).
Some issues about Qwilfish will be solved.
2019-06-07 19:24:59 -07:00
Kurt
2b8ef9236a use some explicit dex numbers as enum 2019-06-01 10:22:49 -07:00
Kurt
a9152d36a4 Minor tweaks
make some enums non-int (in favor of byte etc)
return current nickname if desired
clamp nature top bound too
2019-05-29 22:40:07 -07:00
PP-theSLAYER
88d7be62d9 Removed Special Funfest Poliwag & updated min Lvl. (#2315)
According to the link below, the official page states that Poliwag's announcement was a mistake, and they clarified it would not be appearing.
This message was echoed across various pages (Sapporo, Fukuoka, Tohoku), not just the Yokohama one.
https://voice.pokemon.co.jp/stv/yokohama/2013/08/post-2286.html

Additionally, based on tests from me and jojo, Funfest missions forces the grotto encounters to be max level (of the individual grottoes).
https://projectpokemon.org/home/forums/topic/39810-unlock-all-funfiesta-missions/?do=findComment&comment=245303
2019-05-27 00:39:36 -07:00
PP-theSLAYER
968f850138 Added Funfest week 3 encounters (#2312) 2019-05-21 23:37:47 -07:00
Kurt
9b8b8f784a Revert "Add another vc nature checks"
This reverts commit b51bdc9230.
2019-05-20 17:05:53 -07:00
Kurt
d1bc1d07c8 Disallow shiny aura
if hadou were here, it'd get the same anti treatment too
2019-05-17 17:48:45 -07:00
Kurt
7f9328e883 Fix vivillon comparisons
Fix template->pkm form fetch too; would return 0 for non-subregion
countries rather than the Country Specific form ID

https://projectpokemon.org/home/forums/topic/52800-invalid-internal-error-with-the-spewpa-evolution-line/
2019-05-16 22:01:11 -07:00
Kurt
73b61e5bf0 Add gender changed azurill evo pokewalker edge case
Closes #2311 , thanks @SpiredMoth !
2019-05-15 17:14:48 -07:00
Matt
25985f11e6 Fix Static/Gift IV method call (#2310) 2019-05-15 12:07:48 -07:00
Kurt
b7f024e3ea Fix arceus held item compare
https://projectpokemon.org/home/forums/topic/52771-bug-report-pkhex-20190515-arceus-forms-error/
2019-05-15 09:46:52 -07:00
Kurt
1d44136e54 Update xd fateful flag leniency
not enough documentation to know what every single flag does; just be
lenient

I assume that flags being present XK3->PK3 will set fateful, so we could
remove that logic...
Exposing bitflags for editing isn't fun for the editor, so just ignore
it behind the fateful bool get/set.

fateful required for all xk3 origin

#2289
2019-05-14 20:14:15 -07:00
Kurt
4703a3d364 Fix incorrect method call
IVs for regular trade gifts can have random IVs; only VC-era have purely
fixed IVs.
Closes #2300
2019-05-11 17:03:22 -07:00
Kurt
4b770e62d9 Simplify and relocate wurmple evo logic 2019-05-11 14:25:58 -07:00
Kurt
feb36f58b5 Minor simplification
#2298
#2299
2019-05-11 13:10:51 -07:00
Andrew Johnson
b1ad10d8ad Add shiny check for Ash-Greninja (#2299) 2019-05-11 13:08:22 -07:00
Kurt
21e7f4317e Minor updates
increase readability, simplifly some expressions
relocate hot path for legality report string creation
2019-05-11 10:12:14 -07:00
Kurt
332784d34b Misc updates
parameter name lowercase
simplify some comparisons/calcs
reuse comparison methods
wrap memory dump into readonly struct
2019-05-11 00:59:07 -07:00
Kurt
55189a6967 Extract most common location numbers to class 2019-05-10 20:46:49 -07:00
Kurt
72edb6aa72 Misc tweaks to 3->4+ branching
more lines, a little clearer
2019-05-09 22:47:37 -07:00
Kurt
b51bdc9230 Add another vc nature checks
transfer level exp and current exp not being different enough, which
limits the amount of natures possible. Could handle the 100&<=2 cases
the same way, but keep the branches for faster cases.

fix bad test cases
2019-05-09 01:56:44 -07:00
Matt
316430985a Unban Shiny Seel (#2293) 2019-05-01 14:23:08 -07:00
Kurt
042e5176a6 Remove hardy shuckie & version split
Not version specific; I'm assuming the 00020003 PID is a result of
hacking the save file to change OT gender. Legitimate saves haven't
yielded the Hardy PID. Changing gender probably results in a bad
pointer, fetching the wrong value.

Closes #2290
2019-04-30 17:03:12 -07:00
Matt
091e64571b Update GO shiny banlist (#2292) 2019-04-29 15:32:17 -07:00
Matt
963cb1aa99 Unban GO Shiny Lapras (#2287) 2019-04-17 22:49:58 -07:00
Matt
b8c490ae2e Update GO shiny banlist (#2286) 2019-04-17 12:53:13 -07:00
Kurt
35851fcf5c Simplify and enhance expression
cache fetch of PersonalInfo (avoid re-fetching)
If event, the pkm wasn't bred with ditto
If genderless or male-only (except nido/volb), assume ditto
2019-04-16 23:07:47 -07:00
Kurt
ab64eb5850 Trim unused 2019-04-16 22:58:37 -07:00
Kurt
86d10af78b Minor clean
cache Generation value, store arceus stuff as ushort
2019-04-16 22:14:21 -07:00
Kurt
9736efd332 Updates continued
Use clone track bool
could instead track the result for each pkm step instead, for extending
functionality to mass-delete any flagged entry (cleanup).
2019-04-14 16:04:36 -07:00
Kurt
34ea56c2a7 Minor updates
Fresh day, fresh tests of the new code :)
Fix assert conditions
Add extra considerations
Detected clones should be skipped for PID/EC/TID checks -- should
probably detect this a different way rather than checking a computed
string (bool array of flags for the clone check results)
2019-04-14 09:06:43 -07:00
Kurt
3d60bea245 Add savefile-wide pkm legality checks
clone checks, duplicate PID/EC/TID
untested & no gui access for now
2019-04-14 01:06:34 -07:00
Kurt
74a45c436a Remove machoke trade catchrate restriction
reverts to 90
Closes #2282, also evident in RoC's PC files (as 90 catch rate).
2019-04-12 22:46:05 -07:00
Kurt
289a36cbd4 Relocate tables to folder
less overpopulated folders
2019-04-12 14:12:30 -07:00
Kurt
ba2b9ace8d Use byte for pp value storage
more appropriate storage; for 3887 indexes -> saves 11.3KB
2019-04-10 22:05:57 -07:00
Kurt
054d498619 Add vc transfer nature checks
Closes #2279 thanks @SadisticMystic !
2019-04-03 20:13:35 -07:00
Matt
21e7d82468 Update GO shiny banlist (#2278) 2019-04-02 13:59:43 -07:00
Kurt
86db3e85e7 Unban HA g7 monkeys
https://twitter.com/SerebiiNet/status/1111223652178112513
bank gift can breed to pass on HA
2019-03-28 21:44:46 -07:00
Kurt
e83f313281 Remove unnecessary abstraction
less objects with only 1 property/field, less objects created = faster
2019-03-23 18:59:45 -07:00
Kurt
55c7bf9858 Remove unnecessary abstraction
EvolutionSet was just an object that hides an array, with no logic
was planning to use the EvolutionSet to do the evolution checks, but
EvolutionTree was required to connect the evolution chains together
2019-03-23 10:36:28 -07:00
Kurt
41e066c562 Consolidate duplicate logic
Reformat g1/2 evolution data binaries for easy loading
precomputed count => no unnecessary allocation/resizing
2019-03-23 10:05:33 -07:00
Kurt
20f023e619 Reduce allocations
GetMethod used to create new array every time; reuse static hashset
(same arrays)

use scan approach to allocate required count
2019-03-23 01:01:04 -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
8bc949152d Enhance IEncounterable list summarization
separates by type (wild, egg, etc) then groups by generation, listing
the locations and games that can obtain it in that location
2019-03-19 22:05:13 -07:00
Kurt
7e8154fa62 Make parsing flexible / diacritic insensitive
Flabébé if users manually type it :)
2019-03-18 18:09:48 -07:00
Kurt
53dbdf62f7 Add more test cases, case insensitive parse 2019-03-18 00:04:17 -07:00
Kurt
5e3b390fe1 Add learnability API and tests 2019-03-17 22:19:46 -07:00
Kurt
d975081a86 Add short/long name property differentiation 2019-03-17 22:19:37 -07:00
Kurt
3eed1370c1 Minor simplification
if conditional checks >=3, and all subsequent checks require Valid; add
this to the continue condition, and remove unnecessary comparisons

update some comments
2019-03-16 20:07:30 -07:00
Kurt
9b783dd047 Unban mankey/machop shiny pgo transfers
https://pokemongolive.com/en/post/battleshowdown2019/
Mar. 5, 2019, at 1:00 p.m. PST (GMT −8) to Mar. 12, 2019, at 1:00 p.m.
PDT (GMT −7)
2019-03-05 23:09:39 -08:00
Kurt
51bdd7d67c Unban shiny rattata & pidgey
available on pokemon day 2019
https://twitter.com/SerebiiNet/status/1100138566833852421
2019-02-25 17:09:03 -08:00
Kurt
925167bd33 Fix Invalid/Missing Ribbon string format swap
Thanks TORNADO (discord)
2019-02-24 22:20:02 -08:00
Kurt
30e36579be Misc updates
add more xmldoc
revise some comments for clarity
redo a little bit of logic for perf
rename some methods for better description
2019-02-24 13:57:10 -08:00
Kurt
d792c0d3a0 use u/L
use 'u' to denote uint values, so that less IL ops are required
~(21->17) in the case of IVs
no functional change, just a fun exercise looking at generated IL and
finding ways to use less ops
2019-02-23 15:36:26 -08:00
Kurt
17f954b4e8 Xmldoc
Reorder to match parameter order
add more xmldoc
2019-02-23 14:57:35 -08:00
Kurt
df94afa711 Misc updates
extract some enums to core, use Enum.GetNames to do string fetch
make stamp listbox taller
clean up Display*ID setters
2019-02-21 21:54:41 -08:00
Kurt
5f4241063f Misc verbosity reductions
hide enum name
2019-02-21 20:44:31 -08:00
Kurt
c9e894a46d Misc reductions
hide setters for LegalInfo outside assembly (shouldn't overwrite the
stored values)
update GenNumber to Gen* if appropriate; GenNumber checks for first Gen*
to match, is a little more explicit and quicker than calling twice when
checking a range
2019-02-21 20:41:04 -08:00
Kurt
941b1b5c47 Extract some reused logic
Put the methods in Tables4; kinda breaks the 'only arrays here' rule but
they only reference values in this file(partial class).
2019-02-20 22:10:15 -08:00
Kurt
72ec264f4c Prevent g7 silvally from learning fire/water pledge
https://bulbapedia.bulbagarden.net/wiki/Silvally_(Pok%C3%A9mon)#Trivia
has the two bitflags set but the game only tutors the first bitflag it
sees
2019-02-19 22:57:07 -08:00
Kurt
7c3e5aa83c Make RandomGender a method instead of property
See pkNX for similar change; the functionality is really *method*
2019-02-17 22:13:40 -08:00
Kurt
d1f6a5a3ff Misc clean
no functional change
2019-02-15 11:46:46 -08:00
Kurt
7acdf0d16d Expose parse results for external consumption 2019-02-14 20:14:46 -08:00
Matt
7538a33c81 Update GO shinies (#2260) 2019-02-14 10:49:37 -08:00
Kurt
e79f46673c Refactoring iencounterable->pkm
SetPINGA{S}(pk, criteria) -> pid,iv, nature, gender, ability (stats
future?)
memes aside, this is where criteria data is forced

Split N encounterstatic (has fixed PID and special flag) from
EncounterStaticPID
2019-02-09 11:37:20 -08:00
Kurt
383d4b7700 "" -> string.Empty
be explicit that the string is empty rather than possibly missing
disallow encrypted export for BK4 (they're not encrypted), removes type
check
simplify replaceall in showdownset (don't call ReplaceAll 4x, just get
valid chars and rebuild)
simplify get ribbon sprite name (precompute ToLower and appended values
2019-02-07 21:40:20 -08:00
Kurt
3474d97fb2 Weaken float comparison for weight/height
ThePunish3D was able to find examples with less precise calcs

https://projectpokemon.org/home/forums/topic/46143-bug-in-last-update/?do=findComment&comment=240188
assuming these were unmodified
2019-02-07 16:57:17 -08:00
Kurt
59b41937e1 Misc variable name changes
readability++
2019-02-06 23:28:02 -08:00
Kurt
d03ff30140 Fix ita traded lgpe diglett OT
ty ThePunish3D!

https://projectpokemon.org/home/forums/topic/46143-bug-in-last-update/?do=findComment&comment=240159
2019-02-05 17:09:47 -08:00
Kurt
a97ae79086 Unban m&m go shinies
https://twitter.com/SerebiiNet/status/1092892163782991873
2019-02-05 15:33:59 -08:00
Kurt
29253ed636 More cleaning 2019-02-03 20:28:03 -08:00
Kurt
893f98d667 Misc clarity
no functional change
make batch editor prefix list readonly
2019-02-03 10:28:33 -08:00
Kurt
2eef523475 Misc clean
meh
2019-02-02 15:20:08 -08:00
Kurt
f481404503 Misc clean 2019-02-02 10:19:41 -08:00
Kurt
6ed9f979de Continued refactoring
removing null results as indicators of no data (c# 8 sooooon)
2019-02-01 23:26:43 -08:00
Kurt
aa022fad40 Misc refactoring
remove some null usages, return an empty array instead
reduce as arg
2019-02-01 23:08:03 -08:00
Kurt
6353e8d84d Add special set operation for alph rocksmash
closes #2253
ty @Subject21J & @ReignOfComputer
2019-01-27 11:08:21 -08:00
Kurt
147b676d8c Misc api accessibility tweaks
disable GeneratePKMs from throwing an exception (it's a testing flag,
not to leak out if someone wants a debug dll I guess)
expose FixedGenderFromBiGender
expose ribbon interfaces
2019-01-26 14:48:32 -08:00
Kurt
c033fe2741 Increase precision for cp/size calc
still isn't close enough, but removes the usage of decimals for cp calc.
redd.it/ahac9i

CP calc doesn't flag anything I have that is legal, but the calc is
still off by 2 bits at most... whyyyy? Even the same code run in cpp
results in the same inaccuracy? Maybe this is some arm64 difference?
2019-01-22 21:08:48 -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
8652677a79 Misc tweaks
showdownset: contains char instead of string
gameinfo: static readonly array instead of redefining new on update
legality: order of operation / value reuse / simplification / comments
pkx: compare char instead of single character string
header/footer: move assignment into method as an out instead of ref
2019-01-20 21:55:28 -08:00
Kurt
41a3989b53 Consolidate encounterlink into mysterygift
use synthetic wondercards to match link gifts
2019-01-12 23:50:31 -08:00
Kurt
4f1375ad6a Add route 1 to sky location table
Closes #2241 ty @Ninjistix !
2019-01-12 17:21:57 -08:00
Kurt
c591d2a69d Misc updates
condense some logic
2019-01-11 17:44:51 -08:00
Kurt
19f49eb4a7 Misc update
remove duplicate pb7 method (present in _K6); note that the fixed length
should not be changed to SIZE_STORED
comment out useless assignment
2019-01-09 21:11:14 -08:00
Kurt
e08ecb21c1 Bypass tradeevo check for gen1 if sav gen >= 3
Closes #2237
2019-01-09 08:52:56 -08:00
Mitsuki
3c552cc1e7 Update for Latest Berry Event (#2234)
Because the Berry are now Released on Gen7, allow Items now on Legality Check: Enigma, Micle, Custap, Jaboca
2019-01-08 06:14:41 -08:00
Kurt
c1fa7d3916 Fix fish slot read
oops, final slot was dropped
Closes #2231
2019-01-07 15:41:20 -08:00
Kurt
c42c019149 Fix split-evolution regression
Closes #2230
ty @NinFanBoyFTW !
2019-01-06 22:18:14 -08:00
Kurt
1095fd0811 misc alloc reductions
scan the data to determine the size of the result array
prevents list buffer resizing-copy (many times) and the final ToArray()
2019-01-06 21:00:27 -08:00
Kurt
950ddcf9fd Reduce npclock object size
24 bytes per object -> 16 bytes
2,624 objects are made for legality checking; reduces from 73KB to 41KB
removing unnecessary clone recreation -> count from 2624 -> 414 (41KB to
6.6KB)
yay 10x reduction; not huge in the big picture but a fun exercise
2019-01-06 20:58:57 -08:00
Kurt
2a8b43d9c7 Remove temporary test
Shadow lock checks were finished; teams with 5 locks are working.
Relocate member data to the full team verifier.
2019-01-06 20:58:17 -08:00
Kurt
75202c7a89 Misc updates
reducing allocations, increasing clarity by removing some magic numbers
probably can rewrite some of the evo loading/checking for even less, but
good for now.
2019-01-06 16:22:45 -08:00
Kurt
744646e30d Add gold bottle cap bypass for LGPE
All IVs are flagged in LGPE even if they're perfect :(
Might have to revisit this for future games and if LGPE transfer out and
maintain these bad flags (this is bad for inspecting parents before
breeding).

Closes #2229 , thanks @SteelPhase (report) and @sora10pls (verified)!
2019-01-06 16:21:34 -08:00
Kurt
0cdaae1d51 Update cxd antishiny tracking
check antishiny rerolls as required, reduce allocations
2019-01-06 01:26:18 -08:00
Kurt
0c9b760470 Move GetIV to pkm, misc simplifications
remove linq for characteristic calc (get max IV) and others
remove some reliance on new[] for iv/ev
pk5 replace bitmagic with property get->set copy for cleanliness
2019-01-05 10:51:41 -08:00
Kurt
4dad475fcd Fix colo lock check regression
oops; tests pass now
2019-01-04 00:10:44 -08:00
Kurt
90e5776dbc Update ereader 0IV detection
the ereader mons are nature/gender locked too, so unroll a little prior
to rechecking the overall team (with ereader mon included). Have to do
it this way as a lock can pop if the ereader data matches a prior spread
before the prior teammate can be generated.
2019-01-03 21:29:19 -08:00
Kurt
272a29a641 Differentiate DP/Pt Shaymin
fateful isn't on dp shaymin even though it's an illegal encounter
2019-01-03 17:04:32 -08:00
Kurt
bd6494d8c7 recognize gen12 italian trade OT
https://projectpokemon.org/home/forums/topic/46143-bug-in-last-update/?page=3
Thanks ThePunish3D!
2019-01-03 15:47:41 -08:00
Kurt
552e7a1a39 Fix pokewalker pid check for female-only
pidGender check failed as 0xFE (female only) returned male if pid ended
in 0xFE or 0xFF
jump out early if the pkm is fixed gender rather than genderless only

https://projectpokemon.org/home/forums/topic/48956-pokewalker-happiny-pid-mismatch/
Thanks Taargüs Taargüs!
2019-01-01 20:04:29 -08:00
Kurt
5fcd8541ba Add pokestar studio fame / star stat pk5[0x87]
how did this get forgotten so easily lol
added legality check; eggs can't participate in pokestar studio.

not editable from GUI, use ExtraBytes editor.
Re-add 0x86 (array was copied from pk4?) and reorder/comment
2018-12-31 21:01:58 -08:00
Kurt
bd56999b20 Increase search flexibility
add more version fetch methods, add reset method to reset encounter
priority
#2219
2018-12-30 17:30:57 -08:00
Kurt
2ecd3f1f30 Replace IV3 with FlawlessIVCount
Other games may vary the flawless IV count so best to have consistent
declarations
(the vc transfer encounter has 5 or 3 depending if it's a mew/celebi)
2018-12-30 10:33:00 -08:00
Kurt
82eae79823 Remove cosplay fixed IV
Was added a few months ago
https://github.com/kwsch/PKHeX/pull/2117

Game ignores the fixed IVs and instead does 3 flawless IVs
2018-12-30 01:10:53 -08:00
Kurt
78ff441e8b Update iencounterable api with new criteria arg
rearrange some logic for clearer function (extract some methods)
2018-12-29 22:24:34 -08:00
Kurt
c2422d6927 Misc updates
possibly gonna update the iencounterable api for criteria
check/enforcement, rather than just generating random encounter data.
2018-12-29 22:19:44 -08:00
Kurt
d5a8d29088 Misc updates
reduce some allocs, clearer names/enum usage
2018-12-27 20:24:24 -08:00
Kurt
2d75e93ef0 Move encounter matching logic to iencounterable
generator logic is now clean
2018-12-27 01:00:08 -08:00
Kurt
3481780e06 Add initial sizes
maximum is always 3; sometimes we know the max size so specify.
bcl has default size = 0, which then resizes to 4 on first addition
wow such optimization
2018-12-26 22:13:04 -08:00
Kurt
950d0a8525 Add nature bounds check & legality
expand string array check to cast and check against length; batch editor
Nature>=25 causes problems in hover tooltips. Previous commit fixed for
pb7 stat calcs for invalid natures, pretty sure the actual game is
exploitable for stat calcs and invalid natures (bad access), but isn't
exploitable as it's only used to retrieve an enum to switch against.
2018-12-25 22:59:52 -08:00
Kurt
69a3272036 Remove fossils from key item (count==1) list
Closes #2215
can't depend on 'key item' item flag since the game allows you to get
multiples
2018-12-25 12:31:13 -08:00
Kurt
ff649009ca Misc tweaks
misc perf adjustments
add utility for slot locked check (without box argument, absolute slot
index)
localize dragdrop strings
increase dragdrop file delete delay (dropping files into discord waits
until you confirm; 10s gives enough time to hit confirm)
2018-12-17 11:17:19 -08:00
Kurt
22b9da58e2 Add priority setting for yielding possible encs 2018-12-15 21:34:50 -08:00
Kurt
269524849e Fix crystal-only base move case
Qwilfish has crystal-only move for the encounter, and the encounter is
available on G,S,C. Check both origin games always, better to be
complete & exhaustive than faster & incorrect :)

Thanks Brittany!

https://projectpokemon.org/home/forums/topic/48802-bugemerald-eggs-crystal-learnsets/
2018-12-15 15:10:20 -08:00
Kurt
5d5259ddd2 edge case for egg OT name length
https://projectpokemon.org/home/forums/topic/48802-bugemerald-eggs-crystal-learnsets/
2018-12-14 23:30:21 -08:00
Kurt
eb69e86722 Unban go sandshrew/slash & shiny
https://twitter.com/serebiinet/status/1070583259875237888?s=21
2018-12-06 07:10:39 -08:00
Kurt
20e3da7e5f Add pb7 evo check continuation
oops
Closes #2202
2018-12-05 20:55:57 -08:00
Kurt
06d8b6609b Add outsider evo check for beluga
Closes #2200
2018-12-05 18:38:05 -08:00
Kurt
ec4088b1fe Cleanly lay out hgss swarm data 2018-12-02 14:46:17 -08:00
Kurt
77a4691a58 Add remainder of relicanth swarm data
https://projectpokemon.org/home/forums/topic/48702-bug-ss-relicanth-encounter-error/
Thanks finalevil151!
2018-12-02 14:39:24 -08:00
Kurt
2c2e5f60b3 Fix AV message for go transfers
formatted now
2018-12-02 09:08:42 -08:00
Kurt
d41197828b Misc fixes
apply version after adding (was previously left as Unknown version ID)
add Route 9 to rarespawn flying list (thanks @sora10pls )
2018-11-29 16:06:25 -08:00
Kurt
35a85670b3 Set height/weight dex values
Closes #2167
Based off sub_71001D16A0 with shortcut modifications:
* code marks new entries for evolution processing later using the low
bit (hence the << 1); in save files I can't see any bits set, but I
can't see anywhere in the code that DOESNT set this bit. Thus the
assumption of post-processing.

As noted in gameplay, a new capture doesn't set Min and Max; it only
sets it if it is above the usual sizing values.

Megas apparently don't set until seen in battle, so don't worry about
setting the other forme based indexes.
2018-11-27 22:05:36 -08:00
Kurt
76a2e4f527 Add AltForm parameter to exp/level fetch
Starter Pikachu & Eevee have different growth rates than their base
forms (seriously WHY?)

remove old api surface in PKX as a breaking change as adding the
parameter is necessary.
2018-11-26 16:55:16 -08:00
Kurt
5f0d1d423b Disallow volt tackle tutor for pb7 2018-11-25 19:44:19 -08:00
Kurt
71f1e6238a Misc fixes 2018-11-23 10:15:49 -08:00
Kurt
f358c0e4cf Handle all deviating met location string versions 2018-11-22 10:11:51 -08:00
Kurt
58080f36c9 Add WB7 and legality detection logic
Derived from WC7 with minor alterations (dynamic OT/Nickname which is
stored in the Full data). Since the 0x108 is not stored in the save
file, just keep the full data around.
2018-11-21 12:24:41 -08:00
Kurt
0ebfb38717 Add Route 20 to sky encounter rarespawn list
Thanks @ReignOfComputer !
2018-11-20 23:00:16 -08:00
Kurt
7bd3bfc52e Update rarespawn restrictions for birds 2018-11-20 13:38:49 -08:00
Kurt
3e711acd05 Disallow egg moves in suggestions for cxd/gg encs
https://projectpokemon.org/home/forums/topic/48547-remove-eggmoves-from-green-learnables-move-in-lets-go/
2018-11-20 13:38:05 -08:00
Kurt
ba1a7c2bcf Fix broken tests
rework getblank for version specific
2018-11-19 16:14:49 -08:00
Kurt
4022d7fea9 Add check for invalid pgo shiny transfer
Thanks @sora10pls !
2018-11-19 13:07:21 -08:00
Kurt
70fe7f58ee Remove eevee, revert porygon 2018-11-18 20:39:15 -08:00
Kurt
67cc6bdead Account for wild catch combo/lure level boost
Route 4 sandshrew captured at level 13 (12 is max)
+1 for now, not sure if it can go higher
2018-11-18 16:17:39 -08:00
Kurt
b818aff48a Remove evo tree sanitization
Evo data doesn't provide evolution values for these, fortunately.
2018-11-18 15:25:03 -08:00
Kurt
17348c1808 Add bird rare spawns 2018-11-18 10:36:28 -08:00
Kurt
1c0b2488ef Update lapras/porygon gift locationIDs
Thanks Asia81!
2018-11-18 09:41:52 -08:00
Kurt
edce01a857 More strict egg nickname length check
only fishy if it was traded & within bounds
2018-11-17 18:29:05 -08:00
Kurt
029e0e0a08 Manually add rare slot locations
placeholder; hopefully this isn't permanent
2018-11-17 15:12:32 -08:00
Kurt
d3534781db Allow premier ball for captures 2018-11-16 18:59:18 -08:00
Kurt
1c26c7713f Fix starter bypass
lol oops, hotfix inc
2018-11-16 18:17:01 -08:00
Kurt
013bc70ed9 Add more pb7 legality checks
can give nicknames to chinese mons now! Encoding looks the same
@wwwwwwzx :)
2018-11-16 17:42:50 -08:00
Kurt
a2eef9deae Misc fixes
it is version exclusive; fix magikarp speed IV
2018-11-16 16:44:25 -08:00
Kurt
ea4d9861c8 Disallow starter friendship move in learnset
Joycon shake only, never actually in moveset
2018-11-16 14:56:20 -08:00
Kurt
720e04ff91 Allow 7b trades to be shiny
remove the todo, thanks twittersphere

remove version exclusivity for puppycat (can be done on either ver)
2018-11-16 14:20:06 -08:00
Kurt
dae4a0a0ae Add EV/AV verification for pb7 2018-11-16 14:19:24 -08:00
Kurt
7da46623b8 Ignore ball check for invalid encounters
Defaulting to pokeball isn't entirely appropriate
2018-11-15 18:40:08 -08:00
Kurt
ed5abbd686 Add puppycat NPC location
Thanks (twitter) thelostdogg!
2018-11-15 18:39:30 -08:00
Kurt
94b924fdfc Add ingame trade IVs and random AV notes
exclusive maximum, not inclusive
2018-11-15 17:35:34 -08:00
Kurt
93ff395875 Add more succinct go park IV check string 2018-11-15 17:35:11 -08:00
Kurt
43a9d4eb99 Add gg evolution tree
turns out it was totally needed; am glad I didn't do the silly stuff of
past gen evo tables (gen6/7 is just raw evo data)
2018-11-15 17:34:54 -08:00
Kurt
22063d3907 Add ingame trade met locations 2018-11-14 23:04:40 -08:00
Kurt
a64d08e7e9 Add GO transfer IV verification 2018-11-14 18:25:43 -08:00
Kurt
830c2cbb29 Add GO encounter area/slots
Level ranges per species TBD
2018-11-14 17:40:41 -08:00
Kurt
adb6b345be Treat GameVersion.GO like other GG vers 2018-11-14 17:40:11 -08:00
Kurt
0b9b0d5317 Add bulbasaur candy to valid candies
oops
2018-11-14 17:06:13 -08:00
Kurt
24c541eeef Get savefile-context sensitive pkm
Generating a IEncounterable -> SAV for pb7 can't start with pk7
2018-11-13 19:19:20 -08:00
Kurt
28fec9882b Add pkm variant for beluga 2018-11-13 19:10:31 -08:00
Kurt
f11fa8752c Use pkm format specific evolutions, gg deviations
GG has slightly different evos from usum, don't bother adding a new
binary.
2018-11-13 19:04:58 -08:00
Kurt
6495dc41af Add move/enc/loc references 2018-11-11 22:49:17 -08:00
Kurt
5abbe6dceb Add fetching for lgpe encounters (legality checks) 2018-11-11 22:46:03 -08:00
Kurt
101149eb2e Skip eggs for gg (like cxd) 2018-11-11 14:19:02 -08:00
Kurt
9d2be1da9f Add beginnings for 7b encounter asset fetch 2018-11-11 13:12:24 -08:00
Kurt
1827b32d8f Add init function for wc7 gg files
pretty sure these will pop up soon as the pball plus doesn't send the
mew itself
2018-11-11 13:09:04 -08:00
Kurt
f38c46f5ec Misc updates 2018-11-10 21:07:31 -08:00
Kurt
010134f6ff Add references for GG tutoring
Only pikachu/eevee forms so far, probably none else
2018-11-10 21:04:48 -08:00
Kurt
94c8b348c8 Add legal tables for gg
field_pocket.dat ez pouch indexes
2018-11-10 20:58:41 -08:00
Kurt
453f43edd8 Allow shiny xd duking gifts
https://projectpokemon.org/home/forums/topic/48279-issue-with-ribbon-legality-shiny-dukings-and-japanese-text/
2018-11-08 18:58:52 -08:00
Evan Dixon
9c87ad2977 Port tests to .Net Core (#2156)
* 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
2018-11-06 15:25:35 -08:00
Kurt
d5c22b1e51 Add gen3 wc3 fixed OT egg length case
unhatched egg:
https://projectpokemon.org/home/forums/topic/48226-pichu-event-ilegal/
2018-11-03 12:44:03 -07:00
Kurt
daf41da91b Add more pokewalker moves
Thanks theSlayer!
2018-11-03 12:42:11 -07:00
Admiral-Fish
69b6ea57a3 More nature lock data (#2154)
* Fix lock data

Don't have data on Speal phenac, Spheal post, and Ursaring from colo so can't verify that.

* Fix e-reader data
2018-11-01 22:38:33 -07:00
Kurt
fe989d48fe Misc prep updates
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
2018-11-01 15:38:09 -07:00
Admiral-Fish
6a5ee7bf6d Fix Electabuzz data (#2151) 2018-10-31 23:16:13 -07:00
Kurt
8f9cc6cd7e Fix xmldoc ampersands 2018-10-31 13:52:09 -07:00
Kurt
7a021781e0 Add xmldoc, misc fixes
Fix compile error (lol github editing)
Add XD check CPU-PSV for nonshiny.
rename l->current for clearer intent
2018-10-30 17:45:21 -07:00
Kurt
bc788beef0
Fix spelling mistake in var name
Unused after assignment, but if I rework the validation check to return the teamlock result instead of a bool I can spit out the Species-PID generated list as extra info. Helps identify the as-generated conditions if there are multiple teamlocks possible for an encounter (multiple shadow mons, seen vs unseen).
2018-10-30 09:21:32 -07:00
Kurt
908c98b876 Switch lock checks to newer more complete check obj
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
2018-10-29 22:49:04 -07:00
Kurt
ef16e7037a Add lock check result object
A lot of internal information is nice to have saved; create a copy of
the static class's logic and pepper in some state variables (Required
CPU Shiny Value) to account for the weird edge cases.

Code is essentially the same as the static methods, except for more
fleshed out logic in the AllLock interrupt checking and the eventual
Trainer checks.
2018-10-29 21:28:22 -07:00
Kurt
b124a6e70d Extract seedframe to separate file
soon tm
2018-10-29 21:03:29 -07:00
Kurt
afffaaa43c Enable full shadow lock checks
If you find any edge cases (the code does not account for shiny locks
yet) pls lmk, would be nice to have confirmed tests :) :)
2018-10-29 19:44:30 -07:00
Kurt
35143630a0 Add ereader locks 2018-10-29 19:43:32 -07:00
Kurt
1b57acc6a7 Check all locks for legality checking
Single->All
2018-10-28 20:28:56 -07:00
Kurt
a728e97d40 Fix Butterfree lock
Ninetales is female
2018-10-28 20:28:02 -07:00
Kurt
7c0a74337e Update shadow lock checks
Passes all 3 lock3 cases in addition to some bulk checks
(VerifyPIDResults).
Lock4 has an issue on one; will have to investigate why.
2018-10-28 20:10:35 -07:00
Kurt
4268239c12 Continue work on shadow lock checks
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
2018-10-28 11:15:40 -07:00
Kurt
39f98a4a94 Misc qol updates
Check max case for level first, then iterate upwards (eliminates inner
if)
change wc* nature to sbyte (update comparisons, 0xFF too magic-y)
use Rand.Next(x) instead of (0, x)
2018-10-27 21:59:31 -07:00
Kurt
ed3699fbb4 Update Ho-Oh mattle check
More languages than Italian have a rule-breaking name. Rework checks a
bit
Flag eggs more accurately
Update force hatch to move Link Trade met location to Egg Location

fix Ho-oh -> Ho-Oh text strings (correctness is key!)
2018-10-27 16:06:06 -07:00
Kurt
a3e7c4837e Rewrite trade OT/Nick verification, g4 shuckie
Shuckie in HG is not the same as Shuckie in SS.
Use the relatively-recent Nick/OT properties instead of digging through
the encounter table & strings. Ends up being slightly faster.

Thanks theSlayer!

https://projectpokemon.org/home/files/file/3048-kirks-shuckie/?tab=comments#comment-1424
2018-10-27 13:37:03 -07:00
Kurt
ed180f1b5f Allow traded eggs when checking g6+ receivability
As noted in the EncounterEgg generator, Gen6+ update the origin game to
the OT's when hatched.
Thanks Zaskarel!
2018-10-27 09:44:47 -07:00
Kurt
f91a1c1d31 Add gg species / maximum placeholder
Will eventually have to fill these in during gg update
pretty sure they've revealed all the new species; total move/item count
still unknown
2018-10-27 09:08:39 -07:00
Kurt
359a529870 Misc updates
Move some logic around, fix style warnings
2018-10-27 08:53:09 -07:00
Kurt
e8ad1e227f Update shadow lock table
Thanks @ijuintekka ! Closes #2148
Will check later for commented out tests that should pass.

May end up turning on the first-shadow-lock check feature prior to
release.
2018-10-26 11:14:42 -05:00
Kurt
3d0d8fa649 Add first shadow lock check
Currently toggled off, can be optionally toggled on (I'm not sure that
it's perfect? Random save files have stuff flagged since they don't
match the lock; will have to investigate later)
2018-10-21 21:07:33 -05:00
Kurt
8c4a17335f Add first shadow lock test method
Everything should always pass the first lock check; will add shortly to
any cxd encounter checks
2018-10-21 20:55:02 -05:00
Kurt
c0aae6ab78 Add cxd lock check info & begin troubleshooting
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.
2018-10-20 21:03:04 -05:00
Kurt
06cca185e4 Add edge case for pidiv kor g4 pichu
Closes #2144
미케나 pichu 12179/20300
2018-10-19 22:27:18 -05:00
Kurt
93af3e61b7 Add handling for Mt Battle Ho-Oh (italian) edgecase
https://projectpokemon.org/home/forums/topic/47917-colosseum-italian-ho-oh/

there's no shadow ID, so it can have both the short (transferred back)
or full name (never transferred) as CK3 without side effects.

allow 10chars in pkmeditor
2018-10-13 08:07:15 -07:00
Kurt
f7f5d78beb Misc perf tweaks
hopefully resolves the image corruption issue (dont use unsafe?)
remove some linq
2018-10-13 08:02:55 -07:00
Kurt
b7acb7fa1d Add memory rarity table 2018-10-12 17:45:52 -07:00
Kurt
e8552affca More gb restriction relocations 2018-10-10 16:32:02 -07:00
Kurt
2db8daa07b Add specified ability no-hidden check
ability=0 allowed abil1/2 but not 4; catch that scenario
2018-10-10 16:31:40 -07:00
Kurt
2ad103dd46 Extract gb specific core logic to separate class 2018-10-09 21:07:13 -07:00
Kurt
0a62506e11 Micro optimization
wow such use
length eq to max will always pass
2018-10-09 19:28:18 -07:00
Kurt
b481358e92 Add number count check for OT/nick
https://projectpokemon.org/home/forums/topic/47850-legality-issue-names-with-multiple-numbers/
let me know if there's any implications for transferred content (name
reset on 1-3=>n?)
2018-10-08 17:57:34 -07:00
Kurt
47f20b8c0e Update fixed ability comparison for 6+
4aa44c90c1 only updated it for gens 3-5
Closes #2136
2018-10-08 15:26:43 -07:00
Kurt
f65bc2e984 Reduce allocations for gen1 move parse
use shared interfaces
2018-10-07 15:36:32 -07:00
Kurt
4aa44c90c1 Update fixed ability comparison
ignores <= 0 now
2018-10-07 15:36:04 -07:00
Kurt
fd1009476e Minor logic simplifications
reduce size of encountermoves, split into separate object
only execute gb movedata adjustments for gb
2018-10-06 19:44:50 -07:00
Kurt
4deb5080d1 Misc tweaks
rearrange getmove with respect to tutors; verifycurrentmoves was getting
tutor moves in levelup
extract not-found hint fetch
Expose gen5 block objects (so I can play with saves in linqpad)
2018-10-06 18:45:15 -07:00
Kurt
dc839333b7 Add more parse settings
allows consumers to tweak debatable settings
2018-10-06 13:43:05 -07:00
Kurt
66faa43e03 Add gen6+ fixed ability hot path
Closes #2135
2018-10-06 11:24:46 -07:00
Kurt
f507ab7081 Misc parse settings reorg
makes it more centralized for defining parsing settings, maybe can have
flags to change severity of certain preferential checks
2018-10-05 19:58:30 -07:00
Kurt
59af7fef35 Remove unnecessary properties 2018-10-05 19:57:45 -07:00
Kurt
ce9d3abbe4 Misc reorganization
Move logical checks using encounter data out of Core.cs

might be possible to excise legality checking objects from
Legal/PKHeX.Core so that a 'slimmer' core can be made
2018-10-04 18:52:00 -07:00
Kurt
03a05364ab Update colo suicune ++
location ID was originally added by:

afde4514e2 (diff-83a32d69355a64376bc77bd07e338a33R446)

I
have another save file that uses met location 110 (like this one) so I
assume it was originally a copypaste error from Sudowoodo.

Change Trade strings to not allocate separate empty arrays.
2018-10-04 08:14:53 -07:00
Kurt
4bbb1f54b9 Change burned tower suicune encounter type
was initially set by this commit

0e3815b048

field test resulted in Cave/HoO type
https://projectpokemon.org/home/files/file/2953-burned-tower-suicune/
2018-10-03 16:46:55 -07:00
Kurt
5d6c932353 Spit out move learn generation on verbose
helps indicate any restrictions on learn source outside of the current
format
2018-09-30 11:50:08 -07:00
Kurt
db30fea38c Remove gsc dodrio trade OT trailing space
Closes #2126
Rewrite trade OT validation by using the trade's OTs property
2018-09-19 19:09:29 -07:00
Kurt
d5816795bf Remove split gsc trade levels for tradeevo species
#2126
Receiving a lower leveled species from GSC will evolve it away from the
required species, ruling it unavailable.
Receiving a Machoke will evolve it, so can't reuse for Haunter trade
2018-09-19 19:08:10 -07:00
Kurt
65272d460a stricter mysterygift references
results in:
- precomputed GetTable() reference
- no casting when iterating for matches
- no db null checks, as they are initally Array.Empty<T>();

reduces noise a little & slightly faster
2018-09-15 16:22:07 -07:00
Kurt
df321d14b5 Reorder checks
most common path is now first
2018-09-15 16:13:17 -07:00
Kurt
b280ffcfef style updates
should be pretty much it
2018-09-14 22:37:47 -07:00
Matt
165757d590 Fix Meteorite/Mega Cuff mixup (#2120)
Meteorite (2) is legal, Mega Cuff is not.
2018-09-12 22:10:13 -07:00
Kurt
ff25e3cbd0 Remove illegal items from legal key items 2018-09-12 21:52:09 -07:00
Kurt
d511fccdb4 Move basement key item ID to illegal group
no functional change, item is unobtainable but still can be 'give all'
and in permitted list
2018-09-12 21:30:24 -07:00
Matt
fc91819410 Add XY Magikarp trade IVs (#2117)
* Add XY Magikarp trade IVs

* Add Cosplay Pikachu IVs
2018-09-12 11:02:11 -07:00
Kurt
0c02a0cbbc Add splitbreed mantine to pastgen alolanoffspring
thanks kr, beast ball now recognized as legal
2018-09-09 17:19:50 -07:00
Kurt
f444c41ee3 Remove nick req on g5 gigalith trade
Closes #2114
2018-09-08 10:45:30 -07:00
Kurt
d02b87a7b2 Expose checkresult properties
can now check individual strings / identifiers in a LegalityAnalysis
object by:

var la = new LegalityAnalysis(pkm);
var parse = la.Info.Parse;
if (parse.Any(z => ReferenceEquals(z.Comment, LegalityCheckStrings.X))
...
should be faster than doing string.Contains
2018-09-05 21:27:52 -07:00
Kurt
1750c69b01 Update pcd version distro check
some events have fixed version IDs in the gift data

https://projectpokemon.org/home/forums/topic/47365-vgc-shiny-milotic-usa-pkhex/
2018-09-05 16:09:30 -07:00
Kurt
cc20bb38d7 misc updates
use arrays instead of list when capacity known
use enums for const decoration
remove unnecessary aliases
2018-09-01 19:55:08 -07:00
Kurt
91c37ab573 Update legality check message string style
V### names weren't enjoyable to work with; use similar verbose style as
the program message strings.

updating the translation files with the remapped variable names shortly

remap list: https://pastebin.com/jybkVDAK
2018-09-01 14:11:12 -07:00
Kurt
1fe304e78f Rework mg nick/lang checks
add common interface

https://projectpokemon.org/home/forums/topic/47295-bug-event-golduck-name-not-matching-species/
2018-08-30 18:09:52 -07:00
Kurt
c6e4c39bc5 Fix gen1 single chain for gen2 tradeback scenario
invalid mon -> make sure array is big enough for later move parsing

https://projectpokemon.org/home/forums/topic/47283-unhandled-exception-when-importing-set-from-clipboard-after-opening-gen-i-save-file/
2018-08-29 21:58:44 -07:00
Kurt
ebae14e6ad Add unnicknamed forced languageID wc7 handling
https://projectpokemon.org/home/forums/topic/47295-bug-event-golduck-name-not-matching-species/
another edge case
2018-08-29 20:36:32 -07:00
Kurt
f89d9ca323 Split apart headbutt tree logic
precompute Index & make readonly when initializing as we use Index at
least once when initializing the treesarea
2018-08-28 15:10:08 -07:00
Kurt
f74c1e321a no mo go to yo
pull goto default into 'when' so other cases continue to default

this is a goto free codebase ( ͡° ͜ʖ ͡°)
2018-08-27 20:48:57 -07:00
Kurt
4dc04cb4b9 Add pelago status value check + etc
0, [9,19] are set (didn't see 15), but there's also a switch case which
references all values 0-19.

these values are used by a 80 sbyte array (4*20) in the Resort.cro

remove usages of "goto case"
2018-08-27 20:44:26 -07:00
Kurt
102430ebf5 Update trade nickname check
reorder for simplicity, add test
Thanks ThePunish3D!
2018-08-26 18:32:39 -07:00
Kurt
4656909d98 Misc reorg
use shared class for pk1/2 setnotnicknamed
fix extendedeurope values (copypaste from extendedAmericas)
move ball out of verifiers, move nature/movetype with ball
2018-08-26 16:29:52 -07:00
Kurt
f7b5a5579d sync missing content
yay rename
2018-08-26 11:29:47 -07:00
Kurt
7f87d43c41 Add enum for ball; use in checks
Increases readability instead of using hex IDs
2018-08-26 11:15:32 -07:00
Kurt
6a225ad091 Add mr mime to usum additions for egg balls 2018-08-26 09:43:11 -07:00
Kurt
a9f65a4617 add lock for cross thread dictionary manip
could use concurrentdictionary but after reading some perf drawbacks vs
manual locks, just do it manually. regex checking is the real slow part,
whatever
add some comments to describe
2018-08-25 10:48:37 -07:00
Kurt
5fe9226c62 Ignore fixed language trades for gen4 korean check
Closes #2103
Thanks @Narithegreat !
2018-08-22 22:36:56 -07:00
Kurt
7ccaf8783b Unban bred HA sableye
yeah totally genderless

https://projectpokemon.org/home/forums/topic/47101-gen-v-hidden-ability-sableye/
2018-08-20 20:08:42 -07:00
Kurt
d7f39ea343 Extract pkm searching to separate classes
search logic can now be reused by core projects

adds option to provide extra filters run at the end (prior to clone
check)
2018-08-16 20:06:40 -07:00
Kurt
eec14645ef Lessen string length severity on egg encounters
Hatched eggs can have mismatched languages<->OT/Nick restrictions
2018-08-15 15:26:42 -07:00
Kurt
5514530dfb update OT name edge case
traded ENG->KOR egg was getting flagged
#2094
2018-08-15 15:19:54 -07:00
Kurt
b6de41bfa7 Add OT name max length checks
Closes #2094
2018-08-15 14:58:55 -07:00
Kurt
bc262a7cdf Remove Plasma Fists from unsketchable
Closes #2095
split out unsketchable moves (struggle/chatter) to separate array
remove trailing spaces (auto fixed by my visual studio plugin), add
space before comment //
2018-08-15 14:52:25 -07:00
Kurt
57c6de2825 Add nickname length check for gen>2
Closes #2091
2018-08-14 20:13:15 -07:00
Kurt
6edc828cc3 misc style updates 2018-08-12 19:27:11 -07:00
Kurt
6b62dd29ee Update xy fashion edits
different for each gender
2018-08-08 21:27:14 -07:00
Kurt
7403c0f91a Add more pokewalker moves
igglybuff wish, happiny heal bell, and the elemental punches to round
things out even though they can be tutored

https://projectpokemon.org/home/forums/topic/46143-bug-in-last-update/?do=findComment&comment=234991
2018-08-08 17:35:06 -07:00
Kurt
279c9d4665 Fix tradeback detect for gen2->1->2 evolve case
https://projectpokemon.org/home/forums/topic/46909-certain-gen-i-moves-are-showing-invalid/

Thanks Raptor385!
2018-08-04 13:36:05 -07:00
Kurt
53857df647 Copy addmoves special case to individual fetch
see prior commits
2018-08-04 10:05:47 -07:00
Kurt
0f63b0a0ee Allow bw movepool except for kyurem
workaround provided for kyurem movepool (which is same bw-b2w2) but the
AddMoves logic with form != 0 points to the form == 0 data
Closes #2085
2018-08-03 07:46:53 -07:00
Kurt
30a614484e Update STADIUM ot checks again
jp: 1999 if stadium1, 2000 if stadium2
en: 2000

jp: always same OT
en: lowercase if stadium2, uppercase if stadium1

https://projectpokemon.org/home/forums/topic/46893-pkhex-bug-stadium-ot-issue/
2018-08-03 07:38:29 -07:00
Kurt
1486b7f14a Misc style & minor tweaks
Remove move combobox flicker hack (no longer necessary)
Add more Array.Empty usages
cache mysterygift sizes
seal some classes

no functionality changes
2018-08-02 20:11:42 -07:00
Kurt
19a897923d Reference original encounter for sensitive checks
https://projectpokemon.org/home/forums/topic/46143-bug-in-last-update/?do=findComment&comment=234360
thanks paf!
2018-08-01 20:39:20 -07:00
Kurt
f4bfdb8311 Remove unnecessary empty array allocations
yay net 4.6
read more: http://justinvp.com/2015/07/20/array-empty/
2018-08-01 18:30:51 -07:00
Kurt
007ec93d85 Update trade nick check for non-nicknamed
Closes #2084
2018-07-31 17:27:28 -07:00
Kurt
cfa3479a4b Add egg experience check
Closes #2083
2018-07-28 18:09:29 -07:00
Kurt
c46924d220 Use wcxfull version/language restriction data
some cards may permit being recieved on incorrect games

some wcxfulls permit games they shouldn't (tapu koko flags permit USUM
but games released after the distribution window)
lots of wcx lacking restrictions completely

tested flagging USUM rockruff & zeraora

might be worth discarding MysteryGiftVerifier and instead just using
unused fields for prior formats to supply the data.
2018-07-27 22:26:27 -07:00
Kurt
3d0a2946eb Allow only one movepool for BW-B2W2 source
they're both the same, but bw's pool does not have b2w2 formes
Closes #2078
2018-07-26 21:51:11 -07:00
Kurt
c8563a3737 Respacening
Style guidelines, handle a bunch of files
no functional change
2018-07-26 19:34:27 -07:00
Kurt
75801e22e0 Update egg location -> encounter generating checks
WasEgg only checks for EncounterEgg valid locations; check for any value
instead.
2018-07-26 14:55:49 -07:00
Kurt
711157f3ea Refactoring
Extract trainer pkm origin check to interface extension
2018-07-25 20:40:57 -07:00
Kurt
f0fc4b0693 remove alias'd properties 2018-07-25 19:43:02 -07:00
Kurt
f0090669bb Update catch rate related logic
#2071
2018-07-24 19:33:42 -07:00
Kurt
3c4ba0d52b Misc cleanup 2018-07-22 17:26:19 -07:00
Kurt
b97e967304 Misc cleanup 2018-07-22 17:14:22 -07:00
Kurt
c9408e6af4 Misc clean 2018-07-22 12:00:03 -07:00
Kurt
abe6ef1be3 Move ribbon verifiers to appropriate folder
no functional change
2018-07-22 11:50:11 -07:00
Kurt
4b0a2d90b9 Add xmldoc 2018-07-20 20:22:46 -07:00
Kurt
c9abeda508 Update stadium check again
#2065
2018-07-20 05:57:57 -07:00
Kurt
1ff8ebf777 Misc overload add/use
Some values are already computed; pass them in to overloads for quicker
execution
2018-07-19 19:38:44 -07:00
Kurt
614d2629ce Remove unnecessary ref passing
object is already passed byref, don't need to repoint the reference
2018-07-19 18:09:37 -07:00
Kurt
9a91619580 Update vc1 invalid transfer pruning
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
2018-07-19 16:42:45 -07:00
Kurt
69e7d49d03 Simplify Stadium OT Check
TID is always 2000 : #2065
2018-07-19 15:54:34 -07:00
Kurt
ff4ca47ebe Remove GBEncounterData boxing
Interfaces implement enough detail, so can simplify
extract local methods (likely will be inlined)

less obj allocations = faster!
2018-07-18 16:37:21 -07:00
Kurt
1c75093e27 Specify altform for ranch shellos
1 not 0

https://projectpokemon.org/home/files/file/336-shellos/?do=findComment&comment=1290&tab=comments
2018-07-18 07:15:46 -07:00
Kurt
a100488142 add gen12 generator kadabra catch rate case
https://projectpokemon.org/home/forums/topic/46259-yellow-kadabra/

Thanks Cloud AC !

update misc verifier for catchrate to better indicate for
any->nontradeback scenarios
2018-07-17 16:54:23 -07:00
Kurt
fe7fea877b Replace boolean OrderBy with DeferBy
orderby consumes the entire input enumerable in 'sorting' the list;
since we don't care about the order besides a yes/no, just manage the
yield order ourselves.

don't bother using this method more than the spot it's in; was a fun
exercise but other spots are set up for easier debugging
(overall flow is where->deferby->yield), could make things easier to
read but meh
2018-07-17 16:28:42 -07:00
Kurt
e4aa16f396 Fill out gen5 hidden ability banlist
now flags gen5 contrary serperior ;)
2018-07-16 21:53:46 -07:00
Kurt
bdb5aaee36 Ignore mismatch if explicitly permitted by prior check
Closes #2062
2018-07-16 16:12:19 -07:00
Kurt
7ec1cab9a7 Update gen1/2 trade generator to emit gen1 if match
Closes #2060
2018-07-16 15:22:40 -07:00
Kurt
0f17445ef4 Update gen3 event pidiv method check for eggs
closes #2057
Thanks @kamronbatman !

(nothing currently implemented uses BACD_U_S)
2018-07-14 20:19:13 -07:00
Kurt
625a77589b Extract geolocation logic to interface
mixins would be nice but I guess extensions cover this
2018-07-14 10:34:34 -07:00
Kurt
83e61923f7 Add bw/2 jellicent deferral case
https://projectpokemon.org/home/forums/topic/46143-bug-in-last-update/?tab=comments#comment-233860

Thanks paf!
2018-07-13 13:48:27 -07:00
Kurt
e4e5018aa7 Extract some methods 2018-07-11 19:13:09 -07:00
Kurt
6816c2de43 Update OT affection check for 3-5 memories
https://projectpokemon.org/home/forums/topic/46180-oras-transfered-pokemon-invalid-ribbon/
Thanks piplupwater!

(there's no other usages of V129)
2018-07-11 17:43:48 -07:00
Kurt
8a83b9bde8 Update manaphy ability check again
57250823a8
covered it for format>=6, in 4/5 the abilitynumber is derived from
PIDAbility
Closes #2052
2018-07-10 21:30:13 -07:00
Kurt
f8c43d4a06 Rework gen1 trade OT handling
convert all dictionaries to char-byte instead of string (saves 50KB on
compressed dll, lul)
update OT string comparison for pre/post transfer specimens

Showing "TRAINER" for all languages isn't correct, just show a mapped
character

Closes #2049 , thanks @egzonqj & @WEERSOQUEER !
2018-07-10 16:45:24 -07:00
Kurt
027d898f3d Update Yancy Curtis trade OT checks
Thanks paf!
https://projectpokemon.org/home/forums/topic/46143-bug-in-last-update/
2018-07-10 12:37:40 -07:00
Kurt
c8897161b7 Fix gen6 evo tree resize miss
https://projectpokemon.org/home/forums/topic/46144-a-couple-of-new-problems-in-the-pkhex-version/

Thanks CreamatedReptile2018 !
2018-07-09 22:51:01 -07:00
Kurt
93876d98eb Fix CanInhabitGen1 comparison
extracted and forgot to double check the boolean comparison when
inverting the return value

https://projectpokemon.org/home/forums/topic/46148-bug-gen-1-moves-and-legendaries-incorrectly-flagged-in-gen-2-game/

Thanks Raptor385!
2018-07-09 21:59:38 -07:00
Kurt
d45a8afef2 Remove erroneous chain trim logic
latter half of the method seems to do everything that is required

Closes #2048
2018-07-09 21:26:45 -07:00
Kurt
9a57469ec3 Update shedinja chain handling
Closes #2045

4ac92b9418
had added it; assuming to undo lvl-1 => lvl for gen3/4.

Level Up, Learn Nincada Move, Evolve to Ninjask & spawn Shedinja, then
learn any Ninjask Moves. Gen3 reverses the spawn&learnNinjask steps,
which is handled separately

Thanks @XxPhoenix1996xX !
2018-07-09 20:18:31 -07:00
Kurt
57250823a8 Add ranger manaphy ability check
PCD != PGT

Closes #2044
2018-07-09 17:33:31 -07:00
Kurt
6bb076aecf Fix mysterygift hidden ability comparison
Closes #2047
2018-07-09 17:08:26 -07:00
Kurt
d70990f9cc Fix SOS hidden ability <-> flawless IV count
3->2
https://projectpokemon.org/home/forums/topic/46142-two-illegal-pokemon/
2018-07-09 17:02:18 -07:00
Kurt
8b1ec36242 fix volbeat/illumise sport comparison
#2047
2018-07-09 06:28:29 -07:00
Kamron Batman
5ecd3b1875 Adds distribution for Negai Boshi Jirachi (#2043)
* Adds distribution for Negai Boshi Jirachi

* Updates negai boshi to have the proper game origins
2018-07-08 16:21:49 -07:00
Kurt
fe82fe8eab Show language name instead of index
prefer to keep the '0' case as zero
2018-07-06 17:22:56 -07:00
Kurt
397de97f3c Remove excessive references to Util.Rand32()
all usages besides fetching a 32bit random value should use rand.next
remove unnecessary do-while loop for calculating random EVs (always
returns 510 in total)
2018-07-04 11:30:43 -07:00
Kurt
326522c76f Misc simplifications
cache splitbreed species as another class
reduce linq usage in evolution validity check
reuse egg hatch method
2018-07-04 09:15:20 -07:00
Kurt
fdc4dd2811 Fix encounter ability comparison
-1 is the 'no fixed ability parameters defined'

Closes #2041
(optimize abilitynumber check for early return)
2018-07-03 18:43:11 -07:00
Kurt
8e950e83b3 Rewrite ability verification
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
2018-07-02 20:34:41 -07:00
Kurt
d11a89d52d Move relearn required flag to checkmoveresult
reduce usage for non gen6+ relearn move cases
save contains result for later usage instead of recomputing the inverse
2018-07-01 21:34:17 -07:00
Kurt
7f6f7a7bad Misc simplifications
reduce nesting (evo.RequiresLevelUp is checked twice, only check once
and handle path)
compact some methods
seal some classes
add a little xmldoc to exposed members
2018-07-01 19:55:23 -07:00
Kurt
c40a284174 Misc simplifications / xmldoc 2018-07-01 19:17:37 -07:00
Kurt
3674a11cfe Misc simplifications
absorb verifier calls into the parsing methods
2018-07-01 17:07:29 -07:00
Kurt
bc6c361746 Reduce linq usage
reuse variables instead of re-fetching (pkm.Species)
add overload for HashSet<int> contains vs ICollection
merge BattleOnly to one hashset
2018-07-01 10:49:11 -07:00
Kurt
e5ac193e8e Remove unused field
Encounter used to be used to determine if the original encounter was
valid; we now store the encounter object and checking is fast enough --
we don't really care to short-circuit individual verification steps
anymore.
2018-07-01 10:15:10 -07:00
Kurt
d477e19cf0 Simplify ball/catchrate lineage checks
should speed up egg ball checking a bit since we've already computed the
original species
gen1 catch rate, just move the chain fetch there.
2018-07-01 10:15:10 -07:00
Kurt
177604e2cb Refactoring
Simplify some verifier logic
2018-06-30 15:01:16 -07:00
Kurt
aa3b64dc6d Simplify ball check logic
fetch a single result and add it to the analysis

can probably remove the GetLineage call since the encountermatch stores
the original species
2018-06-30 10:34:09 -07:00
Kurt
77aed3ea14 Adjust levelmin on single evochain
Early return wasn't adjusting the minimum level; closes #2035
2018-06-27 17:41:53 -07:00
Kurt
3cf78ff3a2 Permit metronome for Pokewalker Cleffa
Closes #2033
2018-06-25 19:15:37 -07:00
Kurt
fba8adb32f Add XY wild undiscovered egg group IV check
Closes #2025
add misc updates/simplifications (personal stuff used in pkNX)
2018-06-24 21:55:00 -07:00
Kurt
09c96558ea Disable gen2 chain clamp
not sure of the implications, but fixes #2031
might have to rework this method to clean up the optional params if
things are misbehaving
2018-06-24 08:02:22 -07:00
Kurt
e29cf2a903 Rework secondary check flow
Checks.cs initially started out small, but over the years it has grown
to handle multiple types of checks. With all these checks next to
eachother, it's hard to see the overall groups. Splitting them up
(potentially further?) allows for more focused maintenance &
understanding.

Not sure if I'm happy with the overall bandaids used (checks no longer
done within LegalityAnalysis so variable repointing is excessively
used), but I'm happier the way it is now compared to the huge Checks.cs
2018-06-23 22:00:01 -07:00
Kurt
ea6842e5eb Refactoring
improve readability
2018-06-23 12:37:01 -07:00
Kurt
0d3c6eef74 Refactoring
Relocate fixed OTs to core (iencounterable & checks now reference same
values)
2018-06-23 09:49:04 -07:00
Kurt
7a0b65e74f Add low bound range check for species not in chain
Closes #2028

Thanks @iiippppk !
2018-06-23 08:23:05 -07:00
Kurt
173c9f7904 Update evo chain trim for transfer
Now trims correctly for g3 sneasel -> weavile (gen4 having both) at
level = met level
2018-06-22 23:18:52 -07:00
Kurt
5dd58c7197 Update gen1 evo chain detect
Closes #2017
2018-06-22 22:48:10 -07:00
Kurt
b502d11428 Replace evolution check
already have evolution obj from parsing moves, use it instead
2018-06-22 21:40:41 -07:00
Kurt
76e52fa2cd Simplifications
Rearrange some logic, track decrement, remove unnecessary checks
2018-06-22 20:16:31 -07:00
Kurt
3000a8d007 Reduce linq usage
No longer recreates collections with ToArray/ToList by instead altering
the original chain
2018-06-22 19:40:17 -07:00
Kurt
346c401727 Rework initial evochain trim
push unsaved IVTotal/EVTotal stuff from prior commit
rework exposed types for evo chain
initial trim now uses much less linq

can probably redo the get initial chain to provide a species to break
on...
2018-06-22 17:59:02 -07:00
Kurt
7591f54de3 Misc updates
Add safari min flawless IVs to reroll (can expand if #2025 is required
for egg group15)
Use EV/IVTotal (faster, not linq array based)
Fix missing pumpkaboo form regression, Closes #2026
Relocate swapbits to appropriate class, unneeded in PKM.cs
2018-06-22 06:24:33 -07:00
Kurt
eb35d71fcc Flag East Gastrodon from Friend Safari... correctly
Closes #2023
2018-06-21 20:26:21 -07:00
Kurt
8387da64fb Disallow East Gastrodon friendsafari
Closes #2023
2018-06-21 20:22:14 -07:00
Kurt
c1f4e2a9ff Refactoring
Relocate & simplify some logic
2018-06-21 20:13:41 -07:00
Kurt
1db41c8b21 Add vc2 evo chain check
queue should be checking against none left rather than any left.
Add test cases
2018-06-20 21:43:54 -07:00
Kurt
ce667729f3 More simplifications
Can't have species == 0 or invalid gameversion; check for
EncounterInvalid instead.
Egg chain is always valid (since it is not EncounterInvalid) thus always
provide the chain.
Since these 2 are the same, simplify the logic to be shared.

rearrange some parameters for easier flow
2018-06-20 21:38:56 -07:00
Kurt
47d8220915 Evo chain Simplifications
Rename "Flag" to "Method"; isn't used besides for indicating the evo
Method.
Remove some unnecessary duplicate checks
- always >=1 in chain at start
- mostEvolved already checked for > maxspeciesgen
2018-06-20 19:42:45 -07:00
Kurt
bfdd7247ba Rewrite most evolved species check loop
Use queue collection rather than rebuilding with .Skip(1).ToArray()
move size checks to dequeue location
2018-06-20 18:25:23 -07:00
Kurt
2ef12f635f Continued refactoring
move sylveon check to requireslevelup
need to make this generic for transfer species gaps
2018-06-20 15:59:57 -07:00
Kurt
c5ea35a1a1 Continued refactoring
Move chain prune from Analysis to evochain spawn
2018-06-19 17:50:10 -07:00
Kurt
f10cc183a7 Refactoring
Relocate Evolution Chain logic
minor reorg of check arguments for nesting / grouping
2018-06-19 17:14:22 -07:00
Kurt
f3ef122214 Refactoring
continued simplification

core.cs is pretty much the following:
misc one-off junk
moveset fetch
encounter table fetch
evo chain fetch

might eventually move things around a bit further for cleanliness so
that misc meta junk is the only thing that remains in core.
2018-06-18 21:56:30 -07:00
Kurt
c6e968c77d Only generate encounter moves if species unmodified
Closes #2020
2018-06-18 21:54:32 -07:00
Kurt
0c06506a8d Refactoring
remove some unneeded logic
moves in gen1/2 can be reordered, sequence match should be intersect
(full) contains match.
2018-06-18 19:57:32 -07:00
Kurt
2e1081086d Refactoring
Split evolution data specific DexLevel properties from DexLevel

use IReadOnlyList instead of IList for covariant collection
2018-06-18 19:10:21 -07:00
Kurt
bff5a3cd9a Add altform permissive checks for gen1/2
Should always be zero, but necessary for regional variant evolutions
needing to be excluded
#2018 (not fixed yet)
2018-06-17 21:54:04 -07:00
Kurt
7791020cb4 Check format before trim
Closes #2016
2018-06-17 21:01:07 -07:00
Kurt
33eded08d1 Add missing learn/personal references for pairs
Closes #2019
2018-06-17 20:49:03 -07:00
Kurt
e91cfeb707 Handle pre-VC2 era tradeback status for suggestions
#2015

Can't get a shiny female 1:7 f:m gender ratio transfer after the VC2
bank update; need to respect that when generating random moves for the
pkm by removing any gen2 evo chain data.
2018-06-17 09:55:07 -07:00
Kurt
dd57558e98 Update moveset suggestion for vc origin
Closes #2014
2018-06-17 09:39:01 -07:00
Kurt
c3cbb0fc44 Fix gen2 vc1 evo prune
https://github.com/kwsch/PKHeX/issues/1999#issuecomment-397818377

evo chain had already pruned tyrogue due to level 20 transfer level
(lvl19 tyrogue not possible), can't just remove last entry. Remove any
entry after the g1 species.
2018-06-16 09:06:12 -07:00
Kurt
f8a1d26694 Fill empty ability values with ability1
update handling that checked for this case to instead check for
equivalence to ability1 instead of 0

was generating a PGF with ability[1] = 0, which is not correct. Just fix
the binaries to behave and get rid of all the workarounds since future
tables don't have missing values.
2018-06-15 23:41:07 -07:00
Kurt
49c36e2173 Misc legality gen tweaks
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)
2018-06-15 18:47:17 -07:00
Kurt
6fc33f4b19 Fix level fetch arg order 2018-06-15 16:53:28 -07:00
Kurt
cb5e1239ae Refactoring
Extract game value limits
Rearrange GameVersion util logic extensions
add better gameversion fetch for generator (equivalent to pkmeditor)
2018-06-15 16:00:28 -07:00
Kurt
e8d5252b8c Reject moves introduced by gsc in pk1/vc1 cases
Closes #2005
(no tutor moves are new moves, just beam moves)
2018-06-14 18:52:43 -07:00
Kurt
f54f90bd4b Add egg Rotom/Furfrou form check
Closes #2002
Thanks @iiippppk !
2018-06-13 22:10:01 -07:00
Kurt
5579c4c80d Tidy up MoveLevelUp
use the Learn objects from prior commits for adding a range of moves
2018-06-13 22:03:58 -07:00
Kurt
39daa6c65d Split GetIsLevelUp to individual versions
static the GameVersion reference as we're excessively using it in the
switch cases, for clearer reading
2018-06-12 22:15:06 -07:00
Kurt
b9652a835d Weaken gen2 egg species checks for pre-evos in gen1
VC can inhabit both gens

Add Tradeback setting setter for legality tests
Add GBCartEra setting setter for legality tests

Thanks @iiippppk !
2018-06-12 18:46:31 -07:00
Kurt
64a64b8ce1 Add special handling for gen1 encounter move fetch
Begin splitting of GetMovesLevelUp per-gen into per-version
2018-06-12 18:35:56 -07:00
Kurt
c3314f1b8e Remove Mirage Island met location from valid gen3
Although Pokémon Ruby, Sapphire, and Emerald include a location pointer
for "Mirage Island", any Wynaut caught here will simply display "Met on
Route 130" in their summary. This is because the player is technically
still on Route 130's map.

Can't get anything with that location ID as an egg or as wild
2018-06-12 16:41:44 -07:00
Kurt
5ad8a4e5a4 Return version-sensitive moves for nonspecial fetch
Closes #1998 , GetValidMoves returns moves without sensitivity for
current version for pre gen6 moves... can resolve that later.
2018-06-11 20:23:28 -07:00
Kurt
32a83c16f1 Add egg relearn/move sequence match check
#1994
2018-06-11 08:13:50 -07:00
Kurt
e5a2e12fa5 Check held items for pk2 eggs
Closes #1993
Thanks @iiippppk !
2018-06-11 08:05:15 -07:00
Kurt
242fc295b4 Handle smeargle egg case
#1993
Just use precomputed array since it can only know sketch
2018-06-11 08:03:10 -07:00
Kurt
9faba26e90 Add egg base move branch
Closes #1991
Thanks @iiippppk  !

Improve pk2 version detect to better provide gs vs c egg base moves
2018-06-11 07:23:48 -07:00
Kurt
ca9f21fa49 Fix base move count vs inherit check
Closes #1990
Thanks @iiippppk !
2018-06-10 20:26:59 -07:00
Kurt
c9d0811281 Handle evolutions-in-eggs case for past gen (2/3)
Closes #1989
Thanks @iiippppk !

(eggs don't always come at level 1, past gen has level 5)
2018-06-10 19:38:06 -07:00
Kurt
c9181963f2 handle pichu array->interface when adding egg list
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 !
2018-06-10 19:07:55 -07:00
Kurt
e105f2b589 Refactoring
fix b2w2 egg base levelup reference (not bw, b2w2!), doesn't really
matter much except for better indication (possibly?)
remove some unnecessary linq ToArray() calls
continue relocating code out of Core
2018-06-10 17:55:03 -07:00
Kurt
d94fc65367 Refactoring
continued reduction in Core size, simplify/clean up usages
2018-06-10 14:45:25 -07:00
Kurt
3f1195a2d4 Refactoring
Remove duplication of levelup fetch
relocate some stuff to a more appropriate area
2018-06-10 10:44:05 -07:00
Kurt
3b84f33776 Misc changes
Revert linq chain
Closes #1987

change encountermatch comparison (never null), add comparison for vc
output
remove unused strings (will get removed from translation files in later
update)
2018-06-10 00:26:33 -07:00
Kurt
021ac7c54f Refactoring
where!contains -> except
relocate special tutor
2018-06-09 16:04:06 -07:00
Kurt
79f0b3665f Differentiate C/XD cologne IDs
https://projectpokemon.org/home/forums/topic/45685-pokémon-xd-and-scent-bag/
Thanks Asia81!
2018-06-09 12:44:30 -07:00
Kurt
f351e9550f Add contest stat check for VC
https://projectpokemon.org/home/forums/topic/45681-virtual-console-pkm-with-beauty-stats-marked-as-legal/

Thanks yologgebolo!
2018-06-09 08:39:16 -07:00
Kurt
ee3fda46f2 fix method name typo 2018-06-09 08:04:40 -07:00
Kurt
3239305ce5 Refactoring
GetMoves logic can now be expressed concisely with the prior refactoring
2018-06-08 20:37:35 -07:00
Kurt
a494a6b37a Don't generate move check order for an invalid ver 2018-06-08 20:36:52 -07:00
Kurt
9b43677bb9 Refactoring
pull out some move data fetching to separate class
add methods to quickly fetch if the move is learnable via that method

eventual plan is this:
replace
'fetch all possible moves then look within' move validation
with:
'peek if learnable, and get info how' move validation

advantages:
- returns game the move was learned in and the level (if appropriate)
- infinitely less object creation (garbage collection)
- only looks for a given move, doesn't have to fetch everything before
checking
- faster than full fetch, can be made even faster by optimizing lookups.

subject to change :)
2018-06-08 20:10:41 -07:00
Kurt
b1cd68e3f3 Convert GetLevelLearnMove to use lazy dictionary
faster move lookup
2018-06-07 19:05:28 -07:00
Kurt
1202474cd5 Defer & flag VC korean unobtainable encounters
Closes #1985
2018-06-06 21:49:30 -07:00
Kurt
dcdeb361f0 Handle meowstic formes
Closes #1984
2018-06-06 16:22:14 -07:00
Kurt
e52ae06721 Add version check
16 bits for version flags, should be more than enough.

should probably rework it from a packed ushort to a class...
2018-06-05 22:20:30 -07:00
Kurt
323db29374 Handle volt tackle special egg move
edge case turns the [] into an ienumerable, better than calling another
to-list.
2018-06-05 21:38:38 -07:00
Kurt
450d40535d Relocate hypertraining properties to interface
lessen temp array creation, speed++
2018-06-05 21:31:42 -07:00
Kurt
75ff28925c Dummy out pokespot validation
needs more research, nobody cares, just mark as todo and anyone can dig
deeper at any time in the future
Closes #1359
2018-06-05 19:08:31 -07:00
Kurt
e7fc30ac7a Add mysterygift region/language restriction code
Closes #1317
Needs the events crew to produce serialized binaries with hash-flag data
for each generation before proceeding any further. I'm not really
interested in doing all the work for events since it doesn't impact
battle legality.
2018-06-05 18:27:08 -07:00
Kurt
ae3b6a7fa1 Simplify IContestStats usage
remove new[] creating for checking if any contest stats exist
(HasContestStats)
2018-06-02 21:19:03 -07:00
Kurt
ab393e1f99 Rework set PID-ability checks
Closes #1979, adds test cases.
2018-06-02 13:22:52 -07:00
Kurt
15b5de11c0 Handle hatched wc3 metlevel oddballs
Closes #1978

Met Level at 5, when hatched ingame is reset to 0.
2018-06-02 07:50:48 -07:00
Kurt
f237476ccc Add nickname reset modify
nickname reset clears except for encountertrades (some have fixed
nicknames).

remove untraded check for HT memory verification, has to be traded if it
has a HT memory.
2018-05-31 19:49:47 -07:00
Kurt
e82dcdb124 update memory captured check
gen5 landorus witnessing another species should use gen6

https://projectpokemon.org/home/forums/topic/45424-landorus-memory-flagged-as-illegal/
2018-05-30 21:50:11 -07:00
Kurt
4b8cb9b8fb Add entree forest editor & randomizer
ezpz

(clear trailing spaces from entree forest comments)
2018-05-28 08:26:52 -07:00
Kurt
2061f23e26 Misc simplifications
fixes suggestion requests for invalid gameversion pkms
2018-05-27 17:57:45 -07:00
Kurt
c31ab63a1a Initialize mgdb for tests that need it initialized
don't initialize multiple times
2018-05-27 15:57:28 -07:00
Kurt
a57cdb5f48 Update fateful handling
#1970
add files as test cases
2018-05-27 14:38:03 -07:00
Kurt
4c1e014a53 Fix mgdb viewing cxd gifts
Closes #1972
2018-05-27 14:16:56 -07:00
Kurt
ae27c10dc2 Misc cxd fixes
#1970
2018-05-27 12:18:27 -07:00
Kurt
6a3b422a14 Fix xd fateful gift pkm
stored as wc3's, make "Version" from IVersion rather than int so that
"WasXD" recognizes it.

Update handling for fateful encounter trade-away cases.

#1970
2018-05-27 10:11:01 -07:00
Kurt
ec2816379e Restore unk mystery gift message
no match & fateful -> 'hey maybe pkhex doesn't know about this one yet'
2018-05-27 07:01:46 -07:00
Kurt
98895bd365 Ignore fateful as xk3 if not a shadow
Duking etc trades
Closes #1970
2018-05-27 07:00:07 -07:00
Kurt
f7a61cf72c Flag version exclusive trades with incorrect ver
Closes #1969
2018-05-27 06:59:27 -07:00
Kurt
e6765d3691 Flag langid=0 when appropriate
only jpn bw ingame trades can lack a languageID.

skip language checks for pk1/pk2 as they have no language stored.
2018-05-26 14:40:02 -07:00
Kurt
05e10860ed Flag gen5 origin footprint ribbon if Δlvl<30
Closes #1965

Also fix vc transfers ignoring some restrictions (ie footprint ribbon on
lvl 16 magneton, was incorrectly allowed as gen < 6).
2018-05-26 09:58:01 -07:00
Kurt
565a96db2a Flag maison banned species having maison ribbons
https://projectpokemon.org/home/forums/topic/45410-skillfulexpert-battler-ribbon/
Thanks Davil!
2018-05-25 19:54:25 -07:00
wwwwwwzx
a25c6a4e00 Fix Colo Starter PID Method Check (#1961)
If SIDf >> 16 != SID then temp won't be assigned.
2018-05-24 06:00:29 -07:00
Kurt
3b635be77f Flag nonparsed
removed parsedvalid/invalid, unnecessary I guess
2018-05-22 18:57:39 -07:00
Kurt
c103220e0c Handle gen3->4->5 levelup evochain pruning
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!
2018-05-20 10:35:58 -07:00
Kurt
407cca38dd Update generator to handle link celebi
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
2018-05-20 09:06:32 -07:00
Kurt
cd3b24c122 Handle smeargle generating
Needed moves is essentially none (unless you have invalid sketch moves).
2018-05-20 08:19:03 -07:00
Kurt
1f8c72af5a Handle EncounterTrade without moves specified
Similar to EncounterStatic handling
Thanks @architdate for pointing this out
2018-05-19 21:49:26 -07:00
Kurt
a7f9f69b02 Remove Type property
verbose summary uses the encountermatch's current type; the "x is y"
check is more than sufficient.
2018-05-19 12:21:16 -07:00
Kurt
b670f525fb Split up evolution classes
Too many classes in the same file, break up.

simplify things a little in EncounterArea (remove passing thru nulls,
should throw excpetion immediately if misconfigured).
2018-05-19 12:07:50 -07:00
Kurt
ca14b43b62 Relocate memory specific data to own file
allows easier handling for memory interactions
2018-05-19 10:04:07 -07:00
Kurt
23083317d7 Refactoring
pull out GameStrings

add debug output for crystal headbutt trees
fix qrpkm item access
2018-05-18 21:35:57 -07:00
Kurt
95b4d0820d Minor reorganization
amount of pkm obj classes is pretty high, move the static utility
classes to another folder

breaks usage of pkm.ShowdownText; removes a dependency from PKM.
2018-05-18 19:33:11 -07:00
Kurt
0e6db90de2 more minor tweaks
add 2 overloads for encounter generator
more simplifications
2018-05-12 18:11:47 -07:00
Kurt
99005d8fc0 Refactoring
more discards & simplifications
2018-05-12 12:28:48 -07:00
Kurt
e2f11edc43 Refactoring
discards, Array.Find over FirstOrDefault
2018-05-12 08:41:29 -07:00
Kurt
5a3c8f4147 Remove trailing whitespace 2018-05-12 08:41:29 -07:00
wwwwwwzx
997d41b6db Fix minlevel of Pangoro/Tyrantrum/Aurorus in gen6 (#1938)
* Fix minlevel of Pangoro/Tyrantrum/Aurorus in gen6

30: level + dark type in the party
32: level + day
33: level + night
34: level + female
Note Meowstic isn't affected due to another entry of level + male (23)

* Minor text usage fix

* Fix xorPID flipping in TransferEC check
2018-05-12 06:57:11 -07:00
Kurt
c2644cc9f0 Flag gendered pkm without gender
for lack of a better message
#1936

add some docs & trycatch bad wavs
2018-05-11 21:05:15 -07:00
Kurt
9fb7056837 Add test living dex generator
doesn't generate everything due to the evo chain not being 'full'
(instead is unevolved singular pkm), nor does it evolve pkm
2018-05-09 21:02:35 -07:00
Kurt
79b2576c31 add overloads for GetPossible
Remove edge case handling for level 2 blissey; updates over the past 2
(yay 2 years of legality checking) can now handle that case without
special handling.
2018-05-09 20:37:11 -07:00
Kurt
9f8e86b2b5 Finish rough generator
* handle gen6+ egg case where egg move count < 4 (cannot displace
Levelup lvl1 moves)
* handle minior altform case

generates all species/encounters possible, yielding 144,094 pkm files
(all detected as legal!)
2018-05-09 19:21:44 -07:00
Kurt
16ed4353b2 More generator updates
Store 4g giratina held item for enc->pkm legality
revise usages of GetSaneGender
Rearrange some logic
Better handle impossible version encounters (gen4)

gen 1-5 done, stuck on 659 - bunnelby egg...?
2018-05-09 17:50:56 -07:00
Kurt
4913ef9647 More generator updates
* B2 has an error in the encounter table for Route 3 Corphish Special
water encounter; GF edited from Basculin-1 to Corphish-1 and forgot to
update the form to 0.
* Ranch Trade egg locations
* Trade gender-PID set correctly
* static roamer glitch does not apply for emerald
* Mirage Island wild Wynaut case now allowed (collision with Gift Wynaut
egg hatched on Mirage Island?)

gen1-3 done; now at 413 (Wormadam) which currently yields an
EncounterEgg AS wormadam, which isn't right...
2018-05-08 21:17:31 -07:00
Kurt
c21f8bf45f More generator updates
Blazing past 251, now stopped at 280 (trade ralts, gender mismatch??)
2018-05-08 20:13:55 -07:00
Kurt
4d60a5a64e More generator updates
* first case of EncounterLink, now works (version, ability, OT memory)
* handle gen2 gb events (not even sure if they pop up, just in case)
* handle gen3 ereader shadow mons
* handle gen4 spiky pichu PID type
* handle gen2 crystal egg met level
2018-05-07 22:53:36 -07:00
Kurt
8902e9662c Add exclusive encounter handling
Handle Faraway Island Mew, handle DP Darkrai/Shaymin & Arceus, handle
not-distributed WC3s.

Now stopping at dex 154 -- one full generation of PKM species IDs can be
completely spawned directly from IEncounterable data!
2018-05-07 22:12:12 -07:00
Kurt
3c31d5798f Continued pkmgen updates
* adds g4 forced shiny seed->pid (Chain Shiny Lake of Rage Gyarados)
* adds cxd starter pid generating handling
* adds g5 forced shiny seed->pid (MG5Shiny Shiny gift Dratini)
* excludes gen4 route45 surf impossible encounters
* actually use ingame trade edge case handler

Up to dragonair (147) yay; yellow dragonair is likely the catch rate
edge case.
2018-05-07 21:16:54 -07:00