public Movements(InPacket iPacket) : base() { this.Position = iPacket.ReadPoint(); this.Velocity = iPacket.ReadPoint(); iPacket.Skip(1); // NOTE: Unknown. byte count = iPacket.ReadByte(); while (count-- > 0) { Movement movement = new Movement(); movement.Type = (MovementType)iPacket.ReadByte(); switch (movement.Type) { case MovementType.Normal: case MovementType.Unknown5: case MovementType.Unknown15: case MovementType.Unknown17: { movement.Position = iPacket.ReadPoint(); movement.Velocity = iPacket.ReadPoint(); movement.Foothold = iPacket.ReadShort(); this.LastFoothold = movement.Foothold; if (movement.Type != MovementType.Unknown15) { movement.Stance = iPacket.ReadByte(); movement.Duration = iPacket.ReadShort(); } } break; case MovementType.Unknown1: case MovementType.Unknown2: case MovementType.Unknown6: case MovementType.Unknown12: case MovementType.Unknown13: case MovementType.Unknown16: case MovementType.Unknown18: case MovementType.Unknown19: case MovementType.Unknown20: case MovementType.Unknown22: { movement.Velocity = iPacket.ReadPoint(); movement.Stance = iPacket.ReadByte(); movement.Duration = iPacket.ReadShort(); } break; case MovementType.Unknown3: case MovementType.Unknown4: case MovementType.Unknown7: case MovementType.Unknown8: case MovementType.Unknown9: case MovementType.Unknown11: { movement.Position = iPacket.ReadPoint(); movement.Foothold = iPacket.ReadShort(); this.LastFoothold = movement.Foothold; movement.Stance = iPacket.ReadByte(); movement.Duration = iPacket.ReadShort(); } break; case MovementType.Unknown14: { // TODO: Jump down or equipment, not sure. } break; case MovementType.Unknown10: { movement.Statistic = iPacket.ReadByte(); } break; } this.Add(movement); } }