pkmn-classic-framework/library/Structures/BattleVideoHeader5.cs
Greg Edwards 4198aace33 For fuck's sake mysql
Workaround LAST_INSERT_ID and CAST limitations by making all primary keys unsigned bigint.
Workaround LAST_INSERT_ID signed/unsigned inconsistency between 5.5 and 5.6 by using Convert.ToUInt64 instead of casts.
2014-07-22 12:04:31 -04:00

140 lines
3.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PkmnFoundations.Structures
{
public class BattleVideoHeader5
{
public BattleVideoHeader5()
{
}
public BattleVideoHeader5(int pid, ulong serial_number, byte[] data)
{
if (data.Length != 196) throw new ArgumentException("Battle video header data must be 196 bytes.");
PID = pid;
SerialNumber = serial_number;
Data = data;
}
// todo: encapsulate these so calculated fields are always correct
public int PID;
public ulong SerialNumber;
public byte[] Data;
public ushort Streak
{
get
{
return BitConverter.ToUInt16(Data, 0xa4);
}
}
public ushort[] Party
{
get
{
ushort[] result = new ushort[12];
for (int x = 0; x < result.Length; x++)
{
result[x] = BitConverter.ToUInt16(Data, 0x80 + x * 2);
}
return result;
}
}
public byte[] TrainerName
{
get
{
byte[] result = new byte[16];
Array.Copy(Data, 0, result, 0, 16);
return result;
}
}
public BattleVideoMetagames5 Metagame
{
get
{
return (BattleVideoMetagames5)Data[0xa6];
}
}
public byte Country
{
get
{
return Data[0x17];
}
}
public byte Region
{
get
{
return Data[0x18];
}
}
public BattleVideoHeader5 Clone()
{
return new BattleVideoHeader5(PID, SerialNumber, Data.ToArray());
}
}
public enum BattleVideoMetagames5 : byte
{
ColosseumSingleNoLauncher = 0x18,
ColosseumDoubleNoLauncher = 0x19,
ColosseumTripleNoLauncher = 0x1a,
ColosseumRotationNoLauncher = 0x1b,
ColosseumMultiNoLauncher = 0x1c,
ColosseumSingleLauncher = 0x98,
ColosseumDoubleLauncher = 0x99,
ColosseumTripleLauncher = 0x9a,
ColosseumRotationLauncher = 0x9b,
ColosseumMultiLauncher = 0x9c,
BattleSubwaySingle = 0x00,
BattleSubwayDouble = 0x01,
BattleSubwayMulti = 0x04,
RandomMatchupSingle = 0x28,
RandomMatchupDouble = 0x29,
RandomMatchupTriple = 0x2a,
RandomMatchupRotation = 0x2b,
RandomMatchupLauncher = 0xaa,
RatingSingle = 0x68,
RatingDouble = 0x69,
RatingTriple = 0x6a,
RatingRotation = 0x6b,
BattleCompetitionSingle = 0x38,
BattleCompetitionDouble = 0x39,
BattleCompetitionTriple = 0x3a,
BattleCompetitionRotation = 0x3b,
SearchBattleCompetition = 0x38,
// This is not a legal value in either a search or a record.
// I'm using it to indicate that no search is being done
// (byte 0x148 in the search is 0).
// Otherwise, the value 00 collides with Battle Subway Single
// which is a legitimate search.
SearchNone = 0xff,
}
public enum BattleVideoRankings5 : uint
{
None = 0x00000000,
Newest30 = 0x00000001,
LinkBattles = 0x00000003,
SubwayBattles = 0x00000002,
}
}