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); }
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); } }