mirror of
https://github.com/kwsch/pk3DS.git
synced 2026-08-03 10:09:35 -05:00
120 lines
3.8 KiB
C#
120 lines
3.8 KiB
C#
using System;
|
|
using System.IO;
|
|
|
|
namespace pk3DS.Core.Structures
|
|
{
|
|
public class Move
|
|
{
|
|
public byte Type, Quality, Category, Power, Accuracy, PP, Priority, InflictPercent,
|
|
HitMin, HitMax, TurnMin, TurnMax, CritStage, Flinch, Recoil, Targeting,
|
|
Stat1, Stat2, Stat3,
|
|
Stat1Stage, Stat2Stage, Stat3Stage,
|
|
Stat1Percent, Stat2Percent, Stat3Percent;
|
|
|
|
public Heal Healing;
|
|
public ushort Inflict, Effect;
|
|
public byte _0xB, _0x1E, _0x1F, _0x20, _0x21;
|
|
public Move(byte[] data)
|
|
{
|
|
Type = data[0];
|
|
Quality = data[1];
|
|
Category = data[2];
|
|
Power = data[3];
|
|
Accuracy = data[4];
|
|
PP = data[5];
|
|
Priority = data[6];
|
|
HitMin = (byte)(data[7] & 0xF);
|
|
HitMax = (byte)(data[7] >> 4);
|
|
Inflict = BitConverter.ToUInt16(data, 0x8);
|
|
InflictPercent = data[0xA];
|
|
_0xB = data[0xB];
|
|
TurnMin = data[0xC];
|
|
TurnMax = data[0xD];
|
|
CritStage = data[0xE];
|
|
Flinch = data[0xF];
|
|
Effect = BitConverter.ToUInt16(data, 0x10);
|
|
Recoil = data[0x12];
|
|
Healing = new Heal(data[0x13]);
|
|
Targeting = data[0x14];
|
|
Stat1 = data[0x15];
|
|
Stat2 = data[0x16];
|
|
Stat3 = data[0x17];
|
|
Stat1Stage = data[0x18];
|
|
Stat2Stage = data[0x19];
|
|
Stat3Stage = data[0x1A];
|
|
Stat1Percent = data[0x1B];
|
|
Stat2Percent = data[0x1C];
|
|
Stat3Percent = data[0x1D];
|
|
_0x1E = data[0x1E];
|
|
_0x1F = data[0x1F];
|
|
_0x20 = data[0x20];
|
|
_0x21 = data[0x21];
|
|
}
|
|
public byte[] Write()
|
|
{
|
|
using (MemoryStream ms = new MemoryStream())
|
|
using (BinaryWriter bw = new BinaryWriter(ms))
|
|
{
|
|
bw.Write(Type);
|
|
bw.Write(Quality);
|
|
bw.Write(Category);
|
|
bw.Write(Power);
|
|
bw.Write(Accuracy);
|
|
bw.Write(PP);
|
|
bw.Write(Priority);
|
|
bw.Write((byte)(HitMin | (HitMax << 4)));
|
|
bw.Write(Inflict);
|
|
bw.Write(InflictPercent);
|
|
bw.Write(_0xB);
|
|
bw.Write(TurnMin);
|
|
bw.Write(TurnMax);
|
|
bw.Write(CritStage);
|
|
bw.Write(Flinch);
|
|
bw.Write(Effect);
|
|
bw.Write(Recoil);
|
|
bw.Write(Healing.Write());
|
|
bw.Write(Targeting);
|
|
bw.Write(Stat1);
|
|
bw.Write(Stat2);
|
|
bw.Write(Stat3);
|
|
bw.Write(Stat1Stage);
|
|
bw.Write(Stat2Stage);
|
|
bw.Write(Stat3Stage);
|
|
bw.Write(Stat1Percent);
|
|
bw.Write(Stat2Percent);
|
|
bw.Write(Stat3Percent);
|
|
bw.Write(_0x1E);
|
|
bw.Write(_0x1F);
|
|
bw.Write(_0x20);
|
|
bw.Write(_0x21);
|
|
return ms.ToArray();
|
|
}
|
|
}
|
|
public class Heal
|
|
{
|
|
public byte Val;
|
|
public bool Full, Half, Quarter, Value;
|
|
public Heal(byte val)
|
|
{
|
|
Val = val;
|
|
Full = Val == 0xFF;
|
|
Half = Val == 0xFE;
|
|
Quarter = Val == 0xFD;
|
|
Value = Val < 0xFD;
|
|
}
|
|
public byte Write()
|
|
{
|
|
if (Value)
|
|
return Val;
|
|
if (Full)
|
|
return 0xFF;
|
|
if (Half)
|
|
return 0xFE;
|
|
if (Quarter)
|
|
return 0xFD;
|
|
return Val;
|
|
}
|
|
}
|
|
}
|
|
}
|