diff --git a/DS_Map/Main Window.cs b/DS_Map/Main Window.cs index 7e7b400..ec9fd25 100644 --- a/DS_Map/Main Window.cs +++ b/DS_Map/Main Window.cs @@ -7792,7 +7792,8 @@ namespace DSPRE { DirNames.trainerGraphics, DirNames.textArchives, DirNames.monIcons, - DirNames.personalPokeData + DirNames.personalPokeData, + DirNames.learnsets }); int numPokemonSpecies = Directory.GetFiles(RomInfo.gameDirs[DirNames.personalPokeData].unpackedDir, "*").Count(); @@ -8171,12 +8172,34 @@ namespace DSPRE { } private void trainerMovesCheckBox_CheckedChanged(object sender, EventArgs e) { - for (int i = 0; i < TrainerFile.POKE_IN_PARTY; i++) { + for (int i = 0; i < TrainerFile.POKE_IN_PARTY; i++) { for (int j = 0; j < Party.MOVES_PER_POKE; j++) { - (partyMovesGroupboxList[i].Controls[j] as ComboBox).Enabled = trainerMovesCheckBox.Checked; + (partyMovesGroupboxList[i].Controls[j] as ComboBox).Enabled = trainerMovesCheckBox.Checked; + } + if (trainerMovesCheckBox.Checked && i < currentTrainerFile.trp.partyCount) { + Helpers.BackUpDisableHandler(); + Helpers.DisableHandlers(); + LearnsetData learnset = new LearnsetData((int)currentTrainerFile.party[i].pokeID); + int level = currentTrainerFile.party[i].level; + currentTrainerFile.party[i].moves = learnset.GetLearnsetAtLevel(level); + Debug.Print("Changing the moves of Pokemon " + i.ToString() + " which is Pokemon " + currentTrainerFile.party[i].pokeID); + Debug.Print("The new moves will be: " + string.Join(", ", currentTrainerFile.party[i].moves)); + for (int j = 0; j < Party.MOVES_PER_POKE; j++) { + (partyMovesGroupboxList[i].Controls[j] as ComboBox).SelectedIndex = currentTrainerFile.party[i].moves[j]; + Debug.Print("Move for dropdwon " + j.ToString() + " is " + currentTrainerFile.party[i].moves[j].ToString()); + } + Helpers.EnableHandlers(); + RefreshTrainerPartyGUI(); + Helpers.RestoreDisableHandler(); + } else { + currentTrainerFile.party[i].moves = null; } - currentTrainerFile.party[i].moves = trainerMovesCheckBox.Checked ? new ushort[Party.MOVES_PER_POKE] : null; } + Helpers.BackUpDisableHandler(); + Helpers.EnableHandlers(); + RefreshTrainerPartyGUI(); + Helpers.RestoreDisableHandler(); + } private void trainerItemsCheckBox_CheckedChanged(object sender, EventArgs e) { for (int i = 0; i < TrainerFile.POKE_IN_PARTY; i++) { diff --git a/DS_Map/ROMFiles/LearnsetData.cs b/DS_Map/ROMFiles/LearnsetData.cs index dc4c95b..ade3efb 100644 --- a/DS_Map/ROMFiles/LearnsetData.cs +++ b/DS_Map/ROMFiles/LearnsetData.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Diagnostics; using System.IO; using DSPRE.ROMFiles; using static DSPRE.RomInfo; @@ -10,6 +11,31 @@ namespace DSPRE { public readonly UniqueList<(byte level, ushort move)> list; + public ushort[] GetLearnsetAtLevel(int atLevel) { + ushort[] learnset = new ushort[4] {0, 0 , 0, 0}; + foreach ((ushort level, ushort move) in list) + { + if (level <= atLevel) + { + if (learnset[0] == 0) { + learnset[0] = move; + } else if (learnset[1] == 0) { + learnset[1] = move; + } else if (learnset[2] == 0) { + learnset[2] = move; + } else if (learnset[3] == 0) { + learnset[3] = move; + } else { + learnset[0] = learnset[1]; + learnset[1] = learnset[2]; + learnset[2] = learnset[3]; + learnset[3] = move; + } + } + } + return learnset; + } + public LearnsetData(Stream stream) { int numEntries = (int)(stream.Length / sizeof(ushort)); list = new UniqueList<(byte level, ushort move)>(numEntries - 1);