public override bool Equals(object obj)
        {
            if (obj == null || GetType() != obj.GetType())
            {
                return(false);
            }
            if (ReferenceEquals(this, obj))
            {
                return(true);
            }

            CrazyhouseDetailedMove move = (CrazyhouseDetailedMove)obj;

            if (move.IsDrop != IsDrop)
            {
                return(false);
            }

            if (!move.IsDrop)
            {
                return(OriginalPosition.Equals(move.OriginalPosition) &&
                       NewPosition.Equals(move.NewPosition) &&
                       Player == move.Player &&
                       Promotion == move.Promotion &&
                       Piece == move.Piece &&
                       IsCapture == move.IsCapture &&
                       Castling == move.Castling);
            }
            else
            {
                return(Player == move.Player && Drop.Equals(move.Drop));
            }
        }
 protected virtual void AddDetailedMove(CrazyhouseDetailedMove cdm)
 {
     base.AddDetailedMove(cdm);
 }