Commit Graph

11396 Commits

Author SHA1 Message Date
ScarlettHaze
361f272fef Exclude same gender rival in PokeGear callers for HGSS (#4848)
Added functionality to exclude the opposite-gender rival (self) from PokeGear callers.

* Remove Bike Shop from Pokegear callers list: It's not legally obtainable you only get called once you've used the Bike enough you never get to save it.

* Exclude bike shop in caller list logic

Updated logic to exclude both the rival and bike shop from the caller list.
2026-08-06 22:20:26 -05:00
sora10pls
9be23f2043 Add latest distribution raid/outbreak data 💐 2026-08-06 20:10:37 -04:00
Kurt
18cc30d641 BDSP: move voiceless to PersonalInfo
Better there and now public for anyone to use (why would they want to check that lol)

make the Battle Frontier hashset a ReadOnlySpan;
- since the list is sorted, use BinarySearch to reduce worst case from 43 ops to 6.
- no static ctor in RibbonRules (yay no nanosecond hiccup)

that was the last static HashSet in the repo 👀
2026-08-03 17:22:23 -05:00
Kurt
76307aaa4b BDSP: Condense voiceless array
saves 0.4KB lol
no functional change

update terminology; might not be explicitly "footprint" type, more "footprint man's evaluated type"
https://bulbapedia.bulbagarden.net/wiki/Footprint#Footprint_Ribbon
2026-08-03 17:06:12 -05:00
Kurt
31b4e0a6d8 Join Avenue: fix r/w of shop type
It's stored as a 3-variable value. Decompose & recompose in the GUI.

Closes #4841 -- Raffle is values 1-10, which explains the observed behavior in the issue.
The old GUI would set [-1, 7], if modified to any selected Shop type, results in all being Raffle (incorrect behavior).

By unpacking to separate variables, the 1-321 combinations are user adjustable rather than just showing the raw value for edits. Sure the Version could be localized, and Shop Rank could be [1,10] instead of [0,9]...

ref: https://bulbapedia.bulbagarden.net/wiki/Join_Avenue#Shop_rank
2026-08-03 15:06:51 -05:00
Kurt
09977b448f SAV: update record fallback - use correct global
#4845
2026-08-03 10:39:03 -05:00
Kurt
1f6c3f3fc1 Add .Ball=$rand in batch editor 2026-08-01 17:48:30 -05:00
Kurt
2e64de8e9d ComboBox suggest: Remove dropdown on keydown
Windows.Forms quirk where it don't hide the dropdown when it tries to Suggest via the separate Suggest pop-down.
Since all comboboxes that do the databind+suggest are impacted by this, just add the event when initializing binding. There don't appear to be any reapply-binding cases where it is set to suggest (only case is Battle Revolution save select, which isn't textual entry).

Closes #4846
2026-08-01 10:05:04 -05:00
Kurt
2f9d50308b Revise savefile subversion indication in title
Ensure all have dashes at front
for multiple strings, separate out the GB/VC to a separate tag.

No longer does the program show `SAV3FRLGUGBA` instead of `SAV3FRLG-U [GBA]`, which is a little more transparent to the end user.
2026-07-31 16:50:20 -05:00
Ka-n00b
7890222343 Minor GUI translation updates (#4839) 2026-07-30 00:04:36 -05:00
Kurt
d457fb02ae Update xoro128 solver, channel IV solver
I accidentally reverted my intermediate value sum for the channel solver after I discovered the counterexample -- now with the refinements as detailed in the issue, we can proceed with many `long` => `uint`

The xoroshiro128+ solvers aren't really set up to take advantage of the eager returns; the iterator struct (not class) would have to be made heavier to store the intermediate values for a given `assume`. Probably would have to inline the methods and break out their inner Update steps. Probably not worth the hassle :)

Closes #4844

Co-Authored-By: StarfBerry <65578604+StarfBerry@users.noreply.github.com>
2026-07-29 23:35:02 -05:00
Kurt
ce08c00877 More refinements/impl of lattice reversals
#4844
not yet implemented: xoroshiro algorithmic improvements

overflow counterexample for channel IV reversal regarding s32 vs s64 noted in the github issue

Co-Authored-By: StarfBerry <65578604+StarfBerry@users.noreply.github.com>
2026-07-28 23:48:39 -05:00
Kurt
757a297f14 encdb->pa8: source shiny roll count from save file 2026-07-28 21:54:00 -05:00
abcboy101
b916b06c03 PBR: Fix SetStringUnicodeBR maxLength (#4843)
maxLength is the maximum length in terms of characters, not bytes
2026-07-27 11:14:13 -05:00
Kurt
9ccc5fdc45 Gen4: Remove placeholder area data for bcc/safari
Game has a Ratatta table for the Safari zone that it replaces with the Safari slots.
HG/SS (separately) have Caterpie and Weedle for the National Park fake area when a BCC is active.
Updated pkl includes "correct" safari zone wild encounter rate rather than an encoded "which safari sub-zone" index.
e789757783
2026-07-26 21:47:11 -05:00
Kurt
5cceba5867 Gen4: misc encounter generating fixes
Pt Eggs: use correct learnset table (eevee has swapped moves in dp)
Extract force-hatch routine so that Gen4 eggs can generate as eggs
2026-07-26 21:45:35 -05:00
Kurt
b483ad47f8 gen4 hgss ball: handle traded eggs
turns out pk4 egg => hatch routine recreates the mon, copying only properties they figured were worth copying. guess it's a good way to sanitize out eggs.
since version doesn't update on hatch, we need to be flexible based on detecting which game it actually hatched on (thus, the game it truly was last "created" on.
https://github.com/kwsch/PKHeX/discussions/4842
2026-07-24 22:22:51 -05:00
Kurt
5c9e949c9f hgss: Trim out unused fishing swarm species
cb5a58084a
2026-07-21 21:28:24 -05:00
Kurt
6f717f2359 Add Ranch IV reversal, improved lattice recovery
Introduces the MRNG algorithm and MRNGReversal to model My Pokemon Ranch IV generation, then wires it into Gen4 Ranch gift creation and IV legality checks with a new PIDType.Ranch classification.
Updates the seed-reversal logic in the LCRNG-based recovery methods with more performant lattice-bound implementations and early returns.
Adds more unit tests for Ranch & Channel reversals and expected recovered seed counts/hit-ability.

Refer to the linked LCG_Recovery.py for more details.
https://github.com/StarfBerry/PokeRNG/blob/main/Recovery/LCG_Recovery.py
(big thanks to StarfBerry for the math & documentation; this is merely a port of their work).

From Admiral-Fish's testing for PokeFinder, "shows 17-25% faster. Channel is 12k times faster"
d4512de8dc

Co-Authored-By: StarfBerry <65578604+starfberry@users.noreply.github.com>
2026-07-19 12:49:12 -05:00
Kurt
766b620f65 Minor tweaks
No functional change
2026-07-19 12:12:53 -05:00
Kurt
f901e9753f Update SAVEditor.Designer.cs
increase sav editor button height so 2 rows of text can render if needed
2026-07-19 11:15:51 -05:00
Kurt
c485122ab1 pk5 unit test: fix language on eeveelution
forgot to check unit tests after the recent PGF language/version restrict was added lol
2026-07-19 00:41:09 -05:00
Kurt
773a97c4fd Misc tweaks
Fix outbreak met location suggestion for bit0 set and none in second set
Narrow some api methods, rename some parameters for better clarity
2026-07-18 23:35:49 -05:00
sora10pls
4f7777f1e1 Fix inverted check 2026-07-17 07:25:17 -04:00
sora10pls
24c9e3c31f Add latest distribution raid/outbreak data 🌴🌊 2026-07-16 20:10:51 -04:00
Kurt
9ac42ff269 Gen5: add pgf restrictions scraped from card name
Closes #4837

refer pkl generation code that appends the scraped restriction info to the end of the concatenated bin:
1ae1742acd

other adjustments:
- remove Nature set on pgf->pk5 ctor, already set later in SetPINGA
- ensure sane language/version on ctor, distrust OT if language incompatible (not perfect but better)
2026-07-15 23:00:50 -05:00
Kurt
68b8b8b060 RK4: split handler char count from OT
Needed because RK4 reserves 10char for the handler.
2026-07-15 22:23:01 -05:00
Kurt
a262ea9f3d Relax sanity flagging
Battle Revolution uses more of the sanity flags (probably as quarantine) and the checksum algorithm probably isn't updated/stale. Just ignore it for now.
2026-07-15 08:53:09 -05:00
Kurt
572b4e26fd Entree5: add language restrictions for pgl promos
Fixes #4836 wrt language mismatch
2026-07-14 22:40:08 -05:00
Kurt
1db56ce169 Entree5: Fix early return
Fixes #4836 wrt gender mismatch
2026-07-14 22:39:52 -05:00
Kurt
9a0fdcdcf4 Misc tweaks
No functional change
2026-07-13 22:36:00 -05:00
Kurt
f1ebf585d4 Revert furfrou forms in gen6/7 egg gen
https://projectpokemon.org/home/forums/topic/68093-furfrou-trims-incorrectly-invalidate-relearn-moves-for-legitimate-bred-pok%C3%A9mon-with-egg-moves-gen-7/#comment-300902
2026-07-13 22:33:59 -05:00
Lusamine
add0b51bfa Add all known LZA crossovers 2026-07-13 00:13:15 -05:00
Kurt
6501f0ab46 Update EncounterUtil.cs 2026-07-08 10:08:24 -05:00
Kurt
fcfb50269a Update 26.07.07 26.07.07 2026-07-07 22:07:17 -05:00
Kurt
3c484b5040 RSE: prefer swarm match
special moves and hard to verify vblanks, just prefer the special move source first. I guess it's also the more statistically likely (players using swarms to catch the species that are much less common otherwise?)
2026-07-06 22:53:40 -05:00
Kurt
8c15ee4617 Minor tweaks
Tab indexing in save force loader, some anchoring/visibility preference
Hide SID on Trainer control update when in gen1/2 (refactor miss)
2026-07-06 03:25:36 -05:00
Alex
4965d96ddc Localize additional settings PropertyGrid editors (#4833)
* Localize additional settings PropertyGrid editors

* Handle [Flags] enum with multiple flagged values

* Regenerate translation file

Can be done by pressing CTRL-ALT-D on the Main form when running a debug build of the program.

Also includes new translations for Champions SP stat export for battle templates from an unrelated commit.
2026-07-04 17:06:38 -05:00
Kurt
e579fee9f3 Settings: Switch tabcontrol to ListBox
Little less goofy.
2026-07-03 23:16:46 -05:00
Kurt
48aeee584e Add option to output champions SP on hover
Converts EVs and displays the associated values it would have if transferred to Champions.
2026-07-03 20:16:58 -05:00
Alex
b9d85427cb Localize Settings, About shortcuts, Language menu, and save Block Data editors (#4829)
* Localize Settings PropertyGrid, Language menu, and About shortcuts

- Add PropertyGridLocalization: a TypeDescriptor-based wrapper that
  localizes the Settings editor PropertyGrid using the existing
  lang_*.txt resources - tab names, property display names, categories,
  bool/enum values, dropdown standard values, and expandable object
  summaries. Translated enum/bool text is mapped back to the original
  value on write; ambiguous translations defer to the default converter.
  Providers are registered once per settings instance (tracked via
  ConditionalWeakTable) so repeated openings do not stack providers, and
  the localizer dictionary is swapped on language change.
- Replace the Options -> Language ToolStripComboBox with a regular
  drop-down submenu of checkable language items.
- Load the About window Shortcuts tab from a per-language
  shortcuts_*.txt resource matching the current program language,
  falling back to the English resource when no localized copy exists.
- Add the new translation keys for all 10 supported languages;
  zh-Hans/zh-Hant additionally include translated property names
  (other languages fall back to the raw property name).
- Update shortcuts.txt to reference the current Unicode setting path
  (Options -> Settings -> Display -> Unicode).

* Localize remaining Settings options and SAV Block Data editors

- Settings: add zh display names for the property names, nested type
  names, and settings sections that were previously missing; translate
  GameVersion enum dropdown values in all 10 languages by sourcing each
  language''s own game-name strings (combined versions like RSE/FRLG
  hand-translated for zh, English elsewhere).
- SAV tab Block Data: route all three PropertyGrid editors through
  PropertyGridLocalization - the Simple Editor fallback form (Gen1-4,
  now with a translated title), SAV_Accessor (Gen5-7), and
  SAV_BlockDump8 (Gen8+). Add zh display names for the Gen3 save file
  properties shown in the Simple Editor.

* Localize SAV property view records, plain objects, and Gen3 coverage

- Record types (SaveFileMetadata/SaveFileState) now synthesize localized
  summaries instead of the compiler ToString; plain PKHeX objects without
  a meaningful ToString override show a translatable type name instead of
  the namespace-qualified default (ValueType.ToString is not treated as
  an override).
- Add zh-Hans/zh-Hant keys covering the SAV3 R/S/E/FR/LG property
  surface, nested block types, Memory segments, EntityContext and
  TrainerIDFormat enums, and the checksum-valid value string.

* Translate new localization keys for all supported languages

Replace the English placeholder values and add the previously zh-only
display-name keys with real translations for de/es/es-419/fr/it/ja/ko:
settings tabs, property display names, category/bool/collection values,
enum dropdown values, nested type names, and the SAV block-data
property surface. English keeps the raw property-name display.
Game pair names use each language's official game titles.

* Adjustments for maintenance purposes

Translation key=value pairs are automatically generated and the list grows/trims automatically as elements are added to the GUI. The pull request did not update the reflection traversal of the assembly -- key=values must survive the regeneration process (aka, be traversed automatically or manually) in order to stay in the translation file. It is not a manually curated file for add/remove.

Typename localization not very worthwhile. Property name localization and enums are a value add.

DevUtil crawler now adds enums to the translation file as it discovers them used in a property's type.

Am going to strictly refuse PropertyGrid localization of SaveFile/Accessor property grid displays. There are far too many properties to localize, and the property names are subject to change as the codebase is maintained. Settings are much more "stable" and thus acceptable for property name localization.

Downside: the shortcuts text file was very tedious to update every time I added a new hidden shortcut. A better path forward would be to use attributes on methods to tag them as "hey a shortcut exists here, the hotkeys trigger `behavior` string", and the program dumps them into the shortcut log.

The WinFormsTranslator probably needs to be rewritten to be an object (less primitive obsession) so that it can store multiple kvp sets for a language, and dump them to separate files with specific serializer methods. The GUI localization for form controls can be one, shortcuts another, property grid another. The property grid localization can be better arranged so that LocalizedDescription is alphabetically logged below the PropertyName, and can also have PropertyType if it is class-based.

Too much effort for very little value add, at least for me.

Order tabs in Settings order alphabetically.
Removed non-saved-gameversion selections. Stuff like E/FRLG are currently workarounds for Encounter Templates that shouldn't use GameVersion like that. I have a long-term goal to eventually remove the lumped GameVersion values entirely, and have a GameVersionRestriction enum specific for each game, and an interface that can check if a GameVersion can arise from the restriction.
2026-07-03 19:18:41 -05:00
Kurt
646456f5a0 Minor tweaks 2026-07-03 10:08:12 -05:00
Ka-n00b
eacfdf7ffa Update GUI translations (#4828) 2026-06-28 23:54:56 -05:00
Kurt
404d89b57e Add support for game specific fonts
Closes #4493
Future pull requests may be added with other font files to add game-specific font files (such as Gen1/2 having JPN/KOR/INT in the pixelated style like SciresM/Rhydon)

For now, the Control provides via EntityContext. If we need to provide different granularity, maybe another enum would be OK. Possibly add that as a property to IStringConverter.
2026-06-28 23:51:06 -05:00
Kurt
e46ff28b0c VC1/2: Add handling for other-app language trash 2026-06-27 18:29:39 -05:00
Kurt
25e3c4d352 Add Gen1/2=>7 VC pp table & check bypass
ty anubis, santacrab, and Bowarcky for testing & data aggregation

Co-Authored-By: Lusamine <30205550+Lusamine@users.noreply.github.com>
Co-Authored-By: santacrab2 <79347566+santacrab2@users.noreply.github.com>
Co-Authored-By: Bowarcky <54773567+bowarcky@users.noreply.github.com>
2026-06-27 18:02:53 -05:00
Kurt
69ab4e3391 Entree Forest: allow GUI entry of animations 6 & 7
ha ha ha ha ha ha (ha)
Closes #4827
2026-06-25 23:47:51 -05:00
Kurt
8a1e1711eb Misc tweaks
SelectionLength => Select (avoid winapi fetch of SelectionStart), no functional change
Rename DisallowSearch => IsSearchAllowed (check a positive, not a negative)
Fix some stale xmldoc refs
Remove some unused usings
Small preference tweaks (aka resharper yelling at me)
2026-06-25 23:46:16 -05:00
Kurt
17e0b5a707 Add uncaptured differentiation for gen8/9 2026-06-23 02:55:26 -05:00
Kurt
1f556062db Extract common egg location check logic
Handles 658 for mainline-legitimate values (none?), better to be correct.
Adds in a link traded egg checks for unhatched static eggs in Gen6 (previously unchecked)
2026-06-22 23:25:15 -05:00