Commit graph

1121 commits

Author SHA1 Message Date
Kurt
68ee8cfcc4 Change setters to init only 2020-12-21 17:05:05 -08:00
Kurt
c6b702ae54 Create cosplay pikachu rather than clone 2020-12-21 17:04:37 -08:00
Kurt
133b8e6ba0 Rework Pokewalker/Dream Radar static encounters to own class 2020-12-21 17:04:09 -08:00
Kurt
8a0e7d90e0 Move Shiny override set to constructor 2020-12-21 14:40:34 -08:00
Kurt
62018cce1a Unify concepts with different names
AltForm & Form & Forme => Form
GenNumber & Generation => Generation

Extract out SpeciesForm interface, and re-add IGeneration

For those using PKHeX as a dependency, this should be a pretty straightforward manual replacement... GenNumber and AltForm should be quick find-replace`s.
2020-12-10 20:42:30 -08:00
Kurt
7c4c1e0913 Minor prep clean 2020-12-10 19:49:53 -08:00
Kurt
ebc1cec3da Extract breeding info to separate class
Remove splitbreed check in encounteregg2 generator; gen is always 2, never >=3, so the splitbreed check is never executed
2020-12-07 20:54:55 -08:00
Kurt
44473d1593 Add CHS armor trade OT name
Closes #3100 ty @FeralFalcon !
2020-12-03 12:50:07 -08:00
Kurt
3d87070cc8 Require strict match for hidden ability encounters
Metagross collision with wild beldum

deferral API is kinda crude, hence these janky workarounds. Was originally intended to hold onto close matches when there's no more possible matches to check.
I think a priority-deferral while only retaining a single encounter bad (instead of a list of retries) may work better than the current setup, but that would require more abstraction
2020-12-02 21:39:45 -08:00
Kurt
c77461808d Update Encounters8NestDist.cs 2020-11-30 21:38:03 -08:00
Kurt
5e32e64ac8 Handle MANôA and FALCçN SPA->FRE Gen2 Trades
Transporter remaps certain locale specific chars depending on the source ROM's version.
Since VC can trade between languages, there are 2 Spanish in-game trades that have glyphs subject to remapping, if it's transferred from a French game.

If the spanish trade is transferred from a french game, it must match the mutated string.

ty @Lusamine & helpers :D
2020-11-29 18:17:15 -08:00
Kurt
4f7e34dd47 Simplify slot init to reduce re-allocation
Slap in friend safari at the end during object construction; saves about 1KB of allocation on startup (lol)

Change internal array types to match object types, similar to other encounter-generation definitions.
2020-11-29 15:05:53 -08:00
Kurt
8eb582c997 Move species/move names to parsesettings 2020-11-27 18:45:06 -08:00
Kurt
67b7d44ced Fix accented-a/i for spanish in-game trade
I think this was a PKHeX issue that went unnoticed; originally, we didn't include the Á and Í chars in the dictionary.

I checked the transporter code:
The app maintains the international & japanese character tables, and depending on the ROM language, it may change a char to the language-specific entry. Refer to Bulbapedia's notes on the char tables for different languages:

https://bulbapedia.bulbagarden.net/wiki/Character_encoding_in_Generation_II

However, none of these char-changes are able to be reached with a legal char.

Á and Í (only accessible from the Spanish in-game trades) and the german 0xC0 && z <= 0xC6 chars are already in the international table. Every single difference in the VC1/VC2 table is an un-enterable char.

tl;dr -- all possible char codes are transferred fine with the VC2 table without extra language logic. We just keep out any inaccessible char (replaced with space).
2020-11-27 16:49:06 -08:00
Kurt
110d25d50e Add placeholder duplicate relearn move check 2020-11-27 13:05:36 -08:00
Kurt
26d6143325 Indicate static encounters disallowed from marks
Includes gifts by default
2020-11-27 12:48:47 -08:00
Kurt
3680048c0a Add local pickle loading if compiled as debug
Same dangers about "what is the root path"

Bump the level cap while we're here.
2020-11-27 12:14:13 -08:00
Kurt
fa36b70b29 Split Analysis into two separate classes
Will rename in next commit
2020-11-27 12:00:49 -08:00
Kurt
9b178fefe2 Xmldoc, minor tweaks
Move form-info logic from FormConverter to AltFormInfo; now FormConverter is entirely form=>string[]
Add a bunch of xmldoc
Make pogo no-end-date cmp agaisnt UTCnow rather than local now.
2020-11-27 11:51:02 -08:00
Kurt
1bde155c4d Move tolerance permissions to pget 2020-11-23 16:25:34 -08:00
Kurt
21669d3f77 Update EncounterTrade1.cs 2020-11-23 13:24:02 -08:00
Kurt
624c65b937 Update EncounterMovesetGenerator.cs 2020-11-23 12:53:32 -08:00
ShadowMario3
80c0d73e18
Fix order of RB Ingame Trades (#3095)
* Fix Gen1 traded JPN Dugtrio nickname

* Fix order of RB Ingame Trades
2020-11-23 10:29:59 -08:00
Kurt
69ad16c30f Remove has move check for static encounters
Event Move special encounters are yielded after static encounters by the generator, so this iterator-picker will never behave as originally intended.

Since the encounter generator works fine for these events in its current form, we can just remove it. If we need to prefer GB era events before static, then we'd reinstate the priority and move the GenerateGBEvents before the static yielder.

bla bla bla this is just a cleanup from old preference code where we wanted to recognize the encounter as an event/trade as they're more recognizable. We just want to track the progress of the iterator so that g1/g2 follow a merged yielding order
2020-11-22 17:03:30 -08:00
Kurt
37782f0ce4 Consolidate EncounterTrade1 level objects
Adds Nickname checks, thanks @ShadowMario3 for grabbing these into separate text files from Bulbapedia.

I reordered all the encounters to match Bulbapedia; each level is denoted if different if it can be sourced from RBY.
2020-11-22 16:19:03 -08:00
Kurt
e701bf2725 Add Frostpoint Field for dens 175/176
Closes #3091
2020-11-20 18:20:00 -08:00
Kurt
dba7dc9911 Forest distribution raids 2020-11-19 16:06:43 -08:00
Kurt
ce17fd4050 Minor tweaks
Enc static 4 should check met location, since locations are flexible for roamers
Simplify expressions
Disallow 0 moves in "needed moves" list.
2020-11-19 15:34:06 -08:00
Kurt
9d8b528437 Update EncounterMovesetGenerator.cs 2020-11-19 07:33:35 -08:00
Kurt
0af0c05bac Update go slot list yield and move fetch 2020-11-18 21:34:40 -08:00
sora10pls
f8dd2cf977 Update PogoType.cs 2020-11-18 21:05:46 -05:00
sora10pls
3b66e2e9b1 Add min. Level requirement for PogoType FieldP
Mew, Celebi, Jirachi and Victini (one-time Mythicals) require Lv. 15 with at least 10/10/10 IVs.
2020-11-17 21:56:47 -05:00
Kurt
037db7b8a3 Add xmldoc for new obj/func related to GO legality 2020-11-16 21:17:45 -08:00
Kurt
e6a60ec210 Add single day tolerance to end of appearance period 2020-11-16 15:41:39 -08:00
Kurt
26e0f31c95 Include date legality parameters for LGPE
Extract common abstract class for GO transferred encounters
Clamp minlevel instead of met level
Add optional parameter for GO IV randomization
Update go legality binaries with latest
2020-11-16 15:32:22 -08:00
Kurt
770f7584c9 Behavior tweaks 2020-11-16 14:33:21 -08:00
Kurt
f25a7c7cf2 Apply valid ball on create 2020-11-15 20:51:07 -08:00
Kurt
d393773fb0 Update EncounterSlot8GO.cs 2020-11-15 18:32:30 -08:00
Kurt
0ba2f6a53a Update EncounterSlot8GO.cs 2020-11-15 17:44:13 -08:00
sora10pls
a4125472f4 Add PogoType for GO Battle League Mythicals
Covers Darkrai and any other future Mythical rewards from GBL.
2020-11-15 18:48:33 -05:00
sora10pls
d5e1447f7c Add additional PogoType enums, add min Lv/IVs 2020-11-14 19:36:07 -05:00
Kurt
cb57e807ce Update EncounterSlot8GO.cs 2020-11-14 15:33:32 -08:00
Kurt
377ec02c9b Minor clean
Remove GoPark as a "Type" since it is now baked into the encounter object type
2020-11-14 12:55:30 -08:00
Kurt
ad9e9ddfa0 Relocate go encounter maintenance outside of pkhex.core
PKHeX.Core now accepts generated pkl binaries from PoGoEncounterTool (PGET).

Refer to pporg's repo. This will be treated like event data; occasionally updated.
2020-11-14 12:51:24 -08:00
Kurt
5e22c119be Continued refinements 2020-11-13 08:20:51 -08:00
Kurt
67a796e982 Update EncountersGO.cs 2020-11-12 22:08:13 -08:00
Kurt
82c016639d Update EncountersGO.cs 2020-11-12 22:00:09 -08:00
Kurt
3e4d685d37 Update EncountersGO.cs 2020-11-12 20:50:39 -08:00
Kurt
01c597cba7 GO checks round 2 2020-11-12 20:41:01 -08:00
Kurt
72e209a156 Split some methods, handle flow for go enc 2020-11-11 21:22:13 -08:00
Kurt
edd9ace51e More pogo rules 2020-11-11 21:03:47 -08:00
Kurt
df5ebd1f54 Minor clean
Resolve some messages
2020-11-11 21:01:41 -08:00
Kurt
93ff841a1d Update EncounterMovesetGenerator.cs 2020-11-10 22:17:23 -08:00
Kurt
7654ce2123 Add initial legality checks for GO->HOME transfers
took me less than an hour to do these changes, and i can flag bad form movesets no problemo

Expect tightening of restrictions (ball, level, shininess) later
if someone wants to curate met date restrictions, go ahead!
2020-11-10 22:10:53 -08:00
ShadowMario3
7b2f76b621
Fix issue #3083 (#3084) 2020-11-07 22:48:46 -08:00
Kurt
cb24c20a44 Remove relearn suggestion logic from relearn move verification
Sure it's nice to cache a valid array, but the amount of logic was small enough that it can be done with 10 lines of code rather than at the end of each verification method.

Reduces parameter passing & removes 1 field from the info object, as relearn suggestions are only done rarely after legality checking.

Allows for a simpler api surface (pkm, encounter) rather than a bigger object reference
2020-11-07 12:25:15 -08:00
Kurt
227efc1fc3 Only allow checking if lvl60 when lvl<60 2020-11-05 21:17:13 -08:00
Kurt
51c872f4e1 Move more logic closer to where it's used 2020-11-02 14:46:26 -08:00
Kurt
7cb6ee0060 Move some static arrays closer to where they're used
Split EvolutionRestrictions to its own class
Can probably refine things further to clamp down access to these arrays
2020-11-02 13:11:51 -08:00
Kurt
b4c9e90c28 Enhance transparency in failed generator test 2020-11-02 13:03:08 -08:00
Kurt
64a6214b82 no nuts here 2020-11-01 16:05:55 -08:00
Kurt
24346cc4e1 Update EncounterTrade1.cs 2020-11-01 15:58:42 -08:00
Kurt
4db6661ffd Handle JP-Blue trade quirks + stadium2 trade bypass
Co-Authored-By: ShadowMario3 <36941677+ShadowMario3@users.noreply.github.com>
2020-11-01 15:27:54 -08:00
ShadowMario3
7659b57c4f
Corrected catch rates for the Haunter and Graveler trades. (#3071)
* Fix catch rate for JP Blue trade evolutions
2020-11-01 14:39:49 -08:00
Kurt
d7042fb19e Inline parameter passing
nothing passes anything, so swsh is default
shared raids yay
2020-10-30 19:56:37 -07:00
Kurt
a33120c93e Boo
Poor Gourgeist-0&2 being left out of the 60-shiny club...

Mimikyu is a repeat from the Pikachu Mass Appearance in early August.
2020-10-29 19:34:17 -07:00
Kurt
62d5375f67 Update EncounterStatic8U.cs 2020-10-29 08:52:38 -07:00
Lusamine
5e92b7b5f7
Add crossover and static encounters for CT (#3050)
* Add crossover encounters for CT

* Old Cemetery -> Giant's Foot

* Add some static encounters

* Add Frostpoint Field -> Freezington crossover
2020-10-27 22:08:49 -07:00
Kurt
cb545781b0 Split off es5dr to separate file, require never shiny
Shiny check was mistakenly forgotten :)
2020-10-27 18:03:45 -07:00
Kurt
82c579da82 Disallow E birth island deoxys with JP origin
Closes #3040

Ty @Atrius97 !

"The Japanese Aurora Ticket was only distributed in Summer 2004, before Emerald (Sept 16th 2004) was released. The software at that time had no support for Emerald games."
2020-10-25 21:42:14 -07:00
ReignOfComputer
43d031604f
Static Encounters Update (#3044)
Alakazam in the Insular Sea (on the Isle of Armor)
Zapdos at Watchtower Ruins (in a Wild Area)
Zapdos at West Lake Axewell (in a Wild Area)
Moltres in the Soothing Wetlands (on the Isle of Armor)
Moltres on Challenge Beach (on the Isle of Armor)
Moltres in Loop Lagoon (on the Isle of Armor)
Dragapult in the Giant’s Bed (in the Crown Tundra)
Nidorina in Frostpoint Field (in the Crown Tundra)
Glalie on Snowslide Slope (in the Crown Tundra)
2020-10-25 18:10:07 -07:00
ReignOfComputer
29408e3ada
Static Encounter Updates (#3043) 2020-10-24 12:33:14 -07:00
Kurt
0c8966796e Add wild area strong encounters for Crown Tundra
Co-Authored-By: Lusamine <30205550+Lusamine@users.noreply.github.com>
Co-Authored-By: Matt <17801814+sora10pls@users.noreply.github.com>
Co-Authored-By: Chris <28743231+Bappsack@users.noreply.github.com>
Co-Authored-By: ReignOfComputer <2667537+ReignOfComputer@users.noreply.github.com>
Co-Authored-By: Archit Date <architdate@gmail.com>
2020-10-24 11:24:01 -07:00
Kurt
2e4af1afc5 Update legality comparisons for Crown Tundra
Co-Authored-By: Lusamine <30205550+Lusamine@users.noreply.github.com>
Co-Authored-By: Matt <17801814+sora10pls@users.noreply.github.com>
2020-10-24 11:16:01 -07:00
Kurt
9b2d7c0341 Minor tweak
no functional change, just use Generation instead of recomputing
2020-10-24 11:11:53 -07:00
Kurt
799dbde1a2 Add Nest Data for Crown Tundra
Co-Authored-By: SciresM <8676005+SciresM@users.noreply.github.com>
2020-10-24 11:06:05 -07:00
Kurt
8c4b7e9060 Prefer form match for suggested encounters
Closes #3038
2020-10-19 11:54:59 -07:00
Kurt
83171ab133 Change shininess check
Encounter definitions should be marked as Never Shiny or not in their definition, rather than assuming
2020-10-18 16:05:01 -07:00
Kurt
a4baec9939 Check shiny state for GB Era events 2020-10-18 10:57:18 -07:00
ShadowMario3
f6476a4737
Add Gen 1 North American Mew Events (#3036) 2020-10-18 10:01:55 -07:00
Kurt
7a01b1249c Minor clean
Handle more messages, add more xmldoc
2020-10-18 09:43:41 -07:00
Kurt
c09fb9a0ec Simplify "Flag" field in move source tracking 2020-10-17 13:40:12 -07:00
Kurt
2e8586f364 Read swarm slots correctly 2020-10-13 15:37:18 -07:00
Kurt
1524093099 Revise g5 pid bit check for forced PID statics
Closes #3027

Roamers: Get PID generated externally
NPokemon: Get PID from a fixed value
Forced (Anti)Shiny: Get PID altered

Thanks @LegoFigure11 && Princess Emily (discord 4650) !
2020-10-12 11:04:29 -07:00
Lusamine
e6e3166f13
Add Comfey from Honeycalm Island (#3023) 2020-10-10 10:07:17 -07:00
ShadowMario3
ba4eadfde9
Add location for Stadium 2 Events (#3022)
* Fix game version for International Gen 2 events

* Add Stadium 2 Event location
2020-10-10 08:13:54 -07:00
ShadowMario3
559ec76812
Fix game version for International Gen 2 events (#3018) 2020-10-08 15:57:19 -07:00
Kurt
3686ee9ec4 Set suggested Encounter Type on Met Location click too
Closes #3010
2020-10-08 15:01:23 -07:00
Kurt
0de76b57b1 Handle incorrect bred stunfisk local form value
The game uses 0x5E if 0x5A+everstone, otherwise it uses 0x58
For determining the seed species-form, we want to use everstone breeds as that resolves to the correct species-form values.

Co-Authored-By: Lusamine <30205550+Lusamine@users.noreply.github.com>
Co-Authored-By: Marty-D <1645989+Marty-D@users.noreply.github.com>
2020-10-08 13:12:25 -07:00
ShadowMario3
482dbf0b17
Update Encounters2.cs (#3017)
Fix OT for PCNY eggs
2020-10-08 08:32:18 -07:00
ShadowMario3
9516458491
Changed es1e to allow multi-OT (#3016)
* es1e allows multi-OT, merged Stadium Psyduck OTs, added Yoshira Mew

* fixed spacing on Gen 1 event OTs
2020-10-08 07:10:10 -07:00
ShadowMario3
7aac80769b
Update Encounters2.cs (#3015)
Met + Current level data for non-Egg PCNY Pokémon and Egg legality for PCNY Pokémon fixed.
2020-10-07 18:42:14 -07:00
Kurt
e3ef9bbbff Add current level property for met:X current:Y 2020-10-07 15:35:12 -07:00
Kurt
dad01cb522 Check egg state, reduce verbosity for language type 2020-10-07 15:28:58 -07:00
ShadowMario3
a81e675d26
Update Encounters2.cs (#3014)
Added the remaining PCNY events. Still need to fix shiny Pokemon where Met Level is 5 but current level is 40, 50, or 70 depending on Pokemon).
2020-10-07 11:43:34 -07:00
Kurt
5d40009a0c Add multi-OT for es2e, apply special details on enc->pkm 2020-10-07 10:36:28 -07:00
ShadowMario3
4bae0e823a
Update Encounters2.cs (#3013)
Started to add some Gen 2 PCNY Event Pokemon and fixed Stadium 2 events.
2020-10-06 22:12:05 -07:00
Kurt
6616996905 Relocate N OT logic
Make Legal.cs not care about encounter data :)
2020-10-06 20:09:14 -07:00
Kurt
fe7a4df17e Clean out some gb era version flagging 2020-10-06 20:05:38 -07:00
Kurt
6e1cbfcfe5 Split GB event types and segregate per VC/GB
Handle yielding in the moveset generator as well

Future commits will trim down unused values/abstractions; probably can get all the stadium stuff handled innately
2020-10-06 19:35:03 -07:00
ShadowMario3
1681fc776b
Update Encounters2.cs (#3011)
Fix Sing Pichu index number.
2020-10-06 10:59:18 -07:00
Kurt
6938d2f94d Split VivillonTables into two classes
Indicate that the content is for 3DS specific logic
Reduce restriction for parameters requiring IGeoTrack => IRegionOrigin
2020-10-04 14:15:13 -07:00
Kurt
36827f795d Remove gen1 flagged moves if they can originate from egg
Revises the tradeback status to remove any index that could have been sourced from egg moves instead.

really should refactor this TradebackStatus away, but Move validation still remains one of the un-refined parts of the legality checks :P
2020-10-04 12:21:05 -07:00
Kurt
757456bf06 Move reset action to class 2020-10-04 12:08:16 -07:00
Kurt
2f04ef7a32 Check PK4.EncounterType for BK4 format 2020-10-02 18:09:00 -07:00
Kurt
52a67f2425 Add Stadium2 Support
Introducing a new PKM format: SK2
Split ICaughtData2 off of PK2 so it can be shared with SK2 when type-checks occur
Add conversion for PK2<->SK2
Split the split-buffer handling for GBPKM to GBPKML (what a name), so that I can reuse shared accessor logic for SK2.
2020-10-02 18:08:40 -07:00
Kurt
af4fa8078e Add 10/1 raids
spooky
2020-09-30 17:08:04 -07:00
Kurt
cc3a807fa9 Add default met location for gen3 roamers
Closes #3004
2020-09-29 23:07:42 -07:00
Matt
4888d2368a
Restrict Isle of Armor Raichu-1 Ability (#3006)
Only allows Ability 1 (all slots are Surge Surfer).
2020-09-28 12:13:15 -07:00
Kurt
fbf7a3658a Check species for static enc match
like all other IEncounterable types, before calling the match method, check species directly
2020-09-24 19:44:48 -07:00
Kurt
1a6f5163a4 Add mid-september raids 2020-09-17 18:16:16 -07:00
Kurt
e125424423 Refine zygarde encounter form checking logic
Closes #2984
ty atrius & matt via discord

Co-Authored-By: Atrius97 <39707481+Atrius97@users.noreply.github.com>
Co-Authored-By: Matt <17801814+sora10pls@users.noreply.github.com>
2020-09-13 15:45:15 -07:00
Kurt
2e6d1fce1f Flag non-Poké Ball XD teddiursa
Closes #2983 , nice catch @soopercool101 !

Co-Authored-By: soopercool101 <soopercoolstages@gmail.com>
2020-09-13 14:43:48 -07:00
Kurt
7fc8001806 Continued refactoring
EncounterTrade: don't init Location to -1; keep as default 0 and use that as the pivot for default met location. Move Fateful property to the sub-type that uses it (EncounterTrade4, for Ranch).
Move some EncounterStatic->PKM logic that is per-type to the associated type overloaded methods. Rearrange order of properties to be more consistent with interfaces
Gen3: Initialize some classes without using post-constructor setters. The `init` setter functionality coming in c#9 won't be usable as the net46 runtime/netstandard2 doesn't support it on current previews. Do it this way so we can explicity initialize some required properties rather than apply version on a second iteration.
2020-09-13 14:40:10 -07:00
Kurt
5d3bc289b6 seal hunting
Mark things as sealed as they shouldn't be inherited from or overriden in a derived class.
2020-09-07 13:51:13 -07:00
Kurt
9191f023a3 Minor clean
Nullability annotations and some logic simplification
2020-09-06 11:24:54 -07:00
Kurt
cf9e5ec37f Minor refactoring
Change Ability array to IReadOnlyList, add method to check ability index in personal data
Suppress some message warnings
Change EvolutionChain short-circuit for VC to jump from gen6 directly down to gen2. There aren't any notradeback 1 situations, so a notradeback1 will always start with g=1, so no need for the other if-continue.

Simplify pk5 conversion
2020-09-06 10:53:13 -07:00
Kurt
8a3804e4b3 Reduce static constructor requirements
Gen1: all are Trade1 objects, and all get the values set; just set the value in the object initializer
Gen2: all are Trade2 objects, set the same version

Gen2 all static encounters already have a version marked. Only thing remaining is to set the language.
2020-09-05 13:06:08 -07:00
Kurt
81e98b5549 Update EncounterStatic7.cs 2020-09-05 12:33:00 -07:00
Kurt
079ceb2752 Disallow forms completely in gen2 2020-09-05 12:25:32 -07:00
Kurt
c1adab9703 Refactoring
Move logic closer to where it is used rather than in larger static classes

EncounterStatic(7): move VC transfer template creation to class, simplify some sanity checks
EvoChain: g==2 case is never hit as the generation check at the top of the loop already skips
2020-09-05 12:11:43 -07:00
Kurt
cf67d156ad Move Gen1/2 Encounter yielding to separate class
Specialize some of the methods so that Korean and non-tradeback cases are handled with simplified logic.
2020-09-05 10:07:02 -07:00
Kurt
6b472ffd62 Misc iencounterable->pkm generator fixes
Still some pending stuff like bad mystery gifts

gen2 static encounters on g/s applying met level and not location
gen6 ralts trade (no nickname) being flagged as nicknamed when it shouldn't
gen4 manaphy egg not having a hatch location (worked fine if you transferred it up)
gen3 antishiny gifts not setting their PIDs (jirachi WC3)
gen5 N's pkm gifts setting the wrong nature
gen3 unown not being generated correctly, cosplay pikachu being allowed form0, non-BugCatchingContest no longer require Sport ball, oras dexnav marill now uses the azurill eggmove table
2020-09-03 19:00:46 -07:00
Kurt
c2ec4d55e4 Minor clean
Add some xmldoc, remove some empty lines, move some small logic pieces to a better spot
2020-09-03 14:28:51 -07:00
Kurt
90f2ea1749 8/31 - Electric Grass 2020-08-31 18:09:15 -07:00
Kurt
ad4b560071 Minor clean
Remove RibbonWishing as property, just calc on the fly since it's a single case
Update type info for vc transfer to indicate it's an es7
Split up dreamworld encounters as intended, fix logic lol
2020-08-30 22:37:14 -07:00
Kurt
9667e86446 Simplify dreamworld encounter init
precompute result size
set Gen5 as lumped group for common encounters
remove linq usage (besides Sum call, whatever)
GetEncounters now only filters the in-game static encounters rather than the dreamworld too, as those are already filtered by separate arrays.
2020-08-30 19:51:44 -07:00
Kurt
e3ad6ec55d Make multiple-met locations a single object instance
make trade have Any again; it's a marker to apply the gameversion since we're lazy
2020-08-30 19:24:24 -07:00
Kurt
9ce09c8b1b Minor clean 2020-08-30 16:16:22 -07:00
Kurt
5a391bc20c Make EncounterStatic abstract, make Generation property abstract
Merge EncounterGift8 with EncounterStatic8 since there isn't much need to have two separate classes
2020-08-30 16:10:24 -07:00
Kurt
13ee3745f2 Remove some unecessary setter requirements 2020-08-30 15:44:13 -07:00
Kurt
1bc7994137 Remove usage of linq for duplicate count
Check successive move slots after the current index rather than doing a count eq >= 2.

Flag all empty slots prior to a filled move slot, rather than flagging a full slot as invalid because "empty move".
2020-08-30 15:43:29 -07:00
Kurt
81a693bafe Make Generation property get-only per class
don't need to store an int since it's a const-per-class
2020-08-30 15:35:59 -07:00
Kurt
ce5897ff94 Move version value from Slot to Area to reduce member size & value passing
Restrict some setters to protected only
2020-08-30 11:08:21 -07:00
Kurt
6ee7a8724b
Offload EncounterSlot loading logic to reduce complexity (#2980)
* Rework gen1 slot loading

Slot templates are precomputed from ROM data and just loaded straight in, with tight coupling to the encounter area (grouped by slot types).

* Revise fuzzy met check for underleveled wild evos

Example: Level 23 poliwhirl in RBY as a level 50 poliwhirl, will assume the chain is 25-50 for poliwhirl (as poliwag evolves at 25). Instead of revising the origin chain, just ignore the evo min level in the comparison.

Previous commit fixed it for gen1.

* Rework gen2-4 slot loading

Gen4 not finished, Type Encounter data and some edge encounters not recognizing yet...

* Add feebas slots for old/good encounters

* Begin moving properties

Great news! Gen5-7 need to be de-dumbed like Gen1-4.

Then I can remove the bang (!) on the Area accessor and ensure that it's never null!

* Split off XD pokespot slot encounter table type

* Set area in constructor

* Deduplicate g3 roaming encounters

* Deduplicate xd encounter locations (rebattle)

Only difference is met location; no need to create 500 extra encounter objects. A simple contains check is ok (rarely in gen3 format).

* Make all slots have a readonly reference to their parent area

* Minor clean

* Remove "Safari" slot type flag

Can be determined via other means (generation-location), allows us to reduce the size of SlotType member to a byte

Output of slot binaries didn't preserve the Safari flag anyway.

* Update SlotType.cs

* Handle type encounters correctly

* Merge safari area into regular xy area

* Merge dexnav accessor logic

* fix some logic so that tests pass again

rearrange g5 dw init to be done outside of static constructor (initializer instead)
PIDGenerator: friend safari slots now generate with required flawless IV count

* Add cianwood tentacool gift encounter

* Remove unnecessary abstractions

Fake area just returned a slot; since Slots have a non-null reference to the area, we can just return the slot and use the API to grab a list of possible slots for the chain.

Increase restrictiveness of location/type get-set operations

* Minor tweaks, pass parameters

DexNav observed state isn't necessary to use, only need to see if it's possible to dexnav. Now that we have metadata for slots, we can.

* Remove unused legality tables
2020-08-30 10:23:22 -07:00
Kurt
c1bc371d76 Update EncounterGenerator.cs 2020-08-29 23:50:59 -07:00
Kurt
816f35d042 Split file 2020-08-22 11:59:43 -07:00
Kurt
a62324a5a1
Refactoring some IEncounterable-type'd object initialization and original-generation evo chain (#2974) 2020-08-21 16:35:49 -07:00
Kurt
adb55c9e7b Make CanToggleGigantamax have a form argument
no more meowth-1/2 and or perrserker
Closes #2973
2020-08-16 23:06:49 -07:00
Kurt
12d9397c8c Split GO from "GG" gameversion
Make Gen7b as the combined ver for that expression
2020-08-06 18:24:20 -07:00
Lusamine
f611d0b780
pika pi (#2960) 2020-08-05 19:10:35 -07:00
Kurt
ad6728fb5c Minor tweaks
Check egg encounter for state rather than re-deriving some properties on the fly
Only check memories if memories are exposed
Remove debug assert (not always true?)
2020-08-04 22:56:55 -07:00
Kurt
497639d48e 7/31 distribution raids 2020-07-31 18:13:29 -07:00
Kurt
e84ce77008 Split memories from main pkm class to interface
pk6/7/8, not pb7
2020-07-31 17:25:14 -07:00
Kurt
b7211000b0 Split Country/Region/ConsoleRegion from ITrainerInfo
Only present in mainline gen6/7 game pairs, so it's not wise to have it for all games
2020-07-31 13:53:42 -07:00
Kurt
36684ab867 Minor clean
Simplify some expressions
2020-07-31 11:20:48 -07:00
Kurt
27f15d2f20 Split Country/Region/ConsoleRegion to interface 2020-07-31 11:17:31 -07:00
Kurt
05ac8acb5f Phenac City Hexagon Brothers rebattle
Closes #2951
2020-07-29 13:45:33 -07:00
Kurt
7bd36ca0c8 Minor clean
Fix xmldoc, revert ??= because whatever nullable logic plugin I have isn't detecting this right
2020-07-26 08:54:52 -07:00
Matt
3a02bf457f
Update GO minimum Level requirements (#2953)
GO Fest 2020 made Alolan Marowak available in wild spawns, and further testing has proved that Raid/Research PKM can be  downleveled to 15 after trading to low-level accounts.

This'll probably end up being deprecated in the future when we have GO->HOME transfer checks, in addition to IV checking.
2020-07-26 08:27:21 -07:00
Kurt
d3863f9c63 Minor tweaks
verify relearn: move split check before method call
movelist: don't capture pkm in local method; meowstic ID
pkm: flip argument for easier understanding
2020-07-19 18:30:46 -05:00
Kurt
a6a3c6eaaa Refactoring
change some expressions for better perf/readability
2020-07-19 17:48:45 -05:00
Kurt
40ce63873d Reduce gen1 encounter legality startup alloc by 5KB
Use precomputed counts to remove the need to store a cache of read values

rename some variables in ReadSlots1FishingYellow
2020-07-19 14:08:56 -05:00
Kurt
eb7ed44b29 Finish splitting gen1/2 encounter types from parent class
Results in a little more code, but each path is less tangled
simplify some expressions
remove RBDragonair content in favor of a strict filter for catch rate

Move gen1 trade trainer names to stringconverter, since pk1/pk2 shouldn't refer to legality classes
2020-07-19 13:32:40 -05:00
Kurt
35435b539e Refactoring
move some logic around
2020-07-18 21:51:38 -05:00
Kurt
085889d419 Pass evolution to trade match check 2020-07-18 21:50:28 -05:00
Kurt
705822c965 Abstract some gen1/2 encounter types from their parent class 2020-07-18 15:36:30 -05:00
Kurt
8fae396b76 Inject matching dexlevel for form comparison 2020-07-18 13:29:16 -05:00
Kurt
1ecafd8db3
Update Encounters8NestDist.cs
Puts the new encounters in the correct array; the new encounters should now be recognized on the other game version.
2020-07-17 12:18:28 -05:00
Kurt
8c52932bbe Under da sea
did they just give up on version exclusive raids?
get yo shiny wailord
2020-07-16 21:18:37 -05:00
Kurt
ea609d43a5 Move soup to gmax class (extension methods), fix home gmax starters
Directly accessing CanEatMaxSoup is now forbidden :)

Fixes home galar starters being flagged when gmax-final evos
2020-07-16 21:04:27 -05:00
Kurt
4d3fd395e1 Add bypass for DP rotom, skip splitbreed if chain doesn't have splitbreed 2020-07-13 22:30:20 -05:00
Kurt
e04b96a9b3 Fix dizzy punch egg recognition & gen2 hatch conter verification
Closes #2939
Fixes #2938

Inline some logic where appropriate for egg levels
2020-07-12 20:58:07 -05:00
Kurt
53e2432818 Fix gen2 egg species get
feraligatr isn't in gen8 evolution table yet
Closes #2937
2020-07-11 11:40:20 -05:00
Lusamine
fdfa10e881
Add a few static/crossover encounters (#2932) 2020-07-08 22:59:08 -05:00
Matt
fa7c8929b1
Update SWSH enc binaries, fix Rotom form/move issues (#2927)
Some zone names were mislabeled in pkNX -- Staryu are not scripted encounters!
Remove altform specific moves from distro/static Rotom, which would erroneously allow illegal mismatches (e.g. Hydro Pump Rotom-1); thanks Abyzab (Discord)!
2020-07-05 11:45:53 -05:00
Lusamine
39040358c1
Add a Whiscash (#2921) 2020-07-03 14:31:19 -05:00
Kurt
e207031920 Shuckle Magic Coat -> Encore
Nice typo! Ty sora10pls(matt) & too salty (via discord)
2020-07-03 10:48:31 -05:00
Kurt
0198179133 Add fixed raid news content
no change in species/form from the crownite ore one afaik; common for both games???

fix type of rigel encount so it shows up in block editor, with correct name (ty matt)
2020-06-29 21:10:12 -05:00
Kurt
993673f0de Minor clean
no functional change
2020-06-27 23:36:53 -05:00
Kurt
3138fb20c6 Refactor some method signatures
vs -> chain (clarity on what it is; an evolution chain, rather than e.v.o.s - vs)
Clamp origin chain for transferred where we can use the max origin level
2020-06-27 22:18:29 -05:00
Kurt
065c1cc6d4 Specify version on all defined wc3
rearrange some setters for visual appearances

Closes #2904
2020-06-27 14:21:45 -05:00
Kurt
d2ef98f7d4 Add underground staryu encounters
not in any of our dumps, like crabrawler?
why gf
Closes #2913
2020-06-27 13:56:29 -05:00
Kurt
294d861f86 Set StatNature on IEncounterable->PKM
Mystery Gift formats already set it appropriately in their individual implementations

Closes #2901
2020-06-27 11:46:23 -05:00
Lusamine
565c9a590e
Add some cross boundary encounters (#2910) 2020-06-26 23:31:23 -05:00
Matt
3f09afd4cb
Update TradeGift_R1 (#2909)
Both games have a pair of version exclusive trades on The Isle of Armor, as noted on Bulbapedia.
2020-06-26 11:00:45 -05:00
Kurt
ce5a09055a Merge branch 'master' of https://github.com/kwsch/PKHeX 2020-06-24 18:59:30 -05:00
Kurt
1ae9cb7602 Handle pika/meow soup evolutions
Can lose gmax flag if its current species is able to eat soup, or its origin species could eat soup

this handles stuff like charmander->charizard, as charmeleon would not pass

hopefully there's never a mid-stage evo that has a gmax form, and its final evo doesn't... (don't get any ideas, gamefreak)
2020-06-24 18:59:26 -05:00
Lusamine
bc1538efa5
Add some IoA cross-boundary encounters (#2902) 2020-06-24 07:34:26 -05:00
Archit Date
fd48938c8e
fix encounter criteria ability via number (#2898) 2020-06-22 22:41:15 -05:00
Kurt
a2d9f06350 Differentiate AbilityType from AbilityNumber
invert ability index favoring so that the first ability index is most favored

ability num:
-1=>0/1/2
0=>0/1,
1=>0
2 =>1
4=>2

Ability Type:
0,1,2=>0,1,2
3=>0/1
4=>0/1/2

Should probably get rid of AbilityNumber definition usage but it's so entwined in the trade/static definitions...
2020-06-22 22:01:42 -05:00
Kurt
93308ca4ae Account for losing/gaining gmax for comparison
Don't defer for static, and don't skip for WC8

skip home gifts with player OT when SID7 not 0 (all home OTs have 6digit TID and 0 SID)
2020-06-22 21:29:21 -05:00
Matt
dcb5c1e936
Update IsMatchLocation to allow Isle of Armor Dens (#2895) 2020-06-22 10:07:50 -05:00
Kurt
6fb2ebe039 Minor clean
add some xmldoc
2020-06-21 19:46:06 -05:00
Kurt
7e69202669 Use criteria for getting ability 2020-06-21 18:16:34 -05:00
Kurt
fc4ba1df35 Bounds check ability requested
no longer exception's on RefreshAbility(negative number)
2020-06-21 18:16:18 -05:00
Abyzab
a797459543
Additional Cross Boundary Edge Cases (#2891)
* Additional Cross Boundary Edge Cases

The static spawn point right outside Brawlers' cave, all of the pokemon are able to chase the player into the cave and be caught

https://cdn.discordapp.com/attachments/401014193211441161/724112694088695918/a0f06577821f60edf119308675de7894.png
https://cdn.discordapp.com/attachments/401014193211441161/724117077698281502/JPEG_20200621_002242.jpg

Unsure if there were more that spawn in this point that have the same behaviour, but these were the ones I found (w/ Ano0onymouse
 for Shield ones)
2020-06-21 09:33:29 -05:00
Kurt
523f101c82 Add barraskewda location
Closes #2889

Co-Authored-By: Abyzab <abyzab@users.noreply.github.com>
2020-06-20 20:26:54 -05:00
Kurt
645db23706 Extract EvoBase and MoveList from Core
These are really old bloated parts of the original legality checking logic; separating for now to rewrite.
2020-06-20 19:44:05 -05:00
Kurt
4c7c6532bb Check ability deferral with more scrutiny 2020-06-20 13:14:44 -05:00
Kurt
eedaca8712 Fix mistake
oops lol
2020-06-20 12:09:03 -05:00
Kurt
8f24477197
Weezing ingame trade can be any ability 2020-06-20 11:37:37 -05:00
ReignOfComputer
2e584f43fc
Additional Statics (#2883) 2020-06-20 07:51:04 -05:00
Kurt
36dd5ece21 Initial Isle of Armor support
Co-Authored-By: sciresm <sciresm@users.noreply.github.com>
Co-Authored-By: Matt <sora10pls@users.noreply.github.com>
Co-Authored-By: Archit Date <architdate@gmail.com>
2020-06-19 18:51:15 -05:00
Kurt
2cdb5d26db Clean up some method signatures
rename things to be a little more consistent in naming conventions
2020-06-16 21:46:22 -05:00
Kurt
f7d2101500 Update Encounters8NestDist.cs 2020-06-06 09:53:14 -07:00
Kurt
9b89ee09ec Fix downlevel comparison
(for good? pls)
https://i.redd.it/7g2c4d3kisc41.png
ty anubis

remove GetMinimalLevel override, as it's doing the same thing as LevelMin. When regenerating the pkm, we aren't doing anything downlevel related.
2020-06-06 09:00:52 -07:00
Kurt
3af369c152 ★Sgr6879 (Copperajah) 2020-06-05 07:31:40 -07:00
Kurt
321a2d120f Add new distribution raids
Add Copperajah crystal (commented); uncomment when released?
2020-06-02 07:09:49 -07:00
Kurt
16c9865505 Update EncounterStatic8N.cs 2020-06-01 14:07:26 -07:00