protected override bool ReadScoreFile(Stream input)
        {
            using (var decrypted = new MemoryStream())
#if DEBUG
                using (var decoded = new FileStream("th095decoded.dat", FileMode.Create, FileAccess.ReadWrite))
#else
                using (var decoded = new MemoryStream())
#endif
                {
                    if (!Decrypt(input, decrypted))
                    {
                        return(false);
                    }

                    decrypted.Seek(0, SeekOrigin.Begin);
                    if (!Extract(decrypted, decoded))
                    {
                        return(false);
                    }

                    decoded.Seek(0, SeekOrigin.Begin);
                    if (!Validate(decoded))
                    {
                        return(false);
                    }

                    decoded.Seek(0, SeekOrigin.Begin);
                    this.allScoreData = Read(decoded);

                    return(this.allScoreData != null);
                }
        }
        private static AllScoreData Read(Stream input)
        {
            var dictionary = new Dictionary <string, Action <AllScoreData, Chapter> >
            {
                { Header.ValidSignature, (data, ch) => data.Set(new Header(ch)) },
                { HighScore.ValidSignature, (data, ch) => data.Set(new HighScore(ch)) },
                { PlayStatus.ValidSignature, (data, ch) => data.Set(new PlayStatus(ch)) },
                { LastName.ValidSignature, (data, ch) => data.Set(new LastName(ch)) },
                { VersionInfo.ValidSignature, (data, ch) => data.Set(new VersionInfo(ch)) }
            };

            var reader       = new BinaryReader(input);
            var allScoreData = new AllScoreData();
            var chapter      = new Chapter();

            reader.ReadBytes(FileHeader.ValidSize);

            try
            {
                Action <AllScoreData, Chapter> setChapter;
                while (true)
                {
                    chapter.ReadFrom(reader);
                    if (dictionary.TryGetValue(chapter.Signature, out setChapter))
                    {
                        setChapter(allScoreData, chapter);
                    }
                }
            }
            catch (EndOfStreamException)
            {
                // It's OK, do nothing.
            }

            var numCharas = Enum.GetValues(typeof(Chara)).Length;
            var numLevels = Enum.GetValues(typeof(Level)).Length;

            if ((allScoreData.Header != null) &&
                (allScoreData.Rankings.Count == numCharas * numLevels) &&
                (allScoreData.PlayStatus != null) &&
                (allScoreData.LastName != null) &&
                (allScoreData.VersionInfo != null))
            {
                return(allScoreData);
            }
            else
            {
                return(null);
            }
        }
        private static AllScoreData Read(Stream input)
        {
            var reader       = new BinaryReader(input);
            var allScoreData = new AllScoreData();

            try
            {
                allScoreData.ReadFrom(reader);
            }
            catch (EndOfStreamException)
            {
            }

            return(allScoreData);
        }
Example #4
0
        private static AllScoreData Read(Stream input)
        {
            var dictionary = new Dictionary <string, Action <AllScoreData, Chapter> >
            {
                { Header.ValidSignature, (data, ch) => data.Set(new Header(ch)) },
                { HighScore.ValidSignature, (data, ch) => data.Set(new HighScore(ch)) },
                { ClearData.ValidSignature, (data, ch) => data.Set(new ClearData(ch)) },
                { CardAttack.ValidSignature, (data, ch) => data.Set(new CardAttack(ch)) },
                { PracticeScore.ValidSignature, (data, ch) => data.Set(new PracticeScore(ch)) }
            };

            var reader       = new BinaryReader(input);
            var allScoreData = new AllScoreData();
            var chapter      = new Chapter();

            reader.ReadBytes(FileHeader.ValidSize);

            try
            {
                Action <AllScoreData, Chapter> setChapter;
                while (true)
                {
                    chapter.ReadFrom(reader);
                    if (dictionary.TryGetValue(chapter.Signature, out setChapter))
                    {
                        setChapter(allScoreData, chapter);
                    }
                }
            }
            catch (EndOfStreamException)
            {
                // It's OK, do nothing.
            }

            if ((allScoreData.Header != null) &&
                //// (allScoreData.rankings.Count >= 0) &&
                //// (allScoreData.cardAttacks.Length == NumCards) &&
                //// (allScoreData.practiceScores.Count >= 0) &&
                (allScoreData.ClearData.Count == Enum.GetValues(typeof(Chara)).Length))
            {
                return(allScoreData);
            }
            else
            {
                return(null);
            }
        }
        private static AllScoreData Read(Stream input)
        {
            var dictionary = new Dictionary <string, Action <AllScoreData, Chapter> >
            {
                { Score.ValidSignature, (data, ch) => data.Set(new Score(ch)) },
                { Status.ValidSignature, (data, ch) => data.Set(new Status(ch)) }
            };

            var reader       = new BinaryReader(input);
            var allScoreData = new AllScoreData();
            var chapter      = new Chapter();

            var header = new Header();

            header.ReadFrom(reader);
            allScoreData.Set(header);

            try
            {
                Action <AllScoreData, Chapter> setChapter;
                while (true)
                {
                    chapter.ReadFrom(reader);
                    if (dictionary.TryGetValue(chapter.Signature, out setChapter))
                    {
                        setChapter(allScoreData, chapter);
                    }
                }
            }
            catch (EndOfStreamException)
            {
                // It's OK, do nothing.
            }

            if ((allScoreData.Header != null) &&
                //// (allScoreData.scores.Count >= 0) &&
                (allScoreData.Status != null))
            {
                return(allScoreData);
            }
            else
            {
                return(null);
            }
        }