Update move data exporting clarity

#352
This commit is contained in:
Kurt
2018-08-21 20:00:53 -07:00
parent cecc49a928
commit dcae5d5da0
13 changed files with 291 additions and 103 deletions

View File

@@ -158,12 +158,12 @@ public void InitializeMoves()
{
case 6:
if (XY)
Moves = GARCMoves.Files.Select(file => new Move(file)).ToArray();
Moves = GARCMoves.Files.Select(file => new Move6(file)).ToArray();
if (ORAS)
Moves = Mini.UnpackMini(GARCMoves.getFile(0), "WD").Select(file => new Move(file)).ToArray();
Moves = Mini.UnpackMini(GARCMoves.getFile(0), "WD").Select(file => new Move6(file)).ToArray();
break;
case 7:
Moves = Mini.UnpackMini(GARCMoves.getFile(0), "WD").Select(file => new Move(file)).ToArray();
Moves = Mini.UnpackMini(GARCMoves.getFile(0), "WD").Select(file => new Move7(file)).ToArray();
break;
}
}

View File

@@ -1,98 +0,0 @@
using System;
namespace pk3DS.Core.Structures
{
public class Move
{
private const int SIZE = 0x22;
private readonly byte[] Data;
public Move() => Data = new byte[SIZE];
public Move(byte[] data) => Data = data ?? new byte[SIZE];
public byte[] Write() => Data;
public int Type { get => Data[0x00]; set => Data[0x00] = (byte)value; }
public int Quality { get => Data[0x01]; set => Data[0x01] = (byte)value; }
public int Category { get => Data[0x02]; set => Data[0x02] = (byte)value; }
public int Power { get => Data[0x03]; set => Data[0x03] = (byte)value; }
public int Accuracy { get => Data[0x04]; set => Data[0x04] = (byte)value; }
public int PP { get => Data[0x05]; set => Data[0x05] = (byte)value; }
public int Priority { get => Data[0x06]; set => Data[0x06] = (byte)value; }
public int HitMin { get => Data[0x07] & 0xF; set => Data[0x07] = (byte)(HitMax << 4 | value); }
public int HitMax { get => Data[0x07] >> 4; set => Data[0x07] = (byte)(value << 4 | HitMin); }
public int Inflict { get => BitConverter.ToUInt16(Data, 0x08); set => BitConverter.GetBytes((ushort)value).CopyTo(Data, 0x08); }
public int InflictPercent { get => Data[0x0A]; set => Data[0x0A] = (byte)value; }
public MoveInflictDuration InflictCount { get => (MoveInflictDuration)Data[0x0B]; set => Data[0x0B] = (byte)value; }
public int TurnMin { get => Data[0x0C]; set => Data[0x0C] = (byte)value; }
public int TurnMax { get => Data[0x0D]; set => Data[0x0D] = (byte)value; }
public int CritStage { get => Data[0x0E]; set => Data[0x0E] = (byte)value; }
public int Flinch { get => Data[0x0F]; set => Data[0x0F] = (byte)value; }
public int EffectSequence { get => BitConverter.ToUInt16(Data, 0x10); set => BitConverter.GetBytes((ushort)value).CopyTo(Data, 0x10); }
public int Recoil { get => Data[0x12]; set => Data[0x12] = (byte)value; }
public Heal Healing { get => (Heal)Data[0x13]; set => Data[0x13] = (byte)value; }
public MoveTarget Target { get => (MoveTarget)Data[0x14]; set => Data[0x14] = (byte)value; }
public int Stat1 { get => Data[0x15]; set => Data[0x15] = (byte)value; }
public int Stat2 { get => Data[0x16]; set => Data[0x16] = (byte)value; }
public int Stat3 { get => Data[0x17]; set => Data[0x17] = (byte)value; }
public int Stat1Stage { get => Data[0x18]; set => Data[0x18] = (byte)value; }
public int Stat2Stage { get => Data[0x19]; set => Data[0x19] = (byte)value; }
public int Stat3Stage { get => Data[0x1A]; set => Data[0x1A] = (byte)value; }
public int Stat1Percent { get => Data[0x1B]; set => Data[0x1B] = (byte)value; }
public int Stat2Percent { get => Data[0x1C]; set => Data[0x1C] = (byte)value; }
public int Stat3Percent { get => Data[0x1D]; set => Data[0x1D] = (byte)value; }
public MoveFlag Flags { get => (MoveFlag)BitConverter.ToUInt32(Data, 0x1E); set => BitConverter.GetBytes((uint)value).CopyTo(Data, 0x1E); }
public enum Heal : byte
{
None = 0,
Full = 255,
Half = 254,
Quarter = 253,
}
}
public enum MoveInflictDuration
{
None = 0,
Permanent,
TurnCount,
Unused,
Switch,
};
public enum MoveTarget : byte
{
// Specific target
AnyExceptSelf,
AllyOrSelf,
Ally,
Opponent,
AllAdjacent,
AllAdjacentOpponents,
AllAllies,
Self,
All,
RandomOpponent,
// No pkm target
SideAll,
SideOpponent,
SideSelf,
Counter,
}
[Flags]
public enum MoveFlag : uint
{
None,
// TBD
}
public static class MoveFlagExtensions
{
public static bool HasFlagFast(this MoveFlag value, MoveFlag flag)
{
return (value & flag) != 0;
}
}
}

View File

@@ -0,0 +1,10 @@
namespace pk3DS.Core.Structures
{
public enum Heal : byte
{
None = 0,
Full = 255,
Half = 254,
Quarter = 253,
}
}

View File

@@ -0,0 +1,41 @@
namespace pk3DS.Core.Structures
{
public abstract class Move
{
protected readonly byte[] Data;
protected abstract int SIZE { get; }
protected Move(byte[] data = null) => Data = data ?? new byte[SIZE];
public byte[] Write() => Data;
public abstract int Type { get; set; }
public abstract int Quality { get; set; }
public abstract int Category { get; set; }
public abstract int Power { get; set; }
public abstract int Accuracy { get; set; }
public abstract int PP { get; set; }
public abstract int Priority { get; set; }
public abstract int HitMin { get; set; }
public abstract int HitMax { get; set; }
public abstract int Inflict { get; set; }
public abstract int InflictPercent { get; set; }
public abstract MoveInflictDuration InflictCount { get; set; }
public abstract int TurnMin { get; set; }
public abstract int TurnMax { get; set; }
public abstract int CritStage { get; set; }
public abstract int Flinch { get; set; }
public abstract int EffectSequence { get; set; }
public abstract int Recoil { get; set; }
public abstract Heal Healing { get; set; }
public abstract MoveTarget Target { get; set; }
public abstract int Stat1 { get; set; }
public abstract int Stat2 { get; set; }
public abstract int Stat3 { get; set; }
public abstract int Stat1Stage { get; set; }
public abstract int Stat2Stage { get; set; }
public abstract int Stat3Stage { get; set; }
public abstract int Stat1Percent { get; set; }
public abstract int Stat2Percent { get; set; }
public abstract int Stat3Percent { get; set; }
}
}

View File

@@ -0,0 +1,43 @@
using System;
namespace pk3DS.Core.Structures
{
public class Move6 : Move
{
protected override int SIZE => 0x22;
public Move6(){}
public Move6(byte[] data = null) : base(data) { }
public override int Type { get => Data[0x00]; set => Data[0x00] = (byte)value; }
public override int Quality { get => Data[0x01]; set => Data[0x01] = (byte)value; }
public override int Category { get => Data[0x02]; set => Data[0x02] = (byte)value; }
public override int Power { get => Data[0x03]; set => Data[0x03] = (byte)value; }
public override int Accuracy { get => Data[0x04]; set => Data[0x04] = (byte)value; }
public override int PP { get => Data[0x05]; set => Data[0x05] = (byte)value; }
public override int Priority { get => Data[0x06]; set => Data[0x06] = (byte)value; }
public override int HitMin { get => Data[0x07] & 0xF; set => Data[0x07] = (byte)(HitMax << 4 | value); }
public override int HitMax { get => Data[0x07] >> 4; set => Data[0x07] = (byte)(value << 4 | HitMin); }
public override int Inflict { get => BitConverter.ToUInt16(Data, 0x08); set => BitConverter.GetBytes((ushort)value).CopyTo(Data, 0x08); }
public override int InflictPercent { get => Data[0x0A]; set => Data[0x0A] = (byte)value; }
public override MoveInflictDuration InflictCount { get => (MoveInflictDuration)Data[0x0B]; set => Data[0x0B] = (byte)value; }
public override int TurnMin { get => Data[0x0C]; set => Data[0x0C] = (byte)value; }
public override int TurnMax { get => Data[0x0D]; set => Data[0x0D] = (byte)value; }
public override int CritStage { get => Data[0x0E]; set => Data[0x0E] = (byte)value; }
public override int Flinch { get => Data[0x0F]; set => Data[0x0F] = (byte)value; }
public override int EffectSequence { get => BitConverter.ToUInt16(Data, 0x10); set => BitConverter.GetBytes((ushort)value).CopyTo(Data, 0x10); }
public override int Recoil { get => Data[0x12]; set => Data[0x12] = (byte)value; }
public override Heal Healing { get => (Heal)Data[0x13]; set => Data[0x13] = (byte)value; }
public override MoveTarget Target { get => (MoveTarget)Data[0x14]; set => Data[0x14] = (byte)value; }
public override int Stat1 { get => Data[0x15]; set => Data[0x15] = (byte)value; }
public override int Stat2 { get => Data[0x16]; set => Data[0x16] = (byte)value; }
public override int Stat3 { get => Data[0x17]; set => Data[0x17] = (byte)value; }
public override int Stat1Stage { get => Data[0x18]; set => Data[0x18] = (byte)value; }
public override int Stat2Stage { get => Data[0x19]; set => Data[0x19] = (byte)value; }
public override int Stat3Stage { get => Data[0x1A]; set => Data[0x1A] = (byte)value; }
public override int Stat1Percent { get => Data[0x1B]; set => Data[0x1B] = (byte)value; }
public override int Stat2Percent { get => Data[0x1C]; set => Data[0x1C] = (byte)value; }
public override int Stat3Percent { get => Data[0x1D]; set => Data[0x1D] = (byte)value; }
public MoveFlag6 Flags { get => (MoveFlag6)BitConverter.ToUInt32(Data, 0x1E); set => BitConverter.GetBytes((uint)value).CopyTo(Data, 0x1E); }
}
}

View File

@@ -0,0 +1,51 @@
using System;
namespace pk3DS.Core.Structures
{
public class Move7 : Move
{
protected override int SIZE => 0x28;
public Move7() { }
public Move7(byte[] data = null) : base(data) { }
public override int Type { get => Data[0x00]; set => Data[0x00] = (byte)value; }
public override int Quality { get => Data[0x01]; set => Data[0x01] = (byte)value; }
public override int Category { get => Data[0x02]; set => Data[0x02] = (byte)value; }
public override int Power { get => Data[0x03]; set => Data[0x03] = (byte)value; }
public override int Accuracy { get => Data[0x04]; set => Data[0x04] = (byte)value; }
public override int PP { get => Data[0x05]; set => Data[0x05] = (byte)value; }
public override int Priority { get => Data[0x06]; set => Data[0x06] = (byte)value; }
public override int HitMin { get => Data[0x07] & 0xF; set => Data[0x07] = (byte)(HitMax << 4 | value); }
public override int HitMax { get => Data[0x07] >> 4; set => Data[0x07] = (byte)(value << 4 | HitMin); }
public override int Inflict { get => BitConverter.ToUInt16(Data, 0x08); set => BitConverter.GetBytes((ushort)value).CopyTo(Data, 0x08); }
public override int InflictPercent { get => Data[0x0A]; set => Data[0x0A] = (byte)value; }
public override MoveInflictDuration InflictCount { get => (MoveInflictDuration)Data[0x0B]; set => Data[0x0B] = (byte)value; }
public override int TurnMin { get => Data[0x0C]; set => Data[0x0C] = (byte)value; }
public override int TurnMax { get => Data[0x0D]; set => Data[0x0D] = (byte)value; }
public override int CritStage { get => Data[0x0E]; set => Data[0x0E] = (byte)value; }
public override int Flinch { get => Data[0x0F]; set => Data[0x0F] = (byte)value; }
public override int EffectSequence { get => BitConverter.ToUInt16(Data, 0x10); set => BitConverter.GetBytes((ushort)value).CopyTo(Data, 0x10); }
public override int Recoil { get => Data[0x12]; set => Data[0x12] = (byte)value; }
public override Heal Healing { get => (Heal)Data[0x13]; set => Data[0x13] = (byte)value; }
public override MoveTarget Target { get => (MoveTarget)Data[0x14]; set => Data[0x14] = (byte)value; }
public override int Stat1 { get => Data[0x15]; set => Data[0x15] = (byte)value; }
public override int Stat2 { get => Data[0x16]; set => Data[0x16] = (byte)value; }
public override int Stat3 { get => Data[0x17]; set => Data[0x17] = (byte)value; }
public override int Stat1Stage { get => Data[0x18]; set => Data[0x18] = (byte)value; }
public override int Stat2Stage { get => Data[0x19]; set => Data[0x19] = (byte)value; }
public override int Stat3Stage { get => Data[0x1A]; set => Data[0x1A] = (byte)value; }
public override int Stat1Percent { get => Data[0x1B]; set => Data[0x1B] = (byte)value; }
public override int Stat2Percent { get => Data[0x1C]; set => Data[0x1C] = (byte)value; }
public override int Stat3Percent { get => Data[0x1D]; set => Data[0x1D] = (byte)value; }
public int ZMove { get => BitConverter.ToUInt16(Data, 0x1E); set => BitConverter.GetBytes((ushort)value).CopyTo(Data, 0x1E); } // 32
public int ZPower { get => Data[0x20]; set => Data[0x20] = (byte)value; } // 33
public int ZEffect { get => Data[0x21]; set => Data[0x21] = (byte)value; } // 34
public int Z3 { get => Data[0x22]; set => Data[0x22] = (byte)value; } // 35
public int ZPercent { get => Data[0x23]; set => Data[0x23] = (byte)value; } // 36
public MoveFlag7 Flags { get => (MoveFlag7)BitConverter.ToUInt32(Data, 0x24); set => BitConverter.GetBytes((uint)value).CopyTo(Data, 0x24); }
}
}

View File

@@ -0,0 +1,46 @@
using System;
namespace pk3DS.Core.Structures
{
[Flags]
public enum MoveFlag6 : uint
{
None,
F01 = 1u << 00,
F02 = 1u << 01,
F03 = 1u << 02,
F04 = 1u << 03,
F05 = 1u << 04,
F06 = 1u << 05,
F07 = 1u << 06,
F08 = 1u << 07,
F09 = 1u << 08,
F10 = 1u << 09,
F11 = 1u << 10,
F12 = 1u << 11,
F13 = 1u << 12,
F14 = 1u << 13,
F15 = 1u << 14,
F16 = 1u << 15,
F17 = 1u << 16,
F18 = 1u << 17,
F19 = 1u << 18,
F20 = 1u << 19,
F21 = 1u << 20,
F22 = 1u << 21,
F23 = 1u << 22,
F24 = 1u << 23,
F25 = 1u << 24,
F26 = 1u << 25,
F27 = 1u << 26,
F28 = 1u << 27,
F29 = 1u << 28,
F30 = 1u << 29,
F31 = 1u << 30,
F32 = 1u << 31,
}
}

View File

@@ -0,0 +1,46 @@
using System;
namespace pk3DS.Core.Structures
{
[Flags]
public enum MoveFlag7 : uint
{
None,
F01 = 1u << 00,
F02 = 1u << 01,
F03 = 1u << 02,
F04 = 1u << 03,
F05 = 1u << 04,
F06 = 1u << 05,
F07 = 1u << 06,
F08 = 1u << 07,
F09 = 1u << 08,
F10 = 1u << 09,
F11 = 1u << 10,
F12 = 1u << 11,
F13 = 1u << 12,
F14 = 1u << 13,
F15 = 1u << 14,
F16 = 1u << 15,
F17 = 1u << 16,
F18 = 1u << 17,
F19 = 1u << 18,
F20 = 1u << 19,
F21 = 1u << 20,
F22 = 1u << 21,
F23 = 1u << 22,
F24 = 1u << 23,
F25 = 1u << 24,
F26 = 1u << 25,
F27 = 1u << 26,
F28 = 1u << 27,
F29 = 1u << 28,
F30 = 1u << 29,
F31 = 1u << 30,
F32 = 1u << 31,
}
}

View File

@@ -0,0 +1,15 @@
namespace pk3DS.Core.Structures
{
public static class MoveFlagExtensions
{
public static bool HasFlagFast(this MoveFlag6 value, MoveFlag6 flag)
{
return (value & flag) != 0;
}
public static bool HasFlagFast(this MoveFlag7 value, MoveFlag7 flag)
{
return (value & flag) != 0;
}
}
}

View File

@@ -0,0 +1,11 @@
namespace pk3DS.Core.Structures
{
public enum MoveInflictDuration
{
None = 0,
Permanent,
TurnCountSwitch,
PermanentSwitch,
TurnCountNoSwitch,
};
}

View File

@@ -0,0 +1,23 @@
namespace pk3DS.Core.Structures
{
public enum MoveTarget : byte
{
// Specific target
AnyExceptSelf,
AllyOrSelf,
Ally,
Opponent,
AllAdjacent,
AllAdjacentOpponents,
AllAllies,
Self,
All,
RandomOpponent,
// No pkm target
SideAll,
SideOpponent,
SideSelf,
Counter,
}
}

View File

@@ -168,7 +168,7 @@ private void SetEntry()
private void B_Table_Click(object sender, EventArgs e)
{
var items = files.Select(z => new Move(z));
var items = files.Select(z => new Move6(z));
Clipboard.SetText(TableUtil.GetTable(items, movelist));
System.Media.SystemSounds.Asterisk.Play();
}

View File

@@ -174,7 +174,7 @@ private void CloseForm(object sender, FormClosingEventArgs e)
private void B_Table_Click(object sender, EventArgs e)
{
var items = files.Select(z => new Move(z));
var items = files.Select(z => new Move7(z));
Clipboard.SetText(TableUtil.GetTable(items, movelist));
System.Media.SystemSounds.Asterisk.Play();
}