Пример #1
0
 private void ProcessSpell(
     MajorRecordFrame majorFrame,
     long fileOffset)
 {
     foreach (var scit in majorFrame.FindEnumerateSubrecords(RecordTypes.SCIT))
     {
         ProcessFormIDOverflow(scit, fileOffset);
     }
 }
Пример #2
0
    private void ProcessAIPackages(
        MajorRecordFrame majorFrame,
        long fileOffset)
    {
        int amount = 0;

        foreach (var ctdt in majorFrame.FindEnumerateSubrecords(RecordTypes.CTDT))
        {
            this._instructions.SetSubstitution(
                loc: ctdt.Location + fileOffset + 3,
                sub: new byte[] { (byte)'A', 0x18 });
            this._instructions.SetAddition(
                addition: new byte[4],
                loc: ctdt.Location + fileOffset + 0x1A);
            amount += 4;
        }

        foreach (var ctdt in majorFrame.FindEnumerateSubrecords(RecordTypes.PKDT))
        {
            if (ctdt.ContentLength != 4)
            {
                continue;
            }
            this._instructions.SetSubstitution(
                loc: fileOffset + ctdt.Location + 4,
                sub: new byte[] { 0x8 });
            var first1  = ctdt.Content[0];
            var first2  = ctdt.Content[1];
            var second1 = ctdt.Content[2];
            var second2 = ctdt.Content[3];
            this._instructions.SetSubstitution(
                loc: fileOffset + ctdt.Location + 6,
                sub: new byte[] { first1, first2, 0, 0 });
            this._instructions.SetAddition(
                loc: fileOffset + ctdt.Location + 10,
                addition: new byte[] { second1, 0, 0, 0 });
            amount += 4;
        }

        ProcessLengths(
            majorFrame,
            amount,
            fileOffset);
    }
Пример #3
0
    private void ProcessDialogItems(
        MajorRecordFrame majorFrame,
        long fileOffset)
    {
        int amount = 0;

        foreach (var ctdt in majorFrame.FindEnumerateSubrecords(RecordTypes.CTDT))
        {
            this._instructions.SetSubstitution(
                loc: ctdt.Location + fileOffset + 3,
                sub: new byte[] { (byte)'A', 0x18 });
            this._instructions.SetAddition(
                addition: new byte[4],
                loc: ctdt.Location + fileOffset + 0x1A);
            amount += 4;
        }

        foreach (var schd in majorFrame.FindEnumerateSubrecords(RecordTypes.SCHD))
        {
            var existingLen = schd.ContentLength;
            var diff        = existingLen - 0x14;
            this._instructions.SetSubstitution(
                loc: schd.Location + fileOffset + 3,
                sub: new byte[] { (byte)'R', 0x14 });
            if (diff == 0)
            {
                continue;
            }
            var locToRemove = fileOffset + schd.Location + schd.HeaderLength + 0x14;
            this._instructions.SetRemove(
                section: new RangeInt64(
                    locToRemove,
                    locToRemove + diff - 1));
            amount -= diff;
        }

        ProcessLengths(
            majorFrame,
            amount,
            fileOffset);
    }
Пример #4
0
 private void ProcessWeathers(
     MajorRecordFrame majorFrame,
     long fileOffset)
 {
     if (majorFrame.TryLocateSubrecordFrame(RecordTypes.SNAM, out var _, out var initialIndex))
     {
         foreach (var snam in majorFrame.FindEnumerateSubrecords(RecordTypes.SNAM))
         {
             ProcessFormIDOverflow(snam, fileOffset);
         }
     }
 }
Пример #5
0
    private void ProcessIdleAnimations(
        MajorRecordFrame majorFrame,
        long fileOffset)
    {
        int amount = 0;

        foreach (var ctdt in majorFrame.FindEnumerateSubrecords(RecordTypes.CTDT))
        {
            this._instructions.SetSubstitution(
                loc: ctdt.Location + fileOffset + 3,
                sub: new byte[] { (byte)'A', 0x18 });
            this._instructions.SetAddition(
                addition: new byte[4],
                loc: ctdt.Location + fileOffset + 0x1A);
            amount += 4;
        }

        ProcessLengths(
            majorFrame,
            amount,
            fileOffset);
    }