mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/PCK-Studio.git
synced 2026-09-27 04:10:45 +00:00
Initial commit
This commit is contained in:
@@ -0,0 +1,187 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace minekampf.Classes
|
||||
{
|
||||
internal class Bink
|
||||
{
|
||||
[DllImport("kernel32.dll")]
|
||||
public static extern IntPtr LoadLibrary(string lpFileName);
|
||||
|
||||
[DllImport("kernel32.dll")]
|
||||
public static extern IntPtr FreeLibrary(IntPtr library);
|
||||
|
||||
public unsafe static string Binka(string infile, string outDir = null, bool last = true, string working = null)
|
||||
{
|
||||
bool flag = working == null;
|
||||
string text;
|
||||
string text2;
|
||||
string path;
|
||||
if (flag)
|
||||
{
|
||||
working = Path.GetTempPath() + DateTime.Now.Second.ToString();
|
||||
text = minekampf.Classes.Bink.ExtractResource("Resources.binka_encode.exe", working, "binka_encode.exe");
|
||||
text2 = minekampf.Classes.Bink.ExtractResource("Resources.mss32.dll", working, "mss32.dll");
|
||||
path = minekampf.Classes.Bink.ExtractResource("Resources.binkawin.asi", working, "binkawin.asi");
|
||||
minekampf.Classes.Bink.library = minekampf.Classes.Bink.LoadLibrary(text2);
|
||||
}
|
||||
else
|
||||
{
|
||||
text = working + "\\binka_encode.exe";
|
||||
text2 = working + "\\mss32.dll";
|
||||
path = working + "\\binkawin.asi";
|
||||
}
|
||||
bool flag2 = minekampf.Classes.Bink.getType(infile) == "WAV";
|
||||
if (flag2)
|
||||
{
|
||||
string[] array = minekampf.Classes.Bink.createArg(infile, outDir);
|
||||
Process process = new Process();
|
||||
process.StartInfo.FileName = text;
|
||||
process.StartInfo.Arguments = string.Concat(new string[]
|
||||
{
|
||||
" \"",
|
||||
array[0],
|
||||
"\" \"",
|
||||
array[1],
|
||||
"\""
|
||||
});
|
||||
process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
|
||||
process.Start();
|
||||
process.WaitForExit();
|
||||
}
|
||||
else
|
||||
{
|
||||
bool flag3 = minekampf.Classes.Bink.getType(infile) == "BINKA";
|
||||
if (flag3)
|
||||
{
|
||||
string[] array2 = minekampf.Classes.Bink.createArg(infile, outDir);
|
||||
byte[] array3 = File.ReadAllBytes(array2[0]);
|
||||
uint num = 0U;
|
||||
minekampf.Classes.Bink.AIL_set_redist_directory(".");
|
||||
minekampf.Classes.Bink.AIL_startup();
|
||||
IntPtr intPtr;
|
||||
bool flag4 = minekampf.Classes.Bink.AIL_decompress_ASI(array3, (uint)array3.Length, ".binka", &intPtr, &num, 0U) == 0;
|
||||
if (flag4)
|
||||
{
|
||||
throw new Exception("AIL ERROR");
|
||||
}
|
||||
byte[] array4 = new byte[num];
|
||||
Marshal.Copy(intPtr, array4, 0, array4.Length);
|
||||
minekampf.Classes.Bink.AIL_mem_free_lock(intPtr);
|
||||
minekampf.Classes.Bink.AIL_shutdown();
|
||||
File.WriteAllBytes(array2[1], array4);
|
||||
}
|
||||
}
|
||||
if (last)
|
||||
{
|
||||
minekampf.Classes.Bink.FreeLibrary(minekampf.Classes.Bink.library);
|
||||
minekampf.Classes.Bink.FreeLibrary(minekampf.Classes.Bink.library);
|
||||
File.Delete(text);
|
||||
File.Delete(path);
|
||||
while (File.Exists(text2))
|
||||
{
|
||||
try
|
||||
{
|
||||
File.Delete(text2);
|
||||
}
|
||||
catch
|
||||
{
|
||||
minekampf.Classes.Bink.FreeLibrary(minekampf.Classes.Bink.library);
|
||||
}
|
||||
}
|
||||
}
|
||||
return working;
|
||||
}
|
||||
|
||||
private static string getType(string loc)
|
||||
{
|
||||
string a = Path.GetExtension(loc).ToLower();
|
||||
bool flag = a == ".binka";
|
||||
string result;
|
||||
if (flag)
|
||||
{
|
||||
result = "BINKA";
|
||||
}
|
||||
else
|
||||
{
|
||||
bool flag2 = !(a == ".wav");
|
||||
if (flag2)
|
||||
{
|
||||
throw new Exception("File type not valid. To use MP3 or other audio formats, convert to wav format before using tool");
|
||||
}
|
||||
result = "WAV";
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private static string[] createArg(string inFile, string outdir = null)
|
||||
{
|
||||
string[] array = new string[2];
|
||||
array[0] = inFile;
|
||||
string[] array2 = array;
|
||||
string type = minekampf.Classes.Bink.getType(inFile);
|
||||
bool flag = type == "BINKA";
|
||||
if (flag)
|
||||
{
|
||||
array2[1] = ((outdir.Length <= 3) ? Path.GetFullPath(inFile.Replace(".binka", ".wav")) : (outdir + "\\" + Path.GetFileName(inFile.Replace(".binka", ".wav"))));
|
||||
}
|
||||
else
|
||||
{
|
||||
bool flag2 = type == "WAV";
|
||||
if (flag2)
|
||||
{
|
||||
array2[1] = ((outdir.Length <= 3) ? Path.GetFullPath(inFile.Replace(".wav", ".binka")) : (outdir + "\\" + Path.GetFileName(inFile.Replace(".wav", ".binka"))));
|
||||
}
|
||||
}
|
||||
bool flag3 = !Directory.Exists(Path.GetDirectoryName(array2[1]));
|
||||
if (flag3)
|
||||
{
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(array2[1]));
|
||||
}
|
||||
return array2;
|
||||
}
|
||||
|
||||
internal static string ExtractResource(string resource, string path, string filename)
|
||||
{
|
||||
Stream manifestResourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource);
|
||||
byte[] array = new byte[(int)manifestResourceStream.Length];
|
||||
manifestResourceStream.Read(array, 0, array.Length);
|
||||
manifestResourceStream.Close();
|
||||
bool flag = !Directory.Exists(path);
|
||||
if (flag)
|
||||
{
|
||||
Directory.CreateDirectory(path);
|
||||
}
|
||||
path = path + "\\" + filename;
|
||||
File.WriteAllBytes(path, array);
|
||||
return path;
|
||||
}
|
||||
|
||||
[DllImport("mss32.dll", EntryPoint = "_AIL_decompress_ASI@24")]
|
||||
private unsafe static extern int AIL_decompress_ASI([MarshalAs(UnmanagedType.LPArray)] byte[] indata, uint insize, [MarshalAs(UnmanagedType.LPStr)] string ext, IntPtr* result, uint* resultsize, uint zero);
|
||||
|
||||
[DllImport("mss32.dll", EntryPoint = "_AIL_last_error@0")]
|
||||
private static extern IntPtr AIL_last_error();
|
||||
|
||||
[DllImport("mss32.dll", EntryPoint = "_AIL_set_redist_directory@4")]
|
||||
private static extern IntPtr AIL_set_redist_directory([MarshalAs(UnmanagedType.LPStr)] string redistDir);
|
||||
|
||||
[DllImport("mss32.dll", EntryPoint = "_AIL_mem_free_lock@4")]
|
||||
private static extern void AIL_mem_free_lock(IntPtr ptr);
|
||||
|
||||
[DllImport("mss32.dll", EntryPoint = "_AIL_startup@0")]
|
||||
private static extern int AIL_startup();
|
||||
|
||||
[DllImport("mss32.dll", EntryPoint = "_AIL_shutdown@0")]
|
||||
private static extern int AIL_shutdown();
|
||||
|
||||
public Bink()
|
||||
{
|
||||
}
|
||||
|
||||
private static IntPtr library;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user