Optimizations.

This commit is contained in:
Razmoth
2023-01-07 21:52:15 +04:00
parent 00fb0a8fb4
commit feb6f370c0
3 changed files with 116 additions and 9 deletions

View File

@@ -46,11 +46,11 @@ namespace AssetStudio
var keyHigh = BinaryPrimitives.ReadUInt64LittleEndian(key.AsSpan(8, 8)); var keyHigh = BinaryPrimitives.ReadUInt64LittleEndian(key.AsSpan(8, 8));
var seed = keyLow ^ keyHigh ^ keySeed ^ blk.InitSeed; var seed = keyLow ^ keyHigh ^ keySeed ^ blk.InitSeed;
MT19937_64.Init(seed); var mt64 = new MT19937_64(seed);
var xorpad = new byte[KeySize]; var xorpad = new byte[KeySize];
for (int i = 0; i < KeySize; i += 8) for (int i = 0; i < KeySize; i += 8)
{ {
BinaryPrimitives.WriteUInt64LittleEndian(xorpad.AsSpan(i, 8), MT19937_64.Int64()); BinaryPrimitives.WriteUInt64LittleEndian(xorpad.AsSpan(i, 8), mt64.Int64());
} }
return new CryptoStream(reader.BaseStream, xorpad); return new CryptoStream(reader.BaseStream, xorpad);

View File

@@ -1,6 +1,6 @@
namespace AssetStudio namespace AssetStudio
{ {
public static class MT19937_64 public class MT19937_64
{ {
private const ulong N = 312; private const ulong N = 312;
private const ulong M = 156; private const ulong M = 156;
@@ -8,10 +8,15 @@
private const ulong UPPER_MASK = 0xFFFFFFFF80000000; private const ulong UPPER_MASK = 0xFFFFFFFF80000000;
private const ulong LOWER_MASK = 0X7FFFFFFFUL; private const ulong LOWER_MASK = 0X7FFFFFFFUL;
private static readonly ulong[] mt = new ulong[N + 1]; private readonly ulong[] mt = new ulong[N + 1];
private static ulong mti = N + 1; private ulong mti = N + 1;
public static void Init(ulong seed) public MT19937_64(ulong seed)
{
Init(seed);
}
public void Init(ulong seed)
{ {
mt[0] = seed; mt[0] = seed;
for (mti = 1; mti < N; mti++) for (mti = 1; mti < N; mti++)
@@ -20,7 +25,7 @@
} }
} }
public static ulong Int64() public ulong Int64()
{ {
ulong x; ulong x;
ulong[] mag01 = new ulong[2] { 0x0UL, MATRIX_A }; ulong[] mag01 = new ulong[2] { 0x0UL, MATRIX_A };
@@ -56,12 +61,12 @@
return x; return x;
} }
public static long Int63() public long Int63()
{ {
return (long)(Int64() >> 1); return (long)(Int64() >> 1);
} }
public static ulong IntN(ulong value) public ulong IntN(ulong value)
{ {
return (ulong)Int63() % value; return (ulong)Int63() % value;
} }

102
AssetStudioGUI/App.config Normal file
View File

@@ -0,0 +1,102 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="AssetStudioGUI.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<userSettings>
<AssetStudioGUI.Properties.Settings>
<setting name="displayAll" serializeAs="String">
<value>False</value>
</setting>
<setting name="enablePreview" serializeAs="String">
<value>True</value>
</setting>
<setting name="displayInfo" serializeAs="String">
<value>True</value>
</setting>
<setting name="openAfterExport" serializeAs="String">
<value>True</value>
</setting>
<setting name="assetGroupOption" serializeAs="String">
<value>0</value>
</setting>
<setting name="convertTexture" serializeAs="String">
<value>True</value>
</setting>
<setting name="convertAudio" serializeAs="String">
<value>True</value>
</setting>
<setting name="eulerFilter" serializeAs="String">
<value>True</value>
</setting>
<setting name="filterPrecision" serializeAs="String">
<value>0.25</value>
</setting>
<setting name="exportAllNodes" serializeAs="String">
<value>True</value>
</setting>
<setting name="exportSkins" serializeAs="String">
<value>True</value>
</setting>
<setting name="exportAnimations" serializeAs="String">
<value>True</value>
</setting>
<setting name="boneSize" serializeAs="String">
<value>10</value>
</setting>
<setting name="fbxVersion" serializeAs="String">
<value>3</value>
</setting>
<setting name="fbxFormat" serializeAs="String">
<value>0</value>
</setting>
<setting name="scaleFactor" serializeAs="String">
<value>1</value>
</setting>
<setting name="exportBlendShape" serializeAs="String">
<value>True</value>
</setting>
<setting name="castToBone" serializeAs="String">
<value>False</value>
</setting>
<setting name="restoreExtensionName" serializeAs="String">
<value>True</value>
</setting>
<setting name="exportAllUvsAsDiffuseMaps" serializeAs="String">
<value>False</value>
</setting>
<setting name="key" serializeAs="String">
<value>147</value>
</setting>
<setting name="enableConsole" serializeAs="String">
<value>True</value>
</setting>
<setting name="encrypted" serializeAs="String">
<value>True</value>
</setting>
<setting name="skipRenderer" serializeAs="String">
<value>False</value>
</setting>
<setting name="selectedGame" serializeAs="String">
<value>0</value>
</setting>
<setting name="enableResolveDependencies" serializeAs="String">
<value>True</value>
</setting>
<setting name="selectedCNUnityKey" serializeAs="String">
<value>0</value>
</setting>
<setting name="selectedAssetMapType" serializeAs="String">
<value>0</value>
</setting>
<setting name="exportMiHoYoBinData" serializeAs="String">
<value>True</value>
</setting>
<setting name="collectAnimations" serializeAs="String">
<value>True</value>
</setting>
</AssetStudioGUI.Properties.Settings>
</userSettings>
</configuration>