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?)
* 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.
* 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.
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.
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)
Show item sprites for TM/HM in inventory editor, just be more general on the Lumped image method
Rework Trainer ID, now updates tooltip as you change TID. Components are separate controls.
Re-flow Chatter editor GUI
Add Experience bar to pkm editor for more visual editing of the EXP. Matches scroll behavior of EXP/Level textboxes.
Exp bar can be hidden via settings.
Reflow inventory editor, gridlines and too-wide sprite column, row select
Make troubleshooting menu items visible for all builds, add localization
Show filename in label for savefile force loader
Run a quick translation of the save troubleshooter (force loader)
Adds a PGL editor GUI
Fleshes out the adventure info block, GTS block, and battle box block; thanks to the PGL DW effort aggregating over 100 save files to give a varied expression of fields :D
Fix SpriteUtil failing to yield an item sprite (due to the split of artwork-item/big-item, the method was never repointed).
fix wishmkr shiny request failing to return correctly; add in ganlon/salac item set
Accessible on release builds too; now joined by the hex-clipboard &Import and the list-pl&Ugins
maybe I'll add these as a visible toolstrip. for now, feature is available to those in-the-know, and who should know-better.
does this allow loading of previous unsupported romhack savefiles? yeah. should it be used to do that? no.
A bit more coherent to see a list of medals rather than one at a time.
Add a few more properties, along with the Habitat List.
Remove maximize box from Join Avenue editor, consistent with other editors.
Pt/HG/SS store the ROMCode, but D/P do not. In D/P, every "get version" function for the ROM is inlined to return a fixed value, not from the save file.
Extract gen3 default trash to trash class & folder
remove erroneous mismatch parse add (should be a pure method)
Set all purchased flags when shift is held
Gen3 LeafGreen french name detection tweaks (both fr & lg contain `feu`)
Gen4: Disable White Flute from boosting BugContest encounters
Fix box export (individual files) not including party data in the bin. Previous behavior would have 00'd party data if not force-calculated. Just calculate party stats if not present for the format. Log Database entity as party format, just to avoid using the Stored format size.
Revise gen2 odd egg declarations to group shiny eggs together, and enforce the Shiny property for object filtering. If IVs are specified, then Shininess property needs to be provided (rather than "random" which is untrue).
Simplify some logic paths for trade1/trade2. Extract some of the nuance of transferred Hiragana Dugtrio so the unit test is xref'd nicely.
Shifted down extrabyte edits a little more for aesthetics.
Move combobox werent as wide as the relearn moves, so +16 to make them match.
update translation resources with latest additions
no functional change
Preview: fix hover card's off-by-one on move index indication.
PB7: Initialize editor's default date-time to a valid value when none present/invalid.
ID32: move to extension block with other methods
PIDVerifier: use xor method from ShinyUtil rather than inlined (can stay inlined elsewhere)
battlepass: revise parens for clarity
Skip repaint on cursor moving the hover window
Cache reference to the slot interaction types and "nothing" slot image
Dispose of slot sprites when updating with a new one
If scrolling box/group, auto-update hover with the newly displayed slot's content instead of hiding