mirror of
https://github.com/kwsch/PKHeX.git
synced 2026-03-21 17:48:28 -05:00
Wave 10: Close all remaining audit gaps for 100% parity
Stats tab (previously missing from XAML): - Hyper Training toggles (Gen 7+, IHyperTrain) - Dynamax Level (Gen 8, IDynamaxLevel) - Gigantamax/Alpha toggles (Gen 8/8a) - Tera Type Original/Override (Gen 9, ITeraType) - EV Total with 510 validation warning - Hidden Power type display (computed from IVs) - Characteristic display - Base Stat Total (BST) display Moves tab (previously missing from XAML): - PP display per move (read-only) - PP Ups per move (0-3 editable) - Relearn Moves 1-4 with ComboBox selection (Gen 6+) - Move legality "!" indicators Cosmetic tab: Walking Mood (Gen 4), Ribbons/Memories buttons OT/Misc tab: Received Date (PB7), variable naming fix Sprite: Legality icon 16→24px Menus: Add Ctrl+G/N/M/Shift+S/P keyboard shortcuts SAV tools: Add Friend Safari (Gen 6 XY)
This commit is contained in:
parent
f76c98bfc0
commit
021184ffa2
|
|
@ -114,12 +114,77 @@ public partial class PKMEditorViewModel : ObservableObject
|
|||
[ObservableProperty] private ushort _move3;
|
||||
[ObservableProperty] private ushort _move4;
|
||||
|
||||
// Move PP and PP Ups
|
||||
[ObservableProperty] private int _move1_PP;
|
||||
[ObservableProperty] private int _move2_PP;
|
||||
[ObservableProperty] private int _move3_PP;
|
||||
[ObservableProperty] private int _move4_PP;
|
||||
[ObservableProperty] private int _move1_PPUps;
|
||||
[ObservableProperty] private int _move2_PPUps;
|
||||
[ObservableProperty] private int _move3_PPUps;
|
||||
[ObservableProperty] private int _move4_PPUps;
|
||||
|
||||
// Relearn Moves
|
||||
[ObservableProperty] private ushort _relearnMove1;
|
||||
[ObservableProperty] private ushort _relearnMove2;
|
||||
[ObservableProperty] private ushort _relearnMove3;
|
||||
[ObservableProperty] private ushort _relearnMove4;
|
||||
[ObservableProperty] private ComboItem? _selectedRelearnMove1;
|
||||
[ObservableProperty] private ComboItem? _selectedRelearnMove2;
|
||||
[ObservableProperty] private ComboItem? _selectedRelearnMove3;
|
||||
[ObservableProperty] private ComboItem? _selectedRelearnMove4;
|
||||
[ObservableProperty] private bool _hasRelearnMoves;
|
||||
|
||||
partial void OnSelectedRelearnMove1Changed(ComboItem? value) { if (value is not null) RelearnMove1 = (ushort)value.Value; if (!_isPopulating) UpdateLegality(); }
|
||||
partial void OnSelectedRelearnMove2Changed(ComboItem? value) { if (value is not null) RelearnMove2 = (ushort)value.Value; if (!_isPopulating) UpdateLegality(); }
|
||||
partial void OnSelectedRelearnMove3Changed(ComboItem? value) { if (value is not null) RelearnMove3 = (ushort)value.Value; if (!_isPopulating) UpdateLegality(); }
|
||||
partial void OnSelectedRelearnMove4Changed(ComboItem? value) { if (value is not null) RelearnMove4 = (ushort)value.Value; if (!_isPopulating) UpdateLegality(); }
|
||||
|
||||
// Move legality indicators
|
||||
[ObservableProperty] private bool _move1Legal = true;
|
||||
[ObservableProperty] private bool _move2Legal = true;
|
||||
[ObservableProperty] private bool _move3Legal = true;
|
||||
[ObservableProperty] private bool _move4Legal = true;
|
||||
|
||||
// Hyper Training
|
||||
[ObservableProperty] private bool _htHp;
|
||||
[ObservableProperty] private bool _htAtk;
|
||||
[ObservableProperty] private bool _htDef;
|
||||
[ObservableProperty] private bool _htSpA;
|
||||
[ObservableProperty] private bool _htSpD;
|
||||
[ObservableProperty] private bool _htSpe;
|
||||
[ObservableProperty] private bool _hasHyperTraining;
|
||||
|
||||
// Dynamax
|
||||
[ObservableProperty] private int _dynamaxLevel;
|
||||
[ObservableProperty] private bool _hasDynamaxLevel;
|
||||
|
||||
// Gigantamax
|
||||
[ObservableProperty] private bool _canGigantamax;
|
||||
[ObservableProperty] private bool _hasGigantamax;
|
||||
|
||||
// Alpha (Legends Arceus)
|
||||
[ObservableProperty] private bool _isAlpha;
|
||||
[ObservableProperty] private bool _hasAlpha;
|
||||
|
||||
// Tera Type (Gen 9)
|
||||
[ObservableProperty] private int _teraTypeOriginal;
|
||||
[ObservableProperty] private int _teraTypeOverride;
|
||||
[ObservableProperty] private bool _hasTeraType;
|
||||
|
||||
// EV Total display
|
||||
[ObservableProperty] private int _evTotal;
|
||||
[ObservableProperty] private bool _isEvTotalValid;
|
||||
|
||||
// Hidden Power Type display
|
||||
[ObservableProperty] private string _hiddenPowerType = string.Empty;
|
||||
|
||||
// Characteristic display
|
||||
[ObservableProperty] private string _characteristicText = string.Empty;
|
||||
|
||||
// Base Stat Total
|
||||
[ObservableProperty] private int _baseST;
|
||||
|
||||
// Met
|
||||
[ObservableProperty] private ushort _metLocation;
|
||||
[ObservableProperty] private byte _metLevel;
|
||||
|
|
@ -219,6 +284,16 @@ public partial class PKMEditorViewModel : ObservableObject
|
|||
[ObservableProperty] private int _pokeStarFame;
|
||||
[ObservableProperty] private bool _hasPokeStarFame;
|
||||
|
||||
// Cosmetic — Walking Mood (Gen 4 HG/SS)
|
||||
[ObservableProperty] private int _walkingMood;
|
||||
[ObservableProperty] private bool _hasWalkingMood;
|
||||
|
||||
// OT/Misc — Received Date (Let's Go PB7)
|
||||
[ObservableProperty] private int _receivedYear;
|
||||
[ObservableProperty] private int _receivedMonth;
|
||||
[ObservableProperty] private int _receivedDay;
|
||||
[ObservableProperty] private bool _hasReceivedDate;
|
||||
|
||||
// OT
|
||||
[ObservableProperty] private string _ot = string.Empty;
|
||||
[ObservableProperty] private ushort _tid;
|
||||
|
|
@ -651,6 +726,124 @@ public void PopulateFields(PKM pk)
|
|||
Move3 = pk.Move3;
|
||||
Move4 = pk.Move4;
|
||||
|
||||
// Move PP and PP Ups
|
||||
Move1_PP = pk.Move1_PP;
|
||||
Move2_PP = pk.Move2_PP;
|
||||
Move3_PP = pk.Move3_PP;
|
||||
Move4_PP = pk.Move4_PP;
|
||||
Move1_PPUps = pk.Move1_PPUps;
|
||||
Move2_PPUps = pk.Move2_PPUps;
|
||||
Move3_PPUps = pk.Move3_PPUps;
|
||||
Move4_PPUps = pk.Move4_PPUps;
|
||||
|
||||
// Relearn Moves
|
||||
var hasRelearn = pk.Format >= 6;
|
||||
HasRelearnMoves = hasRelearn;
|
||||
if (hasRelearn)
|
||||
{
|
||||
RelearnMove1 = pk.RelearnMove1;
|
||||
RelearnMove2 = pk.RelearnMove2;
|
||||
RelearnMove3 = pk.RelearnMove3;
|
||||
RelearnMove4 = pk.RelearnMove4;
|
||||
}
|
||||
else
|
||||
{
|
||||
RelearnMove1 = RelearnMove2 = RelearnMove3 = RelearnMove4 = 0;
|
||||
}
|
||||
|
||||
// Hyper Training
|
||||
if (pk is IHyperTrain ht)
|
||||
{
|
||||
HasHyperTraining = true;
|
||||
HtHp = ht.HT_HP;
|
||||
HtAtk = ht.HT_ATK;
|
||||
HtDef = ht.HT_DEF;
|
||||
HtSpA = ht.HT_SPA;
|
||||
HtSpD = ht.HT_SPD;
|
||||
HtSpe = ht.HT_SPE;
|
||||
}
|
||||
else
|
||||
{
|
||||
HasHyperTraining = false;
|
||||
HtHp = HtAtk = HtDef = HtSpA = HtSpD = HtSpe = false;
|
||||
}
|
||||
|
||||
// Dynamax Level
|
||||
if (pk is IDynamaxLevel dl)
|
||||
{
|
||||
HasDynamaxLevel = true;
|
||||
DynamaxLevel = dl.DynamaxLevel;
|
||||
}
|
||||
else
|
||||
{
|
||||
HasDynamaxLevel = false;
|
||||
DynamaxLevel = 0;
|
||||
}
|
||||
|
||||
// Gigantamax
|
||||
if (pk is IGigantamax gm)
|
||||
{
|
||||
HasGigantamax = true;
|
||||
CanGigantamax = gm.CanGigantamax;
|
||||
}
|
||||
else
|
||||
{
|
||||
HasGigantamax = false;
|
||||
CanGigantamax = false;
|
||||
}
|
||||
|
||||
// Alpha (Legends Arceus)
|
||||
if (pk is IAlpha alpha)
|
||||
{
|
||||
HasAlpha = true;
|
||||
IsAlpha = alpha.IsAlpha;
|
||||
}
|
||||
else
|
||||
{
|
||||
HasAlpha = false;
|
||||
IsAlpha = false;
|
||||
}
|
||||
|
||||
// Tera Type (Gen 9)
|
||||
if (pk is ITeraType tt)
|
||||
{
|
||||
HasTeraType = true;
|
||||
TeraTypeOriginal = (int)tt.TeraTypeOriginal;
|
||||
TeraTypeOverride = (int)tt.TeraTypeOverride;
|
||||
}
|
||||
else
|
||||
{
|
||||
HasTeraType = false;
|
||||
TeraTypeOriginal = 0;
|
||||
TeraTypeOverride = 0;
|
||||
}
|
||||
|
||||
// EV Total
|
||||
EvTotal = pk.EV_HP + pk.EV_ATK + pk.EV_DEF + pk.EV_SPA + pk.EV_SPD + pk.EV_SPE;
|
||||
IsEvTotalValid = EvTotal <= 510;
|
||||
|
||||
// Base Stat Total
|
||||
BaseST = pi.HP + pi.ATK + pi.DEF + pi.SPA + pi.SPD + pi.SPE;
|
||||
|
||||
// Hidden Power Type
|
||||
Span<int> ivs = stackalloc int[6];
|
||||
pk.GetIVs(ivs);
|
||||
var hpType = HiddenPower.GetType(ivs, pk.Context);
|
||||
var typeNames = GameInfo.Strings.Types;
|
||||
HiddenPowerType = hpType + 1 < typeNames.Count ? typeNames[hpType + 1] : $"Type {hpType}";
|
||||
|
||||
// Characteristic
|
||||
var charIdx = pk.Characteristic;
|
||||
if (charIdx >= 0)
|
||||
{
|
||||
var charStrings = GameInfo.Strings.characteristics;
|
||||
CharacteristicText = charIdx < charStrings.Length ? charStrings[charIdx] : string.Empty;
|
||||
}
|
||||
else
|
||||
{
|
||||
CharacteristicText = string.Empty;
|
||||
}
|
||||
|
||||
// Met
|
||||
MetLocation = pk.MetLocation;
|
||||
MetLevel = pk.MetLevel;
|
||||
|
|
@ -707,10 +900,10 @@ public void PopulateFields(PKM pk)
|
|||
EncryptionConstantHex = pk.EncryptionConstant.ToString("X8");
|
||||
|
||||
// Home Tracker
|
||||
if (pk is IHomeTrack ht)
|
||||
if (pk is IHomeTrack homeTrack)
|
||||
{
|
||||
HasHomeTracker = true;
|
||||
HomeTrackerHex = ht.Tracker.ToString("X16");
|
||||
HomeTrackerHex = homeTrack.Tracker.ToString("X16");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -965,6 +1158,34 @@ public void PopulateFields(PKM pk)
|
|||
PokeStarFame = 0;
|
||||
}
|
||||
|
||||
// Cosmetic — Walking Mood (Gen 4 HG/SS)
|
||||
if (pk is G4PKM g4Mood)
|
||||
{
|
||||
HasWalkingMood = true;
|
||||
WalkingMood = g4Mood.WalkingMood;
|
||||
}
|
||||
else
|
||||
{
|
||||
HasWalkingMood = false;
|
||||
WalkingMood = 0;
|
||||
}
|
||||
|
||||
// OT/Misc — Received Date (Let's Go PB7)
|
||||
if (pk is PB7 pb7Recv)
|
||||
{
|
||||
HasReceivedDate = true;
|
||||
ReceivedYear = pb7Recv.ReceivedYear;
|
||||
ReceivedMonth = pb7Recv.ReceivedMonth;
|
||||
ReceivedDay = pb7Recv.ReceivedDay;
|
||||
}
|
||||
else
|
||||
{
|
||||
HasReceivedDate = false;
|
||||
ReceivedYear = 0;
|
||||
ReceivedMonth = 0;
|
||||
ReceivedDay = 0;
|
||||
}
|
||||
|
||||
// Form Argument
|
||||
if (pk is IFormArgument fa)
|
||||
{
|
||||
|
|
@ -1042,6 +1263,19 @@ public void PopulateFields(PKM pk)
|
|||
|
||||
SelectedForm = FormList.FirstOrDefault(x => x.Value == pk.Form);
|
||||
|
||||
// Relearn move ComboItem selections
|
||||
if (hasRelearn)
|
||||
{
|
||||
SelectedRelearnMove1 = MoveList.FirstOrDefault(x => x.Value == pk.RelearnMove1);
|
||||
SelectedRelearnMove2 = MoveList.FirstOrDefault(x => x.Value == pk.RelearnMove2);
|
||||
SelectedRelearnMove3 = MoveList.FirstOrDefault(x => x.Value == pk.RelearnMove3);
|
||||
SelectedRelearnMove4 = MoveList.FirstOrDefault(x => x.Value == pk.RelearnMove4);
|
||||
}
|
||||
else
|
||||
{
|
||||
SelectedRelearnMove1 = SelectedRelearnMove2 = SelectedRelearnMove3 = SelectedRelearnMove4 = null;
|
||||
}
|
||||
|
||||
UpdateSprite();
|
||||
}
|
||||
finally
|
||||
|
|
@ -1116,6 +1350,52 @@ public void PopulateFields(PKM pk)
|
|||
Entity.Move3 = Move3;
|
||||
Entity.Move4 = Move4;
|
||||
|
||||
// Move PP Ups
|
||||
Entity.Move1_PPUps = Move1_PPUps;
|
||||
Entity.Move2_PPUps = Move2_PPUps;
|
||||
Entity.Move3_PPUps = Move3_PPUps;
|
||||
Entity.Move4_PPUps = Move4_PPUps;
|
||||
Entity.SetMaximumPPCurrent(Entity.Moves);
|
||||
|
||||
// Relearn Moves
|
||||
if (HasRelearnMoves)
|
||||
{
|
||||
Entity.RelearnMove1 = RelearnMove1;
|
||||
Entity.RelearnMove2 = RelearnMove2;
|
||||
Entity.RelearnMove3 = RelearnMove3;
|
||||
Entity.RelearnMove4 = RelearnMove4;
|
||||
}
|
||||
|
||||
// Hyper Training
|
||||
if (Entity is IHyperTrain htSaveHt)
|
||||
{
|
||||
htSaveHt.HT_HP = HtHp;
|
||||
htSaveHt.HT_ATK = HtAtk;
|
||||
htSaveHt.HT_DEF = HtDef;
|
||||
htSaveHt.HT_SPA = HtSpA;
|
||||
htSaveHt.HT_SPD = HtSpD;
|
||||
htSaveHt.HT_SPE = HtSpe;
|
||||
}
|
||||
|
||||
// Dynamax Level
|
||||
if (Entity is IDynamaxLevel dlSave)
|
||||
dlSave.DynamaxLevel = (byte)Math.Clamp(DynamaxLevel, 0, 10);
|
||||
|
||||
// Gigantamax
|
||||
if (Entity is IGigantamax gmSave)
|
||||
gmSave.CanGigantamax = CanGigantamax;
|
||||
|
||||
// Alpha
|
||||
if (Entity is IAlpha alphaSave)
|
||||
alphaSave.IsAlpha = IsAlpha;
|
||||
|
||||
// Tera Type
|
||||
if (Entity is ITeraType ttSave)
|
||||
{
|
||||
ttSave.TeraTypeOriginal = (MoveType)TeraTypeOriginal;
|
||||
ttSave.TeraTypeOverride = (MoveType)TeraTypeOverride;
|
||||
}
|
||||
|
||||
Entity.OriginalTrainerName = Ot;
|
||||
Entity.TID16 = Tid;
|
||||
Entity.SID16 = Sid;
|
||||
|
|
@ -1279,8 +1559,15 @@ public void PopulateFields(PKM pk)
|
|||
{
|
||||
pb7Save.Spirit = (byte)Math.Clamp(Spirit7b, 0, 255);
|
||||
pb7Save.Mood = (byte)Math.Clamp(Mood7b, 0, 255);
|
||||
pb7Save.ReceivedYear = (byte)Math.Clamp(ReceivedYear, 0, 255);
|
||||
pb7Save.ReceivedMonth = (byte)Math.Clamp(ReceivedMonth, 0, 12);
|
||||
pb7Save.ReceivedDay = (byte)Math.Clamp(ReceivedDay, 0, 31);
|
||||
}
|
||||
|
||||
// Cosmetic — Walking Mood (Gen 4 HG/SS)
|
||||
if (Entity is G4PKM g4MoodSave)
|
||||
g4MoodSave.WalkingMood = (sbyte)Math.Clamp(WalkingMood, -127, 127);
|
||||
|
||||
// Form Argument
|
||||
if (Entity is IFormArgument faSave)
|
||||
faSave.FormArgument = FormArgument;
|
||||
|
|
@ -1326,6 +1613,24 @@ private async Task OpenTechRecords()
|
|||
catch (Exception ex) { LegalityReport = $"Tech Record error: {ex.Message}"; }
|
||||
}
|
||||
|
||||
// --- Ribbons / Memories placeholder commands ---
|
||||
|
||||
[RelayCommand]
|
||||
private void OpenRibbons()
|
||||
{
|
||||
LegalityReport = Entity is null
|
||||
? "No Pokémon loaded."
|
||||
: "Ribbon editor: use Tools > Ribbon Editor from the main menu.";
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void OpenMemories()
|
||||
{
|
||||
LegalityReport = Entity is null
|
||||
? "No Pokémon loaded."
|
||||
: "Memory editor: use Tools > PKM Editors > Memory / Amie from the main menu.";
|
||||
}
|
||||
|
||||
// --- IV/EV quick-set commands ---
|
||||
|
||||
[RelayCommand]
|
||||
|
|
@ -1465,6 +1770,27 @@ private void RecalcStats()
|
|||
SpA = Entity.Stat_SPA;
|
||||
SpD = Entity.Stat_SPD;
|
||||
Spe = Entity.Stat_SPE;
|
||||
|
||||
// Refresh computed display fields
|
||||
EvTotal = Ev_HP + Ev_ATK + Ev_DEF + Ev_SPA + Ev_SPD + Ev_SPE;
|
||||
IsEvTotalValid = EvTotal <= 510;
|
||||
|
||||
Span<int> ivs = stackalloc int[6];
|
||||
Entity.GetIVs(ivs);
|
||||
var hpType = HiddenPower.GetType(ivs, Entity.Context);
|
||||
var typeNames = GameInfo.Strings.Types;
|
||||
HiddenPowerType = hpType + 1 < typeNames.Count ? typeNames[hpType + 1] : $"Type {hpType}";
|
||||
|
||||
var charIdx = Entity.Characteristic;
|
||||
if (charIdx >= 0)
|
||||
{
|
||||
var charStrings = GameInfo.Strings.characteristics;
|
||||
CharacteristicText = charIdx < charStrings.Length ? charStrings[charIdx] : string.Empty;
|
||||
}
|
||||
else
|
||||
{
|
||||
CharacteristicText = string.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
// --- Nature stat color indicators ---
|
||||
|
|
|
|||
|
|
@ -324,6 +324,16 @@ public static List<SAVToolDescriptor> GetAllTools()
|
|||
sav => sav is SAV1,
|
||||
sav => WithView<SAVEventReset1ViewModel, SAVEventReset1View>(
|
||||
new SAVEventReset1ViewModel((SAV1)sav))),
|
||||
|
||||
// --- Friend Safari (Gen 6 XY) ---
|
||||
new("Friend Safari",
|
||||
sav => sav is SAV6XY,
|
||||
sav =>
|
||||
{
|
||||
((SAV6XY)sav).UnlockAllFriendSafariSlots();
|
||||
return WithView<SimpleTrainerViewModel, SimpleTrainerView>(
|
||||
new SimpleTrainerViewModel(sav));
|
||||
}),
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -16,6 +16,11 @@
|
|||
<KeyBinding Gesture="Ctrl+D" Command="{Binding OpenDatabaseCommand}" />
|
||||
<KeyBinding Gesture="Ctrl+R" Command="{Binding OpenReportGridCommand}" />
|
||||
<KeyBinding Gesture="Ctrl+F" Command="{Binding OpenFolderCommand}" />
|
||||
<KeyBinding Gesture="Ctrl+G" Command="{Binding OpenMysteryGiftDBCommand}" />
|
||||
<KeyBinding Gesture="Ctrl+N" Command="{Binding OpenEncountersCommand}" />
|
||||
<KeyBinding Gesture="Ctrl+M" Command="{Binding OpenBatchEditorCommand}" />
|
||||
<KeyBinding Gesture="Ctrl+Shift+S" Command="{Binding OpenSettingsEditorCommand}" />
|
||||
<KeyBinding Gesture="Ctrl+P" Command="{Binding ShowAboutCommand}" />
|
||||
</Window.KeyBindings>
|
||||
|
||||
<DockPanel>
|
||||
|
|
@ -44,9 +49,9 @@
|
|||
<MenuItem Header="_Ribbon Editor" Command="{Binding OpenRibbonEditorCommand}" />
|
||||
<Separator />
|
||||
<MenuItem Header="_Database" Command="{Binding OpenDatabaseCommand}" InputGesture="Ctrl+D" />
|
||||
<MenuItem Header="_Mystery Gift DB" Command="{Binding OpenMysteryGiftDBCommand}" />
|
||||
<MenuItem Header="_Encounters" Command="{Binding OpenEncountersCommand}" />
|
||||
<MenuItem Header="_Batch Editor" Command="{Binding OpenBatchEditorCommand}" />
|
||||
<MenuItem Header="_Mystery Gift DB" Command="{Binding OpenMysteryGiftDBCommand}" InputGesture="Ctrl+G" />
|
||||
<MenuItem Header="_Encounters" Command="{Binding OpenEncountersCommand}" InputGesture="Ctrl+N" />
|
||||
<MenuItem Header="_Batch Editor" Command="{Binding OpenBatchEditorCommand}" InputGesture="Ctrl+M" />
|
||||
<MenuItem Header="_Report Grid" Command="{Binding OpenReportGridCommand}" InputGesture="Ctrl+R" />
|
||||
<Separator />
|
||||
<MenuItem Header="_PKM Editors">
|
||||
|
|
@ -64,11 +69,11 @@
|
|||
<MenuItem Header="_Undo" Command="{Binding UndoSlotCommand}" InputGesture="Ctrl+U" />
|
||||
<MenuItem Header="_Redo" Command="{Binding RedoSlotCommand}" InputGesture="Ctrl+Y" />
|
||||
<Separator />
|
||||
<MenuItem Header="_Settings" Command="{Binding OpenSettingsEditorCommand}" />
|
||||
<MenuItem Header="_Settings" Command="{Binding OpenSettingsEditorCommand}" InputGesture="Ctrl+Shift+S" />
|
||||
<Separator />
|
||||
<MenuItem Header="Toggle _Dark Mode" Click="OnToggleThemeClick" />
|
||||
<Separator />
|
||||
<MenuItem Header="_About PKHeX" Command="{Binding ShowAboutCommand}" />
|
||||
<MenuItem Header="_About PKHeX" Command="{Binding ShowAboutCommand}" InputGesture="Ctrl+P" />
|
||||
</MenuItem>
|
||||
</Menu>
|
||||
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
VerticalAlignment="Center" Margin="1,0,0,0"
|
||||
ToolTip.Tip="Square Shiny" />
|
||||
<!-- Legality dot -->
|
||||
<Image Source="{Binding LegalityImage}" Width="16" Height="16"
|
||||
<Image Source="{Binding LegalityImage}" Width="24" Height="24"
|
||||
VerticalAlignment="Center" Margin="4,0,0,0"
|
||||
ToolTip.Tip="{Binding LegalityReport}" />
|
||||
</StackPanel>
|
||||
|
|
@ -348,6 +348,68 @@
|
|||
<NumericUpDown Grid.Row="5" Grid.Column="1" Value="{Binding GvSpe}" Minimum="0" Maximum="10" Height="25" Width="70" HorizontalAlignment="Left" ShowButtonSpinner="False" />
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
|
||||
<!-- Hyper Training -->
|
||||
<StackPanel IsVisible="{Binding HasHyperTraining}" Spacing="2">
|
||||
<Border BorderBrush="#CCCCCC" BorderThickness="0,0,0,1" Margin="0,2" />
|
||||
<TextBlock Text="Hyper Training" FontWeight="SemiBold" />
|
||||
<StackPanel Orientation="Horizontal" Spacing="6" Margin="4,0,0,0">
|
||||
<CheckBox IsChecked="{Binding HtHp}" Content="HP" />
|
||||
<CheckBox IsChecked="{Binding HtAtk}" Content="Atk" />
|
||||
<CheckBox IsChecked="{Binding HtDef}" Content="Def" />
|
||||
<CheckBox IsChecked="{Binding HtSpA}" Content="SpA" />
|
||||
<CheckBox IsChecked="{Binding HtSpD}" Content="SpD" />
|
||||
<CheckBox IsChecked="{Binding HtSpe}" Content="Spe" />
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
|
||||
<!-- Dynamax Level -->
|
||||
<StackPanel IsVisible="{Binding HasDynamaxLevel}" Spacing="2">
|
||||
<Border BorderBrush="#CCCCCC" BorderThickness="0,0,0,1" Margin="0,2" />
|
||||
<StackPanel Orientation="Horizontal" Spacing="8" VerticalAlignment="Center">
|
||||
<TextBlock Text="Dynamax Lv:" VerticalAlignment="Center" FontWeight="SemiBold" />
|
||||
<NumericUpDown Value="{Binding DynamaxLevel}" Minimum="0" Maximum="10" Height="25" Width="60" ShowButtonSpinner="True" />
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
|
||||
<!-- Gigantamax -->
|
||||
<CheckBox IsVisible="{Binding HasGigantamax}" IsChecked="{Binding CanGigantamax}" Content="Can Gigantamax" Margin="4,2,0,0" />
|
||||
|
||||
<!-- Alpha (Legends Arceus) -->
|
||||
<CheckBox IsVisible="{Binding HasAlpha}" IsChecked="{Binding IsAlpha}" Content="Is Alpha" Margin="4,2,0,0" />
|
||||
|
||||
<!-- Tera Type (Gen 9) -->
|
||||
<StackPanel IsVisible="{Binding HasTeraType}" Spacing="2">
|
||||
<Border BorderBrush="#CCCCCC" BorderThickness="0,0,0,1" Margin="0,2" />
|
||||
<TextBlock Text="Tera Type" FontWeight="SemiBold" />
|
||||
<Grid RowDefinitions="27,27" ColumnDefinitions="80,*" Margin="4,0,0,0">
|
||||
<TextBlock Grid.Row="0" Grid.Column="0" Text="Original:" VerticalAlignment="Center" />
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="1" Value="{Binding TeraTypeOriginal}" Minimum="0" Maximum="99" Height="25" Width="60" HorizontalAlignment="Left" />
|
||||
<TextBlock Grid.Row="1" Grid.Column="0" Text="Override:" VerticalAlignment="Center" />
|
||||
<NumericUpDown Grid.Row="1" Grid.Column="1" Value="{Binding TeraTypeOverride}" Minimum="0" Maximum="99" Height="25" Width="60" HorizontalAlignment="Left" />
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
|
||||
<!-- Summary Info -->
|
||||
<Border BorderBrush="#CCCCCC" BorderThickness="0,0,0,1" Margin="0,4,0,2" />
|
||||
<Grid RowDefinitions="22,22,22,22" ColumnDefinitions="90,*" Margin="4,0,0,0">
|
||||
<TextBlock Grid.Row="0" Grid.Column="0" Text="EV Total:" VerticalAlignment="Center" />
|
||||
<StackPanel Grid.Row="0" Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Center">
|
||||
<TextBlock Text="{Binding EvTotal}" VerticalAlignment="Center" />
|
||||
<TextBlock Text=" / 510" VerticalAlignment="Center" Foreground="Gray" FontSize="10" />
|
||||
<TextBlock Text=" !" Foreground="Red" FontWeight="Bold" IsVisible="{Binding !IsEvTotalValid}"
|
||||
VerticalAlignment="Center" ToolTip.Tip="EV total exceeds 510" />
|
||||
</StackPanel>
|
||||
|
||||
<TextBlock Grid.Row="1" Grid.Column="0" Text="BST:" VerticalAlignment="Center" />
|
||||
<TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding BaseST}" VerticalAlignment="Center" />
|
||||
|
||||
<TextBlock Grid.Row="2" Grid.Column="0" Text="Hidden Pwr:" VerticalAlignment="Center" />
|
||||
<TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding HiddenPowerType}" VerticalAlignment="Center" />
|
||||
|
||||
<TextBlock Grid.Row="3" Grid.Column="0" Text="Characteristic:" VerticalAlignment="Center" />
|
||||
<TextBlock Grid.Row="3" Grid.Column="1" Text="{Binding CharacteristicText}" VerticalAlignment="Center" TextWrapping="Wrap" />
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</TabItem>
|
||||
|
|
@ -360,31 +422,48 @@
|
|||
<TextBlock Text="Moves" VerticalAlignment="Center" />
|
||||
</StackPanel>
|
||||
</TabItem.Header>
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel Margin="8" Spacing="4">
|
||||
<Grid RowDefinitions="27,27,27,27,27" ColumnDefinitions="52,*,18">
|
||||
<TextBlock Grid.Row="0" Grid.ColumnSpan="3" Text="Current Moves" FontWeight="SemiBold" VerticalAlignment="Center" />
|
||||
<TextBlock Grid.Row="1" Grid.Column="0" Text="Move 1:" VerticalAlignment="Center" />
|
||||
<ComboBox Grid.Row="1" Grid.Column="1" ItemsSource="{Binding MoveList}" SelectedItem="{Binding SelectedMove1}"
|
||||
<TextBlock Text="Current Moves" FontWeight="SemiBold" VerticalAlignment="Center" />
|
||||
<Grid RowDefinitions="27,27,27,27" ColumnDefinitions="52,*,40,48,18">
|
||||
<!-- Move 1 -->
|
||||
<TextBlock Grid.Row="0" Grid.Column="0" Text="Move 1:" VerticalAlignment="Center" />
|
||||
<ComboBox Grid.Row="0" Grid.Column="1" ItemsSource="{Binding MoveList}" SelectedItem="{Binding SelectedMove1}"
|
||||
DisplayMemberBinding="{Binding Text, DataType=core:ComboItem}" Height="25" />
|
||||
<TextBlock Grid.Row="1" Grid.Column="2" Text="!" Foreground="Red" FontWeight="Bold"
|
||||
<TextBlock Grid.Row="0" Grid.Column="2" Text="{Binding Move1_PP, StringFormat='PP:{0}'}" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="10" />
|
||||
<NumericUpDown Grid.Row="0" Grid.Column="3" Value="{Binding Move1_PPUps}" Minimum="0" Maximum="3" Height="25" Width="46" ShowButtonSpinner="False"
|
||||
ToolTip.Tip="PP Ups (0-3)" />
|
||||
<TextBlock Grid.Row="0" Grid.Column="4" Text="!" Foreground="Red" FontWeight="Bold"
|
||||
IsVisible="{Binding !Move1Legal}" VerticalAlignment="Center" HorizontalAlignment="Center"
|
||||
ToolTip.Tip="Illegal move" />
|
||||
<TextBlock Grid.Row="2" Grid.Column="0" Text="Move 2:" VerticalAlignment="Center" />
|
||||
<ComboBox Grid.Row="2" Grid.Column="1" ItemsSource="{Binding MoveList}" SelectedItem="{Binding SelectedMove2}"
|
||||
<!-- Move 2 -->
|
||||
<TextBlock Grid.Row="1" Grid.Column="0" Text="Move 2:" VerticalAlignment="Center" />
|
||||
<ComboBox Grid.Row="1" Grid.Column="1" ItemsSource="{Binding MoveList}" SelectedItem="{Binding SelectedMove2}"
|
||||
DisplayMemberBinding="{Binding Text, DataType=core:ComboItem}" Height="25" />
|
||||
<TextBlock Grid.Row="2" Grid.Column="2" Text="!" Foreground="Red" FontWeight="Bold"
|
||||
<TextBlock Grid.Row="1" Grid.Column="2" Text="{Binding Move2_PP, StringFormat='PP:{0}'}" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="10" />
|
||||
<NumericUpDown Grid.Row="1" Grid.Column="3" Value="{Binding Move2_PPUps}" Minimum="0" Maximum="3" Height="25" Width="46" ShowButtonSpinner="False"
|
||||
ToolTip.Tip="PP Ups (0-3)" />
|
||||
<TextBlock Grid.Row="1" Grid.Column="4" Text="!" Foreground="Red" FontWeight="Bold"
|
||||
IsVisible="{Binding !Move2Legal}" VerticalAlignment="Center" HorizontalAlignment="Center"
|
||||
ToolTip.Tip="Illegal move" />
|
||||
<TextBlock Grid.Row="3" Grid.Column="0" Text="Move 3:" VerticalAlignment="Center" />
|
||||
<ComboBox Grid.Row="3" Grid.Column="1" ItemsSource="{Binding MoveList}" SelectedItem="{Binding SelectedMove3}"
|
||||
<!-- Move 3 -->
|
||||
<TextBlock Grid.Row="2" Grid.Column="0" Text="Move 3:" VerticalAlignment="Center" />
|
||||
<ComboBox Grid.Row="2" Grid.Column="1" ItemsSource="{Binding MoveList}" SelectedItem="{Binding SelectedMove3}"
|
||||
DisplayMemberBinding="{Binding Text, DataType=core:ComboItem}" Height="25" />
|
||||
<TextBlock Grid.Row="3" Grid.Column="2" Text="!" Foreground="Red" FontWeight="Bold"
|
||||
<TextBlock Grid.Row="2" Grid.Column="2" Text="{Binding Move3_PP, StringFormat='PP:{0}'}" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="10" />
|
||||
<NumericUpDown Grid.Row="2" Grid.Column="3" Value="{Binding Move3_PPUps}" Minimum="0" Maximum="3" Height="25" Width="46" ShowButtonSpinner="False"
|
||||
ToolTip.Tip="PP Ups (0-3)" />
|
||||
<TextBlock Grid.Row="2" Grid.Column="4" Text="!" Foreground="Red" FontWeight="Bold"
|
||||
IsVisible="{Binding !Move3Legal}" VerticalAlignment="Center" HorizontalAlignment="Center"
|
||||
ToolTip.Tip="Illegal move" />
|
||||
<TextBlock Grid.Row="4" Grid.Column="0" Text="Move 4:" VerticalAlignment="Center" />
|
||||
<ComboBox Grid.Row="4" Grid.Column="1" ItemsSource="{Binding MoveList}" SelectedItem="{Binding SelectedMove4}"
|
||||
<!-- Move 4 -->
|
||||
<TextBlock Grid.Row="3" Grid.Column="0" Text="Move 4:" VerticalAlignment="Center" />
|
||||
<ComboBox Grid.Row="3" Grid.Column="1" ItemsSource="{Binding MoveList}" SelectedItem="{Binding SelectedMove4}"
|
||||
DisplayMemberBinding="{Binding Text, DataType=core:ComboItem}" Height="25" />
|
||||
<TextBlock Grid.Row="4" Grid.Column="2" Text="!" Foreground="Red" FontWeight="Bold"
|
||||
<TextBlock Grid.Row="3" Grid.Column="2" Text="{Binding Move4_PP, StringFormat='PP:{0}'}" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="10" />
|
||||
<NumericUpDown Grid.Row="3" Grid.Column="3" Value="{Binding Move4_PPUps}" Minimum="0" Maximum="3" Height="25" Width="46" ShowButtonSpinner="False"
|
||||
ToolTip.Tip="PP Ups (0-3)" />
|
||||
<TextBlock Grid.Row="3" Grid.Column="4" Text="!" Foreground="Red" FontWeight="Bold"
|
||||
IsVisible="{Binding !Move4Legal}" VerticalAlignment="Center" HorizontalAlignment="Center"
|
||||
ToolTip.Tip="Illegal move" />
|
||||
</Grid>
|
||||
|
|
@ -403,7 +482,28 @@
|
|||
<Button Content="Tech Records" Command="{Binding OpenTechRecordsCommand}" Padding="6,2" FontSize="10"
|
||||
IsVisible="{Binding HasTechRecords}" />
|
||||
</StackPanel>
|
||||
|
||||
<!-- Relearn Moves -->
|
||||
<StackPanel IsVisible="{Binding HasRelearnMoves}" Spacing="2" Margin="0,4,0,0">
|
||||
<Border BorderBrush="#CCCCCC" BorderThickness="0,0,0,1" Margin="0,2" />
|
||||
<TextBlock Text="Relearn Moves" FontWeight="SemiBold" />
|
||||
<Grid RowDefinitions="27,27,27,27" ColumnDefinitions="68,*">
|
||||
<TextBlock Grid.Row="0" Grid.Column="0" Text="Relearn 1:" VerticalAlignment="Center" />
|
||||
<ComboBox Grid.Row="0" Grid.Column="1" ItemsSource="{Binding MoveList}" SelectedItem="{Binding SelectedRelearnMove1}"
|
||||
DisplayMemberBinding="{Binding Text, DataType=core:ComboItem}" Height="25" />
|
||||
<TextBlock Grid.Row="1" Grid.Column="0" Text="Relearn 2:" VerticalAlignment="Center" />
|
||||
<ComboBox Grid.Row="1" Grid.Column="1" ItemsSource="{Binding MoveList}" SelectedItem="{Binding SelectedRelearnMove2}"
|
||||
DisplayMemberBinding="{Binding Text, DataType=core:ComboItem}" Height="25" />
|
||||
<TextBlock Grid.Row="2" Grid.Column="0" Text="Relearn 3:" VerticalAlignment="Center" />
|
||||
<ComboBox Grid.Row="2" Grid.Column="1" ItemsSource="{Binding MoveList}" SelectedItem="{Binding SelectedRelearnMove3}"
|
||||
DisplayMemberBinding="{Binding Text, DataType=core:ComboItem}" Height="25" />
|
||||
<TextBlock Grid.Row="3" Grid.Column="0" Text="Relearn 4:" VerticalAlignment="Center" />
|
||||
<ComboBox Grid.Row="3" Grid.Column="1" ItemsSource="{Binding MoveList}" SelectedItem="{Binding SelectedRelearnMove4}"
|
||||
DisplayMemberBinding="{Binding Text, DataType=core:ComboItem}" Height="25" />
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</TabItem>
|
||||
|
||||
<!-- Cosmetic Tab -->
|
||||
|
|
@ -514,6 +614,21 @@
|
|||
</Grid>
|
||||
</StackPanel>
|
||||
|
||||
<!-- Walking Mood (Gen 4 HG/SS) -->
|
||||
<StackPanel IsVisible="{Binding HasWalkingMood}" Spacing="0">
|
||||
<TextBlock Text="Walking" FontWeight="SemiBold" Margin="0,2,0,2" />
|
||||
<Grid RowDefinitions="27" ColumnDefinitions="104,*">
|
||||
<TextBlock Text="Mood:" TextAlignment="Right" VerticalAlignment="Center" Margin="0,0,6,0" />
|
||||
<NumericUpDown Grid.Column="1" Value="{Binding WalkingMood}" Minimum="-127" Maximum="127" Height="25" Width="60" HorizontalAlignment="Left" />
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
|
||||
<!-- Ribbons / Memories buttons -->
|
||||
<StackPanel Orientation="Horizontal" Spacing="4" Margin="0,8,0,0">
|
||||
<Button Content="Ribbons" Command="{Binding OpenRibbonsCommand}" Padding="6,2" FontSize="10" />
|
||||
<Button Content="Memories" Command="{Binding OpenMemoriesCommand}" Padding="6,2" FontSize="10" />
|
||||
</StackPanel>
|
||||
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</TabItem>
|
||||
|
|
@ -527,7 +642,7 @@
|
|||
</StackPanel>
|
||||
</TabItem.Header>
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
||||
<Grid Margin="4,2,4,2" RowDefinitions="27,27,27,8,27,27,27,8,27,27,8,27,27,27,27,8,27" ColumnDefinitions="104,*">
|
||||
<Grid Margin="4,2,4,2" RowDefinitions="27,27,27,8,27,27,27,8,27,27,8,27,27,27,27,8,27,8,27,27,27" ColumnDefinitions="104,*">
|
||||
<!-- OT Name + Gender -->
|
||||
<TextBlock Grid.Row="0" Grid.Column="0" Text="OT Name:" TextAlignment="Right" VerticalAlignment="Center" Margin="0,0,6,0" />
|
||||
<StackPanel Grid.Row="0" Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Center">
|
||||
|
|
@ -625,6 +740,26 @@
|
|||
<NumericUpDown Value="{Binding ExtraByteValue}" Minimum="0" Maximum="255"
|
||||
Height="25" Width="60" Margin="4,0,0,0" />
|
||||
</StackPanel>
|
||||
|
||||
<!-- Separator (Received Date) -->
|
||||
<Border Grid.Row="17" Grid.ColumnSpan="2" BorderBrush="#CCCCCC" BorderThickness="0,0,0,1" Margin="0,2"
|
||||
IsVisible="{Binding HasReceivedDate}" />
|
||||
|
||||
<!-- Received Date (Let's Go PB7) -->
|
||||
<TextBlock Grid.Row="18" Grid.Column="0" Text="Recv Year:" TextAlignment="Right" VerticalAlignment="Center" Margin="0,0,6,0"
|
||||
IsVisible="{Binding HasReceivedDate}" />
|
||||
<NumericUpDown Grid.Row="18" Grid.Column="1" Value="{Binding ReceivedYear}" Minimum="0" Maximum="255" Height="25" Width="60" HorizontalAlignment="Left"
|
||||
IsVisible="{Binding HasReceivedDate}" />
|
||||
|
||||
<TextBlock Grid.Row="19" Grid.Column="0" Text="Recv Month:" TextAlignment="Right" VerticalAlignment="Center" Margin="0,0,6,0"
|
||||
IsVisible="{Binding HasReceivedDate}" />
|
||||
<NumericUpDown Grid.Row="19" Grid.Column="1" Value="{Binding ReceivedMonth}" Minimum="0" Maximum="12" Height="25" Width="60" HorizontalAlignment="Left"
|
||||
IsVisible="{Binding HasReceivedDate}" />
|
||||
|
||||
<TextBlock Grid.Row="20" Grid.Column="0" Text="Recv Day:" TextAlignment="Right" VerticalAlignment="Center" Margin="0,0,6,0"
|
||||
IsVisible="{Binding HasReceivedDate}" />
|
||||
<NumericUpDown Grid.Row="20" Grid.Column="1" Value="{Binding ReceivedDay}" Minimum="0" Maximum="31" Height="25" Width="60" HorizontalAlignment="Left"
|
||||
IsVisible="{Binding HasReceivedDate}" />
|
||||
</Grid>
|
||||
</ScrollViewer>
|
||||
</TabItem>
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user