Populate learnsets on Trainer Moves check

This commit is contained in:
Miguel Terol Espino 2024-03-17 21:07:53 +01:00
parent 2e8a44343e
commit e4552f0dd5
2 changed files with 53 additions and 4 deletions

View File

@ -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++) {

View File

@ -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);