diff --git a/pk3DS/Structs.cs b/pk3DS/Structs.cs index 401012a..5d6bd1f 100644 --- a/pk3DS/Structs.cs +++ b/pk3DS/Structs.cs @@ -433,7 +433,7 @@ public class Learnset public Learnset(byte[] data) { if (data.Length < 4 || data.Length % 4 != 0) return; // Detect invalid files, weakly. - int Count = (data.Length / 4) - 1; + Count = (data.Length / 4) - 1; Moves = new short[Count]; Levels = new short[Count]; using (BinaryReader br = new BinaryReader(new MemoryStream(data))) @@ -479,9 +479,11 @@ public EggMoves(byte[] data) public byte[] Write() { Count = (ushort)Moves.Length; + if (Count == 0) return new byte[0]; using (MemoryStream ms = new MemoryStream()) using (BinaryWriter bw = new BinaryWriter(ms)) { + bw.Write(Count); for (int i = 0; i < Count; i++) bw.Write(Moves[i]); diff --git a/pk3DS/Subforms/EggMove.cs b/pk3DS/Subforms/EggMove.cs index 97bfa66..0eb3f7c 100644 --- a/pk3DS/Subforms/EggMove.cs +++ b/pk3DS/Subforms/EggMove.cs @@ -52,6 +52,8 @@ private void setupDGV() } dgv.Columns.Add(dgvMove); } + + private EggMoves pkm = new EggMoves(new byte[0]); private void getList() { entry = Util.getIndex(CB_Species); @@ -63,13 +65,13 @@ private void getList() dgv.Rows.Clear(); byte[] input = File.ReadAllBytes(files[entry]); if (input.Length == 0) return; - int count = BitConverter.ToUInt16(input, 0); - if (count < 1) { File.WriteAllBytes(files[entry], new byte[0]); return; } - dgv.Rows.Add(count); + pkm = new EggMoves(input); + if (pkm.Count < 1) { File.WriteAllBytes(files[entry], new byte[0]); return; } + dgv.Rows.Add(pkm.Count); // Fill Entries - for (int i = 0; i < count; i++) - dgv.Rows[i].Cells[0].Value = movelist[BitConverter.ToUInt16(input, 2 + i * 2)]; + for (int i = 0; i < pkm.Count; i++) + dgv.Rows[i].Cells[0].Value = movelist[pkm.Moves[i]]; dgv.CancelEdit(); } @@ -82,13 +84,9 @@ private void setList() int move = Array.IndexOf(movelist, dgv.Rows[i].Cells[0].Value); if (move > 0) moves.Add((ushort)move); } - ushort[] movevals = moves.ToArray(); if (movevals.Length == 0) { File.WriteAllBytes(files[entry], new byte[0]); return; } - byte[] movedata = new byte[2 + movevals.Length * 2]; - Array.Copy(BitConverter.GetBytes((ushort)movevals.Length), movedata, 2); - for (int i = 0; i < movevals.Length; i++) - Array.Copy(BitConverter.GetBytes(movevals[i]), 0, movedata, 2 + 2 * i, 2); + pkm.Moves = moves.ToArray(); - File.WriteAllBytes(files[entry], movedata); + File.WriteAllBytes(files[entry], pkm.Write()); } private void changeEntry(object sender, EventArgs e) diff --git a/pk3DS/Subforms/LevelUp.cs b/pk3DS/Subforms/LevelUp.cs index 9654171..a01848c 100644 --- a/pk3DS/Subforms/LevelUp.cs +++ b/pk3DS/Subforms/LevelUp.cs @@ -62,6 +62,8 @@ private void setupDGV() dgv.Columns.Add(dgvLevel); dgv.Columns.Add(dgvMove); } + + private Learnset pkm; private void getList() { entry = Util.getIndex(CB_Species); @@ -73,27 +75,15 @@ private void getList() dgv.Rows.Clear(); byte[] input = File.ReadAllBytes(files[entry]); if (input.Length <= 4) { File.WriteAllBytes(files[entry], BitConverter.GetBytes(-1)); return; } + pkm = new Learnset(input); - List moves = new List(); - List levels = new List(); - for (int i = 0; i < (input.Length / 4) - 1; i++) - { - short move = BitConverter.ToInt16(input, i * 4); - if (move < 0) continue; - - moves.Add(move); - levels.Add(input[i * 4 + 2]); - } - short[] moveList = moves.ToArray(); - byte[] levelList = levels.ToArray(); - - dgv.Rows.Add(moveList.Length); + dgv.Rows.Add(pkm.Count); // Fill Entries - for (int i = 0; i < moveList.Length; i++) + for (int i = 0; i < pkm.Count; i++) { - dgv.Rows[i].Cells[0].Value = levelList[i]; - dgv.Rows[i].Cells[1].Value = movelist[moveList[i]]; + dgv.Rows[i].Cells[0].Value = pkm.Levels[i]; + dgv.Rows[i].Cells[1].Value = movelist[pkm.Moves[i]]; } dgv.CancelEdit(); @@ -101,35 +91,24 @@ private void getList() private void setList() { if (entry < 1 || dumping) return; - List moves = new List(); - List levels = new List(); + List moves = new List(); + List levels = new List(); for (int i = 0; i < dgv.Rows.Count - 1; i++) { int move = Array.IndexOf(movelist, dgv.Rows[i].Cells[1].Value); if (move < 1) continue; - moves.Add((ushort)move); + moves.Add((short)move); string level = (dgv.Rows[i].Cells[0].Value ?? 0).ToString(); - ushort lv; - UInt16.TryParse(level, out lv); + short lv; + Int16.TryParse(level, out lv); if (lv > 100) lv = 100; else if (lv == 0) lv = 1; levels.Add(lv); } - ushort[] movevals = moves.ToArray(); if (movevals.Length == 0) { File.WriteAllBytes(files[entry], BitConverter.GetBytes(-1)); return; } - ushort[] levelvals = levels.ToArray(); - - byte[] data = new byte[4 + 4 * movevals.Length]; - for (int i = 0; i < movevals.Length; i++) - { - Array.Copy(BitConverter.GetBytes(movevals[i]), 0, data, 4 * i, 2); - Array.Copy(BitConverter.GetBytes(levelvals[i]), 0, data, 2 + 4 * i, 2); - } - - // Cap data - Array.Copy(BitConverter.GetBytes(-1), 0, data, data.Length - 4, 4); - - File.WriteAllBytes(files[entry], data); + pkm.Moves = moves.ToArray(); + pkm.Levels = levels.ToArray(); + File.WriteAllBytes(files[entry], pkm.Write()); } private void changeEntry(object sender, EventArgs e) diff --git a/pk3DS/pk3DS.csproj b/pk3DS/pk3DS.csproj index d24b18b..20552dd 100644 --- a/pk3DS/pk3DS.csproj +++ b/pk3DS/pk3DS.csproj @@ -67,9 +67,7 @@ - - Form - + Form