private void ProcessSpell( MajorRecordFrame majorFrame, long fileOffset) { foreach (var scit in majorFrame.FindEnumerateSubrecords(RecordTypes.SCIT)) { ProcessFormIDOverflow(scit, fileOffset); } }
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); }
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); }
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); } } }
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); }