Example #1
0
        private CardTypes CheckIfSceneCard(BinaryReader reader)
        {
            var finderArr = new CardTypeFinder[]
            {
                new CardTypeFinder(CardTypes.KStudio),
                new CardTypeFinder(CardTypes.HoneyStudio),
                new CardTypeFinder(CardTypes.PHStudio),
                new CardTypeFinder(CardTypes.StudioNeo),
                new CardTypeFinder(CardTypes.StudioNEOV2)
            };

            try
            {
                long position = reader.BaseStream.Position;
                foreach (var finder in finderArr)
                {
                    if (finder.Find(reader, true))
                    {
                        reader.Seek(position, SeekOrigin.Begin);
                        return(finder.CardType);
                    }
                }

                reader.Seek(position, SeekOrigin.Begin);
            }
            catch (Exception e)
            {
                System.Diagnostics.Debug.WriteLine(e.Message);
            }
            return(CardTypes.Unknown);
        }
Example #2
0
        public bool TryParse(FileInfo file)
        {
            string fileName = file.FullName;

            using (BinaryReader reader = new BinaryReader(file.OpenRead()))
            {
                long pngSize = 0L;
                if (!CheckPngData(reader.BaseStream, ref pngSize, true))
                {
                    return(false);
                }

                if (reader.BaseStream.Length - reader.BaseStream.Position == 0L)
                {
                    return(false);
                }

                try
                {
                    int loadProductNo = reader.ReadInt32();
                    if (loadProductNo != 100)
                    {
                        CardTypes sceneCardType = CheckIfSceneCard(reader);
                        if (sceneCardType != CardTypes.Unknown) // Scene Card
                        {
                            return(ReadSceneCard(fileName, sceneCardType, reader, pngSize));
                        }

                        reader.Seek(pngSize, SeekOrigin.Begin);
                    }

                    ICharaCard card = null;

                    string    marker   = reader.ReadString();
                    CardTypes cardType = CardTypeFinder.IsMarkerOf(marker);

                    switch (cardType)
                    {
                    case CardTypes.KoiKatuChara:
                    case CardTypes.KoiKatuCharaS:
                    case CardTypes.KoiKatuCharaSP:
                        card = new KKCharaCard(fileName, loadProductNo, marker);
                        break;

                    case CardTypes.AIS_Chara:
                        card = new AISCharaCard(fileName, loadProductNo, marker);
                        break;

                    case CardTypes.HoneySelectCharaMale:
                        card = new HSCharaCard(fileName, marker, 0);
                        break;

                    case CardTypes.HoneySelectCharaFemale:
                        card = new HSCharaCard(fileName, marker, 1);
                        break;

                    case CardTypes.PlayHome_Male:
                        card = new PHCharaCard(fileName, marker, 0);
                        break;

                    case CardTypes.PlayHome_Female:
                        card = new PHCharaCard(fileName, marker, 1);
                        break;

                    case CardTypes.PremiumResortCharaMale:
                        card = new SBPRCharaCard(fileName, marker, 0);
                        break;

                    case CardTypes.PremiumResortCharaFemale:
                        card = new SBPRCharaCard(fileName, marker, 1);
                        break;

                    default:
                        break;
                    }

                    if (card != null && card.Parse(reader, pngSize))
                    {
                        Cards.Add(card);
                        return(true);
                    }
                }
                catch (Exception e)
                {
                    System.Diagnostics.Debug.WriteLine(e.Message);
                }
            }
            return(false);
        }
Example #3
0
        private bool ReadSceneCard(string fileName, CardTypes cardType, BinaryReader reader, long pngEnd)
        {
            var finderArr = new CardTypeFinder[]
            {
                new CardTypeFinder(CardTypes.KoiKatuChara),
                new CardTypeFinder(CardTypes.KoiKatuCharaS),
                new CardTypeFinder(CardTypes.KoiKatuCharaSP),
                new CardTypeFinder(CardTypes.AIS_Chara),
                new CardTypeFinder(CardTypes.HoneySelectCharaMale),
                new CardTypeFinder(CardTypes.HoneySelectCharaFemale)
            };

            if (cardType == CardTypes.PHStudio)
            {
                PHSceneCard pHScene = new PHSceneCard(fileName);
                pHScene.Parse(reader, pngEnd);
                if (pHScene.CharaCards.Count > 0)
                {
                    this.Cards.AddRange(pHScene.CharaCards);
                }
                return(true);
            }

            foreach (var finder in finderArr)
            {
                reader.Seek(pngEnd, SeekOrigin.Begin);
                if (finder.Find(reader, false))
                {
                    try
                    {
                        do
                        {
                            long charaPos = finder.Position;
                            reader.Seek(charaPos + finder.MarkerPattern.Length, SeekOrigin.Begin);

                            ICharaCard card = null;
                            switch (finder.CardType)
                            {
                            case CardTypes.KoiKatuChara:
                            case CardTypes.KoiKatuCharaS:
                            case CardTypes.KoiKatuCharaSP:
                                card = new KKCharaCard(fileName, 100, finder.Marker);
                                break;

                            case CardTypes.AIS_Chara:
                                card = new AISCharaCard(fileName, 100, finder.Marker);
                                break;

                            case CardTypes.HoneySelectCharaMale:
                                card = new HSCharaCard(fileName, finder.Marker, 0);
                                break;

                            case CardTypes.HoneySelectCharaFemale:
                                card = new HSCharaCard(fileName, finder.Marker, 1);
                                break;

                            default:
                                break;
                            }

                            if (card != null && card.Parse(reader, 0))
                            {
                                Cards.Add(card);
                            }

                            reader.Seek(charaPos + finder.MarkerPattern.Length + 1, SeekOrigin.Begin);
                        } while (finder.Find(reader, false));
                    }
                    catch (Exception e)
                    {
                        System.Diagnostics.Debug.WriteLine(e.Message);
                    }
                }
            }

            return(true);
        }