コード例 #1
0
        public async Task TestEachLine()
        {
            var garcGameText = await ORASConfig.GameConfig.GetGarc(GarcNames.GameText);

            byte[] tf0Data = await garcGameText.GetFile(0);

            TextFile tf0 = await ORASConfig.GameConfig.GetTextFile(0);

            byte[] textData = tf0Data.Skip(0x10 /* SectionDataOffset */).ToArray();
            ushort key      = TextFileHelper.KeyBase;

            for (int i = 0; i < tf0.Lines.Count; i++)
            {
                TestContext.Progress.WriteLine($"Testing line {i}...");
                TextFile.LineInfo lineInfo = tf0.LineInfos[i];
                byte[]            lineData = textData.Skip((int)lineInfo.Offset).Take(lineInfo.Length * 2).ToArray();

                if (i < tf0.Lines.Count - 1)
                {
                    TextFile.LineInfo next = tf0.LineInfos[i + 1];
                    long padding           = next.Offset - (lineInfo.Offset + lineInfo.Length * 2);
                    TestContext.Progress.WriteLine($"               Length: {lineInfo.Length * 2}");
                    TestContext.Progress.WriteLine($"              Padding: {padding}");
                    TestContext.Progress.WriteLine($"                 Flag: {lineInfo.Flag}");
                    TestContext.Progress.WriteLine($"    Length w/ padding: {lineInfo.Length * 2 + padding}");
                    TestContext.Progress.WriteLine($"         Char Len % 2: {lineInfo.Length % 2}");
                    TestContext.Progress.WriteLine($"       Len w/ pad % 2: {( lineInfo.Length + ( padding / 2 ) ) % 2}");
                }

                string tfhString = TextFileHelper.GetLineString(tf0, TextFileHelper.CryptLineData(lineData, key));

                Assert.AreEqual(tf0.Lines[i], tfhString, "Directly decoded string not equal");

                var    newData = TextFileHelper.GetLineData(tf0, tf0.Lines[i]);
                byte[] tfhData = TextFileHelper.CryptLineData(newData, key);

                if (lineData.Length == tfhData.Length + 2 &&
                    lineData[lineData.Length - 1] == 0 &&
                    lineData[lineData.Length - 2] == 0)
                {
                    tfhData = tfhData.Concat(new byte[] { 0, 0 }).ToArray();                       // add padding
                }
                Assert.AreEqual(lineData, tfhData, "Directly encoded string not equal");

                key += TextFileHelper.KeyAdvance;
            }
        }