diff --git a/Backup_Channel.wad b/Backup_Channel.wad new file mode 100644 index 0000000..50fdd46 Binary files /dev/null and b/Backup_Channel.wad differ diff --git a/CustomizeMii.sln b/CustomizeMii.sln deleted file mode 100644 index 25a5dfa..0000000 --- a/CustomizeMii.sln +++ /dev/null @@ -1,26 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual C# Express 2008 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CustomizeMii", "CustomizeMii\CustomizeMii.csproj", "{46B7F0BC-101B-4167-95AD-4C5D78AA0A20}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ForwardMii-Plugin", "ForwardMii-Plugin\ForwardMii-Plugin.csproj", "{20CB2CA7-6767-4758-97FA-97395F47CD6B}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {46B7F0BC-101B-4167-95AD-4C5D78AA0A20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {46B7F0BC-101B-4167-95AD-4C5D78AA0A20}.Debug|Any CPU.Build.0 = Debug|Any CPU - {46B7F0BC-101B-4167-95AD-4C5D78AA0A20}.Release|Any CPU.ActiveCfg = Release|Any CPU - {46B7F0BC-101B-4167-95AD-4C5D78AA0A20}.Release|Any CPU.Build.0 = Release|Any CPU - {20CB2CA7-6767-4758-97FA-97395F47CD6B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {20CB2CA7-6767-4758-97FA-97395F47CD6B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {20CB2CA7-6767-4758-97FA-97395F47CD6B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {20CB2CA7-6767-4758-97FA-97395F47CD6B}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/CustomizeMii/BNS.cs b/CustomizeMii/BNS.cs deleted file mode 100644 index 35bbd3a..0000000 --- a/CustomizeMii/BNS.cs +++ /dev/null @@ -1,714 +0,0 @@ -/* This file is part of CustomizeMii - * Copyright (C) 2009 Leathl - * - * CustomizeMii is free software: you can redistribute it and/or - * modify it under the terms of the GNU General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CustomizeMii is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -//These classes are based on bns.py of the Wii.py Framework with improvements by me (Leathl) -//Thanks to Xuzz, SquidMan, megazig, Matt_P, Omega and The Lemon Man, the authors of Wii.py! - -using System; -using System.Collections.Generic; -using System.IO; -using WaveFile; - -namespace BNS -{ - internal class BNS_Data - { - //Private Varialbes - private byte[] magic = new byte[] { (byte)'D', (byte)'A', (byte)'T', (byte)'A' }; - private UInt32 size = 0x0004d000; - private byte[] data; - - //Public Variables - public UInt32 Size { get { return size; } set { size = value; } } - public byte[] Data { get { return data; } set { data = value; } } - - public BNS_Data() { } - - public void Write(Stream outStream) - { - byte[] temp = BitConverter.GetBytes(size); Array.Reverse(temp); - - outStream.Write(magic, 0, magic.Length); - outStream.Write(temp, 0, temp.Length); - outStream.Write(data, 0, data.Length); - } - } - - internal class BNS_Info - { - //Private Variables - private byte[] magic = new byte[] { (byte)'I', (byte)'N', (byte)'F', (byte)'O' }; - private UInt32 size = 0x000000a0; - private byte codec = 0x00; - private byte hasLoop = 0x00; - private byte channelCount = 0x02; - private byte zero = 0x00; - private UInt16 sampleRate = 0xac44; - private UInt16 pad0 = 0x0000; - private UInt32 loopStart = 0x00000000; - private UInt32 loopEnd = 0x00000000; //Or total sample count - private UInt32 offsetToChannelStart = 0x00000018; - private UInt32 pad1 = 0x00000000; - private UInt32 channel1StartOffset = 0x00000020; - private UInt32 channel2StartOffset = 0x0000002C; - private UInt32 channel1Start = 0x00000000; - private UInt32 coefficients1Offset = 0x0000038; - private UInt32 pad2 = 0x00000000; - private UInt32 channel2Start = 0x00000000; - private UInt32 coefficients2Offset = 0x00000068; - private UInt32 pad3 = 0x00000000; - private int[] coefficients1 = new int[16]; - private UInt16 channel1Gain = 0x0000; - private UInt16 channel1PredictiveScale = 0x0000; - private UInt16 channel1PreviousValue = 0x0000; - private UInt16 channel1NextPreviousValue = 0x0000; - private UInt16 channel1LoopPredictiveScale = 0x0000; - private UInt16 channel1LoopPreviousValue = 0x0000; - private UInt16 channel1LoopNextPreviousValue = 0x0000; - private UInt16 channel1LoopPadding = 0x0000; - private int[] coefficients2 = new int[16]; - private UInt16 channel2Gain = 0x0000; - private UInt16 channel2PredictiveScale = 0x0000; - private UInt16 channel2PreviousValue = 0x0000; - private UInt16 channel2NextPreviousValue = 0x0000; - private UInt16 channel2LoopPredictiveScale = 0x0000; - private UInt16 channel2LoopPreviousValue = 0x0000; - private UInt16 channel2LoopNextPreviousValue = 0x0000; - private UInt16 channel2LoopPadding = 0x0000; - - //Public Variables - public byte HasLoop { get { return hasLoop; } set { hasLoop = value; } } - public UInt32 Coefficients1Offset { get { return coefficients1Offset; } set { coefficients1Offset = value; } } - public UInt32 Channel1StartOffset { get { return channel1StartOffset; } set { channel1StartOffset = value; } } - public UInt32 Channel2StartOffset { get { return channel2StartOffset; } set { channel2StartOffset = value; } } - public UInt32 Size { get { return size; } set { size = value; } } - public UInt16 SampleRate { get { return sampleRate; } set { sampleRate = value; } } - public byte ChannelCount { get { return channelCount; } set { channelCount = value; } } - public UInt32 Channel1Start { get { return channel1Start; } set { channel1Start = value; } } - public UInt32 Channel2Start { get { return channel2Start; } set { channel2Start = value; } } - public UInt32 LoopStart { get { return loopStart; } set { loopStart = value; } } - public UInt32 LoopEnd { get { return loopEnd; } set { loopEnd = value; } } - public int[] Coefficients1 { get { return coefficients1; } set { coefficients1 = value; } } - public int[] Coefficients2 { get { return coefficients2; } set { coefficients2 = value; } } - - public BNS_Info() { } - - public void Write(Stream outStream) - { - outStream.Write(magic, 0, magic.Length); - - byte[] temp = BitConverter.GetBytes(size); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - outStream.WriteByte(codec); - outStream.WriteByte(hasLoop); - outStream.WriteByte(channelCount); - outStream.WriteByte(zero); - - temp = BitConverter.GetBytes(sampleRate); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(pad0); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(loopStart); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(loopEnd); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(offsetToChannelStart); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(pad1); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1StartOffset); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel2StartOffset); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1Start); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(coefficients1Offset); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - if (this.channelCount == 2) - { - temp = BitConverter.GetBytes(pad2); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel2Start); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(coefficients2Offset); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(pad3); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - foreach (int thisInt in coefficients1) - { - temp = BitConverter.GetBytes(thisInt); Array.Reverse(temp); - outStream.Write(temp, 2, temp.Length - 2); - } - - temp = BitConverter.GetBytes(channel1Gain); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1PredictiveScale); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1PreviousValue); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1NextPreviousValue); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1LoopPredictiveScale); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1LoopPreviousValue); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1LoopNextPreviousValue); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1LoopPadding); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - foreach (int thisInt in coefficients2) - { - temp = BitConverter.GetBytes(thisInt); Array.Reverse(temp); - outStream.Write(temp, 2, temp.Length - 2); - } - - temp = BitConverter.GetBytes(channel2Gain); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel2PredictiveScale); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel2PreviousValue); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel2NextPreviousValue); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel2LoopPredictiveScale); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel2LoopPreviousValue); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel2LoopNextPreviousValue); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel2LoopPadding); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - } - else if (this.channelCount == 1) - { - foreach (int thisInt in coefficients1) - { - temp = BitConverter.GetBytes(thisInt); Array.Reverse(temp); - outStream.Write(temp, 2, temp.Length - 2); - } - - temp = BitConverter.GetBytes(channel1Gain); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1PredictiveScale); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1PreviousValue); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1NextPreviousValue); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1LoopPredictiveScale); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1LoopPreviousValue); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1LoopNextPreviousValue); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(channel1LoopPadding); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - } - } - } - - internal class BNS_Header - { - //Private Variables - private byte[] magic = new byte[] { (byte)'B', (byte)'N', (byte)'S', (byte)' ' }; - private UInt32 flags = 0xfeff0100; - private UInt32 fileSize = 0x0004d0c0; - private UInt16 size = 0x0020; - private UInt16 chunkCount = 0x0002; - private UInt32 infoOffset = 0x00000020; - private UInt32 infoLength = 0x000000a0; - private UInt32 dataOffset = 0x000000c0; - private UInt32 dataLength = 0x0004d000; - - //Public Varialbes - public UInt32 DataOffset { get { return dataOffset; } set { dataOffset = value; } } - public UInt32 InfoLength { get { return infoLength; } set { infoLength = value; } } - public UInt16 Size { get { return size; } set { size = value; } } - public UInt32 DataLength { get { return dataLength; } set { dataLength = value; } } - public UInt32 FileSize { get { return fileSize; } set { fileSize = value; } } - - public BNS_Header() { } - - public void Write(Stream outStream) - { - outStream.Write(magic, 0, magic.Length); - - byte[] temp = BitConverter.GetBytes(flags); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(fileSize); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(size); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(chunkCount); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(infoOffset); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(infoLength); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(dataOffset); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - - temp = BitConverter.GetBytes(dataLength); Array.Reverse(temp); - outStream.Write(temp, 0, temp.Length); - } - } - - public class BNS_File - { - //Private Variables - private BNS_Header bnsHeader = new BNS_Header(); - private BNS_Info bnsInfo = new BNS_Info(); - private BNS_Data bnsData = new BNS_Data(); - private int[,] lSamples = new int[2, 2]; - private int[,] rlSamples = new int[2, 2]; - private int[] tlSamples = new int[2]; - private int[] hbcDefTbl = new int[] { 674, 1040, 3598, -1738, 2270, -583, 3967, -1969, 1516, 381, 3453, -1468, 2606, -617, 3795, -1759 }; - private int[] defTbl = new int[] { 1820, -856, 3238, -1514, 2333, -550, 3336, -1376, 2444, -949, 3666, -1764, 2654, -701, 3420, -1398 }; - private int[] pHist1 = new int[2]; - private int[] pHist2 = new int[2]; - private int tempSampleCount; - private string waveFile; - private bool loopFromWave = false; - private bool converted = false; - private bool toMono = false; - - - - //Public Variables - /// - /// 0x00 (0) = No Loop, 0x01 (1) = Loop - /// - public byte HasLoop { get { return this.bnsInfo.HasLoop; } set { this.bnsInfo.HasLoop = value; } } - /// - /// The start sample of the Loop - /// - public UInt32 LoopStart { get { return this.bnsInfo.LoopStart; } set { this.bnsInfo.LoopStart = value; } } - /// - /// The total number of samples in this file - /// - public UInt32 TotalSampleCount { get { return this.bnsInfo.LoopEnd; } set { this.bnsInfo.LoopEnd = value; } } - /// - /// If true and the input Wave file is stereo, the BNS will be converted to Mono. - /// Be sure to set this before you call Convert()! - /// - public bool StereoToMono { get { return toMono; } set { toMono = value; } } - - - - //Public Functions - - public BNS_File(string waveFile) - { - this.waveFile = waveFile; - } - - public BNS_File(string waveFile, bool loopFromWave) - { - this.waveFile = waveFile; - this.loopFromWave = loopFromWave; - } - - /// - /// Returns the progress of the conversion - /// - public event EventHandler ProgressChanged; - - /// - /// Converts the Wave file to BNS - /// - public void Convert() - { - Convert(waveFile, loopFromWave); - } - - /// - /// Returns the BNS file as a Byte Array. If not already converted, it will be done first. - /// - /// - public byte[] ToByteArray() - { - return ToMemoryStream().ToArray(); - } - - /// - /// Returns the BNS file as a Memory Stream. If not already converted, it will be done first. - /// - /// - public MemoryStream ToMemoryStream() - { - if (!converted) - Convert(waveFile, loopFromWave); - - MemoryStream ms = new MemoryStream(); - - this.bnsHeader.Write(ms); - this.bnsInfo.Write(ms); - this.bnsData.Write(ms); - - return ms; - } - - /// - /// Saves the BNS file to the given path. If not already converted, it will be done first. - /// - /// - public void Save(string destionationFile) - { - if (File.Exists(destionationFile)) File.Delete(destionationFile); - - using (FileStream fs = new FileStream(destionationFile, FileMode.Create)) - { - byte[] bnsFile = ToMemoryStream().ToArray(); - fs.Write(bnsFile, 0, bnsFile.Length); - } - } - - /// - /// Sets the Loop to the given Start Sample. Be sure that you call Convert() first! - /// - /// - public void SetLoop(int loopStartSample) - { - this.bnsInfo.HasLoop = 0x01; - this.bnsInfo.LoopStart = (uint)loopStartSample; - } - - - - //Private Functions - - private void Convert(string waveFile, bool loopFromWave) - { - Wave wave = new Wave(waveFile); - int waveLoopCount = wave.LoopCount; - int waveLoopStart = wave.LoopStart; - - this.bnsInfo.ChannelCount = (byte)wave.ChannelCount; - this.bnsInfo.SampleRate = (ushort)wave.SampleRate; - - if (this.bnsInfo.ChannelCount > 2 || this.bnsInfo.ChannelCount < 1) - throw new Exception("Unsupported Count of Channels!"); - if (wave.BitDepth != 16) - throw new Exception("Only 16bit Wave files are supported!"); - if (wave.DataFormat != 1) - throw new Exception("The format of this Wave file is not supported!"); - - this.bnsData.Data = Encode(wave.GetAllFrames()); - wave.Close(); - - if (this.bnsInfo.ChannelCount == 1) - { - this.bnsHeader.InfoLength = 0x60; - this.bnsHeader.DataOffset = 0x80; - - this.bnsInfo.Size = 0x60; - this.bnsInfo.Channel1StartOffset = 0x0000001C; - this.bnsInfo.Channel2StartOffset = 0x00000000; - this.bnsInfo.Channel1Start = 0x00000028; - this.bnsInfo.Coefficients1Offset = 0x00000000; - } - - this.bnsData.Size = (uint)bnsData.Data.Length + 8; - - this.bnsHeader.DataLength = this.bnsData.Size; - this.bnsHeader.FileSize = this.bnsHeader.Size + this.bnsInfo.Size + this.bnsData.Size; - - if (loopFromWave) - if (waveLoopCount == 1) - if (waveLoopStart != -1) - { this.bnsInfo.LoopStart = (uint)waveLoopStart; this.bnsInfo.HasLoop = 0x01; } - - this.bnsInfo.LoopEnd = (uint)tempSampleCount; - - for (int i = 0; i < 16; i++) - { - this.bnsInfo.Coefficients1[i] = this.defTbl[i]; - - if (this.bnsInfo.ChannelCount == 2) - this.bnsInfo.Coefficients2[i] = this.defTbl[i]; - } - - this.converted = true; - } - - private byte[] Encode(byte[] inputFrames) - { - int offset = 0; - int[] sampleBuffer = new int[14]; - - this.tempSampleCount = inputFrames.Length / (bnsInfo.ChannelCount == 2 ? 4 : 2); - int modLength = (inputFrames.Length / (bnsInfo.ChannelCount == 2 ? 4 : 2)) % 14; - - Array.Resize(ref inputFrames, inputFrames.Length + ((14 - modLength) * (bnsInfo.ChannelCount == 2 ? 4 : 2))); - - int sampleCount = inputFrames.Length / (bnsInfo.ChannelCount == 2 ? 4 : 2); - - int blocks = (sampleCount + 13) / 14; - - List soundDataLeft = new List(); - List soundDataRight = new List(); - - int co = offset; - - if (this.toMono && this.bnsInfo.ChannelCount == 2) this.bnsInfo.ChannelCount = 1; - else if (this.toMono) this.toMono = false; - - for (int j = 0; j < sampleCount; j++) - { - soundDataLeft.Add(BitConverter.ToInt16(inputFrames, co)); - co += 2; - - if (this.bnsInfo.ChannelCount == 2 || toMono) - { - soundDataRight.Add(BitConverter.ToInt16(inputFrames, co)); - co += 2; - } - } - - byte[] data = new byte[(this.bnsInfo.ChannelCount == 2 ? (blocks * 16) : (blocks * 8))]; - - int data1Offset = 0; - int data2Offset = blocks * 8; - - this.bnsInfo.Channel2Start = (this.bnsInfo.ChannelCount == 2 ? (uint)data2Offset : 0); - - int[] leftSoundData = soundDataLeft.ToArray(); - int[] rightSoundData = soundDataRight.ToArray(); - - for (int y = 0; y < blocks; y++) - { - try - { - if (y % (int)(blocks / 100) == 0 || (y + 1) == blocks) - ChangeProgress((y + 1) * 100 / blocks); - } - catch { } - - for (int a = 0; a < 14; a++) - sampleBuffer[a] = leftSoundData[y * 14 + a]; - - byte[] outBuffer = RepackAdpcm(0, this.defTbl, sampleBuffer); - - for (int a = 0; a < 8; a++) - data[data1Offset + a] = outBuffer[a]; - - data1Offset += 8; - - if (this.bnsInfo.ChannelCount == 2) - { - for (int a = 0; a < 14; a++) - sampleBuffer[a] = rightSoundData[y * 14 + a]; - - outBuffer = RepackAdpcm(1, this.defTbl, sampleBuffer); - - for (int a = 0; a < 8; a++) - data[data2Offset + a] = outBuffer[a]; - - data2Offset += 8; - } - } - - this.bnsInfo.LoopEnd = (uint)(blocks * 7); - - return data; - } - - private byte[] RepackAdpcm(int index, int[] table, int[] inputBuffer) - { - byte[] data = new byte[8]; - int[] blSamples = new int[2]; - int bestIndex = -1; - double bestError = 999999999.0; - double error; - - for (int tableIndex = 0; tableIndex < 8; tableIndex++) - { - byte[] testData = CompressAdpcm(index, table, tableIndex, inputBuffer, out error); - - if (error < bestError) - { - bestError = error; - - for (int i = 0; i < 8; i++) - data[i] = testData[i]; - for (int i = 0; i < 2; i++) - blSamples[i] = this.tlSamples[i]; - - bestIndex = tableIndex; - } - } - - for (int i = 0; i < 2; i++) - this.rlSamples[index, i] = blSamples[i]; - - return data; - } - - private byte[] CompressAdpcm(int index, int[] table, int tableIndex, int[] inputBuffer, out double outError) - { - byte[] data = new byte[8]; - int error = 0; - int factor1 = table[2 * tableIndex + 0]; - int factor2 = table[2 * tableIndex + 1]; - - int exponent = DetermineStdExponent(index, table, tableIndex, inputBuffer); - - while (exponent <= 15) - { - bool breakIt = false; - error = 0; - data[0] = (byte)(exponent | (tableIndex << 4)); - - for (int i = 0; i < 2; i++) - this.tlSamples[i] = this.rlSamples[index, i]; - - int j = 0; - - for (int i = 0; i < 14; i++) - { - int predictor = (int)((this.tlSamples[1] * factor1 + this.tlSamples[0] * factor2) >> 11); - int residual = (inputBuffer[i] - predictor) >> exponent; - - if (residual > 7 || residual < -8) - { - exponent++; - breakIt = true; - break; - } - - int nibble = Clamp(residual, -8, 7); - - if ((i & 1) != 0) - data[i / 2 + 1] = (byte)(data[i / 2 + 1] | (nibble & 0xf)); - else - data[i / 2 + 1] = (byte)(nibble << 4); - - predictor += nibble << exponent; - - this.tlSamples[0] = this.tlSamples[1]; - this.tlSamples[1] = Clamp(predictor, -32768, 32767); - - error += (int)(Math.Pow((double)(this.tlSamples[1] - inputBuffer[i]), 2)); - } - - if (!breakIt) j = 14; - - if (j == 14) break; - } - - outError = error; - return data; - } - - private int DetermineStdExponent(int index, int[] table, int tableIndex, int[] inputBuffer) - { - int[] elSamples = new int[2]; - int maxResidual = 0; - int factor1 = table[2 * tableIndex + 0]; - int factor2 = table[2 * tableIndex + 1]; - - for (int i = 0; i < 2; i++) - elSamples[i] = this.rlSamples[index, i]; - - for (int i = 0; i < 14; i++) - { - int predictor = (elSamples[1] * factor1 + elSamples[0] * factor2) >> 11; - int residual = inputBuffer[i] - predictor; - - if (residual > maxResidual) - maxResidual = residual; - - elSamples[0] = elSamples[1]; - elSamples[1] = inputBuffer[i]; - } - - return FindExponent(maxResidual); - } - - private int FindExponent(double residual) - { - int exponent = 0; - - while (residual > 7.5 || residual < -8.5) - { - exponent++; - residual /= 2.0; - } - - return exponent; - } - - private int Clamp(int input, int min, int max) - { - if (input < min) return min; - if (input > max) return max; - return input; - } - - private void ChangeProgress(int progressPercentage) - { - EventHandler progressChanged = ProgressChanged; - if (progressChanged != null) - { - progressChanged(new object(), new System.ComponentModel.ProgressChangedEventArgs(progressPercentage, new object())); - } - } - } -} diff --git a/CustomizeMii/CustomizeMii.csproj b/CustomizeMii/CustomizeMii.csproj deleted file mode 100644 index 23abde7..0000000 --- a/CustomizeMii/CustomizeMii.csproj +++ /dev/null @@ -1,183 +0,0 @@ - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {46B7F0BC-101B-4167-95AD-4C5D78AA0A20} - WinExe - Properties - CustomizeMii - CustomizeMii - v2.0 - 512 - - - Resources\CustomizeMii.ico - false - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 2.1.0.%2a - false - true - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - False - ..\ForwardMii-Plugin\bin\Release\ForwardMii.dll - - - - - - - - - - - Form - - - Form - - - CustomizeMii_BnsConvert.cs - - - Form - - - CustomizeMii_ComplexForwarder.cs - - - - Form - - - CustomizeMii_Main.cs - - - Form - - - CustomizeMii_Preview.cs - - - Form - - - CustomizeMii_InputBox.cs - - - - - CustomizeMii_BnsConvert.cs - - - CustomizeMii_ComplexForwarder.cs - - - CustomizeMii_InputBox.cs - - - CustomizeMii_Main.cs - - - CustomizeMii_Preview.cs - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - True - Resources.resx - True - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - - - True - Settings.settings - True - - - - - - - - - - - - - - - - False - .NET Framework Client Profile - false - - - False - .NET Framework 2.0 %28x86%29 - true - - - False - .NET Framework 3.0 %28x86%29 - false - - - False - .NET Framework 3.5 - false - - - False - .NET Framework 3.5 SP1 - false - - - - - \ No newline at end of file diff --git a/CustomizeMii/CustomizeMii.csproj.user b/CustomizeMii/CustomizeMii.csproj.user deleted file mode 100644 index 3258829..0000000 --- a/CustomizeMii/CustomizeMii.csproj.user +++ /dev/null @@ -1,17 +0,0 @@ - - - publish\ - - - - - - - - - - - de-DE - false - - \ No newline at end of file diff --git a/CustomizeMii/CustomizeMii_BackgroundWorkers.cs b/CustomizeMii/CustomizeMii_BackgroundWorkers.cs deleted file mode 100644 index b1694a3..0000000 --- a/CustomizeMii/CustomizeMii_BackgroundWorkers.cs +++ /dev/null @@ -1,753 +0,0 @@ -/* This file is part of CustomizeMii - * Copyright (C) 2009 Leathl - * - * CustomizeMii is free software: you can redistribute it and/or - * modify it under the terms of the GNU General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CustomizeMii is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -using System; -using System.ComponentModel; -using System.Diagnostics; -using System.IO; -using BNS; - -namespace CustomizeMii -{ - partial class CustomizeMii_Main - { - public int sendWadReady = 0; - private bool sendToWii = false; - private bool internalSound; - - void bwBannerReplace_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) - { - pbProgress.Value = 100; - lbStatusText.Text = string.Empty; - SetText(tbReplace, BannerReplace); - } - - void bwBannerReplace_ProgressChanged(object sender, ProgressChangedEventArgs e) - { - currentProgress.progressValue = e.ProgressPercentage; - currentProgress.progressState = (string)e.UserState; - - this.Invoke(ProgressUpdate); - } - - void bwBannerReplace_DoWork(object sender, DoWorkEventArgs e) - { - try - { - BackgroundWorker bwBannerReplace = sender as BackgroundWorker; - string thisFile = (string)e.Argument; - if (Directory.Exists(TempTempPath)) Directory.Delete(TempTempPath, true); - if (Directory.Exists(TempBannerPath)) Directory.Delete(TempBannerPath, true); - - if (thisFile.EndsWith(".bin")) - { - bwBannerReplace.ReportProgress(0, "Loading banner.bin..."); - Wii.U8.UnpackU8(thisFile, TempBannerPath); - } - else if (thisFile.EndsWith(".app")) - { - bwBannerReplace.ReportProgress(0, "Loading 00000000.app..."); - Wii.U8.UnpackU8(thisFile, TempTempPath); - bwBannerReplace.ReportProgress(50, "Loading banner.bin..."); - Wii.U8.UnpackU8(TempTempPath + "meta\\banner.bin", TempBannerPath); - Directory.Delete(TempTempPath, true); - } - else - { - bwBannerReplace.ReportProgress(0, "Loading WAD..."); - Wii.WadUnpack.UnpackWad(thisFile, TempTempPath); - if (Wii.U8.CheckU8(TempTempPath + "00000000.app") == false) - throw new Exception("CustomizeMii only handles Channel WADs!"); - bwBannerReplace.ReportProgress(30, "Loading 00000000.app..."); - Wii.U8.UnpackU8(TempTempPath + "00000000.app", TempTempPath + "00000000.app_OUT"); - bwBannerReplace.ReportProgress(60, "Loading banner.bin..."); - Wii.U8.UnpackU8(TempTempPath + "00000000.app_OUT\\meta\\banner.bin", TempBannerPath); - Directory.Delete(TempTempPath, true); - } - - EventHandler AddBannerTpls = new EventHandler(this.AddBannerTpls); - EventHandler AddIconTpls = new EventHandler(this.AddIconTpls); - EventHandler AddBrlyts = new EventHandler(this.AddBrlyts); - EventHandler AddBrlans = new EventHandler(this.AddBrlans); - this.Invoke(AddBannerTpls); - this.Invoke(AddIconTpls); - this.Invoke(AddBrlyts); - this.Invoke(AddBrlans); - } - catch (Exception ex) - { - if (Directory.Exists(TempTempPath)) Directory.Delete(TempTempPath, true); - if (Directory.Exists(TempBannerPath)) Directory.Delete(TempBannerPath, true); - BannerReplace = string.Empty; - ErrorBox(ex.Message); - } - } - - void bwIconReplace_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) - { - pbProgress.Value = 100; - lbStatusText.Text = string.Empty; - SetText(tbReplace, IconReplace); - } - - void bwIconReplace_ProgressChanged(object sender, ProgressChangedEventArgs e) - { - currentProgress.progressValue = e.ProgressPercentage; - currentProgress.progressState = (string)e.UserState; - - this.Invoke(ProgressUpdate); - } - - void bwIconReplace_DoWork(object sender, DoWorkEventArgs e) - { - try - { - BackgroundWorker bwIconReplace = sender as BackgroundWorker; - string thisFile = (string)e.Argument; - if (Directory.Exists(TempTempPath)) Directory.Delete(TempTempPath, true); - if (Directory.Exists(TempIconPath)) Directory.Delete(TempIconPath, true); - - if (thisFile.EndsWith(".bin")) - { - bwIconReplace.ReportProgress(0, "Loading icon.bin..."); - Wii.U8.UnpackU8(thisFile, TempIconPath); - } - else if (thisFile.EndsWith(".app")) - { - bwIconReplace.ReportProgress(0, "Loading 00000000.app..."); - Wii.U8.UnpackU8(thisFile, TempTempPath); - bwIconReplace.ReportProgress(50, "Loading icon.bin..."); - Wii.U8.UnpackU8(TempTempPath + "meta\\icon.bin", TempIconPath); - Directory.Delete(TempTempPath, true); - } - else - { - bwIconReplace.ReportProgress(0, "Loading WAD..."); - Wii.WadUnpack.UnpackWad(thisFile, TempTempPath); - if (Wii.U8.CheckU8(TempTempPath + "00000000.app") == false) - throw new Exception("CustomizeMii only handles Channel WADs!"); - bwIconReplace.ReportProgress(30, "Loading 00000000.app..."); - Wii.U8.UnpackU8(TempTempPath + "00000000.app", TempTempPath + "00000000.app_OUT"); - bwIconReplace.ReportProgress(60, "Loading icon.bin..."); - Wii.U8.UnpackU8(TempTempPath + "00000000.app_OUT\\meta\\icon.bin", TempIconPath); - Directory.Delete(TempTempPath, true); - } - - EventHandler AddBannerTpls = new EventHandler(this.AddBannerTpls); - EventHandler AddIconTpls = new EventHandler(this.AddIconTpls); - EventHandler AddBrlyts = new EventHandler(this.AddBrlyts); - EventHandler AddBrlans = new EventHandler(this.AddBrlans); - this.Invoke(AddBannerTpls); - this.Invoke(AddIconTpls); - this.Invoke(AddBrlyts); - this.Invoke(AddBrlans); - } - catch (Exception ex) - { - if (Directory.Exists(TempTempPath)) Directory.Delete(TempTempPath, true); - if (Directory.Exists(TempIconPath)) Directory.Delete(TempIconPath, true); - IconReplace = string.Empty; - ErrorBox(ex.Message); - } - } - - void bwSoundReplace_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) - { - pbProgress.Value = 100; - lbStatusText.Text = string.Empty; - SetText(tbReplace, SoundReplace); - } - - void bwSoundReplace_ProgressChanged(object sender, ProgressChangedEventArgs e) - { - currentProgress.progressValue = e.ProgressPercentage; - currentProgress.progressState = (string)e.UserState; - - this.Invoke(ProgressUpdate); - } - - void bwSoundReplace_DoWork(object sender, DoWorkEventArgs e) - { - try - { - BackgroundWorker bwSoundReplace = sender as BackgroundWorker; - string thisFile = (string)e.Argument; - if (File.Exists(TempSoundPath)) File.Delete(TempSoundPath); - if (Directory.Exists(TempTempPath)) Directory.Delete(TempTempPath, true); - - if (thisFile.EndsWith(".bin")) - { - bwSoundReplace.ReportProgress(0, "Copying sound.bin..."); - File.Copy(thisFile, TempSoundPath); - } - else if (thisFile.EndsWith(".app")) - { - bwSoundReplace.ReportProgress(0, "Loading 00000000.app..."); - Wii.U8.UnpackU8(thisFile, TempTempPath); - bwSoundReplace.ReportProgress(80, "Copying sound.bin..."); - File.Copy(TempTempPath + "meta\\sound.bin", TempSoundPath); - Directory.Delete(TempTempPath, true); - } - else - { - bwSoundReplace.ReportProgress(0, "Loading WAD..."); - Wii.WadUnpack.UnpackWad(thisFile, TempTempPath); - if (Wii.U8.CheckU8(TempTempPath + "00000000.app") == false) - throw new Exception("CustomizeMii only handles Channel WADs!"); - bwSoundReplace.ReportProgress(50, "Loading 00000000.app..."); - Wii.U8.UnpackU8(TempTempPath + "00000000.app", TempTempPath + "00000000.app_OUT"); - bwSoundReplace.ReportProgress(90, "Copying sound.bin..."); - File.Copy(TempTempPath + "00000000.app_OUT\\meta\\sound.bin", TempSoundPath); - Directory.Delete(TempTempPath, true); - } - - SetText(tbSound, SoundReplace); - } - catch (Exception ex) - { - if (Directory.Exists(TempTempPath)) Directory.Delete(TempTempPath, true); - if (File.Exists(TempSoundPath)) File.Delete(TempSoundPath); - SoundReplace = string.Empty; - ErrorBox(ex.Message); - } - } - - void bwConvertToBns_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) - { - if (File.Exists(TempBnsPath)) - { - if (internalSound == true) - SetText(tbSound, "BNS: Internal Sound"); - else - SetText(tbSound, "BNS: " + Mp3Path); - - btnBrowseSound.Text = "Clear"; - - if (!string.IsNullOrEmpty(SoundReplace)) - { - SoundReplace = string.Empty; - if (cmbReplace.SelectedIndex == 2) SetText(tbReplace, SoundReplace); - if (File.Exists(TempSoundPath)) File.Delete(TempSoundPath); - } - } - - if (File.Exists(TempWavePath)) File.Delete(TempWavePath); - - lbStatusText.Text = string.Empty; - Mp3Path = string.Empty; - pbProgress.Value = 100; - } - - void bwConvertToBns_ProgressChanged(object sender, ProgressChangedEventArgs e) - { - currentProgress.progressValue = e.ProgressPercentage; - if (!string.IsNullOrEmpty((string)e.UserState)) currentProgress.progressState = (string)e.UserState; - - this.Invoke(ProgressUpdate); - } - - void bns_ProgressChanged(object sender, ProgressChangedEventArgs e) - { - currentProgress.progressValue = e.ProgressPercentage; - - this.Invoke(ProgressUpdate); - } - - void bwConvertToBns_DoWork(object sender, DoWorkEventArgs e) - { - try - { - BackgroundWorker bwConvertToBns = sender as BackgroundWorker; - BnsConversionInfo bnsInfo = (BnsConversionInfo)e.Argument; - string audioFile; - - if (bnsInfo.AudioFile == "Internal Sound") - { audioFile = TempWavePath; internalSound = true; } - else - audioFile = bnsInfo.AudioFile; - Mp3Path = audioFile; //Rather audioPath... - - bool mp3 = audioFile.EndsWith(".mp3"); - if (mp3 && bnsInfo.Loop == BnsConversionInfo.LoopType.FromWave) bnsInfo.Loop = BnsConversionInfo.LoopType.None; - - if (mp3) - { - bwConvertToBns.ReportProgress(0, "Converting MP3..."); - - ProcessStartInfo lameI = new ProcessStartInfo(System.Windows.Forms.Application.StartupPath + "\\lame.exe", - string.Format("--decode \"{0}\" \"{1}\"", audioFile, "C:\\cmtempmp3wav.wav")); //Gotta go this step, cause the TempWavePath is too long for lame.exe - lameI.CreateNoWindow = true; - lameI.UseShellExecute = false; - lameI.RedirectStandardError = true; - - Process lame = Process.Start(lameI); - - string thisLine = string.Empty; - while (lame.HasExited == false) - { - thisLine = lame.StandardError.ReadLine(); - if (!string.IsNullOrEmpty(thisLine)) - { - if (thisLine.StartsWith("Frame#")) - { - string thisFrame = thisLine.Remove(thisLine.IndexOf('/')); - thisFrame = thisFrame.Remove(0, thisFrame.LastIndexOf(' ') + 1); - string Frames = thisLine.Remove(0, thisLine.IndexOf('/') + 1); - Frames = Frames.Remove(Frames.IndexOf(' ')); - - int thisProgress = (int)((Convert.ToDouble(thisFrame) / Convert.ToDouble(Frames)) * 100); - bwConvertToBns.ReportProgress(thisProgress); - } - } - } - - lame.WaitForExit(); - lame.Close(); - - if (File.Exists("C:\\cmtempmp3wav.wav")) - { - FileInfo fi = new FileInfo("C:\\cmtempmp3wav.wav"); - fi.MoveTo(TempWavePath); - } - - if (!File.Exists(TempWavePath)) throw new Exception("Error converting MP3..."); - else audioFile = TempWavePath; - } - - bwConvertToBns.ReportProgress(0, "Converting To BNS..."); - - BNS_File bns = new BNS_File(audioFile, bnsInfo.Loop == BnsConversionInfo.LoopType.FromWave); - bns.ProgressChanged += new EventHandler(bns_ProgressChanged); - - bns.StereoToMono = bnsInfo.StereoToMono; - bns.Convert(); - - if (bnsInfo.Loop == BnsConversionInfo.LoopType.Manual && bnsInfo.LoopStartSample > -1 && bnsInfo.LoopStartSample < bns.TotalSampleCount) - bns.SetLoop(bnsInfo.LoopStartSample); - - bns.Save(TempBnsPath); - - if (File.Exists(TempWavePath)) - File.Delete(TempWavePath); - } - catch (Exception ex) - { - ErrorBox("Error during conversion:\n" + ex.Message); - } - } - - void bwConvertMp3_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) - { - if (File.Exists(TempWavePath)) - { - SetText(tbSound, Mp3Path); - - btnBrowseSound.Text = "Clear"; - - if (!string.IsNullOrEmpty(SoundReplace)) - { - SoundReplace = string.Empty; - if (cmbReplace.SelectedIndex == 2) SetText(tbReplace, SoundReplace); - if (File.Exists(TempSoundPath)) File.Delete(TempSoundPath); - } - } - - lbStatusText.Text = string.Empty; - Mp3Path = string.Empty; - pbProgress.Value = 100; - } - - void bwConvertMp3_ProgressChanged(object sender, ProgressChangedEventArgs e) - { - currentProgress.progressValue = e.ProgressPercentage; - - this.Invoke(ProgressUpdate); - } - - void bwConvertMp3_DoWork(object sender, DoWorkEventArgs e) - { - try - { - BackgroundWorker bwConvertMp3 = sender as BackgroundWorker; - Mp3Path = (string)e.Argument; - ProcessStartInfo lameI = new ProcessStartInfo(System.Windows.Forms.Application.StartupPath + "\\lame.exe", - string.Format("--decode \"{0}\" \"{1}\"", e.Argument, "C:\\cmtempmp3wav.wav")); //Gotta go this step, cause the TempWavePath is too long for lame.exe - lameI.CreateNoWindow = true; - lameI.UseShellExecute = false; - lameI.RedirectStandardError = true; - - Process lame = Process.Start(lameI); - - string thisLine = string.Empty; - while (lame.HasExited == false) - { - thisLine = lame.StandardError.ReadLine(); - if (!string.IsNullOrEmpty(thisLine)) - { - if (thisLine.StartsWith("Frame#")) - { - string thisFrame = thisLine.Remove(thisLine.IndexOf('/')); - thisFrame = thisFrame.Remove(0, thisFrame.LastIndexOf(' ') + 1); - string Frames = thisLine.Remove(0, thisLine.IndexOf('/') + 1); - Frames = Frames.Remove(Frames.IndexOf(' ')); - - int thisProgress = (int)((Convert.ToDouble(thisFrame) / Convert.ToDouble(Frames)) * 100); - bwConvertMp3.ReportProgress(thisProgress); - } - } - } - - lame.WaitForExit(); - lame.Close(); - - if (File.Exists("C:\\cmtempmp3wav.wav")) - { - FileInfo fi = new FileInfo("C:\\cmtempmp3wav.wav"); - fi.MoveTo(TempWavePath); - } - } - catch (Exception ex) - { - if (File.Exists(TempWavePath)) File.Delete(TempWavePath); - Mp3Path = string.Empty; - ErrorBox("Error during conversion:\n" + ex.Message); - } - } - - void bwLoadChannel_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) - { - pbProgress.Value = 100; - lbStatusText.Text = string.Empty; - } - - void bwLoadChannel_ProgressChanged(object sender, ProgressChangedEventArgs e) - { - currentProgress.progressValue = e.ProgressPercentage; - currentProgress.progressState = (string)e.UserState; - - this.Invoke(ProgressUpdate); - } - - void bwLoadChannel_DoWork(object sender, DoWorkEventArgs e) - { - try - { - BackgroundWorker bwLoadChannel = sender as BackgroundWorker; - EventHandler SetSourceWad = new EventHandler(this.SetSourceWad); - byte[] WadFile = Wii.Tools.LoadFileToByteArray((string)e.Argument); - bool hashesMatch = true; - - if (Directory.Exists(TempUnpackPath)) Directory.Delete(TempUnpackPath, true); - - bwLoadChannel.ReportProgress(0, "Loading WAD..."); - Wii.WadUnpack.UnpackWad(WadFile, TempUnpackPath, out hashesMatch); - if (Wii.U8.CheckU8(TempUnpackPath + "00000000.app") == false) - throw new Exception("CustomizeMii only edits Channel WADs!"); - - this.Invoke(SetSourceWad); - - bwLoadChannel.ReportProgress(25, "Loading 00000000.app..."); - Wii.U8.UnpackU8(TempUnpackPath + "00000000.app", TempUnpackPath + "00000000.app_OUT"); - - bwLoadChannel.ReportProgress(50, "Loading banner.bin..."); - Wii.U8.UnpackU8(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin", TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT"); - - bwLoadChannel.ReportProgress(75, "Loading icon.bin..."); - Wii.U8.UnpackU8(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin", TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT"); - - bwLoadChannel.ReportProgress(90, "Gathering Information..."); - string[] ChannelTitles = Wii.WadInfo.GetChannelTitles(WadFile); - string TitleID = Wii.WadInfo.GetTitleID(WadFile, 1); - - SetText(tbAllLanguages, ChannelTitles[1]); - - if (ChannelTitles[0] != ChannelTitles[1]) - SetText(tbJapanese, ChannelTitles[0]); - if (ChannelTitles[2] != ChannelTitles[1]) - SetText(tbGerman, ChannelTitles[2]); - if (ChannelTitles[3] != ChannelTitles[1]) - SetText(tbFrench, ChannelTitles[3]); - if (ChannelTitles[4] != ChannelTitles[1]) - SetText(tbSpanish, ChannelTitles[4]); - if (ChannelTitles[5] != ChannelTitles[1]) - SetText(tbItalian, ChannelTitles[5]); - if (ChannelTitles[6] != ChannelTitles[1]) - SetText(tbDutch, ChannelTitles[6]); - - SetText(tbTitleID, TitleID); - - EventHandler AddBannerTpls = new EventHandler(this.AddBannerTpls); - EventHandler AddIconTpls = new EventHandler(this.AddIconTpls); - EventHandler AddBrlyts = new EventHandler(this.AddBrlyts); - EventHandler AddBrlans = new EventHandler(this.AddBrlans); - this.Invoke(AddBannerTpls); - this.Invoke(AddIconTpls); - this.Invoke(AddBrlyts); - this.Invoke(AddBrlans); - - bwLoadChannel.ReportProgress(100); - EventHandler EnableCtrls = new EventHandler(this.EnableControls); - this.Invoke(EnableCtrls); - - if (!hashesMatch) - System.Windows.Forms.MessageBox.Show("At least one content's hash doesn't match the hash in the TMD!\n" + - "Some files of the WAD might be corrupted, thus it might brick your Wii!", "Warning", - System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Warning); - } - catch (Exception ex) - { - if (Directory.Exists(TempUnpackPath)) Directory.Delete(TempUnpackPath, true); - SourceWad = string.Empty; - SetText(tbSourceWad, string.Empty); - ErrorBox(ex.Message); - } - } - - void bwCreateWad_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) - { - EventHandler EnableControls = new EventHandler(this.EnableControls); - EventHandler Initialize = new EventHandler(this.Initialize); - pbProgress.Value = 100; - lbStatusText.Text = string.Empty; - this.Invoke(EnableControls); - this.Invoke(Initialize); - } - - void bwCreateWad_ProgressChanged(object sender, ProgressChangedEventArgs e) - { - currentProgress.progressValue = e.ProgressPercentage; - currentProgress.progressState = (string)e.UserState; - - this.Invoke(ProgressUpdate); - } - - void bwCreateWad_DoWork(object sender, DoWorkEventArgs e) - { - try - { - BackgroundWorker bwCreateWad = sender as BackgroundWorker; - WadCreationInfo wadInfo = (WadCreationInfo)e.Argument; - EventHandler DisableControls = new EventHandler(this.DisableControls); - this.Invoke(DisableControls); - - this.sendToWii = wadInfo.sendToWii; - sendWadReady = 0; - - bwCreateWad.ReportProgress(0, "Making TPLs transparent"); - MakeBannerTplsTransparent(); - MakeIconTplsTransparent(); - - bwCreateWad.ReportProgress(5, "Packing icon.bin..."); - byte[] iconbin; - - if (!string.IsNullOrEmpty(IconReplace)) - iconbin = Wii.U8.PackU8(TempIconPath); - else - iconbin = Wii.U8.PackU8(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT"); - - if (cbLz77.Checked == true) iconbin = Wii.Lz77.Compress(iconbin); - iconbin = Wii.U8.AddHeaderIMD5(iconbin); - Wii.Tools.SaveFileFromByteArray(iconbin, TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin"); - Directory.Delete(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT", true); - - bwCreateWad.ReportProgress(25, "Packing banner.bin..."); - byte[] bannerbin; - - if (!string.IsNullOrEmpty(BannerReplace)) - bannerbin = Wii.U8.PackU8(TempBannerPath); - else - bannerbin = Wii.U8.PackU8(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT"); - - if (cbLz77.Checked == true) bannerbin = Wii.Lz77.Compress(bannerbin); - bannerbin = Wii.U8.AddHeaderIMD5(bannerbin); - Wii.Tools.SaveFileFromByteArray(bannerbin, TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin"); - Directory.Delete(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT", true); - - if (!string.IsNullOrEmpty(SoundReplace) || !string.IsNullOrEmpty(tbSound.Text)) - { - bwCreateWad.ReportProgress(50, "Packing sound.bin..."); - - if (!string.IsNullOrEmpty(SoundReplace)) - { - File.Delete(TempUnpackPath + "00000000.app_OUT\\meta\\sound.bin"); - File.Copy(TempSoundPath, TempUnpackPath + "00000000.app_OUT\\meta\\sound.bin"); - } - else if (!string.IsNullOrEmpty(tbSound.Text)) - { - if (tbSound.Text.EndsWith(".bns")) - { - Wii.Sound.BnsToSoundBin(tbSound.Text, TempUnpackPath + "00000000.app_OUT\\meta\\sound.bin", false); - } - else if (tbSound.Text.StartsWith("BNS:")) - { - Wii.Sound.BnsToSoundBin(TempBnsPath, TempUnpackPath + "00000000.app_OUT\\meta\\sound.bin", false); - } - else - { - string SoundFile = tbSound.Text; - if (tbSound.Text.EndsWith(".mp3")) SoundFile = TempWavePath; - - Wii.Sound.WaveToSoundBin(SoundFile, TempUnpackPath + "00000000.app_OUT\\meta\\sound.bin", false); - } - } - } - - bwCreateWad.ReportProgress(60, "Packing 00000000.app..."); - int[] Sizes = new int[3]; - string[] Titles = new string[] { tbJapanese.Text, tbEnglish.Text, tbGerman.Text, tbFrench.Text, tbSpanish.Text, tbItalian.Text, tbDutch.Text }; - - for (int i = 0; i < Titles.Length; i++) - if (string.IsNullOrEmpty(Titles[i])) Titles[i] = tbAllLanguages.Text; - - byte[] nullapp = Wii.U8.PackU8(TempUnpackPath + "00000000.app_OUT", out Sizes[0], out Sizes[1], out Sizes[2]); - nullapp = Wii.U8.AddHeaderIMET(nullapp, Titles, Sizes); - Wii.Tools.SaveFileFromByteArray(nullapp, TempUnpackPath + "00000000.app"); - Directory.Delete(TempUnpackPath + "00000000.app_OUT", true); - - string[] tikfile = Directory.GetFiles(TempUnpackPath, "*.tik"); - string[] tmdfile = Directory.GetFiles(TempUnpackPath, "*.tmd"); - byte[] tmd = Wii.Tools.LoadFileToByteArray(tmdfile[0]); - - if (!string.IsNullOrEmpty(tbDol.Text)) - { - bwCreateWad.ReportProgress(80, "Inserting new DOL..."); - string[] AppFiles = Directory.GetFiles(TempUnpackPath, "*.app"); - - foreach (string thisApp in AppFiles) - if (!thisApp.EndsWith("00000000.app")) File.Delete(thisApp); - - if (wadInfo.nandLoader == 0) - { - using (BinaryReader nandloader = new BinaryReader(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("CustomizeMii.Resources.comex.app"))) - { - using (FileStream fs = new FileStream(TempUnpackPath + "\\00000001.app", FileMode.Create)) - { - byte[] temp = nandloader.ReadBytes((int)nandloader.BaseStream.Length); - fs.Write(temp, 0, temp.Length); - } - } - - if (tbDol.Text.StartsWith("Simple Forwarder:")) - { - CreateForwarderSimple(TempUnpackPath + "\\00000002.app"); - } - else if (tbDol.Text.StartsWith("Complex Forwarder:")) - { - bwCreateWad.ReportProgress(82, "Compiling Forwarder..."); - CreateForwarderComplex(TempUnpackPath + "\\00000002.app"); - } - else if (tbDol.Text == "Internal" || tbDol.Text.EndsWith(".wad")) - { - File.Copy(TempDolPath, TempUnpackPath + "\\00000002.app"); - } - else - { - File.Copy(tbDol.Text, TempUnpackPath + "\\00000002.app"); - } - - tmd = Wii.WadEdit.ChangeTmdBootIndex(tmd, 1); - } - else - { - using (BinaryReader nandloader = new BinaryReader(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("CustomizeMii.Resources.Waninkoko.app"))) - { - using (FileStream fs = new FileStream(TempUnpackPath + "\\00000002.app", FileMode.Create)) - { - byte[] temp = nandloader.ReadBytes((int)nandloader.BaseStream.Length); - fs.Write(temp, 0, temp.Length); - } - } - - if (tbDol.Text.StartsWith("Simple Forwarder:")) - { - CreateForwarderSimple(TempUnpackPath + "\\00000001.app"); - } - else if (tbDol.Text.StartsWith("Complex Forwarder:")) - { - bwCreateWad.ReportProgress(82, "Compiling Forwarder..."); - CreateForwarderComplex(TempUnpackPath + "\\00000001.app"); - } - else if (tbDol.Text == "Internal") - { - File.Copy(TempDolPath, TempUnpackPath + "\\00000001.app"); - } - else - { - File.Copy(tbDol.Text, TempUnpackPath + "\\00000001.app"); - } - - tmd = Wii.WadEdit.ChangeTmdBootIndex(tmd, 2); - } - - tmd = Wii.WadEdit.ChangeTmdContentCount(tmd, 3); - - bwCreateWad.ReportProgress(85, "Updating TMD..."); - File.Delete(tmdfile[0]); - using (FileStream fs = new FileStream(tmdfile[0], FileMode.Create)) - { - byte[] tmdconts = new byte[108]; - tmdconts[7] = 0x01; - tmdconts[39] = 0x01; - tmdconts[41] = 0x01; - tmdconts[43] = 0x01; - tmdconts[75] = 0x02; - tmdconts[77] = 0x02; - tmdconts[79] = 0x01; - - fs.Write(tmd, 0, 484); - fs.Write(tmdconts, 0, tmdconts.Length); - } - } - - bwCreateWad.ReportProgress(85, "Updating TMD..."); - Wii.WadEdit.UpdateTmdContents(tmdfile[0]); - - Wii.WadEdit.ChangeTitleID(tikfile[0], 0, tbTitleID.Text.ToUpper()); - Wii.WadEdit.ChangeTitleID(tmdfile[0], 1, tbTitleID.Text.ToUpper()); - - bwCreateWad.ReportProgress(90, "Trucha Signing..."); - Wii.WadEdit.TruchaSign(tmdfile[0], 1); - Wii.WadEdit.TruchaSign(tikfile[0], 0); - - bwCreateWad.ReportProgress(95, "Packing WAD..."); - if (File.Exists(wadInfo.outFile)) File.Delete(wadInfo.outFile); - Wii.WadPack.PackWad(TempUnpackPath, wadInfo.outFile, false); - - bwCreateWad.ReportProgress(100, " "); - CreationTimer.Stop(); - - if (!sendToWii) - { - FileInfo fi = new FileInfo(wadInfo.outFile); - double fileSize = Math.Round(fi.Length * 0.0009765625 * 0.0009765625, 2); - - - InfoBox(string.Format("Successfully created custom channel!\nTime elapsed: {0} ms\nFilesize: {1} MB\nApprox. Blocks: {2}", CreationTimer.ElapsedMilliseconds, fileSize, Wii.WadInfo.GetNandBlocks(wadInfo.outFile))); - } - else sendWadReady = 1; - } - catch (Exception ex) - { - sendWadReady = -1; - CreationTimer.Stop(); - EventHandler EnableControls = new EventHandler(this.EnableControls); - this.Invoke(EnableControls); - ErrorBox(ex.Message); - } - } - } -} diff --git a/CustomizeMii/CustomizeMii_BnsConvert.Designer.cs b/CustomizeMii/CustomizeMii_BnsConvert.Designer.cs deleted file mode 100644 index 8faf26e..0000000 --- a/CustomizeMii/CustomizeMii_BnsConvert.Designer.cs +++ /dev/null @@ -1,391 +0,0 @@ -/* This file is part of CustomizeMii - * Copyright (C) 2009 Leathl - * - * CustomizeMii is free software: you can redistribute it and/or - * modify it under the terms of the GNU General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CustomizeMii is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -namespace CustomizeMii -{ - partial class CustomizeMii_BnsConvert - { - /// - /// Erforderliche Designervariable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Verwendete Ressourcen bereinigen. - /// - /// True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Vom Windows Form-Designer generierter Code - - /// - /// Erforderliche Methode für die Designerunterstützung. - /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. - /// - private void InitializeComponent() - { - this.btnCancel = new System.Windows.Forms.Button(); - this.btnConvert = new System.Windows.Forms.Button(); - this.lbAudioFile = new System.Windows.Forms.Label(); - this.tbAudioFile = new System.Windows.Forms.TextBox(); - this.btnBrowseAudioFile = new System.Windows.Forms.Button(); - this.gbLoop = new System.Windows.Forms.GroupBox(); - this.tbLoopStart = new System.Windows.Forms.TextBox(); - this.rbEnterManually = new System.Windows.Forms.RadioButton(); - this.rbFromAudioFile = new System.Windows.Forms.RadioButton(); - this.rbNone = new System.Windows.Forms.RadioButton(); - this.gbWaveInfo = new System.Windows.Forms.GroupBox(); - this.lbStatusValue = new System.Windows.Forms.Label(); - this.lbLoopStartValue = new System.Windows.Forms.Label(); - this.lbLoopCountValue = new System.Windows.Forms.Label(); - this.lbFormatValue = new System.Windows.Forms.Label(); - this.lbChannelCountValue = new System.Windows.Forms.Label(); - this.lbSamplerateValue = new System.Windows.Forms.Label(); - this.lbBitdepthValue = new System.Windows.Forms.Label(); - this.lbStatus = new System.Windows.Forms.Label(); - this.lbLoopStart = new System.Windows.Forms.Label(); - this.lbLoopCount = new System.Windows.Forms.Label(); - this.lbFormat = new System.Windows.Forms.Label(); - this.lbChannelCount = new System.Windows.Forms.Label(); - this.lbSamplerate = new System.Windows.Forms.Label(); - this.lbBitdepth = new System.Windows.Forms.Label(); - this.cbSourceSound = new System.Windows.Forms.CheckBox(); - this.gbLoop.SuspendLayout(); - this.gbWaveInfo.SuspendLayout(); - this.SuspendLayout(); - // - // btnCancel - // - this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.btnCancel.Location = new System.Drawing.Point(186, 179); - this.btnCancel.Name = "btnCancel"; - this.btnCancel.Size = new System.Drawing.Size(160, 23); - this.btnCancel.TabIndex = 10; - this.btnCancel.Text = "Cancel"; - this.btnCancel.UseVisualStyleBackColor = true; - this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); - // - // btnConvert - // - this.btnConvert.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.btnConvert.Location = new System.Drawing.Point(15, 179); - this.btnConvert.Name = "btnConvert"; - this.btnConvert.Size = new System.Drawing.Size(160, 23); - this.btnConvert.TabIndex = 9; - this.btnConvert.Text = "Convert"; - this.btnConvert.UseVisualStyleBackColor = true; - this.btnConvert.Click += new System.EventHandler(this.btnConvert_Click); - // - // lbAudioFile - // - this.lbAudioFile.AutoSize = true; - this.lbAudioFile.Location = new System.Drawing.Point(12, 24); - this.lbAudioFile.Name = "lbAudioFile"; - this.lbAudioFile.Size = new System.Drawing.Size(56, 13); - this.lbAudioFile.TabIndex = 11; - this.lbAudioFile.Text = "Audio File:"; - // - // tbAudioFile - // - this.tbAudioFile.Location = new System.Drawing.Point(74, 21); - this.tbAudioFile.Name = "tbAudioFile"; - this.tbAudioFile.ReadOnly = true; - this.tbAudioFile.Size = new System.Drawing.Size(191, 20); - this.tbAudioFile.TabIndex = 12; - // - // btnBrowseAudioFile - // - this.btnBrowseAudioFile.Location = new System.Drawing.Point(271, 20); - this.btnBrowseAudioFile.Name = "btnBrowseAudioFile"; - this.btnBrowseAudioFile.Size = new System.Drawing.Size(75, 23); - this.btnBrowseAudioFile.TabIndex = 13; - this.btnBrowseAudioFile.Text = "Browse..."; - this.btnBrowseAudioFile.UseVisualStyleBackColor = true; - this.btnBrowseAudioFile.Click += new System.EventHandler(this.btnBrowseAudioFile_Click); - // - // gbLoop - // - this.gbLoop.Controls.Add(this.tbLoopStart); - this.gbLoop.Controls.Add(this.rbEnterManually); - this.gbLoop.Controls.Add(this.rbFromAudioFile); - this.gbLoop.Controls.Add(this.rbNone); - this.gbLoop.Location = new System.Drawing.Point(15, 72); - this.gbLoop.Name = "gbLoop"; - this.gbLoop.Size = new System.Drawing.Size(331, 94); - this.gbLoop.TabIndex = 14; - this.gbLoop.TabStop = false; - this.gbLoop.Text = "Loop"; - // - // tbLoopStart - // - this.tbLoopStart.Enabled = false; - this.tbLoopStart.Location = new System.Drawing.Point(227, 64); - this.tbLoopStart.Name = "tbLoopStart"; - this.tbLoopStart.Size = new System.Drawing.Size(60, 20); - this.tbLoopStart.TabIndex = 1; - this.tbLoopStart.Text = "0"; - // - // rbEnterManually - // - this.rbEnterManually.AutoSize = true; - this.rbEnterManually.Location = new System.Drawing.Point(6, 65); - this.rbEnterManually.Name = "rbEnterManually"; - this.rbEnterManually.Size = new System.Drawing.Size(215, 17); - this.rbEnterManually.TabIndex = 0; - this.rbEnterManually.Text = "Enter Manually Loop Start Sample:"; - this.rbEnterManually.UseVisualStyleBackColor = true; - this.rbEnterManually.CheckedChanged += new System.EventHandler(this.rbSelectionChanged); - // - // rbFromAudioFile - // - this.rbFromAudioFile.AutoSize = true; - this.rbFromAudioFile.Location = new System.Drawing.Point(6, 42); - this.rbFromAudioFile.Name = "rbFromAudioFile"; - this.rbFromAudioFile.Size = new System.Drawing.Size(281, 17); - this.rbFromAudioFile.TabIndex = 0; - this.rbFromAudioFile.Text = "From Audio File (works only with pre-looped wave files)"; - this.rbFromAudioFile.UseVisualStyleBackColor = true; - this.rbFromAudioFile.CheckedChanged += new System.EventHandler(this.rbSelectionChanged); - // - // rbNone - // - this.rbNone.AutoSize = true; - this.rbNone.Checked = true; - this.rbNone.Location = new System.Drawing.Point(6, 19); - this.rbNone.Name = "rbNone"; - this.rbNone.Size = new System.Drawing.Size(51, 17); - this.rbNone.TabIndex = 0; - this.rbNone.TabStop = true; - this.rbNone.Text = "None"; - this.rbNone.UseVisualStyleBackColor = true; - this.rbNone.CheckedChanged += new System.EventHandler(this.rbSelectionChanged); - // - // gbWaveInfo - // - this.gbWaveInfo.Controls.Add(this.lbStatusValue); - this.gbWaveInfo.Controls.Add(this.lbLoopStartValue); - this.gbWaveInfo.Controls.Add(this.lbLoopCountValue); - this.gbWaveInfo.Controls.Add(this.lbFormatValue); - this.gbWaveInfo.Controls.Add(this.lbChannelCountValue); - this.gbWaveInfo.Controls.Add(this.lbSamplerateValue); - this.gbWaveInfo.Controls.Add(this.lbBitdepthValue); - this.gbWaveInfo.Controls.Add(this.lbStatus); - this.gbWaveInfo.Controls.Add(this.lbLoopStart); - this.gbWaveInfo.Controls.Add(this.lbLoopCount); - this.gbWaveInfo.Controls.Add(this.lbFormat); - this.gbWaveInfo.Controls.Add(this.lbChannelCount); - this.gbWaveInfo.Controls.Add(this.lbSamplerate); - this.gbWaveInfo.Controls.Add(this.lbBitdepth); - this.gbWaveInfo.Location = new System.Drawing.Point(363, 20); - this.gbWaveInfo.Name = "gbWaveInfo"; - this.gbWaveInfo.Size = new System.Drawing.Size(135, 182); - this.gbWaveInfo.TabIndex = 15; - this.gbWaveInfo.TabStop = false; - this.gbWaveInfo.Text = "Wave Info"; - // - // lbStatusValue - // - this.lbStatusValue.Location = new System.Drawing.Point(75, 151); - this.lbStatusValue.Name = "lbStatusValue"; - this.lbStatusValue.Size = new System.Drawing.Size(54, 13); - this.lbStatusValue.TabIndex = 7; - // - // lbLoopStartValue - // - this.lbLoopStartValue.Location = new System.Drawing.Point(75, 130); - this.lbLoopStartValue.Name = "lbLoopStartValue"; - this.lbLoopStartValue.Size = new System.Drawing.Size(54, 13); - this.lbLoopStartValue.TabIndex = 7; - // - // lbLoopCountValue - // - this.lbLoopCountValue.Location = new System.Drawing.Point(75, 109); - this.lbLoopCountValue.Name = "lbLoopCountValue"; - this.lbLoopCountValue.Size = new System.Drawing.Size(54, 13); - this.lbLoopCountValue.TabIndex = 7; - // - // lbFormatValue - // - this.lbFormatValue.Location = new System.Drawing.Point(75, 88); - this.lbFormatValue.Name = "lbFormatValue"; - this.lbFormatValue.Size = new System.Drawing.Size(54, 13); - this.lbFormatValue.TabIndex = 7; - // - // lbChannelCountValue - // - this.lbChannelCountValue.Location = new System.Drawing.Point(75, 67); - this.lbChannelCountValue.Name = "lbChannelCountValue"; - this.lbChannelCountValue.Size = new System.Drawing.Size(54, 13); - this.lbChannelCountValue.TabIndex = 7; - // - // lbSamplerateValue - // - this.lbSamplerateValue.Location = new System.Drawing.Point(75, 46); - this.lbSamplerateValue.Name = "lbSamplerateValue"; - this.lbSamplerateValue.Size = new System.Drawing.Size(54, 13); - this.lbSamplerateValue.TabIndex = 7; - // - // lbBitdepthValue - // - this.lbBitdepthValue.Location = new System.Drawing.Point(75, 25); - this.lbBitdepthValue.Name = "lbBitdepthValue"; - this.lbBitdepthValue.Size = new System.Drawing.Size(54, 13); - this.lbBitdepthValue.TabIndex = 7; - // - // lbStatus - // - this.lbStatus.AutoSize = true; - this.lbStatus.Location = new System.Drawing.Point(6, 151); - this.lbStatus.Name = "lbStatus"; - this.lbStatus.Size = new System.Drawing.Size(40, 13); - this.lbStatus.TabIndex = 6; - this.lbStatus.Text = "Status:"; - // - // lbLoopStart - // - this.lbLoopStart.AutoSize = true; - this.lbLoopStart.Location = new System.Drawing.Point(6, 130); - this.lbLoopStart.Name = "lbLoopStart"; - this.lbLoopStart.Size = new System.Drawing.Size(59, 13); - this.lbLoopStart.TabIndex = 5; - this.lbLoopStart.Text = "Loop Start:"; - // - // lbLoopCount - // - this.lbLoopCount.AutoSize = true; - this.lbLoopCount.Location = new System.Drawing.Point(6, 109); - this.lbLoopCount.Name = "lbLoopCount"; - this.lbLoopCount.Size = new System.Drawing.Size(39, 13); - this.lbLoopCount.TabIndex = 4; - this.lbLoopCount.Text = "Loops:"; - // - // lbFormat - // - this.lbFormat.AutoSize = true; - this.lbFormat.Location = new System.Drawing.Point(6, 88); - this.lbFormat.Name = "lbFormat"; - this.lbFormat.Size = new System.Drawing.Size(42, 13); - this.lbFormat.TabIndex = 3; - this.lbFormat.Text = "Format:"; - // - // lbChannelCount - // - this.lbChannelCount.AutoSize = true; - this.lbChannelCount.Location = new System.Drawing.Point(6, 67); - this.lbChannelCount.Name = "lbChannelCount"; - this.lbChannelCount.Size = new System.Drawing.Size(54, 13); - this.lbChannelCount.TabIndex = 2; - this.lbChannelCount.Text = "Channels:"; - // - // lbSamplerate - // - this.lbSamplerate.AutoSize = true; - this.lbSamplerate.Location = new System.Drawing.Point(6, 46); - this.lbSamplerate.Name = "lbSamplerate"; - this.lbSamplerate.Size = new System.Drawing.Size(63, 13); - this.lbSamplerate.TabIndex = 1; - this.lbSamplerate.Text = "Samplerate:"; - // - // lbBitdepth - // - this.lbBitdepth.AutoSize = true; - this.lbBitdepth.Location = new System.Drawing.Point(6, 25); - this.lbBitdepth.Name = "lbBitdepth"; - this.lbBitdepth.Size = new System.Drawing.Size(49, 13); - this.lbBitdepth.TabIndex = 0; - this.lbBitdepth.Text = "Bitdepth:"; - // - // cbSourceSound - // - this.cbSourceSound.AutoSize = true; - this.cbSourceSound.Enabled = false; - this.cbSourceSound.Location = new System.Drawing.Point(15, 50); - this.cbSourceSound.Name = "cbSourceSound"; - this.cbSourceSound.Size = new System.Drawing.Size(170, 17); - this.cbSourceSound.TabIndex = 16; - this.cbSourceSound.Text = "Take sound from source WAD"; - this.cbSourceSound.UseVisualStyleBackColor = true; - this.cbSourceSound.CheckedChanged += new System.EventHandler(this.cbSourceSound_CheckedChanged); - // - // CustomizeMii_BnsConvert - // - this.AcceptButton = this.btnConvert; - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.btnCancel; - this.ClientSize = new System.Drawing.Size(510, 220); - this.Controls.Add(this.cbSourceSound); - this.Controls.Add(this.gbWaveInfo); - this.Controls.Add(this.gbLoop); - this.Controls.Add(this.btnBrowseAudioFile); - this.Controls.Add(this.tbAudioFile); - this.Controls.Add(this.lbAudioFile); - this.Controls.Add(this.btnCancel); - this.Controls.Add(this.btnConvert); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; - this.Name = "CustomizeMii_BnsConvert"; - this.Text = "CustomizeMii_BnsConvert"; - this.Load += new System.EventHandler(this.CustomizeMii_BnsConvert_Load); - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.CustomizeMii_BnsConvert_FormClosing); - this.gbLoop.ResumeLayout(false); - this.gbLoop.PerformLayout(); - this.gbWaveInfo.ResumeLayout(false); - this.gbWaveInfo.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Button btnCancel; - private System.Windows.Forms.Button btnConvert; - private System.Windows.Forms.Label lbAudioFile; - private System.Windows.Forms.TextBox tbAudioFile; - private System.Windows.Forms.Button btnBrowseAudioFile; - private System.Windows.Forms.GroupBox gbLoop; - private System.Windows.Forms.RadioButton rbNone; - private System.Windows.Forms.RadioButton rbEnterManually; - private System.Windows.Forms.RadioButton rbFromAudioFile; - private System.Windows.Forms.TextBox tbLoopStart; - private System.Windows.Forms.GroupBox gbWaveInfo; - private System.Windows.Forms.Label lbBitdepth; - private System.Windows.Forms.Label lbSamplerate; - private System.Windows.Forms.Label lbChannelCount; - private System.Windows.Forms.Label lbFormat; - private System.Windows.Forms.Label lbLoopCount; - private System.Windows.Forms.Label lbLoopStart; - private System.Windows.Forms.Label lbStatus; - private System.Windows.Forms.Label lbStatusValue; - private System.Windows.Forms.Label lbLoopStartValue; - private System.Windows.Forms.Label lbLoopCountValue; - private System.Windows.Forms.Label lbFormatValue; - private System.Windows.Forms.Label lbChannelCountValue; - private System.Windows.Forms.Label lbSamplerateValue; - private System.Windows.Forms.Label lbBitdepthValue; - private System.Windows.Forms.CheckBox cbSourceSound; - - } -} \ No newline at end of file diff --git a/CustomizeMii/CustomizeMii_BnsConvert.cs b/CustomizeMii/CustomizeMii_BnsConvert.cs deleted file mode 100644 index 8bdf4b6..0000000 --- a/CustomizeMii/CustomizeMii_BnsConvert.cs +++ /dev/null @@ -1,356 +0,0 @@ -/* This file is part of CustomizeMii - * Copyright (C) 2009 Leathl - * - * CustomizeMii is free software: you can redistribute it and/or - * modify it under the terms of the GNU General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CustomizeMii is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -using System; -using System.IO; -using System.Windows.Forms; -using System.ComponentModel; -using WaveFile; - -namespace CustomizeMii -{ - public partial class CustomizeMii_BnsConvert : Form - { - private bool lameExists; - private int loopStartSample; - private BackgroundWorker bwGatherInfo; - private int bitDepth; - private int sampleRate; - private int channelCount; - private int dataFormat; - private int loopCount; - private int loopStart; - private bool error = false; - private bool cancelled = false; - - public string AudioFile { get { return tbAudioFile.Text; } } - public bool LoopNone { get { return rbNone.Checked; } } - public bool LoopFromAudio { get { return rbFromAudioFile.Checked; } } - public bool LoopManually { get { return rbEnterManually.Checked; } } - public int LoopStartSample { get { return loopStartSample; } } - public int ChannelCount { get { return channelCount; } } - - public CustomizeMii_BnsConvert(bool lameExists) - { - InitializeComponent(); - this.lameExists = lameExists; - } - - private void CustomizeMii_BnsConvert_Load(object sender, EventArgs e) - { - //this.Size = new System.Drawing.Size(358, 220); - this.Size = new System.Drawing.Size(btnCancel.Location.X + btnCancel.Size.Width + 15, 220); - - this.CenterToParent(); - bwGatherInfo = new BackgroundWorker(); - bwGatherInfo.WorkerSupportsCancellation = true; - - bwGatherInfo.DoWork += new DoWorkEventHandler(bwGatherInfo_DoWork); - - byte[] soundBin = Wii.Tools.LoadFileToByteArray(CustomizeMii_Main.TempUnpackPath + "00000000.app_OUT\\meta\\sound.bin", 32, 16); - - if (soundBin[0] == 'R' && soundBin[1] == 'I' && soundBin[2] == 'F' && soundBin[3] == 'F') - { cbSourceSound.Enabled = true; } - else if (soundBin[0] == 'L' && soundBin[1] == 'Z' && soundBin[2] == '7' && soundBin[3] == '7') - if (soundBin[9] == 'R' && soundBin[10] == 'I' && soundBin[11] == 'F' && soundBin[12] == 'F') - { cbSourceSound.Enabled = true; } - } - - private void CustomizeMii_BnsConvert_FormClosing(object sender, FormClosingEventArgs e) - { - cancelled = true; - - if (bwGatherInfo.IsBusy) - bwGatherInfo.CancelAsync(); - } - - private void rbSelectionChanged(object sender, EventArgs e) - { - tbLoopStart.Enabled = rbEnterManually.Checked; - } - - private void btnConvert_Click(object sender, EventArgs e) - { - if (!File.Exists(tbAudioFile.Text) && tbAudioFile.Text != "Internal Sound") - { - tbAudioFile.Focus(); - tbAudioFile.SelectAll(); - return; - } - - if (!int.TryParse(tbLoopStart.Text, out loopStartSample)) - { - tbLoopStart.Focus(); - tbLoopStart.SelectAll(); - } - - this.DialogResult = DialogResult.OK; - this.Close(); - } - - private void btnCancel_Click(object sender, EventArgs e) - { - this.DialogResult = DialogResult.Cancel; - this.Close(); - } - - private void cbSourceSound_CheckedChanged(object sender, EventArgs e) - { - if (cbSourceSound.Checked) - { - tbAudioFile.Text = "Internal Sound"; - - FileStream fs = new FileStream(CustomizeMii_Main.TempUnpackPath + "00000000.app_OUT\\meta\\sound.bin", FileMode.Open); - byte[] audio = new byte[fs.Length - 32]; - int offset = 0; - - fs.Seek(32, SeekOrigin.Begin); - fs.Read(audio, 0, audio.Length); - fs.Close(); - - if ((offset = Wii.Lz77.GetLz77Offset(audio)) != -1) - audio = Wii.Lz77.Decompress(audio, offset); - - foreach (Label thisLabel in gbWaveInfo.Controls) - if (thisLabel.Name.ToLower().Contains("value")) - { - thisLabel.ForeColor = System.Drawing.Color.Black; - thisLabel.Text = "Gathering"; - } - - bwGatherInfo.RunWorkerAsync(audio); - - //this.Size = new System.Drawing.Size(510, 220); - this.Size = new System.Drawing.Size(gbWaveInfo.Location.X + gbWaveInfo.Size.Width + 15, 220); - } - else - { - if (tbAudioFile.Text == "Internal Sound") - tbAudioFile.Text = string.Empty; - - //this.Size = new System.Drawing.Size(358, 220); - this.Size = new System.Drawing.Size(btnCancel.Location.X + btnCancel.Size.Width + 15, 220); - } - } - - private void btnBrowseAudioFile_Click(object sender, EventArgs e) - { - OpenFileDialog ofd = new OpenFileDialog(); - if (lameExists) - { ofd.Filter = "Wave|*.wav|MP3|*.mp3|All|*.wav;*.mp3"; ofd.FilterIndex = 3; } - else - { ofd.Filter = "Wave|*.wav"; } - - if (ofd.ShowDialog() == DialogResult.OK) - { - if (ofd.FileName != tbAudioFile.Text) - { - btnConvert.Enabled = false; - - cbSourceSound.Checked = false; - tbAudioFile.Text = ofd.FileName; - - if (ofd.FileName.EndsWith(".wav")) - { - rbFromAudioFile.Enabled = true; - - foreach (Label thisLabel in gbWaveInfo.Controls) - if (thisLabel.Name.ToLower().Contains("value")) - { - thisLabel.ForeColor = System.Drawing.Color.Black; - thisLabel.Text = "Gathering"; - } - - bwGatherInfo.RunWorkerAsync(ofd.FileName); - - //this.Size = new System.Drawing.Size(510, 220); - this.Size = new System.Drawing.Size(gbWaveInfo.Location.X + gbWaveInfo.Size.Width + 15, 220); - } - else if (ofd.FileName.EndsWith(".mp3")) - { - channelCount = 0; - btnConvert.Enabled = true; - - if (rbFromAudioFile.Checked) rbNone.Checked = true; - rbFromAudioFile.Enabled = false; - - //this.Size = new System.Drawing.Size(358, 220); - this.Size = new System.Drawing.Size(btnCancel.Location.X + btnCancel.Size.Width + 15, 220); - } - } - } - } - - void bwGatherInfo_DoWork(object sender, DoWorkEventArgs e) - { - EventHandler UpdateValues = new EventHandler(this.UpdateValues); - - try - { - Wave wave; - if (e.Argument is byte[]) - { wave = new Wave((byte[])e.Argument); } - else - { wave = new Wave((string)e.Argument); } - - try { bitDepth = wave.BitDepth; } - catch { bitDepth = -1; } - - try { sampleRate = wave.SampleRate; } - catch { sampleRate = -1; } - - try { channelCount = wave.ChannelCount; } - catch { channelCount = -1; } - - try { dataFormat = wave.DataFormat; } - catch { dataFormat = -1; } - - try { loopCount = wave.LoopCount; } - catch { loopCount = -1; } - - try { loopStart = wave.LoopStart; } - catch { loopStart = -1; } - - if (!cancelled) - this.Invoke(UpdateValues); - - if (e.Argument is byte[]) - { - byte[] audio = e.Argument as byte[]; - using (FileStream fs = new FileStream(CustomizeMii_Main.TempWavePath, FileMode.Create)) - { - fs.Write(audio, 0, audio.Length); - } - } - } - catch - { - error = true; - - if (!cancelled) - this.Invoke(UpdateValues); - } - } - - void UpdateValues(object sender, EventArgs e) - { - if (error == true) - { - foreach (Label thisLabel in gbWaveInfo.Controls) - if (thisLabel.Name.ToLower().Contains("value")) - { - thisLabel.Text = "Error"; - thisLabel.ForeColor = System.Drawing.Color.Red; - } - - error = false; - return; - } - - bool statusOk = true; - - if (bitDepth == -1) lbBitdepthValue.Text = "Error"; - else lbBitdepthValue.Text = bitDepth.ToString(); - - if (sampleRate == -1) lbSamplerateValue.Text = "Error"; - else lbSamplerateValue.Text = sampleRate.ToString(); - - if (dataFormat == -1) lbFormatValue.Text = "Error"; - else if (dataFormat == 1) lbFormatValue.Text = "1 (PCM)"; - else lbFormatValue.Text = dataFormat.ToString(); - - if (channelCount == -1) lbChannelCountValue.Text = "Error"; - else if (channelCount == 1) lbChannelCountValue.Text = "1 (Mono)"; - else if (channelCount == 2) lbChannelCountValue.Text = "2 (Stereo)"; - else lbChannelCountValue.Text = channelCount.ToString(); - - if (loopCount == -1) lbLoopCountValue.Text = "Error"; - else lbLoopCountValue.Text = loopCount.ToString(); - - if (loopCount == -1) lbLoopStartValue.Text = "Error"; - else if (loopCount == 1) { lbLoopStartValue.Text = loopStart == -1 ? "Error" : loopStart.ToString(); } - else lbLoopStartValue.Text = "-"; - - - - if (lbBitdepthValue.Text == "Error" || bitDepth != 16) - { - lbBitdepthValue.ForeColor = System.Drawing.Color.Red; - statusOk = false; - } - else lbBitdepthValue.ForeColor = System.Drawing.Color.Green; - - if (lbSamplerateValue.Text == "Error") - { - lbSamplerateValue.ForeColor = System.Drawing.Color.Red; - statusOk = false; - } - else lbSamplerateValue.ForeColor = System.Drawing.Color.Green; - - if (lbFormatValue.Text == "Error" || dataFormat != 1) - { - lbFormatValue.ForeColor = System.Drawing.Color.Red; - statusOk = false; - } - else lbFormatValue.ForeColor = System.Drawing.Color.Green; - - if (lbChannelCountValue.Text == "Error" || (channelCount > 2 || channelCount < 1)) - { - lbChannelCountValue.ForeColor = System.Drawing.Color.Red; - statusOk = false; - } - else lbChannelCountValue.ForeColor = System.Drawing.Color.Green; - - if (lbLoopCountValue.Text == "Error" || loopCount > 1) - lbLoopCountValue.ForeColor = System.Drawing.Color.Orange; - else lbLoopCountValue.ForeColor = System.Drawing.Color.Green; - - if (lbLoopStartValue.Text == "Error" || lbLoopStartValue.Text == "-") - lbLoopStartValue.ForeColor = System.Drawing.Color.Orange; - else lbLoopStartValue.ForeColor = System.Drawing.Color.Green; - - if (!statusOk) - { - lbStatusValue.Text = "Not OK!"; - lbStatusValue.ForeColor = System.Drawing.Color.Red; - - btnConvert.Enabled = false; - } - else - { - btnConvert.Enabled = true; - - if (lbLoopCountValue.ForeColor == System.Drawing.Color.Orange || - lbLoopStartValue.ForeColor == System.Drawing.Color.Orange) - { - lbStatusValue.Text = "No Loop!"; - lbStatusValue.ForeColor = System.Drawing.Color.Orange; - - if (rbFromAudioFile.Checked) rbNone.Checked = true; - rbFromAudioFile.Enabled = false; - } - else - { - rbFromAudioFile.Enabled = true; - - lbStatusValue.Text = "OK!"; - lbStatusValue.ForeColor = System.Drawing.Color.Green; - } - } - } - } -} diff --git a/CustomizeMii/CustomizeMii_BnsConvert.resx b/CustomizeMii/CustomizeMii_BnsConvert.resx deleted file mode 100644 index ff31a6d..0000000 --- a/CustomizeMii/CustomizeMii_BnsConvert.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/CustomizeMii/CustomizeMii_ComplexForwarder.Designer.cs b/CustomizeMii/CustomizeMii_ComplexForwarder.Designer.cs deleted file mode 100644 index e81c3b8..0000000 --- a/CustomizeMii/CustomizeMii_ComplexForwarder.Designer.cs +++ /dev/null @@ -1,205 +0,0 @@ -/* This file is part of CustomizeMii - * Copyright (C) 2009 Leathl - * - * CustomizeMii is free software: you can redistribute it and/or - * modify it under the terms of the GNU General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CustomizeMii is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -namespace CustomizeMii -{ - partial class CustomizeMii_ComplexForwarder - { - /// - /// Erforderliche Designervariable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Verwendete Ressourcen bereinigen. - /// - /// True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Vom Windows Form-Designer generierter Code - - /// - /// Erforderliche Methode für die Designerunterstützung. - /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. - /// - private void InitializeComponent() - { - this.lbAppFolder = new System.Windows.Forms.Label(); - this.tbAppFolder = new System.Windows.Forms.TextBox(); - this.cbImage43 = new System.Windows.Forms.CheckBox(); - this.cbImage169 = new System.Windows.Forms.CheckBox(); - this.tbImage43 = new System.Windows.Forms.TextBox(); - this.tbImage169 = new System.Windows.Forms.TextBox(); - this.btnBrowseImage43 = new System.Windows.Forms.Button(); - this.btnBrowseImage169 = new System.Windows.Forms.Button(); - this.label1 = new System.Windows.Forms.Label(); - this.btnOK = new System.Windows.Forms.Button(); - this.btnCancel = new System.Windows.Forms.Button(); - this.SuspendLayout(); - // - // lbAppFolder - // - this.lbAppFolder.AutoSize = true; - this.lbAppFolder.Location = new System.Drawing.Point(12, 17); - this.lbAppFolder.Name = "lbAppFolder"; - this.lbAppFolder.Size = new System.Drawing.Size(107, 13); - this.lbAppFolder.TabIndex = 0; - this.lbAppFolder.Text = "Application Directory:"; - // - // tbAppFolder - // - this.tbAppFolder.Location = new System.Drawing.Point(125, 14); - this.tbAppFolder.Name = "tbAppFolder"; - this.tbAppFolder.Size = new System.Drawing.Size(221, 20); - this.tbAppFolder.TabIndex = 1; - // - // cbImage43 - // - this.cbImage43.AutoSize = true; - this.cbImage43.Location = new System.Drawing.Point(15, 111); - this.cbImage43.Name = "cbImage43"; - this.cbImage43.Size = new System.Drawing.Size(73, 17); - this.cbImage43.TabIndex = 3; - this.cbImage43.Text = "Image 4:3"; - this.cbImage43.UseVisualStyleBackColor = true; - this.cbImage43.CheckedChanged += new System.EventHandler(this.cbImage43_CheckedChanged); - // - // cbImage169 - // - this.cbImage169.AutoSize = true; - this.cbImage169.Location = new System.Drawing.Point(15, 141); - this.cbImage169.Name = "cbImage169"; - this.cbImage169.Size = new System.Drawing.Size(79, 17); - this.cbImage169.TabIndex = 3; - this.cbImage169.Text = "Image 16:9"; - this.cbImage169.UseVisualStyleBackColor = true; - this.cbImage169.CheckedChanged += new System.EventHandler(this.cbImage169_CheckedChanged); - // - // tbImage43 - // - this.tbImage43.Enabled = false; - this.tbImage43.Location = new System.Drawing.Point(94, 109); - this.tbImage43.Name = "tbImage43"; - this.tbImage43.Size = new System.Drawing.Size(171, 20); - this.tbImage43.TabIndex = 4; - // - // tbImage169 - // - this.tbImage169.Enabled = false; - this.tbImage169.Location = new System.Drawing.Point(94, 138); - this.tbImage169.Name = "tbImage169"; - this.tbImage169.Size = new System.Drawing.Size(171, 20); - this.tbImage169.TabIndex = 5; - // - // btnBrowseImage43 - // - this.btnBrowseImage43.Enabled = false; - this.btnBrowseImage43.Location = new System.Drawing.Point(271, 109); - this.btnBrowseImage43.Name = "btnBrowseImage43"; - this.btnBrowseImage43.Size = new System.Drawing.Size(75, 23); - this.btnBrowseImage43.TabIndex = 6; - this.btnBrowseImage43.Text = "Browse..."; - this.btnBrowseImage43.UseVisualStyleBackColor = true; - this.btnBrowseImage43.Click += new System.EventHandler(this.btnBrowse_Click); - // - // btnBrowseImage169 - // - this.btnBrowseImage169.Enabled = false; - this.btnBrowseImage169.Location = new System.Drawing.Point(271, 138); - this.btnBrowseImage169.Name = "btnBrowseImage169"; - this.btnBrowseImage169.Size = new System.Drawing.Size(75, 23); - this.btnBrowseImage169.TabIndex = 6; - this.btnBrowseImage169.Text = "Browse..."; - this.btnBrowseImage169.UseVisualStyleBackColor = true; - this.btnBrowseImage169.Click += new System.EventHandler(this.btnBrowse_Click); - // - // label1 - // - this.label1.Location = new System.Drawing.Point(0, 55); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(358, 40); - this.label1.TabIndex = 7; - this.label1.Text = "The images must be 640 x 480, else they will be resized!\r\nThe 16:9 image should b" + - "e made in 832 x 480 and resized\r\nto 640 x 480, it will be streched on the Wii!"; - this.label1.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // btnOK - // - this.btnOK.Location = new System.Drawing.Point(15, 179); - this.btnOK.Name = "btnOK"; - this.btnOK.Size = new System.Drawing.Size(160, 23); - this.btnOK.TabIndex = 8; - this.btnOK.Text = "OK"; - this.btnOK.UseVisualStyleBackColor = true; - this.btnOK.Click += new System.EventHandler(this.btnOK_Click); - // - // btnCancel - // - this.btnCancel.Location = new System.Drawing.Point(186, 179); - this.btnCancel.Name = "btnCancel"; - this.btnCancel.Size = new System.Drawing.Size(160, 23); - this.btnCancel.TabIndex = 8; - this.btnCancel.Text = "Cancel"; - this.btnCancel.UseVisualStyleBackColor = true; - this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); - // - // CustomizeMii_ComplexForwarder - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(358, 220); - this.Controls.Add(this.btnCancel); - this.Controls.Add(this.btnOK); - this.Controls.Add(this.label1); - this.Controls.Add(this.btnBrowseImage169); - this.Controls.Add(this.btnBrowseImage43); - this.Controls.Add(this.tbImage169); - this.Controls.Add(this.tbImage43); - this.Controls.Add(this.cbImage169); - this.Controls.Add(this.cbImage43); - this.Controls.Add(this.tbAppFolder); - this.Controls.Add(this.lbAppFolder); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; - this.Name = "CustomizeMii_ComplexForwarder"; - this.Text = "CustomizeMii_ComplexForwarder"; - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Label lbAppFolder; - private System.Windows.Forms.Label label1; - public System.Windows.Forms.TextBox tbAppFolder; - public System.Windows.Forms.CheckBox cbImage43; - public System.Windows.Forms.CheckBox cbImage169; - public System.Windows.Forms.TextBox tbImage43; - public System.Windows.Forms.TextBox tbImage169; - public System.Windows.Forms.Button btnBrowseImage43; - public System.Windows.Forms.Button btnBrowseImage169; - private System.Windows.Forms.Button btnOK; - private System.Windows.Forms.Button btnCancel; - } -} \ No newline at end of file diff --git a/CustomizeMii/CustomizeMii_ComplexForwarder.cs b/CustomizeMii/CustomizeMii_ComplexForwarder.cs deleted file mode 100644 index 5d1f208..0000000 --- a/CustomizeMii/CustomizeMii_ComplexForwarder.cs +++ /dev/null @@ -1,84 +0,0 @@ -/* This file is part of CustomizeMii - * Copyright (C) 2009 Leathl - * - * CustomizeMii is free software: you can redistribute it and/or - * modify it under the terms of the GNU General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CustomizeMii is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; -using System.IO; - -namespace CustomizeMii -{ - public partial class CustomizeMii_ComplexForwarder : Form - { - public CustomizeMii_ComplexForwarder() - { - InitializeComponent(); - this.CenterToParent(); - } - - private void cbImage43_CheckedChanged(object sender, EventArgs e) - { - tbImage43.Enabled = cbImage43.Checked; - btnBrowseImage43.Enabled = cbImage43.Checked; - } - - private void cbImage169_CheckedChanged(object sender, EventArgs e) - { - tbImage169.Enabled = cbImage169.Checked; - btnBrowseImage169.Enabled = cbImage169.Checked; - } - - private void btnCancel_Click(object sender, EventArgs e) - { - this.DialogResult = DialogResult.Cancel; - this.Close(); - } - - private void btnOK_Click(object sender, EventArgs e) - { - if (string.IsNullOrEmpty(tbAppFolder.Text)) - { - tbAppFolder.Focus(); - } - else - { - if (!File.Exists(tbImage43.Text)) tbImage43.Text = string.Empty; - if (!File.Exists(tbImage169.Text)) tbImage169.Text = string.Empty; - - this.DialogResult = DialogResult.OK; - this.Close(); - } - } - - private void btnBrowse_Click(object sender, EventArgs e) - { - OpenFileDialog ofd = new OpenFileDialog(); - ofd.Filter = "PNG|*.png|JPG|*.jpg|GIF|*.gif|BMP|*.bmp|All|*.png;*.jpg;*.gif;*.bmp"; - ofd.FilterIndex = 5; - - if (ofd.ShowDialog() == DialogResult.OK) - { - if (sender == btnBrowseImage43) tbImage43.Text = ofd.FileName; - else tbImage169.Text = ofd.FileName; - } - } - } -} diff --git a/CustomizeMii/CustomizeMii_ComplexForwarder.resx b/CustomizeMii/CustomizeMii_ComplexForwarder.resx deleted file mode 100644 index ff31a6d..0000000 --- a/CustomizeMii/CustomizeMii_ComplexForwarder.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/CustomizeMii/CustomizeMii_Forwarders.cs b/CustomizeMii/CustomizeMii_Forwarders.cs deleted file mode 100644 index bfc2e7c..0000000 --- a/CustomizeMii/CustomizeMii_Forwarders.cs +++ /dev/null @@ -1,85 +0,0 @@ -/* This file is part of CustomizeMii - * Copyright (C) 2009 Leathl - * - * CustomizeMii is free software: you can redistribute it and/or - * modify it under the terms of the GNU General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CustomizeMii is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -using ForwardMii; - -namespace CustomizeMii -{ - namespace Forwarder - { - //Let's use this kind of wrapper, so CustomizeMii can still run, if the ForwardMii.dll is missing... - - internal class Complex - { - private string thisAppFolder; - private bool elfFirst = false; - private bool usbFirst = false; - private string image43; - private string image169; - public string AppFolder { get { return thisAppFolder; } set { thisAppFolder = value; } } - public bool ElfFirst { get { return elfFirst; } set { elfFirst = value; } } - public bool UsbFirst { get { return usbFirst; } set { usbFirst = value; } } - public string Image43 { get { return image43; } set { image43 = value; } } - public string Image169 { get { return image169; } set { image169 = value; } } - - public Complex() - { - - } - - public void Save(string Destination) - { - GXForwarder Forwarder = new GXForwarder(thisAppFolder, usbFirst, elfFirst, image43, image169); - Forwarder.Save(Destination, true); - } - - public void Clear() - { - thisAppFolder = string.Empty; - elfFirst = false; - usbFirst = false; - image43 = string.Empty; - image169 = string.Empty; - } - } - - internal class Simple - { - private string thisAppFolder; - private bool toElf = false; - public string AppFolder { get { return thisAppFolder; } set { thisAppFolder = value; } } - public bool ForwardToElf { get { return toElf; } set { toElf = value; } } - - public Simple() - { - - } - - public void Save(string Destination) - { - SDSDHC_Forwarder Forwarder = new SDSDHC_Forwarder(thisAppFolder, toElf); - Forwarder.Save(Destination, true); - } - - public void Clear() - { - thisAppFolder = string.Empty; - toElf = false; - } - } - } -} diff --git a/CustomizeMii/CustomizeMii_InputBox.Designer.cs b/CustomizeMii/CustomizeMii_InputBox.Designer.cs deleted file mode 100644 index a3ef099..0000000 --- a/CustomizeMii/CustomizeMii_InputBox.Designer.cs +++ /dev/null @@ -1,139 +0,0 @@ -/* This file is part of CustomizeMii - * Copyright (C) 2009 Leathl - * - * CustomizeMii is free software: you can redistribute it and/or - * modify it under the terms of the GNU General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CustomizeMii is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -namespace CustomizeMii -{ - partial class CustomizeMii_InputBox - { - /// - /// Erforderliche Designervariable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Verwendete Ressourcen bereinigen. - /// - /// True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Vom Windows Form-Designer generierter Code - - /// - /// Erforderliche Methode für die Designerunterstützung. - /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. - /// - private void InitializeComponent() - { - this.tbInput = new System.Windows.Forms.TextBox(); - this.lbInfo = new System.Windows.Forms.Label(); - this.btnOK = new System.Windows.Forms.Button(); - this.btnExit = new System.Windows.Forms.Button(); - this.cbElf = new System.Windows.Forms.CheckBox(); - this.SuspendLayout(); - // - // tbInput - // - this.tbInput.Anchor = System.Windows.Forms.AnchorStyles.Bottom; - this.tbInput.Location = new System.Drawing.Point(7, 34); - this.tbInput.MaxLength = 3; - this.tbInput.Name = "tbInput"; - this.tbInput.Size = new System.Drawing.Size(222, 20); - this.tbInput.TabIndex = 0; - // - // lbInfo - // - this.lbInfo.Anchor = System.Windows.Forms.AnchorStyles.Top; - this.lbInfo.Location = new System.Drawing.Point(4, 9); - this.lbInfo.Name = "lbInfo"; - this.lbInfo.Size = new System.Drawing.Size(225, 32); - this.lbInfo.TabIndex = 1; - this.lbInfo.Text = "Please enter \"45e\" to create the Common-Key"; - this.lbInfo.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // btnOK - // - this.btnOK.Anchor = System.Windows.Forms.AnchorStyles.Bottom; - this.btnOK.Location = new System.Drawing.Point(7, 62); - this.btnOK.Name = "btnOK"; - this.btnOK.Size = new System.Drawing.Size(108, 23); - this.btnOK.TabIndex = 2; - this.btnOK.Text = "OK"; - this.btnOK.UseVisualStyleBackColor = true; - this.btnOK.Click += new System.EventHandler(this.btnOK_Click); - // - // btnExit - // - this.btnExit.Anchor = System.Windows.Forms.AnchorStyles.Bottom; - this.btnExit.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.btnExit.Location = new System.Drawing.Point(121, 62); - this.btnExit.Name = "btnExit"; - this.btnExit.Size = new System.Drawing.Size(108, 23); - this.btnExit.TabIndex = 3; - this.btnExit.Text = "Exit"; - this.btnExit.UseVisualStyleBackColor = true; - this.btnExit.Click += new System.EventHandler(this.btnExit_Click); - // - // cbElf - // - this.cbElf.Anchor = System.Windows.Forms.AnchorStyles.Bottom; - this.cbElf.AutoSize = true; - this.cbElf.Location = new System.Drawing.Point(61, 16); - this.cbElf.Name = "cbElf"; - this.cbElf.Size = new System.Drawing.Size(114, 17); - this.cbElf.TabIndex = 4; - this.cbElf.Text = "Forward to boot.elf"; - this.cbElf.UseVisualStyleBackColor = true; - this.cbElf.Visible = false; - // - // CustomizeMii_InputBox - // - this.AcceptButton = this.btnOK; - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.btnExit; - this.ClientSize = new System.Drawing.Size(238, 92); - this.Controls.Add(this.cbElf); - this.Controls.Add(this.btnExit); - this.Controls.Add(this.btnOK); - this.Controls.Add(this.tbInput); - this.Controls.Add(this.lbInfo); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; - this.Name = "CustomizeMii_InputBox"; - this.ShowInTaskbar = false; - this.Text = "InputBox"; - this.Load += new System.EventHandler(this.CustomizeMii_InputBox_Load); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Button btnOK; - public System.Windows.Forms.Label lbInfo; - public System.Windows.Forms.TextBox tbInput; - public System.Windows.Forms.Button btnExit; - public System.Windows.Forms.CheckBox cbElf; - } -} \ No newline at end of file diff --git a/CustomizeMii/CustomizeMii_InputBox.cs b/CustomizeMii/CustomizeMii_InputBox.cs deleted file mode 100644 index edf7c7d..0000000 --- a/CustomizeMii/CustomizeMii_InputBox.cs +++ /dev/null @@ -1,91 +0,0 @@ -/* This file is part of CustomizeMii - * Copyright (C) 2009 Leathl - * - * CustomizeMii is free software: you can redistribute it and/or - * modify it under the terms of the GNU General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CustomizeMii is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; - -namespace CustomizeMii -{ - public partial class CustomizeMii_InputBox : Form - { - public bool CommonKeyMode = true; - public string Input - { - get { return tbInput.Text; } - } - - public CustomizeMii_InputBox() - { - InitializeComponent(); - } - - public CustomizeMii_InputBox(bool CommonKeyMode) - { - InitializeComponent(); - this.CommonKeyMode = CommonKeyMode; - } - - private void CustomizeMii_InputBox_Load(object sender, EventArgs e) - { - this.CenterToScreen(); - } - - private void btnExit_Click(object sender, EventArgs e) - { - if (CommonKeyMode == true) - { - Application.Exit(); - } - else this.Close(); - } - - private void btnOK_Click(object sender, EventArgs e) - { - if (this.CommonKeyMode == true) - { - if (tbInput.Text == "45e") - { - this.DialogResult = DialogResult.OK; - this.Close(); - } - else - { - tbInput.Focus(); - tbInput.SelectAll(); - } - } - else - { - if (tbInput.Text.Length > 2) - { - this.DialogResult = DialogResult.OK; - this.Close(); - } - else - { - tbInput.Focus(); - tbInput.SelectAll(); - } - } - } - } -} diff --git a/CustomizeMii/CustomizeMii_InputBox.resx b/CustomizeMii/CustomizeMii_InputBox.resx deleted file mode 100644 index ff31a6d..0000000 --- a/CustomizeMii/CustomizeMii_InputBox.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/CustomizeMii/CustomizeMii_Main.Designer.cs b/CustomizeMii/CustomizeMii_Main.Designer.cs deleted file mode 100644 index b92307f..0000000 --- a/CustomizeMii/CustomizeMii_Main.Designer.cs +++ /dev/null @@ -1,1612 +0,0 @@ -/* This file is part of CustomizeMii - * Copyright (C) 2009 Leathl - * - * CustomizeMii is free software: you can redistribute it and/or - * modify it under the terms of the GNU General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CustomizeMii is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -namespace CustomizeMii -{ - partial class CustomizeMii_Main - { - /// - /// Erforderliche Designervariable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Verwendete Ressourcen bereinigen. - /// - /// True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Vom Windows Form-Designer generierter Code - - /// - /// Erforderliche Methode für die Designerunterstützung. - /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CustomizeMii_Main)); - this.btnCreateWad = new System.Windows.Forms.Button(); - this.tabControl = new System.Windows.Forms.TabControl(); - this.tabSource = new System.Windows.Forms.TabPage(); - this.tbReplace = new System.Windows.Forms.TextBox(); - this.btnBrowseReplace = new System.Windows.Forms.Button(); - this.btnClearReplace = new System.Windows.Forms.Button(); - this.cmbReplace = new System.Windows.Forms.ComboBox(); - this.btnSaveBaseWad = new System.Windows.Forms.Button(); - this.btnPreviewBaseWad = new System.Windows.Forms.Button(); - this.btnLoadBaseWad = new System.Windows.Forms.Button(); - this.lbxBaseWads = new System.Windows.Forms.ListBox(); - this.btnBrowseSource = new System.Windows.Forms.Button(); - this.tbSourceWad = new System.Windows.Forms.TextBox(); - this.lbSource = new System.Windows.Forms.Label(); - this.tabTitle = new System.Windows.Forms.TabPage(); - this.tbItalian = new System.Windows.Forms.TextBox(); - this.tbFrench = new System.Windows.Forms.TextBox(); - this.tbJapanese = new System.Windows.Forms.TextBox(); - this.tbDutch = new System.Windows.Forms.TextBox(); - this.tbSpanish = new System.Windows.Forms.TextBox(); - this.tbGerman = new System.Windows.Forms.TextBox(); - this.tbEnglish = new System.Windows.Forms.TextBox(); - this.lbDutch = new System.Windows.Forms.Label(); - this.lbItalian = new System.Windows.Forms.Label(); - this.lbSpanish = new System.Windows.Forms.Label(); - this.lbFrench = new System.Windows.Forms.Label(); - this.lbGerman = new System.Windows.Forms.Label(); - this.lbJapanese = new System.Windows.Forms.Label(); - this.lbEnglish = new System.Windows.Forms.Label(); - this.lbSpecificLanguageTitles = new System.Windows.Forms.Label(); - this.tbAllLanguages = new System.Windows.Forms.TextBox(); - this.lbAllLanguages = new System.Windows.Forms.Label(); - this.tabOptions = new System.Windows.Forms.TabPage(); - this.btnOptionsExtract = new System.Windows.Forms.Button(); - this.btnForwarder = new System.Windows.Forms.Button(); - this.cbFailureChecks = new System.Windows.Forms.CheckBox(); - this.cbLz77 = new System.Windows.Forms.CheckBox(); - this.lbOptionsOptional = new System.Windows.Forms.Label(); - this.btnBrowseSound = new System.Windows.Forms.Button(); - this.tbSound = new System.Windows.Forms.TextBox(); - this.cmbNandLoader = new System.Windows.Forms.ComboBox(); - this.btnBrowseDol = new System.Windows.Forms.Button(); - this.tbDol = new System.Windows.Forms.TextBox(); - this.tbTitleID = new System.Windows.Forms.TextBox(); - this.lbNewSound = new System.Windows.Forms.Label(); - this.lbNandLoader = new System.Windows.Forms.Label(); - this.lbNewDol = new System.Windows.Forms.Label(); - this.lbTitleID = new System.Windows.Forms.Label(); - this.tabBanner = new System.Windows.Forms.TabPage(); - this.cbBannerMakeTransparent = new System.Windows.Forms.CheckBox(); - this.cmbFormatBanner = new System.Windows.Forms.ComboBox(); - this.lbFormatBanner = new System.Windows.Forms.Label(); - this.btnPreviewBanner = new System.Windows.Forms.Button(); - this.btnExtractBanner = new System.Windows.Forms.Button(); - this.btnDeleteBanner = new System.Windows.Forms.Button(); - this.btnAddBanner = new System.Windows.Forms.Button(); - this.btnReplaceBanner = new System.Windows.Forms.Button(); - this.lbxBannerTpls = new System.Windows.Forms.ListBox(); - this.tabIcon = new System.Windows.Forms.TabPage(); - this.cbIconMakeTransparent = new System.Windows.Forms.CheckBox(); - this.cmbFormatIcon = new System.Windows.Forms.ComboBox(); - this.lbFormatIcon = new System.Windows.Forms.Label(); - this.btnPreviewIcon = new System.Windows.Forms.Button(); - this.btnExtractIcon = new System.Windows.Forms.Button(); - this.btnAddIcon = new System.Windows.Forms.Button(); - this.btnDeleteIcon = new System.Windows.Forms.Button(); - this.btnReplaceIcon = new System.Windows.Forms.Button(); - this.lbxIconTpls = new System.Windows.Forms.ListBox(); - this.tabBrlyt = new System.Windows.Forms.TabPage(); - this.btnBrlytListTpls = new System.Windows.Forms.Button(); - this.lbBrlytWarning = new System.Windows.Forms.Label(); - this.lbBrlytActions = new System.Windows.Forms.Label(); - this.btnBrlytExtract = new System.Windows.Forms.Button(); - this.btnBrlytReplace = new System.Windows.Forms.Button(); - this.lbBrlytIcon = new System.Windows.Forms.Label(); - this.lbBrlytBanner = new System.Windows.Forms.Label(); - this.lbxBrlytIcon = new System.Windows.Forms.ListBox(); - this.lbxBrlytBanner = new System.Windows.Forms.ListBox(); - this.tabBrlan = new System.Windows.Forms.TabPage(); - this.lbBrlanWarning = new System.Windows.Forms.Label(); - this.lbBrlanActions = new System.Windows.Forms.Label(); - this.btnBrlanExtract = new System.Windows.Forms.Button(); - this.btnBrlanDelete = new System.Windows.Forms.Button(); - this.btnBrlanReplace = new System.Windows.Forms.Button(); - this.lbBrlanIcon = new System.Windows.Forms.Label(); - this.lbBrlanBanner = new System.Windows.Forms.Label(); - this.btnBrlanAdd = new System.Windows.Forms.Button(); - this.lbxBrlanIcon = new System.Windows.Forms.ListBox(); - this.lbxBrlanBanner = new System.Windows.Forms.ListBox(); - this.tabInstructions = new System.Windows.Forms.TabPage(); - this.rtbInstructions = new System.Windows.Forms.RichTextBox(); - this.tabCredits = new System.Windows.Forms.TabPage(); - this.llbUpdateAvailabe = new System.Windows.Forms.LinkLabel(); - this.llbSite = new System.Windows.Forms.LinkLabel(); - this.lbCreditThanks = new System.Windows.Forms.Label(); - this.lbCreditVersion = new System.Windows.Forms.Label(); - this.lbCreditInfo = new System.Windows.Forms.Label(); - this.ssMain = new System.Windows.Forms.StatusStrip(); - this.lbStatus = new System.Windows.Forms.ToolStripStatusLabel(); - this.lbStatusText = new System.Windows.Forms.ToolStripStatusLabel(); - this.pbProgress = new System.Windows.Forms.ToolStripProgressBar(); - this.cmForwarder = new System.Windows.Forms.ContextMenuStrip(this.components); - this.cmSimpleForwarder = new System.Windows.Forms.ToolStripMenuItem(); - this.cmComplexForwarder = new System.Windows.Forms.ToolStripMenuItem(); - this.cmOptionsExtract = new System.Windows.Forms.ContextMenuStrip(this.components); - this.cmExtractWad = new System.Windows.Forms.ToolStripMenuItem(); - this.cmExtractDol = new System.Windows.Forms.ToolStripMenuItem(); - this.tsExtractSound = new System.Windows.Forms.ToolStripMenuItem(); - this.cmExtractSoundAsBin = new System.Windows.Forms.ToolStripMenuItem(); - this.cmExtractSoundAsAudio = new System.Windows.Forms.ToolStripMenuItem(); - this.tsExtractImages = new System.Windows.Forms.ToolStripMenuItem(); - this.cmExtractBannerImages = new System.Windows.Forms.ToolStripMenuItem(); - this.cmExtractIconImages = new System.Windows.Forms.ToolStripMenuItem(); - this.cmExtractBothImages = new System.Windows.Forms.ToolStripMenuItem(); - this.cmSound = new System.Windows.Forms.ContextMenuStrip(this.components); - this.cmLoadAudioFile = new System.Windows.Forms.ToolStripMenuItem(); - this.cmConvertToBns = new System.Windows.Forms.ToolStripMenuItem(); - this.cmDol = new System.Windows.Forms.ContextMenuStrip(this.components); - this.cmLoadDol = new System.Windows.Forms.ToolStripMenuItem(); - this.cmDolFromSource = new System.Windows.Forms.ToolStripMenuItem(); - this.panCredits = new System.Windows.Forms.Panel(); - this.tabControl.SuspendLayout(); - this.tabSource.SuspendLayout(); - this.tabTitle.SuspendLayout(); - this.tabOptions.SuspendLayout(); - this.tabBanner.SuspendLayout(); - this.tabIcon.SuspendLayout(); - this.tabBrlyt.SuspendLayout(); - this.tabBrlan.SuspendLayout(); - this.tabInstructions.SuspendLayout(); - this.tabCredits.SuspendLayout(); - this.ssMain.SuspendLayout(); - this.cmForwarder.SuspendLayout(); - this.cmOptionsExtract.SuspendLayout(); - this.cmSound.SuspendLayout(); - this.cmDol.SuspendLayout(); - this.panCredits.SuspendLayout(); - this.SuspendLayout(); - // - // btnCreateWad - // - this.btnCreateWad.Dock = System.Windows.Forms.DockStyle.Bottom; - this.btnCreateWad.Location = new System.Drawing.Point(0, 235); - this.btnCreateWad.Name = "btnCreateWad"; - this.btnCreateWad.Size = new System.Drawing.Size(451, 33); - this.btnCreateWad.TabIndex = 0; - this.btnCreateWad.Text = "Create WAD"; - this.btnCreateWad.UseVisualStyleBackColor = true; - this.btnCreateWad.Click += new System.EventHandler(this.btnCreateWad_Click); - // - // tabControl - // - this.tabControl.Controls.Add(this.tabSource); - this.tabControl.Controls.Add(this.tabTitle); - this.tabControl.Controls.Add(this.tabOptions); - this.tabControl.Controls.Add(this.tabBanner); - this.tabControl.Controls.Add(this.tabIcon); - this.tabControl.Controls.Add(this.tabBrlyt); - this.tabControl.Controls.Add(this.tabBrlan); - this.tabControl.Controls.Add(this.tabInstructions); - this.tabControl.Controls.Add(this.tabCredits); - this.tabControl.Dock = System.Windows.Forms.DockStyle.Fill; - this.tabControl.Location = new System.Drawing.Point(0, 0); - this.tabControl.Name = "tabControl"; - this.tabControl.SelectedIndex = 0; - this.tabControl.Size = new System.Drawing.Size(451, 235); - this.tabControl.TabIndex = 1; - this.tabControl.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.tabControl_Selecting); - // - // tabSource - // - this.tabSource.Controls.Add(this.tbReplace); - this.tabSource.Controls.Add(this.btnBrowseReplace); - this.tabSource.Controls.Add(this.btnClearReplace); - this.tabSource.Controls.Add(this.cmbReplace); - this.tabSource.Controls.Add(this.btnSaveBaseWad); - this.tabSource.Controls.Add(this.btnPreviewBaseWad); - this.tabSource.Controls.Add(this.btnLoadBaseWad); - this.tabSource.Controls.Add(this.lbxBaseWads); - this.tabSource.Controls.Add(this.btnBrowseSource); - this.tabSource.Controls.Add(this.tbSourceWad); - this.tabSource.Controls.Add(this.lbSource); - this.tabSource.Location = new System.Drawing.Point(4, 22); - this.tabSource.Name = "tabSource"; - this.tabSource.Padding = new System.Windows.Forms.Padding(3); - this.tabSource.Size = new System.Drawing.Size(443, 209); - this.tabSource.TabIndex = 0; - this.tabSource.Text = "Source"; - this.tabSource.UseVisualStyleBackColor = true; - // - // tbReplace - // - this.tbReplace.Location = new System.Drawing.Point(100, 173); - this.tbReplace.Name = "tbReplace"; - this.tbReplace.ReadOnly = true; - this.tbReplace.Size = new System.Drawing.Size(173, 20); - this.tbReplace.TabIndex = 10; - this.tbReplace.Tag = "Disabled"; - // - // btnBrowseReplace - // - this.btnBrowseReplace.Location = new System.Drawing.Point(279, 172); - this.btnBrowseReplace.Name = "btnBrowseReplace"; - this.btnBrowseReplace.Size = new System.Drawing.Size(75, 23); - this.btnBrowseReplace.TabIndex = 9; - this.btnBrowseReplace.Text = "Browse..."; - this.btnBrowseReplace.UseVisualStyleBackColor = true; - this.btnBrowseReplace.Click += new System.EventHandler(this.btnBrowseReplace_Click); - // - // btnClearReplace - // - this.btnClearReplace.Location = new System.Drawing.Point(360, 172); - this.btnClearReplace.Name = "btnClearReplace"; - this.btnClearReplace.Size = new System.Drawing.Size(75, 23); - this.btnClearReplace.TabIndex = 8; - this.btnClearReplace.Text = "Clear"; - this.btnClearReplace.UseVisualStyleBackColor = true; - this.btnClearReplace.Click += new System.EventHandler(this.btnClearReplace_Click); - // - // cmbReplace - // - this.cmbReplace.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cmbReplace.FormattingEnabled = true; - this.cmbReplace.Items.AddRange(new object[] { - "Banner", - "Icon", - "Sound"}); - this.cmbReplace.Location = new System.Drawing.Point(11, 172); - this.cmbReplace.Name = "cmbReplace"; - this.cmbReplace.Size = new System.Drawing.Size(83, 21); - this.cmbReplace.TabIndex = 7; - this.cmbReplace.SelectedIndexChanged += new System.EventHandler(this.cmbReplace_SelectedIndexChanged); - // - // btnSaveBaseWad - // - this.btnSaveBaseWad.Location = new System.Drawing.Point(360, 127); - this.btnSaveBaseWad.Name = "btnSaveBaseWad"; - this.btnSaveBaseWad.Size = new System.Drawing.Size(75, 23); - this.btnSaveBaseWad.TabIndex = 6; - this.btnSaveBaseWad.Text = "Save"; - this.btnSaveBaseWad.UseVisualStyleBackColor = true; - this.btnSaveBaseWad.Click += new System.EventHandler(this.btnSaveBaseWad_Click); - // - // btnPreviewBaseWad - // - this.btnPreviewBaseWad.Location = new System.Drawing.Point(360, 93); - this.btnPreviewBaseWad.Name = "btnPreviewBaseWad"; - this.btnPreviewBaseWad.Size = new System.Drawing.Size(75, 23); - this.btnPreviewBaseWad.TabIndex = 5; - this.btnPreviewBaseWad.Text = "Preview"; - this.btnPreviewBaseWad.UseVisualStyleBackColor = true; - this.btnPreviewBaseWad.Click += new System.EventHandler(this.btnPreviewBaseWad_Click); - // - // btnLoadBaseWad - // - this.btnLoadBaseWad.Location = new System.Drawing.Point(360, 59); - this.btnLoadBaseWad.Name = "btnLoadBaseWad"; - this.btnLoadBaseWad.Size = new System.Drawing.Size(75, 23); - this.btnLoadBaseWad.TabIndex = 4; - this.btnLoadBaseWad.Text = "Load"; - this.btnLoadBaseWad.UseVisualStyleBackColor = true; - this.btnLoadBaseWad.Click += new System.EventHandler(this.btnLoadBaseWad_Click); - // - // lbxBaseWads - // - this.lbxBaseWads.FormattingEnabled = true; - this.lbxBaseWads.Items.AddRange(new object[] { - "Static Base", - "Genesis Plus GX", - "MPlayer CE (No Wii)", - "MPlayer CE (With Wii)", - "Snes9xGX", - "FCE Ultra (Wilsoff)", - "FCE Ultra (Leathl)", - "Wii64", - "WiiSX Full", - "WiiSX Retro", - "WADder Base 1", - "WADder Base 2", - "WADder Base 3", - "UniiLoader", - "Backup Channel"}); - this.lbxBaseWads.Location = new System.Drawing.Point(11, 51); - this.lbxBaseWads.Name = "lbxBaseWads"; - this.lbxBaseWads.Size = new System.Drawing.Size(343, 108); - this.lbxBaseWads.TabIndex = 3; - // - // btnBrowseSource - // - this.btnBrowseSource.Location = new System.Drawing.Point(360, 13); - this.btnBrowseSource.Name = "btnBrowseSource"; - this.btnBrowseSource.Size = new System.Drawing.Size(75, 23); - this.btnBrowseSource.TabIndex = 2; - this.btnBrowseSource.Text = "Browse..."; - this.btnBrowseSource.UseVisualStyleBackColor = true; - this.btnBrowseSource.Click += new System.EventHandler(this.btnBrowseSource_Click); - // - // tbSourceWad - // - this.tbSourceWad.Location = new System.Drawing.Point(84, 15); - this.tbSourceWad.Name = "tbSourceWad"; - this.tbSourceWad.ReadOnly = true; - this.tbSourceWad.Size = new System.Drawing.Size(270, 20); - this.tbSourceWad.TabIndex = 1; - this.tbSourceWad.Tag = "Disabled"; - // - // lbSource - // - this.lbSource.AutoSize = true; - this.lbSource.Location = new System.Drawing.Point(8, 18); - this.lbSource.Name = "lbSource"; - this.lbSource.Size = new System.Drawing.Size(70, 13); - this.lbSource.TabIndex = 0; - this.lbSource.Text = "Source Wad:"; - // - // tabTitle - // - this.tabTitle.Controls.Add(this.tbItalian); - this.tabTitle.Controls.Add(this.tbFrench); - this.tabTitle.Controls.Add(this.tbJapanese); - this.tabTitle.Controls.Add(this.tbDutch); - this.tabTitle.Controls.Add(this.tbSpanish); - this.tabTitle.Controls.Add(this.tbGerman); - this.tabTitle.Controls.Add(this.tbEnglish); - this.tabTitle.Controls.Add(this.lbDutch); - this.tabTitle.Controls.Add(this.lbItalian); - this.tabTitle.Controls.Add(this.lbSpanish); - this.tabTitle.Controls.Add(this.lbFrench); - this.tabTitle.Controls.Add(this.lbGerman); - this.tabTitle.Controls.Add(this.lbJapanese); - this.tabTitle.Controls.Add(this.lbEnglish); - this.tabTitle.Controls.Add(this.lbSpecificLanguageTitles); - this.tabTitle.Controls.Add(this.tbAllLanguages); - this.tabTitle.Controls.Add(this.lbAllLanguages); - this.tabTitle.Location = new System.Drawing.Point(4, 22); - this.tabTitle.Name = "tabTitle"; - this.tabTitle.Padding = new System.Windows.Forms.Padding(3); - this.tabTitle.Size = new System.Drawing.Size(443, 209); - this.tabTitle.TabIndex = 1; - this.tabTitle.Text = "Title"; - this.tabTitle.UseVisualStyleBackColor = true; - // - // tbItalian - // - this.tbItalian.Location = new System.Drawing.Point(301, 143); - this.tbItalian.MaxLength = 20; - this.tbItalian.Name = "tbItalian"; - this.tbItalian.Size = new System.Drawing.Size(124, 20); - this.tbItalian.TabIndex = 16; - // - // tbFrench - // - this.tbFrench.Location = new System.Drawing.Point(301, 115); - this.tbFrench.MaxLength = 20; - this.tbFrench.Name = "tbFrench"; - this.tbFrench.Size = new System.Drawing.Size(124, 20); - this.tbFrench.TabIndex = 15; - // - // tbJapanese - // - this.tbJapanese.Location = new System.Drawing.Point(301, 87); - this.tbJapanese.MaxLength = 20; - this.tbJapanese.Name = "tbJapanese"; - this.tbJapanese.Size = new System.Drawing.Size(124, 20); - this.tbJapanese.TabIndex = 14; - // - // tbDutch - // - this.tbDutch.Location = new System.Drawing.Point(70, 171); - this.tbDutch.MaxLength = 20; - this.tbDutch.Name = "tbDutch"; - this.tbDutch.Size = new System.Drawing.Size(124, 20); - this.tbDutch.TabIndex = 13; - // - // tbSpanish - // - this.tbSpanish.Location = new System.Drawing.Point(70, 143); - this.tbSpanish.MaxLength = 20; - this.tbSpanish.Name = "tbSpanish"; - this.tbSpanish.Size = new System.Drawing.Size(124, 20); - this.tbSpanish.TabIndex = 12; - // - // tbGerman - // - this.tbGerman.Location = new System.Drawing.Point(70, 115); - this.tbGerman.MaxLength = 20; - this.tbGerman.Name = "tbGerman"; - this.tbGerman.Size = new System.Drawing.Size(124, 20); - this.tbGerman.TabIndex = 11; - // - // tbEnglish - // - this.tbEnglish.Location = new System.Drawing.Point(70, 87); - this.tbEnglish.MaxLength = 20; - this.tbEnglish.Name = "tbEnglish"; - this.tbEnglish.Size = new System.Drawing.Size(124, 20); - this.tbEnglish.TabIndex = 10; - // - // lbDutch - // - this.lbDutch.AutoSize = true; - this.lbDutch.Location = new System.Drawing.Point(8, 174); - this.lbDutch.Name = "lbDutch"; - this.lbDutch.Size = new System.Drawing.Size(39, 13); - this.lbDutch.TabIndex = 9; - this.lbDutch.Text = "Dutch:"; - // - // lbItalian - // - this.lbItalian.AutoSize = true; - this.lbItalian.Location = new System.Drawing.Point(221, 146); - this.lbItalian.Name = "lbItalian"; - this.lbItalian.Size = new System.Drawing.Size(38, 13); - this.lbItalian.TabIndex = 8; - this.lbItalian.Text = "Italian:"; - // - // lbSpanish - // - this.lbSpanish.AutoSize = true; - this.lbSpanish.Location = new System.Drawing.Point(8, 146); - this.lbSpanish.Name = "lbSpanish"; - this.lbSpanish.Size = new System.Drawing.Size(48, 13); - this.lbSpanish.TabIndex = 7; - this.lbSpanish.Text = "Spanish:"; - // - // lbFrench - // - this.lbFrench.AutoSize = true; - this.lbFrench.Location = new System.Drawing.Point(221, 118); - this.lbFrench.Name = "lbFrench"; - this.lbFrench.Size = new System.Drawing.Size(43, 13); - this.lbFrench.TabIndex = 6; - this.lbFrench.Text = "French:"; - // - // lbGerman - // - this.lbGerman.AutoSize = true; - this.lbGerman.Location = new System.Drawing.Point(8, 118); - this.lbGerman.Name = "lbGerman"; - this.lbGerman.Size = new System.Drawing.Size(47, 13); - this.lbGerman.TabIndex = 5; - this.lbGerman.Text = "German:"; - // - // lbJapanese - // - this.lbJapanese.AutoSize = true; - this.lbJapanese.Location = new System.Drawing.Point(221, 90); - this.lbJapanese.Name = "lbJapanese"; - this.lbJapanese.Size = new System.Drawing.Size(56, 13); - this.lbJapanese.TabIndex = 4; - this.lbJapanese.Text = "Japanese:"; - // - // lbEnglish - // - this.lbEnglish.AutoSize = true; - this.lbEnglish.Location = new System.Drawing.Point(8, 90); - this.lbEnglish.Name = "lbEnglish"; - this.lbEnglish.Size = new System.Drawing.Size(44, 13); - this.lbEnglish.TabIndex = 3; - this.lbEnglish.Text = "English:"; - // - // lbSpecificLanguageTitles - // - this.lbSpecificLanguageTitles.AutoSize = true; - this.lbSpecificLanguageTitles.Location = new System.Drawing.Point(8, 63); - this.lbSpecificLanguageTitles.Name = "lbSpecificLanguageTitles"; - this.lbSpecificLanguageTitles.Size = new System.Drawing.Size(175, 13); - this.lbSpecificLanguageTitles.TabIndex = 2; - this.lbSpecificLanguageTitles.Text = "Specific Language Titles (Optional):"; - // - // tbAllLanguages - // - this.tbAllLanguages.Location = new System.Drawing.Point(114, 19); - this.tbAllLanguages.MaxLength = 20; - this.tbAllLanguages.Name = "tbAllLanguages"; - this.tbAllLanguages.Size = new System.Drawing.Size(311, 20); - this.tbAllLanguages.TabIndex = 1; - // - // lbAllLanguages - // - this.lbAllLanguages.AutoSize = true; - this.lbAllLanguages.Location = new System.Drawing.Point(8, 22); - this.lbAllLanguages.Name = "lbAllLanguages"; - this.lbAllLanguages.Size = new System.Drawing.Size(77, 13); - this.lbAllLanguages.TabIndex = 0; - this.lbAllLanguages.Text = "All Languages:"; - // - // tabOptions - // - this.tabOptions.Controls.Add(this.btnOptionsExtract); - this.tabOptions.Controls.Add(this.btnForwarder); - this.tabOptions.Controls.Add(this.cbFailureChecks); - this.tabOptions.Controls.Add(this.cbLz77); - this.tabOptions.Controls.Add(this.lbOptionsOptional); - this.tabOptions.Controls.Add(this.btnBrowseSound); - this.tabOptions.Controls.Add(this.tbSound); - this.tabOptions.Controls.Add(this.cmbNandLoader); - this.tabOptions.Controls.Add(this.btnBrowseDol); - this.tabOptions.Controls.Add(this.tbDol); - this.tabOptions.Controls.Add(this.tbTitleID); - this.tabOptions.Controls.Add(this.lbNewSound); - this.tabOptions.Controls.Add(this.lbNandLoader); - this.tabOptions.Controls.Add(this.lbNewDol); - this.tabOptions.Controls.Add(this.lbTitleID); - this.tabOptions.Location = new System.Drawing.Point(4, 22); - this.tabOptions.Name = "tabOptions"; - this.tabOptions.Padding = new System.Windows.Forms.Padding(3); - this.tabOptions.Size = new System.Drawing.Size(443, 209); - this.tabOptions.TabIndex = 2; - this.tabOptions.Text = "Options"; - this.tabOptions.UseVisualStyleBackColor = true; - // - // btnOptionsExtract - // - this.btnOptionsExtract.Location = new System.Drawing.Point(360, 47); - this.btnOptionsExtract.Name = "btnOptionsExtract"; - this.btnOptionsExtract.Size = new System.Drawing.Size(75, 23); - this.btnOptionsExtract.TabIndex = 14; - this.btnOptionsExtract.Text = "Extract..."; - this.btnOptionsExtract.UseVisualStyleBackColor = true; - this.btnOptionsExtract.Click += new System.EventHandler(this.btnOptionsExtract_Click); - // - // btnForwarder - // - this.btnForwarder.Location = new System.Drawing.Point(360, 109); - this.btnForwarder.Name = "btnForwarder"; - this.btnForwarder.Size = new System.Drawing.Size(75, 23); - this.btnForwarder.TabIndex = 13; - this.btnForwarder.Text = "Forwarder..."; - this.btnForwarder.UseVisualStyleBackColor = true; - this.btnForwarder.Click += new System.EventHandler(this.btnForwarder_Click); - // - // cbFailureChecks - // - this.cbFailureChecks.AutoSize = true; - this.cbFailureChecks.Location = new System.Drawing.Point(263, 180); - this.cbFailureChecks.Name = "cbFailureChecks"; - this.cbFailureChecks.Size = new System.Drawing.Size(172, 17); - this.cbFailureChecks.TabIndex = 12; - this.cbFailureChecks.Tag = "Independent"; - this.cbFailureChecks.Text = "/!\\ Turn off security checks /!\\"; - this.cbFailureChecks.UseVisualStyleBackColor = true; - // - // cbLz77 - // - this.cbLz77.AutoSize = true; - this.cbLz77.Checked = true; - this.cbLz77.CheckState = System.Windows.Forms.CheckState.Checked; - this.cbLz77.Location = new System.Drawing.Point(11, 180); - this.cbLz77.Name = "cbLz77"; - this.cbLz77.Size = new System.Drawing.Size(134, 17); - this.cbLz77.TabIndex = 11; - this.cbLz77.Text = "Use Lz77 Compression"; - this.cbLz77.UseVisualStyleBackColor = true; - // - // lbOptionsOptional - // - this.lbOptionsOptional.Location = new System.Drawing.Point(-7, 8); - this.lbOptionsOptional.Name = "lbOptionsOptional"; - this.lbOptionsOptional.Size = new System.Drawing.Size(457, 34); - this.lbOptionsOptional.TabIndex = 10; - this.lbOptionsOptional.Text = "These are optional. Fill them in only if you want to change them.\r\nIf you want a " + - "looped sound, set the loop points first (e.g. with Wavosaur)."; - this.lbOptionsOptional.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // btnBrowseSound - // - this.btnBrowseSound.Location = new System.Drawing.Point(360, 145); - this.btnBrowseSound.Name = "btnBrowseSound"; - this.btnBrowseSound.Size = new System.Drawing.Size(75, 23); - this.btnBrowseSound.TabIndex = 9; - this.btnBrowseSound.Text = "Browse..."; - this.btnBrowseSound.UseVisualStyleBackColor = true; - this.btnBrowseSound.Click += new System.EventHandler(this.btnBrowseSound_Click); - // - // tbSound - // - this.tbSound.Location = new System.Drawing.Point(90, 147); - this.tbSound.Name = "tbSound"; - this.tbSound.ReadOnly = true; - this.tbSound.Size = new System.Drawing.Size(264, 20); - this.tbSound.TabIndex = 8; - this.tbSound.Tag = "Disabled"; - // - // cmbNandLoader - // - this.cmbNandLoader.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cmbNandLoader.FormattingEnabled = true; - this.cmbNandLoader.Items.AddRange(new object[] { - "comex", - "Waninkoko"}); - this.cmbNandLoader.Location = new System.Drawing.Point(143, 111); - this.cmbNandLoader.Name = "cmbNandLoader"; - this.cmbNandLoader.Size = new System.Drawing.Size(211, 21); - this.cmbNandLoader.TabIndex = 7; - // - // btnBrowseDol - // - this.btnBrowseDol.Location = new System.Drawing.Point(360, 81); - this.btnBrowseDol.Name = "btnBrowseDol"; - this.btnBrowseDol.Size = new System.Drawing.Size(75, 23); - this.btnBrowseDol.TabIndex = 6; - this.btnBrowseDol.Text = "Browse..."; - this.btnBrowseDol.UseVisualStyleBackColor = true; - this.btnBrowseDol.Click += new System.EventHandler(this.btnBrowseDol_Click); - // - // tbDol - // - this.tbDol.Location = new System.Drawing.Point(90, 83); - this.tbDol.Name = "tbDol"; - this.tbDol.ReadOnly = true; - this.tbDol.Size = new System.Drawing.Size(264, 20); - this.tbDol.TabIndex = 5; - this.tbDol.Tag = "Disabled"; - // - // tbTitleID - // - this.tbTitleID.CharacterCasing = System.Windows.Forms.CharacterCasing.Upper; - this.tbTitleID.Location = new System.Drawing.Point(90, 49); - this.tbTitleID.MaxLength = 4; - this.tbTitleID.Name = "tbTitleID"; - this.tbTitleID.Size = new System.Drawing.Size(55, 20); - this.tbTitleID.TabIndex = 4; - // - // lbNewSound - // - this.lbNewSound.AutoSize = true; - this.lbNewSound.Location = new System.Drawing.Point(8, 150); - this.lbNewSound.Name = "lbNewSound"; - this.lbNewSound.Size = new System.Drawing.Size(66, 13); - this.lbNewSound.TabIndex = 3; - this.lbNewSound.Text = "New Sound:"; - // - // lbNandLoader - // - this.lbNandLoader.AutoSize = true; - this.lbNandLoader.Location = new System.Drawing.Point(49, 114); - this.lbNandLoader.Name = "lbNandLoader"; - this.lbNandLoader.Size = new System.Drawing.Size(77, 13); - this.lbNandLoader.TabIndex = 2; - this.lbNandLoader.Text = "NAND Loader:"; - // - // lbNewDol - // - this.lbNewDol.AutoSize = true; - this.lbNewDol.Location = new System.Drawing.Point(8, 86); - this.lbNewDol.Name = "lbNewDol"; - this.lbNewDol.Size = new System.Drawing.Size(57, 13); - this.lbNewDol.TabIndex = 1; - this.lbNewDol.Text = "New DOL:"; - // - // lbTitleID - // - this.lbTitleID.AutoSize = true; - this.lbTitleID.Location = new System.Drawing.Point(8, 52); - this.lbTitleID.Name = "lbTitleID"; - this.lbTitleID.Size = new System.Drawing.Size(44, 13); - this.lbTitleID.TabIndex = 0; - this.lbTitleID.Text = "Title ID:"; - // - // tabBanner - // - this.tabBanner.Controls.Add(this.cbBannerMakeTransparent); - this.tabBanner.Controls.Add(this.cmbFormatBanner); - this.tabBanner.Controls.Add(this.lbFormatBanner); - this.tabBanner.Controls.Add(this.btnPreviewBanner); - this.tabBanner.Controls.Add(this.btnExtractBanner); - this.tabBanner.Controls.Add(this.btnDeleteBanner); - this.tabBanner.Controls.Add(this.btnAddBanner); - this.tabBanner.Controls.Add(this.btnReplaceBanner); - this.tabBanner.Controls.Add(this.lbxBannerTpls); - this.tabBanner.Location = new System.Drawing.Point(4, 22); - this.tabBanner.Name = "tabBanner"; - this.tabBanner.Padding = new System.Windows.Forms.Padding(3); - this.tabBanner.Size = new System.Drawing.Size(443, 209); - this.tabBanner.TabIndex = 3; - this.tabBanner.Text = "Banner"; - this.tabBanner.UseVisualStyleBackColor = true; - // - // cbBannerMakeTransparent - // - this.cbBannerMakeTransparent.AutoSize = true; - this.cbBannerMakeTransparent.Location = new System.Drawing.Point(11, 189); - this.cbBannerMakeTransparent.Name = "cbBannerMakeTransparent"; - this.cbBannerMakeTransparent.Size = new System.Drawing.Size(113, 17); - this.cbBannerMakeTransparent.TabIndex = 6; - this.cbBannerMakeTransparent.Text = "Make Transparent"; - this.cbBannerMakeTransparent.UseVisualStyleBackColor = true; - this.cbBannerMakeTransparent.CheckedChanged += new System.EventHandler(this.cbBannerMakeTransparent_CheckedChanged); - // - // cmbFormatBanner - // - this.cmbFormatBanner.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cmbFormatBanner.FormattingEnabled = true; - this.cmbFormatBanner.Items.AddRange(new object[] { - "RGBA8", - "RGB565", - "RGB5A3", - "IA8", - "IA4", - "I8", - "I4", - "CMP"}); - this.cmbFormatBanner.Location = new System.Drawing.Point(360, 182); - this.cmbFormatBanner.Name = "cmbFormatBanner"; - this.cmbFormatBanner.Size = new System.Drawing.Size(75, 21); - this.cmbFormatBanner.TabIndex = 5; - // - // lbFormatBanner - // - this.lbFormatBanner.AutoSize = true; - this.lbFormatBanner.Location = new System.Drawing.Point(360, 166); - this.lbFormatBanner.Name = "lbFormatBanner"; - this.lbFormatBanner.Size = new System.Drawing.Size(42, 13); - this.lbFormatBanner.TabIndex = 4; - this.lbFormatBanner.Text = "Format:"; - // - // btnPreviewBanner - // - this.btnPreviewBanner.Location = new System.Drawing.Point(360, 132); - this.btnPreviewBanner.Name = "btnPreviewBanner"; - this.btnPreviewBanner.Size = new System.Drawing.Size(75, 23); - this.btnPreviewBanner.TabIndex = 3; - this.btnPreviewBanner.Text = "Preview"; - this.btnPreviewBanner.UseVisualStyleBackColor = true; - this.btnPreviewBanner.Click += new System.EventHandler(this.btnPreviewBanner_Click); - // - // btnExtractBanner - // - this.btnExtractBanner.Location = new System.Drawing.Point(360, 102); - this.btnExtractBanner.Name = "btnExtractBanner"; - this.btnExtractBanner.Size = new System.Drawing.Size(75, 23); - this.btnExtractBanner.TabIndex = 2; - this.btnExtractBanner.Text = "Extract"; - this.btnExtractBanner.UseVisualStyleBackColor = true; - this.btnExtractBanner.Click += new System.EventHandler(this.btnExtractBanner_Click); - // - // btnDeleteBanner - // - this.btnDeleteBanner.Location = new System.Drawing.Point(360, 42); - this.btnDeleteBanner.Name = "btnDeleteBanner"; - this.btnDeleteBanner.Size = new System.Drawing.Size(75, 23); - this.btnDeleteBanner.TabIndex = 1; - this.btnDeleteBanner.Text = "Delete"; - this.btnDeleteBanner.UseVisualStyleBackColor = true; - this.btnDeleteBanner.Click += new System.EventHandler(this.btnDeleteBanner_Click); - // - // btnAddBanner - // - this.btnAddBanner.Location = new System.Drawing.Point(360, 12); - this.btnAddBanner.Name = "btnAddBanner"; - this.btnAddBanner.Size = new System.Drawing.Size(75, 23); - this.btnAddBanner.TabIndex = 1; - this.btnAddBanner.Text = "Add"; - this.btnAddBanner.UseVisualStyleBackColor = true; - this.btnAddBanner.Click += new System.EventHandler(this.btnAddBanner_Click); - // - // btnReplaceBanner - // - this.btnReplaceBanner.Location = new System.Drawing.Point(360, 72); - this.btnReplaceBanner.Name = "btnReplaceBanner"; - this.btnReplaceBanner.Size = new System.Drawing.Size(75, 23); - this.btnReplaceBanner.TabIndex = 1; - this.btnReplaceBanner.Text = "Replace"; - this.btnReplaceBanner.UseVisualStyleBackColor = true; - this.btnReplaceBanner.Click += new System.EventHandler(this.btnReplaceBanner_Click); - // - // lbxBannerTpls - // - this.lbxBannerTpls.FormattingEnabled = true; - this.lbxBannerTpls.Location = new System.Drawing.Point(11, 12); - this.lbxBannerTpls.Name = "lbxBannerTpls"; - this.lbxBannerTpls.Size = new System.Drawing.Size(343, 173); - this.lbxBannerTpls.Sorted = true; - this.lbxBannerTpls.TabIndex = 0; - this.lbxBannerTpls.SelectedIndexChanged += new System.EventHandler(this.lbxBannerTpls_SelectedIndexChanged); - // - // tabIcon - // - this.tabIcon.Controls.Add(this.cbIconMakeTransparent); - this.tabIcon.Controls.Add(this.cmbFormatIcon); - this.tabIcon.Controls.Add(this.lbFormatIcon); - this.tabIcon.Controls.Add(this.btnPreviewIcon); - this.tabIcon.Controls.Add(this.btnExtractIcon); - this.tabIcon.Controls.Add(this.btnAddIcon); - this.tabIcon.Controls.Add(this.btnDeleteIcon); - this.tabIcon.Controls.Add(this.btnReplaceIcon); - this.tabIcon.Controls.Add(this.lbxIconTpls); - this.tabIcon.Location = new System.Drawing.Point(4, 22); - this.tabIcon.Name = "tabIcon"; - this.tabIcon.Padding = new System.Windows.Forms.Padding(3); - this.tabIcon.Size = new System.Drawing.Size(443, 209); - this.tabIcon.TabIndex = 4; - this.tabIcon.Text = "Icon"; - this.tabIcon.UseVisualStyleBackColor = true; - // - // cbIconMakeTransparent - // - this.cbIconMakeTransparent.AutoSize = true; - this.cbIconMakeTransparent.Location = new System.Drawing.Point(11, 189); - this.cbIconMakeTransparent.Name = "cbIconMakeTransparent"; - this.cbIconMakeTransparent.Size = new System.Drawing.Size(113, 17); - this.cbIconMakeTransparent.TabIndex = 12; - this.cbIconMakeTransparent.Text = "Make Transparent"; - this.cbIconMakeTransparent.UseVisualStyleBackColor = true; - this.cbIconMakeTransparent.CheckedChanged += new System.EventHandler(this.cbIconMakeTransparent_CheckedChanged); - // - // cmbFormatIcon - // - this.cmbFormatIcon.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cmbFormatIcon.FormattingEnabled = true; - this.cmbFormatIcon.Items.AddRange(new object[] { - "RGBA8", - "RGB565", - "RGB5A3", - "IA8", - "IA4", - "I8", - "I4", - "CMP"}); - this.cmbFormatIcon.Location = new System.Drawing.Point(360, 182); - this.cmbFormatIcon.Name = "cmbFormatIcon"; - this.cmbFormatIcon.Size = new System.Drawing.Size(75, 21); - this.cmbFormatIcon.TabIndex = 11; - // - // lbFormatIcon - // - this.lbFormatIcon.AutoSize = true; - this.lbFormatIcon.Location = new System.Drawing.Point(360, 166); - this.lbFormatIcon.Name = "lbFormatIcon"; - this.lbFormatIcon.Size = new System.Drawing.Size(42, 13); - this.lbFormatIcon.TabIndex = 10; - this.lbFormatIcon.Text = "Format:"; - // - // btnPreviewIcon - // - this.btnPreviewIcon.Location = new System.Drawing.Point(360, 132); - this.btnPreviewIcon.Name = "btnPreviewIcon"; - this.btnPreviewIcon.Size = new System.Drawing.Size(75, 23); - this.btnPreviewIcon.TabIndex = 9; - this.btnPreviewIcon.Text = "Preview"; - this.btnPreviewIcon.UseVisualStyleBackColor = true; - this.btnPreviewIcon.Click += new System.EventHandler(this.btnPreviewIcon_Click); - // - // btnExtractIcon - // - this.btnExtractIcon.Location = new System.Drawing.Point(360, 102); - this.btnExtractIcon.Name = "btnExtractIcon"; - this.btnExtractIcon.Size = new System.Drawing.Size(75, 23); - this.btnExtractIcon.TabIndex = 8; - this.btnExtractIcon.Text = "Extract"; - this.btnExtractIcon.UseVisualStyleBackColor = true; - this.btnExtractIcon.Click += new System.EventHandler(this.btnExtractIcon_Click); - // - // btnAddIcon - // - this.btnAddIcon.Location = new System.Drawing.Point(360, 12); - this.btnAddIcon.Name = "btnAddIcon"; - this.btnAddIcon.Size = new System.Drawing.Size(75, 23); - this.btnAddIcon.TabIndex = 7; - this.btnAddIcon.Text = "Add"; - this.btnAddIcon.UseVisualStyleBackColor = true; - this.btnAddIcon.Click += new System.EventHandler(this.btnAddIcon_Click); - // - // btnDeleteIcon - // - this.btnDeleteIcon.Location = new System.Drawing.Point(360, 42); - this.btnDeleteIcon.Name = "btnDeleteIcon"; - this.btnDeleteIcon.Size = new System.Drawing.Size(75, 23); - this.btnDeleteIcon.TabIndex = 7; - this.btnDeleteIcon.Text = "Delete"; - this.btnDeleteIcon.UseVisualStyleBackColor = true; - this.btnDeleteIcon.Click += new System.EventHandler(this.btnDeleteIcon_Click); - // - // btnReplaceIcon - // - this.btnReplaceIcon.Location = new System.Drawing.Point(360, 72); - this.btnReplaceIcon.Name = "btnReplaceIcon"; - this.btnReplaceIcon.Size = new System.Drawing.Size(75, 23); - this.btnReplaceIcon.TabIndex = 7; - this.btnReplaceIcon.Text = "Replace"; - this.btnReplaceIcon.UseVisualStyleBackColor = true; - this.btnReplaceIcon.Click += new System.EventHandler(this.btnReplaceIcon_Click); - // - // lbxIconTpls - // - this.lbxIconTpls.FormattingEnabled = true; - this.lbxIconTpls.Location = new System.Drawing.Point(11, 12); - this.lbxIconTpls.Name = "lbxIconTpls"; - this.lbxIconTpls.Size = new System.Drawing.Size(343, 173); - this.lbxIconTpls.Sorted = true; - this.lbxIconTpls.TabIndex = 6; - this.lbxIconTpls.SelectedIndexChanged += new System.EventHandler(this.lbxIconTpls_SelectedIndexChanged); - // - // tabBrlyt - // - this.tabBrlyt.Controls.Add(this.btnBrlytListTpls); - this.tabBrlyt.Controls.Add(this.lbBrlytWarning); - this.tabBrlyt.Controls.Add(this.lbBrlytActions); - this.tabBrlyt.Controls.Add(this.btnBrlytExtract); - this.tabBrlyt.Controls.Add(this.btnBrlytReplace); - this.tabBrlyt.Controls.Add(this.lbBrlytIcon); - this.tabBrlyt.Controls.Add(this.lbBrlytBanner); - this.tabBrlyt.Controls.Add(this.lbxBrlytIcon); - this.tabBrlyt.Controls.Add(this.lbxBrlytBanner); - this.tabBrlyt.Location = new System.Drawing.Point(4, 22); - this.tabBrlyt.Name = "tabBrlyt"; - this.tabBrlyt.Padding = new System.Windows.Forms.Padding(3); - this.tabBrlyt.Size = new System.Drawing.Size(443, 209); - this.tabBrlyt.TabIndex = 6; - this.tabBrlyt.Text = "Layout"; - this.tabBrlyt.UseVisualStyleBackColor = true; - // - // btnBrlytListTpls - // - this.btnBrlytListTpls.Location = new System.Drawing.Point(360, 131); - this.btnBrlytListTpls.Name = "btnBrlytListTpls"; - this.btnBrlytListTpls.Size = new System.Drawing.Size(75, 23); - this.btnBrlytListTpls.TabIndex = 8; - this.btnBrlytListTpls.Text = "List TPLs"; - this.btnBrlytListTpls.UseVisualStyleBackColor = true; - this.btnBrlytListTpls.Click += new System.EventHandler(this.btnBrlytListTpls_Click); - // - // lbBrlytWarning - // - this.lbBrlytWarning.ForeColor = System.Drawing.Color.Red; - this.lbBrlytWarning.Location = new System.Drawing.Point(-4, 192); - this.lbBrlytWarning.Name = "lbBrlytWarning"; - this.lbBrlytWarning.Size = new System.Drawing.Size(451, 23); - this.lbBrlytWarning.TabIndex = 7; - this.lbBrlytWarning.Text = "Be careful with these features, wrong handling WILL BRICK your Wii!"; - this.lbBrlytWarning.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // lbBrlytActions - // - this.lbBrlytActions.Location = new System.Drawing.Point(357, 42); - this.lbBrlytActions.Name = "lbBrlytActions"; - this.lbBrlytActions.Size = new System.Drawing.Size(78, 11); - this.lbBrlytActions.TabIndex = 6; - this.lbBrlytActions.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // btnBrlytExtract - // - this.btnBrlytExtract.Location = new System.Drawing.Point(360, 98); - this.btnBrlytExtract.Name = "btnBrlytExtract"; - this.btnBrlytExtract.Size = new System.Drawing.Size(75, 23); - this.btnBrlytExtract.TabIndex = 5; - this.btnBrlytExtract.Text = "Extract"; - this.btnBrlytExtract.UseVisualStyleBackColor = true; - this.btnBrlytExtract.Click += new System.EventHandler(this.btnBrlytExtract_Click); - // - // btnBrlytReplace - // - this.btnBrlytReplace.Location = new System.Drawing.Point(360, 65); - this.btnBrlytReplace.Name = "btnBrlytReplace"; - this.btnBrlytReplace.Size = new System.Drawing.Size(75, 23); - this.btnBrlytReplace.TabIndex = 5; - this.btnBrlytReplace.Text = "Replace"; - this.btnBrlytReplace.UseVisualStyleBackColor = true; - this.btnBrlytReplace.Click += new System.EventHandler(this.btnBrlytReplace_Click); - // - // lbBrlytIcon - // - this.lbBrlytIcon.AutoSize = true; - this.lbBrlytIcon.Location = new System.Drawing.Point(11, 102); - this.lbBrlytIcon.Name = "lbBrlytIcon"; - this.lbBrlytIcon.Size = new System.Drawing.Size(31, 13); - this.lbBrlytIcon.TabIndex = 4; - this.lbBrlytIcon.Text = "Icon:"; - // - // lbBrlytBanner - // - this.lbBrlytBanner.AutoSize = true; - this.lbBrlytBanner.Location = new System.Drawing.Point(11, 11); - this.lbBrlytBanner.Name = "lbBrlytBanner"; - this.lbBrlytBanner.RightToLeft = System.Windows.Forms.RightToLeft.No; - this.lbBrlytBanner.Size = new System.Drawing.Size(44, 13); - this.lbBrlytBanner.TabIndex = 3; - this.lbBrlytBanner.Text = "Banner:"; - // - // lbxBrlytIcon - // - this.lbxBrlytIcon.FormattingEnabled = true; - this.lbxBrlytIcon.Location = new System.Drawing.Point(11, 120); - this.lbxBrlytIcon.Name = "lbxBrlytIcon"; - this.lbxBrlytIcon.Size = new System.Drawing.Size(343, 69); - this.lbxBrlytIcon.Sorted = true; - this.lbxBrlytIcon.TabIndex = 1; - this.lbxBrlytIcon.SelectedIndexChanged += new System.EventHandler(this.lbxBrlytIcon_SelectedIndexChanged); - // - // lbxBrlytBanner - // - this.lbxBrlytBanner.FormattingEnabled = true; - this.lbxBrlytBanner.Location = new System.Drawing.Point(11, 29); - this.lbxBrlytBanner.Name = "lbxBrlytBanner"; - this.lbxBrlytBanner.Size = new System.Drawing.Size(343, 69); - this.lbxBrlytBanner.Sorted = true; - this.lbxBrlytBanner.TabIndex = 0; - this.lbxBrlytBanner.SelectedIndexChanged += new System.EventHandler(this.lbxBrlytBanner_SelectedIndexChanged); - // - // tabBrlan - // - this.tabBrlan.Controls.Add(this.lbBrlanWarning); - this.tabBrlan.Controls.Add(this.lbBrlanActions); - this.tabBrlan.Controls.Add(this.btnBrlanExtract); - this.tabBrlan.Controls.Add(this.btnBrlanDelete); - this.tabBrlan.Controls.Add(this.btnBrlanReplace); - this.tabBrlan.Controls.Add(this.lbBrlanIcon); - this.tabBrlan.Controls.Add(this.lbBrlanBanner); - this.tabBrlan.Controls.Add(this.btnBrlanAdd); - this.tabBrlan.Controls.Add(this.lbxBrlanIcon); - this.tabBrlan.Controls.Add(this.lbxBrlanBanner); - this.tabBrlan.Location = new System.Drawing.Point(4, 22); - this.tabBrlan.Name = "tabBrlan"; - this.tabBrlan.Padding = new System.Windows.Forms.Padding(3); - this.tabBrlan.Size = new System.Drawing.Size(443, 209); - this.tabBrlan.TabIndex = 7; - this.tabBrlan.Text = "Animation"; - this.tabBrlan.UseVisualStyleBackColor = true; - // - // lbBrlanWarning - // - this.lbBrlanWarning.ForeColor = System.Drawing.Color.Red; - this.lbBrlanWarning.Location = new System.Drawing.Point(-4, 192); - this.lbBrlanWarning.Name = "lbBrlanWarning"; - this.lbBrlanWarning.Size = new System.Drawing.Size(451, 23); - this.lbBrlanWarning.TabIndex = 15; - this.lbBrlanWarning.Text = "Be careful with these features, wrong handling WILL BRICK your Wii!"; - this.lbBrlanWarning.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // lbBrlanActions - // - this.lbBrlanActions.Location = new System.Drawing.Point(357, 14); - this.lbBrlanActions.Name = "lbBrlanActions"; - this.lbBrlanActions.Size = new System.Drawing.Size(78, 13); - this.lbBrlanActions.TabIndex = 14; - this.lbBrlanActions.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // btnBrlanExtract - // - this.btnBrlanExtract.Location = new System.Drawing.Point(360, 153); - this.btnBrlanExtract.Name = "btnBrlanExtract"; - this.btnBrlanExtract.Size = new System.Drawing.Size(75, 23); - this.btnBrlanExtract.TabIndex = 11; - this.btnBrlanExtract.Text = "Extract"; - this.btnBrlanExtract.UseVisualStyleBackColor = true; - this.btnBrlanExtract.Click += new System.EventHandler(this.btnBrlanExtract_Click); - // - // btnBrlanDelete - // - this.btnBrlanDelete.Location = new System.Drawing.Point(360, 77); - this.btnBrlanDelete.Name = "btnBrlanDelete"; - this.btnBrlanDelete.Size = new System.Drawing.Size(75, 23); - this.btnBrlanDelete.TabIndex = 12; - this.btnBrlanDelete.Text = "Delete"; - this.btnBrlanDelete.UseVisualStyleBackColor = true; - this.btnBrlanDelete.Click += new System.EventHandler(this.btnBrlanDelete_Click); - // - // btnBrlanReplace - // - this.btnBrlanReplace.Location = new System.Drawing.Point(360, 115); - this.btnBrlanReplace.Name = "btnBrlanReplace"; - this.btnBrlanReplace.Size = new System.Drawing.Size(75, 23); - this.btnBrlanReplace.TabIndex = 13; - this.btnBrlanReplace.Text = "Replace"; - this.btnBrlanReplace.UseVisualStyleBackColor = true; - this.btnBrlanReplace.Click += new System.EventHandler(this.btnBrlanReplace_Click); - // - // lbBrlanIcon - // - this.lbBrlanIcon.AutoSize = true; - this.lbBrlanIcon.Location = new System.Drawing.Point(11, 102); - this.lbBrlanIcon.Name = "lbBrlanIcon"; - this.lbBrlanIcon.Size = new System.Drawing.Size(31, 13); - this.lbBrlanIcon.TabIndex = 10; - this.lbBrlanIcon.Text = "Icon:"; - // - // lbBrlanBanner - // - this.lbBrlanBanner.AutoSize = true; - this.lbBrlanBanner.Location = new System.Drawing.Point(11, 11); - this.lbBrlanBanner.Name = "lbBrlanBanner"; - this.lbBrlanBanner.RightToLeft = System.Windows.Forms.RightToLeft.No; - this.lbBrlanBanner.Size = new System.Drawing.Size(44, 13); - this.lbBrlanBanner.TabIndex = 9; - this.lbBrlanBanner.Text = "Banner:"; - // - // btnBrlanAdd - // - this.btnBrlanAdd.Location = new System.Drawing.Point(360, 39); - this.btnBrlanAdd.Name = "btnBrlanAdd"; - this.btnBrlanAdd.Size = new System.Drawing.Size(75, 23); - this.btnBrlanAdd.TabIndex = 8; - this.btnBrlanAdd.Text = "Add"; - this.btnBrlanAdd.UseVisualStyleBackColor = true; - this.btnBrlanAdd.Click += new System.EventHandler(this.btnBrlanAdd_Click); - // - // lbxBrlanIcon - // - this.lbxBrlanIcon.FormattingEnabled = true; - this.lbxBrlanIcon.Location = new System.Drawing.Point(11, 120); - this.lbxBrlanIcon.Name = "lbxBrlanIcon"; - this.lbxBrlanIcon.Size = new System.Drawing.Size(343, 69); - this.lbxBrlanIcon.Sorted = true; - this.lbxBrlanIcon.TabIndex = 7; - this.lbxBrlanIcon.SelectedIndexChanged += new System.EventHandler(this.lbxBrlanIcon_SelectedIndexChanged); - // - // lbxBrlanBanner - // - this.lbxBrlanBanner.FormattingEnabled = true; - this.lbxBrlanBanner.Location = new System.Drawing.Point(11, 29); - this.lbxBrlanBanner.Name = "lbxBrlanBanner"; - this.lbxBrlanBanner.Size = new System.Drawing.Size(343, 69); - this.lbxBrlanBanner.Sorted = true; - this.lbxBrlanBanner.TabIndex = 6; - this.lbxBrlanBanner.SelectedIndexChanged += new System.EventHandler(this.lbxBrlanBanner_SelectedIndexChanged); - // - // tabInstructions - // - this.tabInstructions.Controls.Add(this.rtbInstructions); - this.tabInstructions.Location = new System.Drawing.Point(4, 22); - this.tabInstructions.Name = "tabInstructions"; - this.tabInstructions.Padding = new System.Windows.Forms.Padding(3); - this.tabInstructions.Size = new System.Drawing.Size(443, 209); - this.tabInstructions.TabIndex = 8; - this.tabInstructions.Text = "Help"; - this.tabInstructions.UseVisualStyleBackColor = true; - // - // rtbInstructions - // - this.rtbInstructions.BackColor = System.Drawing.SystemColors.Window; - this.rtbInstructions.Dock = System.Windows.Forms.DockStyle.Fill; - this.rtbInstructions.Location = new System.Drawing.Point(3, 3); - this.rtbInstructions.Name = "rtbInstructions"; - this.rtbInstructions.ReadOnly = true; - this.rtbInstructions.Size = new System.Drawing.Size(437, 203); - this.rtbInstructions.TabIndex = 0; - this.rtbInstructions.Text = ""; - // - // tabCredits - // - this.tabCredits.Controls.Add(this.panCredits); - this.tabCredits.Controls.Add(this.llbUpdateAvailabe); - this.tabCredits.Controls.Add(this.llbSite); - this.tabCredits.Controls.Add(this.lbCreditVersion); - this.tabCredits.Controls.Add(this.lbCreditInfo); - this.tabCredits.Location = new System.Drawing.Point(4, 22); - this.tabCredits.Name = "tabCredits"; - this.tabCredits.Padding = new System.Windows.Forms.Padding(3); - this.tabCredits.Size = new System.Drawing.Size(443, 209); - this.tabCredits.TabIndex = 5; - this.tabCredits.Text = "About"; - this.tabCredits.UseVisualStyleBackColor = true; - // - // llbUpdateAvailabe - // - this.llbUpdateAvailabe.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.llbUpdateAvailabe.Location = new System.Drawing.Point(0, 62); - this.llbUpdateAvailabe.Name = "llbUpdateAvailabe"; - this.llbUpdateAvailabe.Size = new System.Drawing.Size(443, 13); - this.llbUpdateAvailabe.TabIndex = 4; - this.llbUpdateAvailabe.TabStop = true; - this.llbUpdateAvailabe.Text = "Version X is availabe, get it here!"; - this.llbUpdateAvailabe.TextAlign = System.Drawing.ContentAlignment.TopCenter; - this.llbUpdateAvailabe.Visible = false; - this.llbUpdateAvailabe.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llbUpdateAvailabe_LinkClicked); - // - // llbSite - // - this.llbSite.Location = new System.Drawing.Point(0, 35); - this.llbSite.Name = "llbSite"; - this.llbSite.Size = new System.Drawing.Size(443, 13); - this.llbSite.TabIndex = 3; - this.llbSite.TabStop = true; - this.llbSite.Text = "http://customizemii.googlecode.com"; - this.llbSite.TextAlign = System.Drawing.ContentAlignment.TopCenter; - this.llbSite.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llbSite_LinkClicked); - // - // lbCreditThanks - // - this.lbCreditThanks.Location = new System.Drawing.Point(8, 0); - this.lbCreditThanks.Name = "lbCreditThanks"; - this.lbCreditThanks.Size = new System.Drawing.Size(427, 150); - this.lbCreditThanks.TabIndex = 2; - this.lbCreditThanks.Text = resources.GetString("lbCreditThanks.Text"); - this.lbCreditThanks.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // lbCreditVersion - // - this.lbCreditVersion.Location = new System.Drawing.Point(0, 13); - this.lbCreditVersion.Name = "lbCreditVersion"; - this.lbCreditVersion.Size = new System.Drawing.Size(443, 13); - this.lbCreditVersion.TabIndex = 1; - this.lbCreditVersion.Text = "CustomizeMii Version X by Leathl"; - this.lbCreditVersion.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // lbCreditInfo - // - this.lbCreditInfo.ForeColor = System.Drawing.Color.Red; - this.lbCreditInfo.Location = new System.Drawing.Point(0, 189); - this.lbCreditInfo.Name = "lbCreditInfo"; - this.lbCreditInfo.Size = new System.Drawing.Size(443, 16); - this.lbCreditInfo.TabIndex = 0; - this.lbCreditInfo.Text = "Thanks to icefire / Xuzz for the basic idea of this Application!"; - this.lbCreditInfo.TextAlign = System.Drawing.ContentAlignment.TopCenter; - // - // ssMain - // - this.ssMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.lbStatus, - this.lbStatusText, - this.pbProgress}); - this.ssMain.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow; - this.ssMain.Location = new System.Drawing.Point(0, 268); - this.ssMain.Name = "ssMain"; - this.ssMain.Size = new System.Drawing.Size(451, 22); - this.ssMain.SizingGrip = false; - this.ssMain.TabIndex = 2; - this.ssMain.Text = "ssMain"; - // - // lbStatus - // - this.lbStatus.Name = "lbStatus"; - this.lbStatus.Size = new System.Drawing.Size(45, 17); - this.lbStatus.Text = "Status: "; - // - // lbStatusText - // - this.lbStatusText.Name = "lbStatusText"; - this.lbStatusText.Size = new System.Drawing.Size(0, 17); - this.lbStatusText.Spring = true; - this.lbStatusText.TextChanged += new System.EventHandler(this.lbStatusText_TextChanged); - // - // pbProgress - // - this.pbProgress.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; - this.pbProgress.Name = "pbProgress"; - this.pbProgress.Size = new System.Drawing.Size(100, 16); - this.pbProgress.Value = 100; - // - // cmForwarder - // - this.cmForwarder.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.cmSimpleForwarder, - this.cmComplexForwarder}); - this.cmForwarder.Name = "contextMenuStrip1"; - this.cmForwarder.Size = new System.Drawing.Size(178, 48); - // - // cmSimpleForwarder - // - this.cmSimpleForwarder.Name = "cmSimpleForwarder"; - this.cmSimpleForwarder.Size = new System.Drawing.Size(177, 22); - this.cmSimpleForwarder.Text = "Simple Forwarder"; - this.cmSimpleForwarder.Click += new System.EventHandler(this.cmForwarderItem_Click); - // - // cmComplexForwarder - // - this.cmComplexForwarder.Name = "cmComplexForwarder"; - this.cmComplexForwarder.Size = new System.Drawing.Size(177, 22); - this.cmComplexForwarder.Text = "Complex Forwarder"; - this.cmComplexForwarder.Click += new System.EventHandler(this.cmForwarderItem_Click); - // - // cmOptionsExtract - // - this.cmOptionsExtract.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.cmExtractWad, - this.cmExtractDol, - this.tsExtractSound, - this.tsExtractImages}); - this.cmOptionsExtract.Name = "cmOptionsExtract"; - this.cmOptionsExtract.Size = new System.Drawing.Size(153, 92); - // - // cmExtractWad - // - this.cmExtractWad.Name = "cmExtractWad"; - this.cmExtractWad.Size = new System.Drawing.Size(152, 22); - this.cmExtractWad.Text = "WAD Contents"; - this.cmExtractWad.Click += new System.EventHandler(this.cmExtractWad_Click); - // - // cmExtractDol - // - this.cmExtractDol.Name = "cmExtractDol"; - this.cmExtractDol.Size = new System.Drawing.Size(152, 22); - this.cmExtractDol.Text = "DOL"; - this.cmExtractDol.Click += new System.EventHandler(this.cmOptionsExtract_MouseClick); - // - // tsExtractSound - // - this.tsExtractSound.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.cmExtractSoundAsBin, - this.cmExtractSoundAsAudio}); - this.tsExtractSound.Name = "tsExtractSound"; - this.tsExtractSound.Size = new System.Drawing.Size(152, 22); - this.tsExtractSound.Text = "Sound"; - // - // cmExtractSoundAsBin - // - this.cmExtractSoundAsBin.Name = "cmExtractSoundAsBin"; - this.cmExtractSoundAsBin.Size = new System.Drawing.Size(143, 22); - this.cmExtractSoundAsBin.Text = "As sound.bin"; - this.cmExtractSoundAsBin.Click += new System.EventHandler(this.cmOptionsExtract_MouseClick); - // - // cmExtractSoundAsAudio - // - this.cmExtractSoundAsAudio.Name = "cmExtractSoundAsAudio"; - this.cmExtractSoundAsAudio.Size = new System.Drawing.Size(143, 22); - this.cmExtractSoundAsAudio.Text = "As Audiofile"; - this.cmExtractSoundAsAudio.Click += new System.EventHandler(this.cmOptionsExtract_MouseClick); - // - // tsExtractImages - // - this.tsExtractImages.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.cmExtractBannerImages, - this.cmExtractIconImages, - this.cmExtractBothImages}); - this.tsExtractImages.Name = "tsExtractImages"; - this.tsExtractImages.Size = new System.Drawing.Size(152, 22); - this.tsExtractImages.Text = "Images"; - // - // cmExtractBannerImages - // - this.cmExtractBannerImages.Name = "cmExtractBannerImages"; - this.cmExtractBannerImages.Size = new System.Drawing.Size(111, 22); - this.cmExtractBannerImages.Text = "Banner"; - this.cmExtractBannerImages.Click += new System.EventHandler(this.cmOptionsExtract_MouseClick); - // - // cmExtractIconImages - // - this.cmExtractIconImages.Name = "cmExtractIconImages"; - this.cmExtractIconImages.Size = new System.Drawing.Size(111, 22); - this.cmExtractIconImages.Text = "Icon"; - this.cmExtractIconImages.Click += new System.EventHandler(this.cmOptionsExtract_MouseClick); - // - // cmExtractBothImages - // - this.cmExtractBothImages.Name = "cmExtractBothImages"; - this.cmExtractBothImages.Size = new System.Drawing.Size(111, 22); - this.cmExtractBothImages.Text = "Both"; - this.cmExtractBothImages.Click += new System.EventHandler(this.cmOptionsExtract_MouseClick); - // - // cmSound - // - this.cmSound.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.cmLoadAudioFile, - this.cmConvertToBns}); - this.cmSound.Name = "cmSound"; - this.cmSound.Size = new System.Drawing.Size(159, 48); - // - // cmLoadAudioFile - // - this.cmLoadAudioFile.Name = "cmLoadAudioFile"; - this.cmLoadAudioFile.Size = new System.Drawing.Size(158, 22); - this.cmLoadAudioFile.Text = "Load Audio File"; - this.cmLoadAudioFile.Click += new System.EventHandler(this.cmLoadAudioFile_Click); - // - // cmConvertToBns - // - this.cmConvertToBns.Name = "cmConvertToBns"; - this.cmConvertToBns.Size = new System.Drawing.Size(158, 22); - this.cmConvertToBns.Text = "Convert To BNS"; - this.cmConvertToBns.Click += new System.EventHandler(this.cmConvertToBns_Click); - // - // cmDol - // - this.cmDol.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.cmLoadDol, - this.cmDolFromSource}); - this.cmDol.Name = "cmDol"; - this.cmDol.Size = new System.Drawing.Size(200, 48); - // - // cmLoadDol - // - this.cmLoadDol.Name = "cmLoadDol"; - this.cmLoadDol.Size = new System.Drawing.Size(199, 22); - this.cmLoadDol.Text = "Load DOL File"; - this.cmLoadDol.Click += new System.EventHandler(this.cmLoadDol_Click); - // - // cmDolFromSource - // - this.cmDolFromSource.Name = "cmDolFromSource"; - this.cmDolFromSource.Size = new System.Drawing.Size(199, 22); - this.cmDolFromSource.Text = "Take From Source WAD"; - this.cmDolFromSource.Click += new System.EventHandler(this.cmDolFromSource_Click); - // - // panCredits - // - this.panCredits.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; - this.panCredits.Controls.Add(this.lbCreditThanks); - this.panCredits.Location = new System.Drawing.Point(0, 94); - this.panCredits.Name = "panCredits"; - this.panCredits.Size = new System.Drawing.Size(443, 79); - this.panCredits.TabIndex = 5; - // - // CustomizeMii_Main - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(451, 290); - this.Controls.Add(this.tabControl); - this.Controls.Add(this.btnCreateWad); - this.Controls.Add(this.ssMain); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.MaximizeBox = false; - this.Name = "CustomizeMii_Main"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "CustomizeMii X by Leathl"; - this.Load += new System.EventHandler(this.CustomizeMii_Main_Load); - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.CustomizeMii_Main_FormClosing); - this.tabControl.ResumeLayout(false); - this.tabSource.ResumeLayout(false); - this.tabSource.PerformLayout(); - this.tabTitle.ResumeLayout(false); - this.tabTitle.PerformLayout(); - this.tabOptions.ResumeLayout(false); - this.tabOptions.PerformLayout(); - this.tabBanner.ResumeLayout(false); - this.tabBanner.PerformLayout(); - this.tabIcon.ResumeLayout(false); - this.tabIcon.PerformLayout(); - this.tabBrlyt.ResumeLayout(false); - this.tabBrlyt.PerformLayout(); - this.tabBrlan.ResumeLayout(false); - this.tabBrlan.PerformLayout(); - this.tabInstructions.ResumeLayout(false); - this.tabCredits.ResumeLayout(false); - this.ssMain.ResumeLayout(false); - this.ssMain.PerformLayout(); - this.cmForwarder.ResumeLayout(false); - this.cmOptionsExtract.ResumeLayout(false); - this.cmSound.ResumeLayout(false); - this.cmDol.ResumeLayout(false); - this.panCredits.ResumeLayout(false); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Button btnCreateWad; - private System.Windows.Forms.TabControl tabControl; - private System.Windows.Forms.TabPage tabSource; - private System.Windows.Forms.TabPage tabTitle; - private System.Windows.Forms.TabPage tabOptions; - private System.Windows.Forms.TabPage tabBanner; - private System.Windows.Forms.TabPage tabIcon; - private System.Windows.Forms.TabPage tabCredits; - private System.Windows.Forms.Label lbSource; - private System.Windows.Forms.Button btnBrowseSource; - private System.Windows.Forms.TextBox tbSourceWad; - private System.Windows.Forms.ListBox lbxBaseWads; - private System.Windows.Forms.Button btnSaveBaseWad; - private System.Windows.Forms.Button btnPreviewBaseWad; - private System.Windows.Forms.Button btnLoadBaseWad; - private System.Windows.Forms.TextBox tbAllLanguages; - private System.Windows.Forms.Label lbAllLanguages; - private System.Windows.Forms.Label lbSpecificLanguageTitles; - private System.Windows.Forms.Label lbEnglish; - private System.Windows.Forms.Label lbJapanese; - private System.Windows.Forms.Label lbDutch; - private System.Windows.Forms.Label lbItalian; - private System.Windows.Forms.Label lbSpanish; - private System.Windows.Forms.Label lbFrench; - private System.Windows.Forms.Label lbGerman; - private System.Windows.Forms.TextBox tbItalian; - private System.Windows.Forms.TextBox tbFrench; - private System.Windows.Forms.TextBox tbJapanese; - private System.Windows.Forms.TextBox tbDutch; - private System.Windows.Forms.TextBox tbSpanish; - private System.Windows.Forms.TextBox tbGerman; - private System.Windows.Forms.TextBox tbEnglish; - private System.Windows.Forms.Label lbNewDol; - private System.Windows.Forms.Label lbTitleID; - private System.Windows.Forms.Label lbNandLoader; - private System.Windows.Forms.Label lbNewSound; - private System.Windows.Forms.Button btnBrowseDol; - private System.Windows.Forms.TextBox tbDol; - private System.Windows.Forms.TextBox tbTitleID; - private System.Windows.Forms.ComboBox cmbNandLoader; - private System.Windows.Forms.TextBox tbSound; - private System.Windows.Forms.Button btnBrowseSound; - private System.Windows.Forms.Label lbOptionsOptional; - private System.Windows.Forms.Button btnPreviewBanner; - private System.Windows.Forms.Button btnExtractBanner; - private System.Windows.Forms.Button btnReplaceBanner; - private System.Windows.Forms.ListBox lbxBannerTpls; - private System.Windows.Forms.Label lbFormatBanner; - private System.Windows.Forms.ComboBox cmbFormatBanner; - private System.Windows.Forms.ComboBox cmbFormatIcon; - private System.Windows.Forms.Label lbFormatIcon; - private System.Windows.Forms.Button btnPreviewIcon; - private System.Windows.Forms.Button btnExtractIcon; - private System.Windows.Forms.Button btnReplaceIcon; - private System.Windows.Forms.ListBox lbxIconTpls; - private System.Windows.Forms.Label lbCreditInfo; - private System.Windows.Forms.Label lbCreditVersion; - private System.Windows.Forms.Label lbCreditThanks; - private System.Windows.Forms.StatusStrip ssMain; - private System.Windows.Forms.ToolStripProgressBar pbProgress; - private System.Windows.Forms.ToolStripStatusLabel lbStatus; - private System.Windows.Forms.ToolStripStatusLabel lbStatusText; - private System.Windows.Forms.ComboBox cmbReplace; - private System.Windows.Forms.TextBox tbReplace; - private System.Windows.Forms.Button btnBrowseReplace; - private System.Windows.Forms.Button btnClearReplace; - private System.Windows.Forms.CheckBox cbLz77; - private System.Windows.Forms.LinkLabel llbSite; - private System.Windows.Forms.TabPage tabBrlyt; - private System.Windows.Forms.TabPage tabBrlan; - private System.Windows.Forms.ListBox lbxBrlytIcon; - private System.Windows.Forms.ListBox lbxBrlytBanner; - private System.Windows.Forms.Label lbBrlytIcon; - private System.Windows.Forms.Label lbBrlytBanner; - private System.Windows.Forms.Button btnBrlytReplace; - private System.Windows.Forms.Button btnBrlytExtract; - private System.Windows.Forms.Button btnBrlanExtract; - private System.Windows.Forms.Button btnBrlanDelete; - private System.Windows.Forms.Button btnBrlanReplace; - private System.Windows.Forms.Label lbBrlanIcon; - private System.Windows.Forms.Label lbBrlanBanner; - private System.Windows.Forms.Button btnBrlanAdd; - private System.Windows.Forms.ListBox lbxBrlanIcon; - private System.Windows.Forms.ListBox lbxBrlanBanner; - private System.Windows.Forms.Label lbBrlytActions; - private System.Windows.Forms.Label lbBrlanActions; - private System.Windows.Forms.Label lbBrlytWarning; - private System.Windows.Forms.Label lbBrlanWarning; - private System.Windows.Forms.LinkLabel llbUpdateAvailabe; - private System.Windows.Forms.Button btnDeleteBanner; - private System.Windows.Forms.Button btnAddBanner; - private System.Windows.Forms.Button btnAddIcon; - private System.Windows.Forms.Button btnDeleteIcon; - private System.Windows.Forms.Button btnBrlytListTpls; - private System.Windows.Forms.CheckBox cbBannerMakeTransparent; - private System.Windows.Forms.CheckBox cbIconMakeTransparent; - private System.Windows.Forms.TabPage tabInstructions; - private System.Windows.Forms.RichTextBox rtbInstructions; - private System.Windows.Forms.CheckBox cbFailureChecks; - private System.Windows.Forms.Button btnForwarder; - private System.Windows.Forms.ContextMenuStrip cmForwarder; - private System.Windows.Forms.ToolStripMenuItem cmSimpleForwarder; - private System.Windows.Forms.ToolStripMenuItem cmComplexForwarder; - private System.Windows.Forms.Button btnOptionsExtract; - private System.Windows.Forms.ContextMenuStrip cmOptionsExtract; - private System.Windows.Forms.ToolStripMenuItem cmExtractDol; - private System.Windows.Forms.ToolStripMenuItem tsExtractSound; - private System.Windows.Forms.ToolStripMenuItem tsExtractImages; - private System.Windows.Forms.ToolStripMenuItem cmExtractBannerImages; - private System.Windows.Forms.ToolStripMenuItem cmExtractIconImages; - private System.Windows.Forms.ToolStripMenuItem cmExtractBothImages; - private System.Windows.Forms.ToolStripMenuItem cmExtractSoundAsBin; - private System.Windows.Forms.ToolStripMenuItem cmExtractSoundAsAudio; - private System.Windows.Forms.ContextMenuStrip cmSound; - private System.Windows.Forms.ToolStripMenuItem cmLoadAudioFile; - private System.Windows.Forms.ToolStripMenuItem cmConvertToBns; - private System.Windows.Forms.ToolStripMenuItem cmExtractWad; - private System.Windows.Forms.ContextMenuStrip cmDol; - private System.Windows.Forms.ToolStripMenuItem cmLoadDol; - private System.Windows.Forms.ToolStripMenuItem cmDolFromSource; - private System.Windows.Forms.Panel panCredits; - } -} - diff --git a/CustomizeMii/CustomizeMii_Main.cs b/CustomizeMii/CustomizeMii_Main.cs deleted file mode 100644 index 0b1cec0..0000000 --- a/CustomizeMii/CustomizeMii_Main.cs +++ /dev/null @@ -1,3301 +0,0 @@ -/* This file is part of CustomizeMii - * Copyright (C) 2009 Leathl - * - * CustomizeMii is free software: you can redistribute it and/or - * modify it under the terms of the GNU General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CustomizeMii is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -//#define Mono //Change all '\\' to '/' (in all files) while compiling for OS X / Linux (Mono) -//#define Debug //Always remember to turn off :) - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Drawing; -using System.IO; -using System.Net; -using System.Text.RegularExpressions; -using System.Windows.Forms; - -#if !Mono -using ForwardMii; -#endif - -namespace CustomizeMii -{ - public partial class CustomizeMii_Main : Form - { - const string version = "2.1"; //Hint for myself: Never use a char in the Version (UpdateCheck)! - const int SoundMaxLength = 30; //In seconds - const int SoundWarningLength = 20; //In seconds - const int BnsWarningLength = 45; //In seconds - const int CreditsScrollSpeed = 85; //Timer Intervall for the scrolling Credits - public static string TempPath = Path.GetTempPath() + "CustomizeMii_Temp\\XXX\\"; - public static string TempWadPath = Path.GetTempPath() + "CustomizeMii_Temp\\XXX\\TempWad.wad"; - public static string TempUnpackPath = Path.GetTempPath() + "CustomizeMii_Temp\\XXX\\Unpack\\"; - public static string TempBannerPath = Path.GetTempPath() + "CustomizeMii_Temp\\XXX\\Banner\\"; - public static string TempIconPath = Path.GetTempPath() + "CustomizeMii_Temp\\XXX\\Icon\\"; - public static string TempSoundPath = Path.GetTempPath() + "CustomizeMii_Temp\\XXX\\sound.bin"; - public static string TempWavePath = Path.GetTempPath() + "CustomizeMii_Temp\\XXX\\Temp.wav"; - public static string TempBnsPath = Path.GetTempPath() + "CustomizeMii_Temp\\XXX\\Temp.bns"; - public static string TempDolPath = Path.GetTempPath() + "CustomizeMii_Temp\\XXX\\Temp.dol"; - public static string TempTempPath = Path.GetTempPath() + "CustomizeMii_Temp\\XXX\\Temp\\"; - public static string TempUnpackBannerTplPath = Path.GetTempPath() + "CustomizeMii_Temp\\XXX\\Unpack\\00000000.app_OUT\\meta\\banner.bin_OUT\\arc\\timg\\"; - public static string TempUnpackIconTplPath = Path.GetTempPath() + "CustomizeMii_Temp\\XXX\\Unpack\\00000000.app_OUT\\meta\\icon.bin_OUT\\arc\\timg\\"; - public static string TempUnpackBannerBrlytPath = Path.GetTempPath() + "CustomizeMii_Temp\\XXX\\Unpack\\00000000.app_OUT\\meta\\banner.bin_OUT\\arc\\blyt\\"; - public static string TempUnpackIconBrlytPath = Path.GetTempPath() + "CustomizeMii_Temp\\XXX\\Unpack\\00000000.app_OUT\\meta\\icon.bin_OUT\\arc\\blyt\\"; - public static string TempUnpackBannerBrlanPath = Path.GetTempPath() + "CustomizeMii_Temp\\XXX\\Unpack\\00000000.app_OUT\\meta\\banner.bin_OUT\\arc\\anim\\"; - public static string TempUnpackIconBrlanPath = Path.GetTempPath() + "CustomizeMii_Temp\\XXX\\Unpack\\00000000.app_OUT\\meta\\icon.bin_OUT\\arc\\anim\\"; - public static string[] ButtonTexts = new string[] { "Image", "Create WAD!", "Fire!", "Go Go Go!", "Let's do it!", "What are you waitin' for?", "I want my Channel!", "Houston, We've Got a Problem!", "Error, please contact anyone!", "Isn't she sweet?", "Is that milk?", "In your face!", "_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_", "Take me to a higher place!", "What's goin' on?", "I'm a Button!", "Click!", "Today's date is " + DateTime.Now.ToShortDateString(), "Launch Time: " + DateTime.Now.ToLongTimeString(), string.Format("My name is {0}", Environment.UserName) }; - public static string[] SourceWadUrls = new string[] { "http://wadder.net/bases/StaticBase.wad", "http://wadder.net/bases/GenesisGX.wad", "http://wadder.net/bases/MP-CE-Std.wad", "http://wadder.net/bases/MP-CE-Ext.wad", "http://wadder.net/bases/SNES9XGX.wad", "http://wadder.net/bases/FCEUGX-wilsoff.wad", "http://wadder.net/bases/FCEUGX.wad", "http://wadder.net/bases/Wii64.wad", "http://wadder.net/bases/WiiSXFull.wad", "http://wadder.net/bases/WiiSXRetro.wad", "http://wadder.net/bases/WADderBase1.wad", "http://wadder.net/bases/WADderBase2.wad", "http://wadder.net/bases/WADderBase3.wad", "http://wadder.net/bases/UniiLoader.wad", "http://wadder.net/bases/BackupChannel.wad" }; - public static string[] SourceWadPreviewUrls = new string[] { "http://www.youtube.com/watch?v=pFNKldTYQq0", "http://www.youtube.com/watch?v=p9A6iEQvv9w", "http://www.youtube.com/watch?v=Up1RZebUc_U", "http://www.youtube.com/watch?v=Up1RZebUc_U", "http://www.youtube.com/watch?v=P-Mxd6DMvFY", "http://www.youtube.com/watch?v=wrbrg-DH_h4", "http://www.youtube.com/watch?v=MfiVbQaiXw8", "http://www.youtube.com/watch?v=krCQ2J7ZH8Y", "http://www.youtube.com/watch?v=rZC1DKUM6QI", "http://www.youtube.com/watch?v=Uiy8w-bp1kI", "http://www.youtube.com/watch?v=BbSYCSI8tz8", "http://www.youtube.com/watch?v=PIFZevHQ8lQ", "http://www.youtube.com/watch?v=OIhvDNjphhc", "http://www.youtube.com/watch?v=KLcncEArQLY&NR=1", "http://www.youtube.com/watch?v=xE_EgdCRV1I" }; - private string BannerTplPath = string.Empty; - private string IconTplPath = string.Empty; - private string SourceWad = string.Empty; - private string BannerBrlytPath = string.Empty; - private string IconBrlytPath = string.Empty; - private string BannerBrlanPath = string.Empty; - private string IconBrlanPath = string.Empty; - private string BannerReplace = string.Empty; - private string IconReplace = string.Empty; - private string SoundReplace = string.Empty; - private bool BrlytChanged = false; - private bool BrlanChanged = false; - private Progress currentProgress; - private EventHandler ProgressUpdate; - private int UnpackFolderErrorCount = 0; - private Stopwatch CreationTimer = new Stopwatch(); - private List BannerTransparents = new List(); - private List IconTransparents = new List(); - private string Mp3Path; - private Forwarder.Simple SimpleForwarder = new Forwarder.Simple(); - private Forwarder.Complex ComplexForwarder = new Forwarder.Complex(); - private delegate void BoxInvoker(string message); - private delegate void SetTextInvoker(string text, TextBox tb); - double separatorBtn; - Timer tmrCredits = new Timer(); - - public CustomizeMii_Main() - { - InitializeComponent(); - this.Icon = global::CustomizeMii.Properties.Resources.CustomizeMii; - } - - private void CustomizeMii_Main_Load(object sender, EventArgs e) - { - UpdatePaths(); - UpdateCheck(); - -#if !Mono - UpdateCheckForwardMii(); - CommonKeyCheck(); -#endif - - InitializeStartup(); - -#if Mono - //TextBox.MaxLength is not implemented in Mono, so don't use it - for (int i = 0; i < tabControl.TabPages.Count; i++) - for(int j=0;j 0) - { - lbxBannerTpls.Items.Clear(); - BannerTplPath = tpls[0].Remove(tpls[0].LastIndexOf('\\') + 1); - - for (int i = 0; i < tpls.Length; i++) - { - if (BannerTransparents.Contains(tpls[i].Remove(0, tpls[i].LastIndexOf('\\') + 1))) - lbxBannerTpls.Items.Add(tpls[i].Remove(0, tpls[i].LastIndexOf('\\') + 1) + " (Transparent)"); - else - lbxBannerTpls.Items.Add(tpls[i].Remove(0, tpls[i].LastIndexOf('\\') + 1)); - } - } - } - - private void AddIconTpls(string[] tpls) - { - if (tpls.Length > 0) - { - lbxIconTpls.Items.Clear(); - IconTplPath = tpls[0].Remove(tpls[0].LastIndexOf('\\') + 1); - - for (int i = 0; i < tpls.Length; i++) - { - if (IconTransparents.Contains(tpls[i].Remove(0, tpls[i].LastIndexOf('\\') + 1))) - lbxIconTpls.Items.Add(tpls[i].Remove(0, tpls[i].LastIndexOf('\\') + 1) + " (Transparent)"); - else - lbxIconTpls.Items.Add(tpls[i].Remove(0, tpls[i].LastIndexOf('\\') + 1)); - } - } - } - - private void AddBrlyts(object sender, EventArgs e) - { - try - { - string[] BannerBrlyt; - if (string.IsNullOrEmpty(BannerReplace)) - BannerBrlyt = Directory.GetFiles(TempUnpackBannerBrlytPath); - else - BannerBrlyt = Directory.GetFiles(TempBannerPath + "arc\\blyt"); - - string[] IconBrlyt; - if (string.IsNullOrEmpty(IconReplace)) - IconBrlyt = Directory.GetFiles(TempUnpackIconBrlytPath); - else - IconBrlyt = Directory.GetFiles(TempIconPath + "arc\\blyt"); - - AddBannerBrlyt(BannerBrlyt); - AddIconBrlyt(IconBrlyt); - - if (lbxBrlytBanner.SelectedIndex == -1 && lbxBrlytIcon.SelectedIndex == -1) - { - if (lbxBrlytBanner.Items.Count > 0) lbxBrlytBanner.SelectedIndex = 0; - else if (lbxBrlytIcon.Items.Count > 0) lbxBrlytIcon.SelectedIndex = 0; - } - } - catch { } - } - - private void AddBrlans(object sender, EventArgs e) - { - try - { - string[] BannerBrlan; - if (string.IsNullOrEmpty(BannerReplace)) - BannerBrlan = Directory.GetFiles(TempUnpackBannerBrlanPath); - else - BannerBrlan = Directory.GetFiles(TempBannerPath + "arc\\anim"); - - string[] IconBrlan; - if (string.IsNullOrEmpty(IconReplace)) - IconBrlan = Directory.GetFiles(TempUnpackIconBrlanPath); - else - IconBrlan = Directory.GetFiles(TempIconPath + "arc\\anim"); - - AddBannerBrlan(BannerBrlan); - AddIconBrlan(IconBrlan); - - if (lbxBrlanBanner.SelectedIndex == -1 && lbxBrlanIcon.SelectedIndex == -1) - { - if (lbxBrlanBanner.Items.Count > 0) lbxBrlanBanner.SelectedIndex = 0; - else if (lbxBrlanIcon.Items.Count > 0) lbxBrlanIcon.SelectedIndex = 0; - } - } - catch { } - } - - private void AddBannerBrlyt(string[] brlyt) - { - if (brlyt.Length > 0) - { - lbxBrlytBanner.Items.Clear(); - BannerBrlytPath = brlyt[0].Remove(brlyt[0].LastIndexOf('\\') + 1); - - for (int i = 0; i < brlyt.Length; i++) - { - lbxBrlytBanner.Items.Add(brlyt[i].Remove(0, brlyt[i].LastIndexOf('\\') + 1)); - } - } - } - - private void AddIconBrlyt(string[] brlyt) - { - if (brlyt.Length > 0) - { - lbxBrlytIcon.Items.Clear(); - IconBrlytPath = brlyt[0].Remove(brlyt[0].LastIndexOf('\\') + 1); - - for (int i = 0; i < brlyt.Length; i++) - { - lbxBrlytIcon.Items.Add(brlyt[i].Remove(0, brlyt[i].LastIndexOf('\\') + 1)); - } - } - } - - private void AddBannerBrlan(string[] brlan) - { - if (brlan.Length > 0) - { - lbxBrlanBanner.Items.Clear(); - BannerBrlanPath = brlan[0].Remove(brlan[0].LastIndexOf('\\') + 1); - - for (int i = 0; i < brlan.Length; i++) - { - lbxBrlanBanner.Items.Add(brlan[i].Remove(0, brlan[i].LastIndexOf('\\') + 1)); - } - } - } - - private void AddIconBrlan(string[] brlan) - { - if (brlan.Length > 0) - { - lbxBrlanIcon.Items.Clear(); - IconBrlanPath = brlan[0].Remove(brlan[0].LastIndexOf('\\') + 1); - - for (int i = 0; i < brlan.Length; i++) - { - lbxBrlanIcon.Items.Add(brlan[i].Remove(0, brlan[i].LastIndexOf('\\') + 1)); - } - } - } - - private void SetText(TextBox tb, string text) - { - SetTextInvoker invoker = new SetTextInvoker(this.SetText); - this.Invoke(invoker, text, tb); - } - - private void SetText(string text, TextBox tb) - { - tb.Text = text; - } - - private string GetCurBannerPath() - { - if (string.IsNullOrEmpty(BannerReplace)) - return TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT\\arc\\"; - else - return TempBannerPath + "arc\\"; - } - - private string GetCurIconPath() - { - if (string.IsNullOrEmpty(IconReplace)) - return TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT\\arc\\"; - else - return TempIconPath + "arc\\"; - } - - private void SetSourceWad(object sender, EventArgs e) - { - tbSourceWad.Text = SourceWad; - } - - private void ForwarderDialogSimple() - { - CustomizeMii_InputBox ib = new CustomizeMii_InputBox(false); - ib.Size = new Size(ib.Size.Width, 120); - ib.lbInfo.Text = "Enter the application folder where the forwarder will point to (3-18 chars)"; - ib.tbInput.MaxLength = 18; - ib.btnExit.Text = "Close"; - ib.cbElf.Visible = true; - - ib.tbInput.Text = SimpleForwarder.AppFolder; - ib.cbElf.Checked = SimpleForwarder.ForwardToElf; - - if (ib.ShowDialog() == DialogResult.OK) - { - SimpleForwarder.ForwardToElf = ib.cbElf.Checked; - SimpleForwarder.AppFolder = ib.Input; - SetText(tbDol, string.Format("Simple Forwarder: \"SD:\\apps\\{0}\\boot.{1}\"", - SimpleForwarder.AppFolder, SimpleForwarder.ForwardToElf == true ? "elf" : "dol")); - btnBrowseDol.Text = "Clear"; - } - } - - private void ForwarderDialogComplex() - { - CustomizeMii_ComplexForwarder cf = new CustomizeMii_ComplexForwarder(); - cf.tbAppFolder.Text = ComplexForwarder.AppFolder; - //cf.rbSD.Checked = !ComplexForwarder.UsbFirst; - //cf.rbUSB.Checked = ComplexForwarder.UsbFirst; - //cf.rbDOL.Checked = !ComplexForwarder.ElfFirst; - //cf.rbELF.Checked = ComplexForwarder.ElfFirst; - - if (!string.IsNullOrEmpty(ComplexForwarder.Image43)) - { - cf.cbImage43.Checked = true; - cf.tbImage43.Enabled = true; - cf.btnBrowseImage43.Enabled = true; - - cf.tbImage43.Text = ComplexForwarder.Image43; - } - if (!string.IsNullOrEmpty(ComplexForwarder.Image169)) - { - cf.cbImage169.Checked = true; - cf.tbImage169.Enabled = true; - cf.btnBrowseImage169.Enabled = true; - - cf.tbImage169.Text = ComplexForwarder.Image169; - } - - if (cf.ShowDialog() == DialogResult.OK) - { - ComplexForwarder.AppFolder = cf.tbAppFolder.Text; - //ComplexForwarder.UsbFirst = cf.rbUSB.Checked; - //ComplexForwarder.ElfFirst = cf.rbELF.Checked; - ComplexForwarder.Image43 = cf.tbImage43.Text; - ComplexForwarder.Image169 = cf.tbImage169.Text; - - SetText(tbDol, string.Format("Complex Forwarder: \"{0}\"", ComplexForwarder.AppFolder)); - } - } - - private void tabControl_Selecting(object sender, TabControlCancelEventArgs e) - { - tmrCredits.Stop(); - - if (tabControl.SelectedTab == tabBanner) - { - lbxBannerTpls.SelectedIndex = -1; - cbBannerMakeTransparent.Checked = false; - cbBannerMakeTransparent.Enabled = false; - AddBannerTpls(null, null); - } - else if (tabControl.SelectedTab == tabIcon) - { - lbxIconTpls.SelectedIndex = -1; - cbIconMakeTransparent.Checked = false; - cbIconMakeTransparent.Enabled = false; - AddIconTpls(null, null); - } - else if (tabControl.SelectedTab == tabBrlyt) - { - AddBrlyts(null, null); - } - else if (tabControl.SelectedTab == tabBrlan) - { - AddBrlans(null, null); - } - else if (tabControl.SelectedTab == tabCredits) - { - lbCreditThanks.Location = new Point(lbCreditThanks.Location.X, panCredits.Height); - tmrCredits.Start(); - } - } - - void tmrCredits_Tick(object sender, EventArgs e) - { - if (lbCreditThanks.Location.Y == -130) lbCreditThanks.Location = new Point(lbCreditThanks.Location.X, panCredits.Height); - lbCreditThanks.Location = new Point(lbCreditThanks.Location.X, lbCreditThanks.Location.Y - 1); - } - - private void lbStatusText_TextChanged(object sender, EventArgs e) - { - if (string.IsNullOrEmpty(lbStatusText.Text) && pbProgress.Value == 100) - { - if (tabControl.SelectedTab == tabBanner) - { - try - { - string[] BannerTpls; - if (string.IsNullOrEmpty(BannerReplace)) - BannerTpls = Directory.GetFiles(TempUnpackBannerTplPath); - else - BannerTpls = Directory.GetFiles(TempBannerPath + "arc\\timg"); - - AddBannerTpls(BannerTpls); - } - catch { } - } - else if (tabControl.SelectedTab == tabIcon) - { - try - { - string[] IconTpls; - if (string.IsNullOrEmpty(IconReplace)) - IconTpls = Directory.GetFiles(TempUnpackIconTplPath); - else - IconTpls = Directory.GetFiles(TempIconPath + "arc\\timg"); - - AddIconTpls(IconTpls); - } - catch { } - } - else if (tabControl.SelectedTab == tabBrlyt) - { - try - { - string[] BannerBrlyt; - if (string.IsNullOrEmpty(BannerReplace)) - BannerBrlyt = Directory.GetFiles(TempUnpackBannerBrlytPath); - else - BannerBrlyt = Directory.GetFiles(TempBannerPath + "arc\\blyt"); - - string[] IconBrlyt; - if (string.IsNullOrEmpty(IconReplace)) - IconBrlyt = Directory.GetFiles(TempUnpackIconBrlytPath); - else - IconBrlyt = Directory.GetFiles(TempIconPath + "arc\\blyt"); - - AddBannerBrlyt(BannerBrlyt); - AddIconBrlyt(IconBrlyt); - } - catch { } - } - else if (tabControl.SelectedTab == tabBrlan) - { - try - { - string[] BannerBrlan; - if (string.IsNullOrEmpty(BannerReplace)) - BannerBrlan = Directory.GetFiles(TempUnpackBannerBrlanPath); - else - BannerBrlan = Directory.GetFiles(TempBannerPath + "arc\\anim"); - - string[] IconBrlan; - if (string.IsNullOrEmpty(IconReplace)) - IconBrlan = Directory.GetFiles(TempUnpackIconBrlanPath); - else - IconBrlan = Directory.GetFiles(TempIconPath + "arc\\anim"); - - AddBannerBrlan(BannerBrlan); - AddIconBrlan(IconBrlan); - } - catch { } - } - } - } - - private Image ResizeImage(Image img, int x, int y) - { - Image newimage = new Bitmap(x, y); - using (Graphics gfx = Graphics.FromImage(newimage)) - { - gfx.DrawImage(img, 0, 0, x, y); - } - return newimage; - } - - private void MakeBannerTplsTransparent() - { - foreach (string thisTpl in lbxBannerTpls.Items) - { - if (thisTpl.EndsWith("(Transparent)")) - { - string Tpl = BannerTplPath + thisTpl.Replace(" (Transparent)", string.Empty); - byte[] TplArray = Wii.Tools.LoadFileToByteArray(Tpl); - int Width = Wii.TPL.GetTextureWidth(TplArray); - int Height = Wii.TPL.GetTextureHeight(TplArray); - - Image Img = new Bitmap(Width, Height); - Wii.TPL.ConvertToTPL(Img, Tpl, 5); - } - } - } - - private void MakeIconTplsTransparent() - { - foreach (string thisTpl in lbxIconTpls.Items) - { - if (thisTpl.EndsWith("(Transparent)")) - { - string Tpl = IconTplPath + thisTpl.Replace(" (Transparent)", string.Empty); - byte[] TplArray = Wii.Tools.LoadFileToByteArray(Tpl); - int Width = Wii.TPL.GetTextureWidth(TplArray); - int Height = Wii.TPL.GetTextureHeight(TplArray); - - Image Img = new Bitmap(Width, Height); - Wii.TPL.ConvertToTPL(Img, Tpl, 5); - } - } - } - - private void EnableControls(object sender, EventArgs e) - { - for (int i = 0; i < tabControl.TabCount; i++) - { - if (tabControl.TabPages[i] != tabSource) - { - foreach (Control Ctrl in tabControl.TabPages[i].Controls) - { - if (Ctrl is Button) Ctrl.Enabled = true; - else if ((Ctrl is TextBox) && (Ctrl.Tag != (object)"Disabled")) Ctrl.Enabled = true; - else if (Ctrl is CheckBox && Ctrl.Tag != (object)"Independent") Ctrl.Enabled = true; - else if (Ctrl is ComboBox) Ctrl.Enabled = true; - } - } - } - } - - private void DisableControls(object sender, EventArgs e) - { - for (int i = 0; i < tabControl.TabCount; i++) - { - if (tabControl.TabPages[i] != tabSource) - { - foreach (Control Ctrl in tabControl.TabPages[i].Controls) - { - if (Ctrl is Button) Ctrl.Enabled = false; - else if ((Ctrl is TextBox) && (Ctrl.Tag != (object)"Disabled")) Ctrl.Enabled = false; - else if (Ctrl is CheckBox && Ctrl.Tag != (object)"Independent") Ctrl.Enabled = false; - else if (Ctrl is ComboBox) Ctrl.Enabled = false; - } - } - } - } - - private void UpdateCheck() - { - if (CheckInet() == true) - { - try - { - WebClient GetVersion = new WebClient(); -#if Mono - string NewVersion = GetVersion.DownloadString("http://customizemii.googlecode.com/svn/monoversion.txt"); -#else - string NewVersion = GetVersion.DownloadString("http://customizemii.googlecode.com/svn/version.txt"); -#endif - int newVersion = Convert.ToInt32(NewVersion.Replace(".", string.Empty).Length == 2 ? (NewVersion.Replace(".", string.Empty) + "0") : NewVersion.Replace(".", string.Empty)); - int thisVersion = Convert.ToInt32(version.Replace(".", string.Empty).Length == 2 ? (version.Replace(".", string.Empty) + "0") : version.Replace(".", string.Empty)); - - if (newVersion > thisVersion) - { - llbUpdateAvailabe.Text = llbUpdateAvailabe.Text.Replace("X", NewVersion); - llbUpdateAvailabe.Visible = true; - - if (MessageBox.Show("Version " + NewVersion + - " is availabe.\nDo you want the download page to be opened?", - "Update availabe", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == - DialogResult.Yes) - { - Process.Start("http://code.google.com/p/customizemii/downloads/list"); - } - } - } - catch { } - } - } - -#if !Mono - private string GetForwardMiiVersion() - { - return ForwardMii_Plugin.GetVersion(); - } - - private void UpdateCheckForwardMii() - { - if (File.Exists(Application.StartupPath + "\\ForwardMii.dll")) - { - if (CheckInet() == true) - { - try - { - string CurrentVersion = GetForwardMiiVersion(); - - if (!string.IsNullOrEmpty(CurrentVersion)) - { - WebClient GetVersion = new WebClient(); - string NewVersion = GetVersion.DownloadString("http://customizemii.googlecode.com/svn/forwardmii-version.txt"); - - int newVersion = Convert.ToInt32(NewVersion.Replace(".", string.Empty).Length == 2 ? (NewVersion.Replace(".", string.Empty) + "0") : NewVersion.Replace(".", string.Empty)); - int thisVersion = Convert.ToInt32(CurrentVersion.Replace(".", string.Empty).Length == 2 ? (CurrentVersion.Replace(".", string.Empty) + "0") : CurrentVersion.Replace(".", string.Empty)); - - if (newVersion > thisVersion) - { - if (MessageBox.Show("Version " + NewVersion + - " of the ForwardMii-Plugin is availabe.\nDo you want the download page to be opened?", - "ForwardMii Update availabe", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == - DialogResult.Yes) - { - Process.Start("http://code.google.com/p/customizemii/downloads/list"); - } - } - } - } - catch { } - } - } - } -#endif - - private void llbSite_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - try - { - llbSite.LinkVisited = true; - Process.Start("http://customizemii.googlecode.com"); - } - catch (Exception ex) { ErrorBox(ex.Message); } - } - - private void btnBrowseSource_Click(object sender, EventArgs e) - { -#if Mono - CommonKeyCheck(); -#endif - - if (pbProgress.Value == 100) - { - OpenFileDialog ofd = new OpenFileDialog(); - ofd.Filter = "Wii Channels|*.wad"; - - if (ofd.ShowDialog() == DialogResult.OK) - { - SourceWad = ofd.FileName; - BackgroundWorker bwLoadChannel = new BackgroundWorker(); - bwLoadChannel.DoWork += new DoWorkEventHandler(bwLoadChannel_DoWork); - bwLoadChannel.ProgressChanged += new ProgressChangedEventHandler(bwLoadChannel_ProgressChanged); - bwLoadChannel.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bwLoadChannel_RunWorkerCompleted); - bwLoadChannel.WorkerReportsProgress = true; - bwLoadChannel.RunWorkerAsync(ofd.FileName); - } - } - } - - private void btnLoadBaseWad_Click(object sender, EventArgs e) - { - if (lbxBaseWads.SelectedIndex != -1) - { - if (CheckInet() == true) - { - if (pbProgress.Value == 100) - { - if (tbSourceWad.Text != SourceWadUrls[lbxBaseWads.SelectedIndex]) - { - try - { - SourceWad = SourceWadUrls[lbxBaseWads.SelectedIndex]; - tbSourceWad.Text = SourceWad; - WebClient Client = new WebClient(); - Client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(Client_DownloadProgressChanged); - Client.DownloadFileCompleted += new AsyncCompletedEventHandler(Client_DownloadFileCompleted); - - lbStatusText.Text = "Downloading Base WAD..."; - pbProgress.Value = 0; - if (!Directory.Exists(TempWadPath.Remove(TempWadPath.LastIndexOf('\\')))) - Directory.CreateDirectory(TempWadPath.Remove(TempWadPath.LastIndexOf('\\'))); - Client.DownloadFileAsync(new Uri(SourceWad), TempWadPath); - } - catch (Exception ex) - { - tbSourceWad.Text = string.Empty; - ErrorBox(ex.Message); - } - } - } - - } - else - { - ErrorBox("You're not connected to the Internet!"); - } - } - } - - void Client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) - { - pbProgress.Value = e.ProgressPercentage; - } - - void Client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) - { - pbProgress.Value = 100; - lbStatusText.Text = string.Empty; - - if (File.Exists(TempWadPath)) - { - FileInfo fi = new FileInfo(TempWadPath); - - if (fi.Length > 0) - { - BackgroundWorker bwLoadChannel = new BackgroundWorker(); - bwLoadChannel.DoWork += new DoWorkEventHandler(bwLoadChannel_DoWork); - bwLoadChannel.ProgressChanged += new ProgressChangedEventHandler(bwLoadChannel_ProgressChanged); - bwLoadChannel.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bwLoadChannel_RunWorkerCompleted); - bwLoadChannel.WorkerReportsProgress = true; - bwLoadChannel.RunWorkerAsync(TempWadPath); - } - else - { - SetText(tbSourceWad, string.Empty); - File.Delete(TempWadPath); - ErrorBox("The requested file couldn't be downloaded."); - } - } - } - - private void btnPreviewBaseWad_Click(object sender, EventArgs e) - { - if (lbxBaseWads.SelectedIndex != -1) - { - if (CheckInet() == true) - { - if (!string.IsNullOrEmpty(SourceWadPreviewUrls[lbxBaseWads.SelectedIndex])) - { - try - { - Process.Start(SourceWadPreviewUrls[lbxBaseWads.SelectedIndex]); - } - catch (Exception ex) { ErrorBox(ex.Message); } - } - else - InfoBox("There's no preview of this channel availabe, sorry!"); - } - else - { - ErrorBox("You're not connected to the Internet!"); - } - } - } - - private void btnSaveBaseWad_Click(object sender, EventArgs e) - { - if (lbxBaseWads.SelectedIndex != -1) - { - if (CheckInet() == true) - { - if (pbProgress.Value == 100) - { - string Url = SourceWadUrls[lbxBaseWads.SelectedIndex]; - SaveFileDialog sfd = new SaveFileDialog(); - sfd.Filter = "Wii Channels|*.wad"; - sfd.FileName = Url.Remove(0, Url.LastIndexOf('/') + 1); - - if (sfd.ShowDialog() == DialogResult.OK) - { - if (tbSourceWad.Text == SourceWadUrls[lbxBaseWads.SelectedIndex] && File.Exists(TempWadPath)) - { - File.Copy(TempWadPath, sfd.FileName, true); - InfoBox(string.Format("Saved channel as {0}", Path.GetFileName(sfd.FileName))); - } - else - { - try - { - WebClient SaveClient = new WebClient(); - SaveClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(SaveClient_DownloadProgressChanged); - SaveClient.DownloadFileCompleted += new AsyncCompletedEventHandler(SaveClient_DownloadFileCompleted); - - lbStatusText.Text = "Downloading Base WAD..."; - pbProgress.Value = 0; - SaveClient.DownloadFileAsync(new Uri(Url), sfd.FileName); - } - catch (Exception ex) - { - ErrorBox(ex.Message); - } - } - } - } - - } - else - { - ErrorBox("You're not connected to the Internet!"); - } - } - } - - void SaveClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) - { - pbProgress.Value = e.ProgressPercentage; - } - - void SaveClient_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) - { - lbStatusText.Text = string.Empty; - pbProgress.Value = 100; - } - - private void cmbReplace_SelectedIndexChanged(object sender, EventArgs e) - { - switch (cmbReplace.SelectedIndex) - { - case 1: - tbReplace.Text = IconReplace; - break; - case 2: - tbReplace.Text = SoundReplace; - break; - default: - tbReplace.Text = BannerReplace; - break; - } - } - - private void btnBrowseReplace_Click(object sender, EventArgs e) - { - if (!string.IsNullOrEmpty(tbSourceWad.Text)) - { - if (pbProgress.Value == 100) - { - if (cmbReplace.SelectedIndex == 2) //sound - { - try - { - OpenFileDialog ofd = new OpenFileDialog(); - ofd.Filter = "Wii Channels|*.wad|00000000.app|00000000.app|sound.bin|sound.bin|All|*.wad;00000000.app;sound.bin"; - ofd.FilterIndex = 4; - - if (ofd.ShowDialog() == DialogResult.OK) - { - if (ofd.FileName != tbSourceWad.Text) - { - SoundReplace = ofd.FileName; - SetText(tbReplace, SoundReplace); - BackgroundWorker bwSoundReplace = new BackgroundWorker(); - bwSoundReplace.DoWork += new DoWorkEventHandler(bwSoundReplace_DoWork); - bwSoundReplace.ProgressChanged += new ProgressChangedEventHandler(bwSoundReplace_ProgressChanged); - bwSoundReplace.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bwSoundReplace_RunWorkerCompleted); - bwSoundReplace.WorkerReportsProgress = true; - bwSoundReplace.RunWorkerAsync(ofd.FileName); - } - } - } - catch (Exception ex) - { - SoundReplace = string.Empty; - SetText(tbReplace, SoundReplace); - ErrorBox(ex.Message); - } - } - else if (cmbReplace.SelectedIndex == 1) //icon - { - try - { - OpenFileDialog ofd = new OpenFileDialog(); - ofd.Filter = "Wii Channels|*.wad|00000000.app|00000000.app|icon.bin|icon.bin|All|*.wad;00000000.app;icon.bin"; - ofd.FilterIndex = 4; - - if (ofd.ShowDialog() == DialogResult.OK) - { - if (ofd.FileName != tbSourceWad.Text) - { - IconReplace = ofd.FileName; - SetText(tbReplace, IconReplace); - BackgroundWorker bwIconReplace = new BackgroundWorker(); - bwIconReplace.DoWork += new DoWorkEventHandler(bwIconReplace_DoWork); - bwIconReplace.ProgressChanged += new ProgressChangedEventHandler(bwIconReplace_ProgressChanged); - bwIconReplace.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bwIconReplace_RunWorkerCompleted); - bwIconReplace.WorkerReportsProgress = true; - bwIconReplace.RunWorkerAsync(ofd.FileName); - } - } - } - catch (Exception ex) - { - IconReplace = string.Empty; - SetText(tbReplace, IconReplace); - ErrorBox(ex.Message); - } - } - else //banner - { - try - { - OpenFileDialog ofd = new OpenFileDialog(); - ofd.Filter = "Wii Channels|*.wad|00000000.app|00000000.app|banner.bin|banner.bin|All|*.wad;00000000.app;banner.bin"; - ofd.FilterIndex = 4; - - if (ofd.ShowDialog() == DialogResult.OK) - { - if (ofd.FileName != tbSourceWad.Text) - { - BannerReplace = ofd.FileName; - SetText(tbReplace, BannerReplace); - BackgroundWorker bwBannerReplace = new BackgroundWorker(); - bwBannerReplace.DoWork += new DoWorkEventHandler(bwBannerReplace_DoWork); - bwBannerReplace.ProgressChanged += new ProgressChangedEventHandler(bwBannerReplace_ProgressChanged); - bwBannerReplace.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bwBannerReplace_RunWorkerCompleted); - bwBannerReplace.WorkerReportsProgress = true; - bwBannerReplace.RunWorkerAsync(ofd.FileName); - } - } - } - catch (Exception ex) - { - BannerReplace = string.Empty; - SetText(tbReplace, BannerReplace); - ErrorBox(ex.Message); - } - } - } - } - } - - private void btnClearReplace_Click(object sender, EventArgs e) - { - if (cmbReplace.SelectedIndex == 2) //sound - { - SoundReplace = string.Empty; - SetText(tbReplace, SoundReplace); - if (File.Exists(TempSoundPath)) File.Delete(TempSoundPath); - SetText(tbSound, string.Empty); - } - else if (cmbReplace.SelectedIndex == 1) //icon - { - IconReplace = string.Empty; - SetText(tbReplace, IconReplace); - if (Directory.Exists(TempIconPath)) Directory.Delete(TempIconPath, true); - } - else //banner - { - BannerReplace = string.Empty; - SetText(tbReplace, BannerReplace); - if (Directory.Exists(TempBannerPath)) Directory.Delete(TempBannerPath, true); - } - } - - private void btnBrowseDol_Click(object sender, EventArgs e) - { - if (btnBrowseDol.Text == "Clear") - { - if (Directory.Exists(TempTempPath + "TempWad")) Directory.Delete(TempTempPath + "TempWad", true); - if (File.Exists(TempDolPath)) File.Delete(TempDolPath); - - SetText(tbDol, string.Empty); - btnBrowseDol.Text = "Browse..."; - - SimpleForwarder.Clear(); - ComplexForwarder.Clear(); - } - else - { - cmDol.Show(MousePosition); - } - } - - private void btnBrowseSound_Click(object sender, EventArgs e) - { - if (btnBrowseSound.Text == "Clear") - { - if (File.Exists(TempWavePath)) File.Delete(TempWavePath); - if (File.Exists(TempBnsPath)) File.Delete(TempBnsPath); - SetText(tbSound, string.Empty); - btnBrowseSound.Text = "Browse..."; - } - else - cmSound.Show(MousePosition); - } - - private void lbxBannerTpls_SelectedIndexChanged(object sender, EventArgs e) - { - if (lbxBannerTpls.SelectedIndex != -1) - { - try - { - cbBannerMakeTransparent.Enabled = true; - cbBannerMakeTransparent.Checked = lbxBannerTpls.SelectedItem.ToString().EndsWith("(Transparent)"); - - string TplFile = BannerTplPath + lbxBannerTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty); - int TplFormat = Wii.TPL.GetTextureFormat(TplFile); - - switch (TplFormat) - { - case 0: - cmbFormatBanner.SelectedIndex = 6; - break; - case 1: - cmbFormatBanner.SelectedIndex = 5; - break; - case 2: - cmbFormatBanner.SelectedIndex = 4; - break; - case 3: - cmbFormatBanner.SelectedIndex = 3; - break; - case 4: - cmbFormatBanner.SelectedIndex = 1; - break; - case 5: - cmbFormatBanner.SelectedIndex = 2; - break; - case 6: - cmbFormatBanner.SelectedIndex = 0; - break; - case 14: - cmbFormatBanner.SelectedIndex = 7; - break; - default: - cmbFormatBanner.SelectedIndex = -1; - break; - } - } - catch (Exception ex) - { - ErrorBox(ex.Message); - } - } - else - cbBannerMakeTransparent.Enabled = false; - } - - private void lbxIconTpls_SelectedIndexChanged(object sender, EventArgs e) - { - if (lbxIconTpls.SelectedIndex != -1) - { - try - { - cbIconMakeTransparent.Enabled = true; - cbIconMakeTransparent.Checked = lbxIconTpls.SelectedItem.ToString().EndsWith("(Transparent)"); - - string TplFile = IconTplPath + lbxIconTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty); - int TplFormat = Wii.TPL.GetTextureFormat(TplFile); - - switch (TplFormat) - { - case 0: - cmbFormatIcon.SelectedIndex = 6; - break; - case 1: - cmbFormatIcon.SelectedIndex = 5; - break; - case 2: - cmbFormatIcon.SelectedIndex = 4; - break; - case 3: - cmbFormatIcon.SelectedIndex = 3; - break; - case 4: - cmbFormatIcon.SelectedIndex = 1; - break; - case 5: - cmbFormatIcon.SelectedIndex = 2; - break; - case 6: - cmbFormatIcon.SelectedIndex = 0; - break; - case 14: - cmbFormatIcon.SelectedIndex = 7; - break; - default: - cmbFormatIcon.SelectedIndex = -1; - break; - } - } - catch (Exception ex) - { - ErrorBox(ex.Message); - } - } - else - cbIconMakeTransparent.Enabled = false; - } - - private void btnReplaceBanner_Click(object sender, EventArgs e) - { - if (lbxBannerTpls.SelectedIndex != -1) - { - int Format = cmbFormatBanner.SelectedIndex; - - if (Format == 0 || Format == 1 || Format == 2) - { - OpenFileDialog ofd = new OpenFileDialog(); - ofd.Filter = "PNG|*.png|JPG|*.jpg|GIF|*.gif|BMP|*.bmp|TPL|*.tpl|All|*.png;*.jpg;*.gif;*.bmp;*.tpl"; - ofd.FilterIndex = 6; - - if (ofd.ShowDialog() == DialogResult.OK) - { - try - { - string Tpl = BannerTplPath + lbxBannerTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty); - byte[] TplArray = Wii.Tools.LoadFileToByteArray(Tpl); - Image Img; - - if (!ofd.FileName.ToLower().EndsWith(".tpl")) Img = Image.FromFile(ofd.FileName); - else Img = Wii.TPL.ConvertFromTPL(ofd.FileName); - - int TplFormat; - int X = Wii.TPL.GetTextureWidth(TplArray); - int Y = Wii.TPL.GetTextureHeight(TplArray); - - if (X != Img.Width || - Y != Img.Height) - { - Img = ResizeImage(Img, X, Y); - } - - switch (Format) - { - case 1: - TplFormat = 4; - break; - case 2: - TplFormat = 5; - break; - default: - TplFormat = 6; - break; - } - - Wii.TPL.ConvertToTPL(Img, Tpl, TplFormat); - } - catch (Exception ex) - { - ErrorBox(ex.Message); - } - } - } - else - { - ErrorBox("This format is not supported, you must choose either RGBA8, RGB565 or RGB5A3!"); - } - } - } - - private void btnExtractBanner_Click(object sender, EventArgs e) - { - if (lbxBannerTpls.SelectedIndex != -1) - { - SaveFileDialog sfd = new SaveFileDialog(); - sfd.Filter = "PNG|*.png|JPG|*.jpg|GIF|*.gif|BMP|*.bmp|TPL|*.tpl|All|*.png;*.jpg;*.gif;*.bmp;*.tpl"; - sfd.FilterIndex = 6; - sfd.FileName = lbxBannerTpls.SelectedItem.ToString().Replace(".tpl", string.Empty); - - if (sfd.ShowDialog() == DialogResult.OK) - { - try - { - if (!sfd.FileName.ToLower().EndsWith(".tpl")) - { - string Tpl = BannerTplPath + lbxBannerTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty); - Image Img = Wii.TPL.ConvertFromTPL(Tpl); - - switch (sfd.FileName.Remove(0, sfd.FileName.LastIndexOf('.'))) - { - case ".jpg": - Img.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Jpeg); - break; - case ".gif": - Img.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Gif); - break; - case ".bmp": - Img.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Bmp); - break; - default: - Img.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Png); - break; - } - } - else - { - string Tpl = BannerTplPath + lbxBannerTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty); - File.Copy(Tpl, sfd.FileName, true); - } - } - catch (Exception ex) - { - ErrorBox(ex.Message); - } - } - } - } - - private void btnPreviewBanner_Click(object sender, EventArgs e) - { - if (lbxBannerTpls.SelectedIndex != -1) - { - try - { - string Tpl = BannerTplPath + lbxBannerTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty); - Image Img = Wii.TPL.ConvertFromTPL(Tpl); - - CustomizeMii_Preview pvw = new CustomizeMii_Preview(); - - if (Img.Width > 200) pvw.Width = Img.Width + 50; - else pvw.Width = 250; - if (Img.Height > 200) pvw.Height = Img.Height + 50; - else pvw.Height = 250; - - pvw.pbImage.Image = Img; - pvw.Text = string.Format("CustomizeMii - Preview ({0} x {1})", Img.Width, Img.Height); - - pvw.ShowDialog(); - } - catch (Exception ex) - { - ErrorBox(ex.Message); - } - - lbxBannerTpls.Focus(); - } - } - - private void btnReplaceIcon_Click(object sender, EventArgs e) - { - if (lbxIconTpls.SelectedIndex != -1) - { - int Format = cmbFormatIcon.SelectedIndex; - - if (Format == 0 || Format == 1 || Format == 2) - { - OpenFileDialog ofd = new OpenFileDialog(); - ofd.Filter = "PNG|*.png|JPG|*.jpg|GIF|*.gif|BMP|*.bmp|TPL|*.tpl|All|*.png;*.jpg;*.gif;*.bmp;*.tpl"; - ofd.FilterIndex = 6; - - if (ofd.ShowDialog() == DialogResult.OK) - { - try - { - string Tpl = IconTplPath + lbxIconTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty); - byte[] TplArray = Wii.Tools.LoadFileToByteArray(Tpl); - Image Img; - - if (!ofd.FileName.ToLower().EndsWith(".tpl")) Img = Image.FromFile(ofd.FileName); - else Img = Wii.TPL.ConvertFromTPL(ofd.FileName); - - int TplFormat; - int X = Wii.TPL.GetTextureWidth(TplArray); - int Y = Wii.TPL.GetTextureHeight(TplArray); - - if (X != Img.Width || - Y != Img.Height) - { - Img = ResizeImage(Img, X, Y); - } - - switch (Format) - { - case 1: - TplFormat = 4; - break; - case 2: - TplFormat = 5; - break; - default: - TplFormat = 6; - break; - } - - Wii.TPL.ConvertToTPL(Img, Tpl, TplFormat); - } - catch (Exception ex) - { - ErrorBox(ex.Message); - } - } - } - else - { - ErrorBox("This format is not supported, you must choose either RGBA8, RGB565 or RGB5A3!"); - } - } - } - - private void btnExtractIcon_Click(object sender, EventArgs e) - { - if (lbxIconTpls.SelectedIndex != -1) - { - SaveFileDialog sfd = new SaveFileDialog(); - sfd.Filter = "PNG|*.png|JPG|*.jpg|GIF|*.gif|BMP|*.bmp|TPL|*.tpl|All|*.png;*.jpg;*.gif;*.bmp;*.tpl"; - sfd.FilterIndex = 6; - sfd.FileName = lbxIconTpls.SelectedItem.ToString().Replace(".tpl", string.Empty); - - if (sfd.ShowDialog() == DialogResult.OK) - { - try - { - if (!sfd.FileName.ToLower().EndsWith(".tpl")) - { - string Tpl = IconTplPath + lbxIconTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty); - Image Img = Wii.TPL.ConvertFromTPL(Tpl); - - switch (sfd.FileName.Remove(0, sfd.FileName.LastIndexOf('.'))) - { - case ".jpg": - Img.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Jpeg); - break; - case ".gif": - Img.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Gif); - break; - case ".bmp": - Img.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Bmp); - break; - default: - Img.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Png); - break; - } - } - else - { - string Tpl = IconTplPath + lbxIconTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty); - File.Copy(Tpl, sfd.FileName, true); - } - } - catch (Exception ex) - { - ErrorBox(ex.Message); - } - } - } - } - - private void btnPreviewIcon_Click(object sender, EventArgs e) - { - if (lbxIconTpls.SelectedIndex != -1) - { - try - { - string Tpl = IconTplPath + lbxIconTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty); - Image Img = Wii.TPL.ConvertFromTPL(Tpl); - - CustomizeMii_Preview pvw = new CustomizeMii_Preview(); - - if (Img.Width > 200) pvw.Width = Img.Width + 50; - else pvw.Width = 250; - if (Img.Height > 200) pvw.Height = Img.Height + 50; - else pvw.Height = 250; - - pvw.pbImage.Image = Img; - pvw.Text = string.Format("CustomizeMii - Preview ({0} x {1})", Img.Width, Img.Height); - - pvw.ShowDialog(); - } - catch (Exception ex) - { - ErrorBox(ex.Message); - } - - lbxIconTpls.Focus(); - } - } - - private bool FailureCheck() - { - try - { - //Check Unpack Folder - if (CheckUnpackFolder() == false) - { - if (UnpackFolderErrorCount > 0) - { - ErrorBox("Something's wrong with the temporary files.\nYou may have to start again." + - "\n\nIf this message keeps bothering you, please report as much information " + - "as possible at the issue tracker: http://code.google.com/p/customizemii/issues/list"); - } - else - { - ErrorBox("Something's wrong with the temporary files.\nYou may have to start again."); - } - - UnpackFolderErrorCount++; - return false; - } - - //Check Channel Title Boxes - if (!(!string.IsNullOrEmpty(tbAllLanguages.Text) || - (!string.IsNullOrEmpty(tbEnglish.Text) && - !string.IsNullOrEmpty(tbJapanese.Text) && - !string.IsNullOrEmpty(tbGerman.Text) && - !string.IsNullOrEmpty(tbFrench.Text) && - !string.IsNullOrEmpty(tbSpanish.Text) && - !string.IsNullOrEmpty(tbItalian.Text) && - !string.IsNullOrEmpty(tbDutch.Text)))) - { - ErrorBox("You must either enter a general Channel Title or one for each language!"); - return false; - } - - //Check Title ID Length + Chars - if (tbTitleID.Text.Length != 4) - { - ErrorBox("The Title ID must be 4 characters long!"); return false; - } - - Regex allowedchars = new Regex("[A-Z0-9]{4}$"); - if (!allowedchars.IsMatch(tbTitleID.Text.ToUpper())) - { - ErrorBox("Please enter a valid Title ID!"); return false; - } - - //Check brlan files - string[] ValidBrlans = new string[] { "banner.brlan", "icon.brlan", "banner_loop.brlan", "icon_loop.brlan", "banner_start.brlan", "icon_start.brlan" }; - foreach (string thisBrlan in lbxBrlanBanner.Items) - { - if (!Wii.Tools.StringExistsInStringArray(thisBrlan.ToLower(), ValidBrlans)) - { - ErrorBox(thisBrlan + " is not a valid brlan filename!"); - return false; - } - } - foreach (string thisBrlan in lbxBrlanIcon.Items) - { - if (!Wii.Tools.StringExistsInStringArray(thisBrlan.ToLower(), ValidBrlans)) - { - ErrorBox(thisBrlan + " is not a valid brlan filename!"); - return false; - } - } - - //Check TPLs - List BannerTpls = new List(); - List IconTpls = new List(); - foreach (string thisTpl in lbxBannerTpls.Items) BannerTpls.Add(thisTpl.Replace(" (Transparent)", string.Empty)); - foreach (string thisTpl in lbxIconTpls.Items) IconTpls.Add(thisTpl.Replace(" (Transparent)", string.Empty)); - - string[] BannerBrlytPath; - string[] IconBrlytPath; - - if (string.IsNullOrEmpty(BannerReplace)) - BannerBrlytPath = Directory.GetFiles(TempUnpackBannerBrlytPath); - else - BannerBrlytPath = Directory.GetFiles(TempBannerPath + "arc\\blyt"); - if (string.IsNullOrEmpty(IconReplace)) - IconBrlytPath = Directory.GetFiles(TempUnpackIconBrlytPath); - else - IconBrlytPath = Directory.GetFiles(TempIconPath + "arc\\blyt"); - - string[] BannerMissing; - string[] BannerUnused; - string[] IconMissing; - string[] IconUnused; - - //Check for missing TPLs - if (Wii.Brlyt.CheckForMissingTpls(BannerBrlytPath[0], BannerTpls.ToArray(), out BannerMissing) == true) - { - ErrorBox("The following Banner TPLs are required by the banner.brlyt, but missing:\n\n" + string.Join("\n", BannerMissing)); - return false; - } - if (Wii.Brlyt.CheckForMissingTpls(IconBrlytPath[0], IconTpls.ToArray(), out IconMissing) == true) - { - ErrorBox("The following Icon TPLs are required by the icon.brlyt, but missing:\n\n" + string.Join("\n", IconMissing)); - return false; - } - - //Check Sound length - int soundLength = 0; - if (!string.IsNullOrEmpty(tbSound.Text) && string.IsNullOrEmpty(SoundReplace)) - { - if (!tbSound.Text.ToLower().EndsWith(".bns") && !tbSound.Text.StartsWith("BNS:")) - { - string SoundFile = tbSound.Text; - if (tbSound.Text.ToLower().EndsWith(".mp3")) SoundFile = TempWavePath; - - soundLength = Wii.Sound.GetWaveLength(SoundFile); - if (soundLength > SoundMaxLength) - { - ErrorBox(string.Format("Your Sound is longer than {0} seconds and thus not supported.\nIt is recommended to use a Sound shorter than {1} seconds, the maximum length is {0} seconds!", SoundMaxLength, SoundWarningLength)); - return false; - } - } - } - - /*Errors till here.. - From here only Warnings!*/ - - if (soundLength > SoundWarningLength) - { - if (MessageBox.Show(string.Format("Your Sound is longer than {0} seconds.\nIt is recommended to use Sounds that are shorter than {0} seconds!\nDo you still want to continue?", SoundWarningLength), "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No) - return false; - } - - //Check BNS sound length - if (tbSound.Text.StartsWith("BNS:") || tbSound.Text.EndsWith(".bns")) - { - string bnsFile = tbSound.Text; - if (tbSound.Text.StartsWith("BNS:")) bnsFile = TempBnsPath; - - int bnsLength = Wii.Sound.GetBnsLength(bnsFile); - if (bnsLength > BnsWarningLength) - { - if (MessageBox.Show(string.Format("Your BNS Sound is longer than {0} seconds.\nIt is recommended to use Sounds that are shorter than {0} seconds!\nDo you still want to continue?", BnsWarningLength), "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No) - return false; - } - } - - //Check if brlyt or brlan were changed - if (BrlytChanged == true && BrlanChanged == false) - { - if (MessageBox.Show("You have changed the brlyt, but didn't change the brlan.\nAre you sure this is correct?", "brlyt Changed", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) - return false; - } - else if (BrlanChanged == true && BrlytChanged == false) - { - if (MessageBox.Show("You have changed the brlan, but didn't change the brlyt.\nAre you sure this is correct?", "brlan Changed", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) - return false; - } - - //Check for unused TPLs (Do this at the end of the failure checks, because we don't want a - // MessageBox asking if unused TPLs should be deleted and after that any error) - if (Wii.Brlyt.CheckForUnusedTpls(BannerBrlytPath[0], BannerTpls.ToArray(), out BannerUnused) == true) - { - DialogResult dlgresult = MessageBox.Show( - "The following Banner TPLs are unused by the banner.brlyt:\n\n" + - string.Join("\n", BannerUnused) + - "\n\nDo you want them to be deleted before the WAD is being created? (Saves space!)", - "Delete unused TPLs?", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); - if (dlgresult == DialogResult.Yes) - { - foreach (string thisTpl in BannerUnused) - { - if (string.IsNullOrEmpty(BannerReplace)) - File.Delete(TempUnpackBannerTplPath + thisTpl); - else - File.Delete(TempBannerPath + "arc\\timg\\" + thisTpl); - } - } - else if (dlgresult == DialogResult.Cancel) return false; - } - if (Wii.Brlyt.CheckForUnusedTpls(IconBrlytPath[0], IconTpls.ToArray(), out IconUnused) == true) - { - DialogResult dlgresult = MessageBox.Show( - "The following Icon TPLs are unused by the icon.brlyt:\n\n" + - string.Join("\n", IconUnused) + - "\n\nDo you want them to be deleted before the WAD is being created? (Saves memory!)", - "Delete unused TPLs?", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); - if (dlgresult == DialogResult.Yes) - { - foreach (string thisTpl in IconUnused) - { - if (string.IsNullOrEmpty(IconReplace)) - File.Delete(TempUnpackIconTplPath + thisTpl); - else - File.Delete(TempIconPath + "arc\\timg\\" + thisTpl); - } - } - else if (dlgresult == DialogResult.Cancel) return false; - } - - return true; - } - catch (Exception ex) - { - ErrorBox(ex.Message); - return false; - } - } - - private bool CheckUnpackFolder() - { - try - { - //Check Unpack Root - string[] RootFiles = Directory.GetFiles(TempUnpackPath); - string[] RootDirs = Directory.GetDirectories(TempUnpackPath); - - foreach (string thisFile in RootFiles) - { - if (!thisFile.ToLower().EndsWith(".app") && - !thisFile.ToLower().EndsWith(".cert") && - !thisFile.ToLower().EndsWith(".tik") && - !thisFile.ToLower().EndsWith(".tmd")) - File.Delete(thisFile); - } - - if (RootDirs.Length > 1) - { - foreach (string thisDir in RootDirs) - { - if (!thisDir.EndsWith("00000000.app_OUT")) - Directory.Delete(thisDir, true); - } - } - - //Check 00000000.app_OUT - string[] MetaFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT"); - string[] MetaDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT"); - - foreach (string thisFile in MetaFiles) - File.Delete(thisFile); - foreach (string thisDir in MetaDirs) - if (!thisDir.ToLower().EndsWith("meta")) - Directory.Delete(thisDir, true); - - string[] AppFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta"); - string[] AppDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta"); - - foreach (string thisFile in AppFiles) - { - if (!thisFile.ToLower().EndsWith("banner.bin") && - !thisFile.ToLower().EndsWith("icon.bin") && - !thisFile.ToLower().EndsWith("sound.bin")) - File.Delete(thisFile); - } - - if (AppDirs.Length > 2) - { - foreach (string thisDir in AppDirs) - { - if (!thisDir.EndsWith("banner.bin_OUT") && - !thisDir.EndsWith("icon.bin_OUT")) - Directory.Delete(thisDir, true); - } - } - - //Check banner.bin_OUT / Banner Replace Path - if (string.IsNullOrEmpty(BannerReplace)) - { - string[] ArcFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT"); - string[] ArcDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT"); - - foreach (string thisFile in ArcFiles) - File.Delete(thisFile); - foreach (string thisDir in ArcDirs) - if (!thisDir.ToLower().EndsWith("arc")) - Directory.Delete(thisDir, true); - - string[] BannerFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT\\arc"); - string[] BannerDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT\\arc"); - - foreach (string thisFile in BannerFiles) - File.Delete(thisFile); - - if (BannerDirs.Length > 3) - { - foreach (string thisDir in BannerDirs) - { - if (!thisDir.ToLower().EndsWith("anim") && - !thisDir.ToLower().EndsWith("blyt") && - !thisDir.ToLower().EndsWith("timg")) - Directory.Delete(thisDir, true); - } - } - - string[] AnimFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT\\arc\\anim"); - string[] AnimDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT\\arc\\anim"); - - foreach (string thisFile in AnimFiles) - { - if (!thisFile.ToLower().EndsWith(".brlan")) - File.Delete(thisFile); - } - - foreach (string thisDir in AnimDirs) - Directory.Delete(thisDir, true); - - string[] BlytFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT\\arc\\blyt"); - string[] BlytDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT\\arc\\blyt"); - - foreach (string thisFile in BlytFiles) - { - if (!thisFile.ToLower().EndsWith(".brlyt")) - File.Delete(thisFile); - } - - foreach (string thisDir in BlytDirs) - Directory.Delete(thisDir, true); - - string[] TimgFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT\\arc\\timg"); - string[] TimgDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT\\arc\\timg"); - - foreach (string thisFile in TimgFiles) - { - if (!thisFile.ToLower().EndsWith(".tpl")) - File.Delete(thisFile); - } - - foreach (string thisDir in TimgDirs) - Directory.Delete(thisDir, true); - } - else - { - string[] ArcFiles = Directory.GetFiles(TempBannerPath); - string[] ArcDirs = Directory.GetDirectories(TempBannerPath); - - foreach (string thisFile in ArcFiles) - File.Delete(thisFile); - foreach (string thisDir in ArcDirs) - if (!thisDir.ToLower().EndsWith("arc")) - Directory.Delete(thisDir, true); - - string[] BannerFiles = Directory.GetFiles(TempBannerPath + "arc"); - string[] BannerDirs = Directory.GetDirectories(TempBannerPath + "arc"); - - foreach (string thisFile in BannerFiles) - File.Delete(thisFile); - - if (BannerDirs.Length > 3) - { - foreach (string thisDir in BannerDirs) - { - if (!thisDir.ToLower().EndsWith("anim") && - !thisDir.ToLower().EndsWith("blyt") && - !thisDir.ToLower().EndsWith("timg")) - Directory.Delete(thisDir, true); - } - } - - string[] AnimFiles = Directory.GetFiles(TempBannerPath + "arc\\anim"); - string[] AnimDirs = Directory.GetDirectories(TempBannerPath + "arc\\anim"); - - foreach (string thisFile in AnimFiles) - { - if (!thisFile.ToLower().EndsWith(".brlan")) - File.Delete(thisFile); - } - - foreach (string thisDir in AnimDirs) - Directory.Delete(thisDir, true); - - string[] BlytFiles = Directory.GetFiles(TempBannerPath + "arc\\blyt"); - string[] BlytDirs = Directory.GetDirectories(TempBannerPath + "arc\\blyt"); - - foreach (string thisFile in BlytFiles) - { - if (!thisFile.ToLower().EndsWith(".brlyt")) - File.Delete(thisFile); - } - - foreach (string thisDir in BlytDirs) - Directory.Delete(thisDir, true); - - string[] TimgFiles = Directory.GetFiles(TempBannerPath + "arc\\timg"); - string[] TimgDirs = Directory.GetDirectories(TempBannerPath + "arc\\timg"); - - foreach (string thisFile in TimgFiles) - { - if (!thisFile.ToLower().EndsWith(".tpl")) - File.Delete(thisFile); - } - - foreach (string thisDir in TimgDirs) - Directory.Delete(thisDir, true); - } - - //Check icon.bin_OUT / Icon Replace Path - if (string.IsNullOrEmpty(IconReplace)) - { - string[] ArcFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT"); - string[] ArcDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT"); - - foreach (string thisFile in ArcFiles) - File.Delete(thisFile); - foreach (string thisDir in ArcDirs) - if (!thisDir.ToLower().EndsWith("arc")) - Directory.Delete(thisDir, true); - - string[] IconFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT\\arc"); - string[] IconDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT\\arc"); - - foreach (string thisFile in IconFiles) - File.Delete(thisFile); - - if (IconDirs.Length > 3) - { - foreach (string thisDir in IconDirs) - { - if (!thisDir.ToLower().EndsWith("anim") && - !thisDir.ToLower().EndsWith("blyt") && - !thisDir.ToLower().EndsWith("timg")) - Directory.Delete(thisDir, true); - } - } - - string[] AnimFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT\\arc\\anim"); - string[] AnimDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT\\arc\\anim"); - - foreach (string thisFile in AnimFiles) - { - if (!thisFile.ToLower().EndsWith(".brlan")) - File.Delete(thisFile); - } - - foreach (string thisDir in AnimDirs) - Directory.Delete(thisDir, true); - - string[] BlytFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT\\arc\\blyt"); - string[] BlytDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT\\arc\\blyt"); - - foreach (string thisFile in BlytFiles) - { - if (!thisFile.ToLower().EndsWith(".brlyt")) - File.Delete(thisFile); - } - - foreach (string thisDir in BlytDirs) - Directory.Delete(thisDir, true); - - string[] TimgFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT\\arc\\timg"); - string[] TimgDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT\\arc\\timg"); - - foreach (string thisFile in TimgFiles) - { - if (!thisFile.ToLower().EndsWith(".tpl")) - File.Delete(thisFile); - } - - foreach (string thisDir in TimgDirs) - Directory.Delete(thisDir, true); - } - else - { - string[] ArcFiles = Directory.GetFiles(TempIconPath); - string[] ArcDirs = Directory.GetDirectories(TempIconPath); - - foreach (string thisFile in ArcFiles) - File.Delete(thisFile); - foreach (string thisDir in ArcDirs) - if (!thisDir.ToLower().EndsWith("arc")) - Directory.Delete(thisDir, true); - - string[] IconFiles = Directory.GetFiles(TempIconPath + "arc"); - string[] IconDirs = Directory.GetDirectories(TempIconPath + "arc"); - - foreach (string thisFile in IconFiles) - File.Delete(thisFile); - - if (IconDirs.Length > 3) - { - foreach (string thisDir in IconDirs) - { - if (!thisDir.ToLower().EndsWith("anim") && - !thisDir.ToLower().EndsWith("blyt") && - !thisDir.ToLower().EndsWith("timg")) - Directory.Delete(thisDir, true); - } - } - - string[] AnimFiles = Directory.GetFiles(TempIconPath + "arc\\anim"); - string[] AnimDirs = Directory.GetDirectories(TempIconPath + "arc\\anim"); - - foreach (string thisFile in AnimFiles) - { - if (!thisFile.ToLower().EndsWith(".brlan")) - File.Delete(thisFile); - } - - foreach (string thisDir in AnimDirs) - Directory.Delete(thisDir, true); - - string[] BlytFiles = Directory.GetFiles(TempIconPath + "arc\\blyt"); - string[] BlytDirs = Directory.GetDirectories(TempIconPath + "arc\\blyt"); - - foreach (string thisFile in BlytFiles) - { - if (!thisFile.ToLower().EndsWith(".brlyt")) - File.Delete(thisFile); - } - - foreach (string thisDir in BlytDirs) - Directory.Delete(thisDir, true); - - string[] TimgFiles = Directory.GetFiles(TempIconPath + "arc\\timg"); - string[] TimgDirs = Directory.GetDirectories(TempIconPath + "arc\\timg"); - - foreach (string thisFile in TimgFiles) - { - if (!thisFile.ToLower().EndsWith(".tpl")) - File.Delete(thisFile); - } - - foreach (string thisDir in TimgDirs) - Directory.Delete(thisDir, true); - } - - return true; - } - catch (Exception ex) { ErrorBox(ex.Message); return false; } - } - - private void btnCreateWad_Click(object sender, EventArgs e) - { - Point mousePos = MousePosition; - - if (mousePos.X < (this.Location.X + btnCreateWad.Location.X + Math.Ceiling(separatorBtn) + 3)) - { - if (pbProgress.Value == 100) - { - if (!string.IsNullOrEmpty(tbSourceWad.Text)) - { - if (cbFailureChecks.Checked == true || FailureCheck() == true) - { - try - { - WadCreationInfo wadInfo = new WadCreationInfo(); - wadInfo.outFile = TempPath + "SendToWii.wad"; - wadInfo.nandLoader = (WadCreationInfo.NandLoader)cmbNandLoader.SelectedIndex; - wadInfo.sendToWii = true; - - BackgroundWorker bwCreateWad = new BackgroundWorker(); - bwCreateWad.DoWork += new DoWorkEventHandler(bwCreateWad_DoWork); - bwCreateWad.ProgressChanged += new ProgressChangedEventHandler(bwCreateWad_ProgressChanged); - bwCreateWad.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bwCreateWad_RunWorkerCompleted); - bwCreateWad.WorkerReportsProgress = true; - bwCreateWad.RunWorkerAsync(wadInfo); - - // @WiiCrazy: The WAD will be saved to >> TempTempPath + "SendToWii.wad" << - // here. Now a loop that waits for the BackgroundWorker to finish and then opens - // a new window (wiiload - window or whatever) ?! - // If it finishes successfully, the variable >> sendWadReady << will turn into 1, - // if it errors, it will turn into -1, as long as it's running it is 0. - } - catch (Exception ex) - { - ErrorBox(ex.Message); - } - } - } - } - } - else - { - if (pbProgress.Value == 100) - { - if (!string.IsNullOrEmpty(tbSourceWad.Text)) - { - if (cbFailureChecks.Checked == true || FailureCheck() == true) - { - SaveFileDialog sfd = new SaveFileDialog(); - sfd.Filter = "Wii Channels|*.wad"; - - if (!string.IsNullOrEmpty(tbAllLanguages.Text)) - sfd.FileName = tbAllLanguages.Text + " - " + tbTitleID.Text.ToUpper() + ".wad"; - else - sfd.FileName = tbEnglish.Text + " - " + tbTitleID.Text.ToUpper() + ".wad"; - - if (sfd.ShowDialog() == DialogResult.OK) - { - try - { - CreationTimer.Reset(); - CreationTimer.Start(); - - WadCreationInfo wadInfo = new WadCreationInfo(); - wadInfo.outFile = sfd.FileName; - wadInfo.nandLoader = (WadCreationInfo.NandLoader)cmbNandLoader.SelectedIndex; - - BackgroundWorker bwCreateWad = new BackgroundWorker(); - bwCreateWad.DoWork += new DoWorkEventHandler(bwCreateWad_DoWork); - bwCreateWad.ProgressChanged += new ProgressChangedEventHandler(bwCreateWad_ProgressChanged); - bwCreateWad.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bwCreateWad_RunWorkerCompleted); - bwCreateWad.WorkerReportsProgress = true; - bwCreateWad.RunWorkerAsync(wadInfo); - } - catch (Exception ex) - { - CreationTimer.Stop(); - ErrorBox(ex.Message); - } - } - } - } - } - } - } - - private void lbxBrlytBanner_SelectedIndexChanged(object sender, EventArgs e) - { - if (lbxBrlytBanner.SelectedIndex != -1) - lbxBrlytIcon.SelectedIndex = -1; - - if (lbxBrlytIcon.SelectedIndex == -1) - lbBrlytActions.Text = "Banner"; - else - lbBrlytActions.Text = "Icon"; - } - - private void lbxBrlytIcon_SelectedIndexChanged(object sender, EventArgs e) - { - if (lbxBrlytIcon.SelectedIndex != -1) - lbxBrlytBanner.SelectedIndex = -1; - - if (lbxBrlytIcon.SelectedIndex == -1) - lbBrlytActions.Text = "Banner"; - else - lbBrlytActions.Text = "Icon"; - } - - private void lbxBrlanBanner_SelectedIndexChanged(object sender, EventArgs e) - { - if (lbxBrlanBanner.SelectedIndex != -1) - lbxBrlanIcon.SelectedIndex = -1; - - if (lbxBrlanIcon.SelectedIndex == -1) - lbBrlanActions.Text = "Banner"; - else - lbBrlanActions.Text = "Icon"; - } - - private void lbxBrlanIcon_SelectedIndexChanged(object sender, EventArgs e) - { - if (lbxBrlanIcon.SelectedIndex != -1) - lbxBrlanBanner.SelectedIndex = -1; - - if (lbxBrlanIcon.SelectedIndex == -1) - lbBrlanActions.Text = "Banner"; - else - lbBrlanActions.Text = "Icon"; - } - - private void btnBrlanAdd_Click(object sender, EventArgs e) - { - if (!string.IsNullOrEmpty(lbBrlanActions.Text)) - { - OpenFileDialog ofd = new OpenFileDialog(); - ofd.Filter = "brlan Files|*.brlan"; - - if (ofd.ShowDialog() == DialogResult.OK) - { - try - { - bool Exists = false; - - if (lbBrlanActions.Text == "Banner") - { - for (int i = 0; i < lbxBrlanBanner.Items.Count; i++) - if (lbxBrlanBanner.Items[i].ToString() == ofd.FileName.Remove(0, ofd.FileName.LastIndexOf('\\') + 1)) - Exists = true; - - if (Exists == true) - ErrorBox("This file already exists, use the Replace button!"); - else - { - if (string.IsNullOrEmpty(BannerReplace)) - File.Copy(ofd.FileName, TempUnpackBannerBrlanPath + ofd.FileName.Remove(0, ofd.FileName.LastIndexOf('\\') + 1), true); - else - File.Copy(ofd.FileName, BannerBrlanPath + ofd.FileName.Remove(0, ofd.FileName.LastIndexOf('\\') + 1), true); - lbxBrlanBanner.Items.Add(ofd.FileName.Remove(0, ofd.FileName.LastIndexOf('\\') + 1)); - BrlanChanged = true; - } - } - else - { - for (int i = 0; i < lbxBrlanIcon.Items.Count; i++) - if (lbxBrlanIcon.Items[i].ToString() == ofd.FileName.Remove(0, ofd.FileName.LastIndexOf('\\') + 1)) - Exists = true; - - if (Exists == true) - ErrorBox("This file already exists, use the Replace button!"); - else - { - if (string.IsNullOrEmpty(IconReplace)) - File.Copy(ofd.FileName, TempUnpackIconBrlanPath + ofd.FileName.Remove(0, ofd.FileName.LastIndexOf('\\') + 1), true); - else - File.Copy(ofd.FileName, IconBrlanPath + ofd.FileName.Remove(0, ofd.FileName.LastIndexOf('\\') + 1), true); - lbxBrlanIcon.Items.Add(ofd.FileName.Remove(0, ofd.FileName.LastIndexOf('\\') + 1)); - BrlanChanged = true; - } - } - } - catch (Exception ex) { ErrorBox(ex.Message); } - } - } - } - - private void btnBrlytExtract_Click(object sender, EventArgs e) - { - if (!string.IsNullOrEmpty(lbBrlytActions.Text)) - { - SaveFileDialog sfd = new SaveFileDialog(); - sfd.Filter = "brlyt Files|*.brlyt"; - - if (lbBrlytActions.Text == "Banner") - sfd.FileName = lbxBrlytBanner.SelectedItem.ToString(); - else - sfd.FileName = lbxBrlytIcon.SelectedItem.ToString(); - - if (sfd.ShowDialog() == DialogResult.OK) - { - try - { - string brlytFile; - - if (lbBrlytActions.Text == "Banner") - { - if (string.IsNullOrEmpty(BannerReplace)) - brlytFile = TempUnpackBannerBrlytPath + lbxBrlytBanner.SelectedItem.ToString(); - else - brlytFile = BannerBrlytPath + lbxBrlytBanner.Items.ToString(); - } - else - { - if (string.IsNullOrEmpty(IconReplace)) - brlytFile = TempUnpackIconBrlytPath + lbxBrlytIcon.SelectedItem.ToString(); - else - brlytFile = IconBrlytPath + lbxBrlytIcon.Items.ToString(); - } - - File.Copy(brlytFile, sfd.FileName, true); - } - catch (Exception ex) { ErrorBox(ex.Message); } - } - } - } - - private void btnBrlanExtract_Click(object sender, EventArgs e) - { - if (!string.IsNullOrEmpty(lbBrlanActions.Text)) - { - SaveFileDialog sfd = new SaveFileDialog(); - sfd.Filter = "brlan Files|*.brlan"; - - if (lbBrlanActions.Text == "Banner") - sfd.FileName = lbxBrlanBanner.SelectedItem.ToString(); - else - sfd.FileName = lbxBrlanIcon.SelectedItem.ToString(); - - if (sfd.ShowDialog() == DialogResult.OK) - { - try - { - string brlanFile; - - if (lbBrlanActions.Text == "Banner") - { - if (string.IsNullOrEmpty(BannerReplace)) - brlanFile = TempUnpackBannerBrlanPath + lbxBrlanBanner.SelectedItem.ToString(); - else - brlanFile = BannerBrlanPath + lbxBrlanBanner.Items.ToString(); - } - else - { - if (string.IsNullOrEmpty(IconReplace)) - brlanFile = TempUnpackIconBrlanPath + lbxBrlanIcon.SelectedItem.ToString(); - else - brlanFile = IconBrlanPath + lbxBrlanIcon.Items.ToString(); - } - - File.Copy(brlanFile, sfd.FileName, true); - } - catch (Exception ex) { ErrorBox(ex.Message); } - } - } - } - - private void btnBrlanDelete_Click(object sender, EventArgs e) - { - if (!string.IsNullOrEmpty(lbBrlanActions.Text)) - { - try - { - string brlanFile; - - if (lbBrlanActions.Text == "Banner") - { - if (lbxBrlanBanner.Items.Count > 1) - { - if (string.IsNullOrEmpty(BannerReplace)) - brlanFile = TempUnpackBannerBrlanPath + lbxBrlanBanner.SelectedItem.ToString(); - else - brlanFile = BannerBrlanPath + lbxBrlanBanner.SelectedItem.ToString(); - - lbxBrlanBanner.Items.Remove(lbxBrlanBanner.SelectedItem); - File.Delete(brlanFile); - BrlanChanged = true; - } - else - { - ErrorBox("You can't delete the last file.\nAdd a new one first in order to delete this one."); - } - } - else - { - if (lbxBrlanIcon.Items.Count > 1) - { - if (string.IsNullOrEmpty(IconReplace)) - brlanFile = TempUnpackIconBrlanPath + lbxBrlanIcon.SelectedItem.ToString(); - else - brlanFile = IconBrlanPath + lbxBrlanIcon.SelectedItem.ToString(); - - lbxBrlanIcon.Items.Remove(lbxBrlanIcon.SelectedItem); - File.Delete(brlanFile); - BrlanChanged = true; - } - else - { - ErrorBox("You can't delete the last file.\nAdd a new one first in order to delete this one."); - } - } - } - catch { } - } - } - - private void btnBrlytReplace_Click(object sender, EventArgs e) - { - if (!string.IsNullOrEmpty(lbBrlytActions.Text)) - { - OpenFileDialog ofd = new OpenFileDialog(); - ofd.Filter = "brlyt Files|*.brlyt"; - - if (ofd.ShowDialog() == DialogResult.OK) - { - try - { - if (lbBrlytActions.Text == "Banner") - { - if (string.IsNullOrEmpty(BannerReplace)) - { - File.Delete(TempUnpackBannerBrlytPath + lbxBrlytBanner.SelectedItem.ToString()); - File.Copy(ofd.FileName, TempUnpackBannerBrlytPath + lbxBrlytBanner.SelectedItem.ToString(), true); - BrlytChanged = true; - } - else - { - File.Delete(BannerBrlytPath + lbxBrlytBanner.SelectedItem.ToString()); - File.Copy(ofd.FileName, BannerBrlytPath + lbxBrlytBanner.SelectedItem.ToString(), true); - BrlytChanged = true; - } - } - else - { - if (string.IsNullOrEmpty(IconReplace)) - { - File.Delete(TempUnpackIconBrlytPath + lbxBrlytIcon.SelectedItem.ToString()); - File.Copy(ofd.FileName, TempUnpackIconBrlytPath + lbxBrlytIcon.SelectedItem.ToString(), true); - BrlytChanged = true; - } - else - { - File.Delete(IconBrlytPath + lbxBrlytIcon.SelectedItem.ToString()); - File.Copy(ofd.FileName, IconBrlytPath + lbxBrlytIcon.SelectedItem.ToString(), true); - BrlytChanged = true; - } - } - } - catch (Exception ex) { ErrorBox(ex.Message); } - } - } - } - - private void btnBrlanReplace_Click(object sender, EventArgs e) - { - if (!string.IsNullOrEmpty(lbBrlanActions.Text)) - { - OpenFileDialog ofd = new OpenFileDialog(); - ofd.Filter = "brlan Files|*.brlan"; - - if (ofd.ShowDialog() == DialogResult.OK) - { - try - { - if (lbBrlanActions.Text == "Banner") - { - if (string.IsNullOrEmpty(BannerReplace)) - { - File.Delete(TempUnpackBannerBrlanPath + lbxBrlanBanner.SelectedItem.ToString()); - File.Copy(ofd.FileName, TempUnpackBannerBrlanPath + lbxBrlanBanner.SelectedItem.ToString(), true); - BrlanChanged = true; - } - else - { - File.Delete(BannerBrlanPath + lbxBrlanBanner.SelectedItem.ToString()); - File.Copy(ofd.FileName, BannerBrlanPath + lbxBrlanBanner.SelectedItem.ToString(), true); - BrlanChanged = true; - } - } - else - { - if (string.IsNullOrEmpty(IconReplace)) - { - File.Delete(TempUnpackIconBrlanPath + lbxBrlanIcon.SelectedItem.ToString()); - File.Copy(ofd.FileName, TempUnpackIconBrlanPath + lbxBrlanIcon.SelectedItem.ToString(), true); - BrlanChanged = true; - } - else - { - File.Delete(IconBrlanPath + lbxBrlanIcon.SelectedItem.ToString()); - File.Copy(ofd.FileName, IconBrlanPath + lbxBrlanIcon.SelectedItem.ToString(), true); - BrlanChanged = true; - } - } - } - catch (Exception ex) { ErrorBox(ex.Message); } - } - } - } - - private void llbUpdateAvailabe_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - try - { - llbUpdateAvailabe.LinkVisited = true; - Process.Start("http://code.google.com/p/customizemii/downloads/list"); - } - catch (Exception ex) { ErrorBox(ex.Message); } - } - - private void btnDeleteBanner_Click(object sender, EventArgs e) - { - try - { - string TplName = lbxBannerTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty); - string CurBannerPath = GetCurBannerPath(); - string[] brlytTpls = Wii.Brlyt.GetBrlytTpls(CurBannerPath + "blyt\\banner.brlyt"); - - if (!Wii.Tools.StringExistsInStringArray(TplName, brlytTpls)) - { - File.Delete(CurBannerPath + "timg\\" + TplName); - lbxBannerTpls.Items.Remove(lbxBannerTpls.SelectedItem); - } - else - { - ErrorBox("This TPL is required by your banner.brlyt and thus can't be deleted!\nYou can still replace the image using the Replace button!"); - } - } - catch (Exception ex) { ErrorBox(ex.Message); } - } - - private void btnDeleteIcon_Click(object sender, EventArgs e) - { - try - { - string TplName = lbxIconTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty); - string CurIconPath = GetCurIconPath(); - - string[] brlytTpls = Wii.Brlyt.GetBrlytTpls(CurIconPath + "blyt\\icon.brlyt"); - - if (!Wii.Tools.StringExistsInStringArray(TplName, brlytTpls)) - { - File.Delete(CurIconPath + "timg\\" + TplName); - lbxIconTpls.Items.Remove(lbxIconTpls.SelectedItem); - } - else - { - ErrorBox("This TPL is required by your icon.brlyt and thus can't be deleted!\nYou can still replace the image using the Replace button!"); - } - } - catch (Exception ex) { ErrorBox(ex.Message); } - } - - private void btnAddBanner_Click(object sender, EventArgs e) - { - try - { - OpenFileDialog ofd = new OpenFileDialog(); - ofd.Filter = "TPL|*.tpl|PNG|*.png|JPG|*.jpg|GIF|*.gif|BMP|*.bmp|All|*.tpl;*.png;*.jpg;*.gif;*.bmp"; - ofd.FilterIndex = 6; - - if (ofd.ShowDialog() == DialogResult.OK) - { - for (int i = 0; i < lbxBannerTpls.Items.Count; i++) - { - if (lbxBannerTpls.Items[i].ToString().ToLower() == Path.GetFileNameWithoutExtension(ofd.FileName).ToLower() + ".tpl") - { - ErrorBox("This TPL already exists, use the Replace button"); - return; - } - } - - string CurBannerPath = GetCurBannerPath(); - string[] brlytTpls = Wii.Brlyt.GetBrlytTpls(CurBannerPath + "blyt\\banner.brlyt"); - string TplName = Path.GetFileNameWithoutExtension(ofd.FileName) + ".tpl"; - int TplFormat = 6; - - switch (cmbFormatBanner.SelectedIndex) - { - case 0: - TplFormat = 6; - break; - case 1: - TplFormat = 4; - break; - case 2: - TplFormat = 5; - break; - default: - if (!ofd.FileName.ToLower().EndsWith(".tpl")) - { - ErrorBox("This format is not supported, you must choose either RGBA8, RGB565 or RGB5A3!"); - return; - } - break; - } - - if (!Wii.Tools.StringExistsInStringArray(TplName, brlytTpls)) - { - if (MessageBox.Show("This TPL is not required by your banner.brlyt and thus only wastes memory!\nDo you still want to add it?", "TPL not required", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No) - return; - } - - if (ofd.FileName.ToLower().EndsWith(".tpl")) - { - File.Copy(ofd.FileName, CurBannerPath + "timg\\" + TplName, true); - lbxBannerTpls.Items.Add(TplName); - } - else - { - Image img = Image.FromFile(ofd.FileName); - Wii.TPL.ConvertToTPL(img, CurBannerPath + "timg\\" + TplName, TplFormat); - lbxBannerTpls.Items.Add(TplName); - } - } - } - catch (Exception ex) { ErrorBox(ex.Message); } - } - - private void btnAddIcon_Click(object sender, EventArgs e) - { - try - { - OpenFileDialog ofd = new OpenFileDialog(); - ofd.Filter = "TPL|*.tpl|PNG|*.png|JPG|*.jpg|GIF|*.gif|BMP|*.bmp|All|*.tpl;*.png;*.jpg;*.gif;*.bmp"; - ofd.FilterIndex = 6; - - if (ofd.ShowDialog() == DialogResult.OK) - { - for (int i = 0; i < lbxIconTpls.Items.Count; i++) - { - if (lbxIconTpls.Items[i].ToString().ToLower() == Path.GetFileNameWithoutExtension(ofd.FileName).ToLower() + ".tpl") - { - ErrorBox("This TPL already exists, use the Replace button"); - return; - } - } - - string CuriconPath = GetCurIconPath(); - string[] brlytTpls = Wii.Brlyt.GetBrlytTpls(CuriconPath + "blyt\\icon.brlyt"); - string TplName = Path.GetFileNameWithoutExtension(ofd.FileName) + ".tpl"; - int TplFormat = 6; - - switch (cmbFormatIcon.SelectedIndex) - { - case 0: - TplFormat = 6; - break; - case 1: - TplFormat = 4; - break; - case 2: - TplFormat = 5; - break; - default: - if (!ofd.FileName.ToLower().EndsWith(".tpl")) - { - ErrorBox("This format is not supported, you must choose either RGBA8, RGB565 or RGB5A3!"); - return; - } - break; - } - - if (!Wii.Tools.StringExistsInStringArray(TplName, brlytTpls)) - { - if (MessageBox.Show("This TPL is not required by your icon.brlyt and thus only wastes memory!\nDo you still want to add it?", "TPL not required", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No) - return; - } - - if (ofd.FileName.ToLower().EndsWith(".tpl")) - { - File.Copy(ofd.FileName, CuriconPath + "timg\\" + TplName, true); - lbxIconTpls.Items.Add(TplName); - } - else - { - Image img = Image.FromFile(ofd.FileName); - Wii.TPL.ConvertToTPL(img, CuriconPath + "timg\\" + TplName, TplFormat); - lbxIconTpls.Items.Add(TplName); - } - } - } - catch (Exception ex) { ErrorBox(ex.Message); } - } - - private void btnBrlytListTpls_Click(object sender, EventArgs e) - { - if (lbBrlytActions.Text == "Banner") - { - string CurBannerPath = GetCurBannerPath(); - string[] brlytTpls = Wii.Brlyt.GetBrlytTpls(CurBannerPath + "blyt\\banner.brlyt"); - - MessageBox.Show("These are the TPLs required by your banner.brlyt:\n\n" + - string.Join("\n", brlytTpls), "TPLs specified in banner.brlyt", MessageBoxButtons.OK, - MessageBoxIcon.Information); - } - else - { - string CurIconPath = GetCurIconPath(); - string[] brlytTpls = Wii.Brlyt.GetBrlytTpls(CurIconPath + "blyt\\icon.brlyt"); - - MessageBox.Show("These are the TPLs required by your icon.brlyt:\n\n" + - string.Join("\n", brlytTpls), "TPLs specified in icon.brlyt", MessageBoxButtons.OK, - MessageBoxIcon.Information); - } - } - - private void cbBannerMakeTransparent_CheckedChanged(object sender, EventArgs e) - { - if (lbxBannerTpls.SelectedIndex != -1) - { - if (cbBannerMakeTransparent.Checked == true) - { - try - { - if (!lbxBannerTpls.SelectedItem.ToString().EndsWith("(Transparent)")) - { - string thisItem = lbxBannerTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty); - lbxBannerTpls.Items.Remove(lbxBannerTpls.SelectedItem); - lbxBannerTpls.Items.Add(thisItem + " (Transparent)"); - lbxBannerTpls.SelectedItem = thisItem + " (Transparent)"; - BannerTransparents.Add(thisItem); - } - } - catch { } - } - else - { - try - { - string thisItem = lbxBannerTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty); - lbxBannerTpls.Items.Remove(lbxBannerTpls.SelectedItem); - lbxBannerTpls.Items.Add(thisItem.Replace(" (Transparent)", string.Empty)); - lbxBannerTpls.SelectedItem = thisItem.Replace(" (Transparent)", string.Empty); - BannerTransparents.Remove(thisItem.Replace(" (Transparent)", string.Empty)); - } - catch { } - } - - lbxBannerTpls.Focus(); - } - } - - private void cbIconMakeTransparent_CheckedChanged(object sender, EventArgs e) - { - if (lbxIconTpls.SelectedIndex != -1) - { - if (cbIconMakeTransparent.Checked == true) - { - try - { - if (!lbxIconTpls.SelectedItem.ToString().EndsWith("(Transparent)")) - { - string thisItem = lbxIconTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty); - lbxIconTpls.Items.Remove(lbxIconTpls.SelectedItem); - lbxIconTpls.Items.Add(thisItem + " (Transparent)"); - lbxIconTpls.SelectedItem = thisItem + " (Transparent)"; - IconTransparents.Add(thisItem); - } - } - catch { } - } - else - { - try - { - string thisItem = lbxIconTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty); - lbxIconTpls.Items.Remove(lbxIconTpls.SelectedItem); - lbxIconTpls.Items.Add(thisItem.Replace(" (Transparent)", string.Empty)); - lbxIconTpls.SelectedItem = thisItem.Replace(" (Transparent)", string.Empty); - IconTransparents.Remove(thisItem.Replace(" (Transparent)", string.Empty)); - } - catch { } - } - - lbxIconTpls.Focus(); - } - } - - private void btnForwarder_Click(object sender, EventArgs e) - { -#if Mono - ErrorBox("This feature doesn't work under Mono!"); -#endif - -#if !Mono - if (CheckForForwardMii() == true) - { - if (CheckDevKit() == false) - { - ForwarderDialogSimple(); - } - else - { - cmForwarder.Show(MousePosition); - } - } - else - { - if (MessageBox.Show("You don't have the ForwardMii.dll in your application folder.\nYou can download it on the project page, do you want the page to be opened?", "Plugin not availabe", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) - { - Process.Start("http://code.google.com/p/customizemii/downloads/list"); - } - } -#endif - } - - private void cmForwarderItem_Click(object sender, EventArgs e) - { - ToolStripMenuItem cmSender = sender as ToolStripMenuItem; - - if (cmSender == cmSimpleForwarder) - ForwarderDialogSimple(); - else - ForwarderDialogComplex(); - } - - private void btnOptionsExtract_Click(object sender, EventArgs e) - { - cmOptionsExtract.Show(MousePosition); - } - - private void cmOptionsExtract_MouseClick(object sender, EventArgs e) - { - ToolStripMenuItem cmSender = sender as ToolStripMenuItem; - - if (cmSender.OwnerItem == tsExtractImages) - { - try - { - FolderBrowserDialog fbd = new FolderBrowserDialog(); - - if (cmSender.Text.ToLower() == "both") { fbd.Description = "Select the path where the images will be extracted to. Two folders \"Banner\" and \"Icon\" will be created."; } - else { fbd.Description = "Select the path where the images will be extracted to."; } - - if (fbd.ShowDialog() == DialogResult.OK) - { - string bannerPath; - string iconPath; - - switch (cmSender.Text.ToLower()) - { - case "banner": - bannerPath = fbd.SelectedPath; - iconPath = string.Empty; - break; - case "icon": - bannerPath = string.Empty; - iconPath = fbd.SelectedPath; - break; - default: //both - bannerPath = fbd.SelectedPath + "\\Banner"; - iconPath = fbd.SelectedPath + "\\Icon"; - break; - } - - if (!string.IsNullOrEmpty(bannerPath)) - { - if (!Directory.Exists(bannerPath)) Directory.CreateDirectory(bannerPath); - string[] tplFiles = Directory.GetFiles(BannerTplPath, "*.tpl"); - Image img; - - foreach (string thisTpl in tplFiles) - { - img = Wii.TPL.ConvertFromTPL(thisTpl); - img.Save(bannerPath + "\\" + Path.GetFileNameWithoutExtension(thisTpl) + ".png", - System.Drawing.Imaging.ImageFormat.Png); - } - } - if (!string.IsNullOrEmpty(iconPath)) - { - if (!Directory.Exists(iconPath)) Directory.CreateDirectory(iconPath); - string[] tplFiles = Directory.GetFiles(IconTplPath, "*.tpl"); - Image img; - - foreach (string thisTpl in tplFiles) - { - img = Wii.TPL.ConvertFromTPL(thisTpl); - img.Save(iconPath + "\\" + Path.GetFileNameWithoutExtension(thisTpl) + ".png", - System.Drawing.Imaging.ImageFormat.Png); - } - } - - InfoBox("Extracted images successfully!"); - } - } - catch (Exception ex) { ErrorBox(ex.Message); } - } - else if (cmSender.OwnerItem == tsExtractSound) - { - try - { - SaveFileDialog sfd = new SaveFileDialog(); - if (cmSender.Name.ToLower() == "cmextractsoundasbin") { sfd.Filter = "BIN|*.bin"; sfd.FileName = "sound.bin"; } - else if (cmSender.Name.ToLower() == "cmextractsoundasaudio") - { - byte[] soundBin = Wii.Tools.LoadFileToByteArray(TempUnpackPath + "00000000.app_OUT\\meta\\sound.bin", 32, 16); - - if (soundBin[0] == 'R' && soundBin[1] == 'I' && soundBin[2] == 'F' && soundBin[3] == 'F') - { sfd.Filter = "Wave|*.wav"; sfd.FileName = "sound.wav"; } - else if (soundBin[0] == 'B' && soundBin[1] == 'N' && soundBin[2] == 'S' && soundBin[3] == ' ') - { sfd.Filter = "BNS|*.bns"; sfd.FileName = "sound.bns"; } - else if (soundBin[0] == 'F' && soundBin[1] == 'O' && soundBin[2] == 'R' && soundBin[3] == 'M') - { sfd.Filter = "AIFF|*.aif;*.aiff"; sfd.FileName = "sound.aif"; } - else if (soundBin[0] == 'L' && soundBin[1] == 'Z' && soundBin[2] == '7' && soundBin[3] == '7') - { - if (soundBin[9] == 'R' && soundBin[10] == 'I' && soundBin[11] == 'F' && soundBin[12] == 'F') - { sfd.Filter = "Wave|*.wav"; sfd.FileName = "sound.wav"; } - else if (soundBin[9] == 'B' && soundBin[10] == 'N' && soundBin[11] == 'S' && soundBin[12] == ' ') - { sfd.Filter = "BNS|*.bns"; sfd.FileName = "sound.bns"; } - else if (soundBin[9] == 'F' && soundBin[10] == 'O' && soundBin[11] == 'R' && soundBin[12] == 'M') - { sfd.Filter = "AIFF|*.aif;*.aiff"; sfd.FileName = "sound.aif"; } - else throw new Exception("Unsupported Audio Format!"); - } - else throw new Exception("Unsupported Audio Format!"); - - } - - if (sfd.ShowDialog() == DialogResult.OK) - { - if (sfd.FileName.ToLower().EndsWith(".bin")) - { - File.Copy(TempUnpackPath + "00000000.app_OUT\\meta\\sound.bin", sfd.FileName, true); - InfoBox("The sound.bin was successfully extraced!"); - } - else - { - Wii.Sound.SoundBinToAudio(TempUnpackPath + "00000000.app_OUT\\meta\\sound.bin", sfd.FileName); - InfoBox(string.Format("The sound.bin was successfully converted to {0}!", Path.GetFileName(sfd.FileName))); - } - } - } - catch (Exception ex) { ErrorBox(ex.Message); } - } - else //DOL - { - try - { - string[] tmdFile = Directory.GetFiles(TempUnpackPath, "*.tmd"); - byte[] tmd = Wii.Tools.LoadFileToByteArray(tmdFile[0]); - - int numContents = Wii.WadInfo.GetContentNum(tmd); - - if (numContents == 3) - { - int bootIndex = Wii.WadInfo.GetBootIndex(tmd); - string appFile = string.Empty; - - if (bootIndex == 1) - { appFile = "00000002.app"; } - else if (bootIndex == 2) - { appFile = "00000001.app"; } - - if (!string.IsNullOrEmpty(appFile)) - { - SaveFileDialog sfd = new SaveFileDialog(); - sfd.Filter = "Wii Executables|*.dol"; sfd.FileName = (string.IsNullOrEmpty(tbAllLanguages.Text) ? tbEnglish.Text : tbAllLanguages.Text) + ".dol"; - - if (sfd.ShowDialog() == DialogResult.OK) - { - File.Copy(TempUnpackPath + appFile, sfd.FileName, true); - InfoBox(string.Format("The DOL file was successfully extracted to {0}!", Path.GetFileName(sfd.FileName))); - } - } - else - ErrorBox("The DOL file couldn't be found!"); - } - else - ErrorBox("The DOL file couldn't be found!"); - } - catch (Exception ex) { ErrorBox(ex.Message); } - } - } - - private void cmLoadAudioFile_Click(object sender, EventArgs e) - { - if (pbProgress.Value == 100) - { - OpenFileDialog ofd = new OpenFileDialog(); - - if (File.Exists(Application.StartupPath + "\\lame.exe")) - { - ofd.Filter = "Wave Files|*.wav|Mp3 Files|*.mp3|BNS Files|*.bns|All|*.wav;*.mp3;*.bns"; - ofd.FilterIndex = 4; - } - else - { - ofd.Filter = "Wave Files|*.wav|BNS Files|*.bns|All|*.wav;*.bns"; - ofd.FilterIndex = 3; - } - - if (ofd.ShowDialog() == DialogResult.OK) - { - if (ofd.FileName.ToLower().EndsWith(".mp3")) - { - ConvertMp3ToWave(ofd.FileName); - } - else - { - SetText(tbSound, ofd.FileName); - - btnBrowseSound.Text = "Clear"; - - if (!string.IsNullOrEmpty(SoundReplace)) - { - SoundReplace = string.Empty; - if (cmbReplace.SelectedIndex == 2) SetText(tbReplace, SoundReplace); - if (File.Exists(TempSoundPath)) File.Delete(TempSoundPath); - } - } - } - } - } - - private void cmConvertToBns_Click(object sender, EventArgs e) - { - if (pbProgress.Value == 100) - { - CustomizeMii_BnsConvert bnsConvert = new CustomizeMii_BnsConvert(File.Exists(Application.StartupPath + "\\lame.exe")); - - if (bnsConvert.ShowDialog() == DialogResult.OK) - { - BnsConversionInfo bnsInfo = new BnsConversionInfo(); - - bnsInfo.AudioFile = bnsConvert.AudioFile; - bnsInfo.StereoToMono = false; - - if (bnsConvert.ChannelCount == 2) - { - if (MessageBox.Show("Do you want to convert the stereo Wave file to a mono BNS file?\nOnly the left channel will be taken.", - "Convert to Mono?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) - bnsInfo.StereoToMono = true; - } - - if (bnsConvert.LoopFromAudio) - { bnsInfo.Loop = BnsConversionInfo.LoopType.FromWave; } - else if (bnsConvert.LoopManually) - { bnsInfo.LoopStartSample = bnsConvert.LoopStartSample; bnsInfo.Loop = BnsConversionInfo.LoopType.Manual; } - else bnsInfo.Loop = BnsConversionInfo.LoopType.None; - - BackgroundWorker bwConvertToBns = new BackgroundWorker(); - bwConvertToBns.WorkerReportsProgress = true; - bwConvertToBns.DoWork += new DoWorkEventHandler(bwConvertToBns_DoWork); - bwConvertToBns.ProgressChanged += new ProgressChangedEventHandler(bwConvertToBns_ProgressChanged); - bwConvertToBns.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bwConvertToBns_RunWorkerCompleted); - - bwConvertToBns.RunWorkerAsync(bnsInfo); - } - } - } - - private void cmExtractWad_Click(object sender, EventArgs e) - { - FolderBrowserDialog fbd = new FolderBrowserDialog(); - string unpackDir = string.Format("{0} - {1}", Wii.WadInfo.GetChannelTitlesFromApp(TempUnpackPath + "00000000.app")[1], Wii.WadInfo.GetTitleID(Directory.GetFiles(TempUnpackPath, "*.tmd")[0], 1)); - fbd.Description = string.Format("Choose the path where the WAD will be extracted to. A folder called \"{0}\" containing the contents will be created!", unpackDir); - - if (fbd.ShowDialog() == DialogResult.OK) - { - unpackDir = fbd.SelectedPath + "\\" + unpackDir; - string[] files = Directory.GetFiles(TempUnpackPath); - if (!Directory.Exists(unpackDir)) Directory.CreateDirectory(unpackDir); - - foreach (string thisFile in files) - File.Copy(thisFile, unpackDir + "\\" + Path.GetFileName(thisFile), true); - - InfoBox("Successfully extracted WAD file!"); - } - } - - private void cmLoadDol_Click(object sender, EventArgs e) - { - OpenFileDialog ofd = new OpenFileDialog(); - ofd.Filter = "Wii Executables|*.dol|Wii Channels|*.wad|All|*.dol;*.wad"; - ofd.FilterIndex = 3; - - if (ofd.ShowDialog() == DialogResult.OK) - { - if (ofd.FileName.EndsWith(".wad")) - { - try - { - byte[] wad = Wii.Tools.LoadFileToByteArray(ofd.FileName); - - int numContents = Wii.WadInfo.GetContentNum(wad); - - if (numContents == 3) - { - int bootIndex = Wii.WadInfo.GetBootIndex(wad); - string appFile = string.Empty; - - if (bootIndex == 1) - { appFile = "00000002.app"; } - else if (bootIndex == 2) - { appFile = "00000001.app"; } - - if (!string.IsNullOrEmpty(appFile)) - { - if (Directory.Exists(TempTempPath + "TempWad")) Directory.Delete(TempTempPath + "TempWad", true); - Wii.WadUnpack.UnpackWad(ofd.FileName, TempTempPath + "TempWad"); - - File.Copy(TempTempPath + "TempWad\\" + appFile, TempDolPath, true); - SetText(tbDol, ofd.FileName); - btnBrowseDol.Text = "Clear"; - } - else - ErrorBox("The DOL file couldn't be found!"); - } - else - ErrorBox("The DOL file couldn't be found!"); - } - catch (Exception ex) - { - SetText(tbDol, string.Empty); - ErrorBox(ex.Message); - } - } - else - { - SetText(tbDol, ofd.FileName); - btnBrowseDol.Text = "Clear"; - } - } - } - - private void cmDolFromSource_Click(object sender, EventArgs e) - { - try - { - string[] tmdFile = Directory.GetFiles(TempUnpackPath, "*.tmd"); - byte[] tmd = Wii.Tools.LoadFileToByteArray(tmdFile[0]); - - int numContents = Wii.WadInfo.GetContentNum(tmd); - - if (numContents == 3) - { - int bootIndex = Wii.WadInfo.GetBootIndex(tmd); - string appFile = string.Empty; - - if (bootIndex == 1) - { appFile = "00000002.app"; } - else if (bootIndex == 2) - { appFile = "00000001.app"; } - - if (!string.IsNullOrEmpty(appFile)) - { - File.Copy(TempUnpackPath + appFile, TempDolPath, true); - SetText(tbDol, "Internal"); - btnBrowseDol.Text = "Clear"; - } - else - ErrorBox("The DOL file couldn't be found!"); - } - else - ErrorBox("The DOL file couldn't be found!"); - } - catch (Exception ex) - { - SetText(tbDol, string.Empty); - btnBrowseDol.Text = "Browse..."; - ErrorBox(ex.Message); - } - } - } -} diff --git a/CustomizeMii/CustomizeMii_Main.resx b/CustomizeMii/CustomizeMii_Main.resx deleted file mode 100644 index 0ca0828..0000000 --- a/CustomizeMii/CustomizeMii_Main.resx +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Thanks: -Xuzz for his idea and hard work -Xuzz, SquidMan, megazig, Matt_P, Omega and The Lemon Man for Wii.py -SquidMan for Zetsubou -Andre Perrot for gbalzss -comex and Waninkoko for both their NAND Loader -djdynamite123 for the forwarder base files (ForwardMii-Plugin) -The USB Loader GX Team for their forwarder source (ForwardMii-Plugin) - - - 16, 7 - - - 105, 7 - - - 228, 7 - - - 376, 7 - - - 479, 7 - - - 42 - - \ No newline at end of file diff --git a/CustomizeMii/CustomizeMii_Preview.Designer.cs b/CustomizeMii/CustomizeMii_Preview.Designer.cs deleted file mode 100644 index 3a53663..0000000 --- a/CustomizeMii/CustomizeMii_Preview.Designer.cs +++ /dev/null @@ -1,83 +0,0 @@ -/* This file is part of CustomizeMii - * Copyright (C) 2009 Leathl - * - * CustomizeMii is free software: you can redistribute it and/or - * modify it under the terms of the GNU General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CustomizeMii is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -namespace CustomizeMii -{ - partial class CustomizeMii_Preview - { - /// - /// Erforderliche Designervariable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Verwendete Ressourcen bereinigen. - /// - /// True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Vom Windows Form-Designer generierter Code - - /// - /// Erforderliche Methode für die Designerunterstützung. - /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. - /// - private void InitializeComponent() - { - this.pbImage = new System.Windows.Forms.PictureBox(); - ((System.ComponentModel.ISupportInitialize)(this.pbImage)).BeginInit(); - this.SuspendLayout(); - // - // pbImage - // - this.pbImage.Dock = System.Windows.Forms.DockStyle.Fill; - this.pbImage.Location = new System.Drawing.Point(0, 0); - this.pbImage.Name = "pbImage"; - this.pbImage.Size = new System.Drawing.Size(194, 176); - this.pbImage.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; - this.pbImage.TabIndex = 0; - this.pbImage.TabStop = false; - // - // CustomizeMii_Preview - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(194, 176); - this.Controls.Add(this.pbImage); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; - this.MinimumSize = new System.Drawing.Size(200, 200); - this.Name = "CustomizeMii_Preview"; - this.Text = "CustomizeMii - Preview"; - this.Load += new System.EventHandler(this.CustomizeMii_Preview_Load); - ((System.ComponentModel.ISupportInitialize)(this.pbImage)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - public System.Windows.Forms.PictureBox pbImage; - - } -} \ No newline at end of file diff --git a/CustomizeMii/CustomizeMii_Preview.cs b/CustomizeMii/CustomizeMii_Preview.cs deleted file mode 100644 index bd0a822..0000000 --- a/CustomizeMii/CustomizeMii_Preview.cs +++ /dev/null @@ -1,40 +0,0 @@ -/* This file is part of CustomizeMii - * Copyright (C) 2009 Leathl - * - * CustomizeMii is free software: you can redistribute it and/or - * modify it under the terms of the GNU General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CustomizeMii is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Text; -using System.Windows.Forms; - -namespace CustomizeMii -{ - public partial class CustomizeMii_Preview : Form - { - public CustomizeMii_Preview() - { - InitializeComponent(); - } - - private void CustomizeMii_Preview_Load(object sender, EventArgs e) - { - this.CenterToParent(); - } - } -} diff --git a/CustomizeMii/CustomizeMii_Preview.resx b/CustomizeMii/CustomizeMii_Preview.resx deleted file mode 100644 index ff31a6d..0000000 --- a/CustomizeMii/CustomizeMii_Preview.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/CustomizeMii/CustomizeMii_Structs.cs b/CustomizeMii/CustomizeMii_Structs.cs deleted file mode 100644 index d4775e7..0000000 --- a/CustomizeMii/CustomizeMii_Structs.cs +++ /dev/null @@ -1,53 +0,0 @@ -/* This file is part of CustomizeMii - * Copyright (C) 2009 Leathl - * - * CustomizeMii is free software: you can redistribute it and/or - * modify it under the terms of the GNU General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CustomizeMii is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - - namespace CustomizeMii -{ - public struct BnsConversionInfo - { - public enum LoopType - { - None, - FromWave, - Manual - } - - public LoopType Loop; - public int LoopStartSample; - public string AudioFile; - public bool StereoToMono; - } - - public struct WadCreationInfo - { - public enum NandLoader : int - { - comex = 0, - Waninkoko = 1 - } - - public string outFile; - public NandLoader nandLoader; - public bool sendToWii; - } - - public struct Progress - { - public int progressValue; - public string progressState; - } -} diff --git a/CustomizeMii/Instructions.txt b/CustomizeMii/Instructions.txt deleted file mode 100644 index 9f4ca00..0000000 --- a/CustomizeMii/Instructions.txt +++ /dev/null @@ -1,134 +0,0 @@ -These are some basic instructions for CustomizeMii. - -At the very beginning, let me say this again: Don't install any WADs without a proper brick protection! - -Ok, so you want to create your own custom channels? -First it is important to understand how the creation of a custom channel with CustomizeMii works. -Skip this if you already know. - -Basically, you can't create a channel from scratch. Well, you could, but not with this application. -You need a base WAD which you can modify. You can either download one within this application or use -any WAD (must be a channel of course) from anywhere. -You can then edit the WAD file. -The editing of animations is for advanced users, so if you're not familiar with brlyt's and brlan's -(I guess you're not unless you created your own animations), get a static base WAD or one with the -animation you want. - -So, let's start to create a channel. Download a base WAD through the application or load one from your HDD. -You can preview the downloadable WADs through the preview button. -All options below are optional! - - - -MIXING BANNER, ICON AND SOUND - -The options below the downloadable base WADs are the "replace" options. -Let's say you have loaded WAD A as a base, but you want the icon of WAD B and you have a 00000000.app that -contains a sound that you want to use. -No problem! Just use the dropdownbox which yet says "Banner" and choose "Icon". Click on the browse button -next to it and choose WAD B. The icon of WAD B will replace the icon of WAD A. -After that, choose "Sound" from the dropdownbox and browse for the 00000000.app, the sound.bin will be -extracted and used instead of the one within WAD A. - -Note: These features are non-destructive, i.e. you can always use the clear button to get back to the -banner/icon/sound of WAD A! - - - -CHANNEL INFORMATION - -You may want to change the channel information, i.e. the title and ID. -Let's change the channel title first. It's the text that will be displayed when you hold your cursor -over the channel. Goto the "Title" tab and fill a title for all languages. If you want to change the -title for a specific language, just use the language's textbox. If you want a different title for every -language, you don't need to fill in a title for all languages. -Now, the title ID. Open the "Options" tab and you'll see a textbox for the ID. The ID is 4 characters long -and only contains letters and numerics. Lower case letters will automatically converted to upper case. -Change it to a unique(!) ID, because channels will overwrite existing channles with the same ID! - -I recommend not to use any title ID beginning with the following characters, because official channels -use these and thus your channel may overwrite them: -C, E, F, H, J, L, M, N, P, Q, W - - - -INSERTING A NEW DOL - -Let's bring some life into the channel. In the "Options" tab, use the browse button for a new DOL. -Either load a forwarder, the DOL of any application or a WAD to use it's DOL. Note that some applications -require more than just a DOL and thus may not work in a channel (e.g. MPlayer CE). -Choose a NAND loader or just stick with the one selected (both will do fine). - -You can also use the built-in forwarder creation by using the forwarder button right below the browse button -for DOLs. -You need the ForwardMii.dll in order to use the forwarder creation. - - - -INSERTING A NEW SOUND - -For the sound, you can either use a wave or mp3 (needs lame.exe) file or the sound replace function to use -the sound of an existing sound.bin/00000000.app/WAD. -If you want looped sound, open your wave file with wavosaur and add loop points before. - -To save space, you can convert your wav or mp3 files to BNS. You can take the loop from a prelooped wave file -or enter the loop start point manually. Wave files must be 16bit PCM. -It is possible to directly convert stereo Wave files to mono BNS files, note that only the left channel of -the Wave will be taken. - - - -EDITING THE BANNER/ICON (If you're an advanced user and want to edit the brlyt/brlan, do that first!) - -So, let's begin with the real customization. I will only talk about the banner here, the instructions -are the same for the icon. -Goto the "Banner" tab. You shouldn't touch the add and remove buttons, they're for advanced users that -change the animation. (However, they can't really harm your channel, as CustomizeMii will check for missing -and unneeded TPLs while creating a WAD). -You will see a list with all TPLs inside the banner.bin. When you select a TPL, -it's current format will be shown in the "Format" dropdownbox. Note that CustomizeMii can read 8 different -TPL formats, but only write 3 (RGBA8, RGB565 and RGB5A3), that should be enough for your needs. -You can use the preview button to preview a TPL (obvious, right?), but you get one more important info, -the image size. It will be shown in the title of the preview window. If your images aren't the same size, -they will be resized! So be sure to have at least the correct aspect ratio, so your images wont be -squeezed or whatever. -Before replacing the image, choose a format from the dropdownbox. -(RGBA8 = High Quality, Big Size --- RGB565 = Moderate Quality, Small Size --- RGB5A3 = Bad Quality, Small Size) -Now you can use the replace button to insert your image. Preview the TPL after replacing to check the -image. Maybe you want to use another format though? No problem, just replace the TPL again. - -Note: You can use the "Make Transparent" checkbox to make a TPL transparent, e.g. if you don't like -one piece of an animation (It's non-destructive, i.e. you can always uncheck the box). - - - -EDITING THE ANIMATION (Advanced users only!) - -Skip this part, if you don't really know what brlyt and brlan files are and how they're structured. -Goto the "Layout" tab. You will see the banner.brlyt and icon.brlyt there. -Above the buttons is a text that will indicate whether you're doing actions on the "Banner" or -the "Icon" (When you select the banner.brlyt, you're editing the "Banner" and vice versa). -Now, just replace the banner.brlyt and icon.brlyt files as you want. You can use the list TPLs button -afterwards to see all TPLs that are required by the banner.brlyt/icon.brlyt (Don't worry, CustomizeMii -won't let you create a WAD, if you forgot a required TPL). -Now, goto the "Animation" tab. It's similar to the "Layout" tab. You shouldn't touch the add or delete button -unless your base WAD only has a banner.brlan and you want to use a banner_Start.brlan and banner_Loop.brlan. -In this case, first add the two files and then delete the old banner.brlan. -Else just replace the files with yours. Be absolutely sure the your brlan files only refer to panes that are -indicated in your brlyt files! -That's it, here's nothing left to do. - - - -CREATING THE WAD - -Well, your channel should be ready to be created. -Goto the "Options" tab and check the Lz77 checkbox, if you want to compress your channel to safe some Wii memory. -If your channel doesn't work, first try it again without compression. -Now just click on the create WAD button (The big one with the different text each startup). -CustomizeMii will do some failure checks and if all went fine, a save dialog will pop up. -If you get an error or warning, read the message carefully. It should give you enough information to fix -the problem yourself. - -So, if you got down to here, you're done by now. Please, if you find any bugs or have suggestions, take some -seconds to report them at the issue tracker: http://code.google.com/p/customizemii/issues/list \ No newline at end of file diff --git a/CustomizeMii/License.txt b/CustomizeMii/License.txt deleted file mode 100644 index 94a9ed0..0000000 --- a/CustomizeMii/License.txt +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/CustomizeMii/Program.cs b/CustomizeMii/Program.cs deleted file mode 100644 index 8848c92..0000000 --- a/CustomizeMii/Program.cs +++ /dev/null @@ -1,36 +0,0 @@ -/* This file is part of CustomizeMii - * Copyright (C) 2009 Leathl - * - * CustomizeMii is free software: you can redistribute it and/or - * modify it under the terms of the GNU General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CustomizeMii is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -using System; -using System.Windows.Forms; - -namespace CustomizeMii -{ - static class Program - { - /// - /// Der Haupteinstiegspunkt für die Anwendung. - /// - [STAThread] - static void Main() - { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - Application.Run(new CustomizeMii_Main()); - } - } -} diff --git a/CustomizeMii/Properties/AssemblyInfo.cs b/CustomizeMii/Properties/AssemblyInfo.cs deleted file mode 100644 index 06a9bdb..0000000 --- a/CustomizeMii/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,55 +0,0 @@ -/* This file is part of CustomizeMii - * Copyright (C) 2009 Leathl - * - * CustomizeMii is free software: you can redistribute it and/or - * modify it under the terms of the GNU General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CustomizeMii is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using System.Resources; - -// Allgemeine Informationen über eine Assembly werden über die folgenden -// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, -// die mit einer Assembly verknüpft sind. -[assembly: AssemblyTitle("CustomizeMii")] -[assembly: AssemblyDescription("CustomizeMii is a custom channel creator for the Wii")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("CustomizeMii")] -[assembly: AssemblyCopyright("Copyright © Leathl 2009")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar -// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von -// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest. -[assembly: ComVisible(false)] - -// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird -[assembly: Guid("b8292272-5915-44f7-a7b1-a347bea3ecd5")] - -// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: -// -// Hauptversion -// Nebenversion -// Buildnummer -// Revision -// -// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern -// übernehmen, indem Sie "*" eingeben: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.1.0.0")] -[assembly: AssemblyFileVersion("2.1.0.0")] -[assembly: NeutralResourcesLanguageAttribute("en")] diff --git a/CustomizeMii/Properties/Resources.Designer.cs b/CustomizeMii/Properties/Resources.Designer.cs deleted file mode 100644 index 313627d..0000000 --- a/CustomizeMii/Properties/Resources.Designer.cs +++ /dev/null @@ -1,93 +0,0 @@ -//------------------------------------------------------------------------------ -// -// Dieser Code wurde von einem Tool generiert. -// Laufzeitversion:2.0.50727.4927 -// -// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn -// der Code erneut generiert wird. -// -//------------------------------------------------------------------------------ - -namespace CustomizeMii.Properties { - using System; - - - /// - /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. - /// - // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert - // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert. - // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen - // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CustomizeMii.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle - /// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - internal static System.Drawing.Bitmap btnCreateWad { - get { - object obj = ResourceManager.GetObject("btnCreateWad", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - internal static System.Drawing.Icon CustomizeMii { - get { - object obj = ResourceManager.GetObject("CustomizeMii", resourceCulture); - return ((System.Drawing.Icon)(obj)); - } - } - - /// - /// Sucht eine lokalisierte Zeichenfolge, die {\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fnil\fcharset0 MS Sans Serif;}} - ///{\colortbl ;\red255\green0\blue0;\red0\green0\blue255;} - ///{\*\generator Msftedit 5.41.21.2509;}\viewkind4\uc1\pard\sl276\slmult1\b\f0\fs17 These are some basic instructions for CustomizeMii.\b0\par - ///\par - ///\cf1 At the very beginning, let me say this again: Don't install any WADs without a proper brick protection!\cf0\par - ///\par - ///Ok, so you want to create your own custom channels?\par - ///First it is important to understand how [Rest der Zeichenfolge wurde abgeschnitten]"; ähnelt. - /// - internal static string Instructions { - get { - return ResourceManager.GetString("Instructions", resourceCulture); - } - } - } -} diff --git a/CustomizeMii/Properties/Resources.resx b/CustomizeMii/Properties/Resources.resx deleted file mode 100644 index 7f2b7d7..0000000 --- a/CustomizeMii/Properties/Resources.resx +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\Resources\btnCreateWad.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\CustomizeMii.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\resources\instructions.rtf;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 - - \ No newline at end of file diff --git a/CustomizeMii/Properties/Settings.Designer.cs b/CustomizeMii/Properties/Settings.Designer.cs deleted file mode 100644 index c26659c..0000000 --- a/CustomizeMii/Properties/Settings.Designer.cs +++ /dev/null @@ -1,47 +0,0 @@ -/* This file is part of CustomizeMii - * Copyright (C) 2009 Leathl - * - * CustomizeMii is free software: you can redistribute it and/or - * modify it under the terms of the GNU General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CustomizeMii is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:2.0.50727.4927 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace CustomizeMii.Properties -{ - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase - { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default - { - get - { - return defaultInstance; - } - } - } -} diff --git a/CustomizeMii/Properties/Settings.settings b/CustomizeMii/Properties/Settings.settings deleted file mode 100644 index abf36c5..0000000 --- a/CustomizeMii/Properties/Settings.settings +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/CustomizeMii/Readme.txt b/CustomizeMii/Readme.txt deleted file mode 100644 index f0e14aa..0000000 --- a/CustomizeMii/Readme.txt +++ /dev/null @@ -1,90 +0,0 @@ -CustomizeMii is a custom channel creator for the Wii. -The .NET Framework 2.0 is required to run this application! - -For any further information, see: http://customizemii.googlecode.com -Please use the Issue Tracker there to report any occuring bugs. - -Thanks to icefire / Xuzz for the basic idea of this Application! - ------------------------------------------------------------------------------------------ -Changelog: - -Version 2.1 - - - -Version 2.0 - - Added BNS conversion (Mono and Stereo, with and without loop) - - Fixed MP3 conversion (some files didn't convert) - - Lz77 checkbox is now ticked by default - - Removed Lz77 compression of sound.bin as most sounds will get bigger - - Added ability to insert DOLs from any channel WAD - - Added ability to re-add the interal DOL (To switch the NAND Loader) - - Added ability to extract the contents, DOL, sound and all images - - Added displaying of approx. blocks to the success-message - - Deleted some functions of the complex forwarder as they weren't working properly - - Some bugfixes and improvements - -Version 1.2 - - Fixed writing/reading of channel titles, so japanese characters will work now - - Added checkbox (Options tab) to turn security checks off - - Added built-in forwarder creator (Needs the ForwardMii.dll which is separately avaiable) - - You can choose MP3 files as channel sound (Needs lame.exe in application directory) - - Bugfixes - -Version 1.1 - - Note: License upgraded to GNU GPL v3! - - Sound is working now - - Added brlan and brlyt tabs (for advanced users) - - Added displaying of image width and height in preview window - - Added "Make Transparent" checkbox for TPLs - - Fixed IA8 previewing / extracting - - Improved bricksafety (hopefully!) - - Added Tooltips - - Added update check at startup - - Wrote basic instructions (see Instructions.txt or help tab) - -Version 1.0 - - Initial Release ------------------------------------------------------------------------------------------ - ------------------------------------------------------------------------------------------ -Disclaimer: - -Editing WAD files can result in a brick of your Wii. -Only use this application if you have a bricksafe Wii, meaning either Preloader or -BootMii/boot2 is installed, and if you know what you're doing. - -This application comes without any express or implied warranty. -The author can't be held responsible for any damages arising from the use of it. ------------------------------------------------------------------------------------------ - ------------------------------------------------------------------------------------------ -Thanks: - -Xuzz for his idea and hard work -Xuzz, SquidMan, megazig, Matt_P, Omega and The Lemon Man for Wii.py -SquidMan for Zetsubou -Andre Perrot for gbalzss -comex and Waninkoko for both their NAND Loader -djdynamite123 for the forwarder base files (ForwardMii-Plugin) -The USB Loader GX Team for their forwarder source (ForwardMii-Plugin) ------------------------------------------------------------------------------------------ - ------------------------------------------------------------------------------------------ -License: - -Copyright (C) 2009 Leathl - -CustomizeMii is free software: you can redistribute it and/or -modify it under the terms of the GNU General Public License as published -by the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -CustomizeMii is distributed in the hope that it will be -useful, but WITHOUT ANY WARRANTY; without even the implied warranty -of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . ------------------------------------------------------------------------------------------ \ No newline at end of file diff --git a/CustomizeMii/Resources/CustomizeMii.ico b/CustomizeMii/Resources/CustomizeMii.ico deleted file mode 100644 index 43fef89..0000000 Binary files a/CustomizeMii/Resources/CustomizeMii.ico and /dev/null differ diff --git a/CustomizeMii/Resources/Instructions.rtf b/CustomizeMii/Resources/Instructions.rtf deleted file mode 100644 index 687e0e2..0000000 --- a/CustomizeMii/Resources/Instructions.rtf +++ /dev/null @@ -1,138 +0,0 @@ -{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fnil\fcharset0 MS Sans Serif;}} -{\colortbl ;\red255\green0\blue0;\red0\green0\blue255;} -{\*\generator Msftedit 5.41.21.2509;}\viewkind4\uc1\pard\sl276\slmult1\b\f0\fs17 These are some basic instructions for CustomizeMii.\b0\par -\par -\cf1 At the very beginning, let me say this again: Don't install any WADs without a proper brick protection!\cf0\par -\par -Ok, so you want to create your own custom channels?\par -First it is important to understand how the creation of a custom channel with CustomizeMii works.\par -Skip this if you already know.\par -\par -Basically, you can't create a channel from scratch. Well, you could, but not with this application.\par -You need a base WAD which you can modify. You can either download one within this application or use\par -any WAD (must be a channel of course) from anywhere.\par -You can then edit the WAD file.\par -The editing of animations is for advanced users, so if you're not familiar with brlyt's and brlan's\par -(I guess you're not unless you created your own animations), get a static base WAD or one with the\par -animation you want.\par -\par -So, let's start to create a channel. Download a base WAD through the application or load one from your HDD.\par -You can preview the downloadable WADs through the preview button.\par -All options below are optional!\par -\par -\par -\par -\b MIXING BANNER, ICON AND SOUND\b0\par -\par -The options below the downloadable base WADs are the "replace" options.\par -Let's say you have loaded WAD A as a base, but you want the icon of WAD B and you have a 00000000.app that\par -contains a sound that you want to use.\par -No problem! Just use the dropdownbox which yet says "Banner" and choose "Icon". Click on the browse button\par -next to it and choose WAD B. The icon of WAD B will replace the icon of WAD A.\par -After that, choose "Sound" from the dropdownbox and browse for the 00000000.app, the sound.bin will be\par -extracted and used instead of the one within WAD A.\par -\par -Note: These features are non-destructive, i.e. you can always use the clear button to get back to the\par -banner/icon/sound of WAD A!\par -\par -\par -\par -\b CHANNEL INFORMATION\b0\par -\par -You may want to change the channel information, i.e. the title and ID.\par -Let's change the channel title first. It's the text that will be displayed when you hold your cursor\par -over the channel. Goto the "Title" tab and fill a title for all languages. If you want to change the\par -title for a specific language, just use the language's textbox. If you want a different title for every\par -language, you don't need to fill in a title for all languages.\par -Now, the title ID. Open the "Options" tab and you'll see a textbox for the ID. The ID is 4 characters long\par -and only contains letters and numerics. Lower case letters will automatically converted to upper case.\par -Change it to a unique(!) ID, because channels will overwrite existing channles with the same ID!\par -\par -I recommend not to use any title ID beginning with the following characters, because official channels\par -use these and thus your channel may overwrite them:\par -C, E, F, H, J, L, M, N, P, Q, W\par -\par -\par -\par -\b INSERTING A NEW DOL\b0\par -\par -Let's bring some life into the channel. In the "Options" tab, use the browse button for a new DOL.\par -Either load a forwarder, the DOL of any application or a WAD to use it's DOL. Note that some applications\par -require more than just a DOL and thus may not work in a channel (e.g. MPlayer CE).\par -Choose a NAND loader or just stick with the one selected (both will do fine).\par -\par -You can also use the built-in forwarder creation by using the forwarder button right below the browse button\par -for DOLs.\par -You need the ForwardMii.dll in order to use the forwarder creation.\par -\par -\par -\par -\b INSERTING A NEW SOUND\b0\par -\par -For the sound, you can either use a wave or mp3 (needs lame.exe) file or the sound replace function to use\par -the sound of an existing sound.bin/00000000.app/WAD.\par -If you want looped sound, open your wave file with wavosaur and add loop points before.\par -\par -To save space, you can convert your wav or mp3 files to BNS. You can take the loop from a prelooped wave file\par -or enter the loop start point manually. Wave files must be 16bit PCM.\par -It is possible to directly convert stereo Wave files to mono BNS files, note that only the left channel of\par -the Wave will be taken.\par -\par -\par -\par -\b EDITING THE BANNER/ICON (If you're an advanced user and want to edit the brlyt/brlan, do that first!)\b0\par -\par -So, let's begin with the real customization. I will only talk about the banner here, the instructions\par -are the same for the icon.\par -Goto the "Banner" tab. You shouldn't touch the add and remove buttons, they're for advanced users that\par -change the animation. (However, they can't really harm your channel, as CustomizeMii will check for missing\par -and unneeded TPLs while creating a WAD).\par -You will see a list with all TPLs inside the banner.bin. When you select a TPL,\par -it's current format will be shown in the "Format" dropdownbox. Note that CustomizeMii can read 8 different\par -TPL formats, but only write 3 (RGBA8, RGB565 and RGB5A3), that should be enough for your needs.\par -You can use the preview button to preview a TPL (obvious, right?), but you get one more important info,\par -the image size. It will be shown in the title of the preview window. If your images aren't the same size,\par -they will be resized! So be sure to have at least the correct aspect ratio, so your images wont be\par -squeezed or whatever.\par -Before replacing the image, choose a format from the dropdownbox.\par -(RGBA8 = High Quality, Big Size --- RGB565 = Moderate Quality, Small Size --- RGB5A3 = Bad Quality, Small Size)\par -Now you can use the replace button to insert your image. Preview the TPL after replacing to check the\par -image. Maybe you want to use another format though? No problem, just replace the TPL again.\par -\par -Note: You can use the "Make Transparent" checkbox to make a TPL transparent, e.g. if you don't like\par -one piece of an animation (It's non-destructive, i.e. you can always uncheck the box).\par -\par -\par -\par -\b EDITING THE ANIMATION (Advanced users only!)\b0\par -\par -Skip this part, if you don't really know what brlyt and brlan files are and how they're structured.\par -Goto the "Layout" tab. You will see the banner.brlyt and icon.brlyt there.\par -Above the buttons is a text that will indicate whether you're doing actions on the "Banner" or\par -the "Icon" (When you select the banner.brlyt, you're editing the "Banner" and vice versa).\par -Now, just replace the banner.brlyt and icon.brlyt files as you want. You can use the list TPLs button\par -afterwards to see all TPLs that are required by the banner.brlyt/icon.brlyt (Don't worry, CustomizeMii\par -won't let you create a WAD, if you forgot a required TPL).\par -Now, goto the "Animation" tab. It's similar to the "Layout" tab. You shouldn't touch the add or delete button\par -unless your base WAD only has a banner.brlan and you want to use a banner_Start.brlan and banner_Loop.brlan.\par -In this case, first add the two files and then delete the old banner.brlan.\par -Else just replace the files with yours. Be absolutely sure the your brlan files only refer to panes that are\par -indicated in your brlyt files!\par -That's it, here's nothing left to do.\par -\par -\par -\par -\b CREATING THE WAD\b0\par -\par -Well, your channel should be ready to be created.\par -Goto the "Options" tab and check the Lz77 checkbox, if you want to compress your channel to safe some Wii memory.\par -If your channel doesn't work, first try it again without compression.\par -Now just click on the create WAD button (The big one with the different text each startup).\par -CustomizeMii will do some failure checks and if all went fine, a save dialog will pop up.\par -If you get an error or warning, read the message carefully. It should give you enough information to fix\par -the problem yourself.\par -\par -So, if you got down to here, you're done by now. Please, if you find any bugs or have suggestions, take some\par -seconds to report them at the issue tracker: {\field{\*\fldinst{HYPERLINK "http://code.google.com/p/customizemii/issues/list"}}{\fldrslt{\ul\cf2 http://code.google.com/p/customizemii/issues/list}}}\lang7\i\f0\fs17\par -} - \ No newline at end of file diff --git a/CustomizeMii/Resources/Waninkoko.app b/CustomizeMii/Resources/Waninkoko.app deleted file mode 100644 index ccf3026..0000000 Binary files a/CustomizeMii/Resources/Waninkoko.app and /dev/null differ diff --git a/CustomizeMii/Resources/btnCreateWad.png b/CustomizeMii/Resources/btnCreateWad.png deleted file mode 100644 index 85dc5b6..0000000 Binary files a/CustomizeMii/Resources/btnCreateWad.png and /dev/null differ diff --git a/CustomizeMii/Resources/comex.app b/CustomizeMii/Resources/comex.app deleted file mode 100644 index a8d94c8..0000000 Binary files a/CustomizeMii/Resources/comex.app and /dev/null differ diff --git a/CustomizeMii/Wave.cs b/CustomizeMii/Wave.cs deleted file mode 100644 index 238c101..0000000 --- a/CustomizeMii/Wave.cs +++ /dev/null @@ -1,325 +0,0 @@ -/* This file is part of CustomizeMii - * Copyright (C) 2009 Leathl - * - * CustomizeMii is free software: you can redistribute it and/or - * modify it under the terms of the GNU General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CustomizeMii is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -using System; -using System.IO; - -namespace WaveFile -{ - /// - /// A class for RIFF Wave files - /// - public class Wave - { - //Private Variables - private int fmtOffset; - private int dataOffset; - private int smplOffset; - private byte[] waveFile; - - - - //Public Variables - /// - /// The Samplerate of the Wave file - /// - public int SampleRate { get { return GetSampleRate(); } } - /// - /// The Bitdepth of the Wave file - /// - public int BitDepth { get { return GetBitDepth(); } } - /// - /// The number of channels of the Wave file - /// - public int ChannelCount { get { return GetChannelCount(); } } - /// - /// The format of the Wave file's data. 1 = PCM - /// - public int DataFormat { get { return GetDataFormat(); } } - /// - /// The number of Loops in the Wave file - /// - public int LoopCount { get { return GetLoopCount(); } } - /// - /// The start sample of the first Loop (if exist) - /// - public int LoopStart { get { return GetLoopStart(); } } - - - - //Public Functions - - public Wave(string waveFile) - { - using (FileStream fs = new FileStream(waveFile, FileMode.Open)) - { - byte[] temp = new byte[fs.Length]; - fs.Read(temp, 0, temp.Length); - - this.waveFile = temp; - } - - if (!CheckWave()) throw new Exception("This is not a supported PCM Wave File!"); - - if (!GetFmtOffset()) throw new Exception("The format section couldn't be found!"); - if (!GetDataOffset()) throw new Exception("The data section couldn't be found!"); - GetSmplOffset(); - } - - public Wave(byte[] waveFile) - { - this.waveFile = waveFile; - - if (!CheckWave()) throw new Exception("This is not a supported PCM Wave File!"); - - if (!GetFmtOffset()) throw new Exception("The format section couldn't be found!"); - if (!GetDataOffset()) throw new Exception("The data section couldn't be found!"); - GetSmplOffset(); - } - - /// - /// Returns the Wave file as a Byte Array - /// - /// - public byte[] ToByteArray() - { - return waveFile; - } - - /// - /// Returns the Wave file as a Memory Stream - /// - /// - public MemoryStream ToMemoryStream() - { - return new MemoryStream(waveFile); - } - - /// - /// Returns only the audio data of the Wave file (No header or anything else) - /// - /// - public byte[] GetAllFrames() - { - int dataLength = GetDataLength(); - - MemoryStream ms = new MemoryStream(); - ms.Write(waveFile, dataOffset, dataLength); - - return ms.ToArray(); - } - - /// - /// Closes the Wave file - /// - public void Close() - { - waveFile = null; - } - - - - //Private Functions - - private int GetLoopStart() - { - if (smplOffset == -1) return 0; - - byte[] temp = new byte[4]; - - temp[0] = waveFile[smplOffset + 52]; - temp[1] = waveFile[smplOffset + 53]; - temp[2] = waveFile[smplOffset + 54]; - temp[3] = waveFile[smplOffset + 55]; - - return BitConverter.ToInt32(temp, 0); - } - - private int GetLoopCount() - { - if (smplOffset == -1) return 0; - - byte[] temp = new byte[4]; - - temp[0] = waveFile[smplOffset + 36]; - temp[1] = waveFile[smplOffset + 37]; - temp[2] = waveFile[smplOffset + 38]; - temp[3] = waveFile[smplOffset + 39]; - - return BitConverter.ToInt32(temp, 0); - } - - private bool GetSmplOffset() - { - try - { - int length = (waveFile.Length > 5004 ? (waveFile.Length - 5000) : 0); - for (int i = waveFile.Length - 4; i > length; i--) - { - if (waveFile[i] == 's' && - waveFile[i + 1] == 'm' && - waveFile[i + 2] == 'p' && - waveFile[i + 3] == 'l') - { - this.smplOffset = i; - return true; - } - } - } - catch { } - - for (int i = 0; i < waveFile.Length - 4; i++) - { - if (waveFile[i] == 's' && - waveFile[i + 1] == 'm' && - waveFile[i + 2] == 'p' && - waveFile[i + 3] == 'l') - { - this.smplOffset = i; - return true; - } - } - - this.smplOffset = -1; - return false; - } - - private bool GetFmtOffset() - { - if (waveFile[12] == 'f' && - waveFile[13] == 'm' && - waveFile[14] == 't' && - waveFile[15] == ' ') - { - this.fmtOffset = 12; - return true; - } - - int length = (waveFile.Length > 5004 ? 5000 : waveFile.Length - 4); - for (int i = 0; i < length; i++) - { - if (waveFile[i] == 'f' && - waveFile[i + 1] == 'm' && - waveFile[i + 2] == 't' && - waveFile[i + 3] == ' ') - { - this.fmtOffset = i; - return true; - } - } - - this.fmtOffset = -1; - return false; - } - - private int GetDataLength() - { - byte[] temp = new byte[4]; - - temp[0] = waveFile[dataOffset + 4]; - temp[1] = waveFile[dataOffset + 5]; - temp[2] = waveFile[dataOffset + 6]; - temp[3] = waveFile[dataOffset + 7]; - - return BitConverter.ToInt32(temp, 0); - } - - private bool GetDataOffset() - { - if (waveFile[40] == 'd' && - waveFile[41] == 'a' && - waveFile[42] == 't' && - waveFile[43] == 'a') - { - this.dataOffset = 40; - return true; - } - - for (int i = 0; i < waveFile.Length - 4; i++) - { - if (waveFile[i] == 'd' && - waveFile[i + 1] == 'a' && - waveFile[i + 2] == 't' && - waveFile[i + 3] == 'a') - { - this.dataOffset = i; - return true; - } - } - - this.dataOffset = -1; - return false; - } - - private int GetSampleRate() - { - byte[] temp = new byte[4]; - - temp[0] = waveFile[fmtOffset + 12]; - temp[1] = waveFile[fmtOffset + 13]; - temp[2] = waveFile[fmtOffset + 14]; - temp[3] = waveFile[fmtOffset + 15]; - - return BitConverter.ToInt32(temp, 0); - } - - private int GetBitDepth() - { - byte[] temp = new byte[2]; - - temp[0] = waveFile[fmtOffset + 22]; - temp[1] = waveFile[fmtOffset + 23]; - - return BitConverter.ToInt16(temp, 0); - } - - private int GetChannelCount() - { - byte[] temp = new byte[2]; - - temp[0] = waveFile[fmtOffset + 10]; - temp[1] = waveFile[fmtOffset + 11]; - - return BitConverter.ToInt16(temp, 0); - } - - private int GetDataFormat() - { - byte[] temp = new byte[2]; - - temp[0] = waveFile[fmtOffset + 8]; - temp[1] = waveFile[fmtOffset + 9]; - - return BitConverter.ToInt16(temp, 0); - } - - private bool CheckWave() - { - if (waveFile[0] != 'R' || - waveFile[1] != 'I' || - waveFile[2] != 'F' || - waveFile[3] != 'F' || - - waveFile[8] != 'W' || - waveFile[9] != 'A' || - waveFile[10] != 'V' || - waveFile[11] != 'E') return false; - - return true; - } - } -} diff --git a/CustomizeMii/Wii.cs b/CustomizeMii/Wii.cs deleted file mode 100644 index acb172d..0000000 --- a/CustomizeMii/Wii.cs +++ /dev/null @@ -1,5653 +0,0 @@ -/* This file is part of ShowMiiWads - * Copyright (C) 2009 Leathl - * - * ShowMiiWads is free software: you can redistribute it and/or - * modify it under the terms of the GNU General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * ShowMiiWads is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -//Wii.py by Xuzz, SquidMan, megazig, Matt_P, Omega and The Lemon Man was the base for TPL conversion -//Zetsubou by SquidMan was a reference for TPL conversion -//gbalzss by Andre Perrot was the base for LZ77 (de-)compression -//Thanks to the authors! - -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Net; -using System.Security.Cryptography; -using System.Text; - -namespace Wii -{ - public class Tools - { - public static event EventHandler ProgressChanged; - - public static void ChangeProgress(int ProgressPercent) - { - EventHandler progressChanged = ProgressChanged; - if (progressChanged != null) - { - progressChanged(new object(), new ProgressChangedEventArgs(ProgressPercent)); - } - } - - /// - /// Writes the small Byte Array into the big one at the given offset - /// - /// - /// - /// - /// - public static byte[] InsertByteArray(byte[] big, byte[] small, int offset) - { - for (int i = 0; i < small.Length; i++) - big[offset + i] = small[i]; - return big; - } - - /// - /// Creates a new Byte Array out of the given one - /// from the given offset with the specified length - /// - /// - /// - /// - /// - public static byte[] GetPartOfByteArray(byte[] array, int offset, int length) - { - byte[] ret = new byte[length]; - for (int i = 0; i < length; i++) - ret[i] = array[offset + i]; - return ret; - } - - /// - /// Converts UInt32 Array into Byte Array - /// - /// - /// - public static byte[] UInt32ArrayToByteArray(UInt32[] array) - { - List results = new List(); - foreach (UInt32 value in array) - { - byte[] converted = BitConverter.GetBytes(value); - results.AddRange(converted); - } - return results.ToArray(); - } - - /// - /// Converts UInt16 Array into Byte Array - /// - /// - /// - public static byte[] UInt16ArrayToByteArray(UInt16[] array) - { - List results = new List(); - foreach (UInt16 value in array) - { - byte[] converted = BitConverter.GetBytes(value); - results.AddRange(converted); - } - return results.ToArray(); - } - - /// - /// Converts UInt16 Array into Byte Array - /// - /// - /// - public static byte[] UIntArrayToByteArray(uint[] array) - { - List results = new List(); - foreach (uint value in array) - { - byte[] converted = BitConverter.GetBytes(value); - results.AddRange(converted); - } - return results.ToArray(); - } - - /// - /// Converts Byte Array into UInt16 Array - /// - /// - /// - public static UInt32[] ByteArrayToUInt32Array(byte[] array) - { - UInt32[] converted = new UInt32[array.Length / 2]; - int j = 0; - for (int i = 0; i < array.Length; i += 4) - { - converted[j] = BitConverter.ToUInt32(array, i); - j++; - } - return converted; - } - - /// - /// Converts Byte Array into UInt16 Array - /// - /// - /// - public static UInt16[] ByteArrayToUInt16Array(byte[] array) - { - UInt16[] converted = new UInt16[array.Length / 2]; - int j = 0; - for (int i = 0; i < array.Length; i += 2) - { - converted[j] = BitConverter.ToUInt16(array, i); - j++; - } - return converted; - } - - /// - /// Returns the file length as a Byte Array - /// - /// - /// - public static byte[] FileLengthToByteArray(int filelength) - { - byte[] length = BitConverter.GetBytes(filelength); - Array.Reverse(length); - return length; - } - - /// - /// Adds a padding to the next 64 bytes, if necessary - /// - /// - /// - public static int AddPadding(int value) - { - return AddPadding(value, 64); - } - - /// - /// Adds a padding to the given value, if necessary - /// - /// - /// - /// - public static int AddPadding(int value, int padding) - { - if (value % padding != 0) - { - value = value + (padding - (value % padding)); - } - - return value; - } - - /// - /// Converts a Hex-String to Int - /// - /// - /// - public static int HexStringToInt(string hexstring) - { - try { return int.Parse(hexstring, System.Globalization.NumberStyles.HexNumber); } - catch { throw new Exception("An Error occured, maybe the Wad file is corrupt!"); } - } - - /// - /// Converts a Hex-String to Long - /// - /// - /// - public static long HexStringToLong(string hexstring) - { - try { return long.Parse(hexstring, System.Globalization.NumberStyles.HexNumber); } - catch { throw new Exception("An Error occured, maybe the Wad file is corrupt!"); } - } - - /// - /// Writes a Byte Array to a file - /// - /// - public static void SaveFileFromByteArray(byte[] file, string destination) - { - using (FileStream fs = new FileStream(destination, FileMode.Create)) - fs.Write(file, 0, file.Length); - } - - /// - /// Loads a file into a Byte Array - /// - /// - /// - public static byte[] LoadFileToByteArray(string sourcefile) - { - if (File.Exists(sourcefile)) - { - using (FileStream fs = new FileStream(sourcefile, FileMode.Open)) - { - byte[] filearray = new byte[fs.Length]; - fs.Read(filearray, 0, filearray.Length); - return filearray; - } - } - else throw new FileNotFoundException("File couldn't be found:\r\n" + sourcefile); - } - - /// - /// Loads a file into a Byte Array - /// - /// - /// - public static byte[] LoadFileToByteArray(string sourcefile, int offset, int length) - { - if (File.Exists(sourcefile)) - { - using (FileStream fs = new FileStream(sourcefile, FileMode.Open)) - { - if (fs.Length < length) length = (int)fs.Length; - byte[] filearray = new byte[length]; - fs.Seek(offset, SeekOrigin.Begin); - fs.Read(filearray, 0, length); - return filearray; - } - } - else throw new FileNotFoundException("File couldn't be found:\r\n" + sourcefile); - } - - /// - /// Checks the SHA1 of the Common-Key - /// - /// - /// - public static bool CheckCommonKey(string pathtocommonkey) - { - byte[] sum = new byte[] { 0xEB, 0xEA, 0xE6, 0xD2, 0x76, 0x2D, 0x4D, 0x3E, 0xA1, 0x60, 0xA6, 0xD8, 0x32, 0x7F, 0xAC, 0x9A, 0x25, 0xF8, 0x06, 0x2B }; - - FileInfo fi = new FileInfo(pathtocommonkey); - if (fi.Length != 16) return false; - else - { - byte[] ckey = LoadFileToByteArray(pathtocommonkey); - - SHA1Managed sha1 = new SHA1Managed(); - byte[] newsum = sha1.ComputeHash(ckey); - - if (CompareByteArrays(sum, newsum) == true) return true; - else return false; - } - } - - /// - /// Creates the Common Key - /// - /// Must be "45e" - /// Destination Path - public static void CreateCommonKey(string fat, string destinationpath) - { - //What an effort, lol - byte[] encryptedwater = new byte[] { 0x4d, 0x89, 0x21, 0x34, 0x62, 0x81, 0xe4, 0x02, 0x37, 0x36, 0xc4, 0xb4, 0xde, 0x40, 0x32, 0xab }; - byte[] key = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, byte.Parse(fat.Remove(2), System.Globalization.NumberStyles.HexNumber), byte.Parse(fat.Remove(0, 2) + "0", System.Globalization.NumberStyles.HexNumber) }; - byte[] decryptedwater = new byte[10]; - - RijndaelManaged decryptkey = new RijndaelManaged(); - decryptkey.Mode = CipherMode.CBC; - decryptkey.Padding = PaddingMode.None; - decryptkey.KeySize = 128; - decryptkey.BlockSize = 128; - decryptkey.Key = key; - Array.Reverse(key); - decryptkey.IV = key; - - ICryptoTransform cryptor = decryptkey.CreateDecryptor(); - - using (MemoryStream memory = new MemoryStream(encryptedwater)) - { - using (CryptoStream crypto = new CryptoStream(memory, cryptor, CryptoStreamMode.Read)) - crypto.Read(decryptedwater, 0, 10); - } - - string water = BitConverter.ToString(decryptedwater).Replace("-", "").ToLower() + " "; - - water = water.Insert(0, fat[2].ToString()); - water = water.Insert(2, fat[2].ToString()); - water = water.Insert(7, fat[2].ToString()); - water = water.Insert(11, fat[2].ToString()); - - water = water.Insert(7, fat[1].ToString()); - water = water.Insert(10, fat[1].ToString()); - water = water.Insert(18, fat[1].ToString()); - water = water.Insert(19, fat[1].ToString()); - - water = water.Insert(3, fat[0].ToString()); - water = water.Insert(15, fat[0].ToString()); - water = water.Insert(16, fat[0].ToString()); - water = water.Insert(22, fat[0].ToString()); - - byte[] cheese = new byte[16]; - int count = -1; - - for (int i = 0; i < 32; i += 2) - cheese[++count] = byte.Parse(water.Remove(0, i).Remove(2), System.Globalization.NumberStyles.HexNumber); - - if (destinationpath[destinationpath.Length - 1] != '\\') destinationpath = destinationpath + "\\"; - using (FileStream keystream = new FileStream(destinationpath + "\\common-key.bin", FileMode.Create)) - { - keystream.Write(cheese, 0, cheese.Length); - } - } - - /// - /// Counts the appearance of a specific character in a string - /// - /// - /// - /// - public static int CountCharsInString(string theString, char theChar) - { - int count = 0; - foreach (char thisChar in theString) - { - if (thisChar == theChar) - count++; - } - return count; - } - - /// - /// Compares two Byte Arrays and returns true, if they match - /// - /// - /// - /// - public static bool CompareByteArrays(byte[] first, byte[] second) - { - if (first.Length != second.Length) return false; - else - { - for (int i = 0; i < first.Length; i++) - if (first[i] != second[i]) return false; - - return true; - } - } - - /// - /// Converts a Hex String to a Byte Array - /// - /// - /// - public static byte[] HexStringToByteArray(string hexstring) - { - byte[] ba = new byte[hexstring.Length / 2]; - - for (int i = 0; i < hexstring.Length / 2; i++) - { - ba[i] = byte.Parse(hexstring.Substring(i * 2, 2), System.Globalization.NumberStyles.HexNumber); - } - - return ba; - } - - /// - /// Checks, if the given string does exist in the string Array - /// - /// - /// - /// - public static bool StringExistsInStringArray(string theString, string[] theStringArray) - { - return Array.Exists(theStringArray, thisString => thisString == theString); - } - - /// - /// Copies an entire Directoy - /// - /// - /// - public static void CopyDirectory(string source, string destination) - { - string[] subdirs = Directory.GetDirectories(source); - string[] files = Directory.GetFiles(source); - - foreach (string thisFile in files) - { - if (!Directory.Exists(destination)) Directory.CreateDirectory(destination); - if (File.Exists(destination + "\\" + Path.GetFileName(thisFile))) File.Delete(destination + "\\" + Path.GetFileName(thisFile)); - File.Copy(thisFile, destination + "\\" + Path.GetFileName(thisFile)); - } - - foreach (string thisDir in subdirs) - { - CopyDirectory(thisDir, destination + "\\" + thisDir.Remove(0, thisDir.LastIndexOf('\\') + 1)); - } - } - } - - public class WadInfo - { - public const int Headersize = 64; - public static string[] RegionCode = new string[4] { "Japan", "USA", "Europe", "Region Free" }; - - /// - /// Returns the Header of a Wadfile - /// - /// - /// - public static byte[] GetHeader(byte[] wadfile) - { - byte[] Header = new byte[0x20]; - - for (int i = 0; i < Header.Length; i++) - { - Header[i] = wadfile[i]; - } - - return Header; - } - - /// - /// Returns the size of the Certificate - /// - /// - /// - public static int GetCertSize(byte[] wadfile) - { - int size = int.Parse(wadfile[0x08].ToString("x2") + wadfile[0x09].ToString("x2") + wadfile[0x0a].ToString("x2") + wadfile[0x0b].ToString("x2"), System.Globalization.NumberStyles.HexNumber); - return size; - } - - /// - /// Returns the size of the Ticket - /// - /// - /// - public static int GetTikSize(byte[] wadfile) - { - int size = int.Parse(wadfile[0x10].ToString("x2") + wadfile[0x11].ToString("x2") + wadfile[0x12].ToString("x2") + wadfile[0x13].ToString("x2"), System.Globalization.NumberStyles.HexNumber); - return size; - } - - /// - /// Returns the size of the TMD - /// - /// - /// - public static int GetTmdSize(byte[] wadfile) - { - int size = int.Parse(wadfile[0x14].ToString("x2") + wadfile[0x15].ToString("x2") + wadfile[0x16].ToString("x2") + wadfile[0x17].ToString("x2"), System.Globalization.NumberStyles.HexNumber); - return size; - } - - /// - /// Returns the size of all Contents - /// - /// - /// - public static int GetContentSize(byte[] wadfile) - { - int size = int.Parse(wadfile[0x18].ToString("x2") + wadfile[0x19].ToString("x2") + wadfile[0x1a].ToString("x2") + wadfile[0x1b].ToString("x2"), System.Globalization.NumberStyles.HexNumber); - return size; - } - - /// - /// Returns the size of the Footer - /// - /// - /// - public static int GetFooterSize(byte[] wadfile) - { - int size = int.Parse(wadfile[0x1c].ToString("x2") + wadfile[0x1d].ToString("x2") + wadfile[0x1e].ToString("x2") + wadfile[0x1f].ToString("x2"), System.Globalization.NumberStyles.HexNumber); - return size; - } - - /// - /// Returns the position of the tmd in the wad file - /// - /// - /// - public static int GetTmdPos(byte[] wadfile) - { - return Headersize + Tools.AddPadding(GetCertSize(wadfile)) + Tools.AddPadding(GetTikSize(wadfile)); - } - - /// - /// Returns the position of the ticket in the wad file, ticket or tmd - /// - /// - /// - public static int GetTikPos(byte[] wadfile) - { - return Headersize + Tools.AddPadding(GetCertSize(wadfile)); - } - - /// - /// Returns the title ID of the wad file. - /// - /// - /// 0 = Tik, 1 = Tmd - /// - public static string GetTitleID(string wadtiktmd, int type) - { - byte[] temp = Tools.LoadFileToByteArray(wadtiktmd); - return GetTitleID(temp, type); - } - - /// - /// Returns the title ID of the wad file. - /// - /// - /// 0 = Tik, 1 = Tmd - /// - public static string GetTitleID(byte[] wadtiktmd, int type) - { - string channeltype = GetChannelType(wadtiktmd, type); - int tikpos = 0; - int tmdpos = 0; - - if (IsThisWad(wadtiktmd) == true) - { - //It's a wad - tikpos = GetTikPos(wadtiktmd); - tmdpos = GetTmdPos(wadtiktmd); - } - - if (type == 1) - { - if (!channeltype.Contains("System:")) - { - string tmdid = Convert.ToChar(wadtiktmd[tmdpos + 0x190]).ToString() + Convert.ToChar(wadtiktmd[tmdpos + 0x191]).ToString() + Convert.ToChar(wadtiktmd[tmdpos + 0x192]).ToString() + Convert.ToChar(wadtiktmd[tmdpos + 0x193]).ToString(); - return tmdid; - } - else if (channeltype.Contains("IOS")) - { - int tmdid = Tools.HexStringToInt(wadtiktmd[tmdpos + 0x190].ToString("x2") + wadtiktmd[tmdpos + 0x191].ToString("x2") + wadtiktmd[tmdpos + 0x192].ToString("x2") + wadtiktmd[tmdpos + 0x193].ToString("x2")); - return "IOS" + tmdid; - } - else if (channeltype.Contains("System")) return "SYSTEM"; - else return ""; - } - else - { - if (!channeltype.Contains("System:")) - { - string tikid = Convert.ToChar(wadtiktmd[tikpos + 0x1e0]).ToString() + Convert.ToChar(wadtiktmd[tikpos + 0x1e1]).ToString() + Convert.ToChar(wadtiktmd[tikpos + 0x1e2]).ToString() + Convert.ToChar(wadtiktmd[tikpos + 0x1e3]).ToString(); - return tikid; - } - else if (channeltype.Contains("IOS")) - { - int tikid = Tools.HexStringToInt(wadtiktmd[tikpos + 0x1e0].ToString("x2") + wadtiktmd[tikpos + 0x1e1].ToString("x2") + wadtiktmd[tikpos + 0x1e2].ToString("x2") + wadtiktmd[tikpos + 0x1e3].ToString("x2")); - return "IOS" + tikid; - } - else if (channeltype.Contains("System")) return "SYSTEM"; - else return ""; - } - } - - /// - /// Returns the full title ID of the wad file as a hex string. - /// - /// - /// 0 = Tik, 1 = Tmd - /// - public static string GetFullTitleID(byte[] wadtiktmd, int type) - { - int tikpos = 0; - int tmdpos = 0; - - if (IsThisWad(wadtiktmd) == true) - { - //It's a wad - tikpos = GetTikPos(wadtiktmd); - tmdpos = GetTmdPos(wadtiktmd); - } - - if (type == 1) - { - string tmdid = wadtiktmd[tmdpos + 0x18c].ToString("x2") + - wadtiktmd[tmdpos + 0x18d].ToString("x2") + - wadtiktmd[tmdpos + 0x18e].ToString("x2") + - wadtiktmd[tmdpos + 0x18f].ToString("x2") + - wadtiktmd[tmdpos + 0x190].ToString("x2") + - wadtiktmd[tmdpos + 0x191].ToString("x2") + - wadtiktmd[tmdpos + 0x192].ToString("x2") + - wadtiktmd[tmdpos + 0x193].ToString("x2"); - return tmdid; - } - else - { - string tikid = wadtiktmd[tikpos + 0x1dc].ToString() + - wadtiktmd[tikpos + 0x1dd].ToString() + - wadtiktmd[tikpos + 0x1de].ToString() + - wadtiktmd[tikpos + 0x1df].ToString() + - wadtiktmd[tikpos + 0x1e0].ToString() + - wadtiktmd[tikpos + 0x1e1].ToString() + - wadtiktmd[tikpos + 0x1e2].ToString() + - wadtiktmd[tikpos + 0x1e3].ToString(); - return tikid; - } - } - - /// - /// Returns the title for each language of a wad file. - /// Order: Jap, Eng, Ger, Fra, Spa, Ita, Dut - /// - /// - /// - public static string[] GetChannelTitles(string wadfile) - { - byte[] wadarray = Tools.LoadFileToByteArray(wadfile); - return GetChannelTitles(wadarray); - } - - /// - /// Returns the title for each language of a wad file. - /// Order: Jap, Eng, Ger, Fra, Spa, Ita, Dut - /// - /// - /// - public static string[] GetChannelTitles(byte[] wadfile) - { - if (File.Exists(System.Windows.Forms.Application.StartupPath + "\\common-key.bin") || File.Exists(System.Windows.Forms.Application.StartupPath + "\\key.bin")) - { - string channeltype = GetChannelType(wadfile, 0); - - if (!channeltype.Contains("System:")) - { - if (!channeltype.Contains("Hidden")) - { - string[] titles = new string[7]; - - //Detection from footer is turned off, cause the footer - //can be easily edited and thus the titles in it could be simply wrong - - //int footer = GetFooterSize(wadfile); - //if (footer > 0) - //{ - // int footerpos = wadfile.Length - footer; - // int count = 0; - // int imetpos = 0; - - // if ((wadfile.Length - (wadfile.Length - footer)) < 250) return new string[7]; - - // for (int z = 0; z < 250; z++) - // { - // if (Convert.ToChar(wadfile[footerpos + z]) == 'I') - // if (Convert.ToChar(wadfile[footerpos + z + 1]) == 'M') - // if (Convert.ToChar(wadfile[footerpos + z + 2]) == 'E') - // if (Convert.ToChar(wadfile[footerpos + z + 3]) == 'T') - // { - // imetpos = footerpos + z; - // break; - // } - // } - - // int jappos = imetpos + 29; - - // for (int i = jappos; i < jappos + 588; i += 84) - // { - // for (int j = 0; j < 40; j += 2) - // { - // if (wadfile[i + j] != 0x00) - // { - // char temp = Convert.ToChar(wadfile[i + j]); - // titles[count] += temp; - // } - // } - - // count++; - // } - - // return titles; - //} - - string[,] conts = GetContentInfo(wadfile); - byte[] titlekey = GetTitleKey(wadfile); - int nullapp = 0; - - for (int i = 0; i < conts.GetLength(0); i++) - { - if (conts[i, 1] == "00000000") - nullapp = i; - } - - byte[] contenthandle = WadEdit.DecryptContent(wadfile, nullapp, titlekey); - int imetpos = 0; - - if (contenthandle.Length < 400) return new string[7]; - - for (int z = 0; z < 400; z++) - { - if (Convert.ToChar(contenthandle[z]) == 'I') - if (Convert.ToChar(contenthandle[z + 1]) == 'M') - if (Convert.ToChar(contenthandle[z + 2]) == 'E') - if (Convert.ToChar(contenthandle[z + 3]) == 'T') - { - imetpos = z; - break; - } - } - - int jappos = imetpos + 29; - int count = 0; - - for (int i = jappos; i < jappos + 588; i += 84) - { - for (int j = 0; j < 40; j += 2) - { - if (contenthandle[i + j] != 0x00) - { - char temp = BitConverter.ToChar(new byte[] { contenthandle[i + j], contenthandle[i + j - 1] }, 0); - titles[count] += temp; - } - } - - count++; - } - - return titles; - } - else return new string[7]; - } - else return new string[7]; - } - else return new string[7]; - } - - /// - /// Returns the title for each language of a 00.app file - /// Order: Jap, Eng, Ger, Fra, Spa, Ita, Dut - /// - /// - /// - public static string[] GetChannelTitlesFromApp(string app) - { - byte[] tmp = Tools.LoadFileToByteArray(app); - return GetChannelTitlesFromApp(tmp); - } - - /// - /// Returns the title for each language of a 00.app file - /// Order: Jap, Eng, Ger, Fra, Spa, Ita, Dut - /// - /// - /// - public static string[] GetChannelTitlesFromApp(byte[] app) - { - string[] titles = new string[7]; - - int imetpos = 0; - int length = 400; - - if (app.Length < 400) length = app.Length - 4; - - for (int z = 0; z < length; z++) - { - if (Convert.ToChar(app[z]) == 'I') - if (Convert.ToChar(app[z + 1]) == 'M') - if (Convert.ToChar(app[z + 2]) == 'E') - if (Convert.ToChar(app[z + 3]) == 'T') - { - imetpos = z; - break; - } - } - - if (imetpos != 0) - { - int jappos = imetpos + 29; - int count = 0; - - for (int i = jappos; i < jappos + 588; i += 84) - { - for (int j = 0; j < 40; j += 2) - { - if (app[i + j] != 0x00) - { - char temp = BitConverter.ToChar(new byte[] { app[i + j], app[i + j - 1] }, 0); - titles[count] += temp; - } - } - - count++; - } - } - - return titles; - } - - /// - /// Returns the Type of the Channel as a string - /// Wad or Tik needed for WiiWare / VC detection! - /// - /// - /// - public static string GetChannelType(byte[] wadtiktmd, int type) - { - int tikpos = 0; - int tmdpos = 0; - - if (IsThisWad(wadtiktmd) == true) - { - //It's a wad - tikpos = GetTikPos(wadtiktmd); - tmdpos = GetTmdPos(wadtiktmd); - } - - string thistype = ""; - - if (type == 0) - { thistype = wadtiktmd[tikpos + 0x1dc].ToString("x2") + wadtiktmd[tikpos + 0x1dd].ToString("x2") + wadtiktmd[tikpos + 0x1de].ToString("x2") + wadtiktmd[tikpos + 0x1df].ToString("x2"); } - else { thistype = wadtiktmd[tmdpos + 0x18c].ToString("x2") + wadtiktmd[tmdpos + 0x18d].ToString("x2") + wadtiktmd[tmdpos + 0x18e].ToString("x2") + wadtiktmd[tmdpos + 0x18f].ToString("x2"); } - string channeltype = "Unknown"; - - if (thistype == "00010001") - { - channeltype = CheckWiiWareVC(wadtiktmd, type); - } - else if (thistype == "00010002") channeltype = "System Channel"; - else if (thistype == "00010004" || thistype == "00010000") channeltype = "Game Channel"; - else if (thistype == "00010005") channeltype = "Downloaded Content"; - else if (thistype == "00010008") channeltype = "Hidden Channel"; - else if (thistype == "00000001") - { - channeltype = "System: IOS"; - - string thisid = ""; - if (type == 0) { thisid = wadtiktmd[tikpos + 0x1e0].ToString("x2") + wadtiktmd[tikpos + 0x1e1].ToString("x2") + wadtiktmd[tikpos + 0x1e2].ToString("x2") + wadtiktmd[tikpos + 0x1e3].ToString("x2"); } - else { thisid = wadtiktmd[tmdpos + 0x190].ToString("x2") + wadtiktmd[tmdpos + 0x191].ToString("x2") + wadtiktmd[tmdpos + 0x192].ToString("x2") + wadtiktmd[tmdpos + 0x193].ToString("x2"); } - - if (thisid == "00000001") channeltype = "System: Boot2"; - else if (thisid == "00000002") channeltype = "System: Menu"; - else if (thisid == "00000100") channeltype = "System: BC"; - else if (thisid == "00000101") channeltype = "System: MIOS"; - } - - return channeltype; - } - - /// - /// Returns the amount of included Contents (app-files) - /// - /// - /// - public static int GetContentNum(byte[] wadtmd) - { - int tmdpos = 0; - - if (IsThisWad(wadtmd) == true) - { - //It's a wad file, so get the tmd position - tmdpos = GetTmdPos(wadtmd); - } - - int contents = Tools.HexStringToInt(wadtmd[tmdpos + 0x1de].ToString("x2") + wadtmd[tmdpos + 0x1df].ToString("x2")); - - return contents; - } - - /// - /// Returns the boot index specified in the tmd - /// - /// - /// - public static int GetBootIndex(byte[] wadtmd) - { - int tmdpos = 0; - - if (IsThisWad(wadtmd)) - tmdpos = GetTmdPos(wadtmd); - - int bootIndex = Tools.HexStringToInt(wadtmd[tmdpos + 0x1e0].ToString("x2") + wadtmd[tmdpos + 0x1e1].ToString("x2")); - - return bootIndex; - } - - /// - /// Returns the approx. destination size on the Wii - /// - /// - /// - public static string GetNandSize(byte[] wadtmd, bool ConvertToMB) - { - int tmdpos = 0; - int minsize = 0; - int maxsize = 0; - int numcont = GetContentNum(wadtmd); - - if (IsThisWad(wadtmd) == true) - { - //It's a wad - tmdpos = GetTmdPos(wadtmd); - } - - for (int i = 0; i < numcont; i++) - { - int cont = 36 * i; - int contentsize = Tools.HexStringToInt(wadtmd[tmdpos + 0x1e4 + 8 + cont].ToString("x2") + - wadtmd[tmdpos + 0x1e5 + 8 + cont].ToString("x2") + - wadtmd[tmdpos + 0x1e6 + 8 + cont].ToString("x2") + - wadtmd[tmdpos + 0x1e7 + 8 + cont].ToString("x2") + - wadtmd[tmdpos + 0x1e8 + 8 + cont].ToString("x2") + - wadtmd[tmdpos + 0x1e9 + 8 + cont].ToString("x2") + - wadtmd[tmdpos + 0x1ea + 8 + cont].ToString("x2") + - wadtmd[tmdpos + 0x1eb + 8 + cont].ToString("x2")); - - string type = wadtmd[tmdpos + 0x1e4 + 6 + cont].ToString("x2") + wadtmd[tmdpos + 0x1e5 + 6 + cont].ToString("x2"); - - if (type == "0001") - { - minsize += contentsize; - maxsize += contentsize; - } - else if (type == "8001") - maxsize += contentsize; - } - - string size = ""; - - if (maxsize == minsize) size = maxsize.ToString(); - else size = minsize.ToString() + " - " + maxsize.ToString(); - - if (ConvertToMB == true) - { - if (size.Contains("-")) - { - string min = size.Remove(size.IndexOf(' ')); - string max = size.Remove(0, size.IndexOf('-') + 2); - - min = Convert.ToString(Math.Round(Convert.ToDouble(min) * 0.0009765625 * 0.0009765625, 2)); - max = Convert.ToString(Math.Round(Convert.ToDouble(max) * 0.0009765625 * 0.0009765625, 2)); - if (min.Length > 4) { min = min.Remove(4); } - if (max.Length > 4) { max = max.Remove(4); } - size = min + " - " + max + " MB"; - } - else - { - size = Convert.ToString(Math.Round(Convert.ToDouble(size) * 0.0009765625 * 0.0009765625, 2)); - if (size.Length > 4) { size = size.Remove(4); } - size = size + " MB"; - } - } - - return size.Replace(",", "."); - } - - /// - /// Returns the approx. destination block on the Wii - /// - /// - /// - public static string GetNandBlocks(string wadtmd) - { - using (FileStream fs = new FileStream(wadtmd, FileMode.Open)) - { - byte[] temp = new byte[fs.Length]; - fs.Read(temp, 0, temp.Length); - return GetNandBlocks(temp); - } - } - - /// - /// Returns the approx. destination block on the Wii - /// - /// - /// - public static string GetNandBlocks(byte[] wadtmd) - { - string size = GetNandSize(wadtmd, false); - - if (size.Contains("-")) - { - string size1 = size.Remove(size.IndexOf(' ')); - string size2 = size.Remove(0, size.LastIndexOf(' ') + 1); - - double blocks1 = (double)((Convert.ToDouble(size1) / 1024) / 128); - double blocks2 = (double)((Convert.ToDouble(size2) / 1024) / 128); - - return Math.Ceiling(blocks1) + " - " + Math.Ceiling(blocks2); - } - else - { - double blocks = (double)((Convert.ToDouble(size) / 1024) / 128); - - return Math.Ceiling(blocks).ToString(); - } - } - - /// - /// Returns the title version of the wad file - /// - /// - /// - public static int GetTitleVersion(string wadtmd) - { - byte[] temp = Tools.LoadFileToByteArray(wadtmd, 0, 10000); - return GetTitleVersion(temp); - } - - /// - /// Returns the title version of the wad file - /// - /// - /// - public static int GetTitleVersion(byte[] wadtmd) - { - int tmdpos = 0; - - if (IsThisWad(wadtmd) == true) { tmdpos = GetTmdPos(wadtmd); } - return Tools.HexStringToInt(wadtmd[tmdpos + 0x1dc].ToString("x2") + wadtmd[tmdpos + 0x1dd].ToString("x2")); - } - - /// - /// Returns the IOS that is needed by the wad file - /// - /// - /// - public static string GetIosFlag(byte[] wadtmd) - { - string type = GetChannelType(wadtmd, 1); - - if (!type.Contains("IOS") && !type.Contains("BC")) - { - int tmdpos = 0; - if (IsThisWad(wadtmd) == true) { tmdpos = GetTmdPos(wadtmd); } - return "IOS" + Tools.HexStringToInt(wadtmd[tmdpos + 0x188].ToString("x2") + wadtmd[tmdpos + 0x189].ToString("x2") + wadtmd[tmdpos + 0x18a].ToString("x2") + wadtmd[tmdpos + 0x18b].ToString("x2")); - } - else return ""; - } - - /// - /// Returns the region of the wad file - /// - /// - /// - public static string GetRegionFlag(byte[] wadtmd) - { - int tmdpos = 0; - string channeltype = GetChannelType(wadtmd, 1); - - if (IsThisWad(wadtmd) == true) { tmdpos = GetTmdPos(wadtmd); } - - if (!channeltype.Contains("System:")) - { - int region = Tools.HexStringToInt(wadtmd[tmdpos + 0x19d].ToString("x2")); - return RegionCode[region]; - } - else return ""; - } - - /// - /// Returns the Path where the wad will be installed on the Wii - /// - /// - /// - public static string GetNandPath(string wadfile) - { - byte[] wad = Tools.LoadFileToByteArray(wadfile); - return GetNandPath(wad, 0); - } - - /// - /// Returns the Path where the wad will be installed on the Wii - /// - /// - /// 0 = Tik, 1 = Tmd - /// - public static string GetNandPath(byte[] wadtiktmd, int type) - { - int tikpos = 0; - int tmdpos = 0; - - if (IsThisWad(wadtiktmd) == true) - { - tikpos = GetTikPos(wadtiktmd); - tmdpos = GetTmdPos(wadtiktmd); - } - - string thispath = ""; - - if (type == 0) - { - thispath = wadtiktmd[tikpos + 0x1dc].ToString("x2") + - wadtiktmd[tikpos + 0x1dd].ToString("x2") + - wadtiktmd[tikpos + 0x1de].ToString("x2") + - wadtiktmd[tikpos + 0x1df].ToString("x2") + - wadtiktmd[tikpos + 0x1e0].ToString("x2") + - wadtiktmd[tikpos + 0x1e1].ToString("x2") + - wadtiktmd[tikpos + 0x1e2].ToString("x2") + - wadtiktmd[tikpos + 0x1e3].ToString("x2"); - } - else - { - thispath = wadtiktmd[tmdpos + 0x18c].ToString("x2") + - wadtiktmd[tmdpos + 0x18d].ToString("x2") + - wadtiktmd[tmdpos + 0x18e].ToString("x2") + - wadtiktmd[tmdpos + 0x18f].ToString("x2") + - wadtiktmd[tmdpos + 0x190].ToString("x2") + - wadtiktmd[tmdpos + 0x191].ToString("x2") + - wadtiktmd[tmdpos + 0x192].ToString("x2") + - wadtiktmd[tmdpos + 0x193].ToString("x2"); - } - - thispath = thispath.Insert(8, "\\"); - return thispath; - } - - /// - /// Returns true, if the wad file is a WiiWare / VC title. - /// - /// - /// 0 = Tik, 1 = Tmd - /// - public static string CheckWiiWareVC(byte[] wadtiktmd, int type) - { - int tiktmdpos = 0; - int offset = 0x221; - int idoffset = 0x1e0; - - if (type == 1) { offset = 0x197; idoffset = 0x190; } - if (IsThisWad(wadtiktmd) == true) - { - if (type == 1) tiktmdpos = GetTmdPos(wadtiktmd); - else tiktmdpos = GetTikPos(wadtiktmd); - } - - if (wadtiktmd[tiktmdpos + offset] == 0x01) - { - char idchar = Convert.ToChar(wadtiktmd[tiktmdpos + idoffset]); - char idchar2 = Convert.ToChar(wadtiktmd[tiktmdpos + idoffset + 1]); - - if (idchar == 'H') return "System Channel"; - else if (idchar == 'W') return "WiiWare"; - else - { - if (idchar == 'C') return "C64"; - else if (idchar == 'E' && idchar2 == 'A') return "NeoGeo"; - else if (idchar == 'E') return "VC - Arcade"; - else if (idchar == 'F') return "NES"; - else if (idchar == 'J') return "SNES"; - else if (idchar == 'L') return "Sega Master System"; - else if (idchar == 'M') return "Sega Genesis"; - else if (idchar == 'N') return "Nintendo 64"; - else if (idchar == 'P') return "Turbografx"; - else if (idchar == 'Q') return "Turbografx CD"; - else return "Channel Title"; - } - } - else return "Channel Title"; - } - - /// - /// Returns all information stored in the tmd for all contents in the wad file. - /// [x, 0] = Content ID, [x, 1] = Index, [x, 2] = Type, [x, 3] = Size, [x, 4] = Sha1 - /// - /// - /// - public static string[,] GetContentInfo(byte[] wadtmd) - { - int tmdpos = 0; - - if (IsThisWad(wadtmd) == true) { tmdpos = GetTmdPos(wadtmd); } - int contentcount = GetContentNum(wadtmd); - string[,] contentinfo = new string[contentcount, 5]; - - for (int i = 0; i < contentcount; i++) - { - contentinfo[i, 0] = wadtmd[tmdpos + 0x1e4 + (36 * i)].ToString("x2") + - wadtmd[tmdpos + 0x1e5 + (36 * i)].ToString("x2") + - wadtmd[tmdpos + 0x1e6 + (36 * i)].ToString("x2") + - wadtmd[tmdpos + 0x1e7 + (36 * i)].ToString("x2"); - contentinfo[i, 1] = "0000" + - wadtmd[tmdpos + 0x1e8 + (36 * i)].ToString("x2") + - wadtmd[tmdpos + 0x1e9 + (36 * i)].ToString("x2"); - contentinfo[i, 2] = wadtmd[tmdpos + 0x1ea + (36 * i)].ToString("x2") + - wadtmd[tmdpos + 0x1eb + (36 * i)].ToString("x2"); - contentinfo[i, 3] = Tools.HexStringToInt( - wadtmd[tmdpos + 0x1ec + (36 * i)].ToString("x2") + - wadtmd[tmdpos + 0x1ed + (36 * i)].ToString("x2") + - wadtmd[tmdpos + 0x1ee + (36 * i)].ToString("x2") + - wadtmd[tmdpos + 0x1ef + (36 * i)].ToString("x2") + - wadtmd[tmdpos + 0x1f0 + (36 * i)].ToString("x2") + - wadtmd[tmdpos + 0x1f1 + (36 * i)].ToString("x2") + - wadtmd[tmdpos + 0x1f2 + (36 * i)].ToString("x2") + - wadtmd[tmdpos + 0x1f3 + (36 * i)].ToString("x2")).ToString(); - - for (int j = 0; j < 20; j++) - { - contentinfo[i, 4] += wadtmd[tmdpos + 0x1f4 + (36 * i) + j].ToString("x2"); - } - } - - return contentinfo; - } - - /// - /// Returns the Tik of the wad file as a Byte-Array - /// - /// - /// - public static byte[] ReturnTik(byte[] wadfile) - { - int tikpos = GetTikPos(wadfile); - int tiksize = GetTikSize(wadfile); - - byte[] tik = new byte[tiksize]; - - for (int i = 0; i < tiksize; i++) - { - tik[i] = wadfile[tikpos + i]; - } - - return tik; - } - - /// - /// Returns the Tmd of the wad file as a Byte-Array - /// - /// - /// - public static byte[] ReturnTmd(byte[] wadfile) - { - int tmdpos = GetTmdPos(wadfile); - int tmdsize = GetTmdSize(wadfile); - - byte[] tmd = new byte[tmdsize]; - - for (int i = 0; i < tmdsize; i++) - { - tmd[i] = wadfile[tmdpos + i]; - } - - return tmd; - } - - /// - /// Checks, if the given file is a wad - /// - /// - /// - public static bool IsThisWad(byte[] wadtiktmd) - { - if (wadtiktmd[0] == 0x00 && - wadtiktmd[1] == 0x00 && - wadtiktmd[2] == 0x00 && - wadtiktmd[3] == 0x20 && - wadtiktmd[4] == 0x49 && - wadtiktmd[5] == 0x73) - { return true; } - - return false; - } - - /// - /// Returns the decrypted TitleKey - /// - /// - /// - public static byte[] GetTitleKey(byte[] wadtik) - { - byte[] commonkey = new byte[16]; - - if (File.Exists(System.Windows.Forms.Application.StartupPath + "\\common-key.bin")) - { commonkey = Tools.LoadFileToByteArray(System.Windows.Forms.Application.StartupPath + "\\common-key.bin"); } - else if (File.Exists(System.Windows.Forms.Application.StartupPath + "\\key.bin")) - { commonkey = Tools.LoadFileToByteArray(System.Windows.Forms.Application.StartupPath + "\\key.bin"); } - else { throw new FileNotFoundException("The (common-)key.bin must be in the application directory!"); } - - byte[] encryptedkey = new byte[16]; - byte[] iv = new byte[16]; - int tikpos = 0; - - if (IsThisWad(wadtik) == true) - { - //It's a wad file, so get the tik position - tikpos = GetTikPos(wadtik); - } - - for (int i = 0; i < 16; i++) - { - encryptedkey[i] = wadtik[tikpos + 0x1bf + i]; - } - - for (int j = 0; j < 8; j++) - { - iv[j] = wadtik[tikpos + 0x1dc + j]; - iv[j + 8] = 0x00; - } - - RijndaelManaged decrypt = new RijndaelManaged(); - decrypt.Mode = CipherMode.CBC; - decrypt.Padding = PaddingMode.None; - decrypt.KeySize = 128; - decrypt.BlockSize = 128; - decrypt.Key = commonkey; - decrypt.IV = iv; - - ICryptoTransform cryptor = decrypt.CreateDecryptor(); - - MemoryStream memory = new MemoryStream(encryptedkey); - CryptoStream crypto = new CryptoStream(memory, cryptor, CryptoStreamMode.Read); - - byte[] decryptedkey = new byte[16]; - crypto.Read(decryptedkey, 0, decryptedkey.Length); - - crypto.Close(); - memory.Close(); - - return decryptedkey; - } - } - - public class WadEdit - { - /// - /// Changes the region of the wad file - /// - /// - /// 0 = JAP, 1 = USA, 2 = EUR, 3 = FREE - /// - public static byte[] ChangeRegion(byte[] wadfile, int region) - { - - int tmdpos = WadInfo.GetTmdPos(wadfile); - - if (region == 0) wadfile[tmdpos + 0x19d] = 0x00; - else if (region == 1) wadfile[tmdpos + 0x19d] = 0x01; - else if (region == 2) wadfile[tmdpos + 0x19d] = 0x02; - else wadfile[tmdpos + 0x19d] = 0x03; - - wadfile = TruchaSign(wadfile, 1); - - return wadfile; - } - - /// - /// Changes the region of the wad file - /// - /// - /// - public static void ChangeRegion(string wadfile, int region) - { - byte[] wadarray = Tools.LoadFileToByteArray(wadfile); - wadarray = ChangeRegion(wadarray, region); - - using (FileStream fs = new FileStream(wadfile, FileMode.Open, FileAccess.Write)) - { - fs.Seek(0, SeekOrigin.Begin); - fs.Write(wadarray, 0, wadarray.Length); - } - } - - /// - /// Changes the Channel Title of the wad file - /// All languages have the same title - /// - /// - /// - /// - public static byte[] ChangeChannelTitle(byte[] wadfile, string title) - { - return ChangeChannelTitle(wadfile, title, title, title, title, title, title, title); - } - - /// - /// Changes the Channel Title of the wad file - /// Each language has a specific title - /// - /// - /// - /// - /// - /// - /// - /// - /// - public static void ChangeChannelTitle(string wadfile, string jap, string eng, string ger, string fra, string spa, string ita, string dut) - { - byte[] wadarray = Tools.LoadFileToByteArray(wadfile); - wadarray = ChangeChannelTitle(wadarray, jap, eng, ger, fra, spa, ita, dut); - - using (FileStream fs = new FileStream(wadfile, FileMode.Open, FileAccess.Write)) - { - fs.Seek(0, SeekOrigin.Begin); - fs.Write(wadarray, 0, wadarray.Length); - } - } - - /// - /// Changes the Channel Title of the wad file - /// Each language has a specific title - /// - /// - /// Japanese Title - /// English Title - /// German Title - /// French Title - /// Spanish Title - /// Italian Title - /// Dutch Title - /// - public static byte[] ChangeChannelTitle(byte[] wadfile, string jap, string eng, string ger, string fra, string spa, string ita, string dut) - { - Tools.ChangeProgress(0); - - char[] japchars = jap.ToCharArray(); - char[] engchars = eng.ToCharArray(); - char[] gerchars = ger.ToCharArray(); - char[] frachars = fra.ToCharArray(); - char[] spachars = spa.ToCharArray(); - char[] itachars = ita.ToCharArray(); - char[] dutchars = dut.ToCharArray(); - - byte[] titlekey = WadInfo.GetTitleKey(wadfile); - string[,] conts = WadInfo.GetContentInfo(wadfile); - int tmdpos = WadInfo.GetTmdPos(wadfile); - int tmdsize = WadInfo.GetTmdSize(wadfile); - int nullapp = 0; - int contentpos = 64 + Tools.AddPadding(WadInfo.GetCertSize(wadfile)) + Tools.AddPadding(WadInfo.GetTikSize(wadfile)) + Tools.AddPadding(WadInfo.GetTmdSize(wadfile)); - SHA1Managed sha1 = new SHA1Managed(); - - Tools.ChangeProgress(10); - - for (int i = 0; i < conts.GetLength(0); i++) - { - if (conts[i, 1] == "00000000") - { - nullapp = i; - break; - } - else - contentpos += Tools.AddPadding(Convert.ToInt32(conts[i, 3])); - } - - byte[] contenthandle = DecryptContent(wadfile, nullapp, titlekey); - - Tools.ChangeProgress(25); - - int imetpos = 0; - - for (int z = 0; z < 400; z++) - { - if (Convert.ToChar(contenthandle[z]) == 'I') - if (Convert.ToChar(contenthandle[z + 1]) == 'M') - if (Convert.ToChar(contenthandle[z + 2]) == 'E') - if (Convert.ToChar(contenthandle[z + 3]) == 'T') - { - imetpos = z; - break; - } - } - - Tools.ChangeProgress(40); - - int count = 0; - - for (int x = imetpos; x < imetpos + 40; x += 2) - { - if (japchars.Length > count) - { - contenthandle[x + 29] = BitConverter.GetBytes(japchars[count])[0]; - contenthandle[x + 30] = BitConverter.GetBytes(japchars[count])[1]; - } - else { contenthandle[x + 29] = 0x00; } - if (engchars.Length > count) - { - contenthandle[x + 29 + 84] = BitConverter.GetBytes(engchars[count])[0]; - contenthandle[x + 29 + 84 - 1] = BitConverter.GetBytes(engchars[count])[1]; - } - else { contenthandle[x + 29 + 84] = 0x00; } - if (gerchars.Length > count) - { - contenthandle[x + 29 + 84 * 2] = BitConverter.GetBytes(gerchars[count])[0]; - contenthandle[x + 29 + 84 * 2 - 1] = BitConverter.GetBytes(gerchars[count])[1]; - } - else { contenthandle[x + 29 + 84 * 2] = 0x00; } - if (frachars.Length > count) - { - contenthandle[x + 29 + 84 * 3] = BitConverter.GetBytes(frachars[count])[0]; - contenthandle[x + 29 + 84 * 3 - 1] = BitConverter.GetBytes(frachars[count])[1]; - } - else { contenthandle[x + 29 + 84 * 3] = 0x00; } - if (spachars.Length > count) - { - contenthandle[x + 29 + 84 * 4] = BitConverter.GetBytes(spachars[count])[0]; - contenthandle[x + 29 + 84 * 4 - 1] = BitConverter.GetBytes(spachars[count])[1]; - } - else { contenthandle[x + 29 + 84 * 4] = 0x00; } - if (itachars.Length > count) - { - contenthandle[x + 29 + 84 * 5] = BitConverter.GetBytes(itachars[count])[0]; - contenthandle[x + 29 + 84 * 5 - 1] = BitConverter.GetBytes(itachars[count])[1]; - } - else { contenthandle[x + 29 + 84 * 5] = 0x00; } - if (dutchars.Length > count) - { - contenthandle[x + 29 + 84 * 6] = BitConverter.GetBytes(dutchars[count])[0]; - contenthandle[x + 29 + 84 * 6 - 1] = BitConverter.GetBytes(dutchars[count])[1]; - } - else { contenthandle[x + 29 + 84 * 6] = 0x00; } - - count++; - } - - Tools.ChangeProgress(50); - - byte[] newmd5 = new byte[16]; - contenthandle = FixMD5InImet(contenthandle, out newmd5); - byte[] newsha = sha1.ComputeHash(contenthandle); - - contenthandle = EncryptContent(contenthandle, WadInfo.ReturnTmd(wadfile), nullapp, titlekey, false); - - Tools.ChangeProgress(70); - - for (int y = 0; y < contenthandle.Length; y++) - { - wadfile[contentpos + y] = contenthandle[y]; - } - - //SHA1 in TMD - byte[] tmd = Tools.GetPartOfByteArray(wadfile, tmdpos, tmdsize); - for (int i = 0; i < 20; i++) - tmd[0x1f4 + (36 * nullapp) + i] = newsha[i]; - TruchaSign(tmd, 1); - wadfile = Tools.InsertByteArray(wadfile, tmd, tmdpos); - - int footer = WadInfo.GetFooterSize(wadfile); - - Tools.ChangeProgress(80); - - if (footer > 0) - { - int footerpos = wadfile.Length - footer; - int imetposfoot = 0; - - for (int z = 0; z < 200; z++) - { - if (Convert.ToChar(wadfile[footerpos + z]) == 'I') - if (Convert.ToChar(wadfile[footerpos + z + 1]) == 'M') - if (Convert.ToChar(wadfile[footerpos + z + 2]) == 'E') - if (Convert.ToChar(wadfile[footerpos + z + 3]) == 'T') - { - imetposfoot = footerpos + z; - break; - } - } - - Tools.ChangeProgress(90); - - int count2 = 0; - - for (int x = imetposfoot; x < imetposfoot + 40; x += 2) - { - if (japchars.Length > count2) { wadfile[x + 29] = Convert.ToByte(japchars[count2]); } - else { wadfile[x + 29] = 0x00; } - if (engchars.Length > count2) { wadfile[x + 29 + 84] = Convert.ToByte(engchars[count2]); } - else { wadfile[x + 29 + 84] = 0x00; } - if (gerchars.Length > count2) { wadfile[x + 29 + 84 * 2] = Convert.ToByte(gerchars[count2]); } - else { wadfile[x + 29 + 84 * 2] = 0x00; } - if (frachars.Length > count2) { wadfile[x + 29 + 84 * 3] = Convert.ToByte(frachars[count2]); } - else { wadfile[x + 29 + 84 * 3] = 0x00; } - if (spachars.Length > count2) { wadfile[x + 29 + 84 * 4] = Convert.ToByte(spachars[count2]); } - else { wadfile[x + 29 + 84 * 4] = 0x00; } - if (itachars.Length > count2) { wadfile[x + 29 + 84 * 5] = Convert.ToByte(itachars[count2]); } - else { wadfile[x + 29 + 84 * 5] = 0x00; } - if (dutchars.Length > count2) { wadfile[x + 29 + 84 * 6] = Convert.ToByte(dutchars[count2]); } - else { wadfile[x + 29 + 84 * 6] = 0x00; } - - count2++; - } - - for (int i = 0; i < 16; i++) - wadfile[imetposfoot + 1456 + i] = newmd5[i]; - } - - Tools.ChangeProgress(100); - return wadfile; - } - - /// - /// Changes the Title ID in the Tik or Tmd file - /// - /// - /// 0 = Tik, 1 = Tmd - /// - public static void ChangeTitleID(string tiktmdfile, int type, string titleid) - { - byte[] temp = Tools.LoadFileToByteArray(tiktmdfile); - temp = ChangeTitleID(temp, type, titleid); - Tools.SaveFileFromByteArray(temp, tiktmdfile); - } - - /// - /// Changes the Title ID in the Tik or Tmd file - /// - /// - /// 0 = Tik, 1 = Tmd - /// - public static byte[] ChangeTitleID(byte[] tiktmd, int type, string titleid) - { - int offset = 0x1e0; - if (type == 1) offset = 0x190; - char[] id = titleid.ToCharArray(); - - tiktmd[offset] = (byte)id[0]; - tiktmd[offset + 1] = (byte)id[1]; - tiktmd[offset + 2] = (byte)id[2]; - tiktmd[offset + 3] = (byte)id[3]; - - tiktmd = TruchaSign(tiktmd, type); - - return tiktmd; - } - - /// - /// Changes the title ID of the wad file - /// - /// - /// - /// - public static byte[] ChangeTitleID(byte[] wadfile, string titleid) - { - Tools.ChangeProgress(0); - - int tikpos = WadInfo.GetTikPos(wadfile); - int tmdpos = WadInfo.GetTmdPos(wadfile); - char[] id = titleid.ToCharArray(); - - byte[] oldtitlekey = WadInfo.GetTitleKey(wadfile); - - Tools.ChangeProgress(20); - - //Change the ID in the ticket - wadfile[tikpos + 0x1e0] = (byte)id[0]; - wadfile[tikpos + 0x1e1] = (byte)id[1]; - wadfile[tikpos + 0x1e2] = (byte)id[2]; - wadfile[tikpos + 0x1e3] = (byte)id[3]; - - //Change the ID in the tmd - wadfile[tmdpos + 0x190] = (byte)id[0]; - wadfile[tmdpos + 0x191] = (byte)id[1]; - wadfile[tmdpos + 0x192] = (byte)id[2]; - wadfile[tmdpos + 0x193] = (byte)id[3]; - - Tools.ChangeProgress(40); - - //Trucha-Sign both - wadfile = TruchaSign(wadfile, 0); - - Tools.ChangeProgress(50); - - wadfile = TruchaSign(wadfile, 1); - - Tools.ChangeProgress(60); - - byte[] newtitlekey = WadInfo.GetTitleKey(wadfile); - byte[] tmd = WadInfo.ReturnTmd(wadfile); - - int contentcount = WadInfo.GetContentNum(wadfile); - - wadfile = ReEncryptAllContents(wadfile, oldtitlekey, newtitlekey); - - Tools.ChangeProgress(100); - return wadfile; - } - - /// - /// Changes the title ID of the wad file - /// - /// - /// - public static void ChangeTitleID(string wadfile, string titleid) - { - byte[] wadarray = Tools.LoadFileToByteArray(wadfile); - wadarray = ChangeTitleID(wadarray, titleid); - - using (FileStream fs = new FileStream(wadfile, FileMode.Open, FileAccess.Write)) - { - fs.Seek(0, SeekOrigin.Begin); - fs.Write(wadarray, 0, wadarray.Length); - } - } - - /// - /// Clears the Signature of the Tik / Tmd to 0x00 - /// - /// Wad, Tik or Tmd - /// 0 = Tik, 1 = Tmd - /// - public static byte[] ClearSignature(byte[] wadtiktmd, int type) - { - int tmdtikpos = 0; - int tmdtiksize = wadtiktmd.Length; ; - - if (WadInfo.IsThisWad(wadtiktmd) == true) - { - //It's a wad file, so get the tik or tmd position and length - switch (type) - { - case 1: - tmdtikpos = WadInfo.GetTmdPos(wadtiktmd); - tmdtiksize = WadInfo.GetTmdSize(wadtiktmd); - break; - default: - tmdtikpos = WadInfo.GetTikPos(wadtiktmd); - tmdtiksize = WadInfo.GetTikSize(wadtiktmd); - break; - } - } - - for (int i = 4; i < 260; i++) - { - wadtiktmd[tmdtikpos + i] = 0x00; - } - - return wadtiktmd; - } - - /// - /// Trucha-Signs the Tik or Tmd - /// - /// Wad or Tik or Tmd - /// 0 = Tik, 1 = Tmd - /// - public static void TruchaSign(string file, int type) - { - byte[] temp = Tools.LoadFileToByteArray(file); - temp = TruchaSign(temp, type); - Tools.SaveFileFromByteArray(temp, file); - } - - /// - /// Trucha-Signs the Tik or Tmd - /// - /// Wad or Tik or Tmd - /// 0 = Tik, 1 = Tmd - /// - public static byte[] TruchaSign(byte[] wadtiktmd, int type) - { - SHA1Managed sha = new SHA1Managed(); - int[] position = new int[2] { 0x1f1, 0x1d4 }; //0x104 0x1c1 - int[] tosign = new int[2] { 0x140, 0x140 }; //0x104 0x140 - int tiktmdpos = 0; - int tiktmdsize = wadtiktmd.Length; - - if (sha.ComputeHash(wadtiktmd, tiktmdpos + tosign[type], tiktmdsize - tosign[type])[0] != 0x00) - { - ClearSignature(wadtiktmd, type); - - if (WadInfo.IsThisWad(wadtiktmd) == true) - { - //It's a wad file - if (type == 0) //Get Tik position and size - { - tiktmdpos = WadInfo.GetTikPos(wadtiktmd); - tiktmdsize = WadInfo.GetTikSize(wadtiktmd); - } - else //Get Tmd position and size - { - tiktmdpos = WadInfo.GetTmdPos(wadtiktmd); - tiktmdsize = WadInfo.GetTmdSize(wadtiktmd); - } - } - - byte[] sha1 = new byte[20]; - - for (UInt16 i = 0; i < 65535; i++) - { - byte[] hex = BitConverter.GetBytes(i); - wadtiktmd[tiktmdpos + position[type]] = hex[0]; - wadtiktmd[tiktmdpos + position[type] + 1] = hex[1]; - - sha1 = sha.ComputeHash(wadtiktmd, tiktmdpos + tosign[type], tiktmdsize - tosign[type]); - if (sha1[0] == 0x00) break; - } - - return wadtiktmd; - } - else return wadtiktmd; - } - - /// - /// Decrypts the given content - /// - /// - /// - public static byte[] DecryptContent(byte[] wadfile, int contentcount, byte[] titlekey) - { - int tmdpos = WadInfo.GetTmdPos(wadfile); - byte[] iv = new byte[16]; - string[,] continfo = WadInfo.GetContentInfo(wadfile); - int contentsize = Convert.ToInt32(continfo[contentcount, 3]); - int paddedsize = Tools.AddPadding(contentsize, 16); - - int contentpos = 64 + Tools.AddPadding(WadInfo.GetCertSize(wadfile)) + Tools.AddPadding(WadInfo.GetTikSize(wadfile)) + Tools.AddPadding(WadInfo.GetTmdSize(wadfile)); - - for (int x = 0; x < contentcount; x++) - { - contentpos += Tools.AddPadding(Convert.ToInt32(continfo[x, 3])); - } - - iv[0] = wadfile[tmdpos + 0x1e8 + (0x24 * contentcount)]; - iv[1] = wadfile[tmdpos + 0x1e9 + (0x24 * contentcount)]; - - RijndaelManaged decrypt = new RijndaelManaged(); - decrypt.Mode = CipherMode.CBC; - decrypt.Padding = PaddingMode.None; - decrypt.KeySize = 128; - decrypt.BlockSize = 128; - decrypt.Key = titlekey; - decrypt.IV = iv; - - ICryptoTransform cryptor = decrypt.CreateDecryptor(); - - MemoryStream memory = new MemoryStream(wadfile, contentpos, paddedsize); - CryptoStream crypto = new CryptoStream(memory, cryptor, CryptoStreamMode.Read); - - bool fullread = false; - byte[] buffer = new byte[16384]; - byte[] cont = new byte[1]; - - using (MemoryStream ms = new MemoryStream()) - { - while (fullread == false) - { - int len = 0; - if ((len = crypto.Read(buffer, 0, buffer.Length)) <= 0) - { - fullread = true; - cont = ms.ToArray(); - } - ms.Write(buffer, 0, len); - } - } - - memory.Close(); - crypto.Close(); - - Array.Resize(ref cont, contentsize); - - return cont; - } - - /// - /// Decrypts the given content - /// - /// - /// - /// - /// - /// - public static byte[] DecryptContent(byte[] content, byte[] tmd, int contentcount, byte[] titlekey) - { - byte[] iv = new byte[16]; - string[,] continfo = WadInfo.GetContentInfo(tmd); - int contentsize = content.Length; - int paddedsize = Tools.AddPadding(contentsize, 16); - Array.Resize(ref content, paddedsize); - - iv[0] = tmd[0x1e8 + (0x24 * contentcount)]; - iv[1] = tmd[0x1e9 + (0x24 * contentcount)]; - - RijndaelManaged decrypt = new RijndaelManaged(); - decrypt.Mode = CipherMode.CBC; - decrypt.Padding = PaddingMode.None; - decrypt.KeySize = 128; - decrypt.BlockSize = 128; - decrypt.Key = titlekey; - decrypt.IV = iv; - - ICryptoTransform cryptor = decrypt.CreateDecryptor(); - - MemoryStream memory = new MemoryStream(content, 0, paddedsize); - CryptoStream crypto = new CryptoStream(memory, cryptor, CryptoStreamMode.Read); - - bool fullread = false; - byte[] buffer = new byte[memory.Length]; - byte[] cont = new byte[1]; - - using (MemoryStream ms = new MemoryStream()) - { - while (fullread == false) - { - int len = 0; - if ((len = crypto.Read(buffer, 0, buffer.Length)) <= 0) - { - fullread = true; - cont = ms.ToArray(); - } - ms.Write(buffer, 0, len); - } - } - - memory.Close(); - crypto.Close(); - - return cont; - } - - /// - /// Encrypts the given content and adds a padding to the next 64 bytes - /// - /// - /// - /// - /// - /// - public static byte[] EncryptContent(byte[] content, byte[] tmd, int contentcount, byte[] titlekey, bool addpadding) - { - byte[] iv = new byte[16]; - string[,] continfo = WadInfo.GetContentInfo(tmd); - int contentsize = content.Length; - int paddedsize = Tools.AddPadding(contentsize, 16); - Array.Resize(ref content, paddedsize); - - iv[0] = tmd[0x1e8 + (0x24 * contentcount)]; - iv[1] = tmd[0x1e9 + (0x24 * contentcount)]; - - RijndaelManaged encrypt = new RijndaelManaged(); - encrypt.Mode = CipherMode.CBC; - encrypt.Padding = PaddingMode.None; - encrypt.KeySize = 128; - encrypt.BlockSize = 128; - encrypt.Key = titlekey; - encrypt.IV = iv; - - ICryptoTransform cryptor = encrypt.CreateEncryptor(); - - MemoryStream memory = new MemoryStream(content, 0, paddedsize); - CryptoStream crypto = new CryptoStream(memory, cryptor, CryptoStreamMode.Read); - - bool fullread = false; - byte[] buffer = new byte[memory.Length]; - byte[] cont = new byte[1]; - - using (MemoryStream ms = new MemoryStream()) - { - while (fullread == false) - { - int len = 0; - if ((len = crypto.Read(buffer, 0, buffer.Length)) <= 0) - { - fullread = true; - cont = ms.ToArray(); - } - ms.Write(buffer, 0, len); - } - } - - memory.Close(); - crypto.Close(); - - if (addpadding == true) { Array.Resize(ref cont, Tools.AddPadding(cont.Length)); } - return cont; - } - - /// - /// Re-Encrypts the given content - /// - /// - /// - public static byte[] ReEncryptAllContents(byte[] wadfile, byte[] oldtitlekey, byte[] newtitlekey) - { - int contentnum = WadInfo.GetContentNum(wadfile); - int certsize = WadInfo.GetCertSize(wadfile); - int tiksize = WadInfo.GetTikSize(wadfile); - int tmdsize = WadInfo.GetTmdSize(wadfile); - int contentpos = 64 + Tools.AddPadding(certsize) + Tools.AddPadding(tiksize) + Tools.AddPadding(tmdsize); - - for (int i = 0; i < contentnum; i++) - { - byte[] tmd = WadInfo.ReturnTmd(wadfile); - byte[] decryptedcontent = DecryptContent(wadfile, i, oldtitlekey); - byte[] encryptedcontent = EncryptContent(decryptedcontent, tmd, i, newtitlekey, false); - - for (int j = 0; j < encryptedcontent.Length; j++) - { - wadfile[contentpos + j] = encryptedcontent[j]; - } - contentpos += Tools.AddPadding(encryptedcontent.Length); - } - - return wadfile; - } - - /// - /// Fixes the MD5 Sum in the IMET Header - /// - /// - /// - public static byte[] FixMD5InImet(byte[] file, out byte[] newmd5) - { - if (Convert.ToChar(file[128]) == 'I' && - Convert.ToChar(file[129]) == 'M' && - Convert.ToChar(file[130]) == 'E' && - Convert.ToChar(file[131]) == 'T') - { - byte[] buffer = new byte[1536]; - - using (MemoryStream ms = new MemoryStream()) - { - ms.Write(file, 0x40, 1536); - buffer = ms.ToArray(); - } - - for (int i = 0; i < 16; i++) - buffer[1520 + i] = 0x00; - - MD5 md5 = new MD5CryptoServiceProvider(); - byte[] hash = md5.ComputeHash(buffer); - - for (int i = 0; i < 16; i++) - file[1584 + i] = hash[i]; - - newmd5 = hash; - return file; - } - else - { - byte[] oldmd5 = new byte[16]; - - using (MemoryStream ms = new MemoryStream()) - { - ms.Write(file, 1584, 16); - oldmd5 = ms.ToArray(); - } - - newmd5 = oldmd5; - return file; - } - } - - /// - /// Fixes the MD5 Sum in the IMET Header. - /// - /// - /// - public static byte[] FixMD5InImet(byte[] file) - { - byte[] tmp = new byte[16]; - return FixMD5InImet(file, out tmp); - } - - /// - /// Updates the Content Info in the Tmd. - /// Tmd and Contents must be in the same Directory - /// - /// - public static void UpdateTmdContents(string tmdfile) - { - FileStream tmd = new FileStream(tmdfile, FileMode.Open, FileAccess.ReadWrite); - - tmd.Seek(0x1de, SeekOrigin.Begin); - int contentcount = Tools.HexStringToInt(tmd.ReadByte().ToString("x2") + tmd.ReadByte().ToString("x2")); - - for (int i = 0; i < contentcount; i++) - { - int oldsize = 0; - int contentpos = 0x1e4 + (36 * i); - - tmd.Seek(contentpos + 4, SeekOrigin.Begin); - string index = "0000" + tmd.ReadByte().ToString("x2") + tmd.ReadByte().ToString("x2"); - - tmd.Seek(contentpos + 8, SeekOrigin.Begin); - try - { - oldsize = Tools.HexStringToInt(tmd.ReadByte().ToString("x2") + - tmd.ReadByte().ToString("x2") + - tmd.ReadByte().ToString("x2") + - tmd.ReadByte().ToString("x2") + - tmd.ReadByte().ToString("x2") + - tmd.ReadByte().ToString("x2") + - tmd.ReadByte().ToString("x2") + - tmd.ReadByte().ToString("x2")); - } - catch { } - - byte[] oldsha1 = new byte[20]; - tmd.Read(oldsha1, 0, oldsha1.Length); - - if (File.Exists(tmdfile.Remove(tmdfile.LastIndexOf('\\') + 1) + index + ".app")) - { - byte[] content = Wii.Tools.LoadFileToByteArray(tmdfile.Remove(tmdfile.LastIndexOf('\\') + 1) + index + ".app"); - int newsize = content.Length; - - if (newsize != oldsize) - { - byte[] changedsize = Tools.FileLengthToByteArray(newsize); - - tmd.Seek(contentpos + 8, SeekOrigin.Begin); - for (int x = 8; x > changedsize.Length; x--) tmd.WriteByte(0x00); - tmd.Write(changedsize, 0, changedsize.Length); - } - - SHA1Managed sha1 = new SHA1Managed(); - byte[] newsha1 = sha1.ComputeHash(content); - sha1.Clear(); - - if (Tools.CompareByteArrays(newsha1, oldsha1) == false) - { - tmd.Seek(contentpos + 16, SeekOrigin.Begin); - tmd.Write(newsha1, 0, newsha1.Length); - } - } - else - { - throw new Exception("At least one content file wasn't found!"); - } - } - - tmd.Close(); - } - - /// - /// Changes the Boot Index in the Tmd to the given value - /// - /// - /// - public static byte[] ChangeTmdBootIndex(byte[] wadtmd, int newindex) - { - int tmdpos = 0; - - if (WadInfo.IsThisWad(wadtmd) == true) - tmdpos = WadInfo.GetTmdPos(wadtmd); - - byte[] index = BitConverter.GetBytes((UInt16)newindex); - wadtmd[tmdpos + 0x1e0] = index[1]; - wadtmd[tmdpos + 0x1e1] = index[0]; - - return wadtmd; - } - - /// - /// Changes the Content Count in the Tmd - /// - /// - /// - /// - public static byte[] ChangeTmdContentCount(byte[] wadtmd, int newcount) - { - int tmdpos = 0; - - if (WadInfo.IsThisWad(wadtmd) == true) - tmdpos = WadInfo.GetTmdPos(wadtmd); - - byte[] count = BitConverter.GetBytes((UInt16)newcount); - wadtmd[tmdpos + 0x1de] = count[1]; - wadtmd[tmdpos + 0x1df] = count[0]; - - return wadtmd; - } - - /// - /// Changes the Slot where the IOS Wad will be installed to - /// - /// - /// - /// - public static byte[] ChangeIosSlot(byte[] wadfile, int newslot) - { - Tools.ChangeProgress(0); - - int tikpos = WadInfo.GetTikPos(wadfile); - int tmdpos = WadInfo.GetTmdPos(wadfile); - byte[] slot = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(newslot)); - - byte[] oldtitlekey = WadInfo.GetTitleKey(wadfile); - - Tools.ChangeProgress(20); - - //Change the ID in the ticket - wadfile[tikpos + 0x1e0] = slot[0]; - wadfile[tikpos + 0x1e1] = slot[1]; - wadfile[tikpos + 0x1e2] = slot[2]; - wadfile[tikpos + 0x1e3] = slot[3]; - - //Change the ID in the tmd - wadfile[tmdpos + 0x190] = slot[0]; - wadfile[tmdpos + 0x191] = slot[1]; - wadfile[tmdpos + 0x192] = slot[2]; - wadfile[tmdpos + 0x193] = slot[3]; - - Tools.ChangeProgress(40); - - //Trucha-Sign both - wadfile = TruchaSign(wadfile, 0); - - Tools.ChangeProgress(50); - - wadfile = TruchaSign(wadfile, 1); - - Tools.ChangeProgress(60); - - byte[] newtitlekey = WadInfo.GetTitleKey(wadfile); - byte[] tmd = WadInfo.ReturnTmd(wadfile); - - int contentcount = WadInfo.GetContentNum(wadfile); - - wadfile = ReEncryptAllContents(wadfile, oldtitlekey, newtitlekey); - - Tools.ChangeProgress(100); - return wadfile; - } - - /// - /// Changes the Title Version of a Wad or Tmd - /// - /// - /// - /// - public static byte[] ChangeTitleVersion(byte[] wadtmd, int newversion) - { - if (newversion > 65535) throw new Exception("Version can be max. 65535"); - - int offset = 0x1dc; - int tmdpos = 0; - - if (WadInfo.IsThisWad(wadtmd)) - tmdpos = WadInfo.GetTmdPos(wadtmd); - - byte[] version = BitConverter.GetBytes((UInt16)newversion); - Array.Reverse(version); - - wadtmd[tmdpos + offset] = version[0]; - wadtmd[tmdpos + offset + 1] = version[1]; - - wadtmd = TruchaSign(wadtmd, 1); - - return wadtmd; - } - } - - public class WadUnpack - { - /// - /// Unpacks the 00000000.app of a wad - /// - /// - /// - public static void UnpackNullApp(string wadfile, string destination) - { - if (!destination.EndsWith(".app")) destination += "\\00000000.app"; - - byte[] wad = Tools.LoadFileToByteArray(wadfile); - byte[] nullapp = UnpackNullApp(wad); - Tools.SaveFileFromByteArray(nullapp, destination); - } - - /// - /// Unpacks the 00000000.app of a wad - /// - /// - /// - public static byte[] UnpackNullApp(byte[] wadfile) - { - int certsize = WadInfo.GetCertSize(wadfile); - int tiksize = WadInfo.GetTikSize(wadfile); - int tmdpos = WadInfo.GetTmdPos(wadfile); - int tmdsize = WadInfo.GetTmdSize(wadfile); - int contentpos = 64 + Tools.AddPadding(certsize) + Tools.AddPadding(tiksize) + Tools.AddPadding(tmdsize); - - byte[] titlekey = WadInfo.GetTitleKey(wadfile); - string[,] contents = WadInfo.GetContentInfo(wadfile); - - for (int i = 0; i < contents.GetLength(0); i++) - { - if (contents[i, 1] == "00000000") - { - return WadEdit.DecryptContent(wadfile, i, titlekey); - } - } - - throw new Exception("00000000.app couldn't be found in the Wad"); - } - - /// - /// Unpacks the the wad file - /// - public static void UnpackWad(string pathtowad, string destinationpath) - { - byte[] wadfile = Tools.LoadFileToByteArray(pathtowad); - UnpackWad(wadfile, destinationpath); - } - - /// - /// Unpacks the the wad file - /// - public static void UnpackWad(string pathtowad, string destinationpath, out bool hashesmatch) - { - byte[] wadfile = Tools.LoadFileToByteArray(pathtowad); - UnpackWad(wadfile, destinationpath, out hashesmatch); - } - - /// - /// Unpacks the wad file to *wadpath*\wadunpack\ - /// - /// - public static void UnpackWad(string pathtowad) - { - string destinationpath = pathtowad.Remove(pathtowad.LastIndexOf('\\')); - byte[] wadfile = Tools.LoadFileToByteArray(pathtowad); - UnpackWad(wadfile, destinationpath); - } - - /// - /// Unpacks the wad file - /// - public static void UnpackWad(byte[] wadfile, string destinationpath) - { - bool temp; - UnpackWad(wadfile, destinationpath, out temp); - } - - /// - /// Unpacks the wad file - /// - public static void UnpackWad(byte[] wadfile, string destinationpath, out bool hashesmatch) - { - if (destinationpath[destinationpath.Length - 1] != '\\') - { destinationpath = destinationpath + "\\"; } - - hashesmatch = true; - - if (!Directory.Exists(destinationpath)) - { Directory.CreateDirectory(destinationpath); } - if (Directory.GetFiles(destinationpath, "*.app").Length > 0) - { - throw new Exception("At least one of the files to unpack already exists!"); - } - - int certpos = 0x40; - int certsize = WadInfo.GetCertSize(wadfile); - int tikpos = WadInfo.GetTikPos(wadfile); - int tiksize = WadInfo.GetTikSize(wadfile); - int tmdpos = WadInfo.GetTmdPos(wadfile); - int tmdsize = WadInfo.GetTmdSize(wadfile); - int contentlength = WadInfo.GetContentSize(wadfile); - int footersize = WadInfo.GetFooterSize(wadfile); - int footerpos = 64 + Tools.AddPadding(certsize) + Tools.AddPadding(tiksize) + Tools.AddPadding(tmdsize) + Tools.AddPadding(contentlength); - string wadpath = WadInfo.GetNandPath(wadfile, 0).Remove(8, 1); - string[,] contents = WadInfo.GetContentInfo(wadfile); - byte[] titlekey = WadInfo.GetTitleKey(wadfile); - int contentpos = 64 + Tools.AddPadding(certsize) + Tools.AddPadding(tiksize) + Tools.AddPadding(tmdsize); - - //unpack cert - using (FileStream cert = new FileStream(destinationpath + wadpath + ".cert", FileMode.Create)) - { - cert.Seek(0, SeekOrigin.Begin); - cert.Write(wadfile, certpos, certsize); - } - - //unpack ticket - using (FileStream tik = new FileStream(destinationpath + wadpath + ".tik", FileMode.Create)) - { - tik.Seek(0, SeekOrigin.Begin); - tik.Write(wadfile, tikpos, tiksize); - } - - //unpack tmd - using (FileStream tmd = new FileStream(destinationpath + wadpath + ".tmd", FileMode.Create)) - { - tmd.Seek(0, SeekOrigin.Begin); - tmd.Write(wadfile, tmdpos, tmdsize); - } - - //unpack trailer - try - { - if (footersize > 0) - { - using (FileStream trailer = new FileStream(destinationpath + wadpath + ".trailer", FileMode.Create)) - { - trailer.Seek(0, SeekOrigin.Begin); - trailer.Write(wadfile, footerpos, footersize); - } - } - } - catch { } //who cares if the trailer doesn't extract properly? - - Tools.ChangeProgress(0); - - //unpack contents - for (int i = 0; i < contents.GetLength(0); i++) - { - Tools.ChangeProgress((i + 1) * 100 / contents.GetLength(0)); - byte[] thiscontent = WadEdit.DecryptContent(wadfile, i, titlekey); - FileStream content = new FileStream(destinationpath + contents[i, 1] + ".app", FileMode.Create); - - content.Write(thiscontent, 0, thiscontent.Length); - content.Close(); - - contentpos += Tools.AddPadding(thiscontent.Length); - - //sha1 comparison - SHA1Managed sha1 = new SHA1Managed(); - byte[] thishash = sha1.ComputeHash(thiscontent); - byte[] tmdhash = Tools.HexStringToByteArray(contents[i, 4]); - - if (Tools.CompareByteArrays(thishash, tmdhash) == false) hashesmatch = false; - // throw new Exception("At least one content's hash doesn't match the hash in the Tmd!"); - } - } - - /// - /// Unpacks the wad file to the given directory. - /// Shared contents will be unpacked to /shared1 - /// - /// - /// - public static void UnpackToNand(string wadfile, string nandpath) - { - byte[] wadarray = Tools.LoadFileToByteArray(wadfile); - UnpackToNand(wadarray, nandpath); - } - - /// - /// Unpacks the wad file to the given directory. - /// Shared contents will be unpacked to /shared1 - /// - /// - /// - public static void UnpackToNand(byte[] wadfile, string nandpath) - { - string path = WadInfo.GetNandPath(wadfile, 0); - string path1 = path.Remove(path.IndexOf('\\')); - string path2 = path.Remove(0, path.IndexOf('\\') + 1); - - if (nandpath[nandpath.Length - 1] != '\\') { nandpath = nandpath + "\\"; } - - if (!Directory.Exists(nandpath + "ticket")) { Directory.CreateDirectory(nandpath + "ticket"); } - if (!Directory.Exists(nandpath + "title")) { Directory.CreateDirectory(nandpath + "title"); } - if (!Directory.Exists(nandpath + "ticket\\" + path1)) { Directory.CreateDirectory(nandpath + "ticket\\" + path1); } - if (!Directory.Exists(nandpath + "title\\" + path1)) { Directory.CreateDirectory(nandpath + "title\\" + path1); } - if (!Directory.Exists(nandpath + "title\\" + path1 + "\\" + path2)) { Directory.CreateDirectory(nandpath + "title\\" + path1 + "\\" + path2); } - if (!Directory.Exists(nandpath + "title\\" + path1 + "\\" + path2 + "\\content")) { Directory.CreateDirectory(nandpath + "title\\" + path1 + "\\" + path2 + "\\content"); } - if (!Directory.Exists(nandpath + "title\\" + path1 + "\\" + path2 + "\\data")) { Directory.CreateDirectory(nandpath + "title\\" + path1 + "\\" + path2 + "\\data"); } - if (!Directory.Exists(nandpath + "shared1")) Directory.CreateDirectory(nandpath + "shared1"); - - int certsize = WadInfo.GetCertSize(wadfile); - int tikpos = WadInfo.GetTikPos(wadfile); - int tiksize = WadInfo.GetTikSize(wadfile); - int tmdpos = WadInfo.GetTmdPos(wadfile); - int tmdsize = WadInfo.GetTmdSize(wadfile); - int contentlength = WadInfo.GetContentSize(wadfile); - string[,] contents = WadInfo.GetContentInfo(wadfile); - byte[] titlekey = WadInfo.GetTitleKey(wadfile); - int contentpos = 64 + Tools.AddPadding(certsize) + Tools.AddPadding(tiksize) + Tools.AddPadding(tmdsize); - - //unpack ticket - using (FileStream tik = new FileStream(nandpath + "ticket\\" + path1 + "\\" + path2 + ".tik", FileMode.Create)) - { - tik.Seek(0, SeekOrigin.Begin); - tik.Write(wadfile, tikpos, tiksize); - } - - //unpack tmd - using (FileStream tmd = new FileStream(nandpath + "title\\" + path1 + "\\" + path2 + "\\content\\title.tmd", FileMode.Create)) - { - tmd.Seek(0, SeekOrigin.Begin); - tmd.Write(wadfile, tmdpos, tmdsize); - } - - Tools.ChangeProgress(0); - - //unpack contents - for (int i = 0; i < contents.GetLength(0); i++) - { - Tools.ChangeProgress((i + 1) * 100 / contents.GetLength(0)); - byte[] thiscontent = WadEdit.DecryptContent(wadfile, i, titlekey); - - if (contents[i, 2] == "8001") - { - if (File.Exists(nandpath + "shared1\\content.map")) - { - byte[] contmap = Tools.LoadFileToByteArray(nandpath + "shared1\\content.map"); - - if (ContentMap.CheckSharedContent(contmap, contents[i, 4]) == false) - { - string newname = ContentMap.GetNewSharedContentName(contmap); - - FileStream content = new FileStream(nandpath + "shared1\\" + newname + ".app", FileMode.Create); - content.Write(thiscontent, 0, thiscontent.Length); - content.Close(); - ContentMap.AddSharedContent(nandpath + "shared1\\content.map", newname, contents[i, 4]); - } - } - else - { - FileStream content = new FileStream(nandpath + "shared1\\00000000.app", FileMode.Create); - content.Write(thiscontent, 0, thiscontent.Length); - content.Close(); - ContentMap.AddSharedContent(nandpath + "shared1\\content.map", "00000000", contents[i, 4]); - } - } - else - { - FileStream content = new FileStream(nandpath + "title\\" + path1 + "\\" + path2 + "\\content\\" + contents[i, 0] + ".app", FileMode.Create); - - content.Write(thiscontent, 0, thiscontent.Length); - content.Close(); - } - - contentpos += Tools.AddPadding(thiscontent.Length); - } - - //add titleid to uid.sys, if it doesn't exist - string titleid = WadInfo.GetFullTitleID(wadfile, 1); - - if (File.Exists(nandpath + "\\sys\\uid.sys")) - { - FileStream fs = new FileStream(nandpath + "\\sys\\uid.sys", FileMode.Open); - byte[] uidsys = new byte[fs.Length]; - fs.Read(uidsys, 0, uidsys.Length); - fs.Close(); - - if (UID.CheckUID(uidsys, titleid) == false) - { - uidsys = UID.AddUID(uidsys, titleid); - Tools.SaveFileFromByteArray(uidsys, nandpath + "\\sys\\uid.sys"); - } - } - else - { - if (!Directory.Exists(nandpath + "\\sys")) Directory.CreateDirectory(nandpath + "\\sys"); - byte[] uidsys = UID.AddUID(new byte[0], titleid); - Tools.SaveFileFromByteArray(uidsys, nandpath + "\\sys\\uid.sys"); - } - } - } - - public class WadPack - { - public static byte[] wadheader = new byte[8] { 0x00, 0x00, 0x00, 0x20, 0x49, 0x73, 0x00, 0x00 }; - - /// - /// Packs the contents in the given directory and creates the destination wad file - /// - /// - public static void PackWad(string contentdirectory, string destinationfile, bool includefooter) - { - if (contentdirectory[contentdirectory.Length - 1] != '\\') { contentdirectory = contentdirectory + "\\"; } - - if (!Directory.Exists(contentdirectory)) throw new DirectoryNotFoundException("The directory doesn't exists:\r\n" + contentdirectory); - if (Directory.GetFiles(contentdirectory, "*.app").Length < 1) throw new Exception("No *.app file was found"); - if (Directory.GetFiles(contentdirectory, "*.cert").Length < 1) throw new Exception("No *.cert file was found"); - if (Directory.GetFiles(contentdirectory, "*.tik").Length < 1) throw new Exception("No *.tik file was found"); - if (Directory.GetFiles(contentdirectory, "*.tmd").Length < 1) throw new Exception("No *.tmd file was found"); - if (File.Exists(destinationfile)) throw new Exception("The destination file already exists!"); - - string[] certfile = Directory.GetFiles(contentdirectory, "*.cert"); - string[] tikfile = Directory.GetFiles(contentdirectory, "*.tik"); - string[] tmdfile = Directory.GetFiles(contentdirectory, "*.tmd"); - string[] trailerfile = Directory.GetFiles(contentdirectory, "*.trailer"); - - byte[] cert = Tools.LoadFileToByteArray(certfile[0]); - byte[] tik = Tools.LoadFileToByteArray(tikfile[0]); - byte[] tmd = Tools.LoadFileToByteArray(tmdfile[0]); - - string[,] contents = WadInfo.GetContentInfo(tmd); - - FileStream wadstream = new FileStream(destinationfile, FileMode.Create); - - //Trucha-Sign Tik and Tmd, if they aren't already - WadEdit.TruchaSign(tik, 0); - WadEdit.TruchaSign(tmd, 1); - - //Write Cert - wadstream.Seek(64, SeekOrigin.Begin); - wadstream.Write(cert, 0, cert.Length); - - //Write Tik - wadstream.Seek(64 + Tools.AddPadding(cert.Length), SeekOrigin.Begin); - wadstream.Write(tik, 0, tik.Length); - - //Write Tmd - wadstream.Seek(64 + Tools.AddPadding(cert.Length) + Tools.AddPadding(tik.Length), SeekOrigin.Begin); - wadstream.Write(tmd, 0, tmd.Length); - - //Write Content - int allcont = 0; - int contpos = 64 + Tools.AddPadding(cert.Length) + Tools.AddPadding(tik.Length) + Tools.AddPadding(tmd.Length); - int contcount = WadInfo.GetContentNum(tmd); - - Tools.ChangeProgress(0); - byte[] titlekey = WadInfo.GetTitleKey(tik); - - for (int i = 0; i < contents.GetLength(0); i++) - { - Tools.ChangeProgress((i + 1) * 100 / contents.GetLength(0)); - byte[] thiscont = Tools.LoadFileToByteArray(contentdirectory + contents[i, 1] + ".app"); - - //if (i == contents.GetLength(0) - 1) { thiscont = WadEdit.EncryptContent(thiscont, tmd, i, titlekey, false); } - //else { thiscont = WadEdit.EncryptContent(thiscont, tmd, i, titlekey, true); } - thiscont = WadEdit.EncryptContent(thiscont, tmd, i, titlekey, true); - - wadstream.Seek(contpos, SeekOrigin.Begin); - wadstream.Write(thiscont, 0, thiscont.Length); - contpos += thiscont.Length; - allcont += thiscont.Length; - } - - //Write Trailer, if exists and includefooter = true - int trailerlength = 0; - if (trailerfile.Length > 0 && includefooter == true) - { - byte[] trailer = Tools.LoadFileToByteArray(trailerfile[0]); - trailerlength = trailer.Length; - Array.Resize(ref trailer, Tools.AddPadding(trailer.Length)); - wadstream.Seek(Tools.AddPadding(contpos), SeekOrigin.Begin); - wadstream.Write(trailer, 0, trailer.Length); - } - - //Write Header - byte[] certsize = Tools.FileLengthToByteArray(cert.Length); - byte[] tiksize = Tools.FileLengthToByteArray(tik.Length); - byte[] tmdsize = Tools.FileLengthToByteArray(tmd.Length); - byte[] allcontsize = Tools.FileLengthToByteArray(allcont); - byte[] trailersize = Tools.FileLengthToByteArray(trailerlength); - - wadstream.Seek(0x00, SeekOrigin.Begin); - wadstream.Write(wadheader, 0, wadheader.Length); - wadstream.Seek(0x08, SeekOrigin.Begin); - wadstream.Write(certsize, 0, certsize.Length); - wadstream.Seek(0x10, SeekOrigin.Begin); - wadstream.Write(tiksize, 0, tiksize.Length); - wadstream.Seek(0x14, SeekOrigin.Begin); - wadstream.Write(tmdsize, 0, tmdsize.Length); - wadstream.Seek(0x18, SeekOrigin.Begin); - wadstream.Write(allcontsize, 0, allcontsize.Length); - wadstream.Seek(0x1c, SeekOrigin.Begin); - wadstream.Write(trailersize, 0, trailersize.Length); - - wadstream.Close(); - } - - /// - /// Packs a Wad from a title installed on Nand - /// Returns: 0 = OK, 1 = Files missing, 2 = Shared contents missing, 3 = Cert missing - /// - /// - /// XXXXXXXX\XXXXXXXX - /// - /// - public static void PackWadFromNand(string nandpath, string path, string destinationfile) - { - if (nandpath[nandpath.Length - 1] != '\\') { nandpath = nandpath + "\\"; } - string path1 = path.Remove(8); - string path2 = path.Remove(0, 9); - string ticketdir = nandpath + "ticket\\" + path1 + "\\"; - string contentdir = nandpath + "title\\" + path1 + "\\" + path2 + "\\content\\"; - string sharedir = nandpath + "shared1\\"; - string certdir = nandpath + "sys\\"; - - if (!Directory.Exists(ticketdir) || - !Directory.Exists(contentdir)) throw new DirectoryNotFoundException("Directory doesn't exist:\r\n" + contentdir); - if (!Directory.Exists(sharedir)) throw new DirectoryNotFoundException("Directory doesn't exist:\r\n" + sharedir); - if (!File.Exists(certdir + "cert.sys")) throw new FileNotFoundException("File doesn't exist:\r\n" + certdir + "cert.sys"); - - byte[] cert = Tools.LoadFileToByteArray(certdir + "cert.sys"); - byte[] tik = Tools.LoadFileToByteArray(ticketdir + path2 + ".tik"); - byte[] tmd = Tools.LoadFileToByteArray(contentdir + "title.tmd"); - - string[,] contents = WadInfo.GetContentInfo(tmd); - - FileStream wadstream = new FileStream(destinationfile, FileMode.Create); - - //Trucha-Sign Tik and Tmd, if they aren't already - WadEdit.TruchaSign(tik, 0); - WadEdit.TruchaSign(tmd, 1); - - //Write Cert - wadstream.Seek(64, SeekOrigin.Begin); - wadstream.Write(cert, 0, cert.Length); - - //Write Tik - wadstream.Seek(64 + Tools.AddPadding(cert.Length), SeekOrigin.Begin); - wadstream.Write(tik, 0, tik.Length); - - //Write Tmd - wadstream.Seek(64 + Tools.AddPadding(cert.Length) + Tools.AddPadding(tik.Length), SeekOrigin.Begin); - wadstream.Write(tmd, 0, tmd.Length); - - //Write Content - int allcont = 0; - int contpos = 64 + Tools.AddPadding(cert.Length) + Tools.AddPadding(tik.Length) + Tools.AddPadding(tmd.Length); - int contcount = WadInfo.GetContentNum(tmd); - - Tools.ChangeProgress(0); - byte[] titlekey = WadInfo.GetTitleKey(tik); - byte[] contentmap = Tools.LoadFileToByteArray(sharedir + "content.map"); - - for (int i = 0; i < contents.GetLength(0); i++) - { - Tools.ChangeProgress((i + 1) * 100 / contents.GetLength(0)); - byte[] thiscont = new byte[1]; - - if (contents[i, 2] == "8001") - { - string contname = ContentMap.GetSharedContentName(contentmap, contents[i, 4]); - - if (contname == "fail") - { - wadstream.Close(); - File.Delete(destinationfile); - throw new FileNotFoundException("At least one shared content is missing!"); - } - - thiscont = Tools.LoadFileToByteArray(sharedir + contname + ".app"); - } - else thiscont = Tools.LoadFileToByteArray(contentdir + contents[i, 0] + ".app"); - - //if (i == contents.GetLength(0) - 1) { thiscont = WadEdit.EncryptContent(thiscont, tmd, i, titlekey, false); } - //else { thiscont = WadEdit.EncryptContent(thiscont, tmd, i, titlekey, true); } - thiscont = WadEdit.EncryptContent(thiscont, tmd, i, titlekey, true); - - wadstream.Seek(contpos, SeekOrigin.Begin); - wadstream.Write(thiscont, 0, thiscont.Length); - contpos += thiscont.Length; - allcont += thiscont.Length; - } - - //Write Header - byte[] certsize = Tools.FileLengthToByteArray(cert.Length); - byte[] tiksize = Tools.FileLengthToByteArray(tik.Length); - byte[] tmdsize = Tools.FileLengthToByteArray(tmd.Length); - byte[] allcontsize = Tools.FileLengthToByteArray(allcont); - byte[] trailersize = new byte[] { 0x00, 0x00, 0x00, 0x00 }; - - wadstream.Seek(0x00, SeekOrigin.Begin); - wadstream.Write(wadheader, 0, wadheader.Length); - wadstream.Seek(0x08, SeekOrigin.Begin); - wadstream.Write(certsize, 0, certsize.Length); - wadstream.Seek(0x10, SeekOrigin.Begin); - wadstream.Write(tiksize, 0, tiksize.Length); - wadstream.Seek(0x14, SeekOrigin.Begin); - wadstream.Write(tmdsize, 0, tmdsize.Length); - wadstream.Seek(0x18, SeekOrigin.Begin); - wadstream.Write(allcontsize, 0, allcontsize.Length); - wadstream.Seek(0x1c, SeekOrigin.Begin); - wadstream.Write(trailersize, 0, trailersize.Length); - - wadstream.Close(); - } - } - - public class UID - { - /// - /// Checks if the given Title ID exists in the uid.sys - /// - /// - /// - /// - public static bool CheckUID(byte[] uidsys, string fulltitleid) - { - for (int i = 0; i < uidsys.Length; i += 12) - { - string temp = ""; - - for (int y = i; y < i + 8; y++) - temp += uidsys[y].ToString("x2"); - - if (temp == fulltitleid) return true; - } - - return false; - } - - /// - /// Gets a new UID - /// - /// - /// - public static string GetNewUID(byte[] uidsys) - { - string lastuid = uidsys[uidsys.Length - 4].ToString("x2") + - uidsys[uidsys.Length - 3].ToString("x2") + - uidsys[uidsys.Length - 2].ToString("x2") + - uidsys[uidsys.Length - 1].ToString("x2"); - - string newuid = (int.Parse(lastuid, System.Globalization.NumberStyles.HexNumber) + 1).ToString("x8"); - return newuid; - } - - /// - /// Adds a Title ID to uid.sys - /// - /// - /// - /// - public static byte[] AddUID(byte[] uidsys, string fulltitleid) - { - if (uidsys.Length > 11) - { - MemoryStream uid = new MemoryStream(); - byte[] titleid = Tools.HexStringToByteArray(fulltitleid); - byte[] newuid = Tools.HexStringToByteArray(GetNewUID(uidsys)); - - uid.Write(uidsys, 0, uidsys.Length); - uid.Write(titleid, 0, titleid.Length); - uid.Write(newuid, 0, newuid.Length); - - return uid.ToArray(); - } - else - { - MemoryStream uid = new MemoryStream(); - byte[] titleid = Tools.HexStringToByteArray(fulltitleid); - byte[] newuid = new byte[] { 0x00, 0x00, 0x10, 0x00 }; - - uid.Write(titleid, 0, titleid.Length); - uid.Write(newuid, 0, newuid.Length); - - return uid.ToArray(); - } - } - } - - public class ContentMap - { - /// - /// Gets the name of the shared content in /shared1/. - /// Returns "fail", if the content doesn't exist - /// - /// - /// - /// - public static string GetSharedContentName(byte[] contentmap, string sha1ofcontent) - { - int contindex = 0; - string result = ""; - - for (int i = 0; i < contentmap.Length - 19; i++) - { - string tmp = ""; - for (int y = 0; y < 20; y++) - { - tmp += contentmap[i + y].ToString("x2"); - } - - if (tmp == sha1ofcontent) - { - contindex = i; - break; - } - } - - if (contindex == 0) return "fail"; - - result += Convert.ToChar(contentmap[contindex - 8]); - result += Convert.ToChar(contentmap[contindex - 7]); - result += Convert.ToChar(contentmap[contindex - 6]); - result += Convert.ToChar(contentmap[contindex - 5]); - result += Convert.ToChar(contentmap[contindex - 4]); - result += Convert.ToChar(contentmap[contindex - 3]); - result += Convert.ToChar(contentmap[contindex - 2]); - result += Convert.ToChar(contentmap[contindex - 1]); - - return result; - } - - /// - /// Checks, if the shared content exists - /// - /// - /// - /// - public static bool CheckSharedContent(byte[] contentmap, string sha1ofcontent) - { - for (int i = 0; i < contentmap.Length - 19; i++) - { - string tmp = ""; - for (int y = 0; y < 20; y++) - { - tmp += contentmap[i + y].ToString("x2"); - } - - if (tmp == sha1ofcontent) return true; - } - - return false; - } - - public static string GetNewSharedContentName(byte[] contentmap) - { - string name = ""; - - name += Convert.ToChar(contentmap[contentmap.Length - 28]); - name += Convert.ToChar(contentmap[contentmap.Length - 27]); - name += Convert.ToChar(contentmap[contentmap.Length - 26]); - name += Convert.ToChar(contentmap[contentmap.Length - 25]); - name += Convert.ToChar(contentmap[contentmap.Length - 24]); - name += Convert.ToChar(contentmap[contentmap.Length - 23]); - name += Convert.ToChar(contentmap[contentmap.Length - 22]); - name += Convert.ToChar(contentmap[contentmap.Length - 21]); - - string newname = (int.Parse(name, System.Globalization.NumberStyles.HexNumber) + 1).ToString("x8"); - - return newname; - } - - public static void AddSharedContent(string contentmap, string contentname, string sha1ofcontent) - { - byte[] name = new byte[8]; - byte[] sha1 = new byte[20]; - - for (int i = 0; i < 8; i++) - { - name[i] = (byte)contentname[i]; - } - - for (int i = 0; i < sha1ofcontent.Length; i += 2) - { - sha1[i / 2] = Convert.ToByte(sha1ofcontent.Substring(i, 2), 16); - } - - using (FileStream map = new FileStream(contentmap, FileMode.OpenOrCreate, FileAccess.ReadWrite)) - { - map.Seek(0, SeekOrigin.End); - map.Write(name, 0, name.Length); - map.Write(sha1, 0, sha1.Length); - } - } - } - - public class U8 - { - /// - /// Checks if the given file is a U8 Archive - /// - /// - /// - public static bool CheckU8(byte[] file) - { - int length = 2500; - if (file.Length < length) length = file.Length - 4; - - for (int i = 0; i < length; i++) - { - if (file[i] == 0x55 && file[i + 1] == 0xAA && file[i + 2] == 0x38 && file[i + 3] == 0x2D) - return true; - } - - return false; - } - - /// - /// Checks if the given file is a U8 Archive - /// - /// - /// - public static bool CheckU8(string file) - { - byte[] buff = Tools.LoadFileToByteArray(file, 0, 2500); - return CheckU8(buff); - } - - /// - /// Gets all contents of a folder (including (sub-)files and (sub-)folders) - /// - /// - /// - /// - public static string[] GetDirContent(string dir, bool root) - { - string[] files = Directory.GetFiles(dir); - string[] dirs = Directory.GetDirectories(dir); - string all = ""; - - if (root == false) - all += dir + "\n"; - - for (int i = 0; i < files.Length; i++) - all += files[i] + "\n"; - - foreach (string thisDir in dirs) - { - string[] temp = GetDirContent(thisDir, false); - - foreach (string thisTemp in temp) - all += thisTemp + "\n"; - } - - return all.Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries); - } - - /// - /// Detecs if the U8 file has an IMD5 or IMET Header. - /// Return: 0 = No Header, 1 = IMD5, 2 = IMET - /// - /// - public static int DetectHeader(string file) - { - byte[] temp = Tools.LoadFileToByteArray(file, 0, 400); - return DetectHeader(temp); - } - - /// - /// Detecs if the U8 file has an IMD5 or IMET Header. - /// Return: 0 = No Header, 1 = IMD5, 2 = IMET - /// - /// - public static int DetectHeader(byte[] file) - { - for (int i = 0; i < 16; i++) //Just to be safe - { - if (Convert.ToChar(file[i]) == 'I') - if (Convert.ToChar(file[i + 1]) == 'M') - if (Convert.ToChar(file[i + 2]) == 'D') - if (Convert.ToChar(file[i + 3]) == '5') - return 1; - } - - int length = 400; - if (file.Length < 400) length = file.Length - 4; - - for (int z = 0; z < length; z++) - { - if (Convert.ToChar(file[z]) == 'I') - if (Convert.ToChar(file[z + 1]) == 'M') - if (Convert.ToChar(file[z + 2]) == 'E') - if (Convert.ToChar(file[z + 3]) == 'T') - return 2; - } - - return 0; - } - - /// - /// Adds an IMD5 Header to the given U8 Archive - /// - /// - /// - public static byte[] AddHeaderIMD5(byte[] u8archive) - { - MemoryStream ms = new MemoryStream(); - MD5 md5 = MD5.Create(); - - byte[] imd5 = new byte[4]; - imd5[0] = (byte)'I'; - imd5[1] = (byte)'M'; - imd5[2] = (byte)'D'; - imd5[3] = (byte)'5'; - - byte[] size = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(u8archive.Length)); - byte[] hash = md5.ComputeHash(u8archive, 0, u8archive.Length); - - ms.Seek(0, SeekOrigin.Begin); - ms.Write(imd5, 0, imd5.Length); - ms.Write(size, 0, size.Length); - - ms.Seek(0x10, SeekOrigin.Begin); - ms.Write(hash, 0, hash.Length); - - ms.Write(u8archive, 0, u8archive.Length); - - md5.Clear(); - return ms.ToArray(); - } - - /// - /// Adds an IMET Header to the given 00.app - /// - /// - /// Order: Jap, Eng, Ger, Fra, Spa, Ita, Dut - /// Order: Banner.bin, Icon.bin, Sound.bin - /// - public static byte[] AddHeaderIMET(byte[] nullapp, string[] channeltitles, int[] sizes) - { - if (channeltitles.Length < 7) return nullapp; - for (int i = 0; i < channeltitles.Length; i++) - if (channeltitles[i].Length > 20) return nullapp; - - MemoryStream ms = new MemoryStream(); - MD5 md5 = MD5.Create(); - - byte[] imet = new byte[4]; - imet[0] = (byte)'I'; - imet[1] = (byte)'M'; - imet[2] = (byte)'E'; - imet[3] = (byte)'T'; - - byte[] unknown = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(0x0000060000000003)); - - byte[] iconsize = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(sizes[1])); - byte[] bannersize = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(sizes[0])); - byte[] soundsize = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(sizes[2])); - - byte[] japtitle = new byte[84]; - byte[] engtitle = new byte[84]; - byte[] gertitle = new byte[84]; - byte[] fratitle = new byte[84]; - byte[] spatitle = new byte[84]; - byte[] itatitle = new byte[84]; - byte[] duttitle = new byte[84]; - - for (int i = 0; i < 20; i++) - { - if (channeltitles[0].Length > i) - { - japtitle[i * 2] = BitConverter.GetBytes(channeltitles[0][i])[1]; - japtitle[i * 2 + 1] = BitConverter.GetBytes(channeltitles[0][i])[0]; - } - if (channeltitles[1].Length > i) - { - engtitle[i * 2] = BitConverter.GetBytes(channeltitles[1][i])[1]; - engtitle[i * 2 + 1] = BitConverter.GetBytes(channeltitles[1][i])[0]; - } - if (channeltitles[2].Length > i) - { - gertitle[i * 2] = BitConverter.GetBytes(channeltitles[2][i])[1]; - gertitle[i * 2 + 1] = BitConverter.GetBytes(channeltitles[2][i])[0]; - } - if (channeltitles[3].Length > i) - { - fratitle[i * 2] = BitConverter.GetBytes(channeltitles[3][i])[1]; - fratitle[i * 2 + 1] = BitConverter.GetBytes(channeltitles[3][i])[0]; - } - if (channeltitles[4].Length > i) - { - spatitle[i * 2] = BitConverter.GetBytes(channeltitles[4][i])[1]; - spatitle[i * 2 + 1] = BitConverter.GetBytes(channeltitles[4][i])[0]; - } - if (channeltitles[5].Length > i) - { - itatitle[i * 2] = BitConverter.GetBytes(channeltitles[5][i])[1]; - itatitle[i * 2 + 1] = BitConverter.GetBytes(channeltitles[5][i])[0]; - } - if (channeltitles[6].Length > i) - { - duttitle[i * 2] = BitConverter.GetBytes(channeltitles[6][i])[1]; - duttitle[i * 2 + 1] = BitConverter.GetBytes(channeltitles[6][i])[0]; - } - } - - byte[] crypto = new byte[16]; - - ms.Seek(128, SeekOrigin.Begin); - ms.Write(imet, 0, imet.Length); - ms.Write(unknown, 0, unknown.Length); - ms.Write(iconsize, 0, iconsize.Length); - ms.Write(bannersize, 0, bannersize.Length); - ms.Write(soundsize, 0, soundsize.Length); - - ms.Seek(4, SeekOrigin.Current); - ms.Write(japtitle, 0, japtitle.Length); - ms.Write(engtitle, 0, engtitle.Length); - ms.Write(gertitle, 0, gertitle.Length); - ms.Write(fratitle, 0, fratitle.Length); - ms.Write(spatitle, 0, spatitle.Length); - ms.Write(itatitle, 0, itatitle.Length); - ms.Write(duttitle, 0, duttitle.Length); - - ms.Seek(0x348, SeekOrigin.Current); - ms.Write(crypto, 0, crypto.Length); - - byte[] tohash = ms.ToArray(); - crypto = md5.ComputeHash(tohash, 0x40, 0x600); - - ms.Seek(-16, SeekOrigin.Current); - ms.Write(crypto, 0, crypto.Length); - ms.Write(nullapp, 0, nullapp.Length); - - md5.Clear(); - return ms.ToArray(); - } - - /// - /// Packs a U8 Archive - /// - /// - /// - public static void PackU8(string folder, string outfile) - { - byte[] u8 = PackU8(folder); - - using (FileStream fs = new FileStream(outfile, FileMode.Create)) - fs.Write(u8, 0, u8.Length); - } - - /// - /// Packs a U8 Archive - /// - /// - /// - public static void PackU8(string folder, string outfile, bool addimd5header) - { - byte[] u8 = PackU8(folder); - - if (addimd5header == true) - u8 = AddHeaderIMD5(u8); - - using (FileStream fs = new FileStream(outfile, FileMode.Create)) - fs.Write(u8, 0, u8.Length); - } - - /// - /// Packs a U8 Archive - /// - /// - /// - public static byte[] PackU8(string folder) - { - int a = 0, b = 0, c = 0; - return PackU8(folder, out a, out b, out c); - } - - /// - /// Packs a U8 Archive - /// - /// - /// - public static byte[] PackU8(string folder, bool addimd5header) - { - byte[] u8 = PackU8(folder); - - if (addimd5header == true) - u8 = AddHeaderIMD5(u8); - - return u8; - } - - /// - /// Packs a U8 Archive - /// - /// - /// - public static byte[] PackU8(string folder, out int bannersize, out int iconsize, out int soundsize) - { - int datapad = 32, stringtablepad = 32; //Biggie seems to use these paddings, so let's do it, too ;) - string rootpath = folder; - if (rootpath[rootpath.Length - 1] != '\\') rootpath = rootpath + "\\"; - - bannersize = 0; iconsize = 0; soundsize = 0; - - string[] files = GetDirContent(folder, true); - int nodecount = files.Length + 1; //All files and dirs + rootnode - int recursion = 0; - int currentnodes = 0; - string name = string.Empty; - string stringtable = "\0"; - byte[] tempnode = new byte[12]; - - MemoryStream nodes = new MemoryStream(); - MemoryStream data = new MemoryStream(); - BinaryWriter writedata = new BinaryWriter(data); - - tempnode[0] = 0x01; - tempnode[1] = 0x00; - tempnode[2] = 0x00; - tempnode[3] = 0x00; - tempnode[4] = 0x00; - tempnode[5] = 0x00; - tempnode[6] = 0x00; - tempnode[7] = 0x00; - - byte[] temp = BitConverter.GetBytes((UInt32)files.Length + 1); Array.Reverse(temp); - tempnode[8] = temp[0]; - tempnode[9] = temp[1]; - tempnode[10] = temp[2]; - tempnode[11] = temp[3]; - - nodes.Write(tempnode, 0, tempnode.Length); - - for (int i = 0; i < files.Length; i++) - { - files[i] = files[i].Remove(0, rootpath.Length - 1); - - recursion = Tools.CountCharsInString(files[i], '\\') - 1; - name = files[i].Remove(0, files[i].LastIndexOf('\\') + 1); - - byte[] temp1 = BitConverter.GetBytes((UInt16)stringtable.Length); Array.Reverse(temp1); - tempnode[2] = temp1[0]; - tempnode[3] = temp1[1]; - - stringtable += name + "\0"; - - if (Directory.Exists(rootpath + files[i])) //It's a dir - { - tempnode[0] = 0x01; - tempnode[1] = 0x00; - - byte[] temp2 = BitConverter.GetBytes((UInt32)recursion); Array.Reverse(temp2); - tempnode[4] = temp2[0]; - tempnode[5] = temp2[1]; - tempnode[6] = temp2[2]; - tempnode[7] = temp2[3]; - - int size = currentnodes + 1; - - for (int j = i; j < files.Length; j++) - if (files[j].Contains(files[i])) size++; - - byte[] temp3 = BitConverter.GetBytes((UInt32)size); Array.Reverse(temp3); - tempnode[8] = temp3[0]; - tempnode[9] = temp3[1]; - tempnode[10] = temp3[2]; - tempnode[11] = temp3[3]; - } - else //It's a file - { - byte[] tempfile = new byte[0x40]; - int lzoffset = -1; - - if (files[i].EndsWith("banner.bin")) - { - tempfile = Wii.Tools.LoadFileToByteArray(rootpath + files[i], 0, tempfile.Length); - - for (int x = 0; x < tempfile.Length; x++) - { - if (tempfile[x] == 'L') - if (tempfile[x + 1] == 'Z') - if (tempfile[x + 2] == '7') - if (tempfile[x + 3] == '7') - { - lzoffset = x; - break; - } - } - - if (lzoffset != -1) - { - bannersize = BitConverter.ToInt32(new byte[] { tempfile[lzoffset + 5], tempfile[lzoffset + 6], tempfile[lzoffset + 7], tempfile[lzoffset + 8] }, 0); - } - else - { - FileInfo fibanner = new FileInfo(rootpath + files[i]); - bannersize = (int)fibanner.Length - 32; - } - } - else if (files[i].EndsWith("icon.bin")) - {tempfile = Wii.Tools.LoadFileToByteArray(rootpath + files[i], 0, tempfile.Length); - - for (int x = 0; x < tempfile.Length; x++) - { - if (tempfile[x] == 'L') - if (tempfile[x + 1] == 'Z') - if (tempfile[x + 2] == '7') - if (tempfile[x + 3] == '7') - { - lzoffset = x; - } - } - - if (lzoffset != -1) - { - iconsize = BitConverter.ToInt32(new byte[] { tempfile[lzoffset + 5], tempfile[lzoffset + 6], tempfile[lzoffset + 7], tempfile[lzoffset + 8] }, 0); - } - else - { - FileInfo fiicon = new FileInfo(rootpath + files[i]); - iconsize = (int)fiicon.Length - 32; - } - } - else if (files[i].EndsWith("sound.bin")) - {tempfile = Wii.Tools.LoadFileToByteArray(rootpath + files[i], 0, tempfile.Length); - - for (int x = 0; x < tempfile.Length; x++) - { - if (tempfile[x] == 'L') - if (tempfile[x + 1] == 'Z') - if (tempfile[x + 2] == '7') - if (tempfile[x + 3] == '7') - { - lzoffset = x; - break; - } - } - - if (lzoffset != -1) - { - soundsize = BitConverter.ToInt32(new byte[] { tempfile[lzoffset + 5], tempfile[lzoffset + 6], tempfile[lzoffset + 7], tempfile[lzoffset + 8] }, 0); - } - else - { - FileInfo fisound = new FileInfo(rootpath + files[i]); - soundsize = (int)fisound.Length - 32; - } - } - - tempnode[0] = 0x00; - tempnode[1] = 0x00; - - byte[] temp2 = BitConverter.GetBytes((UInt32)data.Position); Array.Reverse(temp2); - tempnode[4] = temp2[0]; - tempnode[5] = temp2[1]; - tempnode[6] = temp2[2]; - tempnode[7] = temp2[3]; - - FileInfo fi = new FileInfo(rootpath + files[i]); - byte[] temp3 = BitConverter.GetBytes((UInt32)fi.Length); Array.Reverse(temp3); - tempnode[8] = temp3[0]; - tempnode[9] = temp3[1]; - tempnode[10] = temp3[2]; - tempnode[11] = temp3[3]; - - using (FileStream fs = new FileStream(rootpath + files[i], FileMode.Open)) - using (BinaryReader br = new BinaryReader(fs)) - writedata.Write(br.ReadBytes((int)br.BaseStream.Length)); - - writedata.Seek(Tools.AddPadding((int)data.Position, datapad), SeekOrigin.Begin); - } - - nodes.Write(tempnode, 0, tempnode.Length); - currentnodes++; - } - - byte[] type = new byte[2]; - byte[] curpos = new byte[4]; - - for (int x = 0; x < nodecount * 12; x += 12) - { - nodes.Seek(x, SeekOrigin.Begin); - nodes.Read(type, 0, 2); - - if (type[0] == 0x00 && type[1] == 0x00) - { - nodes.Seek(x + 4, SeekOrigin.Begin); - nodes.Read(curpos, 0, 4); - Array.Reverse(curpos); - - UInt32 newpos = BitConverter.ToUInt32(curpos, 0) + (UInt32)(Tools.AddPadding(0x20 + ((12 * nodecount) + stringtable.Length), stringtablepad)); - - nodes.Seek(x + 4, SeekOrigin.Begin); - byte[] temp2 = BitConverter.GetBytes(newpos); Array.Reverse(temp2); - nodes.Write(temp2, 0, 4); - } - } - - writedata.Close(); - MemoryStream output = new MemoryStream(); - BinaryWriter writeout = new BinaryWriter(output); - - writeout.Write((UInt32)0x2d38aa55); - writeout.Write(IPAddress.HostToNetworkOrder((ushort)0x20)); - writeout.Write(IPAddress.HostToNetworkOrder((ushort)((12 * nodecount) + stringtable.Length))); - writeout.Write(IPAddress.HostToNetworkOrder((ushort)(Tools.AddPadding(0x20 + ((12 * nodecount) + stringtable.Length), stringtablepad)))); - - writeout.Seek(0x10, SeekOrigin.Current); - - writeout.Write(nodes.ToArray()); - writeout.Write(ASCIIEncoding.ASCII.GetBytes(stringtable)); - - writeout.Seek(Tools.AddPadding(0x20 + ((12 * nodecount) + stringtable.Length), stringtablepad), SeekOrigin.Begin); - - writeout.Write(data.ToArray()); - - output.Seek(0, SeekOrigin.End); - for (int i = (int)output.Position; i < Tools.AddPadding((int)output.Position, datapad); i++) - output.WriteByte(0); - - writeout.Close(); - output.Close(); - - return output.ToArray(); - } - - /// - /// Unpacks the given U8 archive - /// If the archive is Lz77 compressed, it will be decompressed first! - /// - /// - /// - public static void UnpackU8(string u8archive, string unpackpath) - { - byte[] u8 = Wii.Tools.LoadFileToByteArray(u8archive); - UnpackU8(u8, unpackpath); - } - - /// - /// Unpacks the given U8 archive - /// If the archive is Lz77 compressed, it will be decompressed first! - /// - /// - /// - public static void UnpackU8(byte[] u8archive, string unpackpath) - { - int lz77offset = Lz77.GetLz77Offset(u8archive); - if (lz77offset != -1) { u8archive = Lz77.Decompress(u8archive, lz77offset); } - - if (unpackpath[unpackpath.Length - 1] != '\\') { unpackpath = unpackpath + "\\"; } - if (!Directory.Exists(unpackpath)) Directory.CreateDirectory(unpackpath); - - int u8offset = -1; - int length = 2500; - if (u8archive.Length < length) length = u8archive.Length - 4; - - for (int i = 0; i < length; i++) - { - if (u8archive[i] == 0x55 && u8archive[i + 1] == 0xAA && u8archive[i + 2] == 0x38 && u8archive[i + 3] == 0x2D) - { - u8offset = i; - break; - } - } - - if (u8offset == -1) throw new Exception("File is not a valid U8 Archive!"); - - int nodecount = Tools.HexStringToInt(u8archive[u8offset + 0x28].ToString("x2") + u8archive[u8offset + 0x29].ToString("x2") + u8archive[u8offset + 0x2a].ToString("x2") + u8archive[u8offset + 0x2b].ToString("x2")); - int nodeoffset = 0x20; - - string[,] nodes = new string[nodecount, 5]; - - for (int j = 0; j < nodecount; j++) - { - nodes[j, 0] = u8archive[u8offset + nodeoffset].ToString("x2") + u8archive[u8offset + nodeoffset + 1].ToString("x2"); - nodes[j, 1] = u8archive[u8offset + nodeoffset + 2].ToString("x2") + u8archive[u8offset + nodeoffset + 3].ToString("x2"); - nodes[j, 2] = u8archive[u8offset + nodeoffset + 4].ToString("x2") + u8archive[u8offset + nodeoffset + 5].ToString("x2") + u8archive[u8offset + nodeoffset + 6].ToString("x2") + u8archive[u8offset + nodeoffset + 7].ToString("x2"); - nodes[j, 3] = u8archive[u8offset + nodeoffset + 8].ToString("x2") + u8archive[u8offset + nodeoffset + 9].ToString("x2") + u8archive[u8offset + nodeoffset + 10].ToString("x2") + u8archive[u8offset + nodeoffset + 11].ToString("x2"); - - nodeoffset += 12; - } - - int stringtablepos = u8offset + nodeoffset; - - for (int x = 0; x < nodecount; x++) - { - bool end = false; - int nameoffset = Tools.HexStringToInt(nodes[x, 1]); - string thisname = ""; - - do - { - if (u8archive[stringtablepos + nameoffset] != 0x00) - { - char tempchar = Convert.ToChar(u8archive[stringtablepos + nameoffset]); - thisname += tempchar.ToString(); - nameoffset++; - } - else end = true; - } while (end == false); - - nodes[x, 4] = thisname; - } - - string[] dirs = new string[nodecount]; - dirs[0] = unpackpath; - int[] dircount = new int[nodecount]; - int dirindex = 0; - - try - { - for (int y = 1; y < nodecount; y++) - { - switch (nodes[y, 0]) - { - case "0100": - if (dirs[dirindex][dirs[dirindex].Length - 1] != '\\') { dirs[dirindex] = dirs[dirindex] + "\\"; } - Directory.CreateDirectory(dirs[dirindex] + nodes[y, 4]); - dirs[dirindex + 1] = dirs[dirindex] + nodes[y, 4]; - dirindex++; - dircount[dirindex] = Tools.HexStringToInt(nodes[y, 3]); - break; - default: - int filepos = u8offset + Tools.HexStringToInt(nodes[y, 2]); - int filesize = Tools.HexStringToInt(nodes[y, 3]); - - using (FileStream fs = new FileStream(dirs[dirindex] + "\\" + nodes[y, 4], FileMode.Create)) - { - fs.Write(u8archive, filepos, filesize); - } - break; - } - - while (dirindex > 0 && dircount[dirindex] == (y + 1)) - { - dirindex--; - } - } - } - catch { } - } - - /// - /// Gets the Banner.bin out of the 00000000.app - /// - /// - /// - public static byte[] GetBannerBin(byte[] nullapp) - { - int lz77offset = Lz77.GetLz77Offset(nullapp); - if (lz77offset != -1) { nullapp = Lz77.Decompress(nullapp, lz77offset); } - - int u8offset = -1; - for (int i = 0; i < 2500; i++) - { - if (nullapp[i] == 0x55 && nullapp[i + 1] == 0xAA && nullapp[i + 2] == 0x38 && nullapp[i + 3] == 0x2D) - { - u8offset = i; - break; - } - } - - if (u8offset == -1) throw new Exception("File is not a valid U8 Archive!"); - - int nodecount = Tools.HexStringToInt(nullapp[u8offset + 0x28].ToString("x2") + nullapp[u8offset + 0x29].ToString("x2") + nullapp[u8offset + 0x2a].ToString("x2") + nullapp[u8offset + 0x2b].ToString("x2")); - int nodeoffset = 0x20; - - string[,] nodes = new string[nodecount, 5]; - - for (int j = 0; j < nodecount; j++) - { - nodes[j, 0] = nullapp[u8offset + nodeoffset].ToString("x2") + nullapp[u8offset + nodeoffset + 1].ToString("x2"); - nodes[j, 1] = nullapp[u8offset + nodeoffset + 2].ToString("x2") + nullapp[u8offset + nodeoffset + 3].ToString("x2"); - nodes[j, 2] = nullapp[u8offset + nodeoffset + 4].ToString("x2") + nullapp[u8offset + nodeoffset + 5].ToString("x2") + nullapp[u8offset + nodeoffset + 6].ToString("x2") + nullapp[u8offset + nodeoffset + 7].ToString("x2"); - nodes[j, 3] = nullapp[u8offset + nodeoffset + 8].ToString("x2") + nullapp[u8offset + nodeoffset + 9].ToString("x2") + nullapp[u8offset + nodeoffset + 10].ToString("x2") + nullapp[u8offset + nodeoffset + 11].ToString("x2"); - - nodeoffset += 12; - } - - int stringtablepos = u8offset + nodeoffset; - - for (int x = 0; x < nodecount; x++) - { - bool end = false; - int nameoffset = Tools.HexStringToInt(nodes[x, 1]); - string thisname = ""; - - while (end == false) - { - if (nullapp[stringtablepos + nameoffset] != 0x00) - { - char tempchar = Convert.ToChar(nullapp[stringtablepos + nameoffset]); - thisname += tempchar.ToString(); - nameoffset++; - } - else end = true; - } - - nodes[x, 4] = thisname; - } - - for (int y = 1; y < nodecount; y++) - { - if (nodes[y, 4] == "banner.bin") - { - int filepos = u8offset + Tools.HexStringToInt(nodes[y, 2]); - int filesize = Tools.HexStringToInt(nodes[y, 3]); - - MemoryStream ms = new MemoryStream(nullapp); - byte[] banner = new byte[filesize]; - ms.Seek(filepos, SeekOrigin.Begin); - ms.Read(banner, 0, filesize); - ms.Close(); - - return banner; - } - } - - throw new Exception("This file doesn't contain banner.bin!"); - } - - /// - /// Gets the Icon.bin out of the 00000000.app - /// - /// - /// - public static byte[] GetIconBin(byte[] nullapp) - { - int lz77offset = Lz77.GetLz77Offset(nullapp); - if (lz77offset != -1) { nullapp = Lz77.Decompress(nullapp, lz77offset); } - - int u8offset = -1; - for (int i = 0; i < 2500; i++) - { - if (nullapp[i] == 0x55 && nullapp[i + 1] == 0xAA && nullapp[i + 2] == 0x38 && nullapp[i + 3] == 0x2D) - { - u8offset = i; - break; - } - } - - if (u8offset == -1) throw new Exception("File is not a valid U8 Archive!"); - - int nodecount = Tools.HexStringToInt(nullapp[u8offset + 0x28].ToString("x2") + nullapp[u8offset + 0x29].ToString("x2") + nullapp[u8offset + 0x2a].ToString("x2") + nullapp[u8offset + 0x2b].ToString("x2")); - int nodeoffset = 0x20; - - string[,] nodes = new string[nodecount, 5]; - - for (int j = 0; j < nodecount; j++) - { - nodes[j, 0] = nullapp[u8offset + nodeoffset].ToString("x2") + nullapp[u8offset + nodeoffset + 1].ToString("x2"); - nodes[j, 1] = nullapp[u8offset + nodeoffset + 2].ToString("x2") + nullapp[u8offset + nodeoffset + 3].ToString("x2"); - nodes[j, 2] = nullapp[u8offset + nodeoffset + 4].ToString("x2") + nullapp[u8offset + nodeoffset + 5].ToString("x2") + nullapp[u8offset + nodeoffset + 6].ToString("x2") + nullapp[u8offset + nodeoffset + 7].ToString("x2"); - nodes[j, 3] = nullapp[u8offset + nodeoffset + 8].ToString("x2") + nullapp[u8offset + nodeoffset + 9].ToString("x2") + nullapp[u8offset + nodeoffset + 10].ToString("x2") + nullapp[u8offset + nodeoffset + 11].ToString("x2"); - - nodeoffset += 12; - } - - int stringtablepos = u8offset + nodeoffset; - - for (int x = 0; x < nodecount; x++) - { - bool end = false; - int nameoffset = Tools.HexStringToInt(nodes[x, 1]); - string thisname = ""; - - while (end == false) - { - if (nullapp[stringtablepos + nameoffset] != 0x00) - { - char tempchar = Convert.ToChar(nullapp[stringtablepos + nameoffset]); - thisname += tempchar.ToString(); - nameoffset++; - } - else end = true; - } - - nodes[x, 4] = thisname; - } - - for (int y = 1; y < nodecount; y++) - { - if (nodes[y, 4] == "icon.bin") - { - int filepos = u8offset + Tools.HexStringToInt(nodes[y, 2]); - int filesize = Tools.HexStringToInt(nodes[y, 3]); - - MemoryStream ms = new MemoryStream(nullapp); - byte[] icon = new byte[filesize]; - ms.Seek(filepos, SeekOrigin.Begin); - ms.Read(icon, 0, filesize); - ms.Close(); - - return icon; - } - } - - throw new Exception("This file doesn't contain icon.bin!"); - } - - /// - /// Extracts all Tpl's to the given path - /// - /// - /// - public static void UnpackTpls(byte[] u8archive, string unpackpath) - { - int lz77offset = Lz77.GetLz77Offset(u8archive); - if (lz77offset != -1) { u8archive = Lz77.Decompress(u8archive, lz77offset); } - - if (unpackpath[unpackpath.Length - 1] != '\\') { unpackpath = unpackpath + "\\"; } - if (!Directory.Exists(unpackpath)) Directory.CreateDirectory(unpackpath); - - int u8offset = -1; - int length = 2500; - if (u8archive.Length < 2500) length = u8archive.Length - 4; - - for (int i = 0; i < 2500; i++) - { - if (u8archive[i] == 0x55 && u8archive[i + 1] == 0xAA && u8archive[i + 2] == 0x38 && u8archive[i + 3] == 0x2D) - { - u8offset = i; - break; - } - } - - if (u8offset == -1) throw new Exception("File is not a valid U8 Archive!"); - - int nodecount = Tools.HexStringToInt(u8archive[u8offset + 0x28].ToString("x2") + u8archive[u8offset + 0x29].ToString("x2") + u8archive[u8offset + 0x2a].ToString("x2") + u8archive[u8offset + 0x2b].ToString("x2")); - int nodeoffset = 0x20; - - string[,] nodes = new string[nodecount, 5]; - - for (int j = 0; j < nodecount; j++) - { - nodes[j, 0] = u8archive[u8offset + nodeoffset].ToString("x2") + u8archive[u8offset + nodeoffset + 1].ToString("x2"); - nodes[j, 1] = u8archive[u8offset + nodeoffset + 2].ToString("x2") + u8archive[u8offset + nodeoffset + 3].ToString("x2"); - nodes[j, 2] = u8archive[u8offset + nodeoffset + 4].ToString("x2") + u8archive[u8offset + nodeoffset + 5].ToString("x2") + u8archive[u8offset + nodeoffset + 6].ToString("x2") + u8archive[u8offset + nodeoffset + 7].ToString("x2"); - nodes[j, 3] = u8archive[u8offset + nodeoffset + 8].ToString("x2") + u8archive[u8offset + nodeoffset + 9].ToString("x2") + u8archive[u8offset + nodeoffset + 10].ToString("x2") + u8archive[u8offset + nodeoffset + 11].ToString("x2"); - - nodeoffset += 12; - } - - int stringtablepos = u8offset + nodeoffset; - - for (int x = 0; x < nodecount; x++) - { - bool end = false; - int nameoffset = Tools.HexStringToInt(nodes[x, 1]); - string thisname = ""; - - while (end == false) - { - if (u8archive[stringtablepos + nameoffset] != 0x00) - { - char tempchar = Convert.ToChar(u8archive[stringtablepos + nameoffset]); - thisname += tempchar.ToString(); - nameoffset++; - } - else end = true; - } - - nodes[x, 4] = thisname; - } - - for (int y = 1; y < nodecount; y++) - { - if (nodes[y, 4].Contains(".")) - { - if (nodes[y, 4].Remove(0, nodes[y, 4].LastIndexOf('.')) == ".tpl") - { - int filepos = u8offset + Tools.HexStringToInt(nodes[y, 2]); - int filesize = Tools.HexStringToInt(nodes[y, 3]); - - using (FileStream fs = new FileStream(unpackpath + nodes[y, 4], FileMode.Create)) - { - fs.Write(u8archive, filepos, filesize); - } - } - } - } - } - } - - public class Lz77 - { - private const int N = 4096; - private const int F = 18; - private const int threshold = 2; - private static int[] lson = new int[N + 1]; - private static int[] rson = new int[N + 257]; - private static int[] dad = new int[N + 1]; - private static ushort[] text_buf = new ushort[N + 17]; - private static int match_position = 0, match_length = 0; - private static int textsize = 0; - private static int codesize = 0; - - /// - /// Returns the Offset to the Lz77 Header - /// -1 will be returned, if the file is not Lz77 compressed - /// - /// - /// - public static int GetLz77Offset(byte[] data) - { - int length = 5000; - if (data.Length < 5000) length = data.Length - 4; - - for (int i = 0; i < length; i++) - { - if (data[i] == 0x55 && data[i + 1] == 0xAA && data[i + 2] == 0x38 && data[i + 3] == 0x2D) - { - break; - } - - UInt32 tmp = BitConverter.ToUInt32(data, i); - if (tmp == 0x37375a4c) return i; - } - - return -1; - } - - /// - /// Decompresses the given file - /// - /// - /// - public static void Decompress(string infile, string outfile) - { - byte[] input = Tools.LoadFileToByteArray(infile); - int offset = GetLz77Offset(input); - if (offset == -1) throw new Exception("File is not Lz77 compressed!"); - Tools.SaveFileFromByteArray(Decompress(input, offset), outfile); - } - - /// - /// Decompresses the given data - /// - /// - /// - /// - public static byte[] Decompress(byte[] compressed, int offset) - { - int i, j, k, r, c, z; - uint flags; - UInt32 decomp_size; - UInt32 cur_size = 0; - - MemoryStream infile = new MemoryStream(compressed); - MemoryStream outfile = new MemoryStream(); - - UInt32 gbaheader = new UInt32(); - byte[] temp = new byte[4]; - infile.Seek(offset + 4, SeekOrigin.Begin); - infile.Read(temp, 0, 4); - gbaheader = BitConverter.ToUInt32(temp, 0); - - decomp_size = gbaheader >> 8; - byte[] text_buf = new byte[N + 17]; - - for (i = 0; i < N - F; i++) text_buf[i] = 0xdf; - r = N - F; flags = 7; z = 7; - - while (true) - { - flags <<= 1; - z++; - if (z == 8) - { - if ((c = (char)infile.ReadByte()) == -1) break; - flags = (uint)c; - z = 0; - } - if ((flags & 0x80) == 0) - { - if ((c = infile.ReadByte()) == infile.Length - 1) break; - if (cur_size < decomp_size) outfile.WriteByte((byte)c); - text_buf[r++] = (byte)c; - r &= (N - 1); - cur_size++; - } - else - { - if ((i = infile.ReadByte()) == -1) break; - if ((j = infile.ReadByte()) == -1) break; - j = j | ((i << 8) & 0xf00); - i = ((i >> 4) & 0x0f) + threshold; - for (k = 0; k <= i; k++) - { - c = text_buf[(r - j - 1) & (N - 1)]; - if (cur_size < decomp_size) outfile.WriteByte((byte)c); text_buf[r++] = (byte)c; r &= (N - 1); cur_size++; - } - } - } - - return outfile.ToArray(); - } - - public static void InitTree() - { - int i; - for (i = N + 1; i <= N + 256; i++) rson[i] = N; - for (i = 0; i < N; i++) dad[i] = N; - } - - public static void InsertNode(int r) - { - int i, p, cmp; - cmp = 1; - p = N + 1 + (text_buf[r] == 0xffff ? 0 : text_buf[r]); //text_buf[r]; - rson[r] = lson[r] = N; match_length = 0; - for (; ; ) - { - if (cmp >= 0) - { - if (rson[p] != N) p = rson[p]; - else { rson[p] = r; dad[r] = p; return; } - } - else - { - if (lson[p] != N) p = lson[p]; - else { lson[p] = r; dad[r] = p; return; } - } - for (i = 1; i < F; i++) - if ((cmp = text_buf[r + i] - text_buf[p + i]) != 0) break; - if (i > match_length) - { - match_position = p; - if ((match_length = i) >= F) break; - } - } - dad[r] = dad[p]; lson[r] = lson[p]; rson[r] = rson[p]; - dad[lson[p]] = r; dad[rson[p]] = r; - if (rson[dad[p]] == p) rson[dad[p]] = r; - else lson[dad[p]] = r; - dad[p] = N; - } - - public static void DeleteNode(int p) - { - int q; - - if (dad[p] == N) return; /* not in tree */ - if (rson[p] == N) q = lson[p]; - else if (lson[p] == N) q = rson[p]; - else - { - q = lson[p]; - if (rson[q] != N) - { - do { q = rson[q]; } while (rson[q] != N); - rson[dad[q]] = lson[q]; dad[lson[q]] = dad[q]; - lson[q] = lson[p]; dad[lson[p]] = q; - } - rson[q] = rson[p]; dad[rson[p]] = q; - } - dad[q] = dad[p]; - if (rson[dad[p]] == p) rson[dad[p]] = q; else lson[dad[p]] = q; - dad[p] = N; - } - - /// - /// Lz77 compresses the given File - /// - /// - /// - public static void Compress(string infile, string outfile) - { - byte[] thisfile = Tools.LoadFileToByteArray(infile); - thisfile = Compress(thisfile); - Tools.SaveFileFromByteArray(thisfile, outfile); - } - - /// - /// Lz77 compresses the given and saves it to the given Path - /// - /// - /// - public static void Compress(byte[] file, string outfile) - { - byte[] temp = Compress(file); - Tools.SaveFileFromByteArray(temp, outfile); - } - - /// - /// Lz77 compresses the given Byte Array - /// - /// - /// - public static byte[] Compress(byte[] file) - { - int i, c, len, r, s, last_match_length, code_buf_ptr; - int[] code_buf = new int[17]; - int mask; - UInt32 filesize = ((Convert.ToUInt32(file.Length)) << 8) + 0x10; - byte[] filesizebytes = BitConverter.GetBytes(filesize); - - MemoryStream output = new MemoryStream(); - output.WriteByte((byte)'L'); output.WriteByte((byte)'Z'); output.WriteByte((byte)'7'); output.WriteByte((byte)'7'); - MemoryStream infile = new MemoryStream(file); - - output.Write(filesizebytes, 0, filesizebytes.Length); - - InitTree(); - code_buf[0] = 0; - code_buf_ptr = 1; - mask = 0x80; - s = 0; - r = N - F; - - for (i = s; i < r; i++) text_buf[i] = 0xffff; - for (len = 0; len < F && (c = (int)infile.ReadByte()) != -1; len++) - text_buf[r + len] = (ushort)c; - - if ((textsize = len) == 0) return file; - - for (i = 1; i <= F; i++) InsertNode(r - i); - - InsertNode(r); - - do - { - if (match_length > len) match_length = len; - - if (match_length <= threshold) - { - match_length = 1; - code_buf[code_buf_ptr++] = text_buf[r]; - } - else - { - code_buf[0] |= mask; - - code_buf[code_buf_ptr++] = (char) - (((r - match_position - 1) >> 8) & 0x0f) | - ((match_length - (threshold + 1)) << 4); - - code_buf[code_buf_ptr++] = (char)((r - match_position - 1) & 0xff); - } - if ((mask >>= 1) == 0) - { - for (i = 0; i < code_buf_ptr; i++) - output.WriteByte((byte)code_buf[i]); - codesize += code_buf_ptr; - code_buf[0] = 0; code_buf_ptr = 1; - mask = 0x80; - } - - last_match_length = match_length; - for (i = 0; i < last_match_length && - (c = (int)infile.ReadByte()) != -1; i++) - { - DeleteNode(s); - text_buf[s] = (ushort)c; - if (s < F - 1) text_buf[s + N] = (ushort)c; - s = (s + 1) & (N - 1); r = (r + 1) & (N - 1); - InsertNode(r); - } - - while (i++ < last_match_length) - { - DeleteNode(s); - s = (s + 1) & (N - 1); r = (r + 1) & (N - 1); - if (--len != 0) InsertNode(r); - } - } while (len > 0); - - - if (code_buf_ptr > 1) - { - for (i = 0; i < code_buf_ptr; i++) output.WriteByte((byte)code_buf[i]); - codesize += code_buf_ptr; - } - - if (codesize % 4 != 0) - for (i = 0; i < 4 - (codesize % 4); i++) - output.WriteByte(0x00); - - infile.Close(); - return output.ToArray(); - } - } - - public class TPL - { - /// - /// Converts a Tpl to a Bitmap - /// - /// - /// - public static Bitmap ConvertFromTPL(string tpl) - { - byte[] tplarray = Wii.Tools.LoadFileToByteArray(tpl); - return ConvertFromTPL(tplarray); - } - - /// - /// Converts a Tpl to a Bitmap - /// - /// - /// - public static Bitmap ConvertFromTPL(byte[] tpl) - { - if (GetTextureCount(tpl) > 1) throw new Exception("Tpl's containing more than one Texture are not supported!"); - - int width = GetTextureWidth(tpl); - int height = GetTextureHeight(tpl); - int format = GetTextureFormat(tpl); - if (format == -1) throw new Exception("The Texture has an unsupported format!"); - - switch (format) - { - case 0: - byte[] temp0 = FromI4(tpl); - return ConvertPixelToBitmap(temp0, width, height); - case 1: - byte[] temp1 = FromI8(tpl); - return ConvertPixelToBitmap(temp1, width, height); - case 2: - byte[] temp2 = FromIA4(tpl); - return ConvertPixelToBitmap(temp2, width, height); - case 3: - byte[] temp3 = FromIA8(tpl); - return ConvertPixelToBitmap(temp3, width, height); - case 4: - byte[] temp4 = FromRGB565(tpl); - return ConvertPixelToBitmap(temp4, width, height); - case 5: - byte[] temp5 = FromRGB5A3(tpl); - return ConvertPixelToBitmap(temp5, width, height); - case 6: - byte[] temp6 = FromRGBA8(tpl); - return ConvertPixelToBitmap(temp6, width, height); - case 14: - byte[] temp14 = FromCMP(tpl); - return ConvertPixelToBitmap(temp14, width, height); - default: - throw new Exception("The Texture has an unsupported format!"); - } - } - - /// - /// Converts the Pixel Data into a Png Image - /// - /// Byte array with pixel data - public static System.Drawing.Bitmap ConvertPixelToBitmap(byte[] data, int width, int height) - { - if (width == 0) width = 1; - if (height == 0) height = 1; - - System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); - System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits( - new System.Drawing.Rectangle(0, 0, bmp.Width, bmp.Height), - System.Drawing.Imaging.ImageLockMode.WriteOnly, bmp.PixelFormat); - - System.Runtime.InteropServices.Marshal.Copy(data, 0, bmpData.Scan0, data.Length); - bmp.UnlockBits(bmpData); - return bmp; - } - - /// - /// Gets the Number of Textures in a Tpl - /// - /// - /// - public static int GetTextureCount(byte[] tpl) - { - byte[] tmp = new byte[4]; - tmp[3] = tpl[4]; - tmp[2] = tpl[5]; - tmp[1] = tpl[6]; - tmp[0] = tpl[7]; - UInt32 count = BitConverter.ToUInt32(tmp, 0); - return (int)count; - } - - /// - /// Gets the Format of the Texture in the Tpl - /// - /// - /// - public static int GetTextureFormat(string tpl) - { - byte[] temp = Tools.LoadFileToByteArray(tpl, 0, 50); - return GetTextureFormat(temp); - } - - /// - /// Gets the Format of the Texture in the Tpl - /// - /// - /// - public static int GetTextureFormat(byte[] tpl) - { - byte[] tmp = new byte[4]; - tmp[3] = tpl[24]; - tmp[2] = tpl[25]; - tmp[1] = tpl[26]; - tmp[0] = tpl[27]; - UInt32 format = BitConverter.ToUInt32(tmp, 0); - - if (format == 0 || - format == 1 || - format == 2 || - format == 3 || - format == 4 || - format == 5 || - format == 6 || - format == 14) return (int)format; - - else return -1; //Unsupported Format - } - - /// - /// Gets the Format Name of the Texture in the Tpl - /// - /// - /// - public static string GetTextureFormatName(byte[] tpl) - { - switch (GetTextureFormat(tpl)) - { - case 0: - return "I4"; - case 1: - return "I8"; - case 2: - return "IA4"; - case 3: - return "IA8"; - case 4: - return "RGB565"; - case 5: - return "RGB5A3"; - case 6: - return "RGBA8"; - case 14: - return "CMP"; - default: - return "Unknown"; - } - } - - public static int avg(int w0, int w1, int c0, int c1) - { - int a0 = c0 >> 11; - int a1 = c1 >> 11; - int a = (w0 * a0 + w1 * a1) / (w0 + w1); - int c = (a << 11) & 0xffff; - - a0 = (c0 >> 5) & 63; - a1 = (c1 >> 5) & 63; - a = (w0 * a0 + w1 * a1) / (w0 + w1); - c = c | ((a << 5) & 0xffff); - - a0 = c0 & 31; - a1 = c1 & 31; - a = (w0 * a0 + w1 * a1) / (w0 + w1); - c = c | a; - - return c; - } - - /// - /// Gets the Width of the Texture in the Tpl - /// - /// - /// - public static int GetTextureWidth(byte[] tpl) - { - byte[] tmp = new byte[2]; - tmp[1] = tpl[22]; - tmp[0] = tpl[23]; - UInt16 width = BitConverter.ToUInt16(tmp, 0); - return (int)width; - } - - /// - /// Gets the Height of the Texture in the Tpl - /// - /// - /// - public static int GetTextureHeight(byte[] tpl) - { - byte[] tmp = new byte[2]; - tmp[1] = tpl[20]; - tmp[0] = tpl[21]; - UInt16 height = BitConverter.ToUInt16(tmp, 0); - return (int)height; - } - - /// - /// Gets the offset to the Texturedata in the Tpl - /// - /// - /// - public static int GetTextureOffset(byte[] tpl) - { - byte[] tmp = new byte[4]; - tmp[3] = tpl[28]; - tmp[2] = tpl[29]; - tmp[1] = tpl[30]; - tmp[0] = tpl[31]; - UInt32 offset = BitConverter.ToUInt32(tmp, 0); - return (int)offset; - } - - /// - /// Converts RGBA8 Tpl Array to RGBA Byte Array - /// - /// - /// - public static byte[] FromRGBA8(byte[] tpl) - { - int width = GetTextureWidth(tpl); - int height = GetTextureHeight(tpl); - int offset = GetTextureOffset(tpl); - UInt32[] output = new UInt32[width * height]; - int inp = 0; - for (int y = 0; y < height; y += 4) - { - for (int x = 0; x < width; x += 4) - { - for (int k = 0; k < 2; k++) - { - for (int y1 = y; y1 < y + 4; y1++) - { - for (int x1 = x; x1 < x + 4; x1++) - { - byte[] pixelbytes = new byte[2]; - pixelbytes[1] = tpl[offset + inp * 2]; - pixelbytes[0] = tpl[offset + inp * 2 + 1]; - UInt16 pixel = BitConverter.ToUInt16(pixelbytes, 0); - inp++; - - if ((x1 >= width) || (y1 >= height)) - continue; - - if (k == 0) - { - int a = (pixel >> 8) & 0xff; - int r = (pixel >> 0) & 0xff; - output[x1 + (y1 * width)] |= (UInt32)((r << 16) | (a << 24)); - } - else - { - int g = (pixel >> 8) & 0xff; - int b = (pixel >> 0) & 0xff; - output[x1 + (y1 * width)] |= (UInt32)((g << 8) | (b << 0)); - } - } - } - } - } - } - - return Tools.UInt32ArrayToByteArray(output); - } - - /// - /// Converts RGB5A3 Tpl Array to RGBA Byte Array - /// - /// - /// - public static byte[] FromRGB5A3(byte[] tpl) - { - int width = GetTextureWidth(tpl); - int height = GetTextureHeight(tpl); - int offset = GetTextureOffset(tpl); - UInt32[] output = new UInt32[width * height]; - int inp = 0; - int r, g, b; - int a = 0; - for (int y = 0; y < height; y += 4) - { - for (int x = 0; x < width; x += 4) - { - for (int y1 = y; y1 < y + 4; y1++) - { - for (int x1 = x; x1 < x + 4; x1++) - { - byte[] pixelbytes = new byte[2]; - pixelbytes[1] = tpl[offset + inp * 2]; - pixelbytes[0] = tpl[offset + inp * 2 + 1]; - UInt16 pixel = BitConverter.ToUInt16(pixelbytes, 0); - inp++; - - if (y1 >= height || x1 >= width) - continue; - - if ((pixel & (1 << 15)) != 0) - { - b = (((pixel >> 10) & 0x1F) * 255) / 31; - g = (((pixel >> 5) & 0x1F) * 255) / 31; - r = (((pixel >> 0) & 0x1F) * 255) / 31; - a = 255; - } - else - { - a = (((pixel >> 12) & 0x07) * 255) / 7; - b = (((pixel >> 8) & 0x0F) * 255) / 15; - g = (((pixel >> 4) & 0x0F) * 255) / 15; - r = (((pixel >> 0) & 0x0F) * 255) / 15; - } - - int rgba = (r << 0) | (g << 8) | (b << 16) | (a << 24); - output[(y1 * width) + x1] = (UInt32)rgba; - } - } - } - } - - return Tools.UInt32ArrayToByteArray(output); - } - - /// - /// Converts RGB565 Tpl Array to RGBA Byte Array - /// - /// - /// - public static byte[] FromRGB565(byte[] tpl) - { - int width = GetTextureWidth(tpl); - int height = GetTextureHeight(tpl); - int offset = GetTextureOffset(tpl); - UInt32[] output = new UInt32[width * height]; - int inp = 0; - for (int y = 0; y < height; y += 4) - { - for (int x = 0; x < width; x += 4) - { - for (int y1 = y; y1 < y + 4; y1++) - { - for (int x1 = x; x1 < x + 4; x1++) - { - byte[] pixelbytes = new byte[2]; - pixelbytes[1] = tpl[offset + inp * 2]; - pixelbytes[0] = tpl[offset + inp * 2 + 1]; - UInt16 pixel = BitConverter.ToUInt16(pixelbytes, 0); - inp++; - - if (y1 >= height || x1 >= width) - continue; - - int b = (((pixel >> 11) & 0x1F) << 3) & 0xff; - int g = (((pixel >> 5) & 0x3F) << 2) & 0xff; - int r = (((pixel >> 0) & 0x1F) << 3) & 0xff; - int a = 255; - - int rgba = (r << 0) | (g << 8) | (b << 16) | (a << 24); - output[y1 * width + x1] = (UInt32)rgba; - } - } - } - } - - return Tools.UInt32ArrayToByteArray(output); - } - - /// - /// Converts I4 Tpl Array to RGBA Byte Array - /// - /// - /// - public static byte[] FromI4(byte[] tpl) - { - int width = GetTextureWidth(tpl); - int height = GetTextureHeight(tpl); - int offset = GetTextureOffset(tpl); - UInt32[] output = new UInt32[width * height]; - int inp = 0; - for (int y = 0; y < height; y += 8) - { - for (int x = 0; x < width; x += 8) - { - for (int y1 = y; y1 < y + 8; y1++) - { - for (int x1 = x; x1 < x + 8; x1 += 2) - { - int pixel = tpl[offset + inp]; - - if (y1 >= height || x1 >= width) - continue; - - int r = (pixel >> 4) * 255 / 15; - int g = (pixel >> 4) * 255 / 15; - int b = (pixel >> 4) * 255 / 15; - int a = (pixel >> 4) * 255 / 15; - - int rgba = (r << 0) | (g << 8) | (b << 16) | (a << 24); - output[y1 * width + x1] = (UInt32)rgba; - - pixel = tpl[offset + inp]; - inp++; - - if (y1 >= height || x1 >= width) - continue; - - r = (pixel & 0x0F) * 255 / 15; - g = (pixel & 0x0F) * 255 / 15; - b = (pixel & 0x0F) * 255 / 15; - a = (pixel & 0x0F) * 255 / 15; - - rgba = (r << 0) | (g << 8) | (b << 16) | (a << 24); - output[y1 * width + x1 + 1] = (UInt32)rgba; - } - } - } - } - - return Tools.UInt32ArrayToByteArray(output); - } - - /// - /// Converts IA4 Tpl Array to RGBA Byte Array - /// - /// - /// - public static byte[] FromIA4(byte[] tpl) - { - int width = GetTextureWidth(tpl); - int height = GetTextureHeight(tpl); - int offset = GetTextureOffset(tpl); - UInt32[] output = new UInt32[width * height]; - int inp = 0; - for (int y = 0; y < height; y += 4) - { - for (int x = 0; x < width; x += 8) - { - for (int y1 = y; y1 < y + 4; y1++) - { - for (int x1 = x; x1 < x + 8; x1++) - { - int pixel = tpl[offset + inp]; - inp++; - - if (y1 >= height || x1 >= width) - continue; - - int r = ((pixel & 0x0F) * 255 / 15) & 0xff; - int g = ((pixel & 0x0F) * 255 / 15) & 0xff; - int b = ((pixel & 0x0F) * 255 / 15) & 0xff; - int a = (((pixel >> 4) * 255) / 15) & 0xff; - - int rgba = (r << 0) | (g << 8) | (b << 16) | (a << 24); - output[y1 * width + x1] = (UInt32)rgba; - } - } - } - } - - return Tools.UInt32ArrayToByteArray(output); - } - - /// - /// Converts I8 Tpl Array to RGBA Byte Array - /// - /// - /// - public static byte[] FromI8(byte[] tpl) - { - int width = GetTextureWidth(tpl); - int height = GetTextureHeight(tpl); - int offset = GetTextureOffset(tpl); - UInt32[] output = new UInt32[width * height]; - int inp = 0; - for (int y = 0; y < height; y += 4) - { - for (int x = 0; x < width; x += 8) - { - for (int y1 = y; y1 < y + 4; y1++) - { - for (int x1 = x; x1 < x + 8; x1++) - { - int pixel = tpl[offset + inp]; - inp++; - - if (y1 >= height || x1 >= width) - continue; - - int r = pixel; - int g = pixel; - int b = pixel; - int a = 255; - - int rgba = (r << 0) | (g << 8) | (b << 16) | (a << 24); - output[y1 * width + x1] = (UInt32)rgba; - } - } - } - } - - return Tools.UInt32ArrayToByteArray(output); - } - - /// - /// Converts IA8 Tpl Array to RGBA Byte Array - /// - /// - /// - public static byte[] FromIA8(byte[] tpl) - { - int width = GetTextureWidth(tpl); - int height = GetTextureHeight(tpl); - int offset = GetTextureOffset(tpl); - UInt32[] output = new UInt32[width * height]; - int inp = 0; - for (int y = 0; y < height; y += 4) - { - for (int x = 0; x < width; x += 4) - { - for (int y1 = y; y1 < y + 4; y1++) - { - for (int x1 = x; x1 < x + 4; x1++) - { - byte[] pixelbytes = new byte[2]; - pixelbytes[1] = tpl[offset + inp * 2]; - pixelbytes[0] = tpl[offset + inp * 2 + 1]; - UInt16 pixel = BitConverter.ToUInt16(pixelbytes, 0); - inp++; - - if (y1 >= height || x1 >= width) - continue; - - int r = (pixel >> 8);// &0xff; - int g = (pixel >> 8);// &0xff; - int b = (pixel >> 8);// &0xff; - int a = (pixel >> 8) & 0xff; - - int rgba = (r << 0) | (g << 8) | (b << 16) | (a << 24); - output[y1 * width + x1] = (UInt32)rgba; - } - } - } - } - - return Tools.UInt32ArrayToByteArray(output); - } - - /// - /// Converts CMP Tpl Array to RGBA Byte Array - /// - /// - /// - public static byte[] FromCMP(byte[] tpl) - { - int width = GetTextureWidth(tpl); - int height = GetTextureHeight(tpl); - int offset = GetTextureOffset(tpl); - UInt32[] output = new UInt32[width * height]; - UInt16[] c = new UInt16[4]; - int[] pix = new int[3]; - int inp = 0; - - for (int y = 0; y < height; y++) - { - for (int x = 0; x < width; x++) - { - int ww = Tools.AddPadding(width, 8); - - int x0 = x & 0x03; - int x1 = (x >> 2) & 0x01; - int x2 = x >> 3; - - int y0 = y & 0x03; - int y1 = (y >> 2) & 0x01; - int y2 = y >> 3; - - int off = (8 * x1) + (16 * y1) + (32 * x2) + (4 * ww * y2); - - byte[] tmp1 = new byte[2]; - tmp1[1] = tpl[offset + off]; - tmp1[0] = tpl[offset + off + 1]; - c[0] = BitConverter.ToUInt16(tmp1, 0); - tmp1[1] = tpl[offset + off + 2]; - tmp1[0] = tpl[offset + off + 3]; - c[1] = BitConverter.ToUInt16(tmp1, 0); - - if (c[0] > c[1]) - { - c[2] = (UInt16)avg(2, 1, c[0], c[1]); - c[3] = (UInt16)avg(1, 2, c[0], c[1]); - } - else - { - c[2] = (UInt16)avg(1, 1, c[0], c[1]); - c[3] = 0; - } - - byte[] pixeldata = new byte[4]; - pixeldata[3] = tpl[offset + off + 4]; - pixeldata[2] = tpl[offset + off + 5]; - pixeldata[1] = tpl[offset + off + 6]; - pixeldata[0] = tpl[offset + off + 7]; - UInt32 pixel = BitConverter.ToUInt32(pixeldata, 0); - - int ix = x0 + (4 * y0); - int raw = c[(pixel >> (30 - (2 * ix))) & 0x03]; - - pix[0] = (raw >> 8) & 0xf8; - pix[1] = (raw >> 3) & 0xf8; - pix[2] = (raw << 3) & 0xf8; - - int intout = (pix[0] << 16) | (pix[1] << 8) | (pix[2] << 0) | (255 << 24); - output[inp] = (UInt32)intout; - inp++; - } - } - - return Tools.UInt32ArrayToByteArray(output); - } - - /// - /// Gets the pixel data of a Bitmap as an Byte Array - /// - /// - /// - public static uint[] BitmapToRGBA(Bitmap img) - { - int x = img.Width; - int y = img.Height; - UInt32[] rgba = new UInt32[x * y]; - - for (int i = 0; i < y; i += 4) - { - for (int j = 0; j < x; j += 4) - { - for (int y1 = i; y1 < i + 4; y1++) - { - for (int x1 = j; x1 < j + 4; x1++) - { - if (y1 >= y || x1 >= x) - continue; - - Color color = img.GetPixel(x1, y1); - rgba[x1 + (y1 * x)] = (UInt32)color.ToArgb(); - } - } - } - } - - return rgba; - } - - /// - /// Converts an Image to a Tpl - /// - /// - /// 4 = RGB565, 5 = RGB5A3, 6 = RGBA8 - /// - public static void ConvertToTPL(Bitmap img, string destination, int format) - { - byte[] tpl = ConvertToTPL(img, format); - - using (FileStream fs = new FileStream(destination, FileMode.Create)) - { - fs.Write(tpl, 0, tpl.Length); - } - } - - /// - /// Converts an Image to a Tpl - /// - /// - /// 4 = RGB565, 5 = RGB5A3, 6 = RGBA8 - /// - public static void ConvertToTPL(Image img, string destination, int format) - { - byte[] tpl = ConvertToTPL((Bitmap)img, format); - - using (FileStream fs = new FileStream(destination, FileMode.Create)) - { - fs.Write(tpl, 0, tpl.Length); - } - } - - /// - /// Converts an Image to a Tpl - /// - /// - /// 4 = RGB565, 5 = RGB5A3, 6 = RGBA8 - /// - public static byte[] ConvertToTPL(Image img, int format) - { - return ConvertToTPL((Bitmap)img, format); - } - - /// - /// Converts an Image to a Tpl - /// - /// - /// 4 = RGB565, 5 = RGB5A3, 6 = RGBA8 - /// - public static byte[] ConvertToTPL(Bitmap img, int format) - { - using (MemoryStream ms = new MemoryStream()) - { - byte[] rgbaData; - - UInt32 tplmagic = 0x20af30; - UInt32 ntextures = 0x1; - UInt32 headersize = 0xc; - UInt32 texheaderoff = 0x14; - UInt32 texpaletteoff = 0x0; - - UInt16 texheight = (UInt16)img.Height; - UInt16 texwidth = (UInt16)img.Width; - UInt32 texformat; - UInt32 texdataoffset = 0x40; - byte[] rest = new byte[] { 00, 00, 00, 00, 00, 00, 00, 00, 00, 01, 00, 00, 00, 01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 }; - //This should do it for our needs.. rest includes padding - - switch (format) - { - case 4: //RGB565 - texformat = 0x4; - rgbaData = ToRGB565(img); - break; - case 5: //RGB5A3 - texformat = 0x5; - rgbaData = ToRGB5A3(img); - break; - default: //RGBA8 = 6 - texformat = 0x6; - rgbaData = ToRGBA8(img); - break; - } - - byte[] buffer = BitConverter.GetBytes(tplmagic); Array.Reverse(buffer); - ms.Seek(0, SeekOrigin.Begin); - ms.Write(buffer, 0, buffer.Length); - - buffer = BitConverter.GetBytes(ntextures); Array.Reverse(buffer); - ms.Write(buffer, 0, buffer.Length); - - buffer = BitConverter.GetBytes(headersize); Array.Reverse(buffer); - ms.Write(buffer, 0, buffer.Length); - - buffer = BitConverter.GetBytes(texheaderoff); Array.Reverse(buffer); - ms.Write(buffer, 0, buffer.Length); - - buffer = BitConverter.GetBytes(texpaletteoff); Array.Reverse(buffer); - ms.Write(buffer, 0, buffer.Length); - - buffer = BitConverter.GetBytes(texheight); Array.Reverse(buffer); - ms.Write(buffer, 0, buffer.Length); - - buffer = BitConverter.GetBytes(texwidth); Array.Reverse(buffer); - ms.Write(buffer, 0, buffer.Length); - - buffer = BitConverter.GetBytes(texformat); Array.Reverse(buffer); - ms.Write(buffer, 0, buffer.Length); - - buffer = BitConverter.GetBytes(texdataoffset); Array.Reverse(buffer); - ms.Write(buffer, 0, buffer.Length); - - ms.Write(rest, 0, rest.Length); - - ms.Write(rgbaData, 0, rgbaData.Length); - - return ms.ToArray(); - } - } - - /// - /// Converts an Image to RGBA8 Tpl data - /// - /// - /// - public static byte[] ToRGBA8(Bitmap img) - { - uint[] pixeldata = BitmapToRGBA(img); - int w = img.Width; - int h = img.Height; - int z = 0, iv = 0; - byte[] output = new byte[Tools.AddPadding(w, 4) * Tools.AddPadding(h, 4) * 4]; - uint[] lr = new uint[32], lg = new uint[32], lb = new uint[32], la = new uint[32]; - - for (int y1 = 0; y1 < h; y1 += 4) - { - for (int x1 = 0; x1 < w; x1 += 4) - { - for (int y = y1; y < (y1 + 4); y++) - { - for (int x = x1; x < (x1 + 4); x++) - { - UInt32 rgba; - - if (y >= h || x >= w) - { - rgba = 0; - } - else - { - rgba = pixeldata[x + (y * w)]; - } - - lr[z] = (uint)(rgba >> 16) & 0xff; - lg[z] = (uint)(rgba >> 8) & 0xff; - lb[z] = (uint)(rgba >> 0) & 0xff; - la[z] = (uint)(rgba >> 24) & 0xff; - - z++; - } - } - - if (z == 16) - { - for (int i = 0; i < 16; i++) - { - output[iv++] = (byte)(la[i]); - output[iv++] = (byte)(lr[i]); - } - for (int i = 0; i < 16; i++) - { - output[iv++] = (byte)(lg[i]); - output[iv++] = (byte)(lb[i]); - } - - z = 0; - } - } - } - - - return output; - } - - /// - /// Converts an Image to RGBA565 Tpl data - /// - /// - /// - public static byte[] ToRGB565(Bitmap img) - { - uint[] pixeldata = BitmapToRGBA(img); - int w = img.Width; - int h = img.Height; - int z = -1; - byte[] output = new byte[Tools.AddPadding(w, 4) * Tools.AddPadding(h, 4) * 2]; - - for (int y1 = 0; y1 < h; y1 += 4) - { - for (int x1 = 0; x1 < w; x1 += 4) - { - for (int y = y1; y < y1 + 4; y++) - { - for (int x = x1; x < x1 + 4; x++) - { - UInt16 newpixel; - - if (y >= h || x >= w) - { - newpixel = 0; - } - else - { - uint rgba = pixeldata[x + (y * w)]; - - uint b = (rgba >> 16) & 0xff; - uint g = (rgba >> 8) & 0xff; - uint r = (rgba >> 0) & 0xff; - - newpixel = (UInt16)(((b >> 3) << 11) | ((g >> 2) << 5) | ((r >> 3) << 0)); - } - - byte[] temp = BitConverter.GetBytes(newpixel); - Array.Reverse(temp); - - output[++z] = temp[0]; - output[++z] = temp[1]; - } - } - } - } - - return output; - } - - /// - /// Converts an Image to RGBA5A3 Tpl data - /// - /// - /// - public static byte[] ToRGB5A3(Bitmap img) - { - uint[] pixeldata = BitmapToRGBA(img); - int w = img.Width; - int h = img.Height; - int z = -1; - byte[] output = new byte[Tools.AddPadding(w, 4) * Tools.AddPadding(h, 4) * 2]; - - for (int y1 = 0; y1 < h; y1 += 4) - { - for (int x1 = 0; x1 < w; x1 += 4) - { - for (int y = y1; y < y1 + 4; y++) - { - for (int x = x1; x < x1 + 4; x++) - { - int newpixel; - - if (y >= h || x >= w) - { - newpixel = 0; - } - else - { - int rgba = (int)pixeldata[x + (y * w)]; - newpixel = 0; - - int r = (rgba >> 16) & 0xff; - int g = (rgba >> 8) & 0xff; - int b = (rgba >> 0) & 0xff; - int a = (rgba >> 24) & 0xff; - - if (a <= 0xda) - { - //RGB4A3 - - newpixel &= ~(1 << 15); - - r = ((r * 15) / 255) & 0xf; - g = ((g * 15) / 255) & 0xf; - b = ((b * 15) / 255) & 0xf; - a = ((a * 7) / 255) & 0x7; - - newpixel |= a << 12; - newpixel |= b << 0; - newpixel |= g << 4; - newpixel |= r << 8; - } - else - { - //RGB5 - - newpixel |= (1 << 15); - - r = ((r * 31) / 255) & 0x1f; - g = ((g * 31) / 255) & 0x1f; - b = ((b * 31) / 255) & 0x1f; - - newpixel |= b << 0; - newpixel |= g << 5; - newpixel |= r << 10; - } - } - - byte[] temp = BitConverter.GetBytes((UInt16)newpixel); - Array.Reverse(temp); - - output[++z] = temp[0]; - output[++z] = temp[1]; - } - } - } - } - - return output; - } - } - - public class NAND - { - /// - /// Backups all Saves from a NAND Backup - /// - /// - /// - public static void BackupSaves(string nandpath, string destinationpath) - { - string titlefolder = nandpath + "\\title"; - string[] lowerdirs = Directory.GetDirectories(titlefolder); - Tools.ChangeProgress(0); - - for (int i = 0; i < lowerdirs.Length; i++) - { - Tools.ChangeProgress((i + 1) * 100 / lowerdirs.Length); - string[] upperdirs = Directory.GetDirectories(lowerdirs[i]); - - for (int j = 0; j < upperdirs.Length; j++) - { - if (Directory.Exists(upperdirs[j] + "\\data")) - { - if (Directory.GetFiles(upperdirs[j] + "\\data").Length > 0 || - Directory.GetDirectories(upperdirs[j] + "\\data").Length > 0) - { - Tools.CopyDirectory(upperdirs[j] + "\\data", (upperdirs[j] + "\\data").Replace(nandpath, destinationpath).Replace("\\title", "")); - } - } - } - } - } - - /// - /// Restores all Saves for existing titles to a NAND Backup - /// - /// - /// - public static void RestoreSaves(string backuppath, string nandpath) - { - string titlefolder = nandpath + "\\title"; - string[] lowerdirs = Directory.GetDirectories(backuppath); - Tools.ChangeProgress(0); - - for (int i = 0; i < lowerdirs.Length; i++) - { - Tools.ChangeProgress((i + 1) * 100 / lowerdirs.Length); - string[] upperdirs = Directory.GetDirectories(lowerdirs[i]); - - for (int j = 0; j < upperdirs.Length; j++) - { - string[] datafiles = Directory.GetFiles(upperdirs[j] + "\\data"); - string upperdirnand = upperdirs[j].Replace(backuppath, titlefolder); - - if (Directory.Exists(upperdirnand) && - (Directory.GetFiles(upperdirs[j] + "\\data").Length > 0 || - Directory.GetDirectories(upperdirs[j] + "\\data").Length > 0)) - { - if (!Directory.Exists(upperdirnand + "\\data")) Directory.CreateDirectory(upperdirnand + "\\data"); - Tools.CopyDirectory(upperdirs[j] + "\\data", (upperdirs[j] + "\\data").Replace(backuppath, titlefolder)); - } - } - } - - Tools.ChangeProgress(100); - } - - /// - /// Backups a single Save - /// - /// - /// Format: XXXXXXXX\XXXXXXXX - /// - public static void BackupSingleSave(string nandpath, string titlepath, string destinationpath) - { - string datafolder = nandpath + "\\title\\" + titlepath + "\\data"; - - if (Directory.GetFiles(datafolder).Length > 0 || - Directory.GetDirectories(datafolder).Length > 0) - { - string savefolder = datafolder.Replace(nandpath, destinationpath).Replace("\\title", ""); - if (!Directory.Exists(savefolder)) Directory.CreateDirectory(savefolder); - - Tools.CopyDirectory(datafolder, savefolder); - } - else - { - throw new Exception("No save data was found!"); - } - } - - /// - /// Restores a singe Save, if the title exists on NAND Backup - /// - /// - /// Format: XXXXXXXX\XXXXXXXX - /// - public static void RestoreSingleSave(string backuppath, string titlepath, string nandpath) - { - string titlefoldernand = nandpath + "\\title\\" + titlepath; - string titlefolder = titlefoldernand.Replace(nandpath, backuppath).Replace("\\title", ""); - - if (Directory.Exists(titlefoldernand) && - (Directory.GetFiles(titlefolder + "\\data").Length > 0 || - Directory.GetDirectories(titlefolder + "\\data").Length > 0)) - { - if (!Directory.Exists(titlefoldernand + "\\data")) Directory.CreateDirectory(titlefoldernand + "\\data"); - Tools.CopyDirectory(titlefolder + "\\data", titlefoldernand + "\\data"); - } - else - { - throw new Exception("Title not found in NAND Backup!"); - } - } - - /// - /// Checks, if save data exists in the given title folder - /// - /// - /// Format: XXXXXXXX\XXXXXXXX - public static bool CheckForSaveData(string nandpath, string titlepath) - { - string datafolder = nandpath + "\\title\\" + titlepath + "\\data"; - - if (!Directory.Exists(datafolder)) return false; - else - { - string[] datafiles = Directory.GetFiles(datafolder); - - if (datafiles.Length > 0) return true; - else return false; - } - } - - /// - /// Checks, if save data exists in the given title folder - /// - /// - /// Format: XXXXXXXX\XXXXXXXX - public static bool CheckForBackupData(string backuppath, string titlepath) - { - string datafolder = backuppath + "\\" + titlepath + "\\data"; - - if (!Directory.Exists(datafolder)) return false; - else - { - string[] datafiles = Directory.GetFiles(datafolder); - - if (datafiles.Length > 0) return true; - else return false; - } - } - } - - public class Sound - { - /// - /// Checks if the given Wave is a proper PCM WAV file - /// - /// - /// - public static bool CheckWave(string wavefile) - { - byte[] wave = Tools.LoadFileToByteArray(wavefile, 0, 256); - return CheckWave(wave); - } - - /// - /// Checks if the given Wave is a proper PCM WAV file - /// - /// - /// - public static bool CheckWave(byte[] wavefile) - { - if (wavefile[0] != 'R' || - wavefile[1] != 'I' || - wavefile[2] != 'F' || - wavefile[3] != 'F' || - - wavefile[8] != 'W' || - wavefile[9] != 'A' || - wavefile[10] != 'V' || - wavefile[11] != 'E' || - - wavefile[12] != 'f' || - wavefile[13] != 'm' || - wavefile[14] != 't' || - - wavefile[20] != 0x01 || //Format = PCM - wavefile[21] != 0x00 || - - wavefile[34] != 0x10 || //Bitrate (16bit) - wavefile[35] != 0x00 - ) return false; - - return true; - } - - /// - /// Returns the playlength of the Wave file in seconds - /// - /// - /// - public static int GetWaveLength(string wavefile) - { - byte[] wave = Tools.LoadFileToByteArray(wavefile, 0, 256); - return GetWaveLength(wave); - } - - /// - /// Returns the playlength of the Wave file in seconds - /// - /// - /// - public static int GetWaveLength(byte[] wavefile) - { - if (CheckWave(wavefile) == true) - { - byte[] BytesPerSec = new byte[] { wavefile[28], wavefile[29], wavefile[30], wavefile[31] }; - int bps = BitConverter.ToInt32(BytesPerSec, 0); - - byte[] Chunksize = new byte[] { wavefile[4], wavefile[5], wavefile[6], wavefile[7] }; - int chunks = BitConverter.ToInt32(Chunksize, 0); - - return Math.Abs(chunks / bps); - } - else - throw new Exception("This is not a supported PCM Wave file!"); - } - - /// - /// Converts a wave file to a sound.bin - /// - /// - /// - public static void WaveToSoundBin(string wavefile, string soundbin, bool compress) - { - if (CheckWave(wavefile) == true) - { - byte[] sound = Tools.LoadFileToByteArray(wavefile); - if (compress == true) sound = Lz77.Compress(sound); - sound = U8.AddHeaderIMD5(sound); - Wii.Tools.SaveFileFromByteArray(sound, soundbin); - } - else - throw new Exception("This is not a supported 16bit PCM Wave file!"); - } - - /// - /// Converts a sound.bin to a wave file - /// - /// - /// - public static void SoundBinToAudio(string soundbin, string audiofile) - { - FileStream fs = new FileStream(soundbin, FileMode.Open); - byte[] audio = new byte[fs.Length - 32]; - int offset = 0; - - fs.Seek(32, SeekOrigin.Begin); - fs.Read(audio, 0, audio.Length); - fs.Close(); - - if ((offset = Lz77.GetLz77Offset(audio)) != -1) - audio = Lz77.Decompress(audio, offset); - - Tools.SaveFileFromByteArray(audio, audiofile); - } - - /// - /// Converts a BNS file to a sound.bin - /// - /// - /// - public static void BnsToSoundBin(string bnsFile, string soundBin, bool compress) - { - byte[] bns = Tools.LoadFileToByteArray(bnsFile); - - if (bns[0] != 'B' || bns[1] != 'N' || bns[2] != 'S') - throw new Exception("This is not a supported BNS file!"); - - if (compress) bns = Lz77.Compress(bns); - bns = U8.AddHeaderIMD5(bns); - - Tools.SaveFileFromByteArray(bns, soundBin); - } - - /// - /// Returns the length of the BNS audio file in seconds - /// - /// - /// - public static int GetBnsLength(string bnsFile) - { - byte[] temp = Tools.LoadFileToByteArray(bnsFile, 0, 100); - return GetBnsLength(temp); - } - - /// - /// Returns the length of the BNS audio file in seconds - /// - /// - /// - public static int GetBnsLength(byte[] bnsFile) - { - byte[] temp = new byte[4]; - temp[0] = bnsFile[45]; - temp[1] = bnsFile[44]; - - int sampleRate = BitConverter.ToInt16(temp, 0); - - temp[0] = bnsFile[55]; - temp[1] = bnsFile[54]; - temp[2] = bnsFile[53]; - temp[3] = bnsFile[52]; - - int sampleCount = BitConverter.ToInt32(temp, 0); - - return sampleCount / sampleRate; - } - } - - public class Brlyt - { - /// - /// Checks, if the TPLs match the TPLs specified in the brlyt - /// - /// - /// - /// - public static bool CheckBrlytTpls(string brlyt, string[] tpls) - { - byte[] brlytArray = Tools.LoadFileToByteArray(brlyt); - return CheckBrlytTpls(brlytArray, tpls); - } - - /// - /// Checks, if the TPLs match the TPLs specified in the brlyt - /// - /// - /// - /// - public static bool CheckBrlytTpls(byte[] brlyt, string[] tpls) - { - int texcount = Tools.HexStringToInt(brlyt[44].ToString("x2") + brlyt[45].ToString("x2")); - if (tpls.Length != texcount) return false; - - int texnamepos = 48 + (texcount * 8); - for (int i = 0; i < texcount; i++) - { - string thisTex = ""; - while (brlyt[texnamepos] != 0x00) - { - thisTex += Convert.ToChar(brlyt[texnamepos]); - texnamepos++; - } - texnamepos++; - - bool exists = Array.Exists(tpls,tpl => tpl == thisTex); - if (exists == false) return false; - } - - return true; - } - - /// - /// Checks, if one or more Tpls specified in the brlyt are missing and returns - /// the names of the missing ones. - /// - /// - /// - /// - /// - public static bool CheckForMissingTpls(string brlyt, string[] tpls, out string[] missingtpls) - { - byte[] brlytArray = Tools.LoadFileToByteArray(brlyt); - return CheckForMissingTpls(brlytArray, tpls, out missingtpls); - } - - /// - /// Checks, if one or more Tpls specified in the brlyt are missing and returns - /// the names of the missing ones. - /// - /// - /// - /// - /// - public static bool CheckForMissingTpls(byte[] brlyt, string[] tpls, out string[] missingtpls) - { - List missings = new List(); - string[] brlytTpls = GetBrlytTpls(brlyt); - bool missing = false; - - for (int i = 0; i < brlytTpls.Length; i++) - { - if (Tools.StringExistsInStringArray(brlytTpls[i], tpls) == false) - { - missings.Add(brlytTpls[i]); - missing = true; - } - } - - missingtpls = missings.ToArray(); - return missing; - } - - /// - /// Checks, if one or more Tpls are not specified in the brlyt and returns - /// the names of the missing ones. - /// - /// - /// - /// - /// - public static bool CheckForUnusedTpls(string brlyt, string[] tpls, out string[] unusedtpls) - { - byte[] brlytArray = Tools.LoadFileToByteArray(brlyt); - return CheckForUnusedTpls(brlytArray, tpls, out unusedtpls); - } - - /// - /// Checks, if one or more Tpls are not specified in the brlyt and returns - /// the names of the missing ones. - /// - /// - /// - /// - /// - public static bool CheckForUnusedTpls(byte[] brlyt, string[] tpls, out string[] unusedtpls) - { - List unuseds = new List(); - string[] brlytTpls = GetBrlytTpls(brlyt); - bool missing = false; - - for (int i = 0; i < tpls.Length; i++) - { - if (Tools.StringExistsInStringArray(tpls[i], brlytTpls) == false) - { - string wonum = tpls[i].Remove(tpls[i].LastIndexOf('.') - 1) + "00.tpl"; - string wonum2 = tpls[i].Remove(tpls[i].LastIndexOf('.') - 2) + "00.tpl"; - - if (Tools.StringExistsInStringArray(wonum, brlytTpls) == false && - Tools.StringExistsInStringArray(wonum2, brlytTpls) == false) - { - unuseds.Add(tpls[i]); - missing = true; - } - } - } - - unusedtpls = unuseds.ToArray(); - return missing; - } - - /// - /// Returns the name of all Tpls specified in the brlyt - /// - /// - /// - public static string[] GetBrlytTpls(string brlyt) - { - byte[] temp = Tools.LoadFileToByteArray(brlyt); - return GetBrlytTpls(temp); - } - - /// - /// Returns the name of all Tpls specified in the brlyt - /// - /// - /// - public static string[] GetBrlytTpls(byte[] brlyt) - { - int texcount = Tools.HexStringToInt(brlyt[44].ToString("x2") + brlyt[45].ToString("x2")); - int texnamepos = 48 + (texcount * 8); - List Tpls = new List(); - - for (int i = 0; i < texcount; i++) - { - string thisTex = ""; - while (brlyt[texnamepos] != 0x00) - { - thisTex += Convert.ToChar(brlyt[texnamepos]); - texnamepos++; - } - Tpls.Add(thisTex); - texnamepos++; - } - - return Tpls.ToArray(); - } - - /// - /// Returns true, if the given Tpl is specified in the brlyt. - /// TplName must end with ".tpl"! - /// - /// - /// - /// - public static bool IsTplInBrlyt(byte[] brlyt, string TplName) - { - string[] brlytTpls = GetBrlytTpls(brlyt); - bool exists = Array.Exists(brlytTpls, Tpl => Tpl == TplName); - return exists; - } - } - - public class ProgressChangedEventArgs : EventArgs - { - private readonly int p_Percent = 0; - - public int PercentProgress - { - get { return p_Percent; } - } - - internal ProgressChangedEventArgs(int PercentProgress) - : base() - { - this.p_Percent = PercentProgress; - } - } -} \ No newline at end of file diff --git a/FCE_Ultra_Leathl.wad b/FCE_Ultra_Leathl.wad new file mode 100644 index 0000000..5c7db2b Binary files /dev/null and b/FCE_Ultra_Leathl.wad differ diff --git a/FCE_Ultra_wilsoff.wad b/FCE_Ultra_wilsoff.wad new file mode 100644 index 0000000..dff14ce Binary files /dev/null and b/FCE_Ultra_wilsoff.wad differ diff --git a/ForwardMii-Plugin/ForwardMii-Plugin.csproj b/ForwardMii-Plugin/ForwardMii-Plugin.csproj deleted file mode 100644 index c1cf5fa..0000000 --- a/ForwardMii-Plugin/ForwardMii-Plugin.csproj +++ /dev/null @@ -1,95 +0,0 @@ - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {20CB2CA7-6767-4758-97FA-97395F47CD6B} - Library - Properties - ForwardMii - ForwardMii - v2.0 - 512 - - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ForwardMii-Plugin/ForwardMii.cs b/ForwardMii-Plugin/ForwardMii.cs deleted file mode 100644 index b337dce..0000000 --- a/ForwardMii-Plugin/ForwardMii.cs +++ /dev/null @@ -1,41 +0,0 @@ -/* This file is part of CustomizeMii - * Copyright (C) 2009 Leathl - * - * CustomizeMii is free software: you can redistribute it and/or - * modify it under the terms of the GNU General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CustomizeMii is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -using System; - -namespace ForwardMii -{ - public class ForwardMii_Plugin - { - const string version = "1.02"; //Hint for myself: Never use a char in the Version (UpdateCheck)! - - public static string GetVersion() - { - return version; - } - - public static bool CheckDevKit() - { - if (string.IsNullOrEmpty(Environment.GetEnvironmentVariable("DEVKITPRO")) || - string.IsNullOrEmpty(Environment.GetEnvironmentVariable("DEVKITPPC"))) return false; - - if (!System.IO.Directory.Exists(Environment.GetEnvironmentVariable("DEVKITPRO").Remove(0, 1).Insert(1, ":") + "/libogc")) return false; - - return true; - } - } -} diff --git a/ForwardMii-Plugin/ForwardMii_BaseEdit.cs b/ForwardMii-Plugin/ForwardMii_BaseEdit.cs deleted file mode 100644 index 6ea9336..0000000 --- a/ForwardMii-Plugin/ForwardMii_BaseEdit.cs +++ /dev/null @@ -1,1564 +0,0 @@ -/* This file is part of CustomizeMii - * Copyright (C) 2009 Leathl - * - * CustomizeMii is free software: you can redistribute it and/or - * modify it under the terms of the GNU General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CustomizeMii is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -using System.IO; - -namespace ForwardMii -{ - internal class SDSDHC_ConvertBaseStream - { - internal static MemoryStream ConvertTo5Chars(MemoryStream BaseStream) - { - BaseStream.Seek(16823, SeekOrigin.Begin); - BaseStream.WriteByte(0xd0); - BaseStream.Seek(16939, SeekOrigin.Begin); - BaseStream.WriteByte(0xd0); - BaseStream.Seek(17067, SeekOrigin.Begin); - BaseStream.WriteByte(0xd0); - BaseStream.Seek(17439, SeekOrigin.Begin); - BaseStream.WriteByte(0xa4); - BaseStream.Seek(17835, SeekOrigin.Begin); - BaseStream.WriteByte(0xa4); - BaseStream.Seek(21203, SeekOrigin.Begin); - BaseStream.WriteByte(0xa4); - BaseStream.Seek(29399, SeekOrigin.Begin); - BaseStream.WriteByte(0xfc); - BaseStream.Seek(33439, SeekOrigin.Begin); - BaseStream.WriteByte(0xa4); - BaseStream.Seek(69738, SeekOrigin.Begin); - BaseStream.WriteByte(0x01); - BaseStream.Seek(69739, SeekOrigin.Begin); - BaseStream.WriteByte(0x00); - BaseStream.Seek(69767, SeekOrigin.Begin); - BaseStream.WriteByte(0x2c); - BaseStream.Seek(69799, SeekOrigin.Begin); - BaseStream.WriteByte(0x5c); - BaseStream.Seek(69815, SeekOrigin.Begin); - BaseStream.WriteByte(0x70); - BaseStream.Seek(69839, SeekOrigin.Begin); - BaseStream.WriteByte(0x90); - BaseStream.Seek(69855, SeekOrigin.Begin); - BaseStream.WriteByte(0x94); - BaseStream.Seek(69871, SeekOrigin.Begin); - BaseStream.WriteByte(0xc8); - BaseStream.Seek(69999, SeekOrigin.Begin); - BaseStream.WriteByte(0xe4); - BaseStream.Seek(70011, SeekOrigin.Begin); - BaseStream.WriteByte(0xfc); - BaseStream.Seek(70047, SeekOrigin.Begin); - BaseStream.WriteByte(0x0c); - BaseStream.Seek(70071, SeekOrigin.Begin); - BaseStream.WriteByte(0x48); - BaseStream.Seek(70279, SeekOrigin.Begin); - BaseStream.WriteByte(0x1c); - BaseStream.Seek(70319, SeekOrigin.Begin); - BaseStream.WriteByte(0xcc); - BaseStream.Seek(70351, SeekOrigin.Begin); - BaseStream.WriteByte(0x44); - BaseStream.Seek(70795, SeekOrigin.Begin); - BaseStream.WriteByte(0x4c); - BaseStream.Seek(71315, SeekOrigin.Begin); - BaseStream.WriteByte(0xbc); - BaseStream.Seek(71627, SeekOrigin.Begin); - BaseStream.WriteByte(0xb0); - BaseStream.Seek(71655, SeekOrigin.Begin); - BaseStream.WriteByte(0xb4); - BaseStream.Seek(72171, SeekOrigin.Begin); - BaseStream.WriteByte(0xbc); - BaseStream.Seek(91719, SeekOrigin.Begin); - BaseStream.WriteByte(0xc0); - BaseStream.Seek(93627, SeekOrigin.Begin); - BaseStream.WriteByte(0x18); - BaseStream.Seek(94039, SeekOrigin.Begin); - BaseStream.WriteByte(0xc0); - BaseStream.Seek(95527, SeekOrigin.Begin); - BaseStream.WriteByte(0x08); - BaseStream.Seek(95895, SeekOrigin.Begin); - BaseStream.WriteByte(0x18); - BaseStream.Seek(96383, SeekOrigin.Begin); - BaseStream.WriteByte(0x08); - BaseStream.Seek(96667, SeekOrigin.Begin); - BaseStream.WriteByte(0xc0); - BaseStream.Seek(97171, SeekOrigin.Begin); - BaseStream.WriteByte(0xf4); - BaseStream.Seek(98075, SeekOrigin.Begin); - BaseStream.WriteByte(0xf4); - BaseStream.Seek(98711, SeekOrigin.Begin); - BaseStream.WriteByte(0x40); - BaseStream.Seek(99071, SeekOrigin.Begin); - BaseStream.WriteByte(0x14); - BaseStream.Seek(99079, SeekOrigin.Begin); - BaseStream.WriteByte(0x2c); - BaseStream.Seek(99082, SeekOrigin.Begin); - BaseStream.WriteByte(0x04); - BaseStream.Seek(99083, SeekOrigin.Begin); - BaseStream.WriteByte(0x00); - BaseStream.Seek(100619, SeekOrigin.Begin); - BaseStream.WriteByte(0xec); - BaseStream.Seek(100631, SeekOrigin.Begin); - BaseStream.WriteByte(0xe0); - BaseStream.Seek(100662, SeekOrigin.Begin); - BaseStream.WriteByte(0x05); - BaseStream.Seek(100663, SeekOrigin.Begin); - BaseStream.WriteByte(0x00); - BaseStream.Seek(100687, SeekOrigin.Begin); - BaseStream.WriteByte(0x10); - BaseStream.Seek(100723, SeekOrigin.Begin); - BaseStream.WriteByte(0x40); - BaseStream.Seek(100755, SeekOrigin.Begin); - BaseStream.WriteByte(0x70); - BaseStream.Seek(100787, SeekOrigin.Begin); - BaseStream.WriteByte(0xa0); - BaseStream.Seek(100819, SeekOrigin.Begin); - BaseStream.WriteByte(0xd0); - BaseStream.Seek(100850, SeekOrigin.Begin); - BaseStream.WriteByte(0x06); - BaseStream.Seek(100851, SeekOrigin.Begin); - BaseStream.WriteByte(0x00); - BaseStream.Seek(100883, SeekOrigin.Begin); - BaseStream.WriteByte(0x30); - BaseStream.Seek(100915, SeekOrigin.Begin); - BaseStream.WriteByte(0x60); - BaseStream.Seek(100947, SeekOrigin.Begin); - BaseStream.WriteByte(0x90); - BaseStream.Seek(100975, SeekOrigin.Begin); - BaseStream.WriteByte(0xb8); - BaseStream.Seek(101019, SeekOrigin.Begin); - BaseStream.WriteByte(0xd0); - BaseStream.Seek(101043, SeekOrigin.Begin); - BaseStream.WriteByte(0xe0); - BaseStream.Seek(101047, SeekOrigin.Begin); - BaseStream.WriteByte(0xe8); - BaseStream.Seek(101063, SeekOrigin.Begin); - BaseStream.WriteByte(0xec); - BaseStream.Seek(101067, SeekOrigin.Begin); - BaseStream.WriteByte(0xf0); - BaseStream.Seek(101287, SeekOrigin.Begin); - BaseStream.WriteByte(0x20); - BaseStream.Seek(101311, SeekOrigin.Begin); - BaseStream.WriteByte(0x38); - BaseStream.Seek(101315, SeekOrigin.Begin); - BaseStream.WriteByte(0x44); - BaseStream.Seek(101507, SeekOrigin.Begin); - BaseStream.WriteByte(0xf4); - BaseStream.Seek(101523, SeekOrigin.Begin); - BaseStream.WriteByte(0x04); - BaseStream.Seek(101615, SeekOrigin.Begin); - BaseStream.WriteByte(0xa4); - BaseStream.Seek(101803, SeekOrigin.Begin); - BaseStream.WriteByte(0xa4); - BaseStream.Seek(102259, SeekOrigin.Begin); - BaseStream.WriteByte(0x28); - BaseStream.Seek(102283, SeekOrigin.Begin); - BaseStream.WriteByte(0x80); - BaseStream.Seek(102299, SeekOrigin.Begin); - BaseStream.WriteByte(0x80); - BaseStream.Seek(102311, SeekOrigin.Begin); - BaseStream.WriteByte(0x80); - BaseStream.Seek(102327, SeekOrigin.Begin); - BaseStream.WriteByte(0x80); - BaseStream.Seek(102343, SeekOrigin.Begin); - BaseStream.WriteByte(0x80); - BaseStream.Seek(102359, SeekOrigin.Begin); - BaseStream.WriteByte(0x80); - BaseStream.Seek(102375, SeekOrigin.Begin); - BaseStream.WriteByte(0x80); - BaseStream.Seek(102391, SeekOrigin.Begin); - BaseStream.WriteByte(0x80); - BaseStream.Seek(106287, SeekOrigin.Begin); - BaseStream.WriteByte(0xfc); - BaseStream.Seek(114255, SeekOrigin.Begin); - BaseStream.WriteByte(0x20); - BaseStream.Seek(116755, SeekOrigin.Begin); - BaseStream.WriteByte(0x40); - BaseStream.Seek(116767, SeekOrigin.Begin); - BaseStream.WriteByte(0x58); - BaseStream.Seek(120895, SeekOrigin.Begin); - BaseStream.WriteByte(0x24); - BaseStream.Seek(128803, SeekOrigin.Begin); - BaseStream.WriteByte(0xa8); - BaseStream.Seek(129483, SeekOrigin.Begin); - BaseStream.WriteByte(0x90); - BaseStream.Seek(136707, SeekOrigin.Begin); - BaseStream.WriteByte(0xd0); - BaseStream.Seek(137175, SeekOrigin.Begin); - BaseStream.WriteByte(0xd0); - BaseStream.Seek(140083, SeekOrigin.Begin); - BaseStream.WriteByte(0x68); - BaseStream.Seek(140535, SeekOrigin.Begin); - BaseStream.WriteByte(0x90); - BaseStream.Seek(140847, SeekOrigin.Begin); - BaseStream.WriteByte(0xd4); - BaseStream.Seek(140855, SeekOrigin.Begin); - BaseStream.WriteByte(0x18); - BaseStream.Seek(140859, SeekOrigin.Begin); - BaseStream.WriteByte(0xb8); - BaseStream.Seek(144215, SeekOrigin.Begin); - BaseStream.WriteByte(0xc0); - BaseStream.Seek(144735, SeekOrigin.Begin); - BaseStream.WriteByte(0xe8); - BaseStream.Seek(144951, SeekOrigin.Begin); - BaseStream.WriteByte(0x78); - BaseStream.Seek(145071, SeekOrigin.Begin); - BaseStream.WriteByte(0x7c); - BaseStream.Seek(145235, SeekOrigin.Begin); - BaseStream.WriteByte(0x84); - BaseStream.Seek(145315, SeekOrigin.Begin); - BaseStream.WriteByte(0x88); - BaseStream.Seek(145395, SeekOrigin.Begin); - BaseStream.WriteByte(0x78); - BaseStream.Seek(145563, SeekOrigin.Begin); - BaseStream.WriteByte(0xac); - BaseStream.Seek(145687, SeekOrigin.Begin); - BaseStream.WriteByte(0xb4); - BaseStream.Seek(145847, SeekOrigin.Begin); - BaseStream.WriteByte(0x84); - BaseStream.Seek(145955, SeekOrigin.Begin); - BaseStream.WriteByte(0x5c); - BaseStream.Seek(146127, SeekOrigin.Begin); - BaseStream.WriteByte(0xac); - BaseStream.Seek(146251, SeekOrigin.Begin); - BaseStream.WriteByte(0xb4); - BaseStream.Seek(146375, SeekOrigin.Begin); - BaseStream.WriteByte(0xc8); - BaseStream.Seek(146647, SeekOrigin.Begin); - BaseStream.WriteByte(0xcc); - BaseStream.Seek(146794, SeekOrigin.Begin); - BaseStream.WriteByte(0x0e); - BaseStream.Seek(146795, SeekOrigin.Begin); - BaseStream.WriteByte(0x00); - BaseStream.Seek(146923, SeekOrigin.Begin); - BaseStream.WriteByte(0xd8); - BaseStream.Seek(147151, SeekOrigin.Begin); - BaseStream.WriteByte(0xdc); - BaseStream.Seek(153442, SeekOrigin.Begin); - BaseStream.WriteByte(0x0f); - BaseStream.Seek(153443, SeekOrigin.Begin); - BaseStream.WriteByte(0x00); - BaseStream.Seek(153719, SeekOrigin.Begin); - BaseStream.WriteByte(0x20); - BaseStream.Seek(178711, SeekOrigin.Begin); - BaseStream.WriteByte(0x18); - BaseStream.Seek(178715, SeekOrigin.Begin); - BaseStream.WriteByte(0xa4); - BaseStream.Seek(178719, SeekOrigin.Begin); - BaseStream.WriteByte(0xa4); - BaseStream.Seek(178723, SeekOrigin.Begin); - BaseStream.WriteByte(0xa4); - BaseStream.Seek(178727, SeekOrigin.Begin); - BaseStream.WriteByte(0xa4); - BaseStream.Seek(178731, SeekOrigin.Begin); - BaseStream.WriteByte(0xa4); - BaseStream.Seek(178735, SeekOrigin.Begin); - BaseStream.WriteByte(0xa4); - BaseStream.Seek(178739, SeekOrigin.Begin); - BaseStream.WriteByte(0xa4); - BaseStream.Seek(178743, SeekOrigin.Begin); - BaseStream.WriteByte(0xa4); - BaseStream.Seek(178747, SeekOrigin.Begin); - BaseStream.WriteByte(0xa4); - - return BaseStream; - } - - internal static MemoryStream ConvertTo9Chars(MemoryStream BaseStream) - { - BaseStream.Seek(16823, SeekOrigin.Begin); - BaseStream.WriteByte(0xdc); - BaseStream.Seek(16939, SeekOrigin.Begin); - BaseStream.WriteByte(0xdc); - BaseStream.Seek(17067, SeekOrigin.Begin); - BaseStream.WriteByte(0xdc); - BaseStream.Seek(17439, SeekOrigin.Begin); - BaseStream.WriteByte(0xb0); - BaseStream.Seek(17835, SeekOrigin.Begin); - BaseStream.WriteByte(0xb0); - BaseStream.Seek(21203, SeekOrigin.Begin); - BaseStream.WriteByte(0xb0); - BaseStream.Seek(29399, SeekOrigin.Begin); - BaseStream.WriteByte(0x08); - BaseStream.Seek(33439, SeekOrigin.Begin); - BaseStream.WriteByte(0xb0); - BaseStream.Seek(69739, SeekOrigin.Begin); - BaseStream.WriteByte(0x08); - BaseStream.Seek(69767, SeekOrigin.Begin); - BaseStream.WriteByte(0x38); - BaseStream.Seek(69799, SeekOrigin.Begin); - BaseStream.WriteByte(0x68); - BaseStream.Seek(69815, SeekOrigin.Begin); - BaseStream.WriteByte(0x7c); - BaseStream.Seek(69839, SeekOrigin.Begin); - BaseStream.WriteByte(0x9c); - BaseStream.Seek(69855, SeekOrigin.Begin); - BaseStream.WriteByte(0xa0); - BaseStream.Seek(69871, SeekOrigin.Begin); - BaseStream.WriteByte(0xd4); - BaseStream.Seek(69999, SeekOrigin.Begin); - BaseStream.WriteByte(0xf0); - BaseStream.Seek(70011, SeekOrigin.Begin); - BaseStream.WriteByte(0x08); - BaseStream.Seek(70047, SeekOrigin.Begin); - BaseStream.WriteByte(0x18); - BaseStream.Seek(70071, SeekOrigin.Begin); - BaseStream.WriteByte(0x54); - BaseStream.Seek(70279, SeekOrigin.Begin); - BaseStream.WriteByte(0x28); - BaseStream.Seek(70319, SeekOrigin.Begin); - BaseStream.WriteByte(0xd8); - BaseStream.Seek(70351, SeekOrigin.Begin); - BaseStream.WriteByte(0x50); - BaseStream.Seek(70795, SeekOrigin.Begin); - BaseStream.WriteByte(0x58); - BaseStream.Seek(71315, SeekOrigin.Begin); - BaseStream.WriteByte(0xc8); - BaseStream.Seek(71627, SeekOrigin.Begin); - BaseStream.WriteByte(0xbc); - BaseStream.Seek(71655, SeekOrigin.Begin); - BaseStream.WriteByte(0xc0); - BaseStream.Seek(72171, SeekOrigin.Begin); - BaseStream.WriteByte(0xc8); - BaseStream.Seek(91719, SeekOrigin.Begin); - BaseStream.WriteByte(0xcc); - BaseStream.Seek(93627, SeekOrigin.Begin); - BaseStream.WriteByte(0x24); - BaseStream.Seek(94039, SeekOrigin.Begin); - BaseStream.WriteByte(0xcc); - BaseStream.Seek(95527, SeekOrigin.Begin); - BaseStream.WriteByte(0x14); - BaseStream.Seek(95895, SeekOrigin.Begin); - BaseStream.WriteByte(0x24); - BaseStream.Seek(96383, SeekOrigin.Begin); - BaseStream.WriteByte(0x14); - BaseStream.Seek(96667, SeekOrigin.Begin); - BaseStream.WriteByte(0xcc); - BaseStream.Seek(97170, SeekOrigin.Begin); - BaseStream.WriteByte(0x03); - BaseStream.Seek(97171, SeekOrigin.Begin); - BaseStream.WriteByte(0x00); - BaseStream.Seek(98074, SeekOrigin.Begin); - BaseStream.WriteByte(0x03); - BaseStream.Seek(98075, SeekOrigin.Begin); - BaseStream.WriteByte(0x00); - BaseStream.Seek(98711, SeekOrigin.Begin); - BaseStream.WriteByte(0x4c); - BaseStream.Seek(99071, SeekOrigin.Begin); - BaseStream.WriteByte(0x20); - BaseStream.Seek(99079, SeekOrigin.Begin); - BaseStream.WriteByte(0x38); - BaseStream.Seek(99083, SeekOrigin.Begin); - BaseStream.WriteByte(0x0c); - BaseStream.Seek(100619, SeekOrigin.Begin); - BaseStream.WriteByte(0xf8); - BaseStream.Seek(100631, SeekOrigin.Begin); - BaseStream.WriteByte(0xec); - BaseStream.Seek(100663, SeekOrigin.Begin); - BaseStream.WriteByte(0x0c); - BaseStream.Seek(100687, SeekOrigin.Begin); - BaseStream.WriteByte(0x1c); - BaseStream.Seek(100723, SeekOrigin.Begin); - BaseStream.WriteByte(0x4c); - BaseStream.Seek(100755, SeekOrigin.Begin); - BaseStream.WriteByte(0x7c); - BaseStream.Seek(100787, SeekOrigin.Begin); - BaseStream.WriteByte(0xac); - BaseStream.Seek(100819, SeekOrigin.Begin); - BaseStream.WriteByte(0xdc); - BaseStream.Seek(100851, SeekOrigin.Begin); - BaseStream.WriteByte(0x0c); - BaseStream.Seek(100883, SeekOrigin.Begin); - BaseStream.WriteByte(0x3c); - BaseStream.Seek(100915, SeekOrigin.Begin); - BaseStream.WriteByte(0x6c); - BaseStream.Seek(100947, SeekOrigin.Begin); - BaseStream.WriteByte(0x9c); - BaseStream.Seek(100975, SeekOrigin.Begin); - BaseStream.WriteByte(0xc4); - BaseStream.Seek(101019, SeekOrigin.Begin); - BaseStream.WriteByte(0xdc); - BaseStream.Seek(101043, SeekOrigin.Begin); - BaseStream.WriteByte(0xec); - BaseStream.Seek(101047, SeekOrigin.Begin); - BaseStream.WriteByte(0xf4); - BaseStream.Seek(101063, SeekOrigin.Begin); - BaseStream.WriteByte(0xf8); - BaseStream.Seek(101067, SeekOrigin.Begin); - BaseStream.WriteByte(0xfc); - BaseStream.Seek(101287, SeekOrigin.Begin); - BaseStream.WriteByte(0x2c); - BaseStream.Seek(101311, SeekOrigin.Begin); - BaseStream.WriteByte(0x44); - BaseStream.Seek(101315, SeekOrigin.Begin); - BaseStream.WriteByte(0x50); - BaseStream.Seek(101506, SeekOrigin.Begin); - BaseStream.WriteByte(0x07); - BaseStream.Seek(101507, SeekOrigin.Begin); - BaseStream.WriteByte(0x00); - BaseStream.Seek(101523, SeekOrigin.Begin); - BaseStream.WriteByte(0x10); - BaseStream.Seek(101615, SeekOrigin.Begin); - BaseStream.WriteByte(0xb0); - BaseStream.Seek(101803, SeekOrigin.Begin); - BaseStream.WriteByte(0xb0); - BaseStream.Seek(102259, SeekOrigin.Begin); - BaseStream.WriteByte(0x34); - BaseStream.Seek(102283, SeekOrigin.Begin); - BaseStream.WriteByte(0x8c); - BaseStream.Seek(102299, SeekOrigin.Begin); - BaseStream.WriteByte(0x8c); - BaseStream.Seek(102311, SeekOrigin.Begin); - BaseStream.WriteByte(0x8c); - BaseStream.Seek(102327, SeekOrigin.Begin); - BaseStream.WriteByte(0x8c); - BaseStream.Seek(102343, SeekOrigin.Begin); - BaseStream.WriteByte(0x8c); - BaseStream.Seek(102359, SeekOrigin.Begin); - BaseStream.WriteByte(0x8c); - BaseStream.Seek(102375, SeekOrigin.Begin); - BaseStream.WriteByte(0x8c); - BaseStream.Seek(102391, SeekOrigin.Begin); - BaseStream.WriteByte(0x8c); - BaseStream.Seek(106287, SeekOrigin.Begin); - BaseStream.WriteByte(0x08); - BaseStream.Seek(114255, SeekOrigin.Begin); - BaseStream.WriteByte(0x2c); - BaseStream.Seek(116755, SeekOrigin.Begin); - BaseStream.WriteByte(0x4c); - BaseStream.Seek(116767, SeekOrigin.Begin); - BaseStream.WriteByte(0x64); - BaseStream.Seek(120895, SeekOrigin.Begin); - BaseStream.WriteByte(0x30); - BaseStream.Seek(128803, SeekOrigin.Begin); - BaseStream.WriteByte(0xb4); - BaseStream.Seek(129483, SeekOrigin.Begin); - BaseStream.WriteByte(0x9c); - BaseStream.Seek(136707, SeekOrigin.Begin); - BaseStream.WriteByte(0xdc); - BaseStream.Seek(137175, SeekOrigin.Begin); - BaseStream.WriteByte(0xdc); - BaseStream.Seek(140083, SeekOrigin.Begin); - BaseStream.WriteByte(0x74); - BaseStream.Seek(140535, SeekOrigin.Begin); - BaseStream.WriteByte(0x9c); - BaseStream.Seek(140847, SeekOrigin.Begin); - BaseStream.WriteByte(0xe0); - BaseStream.Seek(140855, SeekOrigin.Begin); - BaseStream.WriteByte(0x24); - BaseStream.Seek(140859, SeekOrigin.Begin); - BaseStream.WriteByte(0xc4); - BaseStream.Seek(144215, SeekOrigin.Begin); - BaseStream.WriteByte(0xcc); - BaseStream.Seek(144735, SeekOrigin.Begin); - BaseStream.WriteByte(0xf4); - BaseStream.Seek(144951, SeekOrigin.Begin); - BaseStream.WriteByte(0x84); - BaseStream.Seek(145071, SeekOrigin.Begin); - BaseStream.WriteByte(0x88); - BaseStream.Seek(145235, SeekOrigin.Begin); - BaseStream.WriteByte(0x90); - BaseStream.Seek(145315, SeekOrigin.Begin); - BaseStream.WriteByte(0x94); - BaseStream.Seek(145395, SeekOrigin.Begin); - BaseStream.WriteByte(0x84); - BaseStream.Seek(145563, SeekOrigin.Begin); - BaseStream.WriteByte(0xb8); - BaseStream.Seek(145687, SeekOrigin.Begin); - BaseStream.WriteByte(0xc0); - BaseStream.Seek(145847, SeekOrigin.Begin); - BaseStream.WriteByte(0x90); - BaseStream.Seek(145955, SeekOrigin.Begin); - BaseStream.WriteByte(0x68); - BaseStream.Seek(146127, SeekOrigin.Begin); - BaseStream.WriteByte(0xb8); - BaseStream.Seek(146251, SeekOrigin.Begin); - BaseStream.WriteByte(0xc0); - BaseStream.Seek(146375, SeekOrigin.Begin); - BaseStream.WriteByte(0xd4); - BaseStream.Seek(146647, SeekOrigin.Begin); - BaseStream.WriteByte(0xd8); - BaseStream.Seek(146795, SeekOrigin.Begin); - BaseStream.WriteByte(0x0c); - BaseStream.Seek(146923, SeekOrigin.Begin); - BaseStream.WriteByte(0xe4); - BaseStream.Seek(147151, SeekOrigin.Begin); - BaseStream.WriteByte(0xe8); - BaseStream.Seek(153443, SeekOrigin.Begin); - BaseStream.WriteByte(0x0c); - BaseStream.Seek(153719, SeekOrigin.Begin); - BaseStream.WriteByte(0x2c); - BaseStream.Seek(178711, SeekOrigin.Begin); - BaseStream.WriteByte(0x24); - BaseStream.Seek(178715, SeekOrigin.Begin); - BaseStream.WriteByte(0xb0); - BaseStream.Seek(178719, SeekOrigin.Begin); - BaseStream.WriteByte(0xb0); - BaseStream.Seek(178723, SeekOrigin.Begin); - BaseStream.WriteByte(0xb0); - BaseStream.Seek(178727, SeekOrigin.Begin); - BaseStream.WriteByte(0xb0); - BaseStream.Seek(178731, SeekOrigin.Begin); - BaseStream.WriteByte(0xb0); - BaseStream.Seek(178735, SeekOrigin.Begin); - BaseStream.WriteByte(0xb0); - BaseStream.Seek(178739, SeekOrigin.Begin); - BaseStream.WriteByte(0xb0); - BaseStream.Seek(178743, SeekOrigin.Begin); - BaseStream.WriteByte(0xb0); - BaseStream.Seek(178747, SeekOrigin.Begin); - BaseStream.WriteByte(0xb0); - - return BaseStream; - } - - internal static MemoryStream ConvertTo10Chars(MemoryStream BaseStream) - { - BaseStream.Seek(16823, SeekOrigin.Begin); - BaseStream.WriteByte(0xe4); - BaseStream.Seek(16939, SeekOrigin.Begin); - BaseStream.WriteByte(0xe4); - BaseStream.Seek(17067, SeekOrigin.Begin); - BaseStream.WriteByte(0xe4); - BaseStream.Seek(17439, SeekOrigin.Begin); - BaseStream.WriteByte(0xb8); - BaseStream.Seek(17835, SeekOrigin.Begin); - BaseStream.WriteByte(0xb8); - BaseStream.Seek(21203, SeekOrigin.Begin); - BaseStream.WriteByte(0xb8); - BaseStream.Seek(29399, SeekOrigin.Begin); - BaseStream.WriteByte(0x10); - BaseStream.Seek(33439, SeekOrigin.Begin); - BaseStream.WriteByte(0xb8); - BaseStream.Seek(69695, SeekOrigin.Begin); - BaseStream.WriteByte(0xc8); - BaseStream.Seek(69739, SeekOrigin.Begin); - BaseStream.WriteByte(0x0c); - BaseStream.Seek(69767, SeekOrigin.Begin); - BaseStream.WriteByte(0x40); - BaseStream.Seek(69799, SeekOrigin.Begin); - BaseStream.WriteByte(0x70); - BaseStream.Seek(69815, SeekOrigin.Begin); - BaseStream.WriteByte(0x84); - BaseStream.Seek(69839, SeekOrigin.Begin); - BaseStream.WriteByte(0xa4); - BaseStream.Seek(69855, SeekOrigin.Begin); - BaseStream.WriteByte(0xa8); - BaseStream.Seek(69871, SeekOrigin.Begin); - BaseStream.WriteByte(0xdc); - BaseStream.Seek(69999, SeekOrigin.Begin); - BaseStream.WriteByte(0xf8); - BaseStream.Seek(70011, SeekOrigin.Begin); - BaseStream.WriteByte(0x10); - BaseStream.Seek(70047, SeekOrigin.Begin); - BaseStream.WriteByte(0x20); - BaseStream.Seek(70071, SeekOrigin.Begin); - BaseStream.WriteByte(0x5c); - BaseStream.Seek(70279, SeekOrigin.Begin); - BaseStream.WriteByte(0x30); - BaseStream.Seek(70319, SeekOrigin.Begin); - BaseStream.WriteByte(0xe0); - BaseStream.Seek(70351, SeekOrigin.Begin); - BaseStream.WriteByte(0x58); - BaseStream.Seek(70371, SeekOrigin.Begin); - BaseStream.WriteByte(0xcc); - BaseStream.Seek(70795, SeekOrigin.Begin); - BaseStream.WriteByte(0x60); - BaseStream.Seek(71315, SeekOrigin.Begin); - BaseStream.WriteByte(0xd0); - BaseStream.Seek(71627, SeekOrigin.Begin); - BaseStream.WriteByte(0xc4); - BaseStream.Seek(71655, SeekOrigin.Begin); - BaseStream.WriteByte(0xc8); - BaseStream.Seek(72171, SeekOrigin.Begin); - BaseStream.WriteByte(0xd0); - BaseStream.Seek(91719, SeekOrigin.Begin); - BaseStream.WriteByte(0xd4); - BaseStream.Seek(93627, SeekOrigin.Begin); - BaseStream.WriteByte(0x2c); - BaseStream.Seek(94039, SeekOrigin.Begin); - BaseStream.WriteByte(0xd4); - BaseStream.Seek(95527, SeekOrigin.Begin); - BaseStream.WriteByte(0x1c); - BaseStream.Seek(95895, SeekOrigin.Begin); - BaseStream.WriteByte(0x2c); - BaseStream.Seek(96383, SeekOrigin.Begin); - BaseStream.WriteByte(0x1c); - BaseStream.Seek(96667, SeekOrigin.Begin); - BaseStream.WriteByte(0xd4); - BaseStream.Seek(97170, SeekOrigin.Begin); - BaseStream.WriteByte(0x03); - BaseStream.Seek(97171, SeekOrigin.Begin); - BaseStream.WriteByte(0x08); - BaseStream.Seek(98074, SeekOrigin.Begin); - BaseStream.WriteByte(0x03); - BaseStream.Seek(98075, SeekOrigin.Begin); - BaseStream.WriteByte(0x08); - BaseStream.Seek(98711, SeekOrigin.Begin); - BaseStream.WriteByte(0x54); - BaseStream.Seek(99071, SeekOrigin.Begin); - BaseStream.WriteByte(0x28); - BaseStream.Seek(99079, SeekOrigin.Begin); - BaseStream.WriteByte(0x40); - BaseStream.Seek(99083, SeekOrigin.Begin); - BaseStream.WriteByte(0x14); - BaseStream.Seek(100618, SeekOrigin.Begin); - BaseStream.WriteByte(0x08); - BaseStream.Seek(100619, SeekOrigin.Begin); - BaseStream.WriteByte(0x00); - BaseStream.Seek(100631, SeekOrigin.Begin); - BaseStream.WriteByte(0xf4); - BaseStream.Seek(100663, SeekOrigin.Begin); - BaseStream.WriteByte(0x14); - BaseStream.Seek(100687, SeekOrigin.Begin); - BaseStream.WriteByte(0x24); - BaseStream.Seek(100723, SeekOrigin.Begin); - BaseStream.WriteByte(0x54); - BaseStream.Seek(100755, SeekOrigin.Begin); - BaseStream.WriteByte(0x84); - BaseStream.Seek(100787, SeekOrigin.Begin); - BaseStream.WriteByte(0xb4); - BaseStream.Seek(100819, SeekOrigin.Begin); - BaseStream.WriteByte(0xe4); - BaseStream.Seek(100851, SeekOrigin.Begin); - BaseStream.WriteByte(0x14); - BaseStream.Seek(100883, SeekOrigin.Begin); - BaseStream.WriteByte(0x44); - BaseStream.Seek(100915, SeekOrigin.Begin); - BaseStream.WriteByte(0x74); - BaseStream.Seek(100947, SeekOrigin.Begin); - BaseStream.WriteByte(0xa4); - BaseStream.Seek(100975, SeekOrigin.Begin); - BaseStream.WriteByte(0xcc); - BaseStream.Seek(101019, SeekOrigin.Begin); - BaseStream.WriteByte(0xe4); - BaseStream.Seek(101043, SeekOrigin.Begin); - BaseStream.WriteByte(0xf4); - BaseStream.Seek(101047, SeekOrigin.Begin); - BaseStream.WriteByte(0xfc); - BaseStream.Seek(101062, SeekOrigin.Begin); - BaseStream.WriteByte(0x07); - BaseStream.Seek(101063, SeekOrigin.Begin); - BaseStream.WriteByte(0x00); - BaseStream.Seek(101066, SeekOrigin.Begin); - BaseStream.WriteByte(0x07); - BaseStream.Seek(101067, SeekOrigin.Begin); - BaseStream.WriteByte(0x04); - BaseStream.Seek(101287, SeekOrigin.Begin); - BaseStream.WriteByte(0x34); - BaseStream.Seek(101311, SeekOrigin.Begin); - BaseStream.WriteByte(0x4c); - BaseStream.Seek(101315, SeekOrigin.Begin); - BaseStream.WriteByte(0x58); - BaseStream.Seek(101506, SeekOrigin.Begin); - BaseStream.WriteByte(0x07); - BaseStream.Seek(101507, SeekOrigin.Begin); - BaseStream.WriteByte(0x08); - BaseStream.Seek(101523, SeekOrigin.Begin); - BaseStream.WriteByte(0x18); - BaseStream.Seek(101615, SeekOrigin.Begin); - BaseStream.WriteByte(0xb8); - BaseStream.Seek(101803, SeekOrigin.Begin); - BaseStream.WriteByte(0xb8); - BaseStream.Seek(102259, SeekOrigin.Begin); - BaseStream.WriteByte(0x3c); - BaseStream.Seek(102283, SeekOrigin.Begin); - BaseStream.WriteByte(0x94); - BaseStream.Seek(102299, SeekOrigin.Begin); - BaseStream.WriteByte(0x94); - BaseStream.Seek(102311, SeekOrigin.Begin); - BaseStream.WriteByte(0x94); - BaseStream.Seek(102327, SeekOrigin.Begin); - BaseStream.WriteByte(0x94); - BaseStream.Seek(102343, SeekOrigin.Begin); - BaseStream.WriteByte(0x94); - BaseStream.Seek(102359, SeekOrigin.Begin); - BaseStream.WriteByte(0x94); - BaseStream.Seek(102375, SeekOrigin.Begin); - BaseStream.WriteByte(0x94); - BaseStream.Seek(102391, SeekOrigin.Begin); - BaseStream.WriteByte(0x94); - BaseStream.Seek(106287, SeekOrigin.Begin); - BaseStream.WriteByte(0x10); - BaseStream.Seek(114255, SeekOrigin.Begin); - BaseStream.WriteByte(0x34); - BaseStream.Seek(116755, SeekOrigin.Begin); - BaseStream.WriteByte(0x54); - BaseStream.Seek(116767, SeekOrigin.Begin); - BaseStream.WriteByte(0x6c); - BaseStream.Seek(120895, SeekOrigin.Begin); - BaseStream.WriteByte(0x38); - BaseStream.Seek(128803, SeekOrigin.Begin); - BaseStream.WriteByte(0xbc); - BaseStream.Seek(129483, SeekOrigin.Begin); - BaseStream.WriteByte(0xa4); - BaseStream.Seek(136707, SeekOrigin.Begin); - BaseStream.WriteByte(0xe4); - BaseStream.Seek(137175, SeekOrigin.Begin); - BaseStream.WriteByte(0xe4); - BaseStream.Seek(140083, SeekOrigin.Begin); - BaseStream.WriteByte(0x7c); - BaseStream.Seek(140535, SeekOrigin.Begin); - BaseStream.WriteByte(0xa4); - BaseStream.Seek(140847, SeekOrigin.Begin); - BaseStream.WriteByte(0xe8); - BaseStream.Seek(140855, SeekOrigin.Begin); - BaseStream.WriteByte(0x2c); - BaseStream.Seek(140859, SeekOrigin.Begin); - BaseStream.WriteByte(0xcc); - BaseStream.Seek(144215, SeekOrigin.Begin); - BaseStream.WriteByte(0xd4); - BaseStream.Seek(144735, SeekOrigin.Begin); - BaseStream.WriteByte(0xfc); - BaseStream.Seek(144951, SeekOrigin.Begin); - BaseStream.WriteByte(0x8c); - BaseStream.Seek(145071, SeekOrigin.Begin); - BaseStream.WriteByte(0x90); - BaseStream.Seek(145235, SeekOrigin.Begin); - BaseStream.WriteByte(0x98); - BaseStream.Seek(145315, SeekOrigin.Begin); - BaseStream.WriteByte(0x9c); - BaseStream.Seek(145395, SeekOrigin.Begin); - BaseStream.WriteByte(0x8c); - BaseStream.Seek(145563, SeekOrigin.Begin); - BaseStream.WriteByte(0xc0); - BaseStream.Seek(145687, SeekOrigin.Begin); - BaseStream.WriteByte(0xc8); - BaseStream.Seek(145847, SeekOrigin.Begin); - BaseStream.WriteByte(0x98); - BaseStream.Seek(145955, SeekOrigin.Begin); - BaseStream.WriteByte(0x70); - BaseStream.Seek(146127, SeekOrigin.Begin); - BaseStream.WriteByte(0xc0); - BaseStream.Seek(146251, SeekOrigin.Begin); - BaseStream.WriteByte(0xc8); - BaseStream.Seek(146375, SeekOrigin.Begin); - BaseStream.WriteByte(0xdc); - BaseStream.Seek(146647, SeekOrigin.Begin); - BaseStream.WriteByte(0xe0); - BaseStream.Seek(146795, SeekOrigin.Begin); - BaseStream.WriteByte(0x14); - BaseStream.Seek(146923, SeekOrigin.Begin); - BaseStream.WriteByte(0xec); - BaseStream.Seek(147151, SeekOrigin.Begin); - BaseStream.WriteByte(0xf0); - BaseStream.Seek(153443, SeekOrigin.Begin); - BaseStream.WriteByte(0x14); - BaseStream.Seek(153719, SeekOrigin.Begin); - BaseStream.WriteByte(0x34); - BaseStream.Seek(178711, SeekOrigin.Begin); - BaseStream.WriteByte(0x2c); - BaseStream.Seek(178715, SeekOrigin.Begin); - BaseStream.WriteByte(0xb8); - BaseStream.Seek(178719, SeekOrigin.Begin); - BaseStream.WriteByte(0xb8); - BaseStream.Seek(178723, SeekOrigin.Begin); - BaseStream.WriteByte(0xb8); - BaseStream.Seek(178727, SeekOrigin.Begin); - BaseStream.WriteByte(0xb8); - BaseStream.Seek(178731, SeekOrigin.Begin); - BaseStream.WriteByte(0xb8); - BaseStream.Seek(178735, SeekOrigin.Begin); - BaseStream.WriteByte(0xb8); - BaseStream.Seek(178739, SeekOrigin.Begin); - BaseStream.WriteByte(0xb8); - BaseStream.Seek(178743, SeekOrigin.Begin); - BaseStream.WriteByte(0xb8); - BaseStream.Seek(178747, SeekOrigin.Begin); - BaseStream.WriteByte(0xb8); - - return BaseStream; - } - - internal static MemoryStream ConvertTo13Chars(MemoryStream BaseStream) - { - BaseStream.Seek(16823, SeekOrigin.Begin); - BaseStream.WriteByte(0xe8); - BaseStream.Seek(16939, SeekOrigin.Begin); - BaseStream.WriteByte(0xe8); - BaseStream.Seek(17067, SeekOrigin.Begin); - BaseStream.WriteByte(0xe8); - BaseStream.Seek(17439, SeekOrigin.Begin); - BaseStream.WriteByte(0xbc); - BaseStream.Seek(17835, SeekOrigin.Begin); - BaseStream.WriteByte(0xbc); - BaseStream.Seek(21203, SeekOrigin.Begin); - BaseStream.WriteByte(0xbc); - BaseStream.Seek(29399, SeekOrigin.Begin); - BaseStream.WriteByte(0x14); - BaseStream.Seek(33439, SeekOrigin.Begin); - BaseStream.WriteByte(0xbc); - BaseStream.Seek(69695, SeekOrigin.Begin); - BaseStream.WriteByte(0xc8); - BaseStream.Seek(69739, SeekOrigin.Begin); - BaseStream.WriteByte(0x10); - BaseStream.Seek(69767, SeekOrigin.Begin); - BaseStream.WriteByte(0x44); - BaseStream.Seek(69799, SeekOrigin.Begin); - BaseStream.WriteByte(0x74); - BaseStream.Seek(69815, SeekOrigin.Begin); - BaseStream.WriteByte(0x88); - BaseStream.Seek(69839, SeekOrigin.Begin); - BaseStream.WriteByte(0xa8); - BaseStream.Seek(69855, SeekOrigin.Begin); - BaseStream.WriteByte(0xac); - BaseStream.Seek(69871, SeekOrigin.Begin); - BaseStream.WriteByte(0xe0); - BaseStream.Seek(69999, SeekOrigin.Begin); - BaseStream.WriteByte(0xfc); - BaseStream.Seek(70011, SeekOrigin.Begin); - BaseStream.WriteByte(0x14); - BaseStream.Seek(70047, SeekOrigin.Begin); - BaseStream.WriteByte(0x24); - BaseStream.Seek(70071, SeekOrigin.Begin); - BaseStream.WriteByte(0x60); - BaseStream.Seek(70279, SeekOrigin.Begin); - BaseStream.WriteByte(0x34); - BaseStream.Seek(70319, SeekOrigin.Begin); - BaseStream.WriteByte(0xe4); - BaseStream.Seek(70351, SeekOrigin.Begin); - BaseStream.WriteByte(0x5c); - BaseStream.Seek(70371, SeekOrigin.Begin); - BaseStream.WriteByte(0xcc); - BaseStream.Seek(70795, SeekOrigin.Begin); - BaseStream.WriteByte(0x64); - BaseStream.Seek(71315, SeekOrigin.Begin); - BaseStream.WriteByte(0xd4); - BaseStream.Seek(71627, SeekOrigin.Begin); - BaseStream.WriteByte(0xc8); - BaseStream.Seek(71655, SeekOrigin.Begin); - BaseStream.WriteByte(0xcc); - BaseStream.Seek(72171, SeekOrigin.Begin); - BaseStream.WriteByte(0xd4); - BaseStream.Seek(91719, SeekOrigin.Begin); - BaseStream.WriteByte(0xd8); - BaseStream.Seek(93627, SeekOrigin.Begin); - BaseStream.WriteByte(0x30); - BaseStream.Seek(94039, SeekOrigin.Begin); - BaseStream.WriteByte(0xd8); - BaseStream.Seek(95527, SeekOrigin.Begin); - BaseStream.WriteByte(0x20); - BaseStream.Seek(95895, SeekOrigin.Begin); - BaseStream.WriteByte(0x30); - BaseStream.Seek(96383, SeekOrigin.Begin); - BaseStream.WriteByte(0x20); - BaseStream.Seek(96667, SeekOrigin.Begin); - BaseStream.WriteByte(0xd8); - BaseStream.Seek(97170, SeekOrigin.Begin); - BaseStream.WriteByte(0x03); - BaseStream.Seek(97171, SeekOrigin.Begin); - BaseStream.WriteByte(0x0c); - BaseStream.Seek(98074, SeekOrigin.Begin); - BaseStream.WriteByte(0x03); - BaseStream.Seek(98075, SeekOrigin.Begin); - BaseStream.WriteByte(0x0c); - BaseStream.Seek(98711, SeekOrigin.Begin); - BaseStream.WriteByte(0x58); - BaseStream.Seek(99071, SeekOrigin.Begin); - BaseStream.WriteByte(0x2c); - BaseStream.Seek(99079, SeekOrigin.Begin); - BaseStream.WriteByte(0x44); - BaseStream.Seek(99083, SeekOrigin.Begin); - BaseStream.WriteByte(0x18); - BaseStream.Seek(100618, SeekOrigin.Begin); - BaseStream.WriteByte(0x08); - BaseStream.Seek(100619, SeekOrigin.Begin); - BaseStream.WriteByte(0x04); - BaseStream.Seek(100631, SeekOrigin.Begin); - BaseStream.WriteByte(0xf8); - BaseStream.Seek(100663, SeekOrigin.Begin); - BaseStream.WriteByte(0x18); - BaseStream.Seek(100687, SeekOrigin.Begin); - BaseStream.WriteByte(0x28); - BaseStream.Seek(100723, SeekOrigin.Begin); - BaseStream.WriteByte(0x58); - BaseStream.Seek(100755, SeekOrigin.Begin); - BaseStream.WriteByte(0x88); - BaseStream.Seek(100787, SeekOrigin.Begin); - BaseStream.WriteByte(0xb8); - BaseStream.Seek(100819, SeekOrigin.Begin); - BaseStream.WriteByte(0xe8); - BaseStream.Seek(100851, SeekOrigin.Begin); - BaseStream.WriteByte(0x18); - BaseStream.Seek(100883, SeekOrigin.Begin); - BaseStream.WriteByte(0x48); - BaseStream.Seek(100915, SeekOrigin.Begin); - BaseStream.WriteByte(0x78); - BaseStream.Seek(100947, SeekOrigin.Begin); - BaseStream.WriteByte(0xa8); - BaseStream.Seek(100975, SeekOrigin.Begin); - BaseStream.WriteByte(0xd0); - BaseStream.Seek(101019, SeekOrigin.Begin); - BaseStream.WriteByte(0xe8); - BaseStream.Seek(101043, SeekOrigin.Begin); - BaseStream.WriteByte(0xf8); - BaseStream.Seek(101046, SeekOrigin.Begin); - BaseStream.WriteByte(0x07); - BaseStream.Seek(101047, SeekOrigin.Begin); - BaseStream.WriteByte(0x00); - BaseStream.Seek(101062, SeekOrigin.Begin); - BaseStream.WriteByte(0x07); - BaseStream.Seek(101063, SeekOrigin.Begin); - BaseStream.WriteByte(0x04); - BaseStream.Seek(101066, SeekOrigin.Begin); - BaseStream.WriteByte(0x07); - BaseStream.Seek(101067, SeekOrigin.Begin); - BaseStream.WriteByte(0x08); - BaseStream.Seek(101287, SeekOrigin.Begin); - BaseStream.WriteByte(0x38); - BaseStream.Seek(101311, SeekOrigin.Begin); - BaseStream.WriteByte(0x50); - BaseStream.Seek(101315, SeekOrigin.Begin); - BaseStream.WriteByte(0x5c); - BaseStream.Seek(101506, SeekOrigin.Begin); - BaseStream.WriteByte(0x07); - BaseStream.Seek(101507, SeekOrigin.Begin); - BaseStream.WriteByte(0x0c); - BaseStream.Seek(101523, SeekOrigin.Begin); - BaseStream.WriteByte(0x1c); - BaseStream.Seek(101615, SeekOrigin.Begin); - BaseStream.WriteByte(0xbc); - BaseStream.Seek(101803, SeekOrigin.Begin); - BaseStream.WriteByte(0xbc); - BaseStream.Seek(102259, SeekOrigin.Begin); - BaseStream.WriteByte(0x40); - BaseStream.Seek(102283, SeekOrigin.Begin); - BaseStream.WriteByte(0x98); - BaseStream.Seek(102299, SeekOrigin.Begin); - BaseStream.WriteByte(0x98); - BaseStream.Seek(102311, SeekOrigin.Begin); - BaseStream.WriteByte(0x98); - BaseStream.Seek(102327, SeekOrigin.Begin); - BaseStream.WriteByte(0x98); - BaseStream.Seek(102343, SeekOrigin.Begin); - BaseStream.WriteByte(0x98); - BaseStream.Seek(102359, SeekOrigin.Begin); - BaseStream.WriteByte(0x98); - BaseStream.Seek(102375, SeekOrigin.Begin); - BaseStream.WriteByte(0x98); - BaseStream.Seek(102391, SeekOrigin.Begin); - BaseStream.WriteByte(0x98); - BaseStream.Seek(106287, SeekOrigin.Begin); - BaseStream.WriteByte(0x14); - BaseStream.Seek(114255, SeekOrigin.Begin); - BaseStream.WriteByte(0x38); - BaseStream.Seek(116755, SeekOrigin.Begin); - BaseStream.WriteByte(0x58); - BaseStream.Seek(116767, SeekOrigin.Begin); - BaseStream.WriteByte(0x70); - BaseStream.Seek(120895, SeekOrigin.Begin); - BaseStream.WriteByte(0x3c); - BaseStream.Seek(128803, SeekOrigin.Begin); - BaseStream.WriteByte(0xc0); - BaseStream.Seek(129483, SeekOrigin.Begin); - BaseStream.WriteByte(0xa8); - BaseStream.Seek(136707, SeekOrigin.Begin); - BaseStream.WriteByte(0xe8); - BaseStream.Seek(137175, SeekOrigin.Begin); - BaseStream.WriteByte(0xe8); - BaseStream.Seek(140083, SeekOrigin.Begin); - BaseStream.WriteByte(0x80); - BaseStream.Seek(140535, SeekOrigin.Begin); - BaseStream.WriteByte(0xa8); - BaseStream.Seek(140847, SeekOrigin.Begin); - BaseStream.WriteByte(0xec); - BaseStream.Seek(140855, SeekOrigin.Begin); - BaseStream.WriteByte(0x30); - BaseStream.Seek(140859, SeekOrigin.Begin); - BaseStream.WriteByte(0xd0); - BaseStream.Seek(144215, SeekOrigin.Begin); - BaseStream.WriteByte(0xd8); - BaseStream.Seek(144734, SeekOrigin.Begin); - BaseStream.WriteByte(0x0e); - BaseStream.Seek(144735, SeekOrigin.Begin); - BaseStream.WriteByte(0x00); - BaseStream.Seek(144951, SeekOrigin.Begin); - BaseStream.WriteByte(0x90); - BaseStream.Seek(145071, SeekOrigin.Begin); - BaseStream.WriteByte(0x94); - BaseStream.Seek(145235, SeekOrigin.Begin); - BaseStream.WriteByte(0x9c); - BaseStream.Seek(145315, SeekOrigin.Begin); - BaseStream.WriteByte(0xa0); - BaseStream.Seek(145395, SeekOrigin.Begin); - BaseStream.WriteByte(0x90); - BaseStream.Seek(145563, SeekOrigin.Begin); - BaseStream.WriteByte(0xc4); - BaseStream.Seek(145687, SeekOrigin.Begin); - BaseStream.WriteByte(0xcc); - BaseStream.Seek(145847, SeekOrigin.Begin); - BaseStream.WriteByte(0x9c); - BaseStream.Seek(145955, SeekOrigin.Begin); - BaseStream.WriteByte(0x74); - BaseStream.Seek(146127, SeekOrigin.Begin); - BaseStream.WriteByte(0xc4); - BaseStream.Seek(146251, SeekOrigin.Begin); - BaseStream.WriteByte(0xcc); - BaseStream.Seek(146375, SeekOrigin.Begin); - BaseStream.WriteByte(0xe0); - BaseStream.Seek(146647, SeekOrigin.Begin); - BaseStream.WriteByte(0xe4); - BaseStream.Seek(146795, SeekOrigin.Begin); - BaseStream.WriteByte(0x18); - BaseStream.Seek(146923, SeekOrigin.Begin); - BaseStream.WriteByte(0xf0); - BaseStream.Seek(147151, SeekOrigin.Begin); - BaseStream.WriteByte(0xf4); - BaseStream.Seek(153443, SeekOrigin.Begin); - BaseStream.WriteByte(0x18); - BaseStream.Seek(153719, SeekOrigin.Begin); - BaseStream.WriteByte(0x38); - BaseStream.Seek(178711, SeekOrigin.Begin); - BaseStream.WriteByte(0x30); - BaseStream.Seek(178715, SeekOrigin.Begin); - BaseStream.WriteByte(0xbc); - BaseStream.Seek(178719, SeekOrigin.Begin); - BaseStream.WriteByte(0xbc); - BaseStream.Seek(178723, SeekOrigin.Begin); - BaseStream.WriteByte(0xbc); - BaseStream.Seek(178727, SeekOrigin.Begin); - BaseStream.WriteByte(0xbc); - BaseStream.Seek(178731, SeekOrigin.Begin); - BaseStream.WriteByte(0xbc); - BaseStream.Seek(178735, SeekOrigin.Begin); - BaseStream.WriteByte(0xbc); - BaseStream.Seek(178739, SeekOrigin.Begin); - BaseStream.WriteByte(0xbc); - BaseStream.Seek(178743, SeekOrigin.Begin); - BaseStream.WriteByte(0xbc); - BaseStream.Seek(178747, SeekOrigin.Begin); - BaseStream.WriteByte(0xbc); - - return BaseStream; - } - - internal static MemoryStream ConvertTo14Chars(MemoryStream BaseStream) - { - BaseStream.Seek(16823, SeekOrigin.Begin); - BaseStream.WriteByte(0xf0); - BaseStream.Seek(16939, SeekOrigin.Begin); - BaseStream.WriteByte(0xf0); - BaseStream.Seek(17067, SeekOrigin.Begin); - BaseStream.WriteByte(0xf0); - BaseStream.Seek(17439, SeekOrigin.Begin); - BaseStream.WriteByte(0xc4); - BaseStream.Seek(17835, SeekOrigin.Begin); - BaseStream.WriteByte(0xc4); - BaseStream.Seek(21203, SeekOrigin.Begin); - BaseStream.WriteByte(0xc4); - BaseStream.Seek(29399, SeekOrigin.Begin); - BaseStream.WriteByte(0x1c); - BaseStream.Seek(33439, SeekOrigin.Begin); - BaseStream.WriteByte(0xc4); - BaseStream.Seek(69695, SeekOrigin.Begin); - BaseStream.WriteByte(0xcc); - BaseStream.Seek(69739, SeekOrigin.Begin); - BaseStream.WriteByte(0x14); - BaseStream.Seek(69767, SeekOrigin.Begin); - BaseStream.WriteByte(0x4c); - BaseStream.Seek(69799, SeekOrigin.Begin); - BaseStream.WriteByte(0x7c); - BaseStream.Seek(69815, SeekOrigin.Begin); - BaseStream.WriteByte(0x90); - BaseStream.Seek(69839, SeekOrigin.Begin); - BaseStream.WriteByte(0xb0); - BaseStream.Seek(69855, SeekOrigin.Begin); - BaseStream.WriteByte(0xb4); - BaseStream.Seek(69871, SeekOrigin.Begin); - BaseStream.WriteByte(0xe8); - BaseStream.Seek(69998, SeekOrigin.Begin); - BaseStream.WriteByte(0x02); - BaseStream.Seek(69999, SeekOrigin.Begin); - BaseStream.WriteByte(0x04); - BaseStream.Seek(70011, SeekOrigin.Begin); - BaseStream.WriteByte(0x1c); - BaseStream.Seek(70047, SeekOrigin.Begin); - BaseStream.WriteByte(0x2c); - BaseStream.Seek(70071, SeekOrigin.Begin); - BaseStream.WriteByte(0x68); - BaseStream.Seek(70279, SeekOrigin.Begin); - BaseStream.WriteByte(0x3c); - BaseStream.Seek(70319, SeekOrigin.Begin); - BaseStream.WriteByte(0xec); - BaseStream.Seek(70351, SeekOrigin.Begin); - BaseStream.WriteByte(0x64); - BaseStream.Seek(70371, SeekOrigin.Begin); - BaseStream.WriteByte(0xd0); - BaseStream.Seek(70795, SeekOrigin.Begin); - BaseStream.WriteByte(0x6c); - BaseStream.Seek(71315, SeekOrigin.Begin); - BaseStream.WriteByte(0xdc); - BaseStream.Seek(71627, SeekOrigin.Begin); - BaseStream.WriteByte(0xd0); - BaseStream.Seek(71655, SeekOrigin.Begin); - BaseStream.WriteByte(0xd4); - BaseStream.Seek(72171, SeekOrigin.Begin); - BaseStream.WriteByte(0xdc); - BaseStream.Seek(91719, SeekOrigin.Begin); - BaseStream.WriteByte(0xe0); - BaseStream.Seek(93627, SeekOrigin.Begin); - BaseStream.WriteByte(0x38); - BaseStream.Seek(94039, SeekOrigin.Begin); - BaseStream.WriteByte(0xe0); - BaseStream.Seek(95527, SeekOrigin.Begin); - BaseStream.WriteByte(0x28); - BaseStream.Seek(95895, SeekOrigin.Begin); - BaseStream.WriteByte(0x38); - BaseStream.Seek(96383, SeekOrigin.Begin); - BaseStream.WriteByte(0x28); - BaseStream.Seek(96667, SeekOrigin.Begin); - BaseStream.WriteByte(0xe0); - BaseStream.Seek(97170, SeekOrigin.Begin); - BaseStream.WriteByte(0x03); - BaseStream.Seek(97171, SeekOrigin.Begin); - BaseStream.WriteByte(0x14); - BaseStream.Seek(98074, SeekOrigin.Begin); - BaseStream.WriteByte(0x03); - BaseStream.Seek(98075, SeekOrigin.Begin); - BaseStream.WriteByte(0x14); - BaseStream.Seek(98711, SeekOrigin.Begin); - BaseStream.WriteByte(0x60); - BaseStream.Seek(99071, SeekOrigin.Begin); - BaseStream.WriteByte(0x34); - BaseStream.Seek(99079, SeekOrigin.Begin); - BaseStream.WriteByte(0x4c); - BaseStream.Seek(99083, SeekOrigin.Begin); - BaseStream.WriteByte(0x20); - BaseStream.Seek(100618, SeekOrigin.Begin); - BaseStream.WriteByte(0x08); - BaseStream.Seek(100619, SeekOrigin.Begin); - BaseStream.WriteByte(0x0c); - BaseStream.Seek(100630, SeekOrigin.Begin); - BaseStream.WriteByte(0x05); - BaseStream.Seek(100631, SeekOrigin.Begin); - BaseStream.WriteByte(0x00); - BaseStream.Seek(100663, SeekOrigin.Begin); - BaseStream.WriteByte(0x20); - BaseStream.Seek(100687, SeekOrigin.Begin); - BaseStream.WriteByte(0x30); - BaseStream.Seek(100723, SeekOrigin.Begin); - BaseStream.WriteByte(0x60); - BaseStream.Seek(100755, SeekOrigin.Begin); - BaseStream.WriteByte(0x90); - BaseStream.Seek(100787, SeekOrigin.Begin); - BaseStream.WriteByte(0xc0); - BaseStream.Seek(100819, SeekOrigin.Begin); - BaseStream.WriteByte(0xf0); - BaseStream.Seek(100851, SeekOrigin.Begin); - BaseStream.WriteByte(0x20); - BaseStream.Seek(100883, SeekOrigin.Begin); - BaseStream.WriteByte(0x50); - BaseStream.Seek(100915, SeekOrigin.Begin); - BaseStream.WriteByte(0x80); - BaseStream.Seek(100947, SeekOrigin.Begin); - BaseStream.WriteByte(0xb0); - BaseStream.Seek(100975, SeekOrigin.Begin); - BaseStream.WriteByte(0xd8); - BaseStream.Seek(101019, SeekOrigin.Begin); - BaseStream.WriteByte(0xf0); - BaseStream.Seek(101042, SeekOrigin.Begin); - BaseStream.WriteByte(0x07); - BaseStream.Seek(101043, SeekOrigin.Begin); - BaseStream.WriteByte(0x00); - BaseStream.Seek(101046, SeekOrigin.Begin); - BaseStream.WriteByte(0x07); - BaseStream.Seek(101047, SeekOrigin.Begin); - BaseStream.WriteByte(0x08); - BaseStream.Seek(101062, SeekOrigin.Begin); - BaseStream.WriteByte(0x07); - BaseStream.Seek(101063, SeekOrigin.Begin); - BaseStream.WriteByte(0x0c); - BaseStream.Seek(101066, SeekOrigin.Begin); - BaseStream.WriteByte(0x07); - BaseStream.Seek(101067, SeekOrigin.Begin); - BaseStream.WriteByte(0x10); - BaseStream.Seek(101287, SeekOrigin.Begin); - BaseStream.WriteByte(0x40); - BaseStream.Seek(101311, SeekOrigin.Begin); - BaseStream.WriteByte(0x58); - BaseStream.Seek(101315, SeekOrigin.Begin); - BaseStream.WriteByte(0x64); - BaseStream.Seek(101506, SeekOrigin.Begin); - BaseStream.WriteByte(0x07); - BaseStream.Seek(101507, SeekOrigin.Begin); - BaseStream.WriteByte(0x14); - BaseStream.Seek(101523, SeekOrigin.Begin); - BaseStream.WriteByte(0x24); - BaseStream.Seek(101615, SeekOrigin.Begin); - BaseStream.WriteByte(0xc4); - BaseStream.Seek(101803, SeekOrigin.Begin); - BaseStream.WriteByte(0xc4); - BaseStream.Seek(102259, SeekOrigin.Begin); - BaseStream.WriteByte(0x48); - BaseStream.Seek(102283, SeekOrigin.Begin); - BaseStream.WriteByte(0xa0); - BaseStream.Seek(102299, SeekOrigin.Begin); - BaseStream.WriteByte(0xa0); - BaseStream.Seek(102311, SeekOrigin.Begin); - BaseStream.WriteByte(0xa0); - BaseStream.Seek(102327, SeekOrigin.Begin); - BaseStream.WriteByte(0xa0); - BaseStream.Seek(102343, SeekOrigin.Begin); - BaseStream.WriteByte(0xa0); - BaseStream.Seek(102359, SeekOrigin.Begin); - BaseStream.WriteByte(0xa0); - BaseStream.Seek(102375, SeekOrigin.Begin); - BaseStream.WriteByte(0xa0); - BaseStream.Seek(102391, SeekOrigin.Begin); - BaseStream.WriteByte(0xa0); - BaseStream.Seek(106287, SeekOrigin.Begin); - BaseStream.WriteByte(0x1c); - BaseStream.Seek(114255, SeekOrigin.Begin); - BaseStream.WriteByte(0x40); - BaseStream.Seek(116755, SeekOrigin.Begin); - BaseStream.WriteByte(0x60); - BaseStream.Seek(116767, SeekOrigin.Begin); - BaseStream.WriteByte(0x78); - BaseStream.Seek(120895, SeekOrigin.Begin); - BaseStream.WriteByte(0x44); - BaseStream.Seek(128803, SeekOrigin.Begin); - BaseStream.WriteByte(0xc8); - BaseStream.Seek(129483, SeekOrigin.Begin); - BaseStream.WriteByte(0xb0); - BaseStream.Seek(136707, SeekOrigin.Begin); - BaseStream.WriteByte(0xf0); - BaseStream.Seek(137175, SeekOrigin.Begin); - BaseStream.WriteByte(0xf0); - BaseStream.Seek(140083, SeekOrigin.Begin); - BaseStream.WriteByte(0x88); - BaseStream.Seek(140535, SeekOrigin.Begin); - BaseStream.WriteByte(0xb0); - BaseStream.Seek(140847, SeekOrigin.Begin); - BaseStream.WriteByte(0xf4); - BaseStream.Seek(140855, SeekOrigin.Begin); - BaseStream.WriteByte(0x38); - BaseStream.Seek(140859, SeekOrigin.Begin); - BaseStream.WriteByte(0xd8); - BaseStream.Seek(144215, SeekOrigin.Begin); - BaseStream.WriteByte(0xe0); - BaseStream.Seek(144734, SeekOrigin.Begin); - BaseStream.WriteByte(0x0e); - BaseStream.Seek(144735, SeekOrigin.Begin); - BaseStream.WriteByte(0x08); - BaseStream.Seek(144951, SeekOrigin.Begin); - BaseStream.WriteByte(0x98); - BaseStream.Seek(145071, SeekOrigin.Begin); - BaseStream.WriteByte(0x9c); - BaseStream.Seek(145235, SeekOrigin.Begin); - BaseStream.WriteByte(0xa4); - BaseStream.Seek(145315, SeekOrigin.Begin); - BaseStream.WriteByte(0xa8); - BaseStream.Seek(145395, SeekOrigin.Begin); - BaseStream.WriteByte(0x98); - BaseStream.Seek(145563, SeekOrigin.Begin); - BaseStream.WriteByte(0xcc); - BaseStream.Seek(145687, SeekOrigin.Begin); - BaseStream.WriteByte(0xd4); - BaseStream.Seek(145847, SeekOrigin.Begin); - BaseStream.WriteByte(0xa4); - BaseStream.Seek(145955, SeekOrigin.Begin); - BaseStream.WriteByte(0x7c); - BaseStream.Seek(146127, SeekOrigin.Begin); - BaseStream.WriteByte(0xcc); - BaseStream.Seek(146251, SeekOrigin.Begin); - BaseStream.WriteByte(0xd4); - BaseStream.Seek(146375, SeekOrigin.Begin); - BaseStream.WriteByte(0xe8); - BaseStream.Seek(146647, SeekOrigin.Begin); - BaseStream.WriteByte(0xec); - BaseStream.Seek(146795, SeekOrigin.Begin); - BaseStream.WriteByte(0x20); - BaseStream.Seek(146923, SeekOrigin.Begin); - BaseStream.WriteByte(0xf8); - BaseStream.Seek(147151, SeekOrigin.Begin); - BaseStream.WriteByte(0xfc); - BaseStream.Seek(153443, SeekOrigin.Begin); - BaseStream.WriteByte(0x20); - BaseStream.Seek(153719, SeekOrigin.Begin); - BaseStream.WriteByte(0x40); - BaseStream.Seek(178711, SeekOrigin.Begin); - BaseStream.WriteByte(0x38); - BaseStream.Seek(178715, SeekOrigin.Begin); - BaseStream.WriteByte(0xc4); - BaseStream.Seek(178719, SeekOrigin.Begin); - BaseStream.WriteByte(0xc4); - BaseStream.Seek(178723, SeekOrigin.Begin); - BaseStream.WriteByte(0xc4); - BaseStream.Seek(178727, SeekOrigin.Begin); - BaseStream.WriteByte(0xc4); - BaseStream.Seek(178731, SeekOrigin.Begin); - BaseStream.WriteByte(0xc4); - BaseStream.Seek(178735, SeekOrigin.Begin); - BaseStream.WriteByte(0xc4); - BaseStream.Seek(178739, SeekOrigin.Begin); - BaseStream.WriteByte(0xc4); - BaseStream.Seek(178743, SeekOrigin.Begin); - BaseStream.WriteByte(0xc4); - BaseStream.Seek(178747, SeekOrigin.Begin); - BaseStream.WriteByte(0xc4); - - return BaseStream; - } - - internal static MemoryStream ConvertTo18Chars(MemoryStream BaseStream) - { - BaseStream.Seek(16823, SeekOrigin.Begin); - BaseStream.WriteByte(0xfc); - BaseStream.Seek(16939, SeekOrigin.Begin); - BaseStream.WriteByte(0xfc); - BaseStream.Seek(17067, SeekOrigin.Begin); - BaseStream.WriteByte(0xfc); - BaseStream.Seek(17439, SeekOrigin.Begin); - BaseStream.WriteByte(0xd0); - BaseStream.Seek(17835, SeekOrigin.Begin); - BaseStream.WriteByte(0xd0); - BaseStream.Seek(21203, SeekOrigin.Begin); - BaseStream.WriteByte(0xd0); - BaseStream.Seek(29399, SeekOrigin.Begin); - BaseStream.WriteByte(0x28); - BaseStream.Seek(33439, SeekOrigin.Begin); - BaseStream.WriteByte(0xd0); - BaseStream.Seek(69695, SeekOrigin.Begin); - BaseStream.WriteByte(0xd0); - BaseStream.Seek(69739, SeekOrigin.Begin); - BaseStream.WriteByte(0x1c); - BaseStream.Seek(69767, SeekOrigin.Begin); - BaseStream.WriteByte(0x58); - BaseStream.Seek(69799, SeekOrigin.Begin); - BaseStream.WriteByte(0x88); - BaseStream.Seek(69815, SeekOrigin.Begin); - BaseStream.WriteByte(0x9c); - BaseStream.Seek(69839, SeekOrigin.Begin); - BaseStream.WriteByte(0xbc); - BaseStream.Seek(69855, SeekOrigin.Begin); - BaseStream.WriteByte(0xc0); - BaseStream.Seek(69871, SeekOrigin.Begin); - BaseStream.WriteByte(0xf4); - BaseStream.Seek(69999, SeekOrigin.Begin); - BaseStream.WriteByte(0x10); - BaseStream.Seek(70011, SeekOrigin.Begin); - BaseStream.WriteByte(0x28); - BaseStream.Seek(70047, SeekOrigin.Begin); - BaseStream.WriteByte(0x38); - BaseStream.Seek(70071, SeekOrigin.Begin); - BaseStream.WriteByte(0x74); - BaseStream.Seek(70279, SeekOrigin.Begin); - BaseStream.WriteByte(0x48); - BaseStream.Seek(70319, SeekOrigin.Begin); - BaseStream.WriteByte(0xf8); - BaseStream.Seek(70351, SeekOrigin.Begin); - BaseStream.WriteByte(0x70); - BaseStream.Seek(70371, SeekOrigin.Begin); - BaseStream.WriteByte(0xd4); - BaseStream.Seek(70795, SeekOrigin.Begin); - BaseStream.WriteByte(0x78); - BaseStream.Seek(71315, SeekOrigin.Begin); - BaseStream.WriteByte(0xe8); - BaseStream.Seek(71627, SeekOrigin.Begin); - BaseStream.WriteByte(0xdc); - BaseStream.Seek(71655, SeekOrigin.Begin); - BaseStream.WriteByte(0xe0); - BaseStream.Seek(72171, SeekOrigin.Begin); - BaseStream.WriteByte(0xe8); - BaseStream.Seek(91719, SeekOrigin.Begin); - BaseStream.WriteByte(0xec); - BaseStream.Seek(93627, SeekOrigin.Begin); - BaseStream.WriteByte(0x44); - BaseStream.Seek(94039, SeekOrigin.Begin); - BaseStream.WriteByte(0xec); - BaseStream.Seek(95527, SeekOrigin.Begin); - BaseStream.WriteByte(0x34); - BaseStream.Seek(95895, SeekOrigin.Begin); - BaseStream.WriteByte(0x44); - BaseStream.Seek(96383, SeekOrigin.Begin); - BaseStream.WriteByte(0x34); - BaseStream.Seek(96667, SeekOrigin.Begin); - BaseStream.WriteByte(0xec); - BaseStream.Seek(97171, SeekOrigin.Begin); - BaseStream.WriteByte(0x20); - BaseStream.Seek(98075, SeekOrigin.Begin); - BaseStream.WriteByte(0x20); - BaseStream.Seek(98711, SeekOrigin.Begin); - BaseStream.WriteByte(0x6c); - BaseStream.Seek(99071, SeekOrigin.Begin); - BaseStream.WriteByte(0x40); - BaseStream.Seek(99079, SeekOrigin.Begin); - BaseStream.WriteByte(0x58); - BaseStream.Seek(99083, SeekOrigin.Begin); - BaseStream.WriteByte(0x2c); - BaseStream.Seek(100619, SeekOrigin.Begin); - BaseStream.WriteByte(0x18); - BaseStream.Seek(100631, SeekOrigin.Begin); - BaseStream.WriteByte(0x0c); - BaseStream.Seek(100663, SeekOrigin.Begin); - BaseStream.WriteByte(0x2c); - BaseStream.Seek(100687, SeekOrigin.Begin); - BaseStream.WriteByte(0x3c); - BaseStream.Seek(100723, SeekOrigin.Begin); - BaseStream.WriteByte(0x6c); - BaseStream.Seek(100755, SeekOrigin.Begin); - BaseStream.WriteByte(0x9c); - BaseStream.Seek(100787, SeekOrigin.Begin); - BaseStream.WriteByte(0xcc); - BaseStream.Seek(100819, SeekOrigin.Begin); - BaseStream.WriteByte(0xfc); - BaseStream.Seek(100851, SeekOrigin.Begin); - BaseStream.WriteByte(0x2c); - BaseStream.Seek(100883, SeekOrigin.Begin); - BaseStream.WriteByte(0x5c); - BaseStream.Seek(100915, SeekOrigin.Begin); - BaseStream.WriteByte(0x8c); - BaseStream.Seek(100947, SeekOrigin.Begin); - BaseStream.WriteByte(0xbc); - BaseStream.Seek(100975, SeekOrigin.Begin); - BaseStream.WriteByte(0xe4); - BaseStream.Seek(101019, SeekOrigin.Begin); - BaseStream.WriteByte(0xfc); - BaseStream.Seek(101043, SeekOrigin.Begin); - BaseStream.WriteByte(0x0c); - BaseStream.Seek(101047, SeekOrigin.Begin); - BaseStream.WriteByte(0x14); - BaseStream.Seek(101063, SeekOrigin.Begin); - BaseStream.WriteByte(0x18); - BaseStream.Seek(101067, SeekOrigin.Begin); - BaseStream.WriteByte(0x1c); - BaseStream.Seek(101287, SeekOrigin.Begin); - BaseStream.WriteByte(0x4c); - BaseStream.Seek(101311, SeekOrigin.Begin); - BaseStream.WriteByte(0x64); - BaseStream.Seek(101315, SeekOrigin.Begin); - BaseStream.WriteByte(0x70); - BaseStream.Seek(101507, SeekOrigin.Begin); - BaseStream.WriteByte(0x20); - BaseStream.Seek(101523, SeekOrigin.Begin); - BaseStream.WriteByte(0x30); - BaseStream.Seek(101615, SeekOrigin.Begin); - BaseStream.WriteByte(0xd0); - BaseStream.Seek(101803, SeekOrigin.Begin); - BaseStream.WriteByte(0xd0); - BaseStream.Seek(102259, SeekOrigin.Begin); - BaseStream.WriteByte(0x54); - BaseStream.Seek(102283, SeekOrigin.Begin); - BaseStream.WriteByte(0xac); - BaseStream.Seek(102299, SeekOrigin.Begin); - BaseStream.WriteByte(0xac); - BaseStream.Seek(102311, SeekOrigin.Begin); - BaseStream.WriteByte(0xac); - BaseStream.Seek(102327, SeekOrigin.Begin); - BaseStream.WriteByte(0xac); - BaseStream.Seek(102343, SeekOrigin.Begin); - BaseStream.WriteByte(0xac); - BaseStream.Seek(102359, SeekOrigin.Begin); - BaseStream.WriteByte(0xac); - BaseStream.Seek(102375, SeekOrigin.Begin); - BaseStream.WriteByte(0xac); - BaseStream.Seek(102391, SeekOrigin.Begin); - BaseStream.WriteByte(0xac); - BaseStream.Seek(106287, SeekOrigin.Begin); - BaseStream.WriteByte(0x28); - BaseStream.Seek(114255, SeekOrigin.Begin); - BaseStream.WriteByte(0x4c); - BaseStream.Seek(116755, SeekOrigin.Begin); - BaseStream.WriteByte(0x6c); - BaseStream.Seek(116767, SeekOrigin.Begin); - BaseStream.WriteByte(0x84); - BaseStream.Seek(120895, SeekOrigin.Begin); - BaseStream.WriteByte(0x50); - BaseStream.Seek(128803, SeekOrigin.Begin); - BaseStream.WriteByte(0xd4); - BaseStream.Seek(129483, SeekOrigin.Begin); - BaseStream.WriteByte(0xbc); - BaseStream.Seek(136707, SeekOrigin.Begin); - BaseStream.WriteByte(0xfc); - BaseStream.Seek(137175, SeekOrigin.Begin); - BaseStream.WriteByte(0xfc); - BaseStream.Seek(140083, SeekOrigin.Begin); - BaseStream.WriteByte(0x94); - BaseStream.Seek(140535, SeekOrigin.Begin); - BaseStream.WriteByte(0xbc); - BaseStream.Seek(140846, SeekOrigin.Begin); - BaseStream.WriteByte(0x0c); - BaseStream.Seek(140847, SeekOrigin.Begin); - BaseStream.WriteByte(0x00); - BaseStream.Seek(140855, SeekOrigin.Begin); - BaseStream.WriteByte(0x44); - BaseStream.Seek(140859, SeekOrigin.Begin); - BaseStream.WriteByte(0xe4); - BaseStream.Seek(144215, SeekOrigin.Begin); - BaseStream.WriteByte(0xec); - BaseStream.Seek(144735, SeekOrigin.Begin); - BaseStream.WriteByte(0x14); - BaseStream.Seek(144951, SeekOrigin.Begin); - BaseStream.WriteByte(0xa4); - BaseStream.Seek(145071, SeekOrigin.Begin); - BaseStream.WriteByte(0xa8); - BaseStream.Seek(145235, SeekOrigin.Begin); - BaseStream.WriteByte(0xb0); - BaseStream.Seek(145315, SeekOrigin.Begin); - BaseStream.WriteByte(0xb4); - BaseStream.Seek(145395, SeekOrigin.Begin); - BaseStream.WriteByte(0xa4); - BaseStream.Seek(145563, SeekOrigin.Begin); - BaseStream.WriteByte(0xd8); - BaseStream.Seek(145687, SeekOrigin.Begin); - BaseStream.WriteByte(0xe0); - BaseStream.Seek(145847, SeekOrigin.Begin); - BaseStream.WriteByte(0xb0); - BaseStream.Seek(145955, SeekOrigin.Begin); - BaseStream.WriteByte(0x88); - BaseStream.Seek(146127, SeekOrigin.Begin); - BaseStream.WriteByte(0xd8); - BaseStream.Seek(146251, SeekOrigin.Begin); - BaseStream.WriteByte(0xe0); - BaseStream.Seek(146375, SeekOrigin.Begin); - BaseStream.WriteByte(0xf4); - BaseStream.Seek(146647, SeekOrigin.Begin); - BaseStream.WriteByte(0xf8); - BaseStream.Seek(146795, SeekOrigin.Begin); - BaseStream.WriteByte(0x2c); - BaseStream.Seek(146922, SeekOrigin.Begin); - BaseStream.WriteByte(0x0f); - BaseStream.Seek(146923, SeekOrigin.Begin); - BaseStream.WriteByte(0x04); - BaseStream.Seek(147151, SeekOrigin.Begin); - BaseStream.WriteByte(0x08); - BaseStream.Seek(153443, SeekOrigin.Begin); - BaseStream.WriteByte(0x2c); - BaseStream.Seek(153719, SeekOrigin.Begin); - BaseStream.WriteByte(0x4c); - BaseStream.Seek(178711, SeekOrigin.Begin); - BaseStream.WriteByte(0x44); - BaseStream.Seek(178715, SeekOrigin.Begin); - BaseStream.WriteByte(0xd0); - BaseStream.Seek(178719, SeekOrigin.Begin); - BaseStream.WriteByte(0xd0); - BaseStream.Seek(178723, SeekOrigin.Begin); - BaseStream.WriteByte(0xd0); - BaseStream.Seek(178727, SeekOrigin.Begin); - BaseStream.WriteByte(0xd0); - BaseStream.Seek(178731, SeekOrigin.Begin); - BaseStream.WriteByte(0xd0); - BaseStream.Seek(178735, SeekOrigin.Begin); - BaseStream.WriteByte(0xd0); - BaseStream.Seek(178739, SeekOrigin.Begin); - BaseStream.WriteByte(0xd0); - BaseStream.Seek(178743, SeekOrigin.Begin); - BaseStream.WriteByte(0xd0); - BaseStream.Seek(178747, SeekOrigin.Begin); - BaseStream.WriteByte(0xd0); - - return BaseStream; - } - } -} diff --git a/ForwardMii-Plugin/ForwardMii_GX.cs b/ForwardMii-Plugin/ForwardMii_GX.cs deleted file mode 100644 index 2094e36..0000000 --- a/ForwardMii-Plugin/ForwardMii_GX.cs +++ /dev/null @@ -1,320 +0,0 @@ -/* This file is part of CustomizeMii - * Copyright (C) 2009 Leathl - * - * CustomizeMii is free software: you can redistribute it and/or - * modify it under the terms of the GNU General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CustomizeMii is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Drawing; -using System.IO; -using System.Reflection; -using System.Text; -using System.Runtime.InteropServices; - -namespace ForwardMii -{ - public class GXForwarder - { - private readonly string TempDir = Path.GetTempPath() + "ForwardMii_Temp\\" + Guid.NewGuid() + "\\"; - private string thisAppFolder; - private bool elfFirst = false; - private bool usbFirst = false; - private string image43; - private string image169; - public string AppFolder { get { return thisAppFolder; } set { thisAppFolder = value; } } - public bool ElfFirst { get { return elfFirst; } set { elfFirst = value; } } - public bool UsbFirst { get { return usbFirst; } set { usbFirst = value; } } - public string Image43 { get { return image43; } set { image43 = value; } } - public string Image169 { get { return image169; } set { image169 = value; } } - - public GXForwarder() - { - - } - - public GXForwarder(string AppFolder) - { - if (ForwardMii_Plugin.CheckDevKit() == false) throw new Exception("DevkitPro or one of it's components wasn't found!"); - thisAppFolder = AppFolder; - } - - public GXForwarder(string AppFolder, bool UsbFirst) - { - if (ForwardMii_Plugin.CheckDevKit() == false) throw new Exception("DevkitPro or one of it's components wasn't found!"); - thisAppFolder = AppFolder; - usbFirst = UsbFirst; - } - - public GXForwarder(string AppFolder, string Image43, string Image169) - { - if (ForwardMii_Plugin.CheckDevKit() == false) throw new Exception("DevkitPro or one of it's components wasn't found!"); - thisAppFolder = AppFolder; - image43 = Image43; - image169 = Image169; - } - - public GXForwarder(string AppFolder, bool UsbFirst, bool ElfFirst) - { - if (ForwardMii_Plugin.CheckDevKit() == false) throw new Exception("DevkitPro or one of it's components wasn't found!"); - thisAppFolder = AppFolder; - usbFirst = UsbFirst; - elfFirst = ElfFirst; - } - - public GXForwarder(string AppFolder, bool UsbFirst, bool ElfFirst, string Image43, string Image169) - { - if (ForwardMii_Plugin.CheckDevKit() == false) throw new Exception("DevkitPro or one of it's components wasn't found!"); - thisAppFolder = AppFolder; - image43 = Image43; - image169 = Image169; - usbFirst = UsbFirst; - elfFirst = ElfFirst; - } - - public void Clear() - { - thisAppFolder = string.Empty; - elfFirst = false; - usbFirst = false; - image43 = string.Empty; - image169 = string.Empty; - } - - public void Save(string Destionation) - { - Save(Destionation, false); - } - - public void Save(string Destination, bool Overwrite) - { - byte[] theForwarder = ToByteArray(); - - if (Path.HasExtension(Destination) == false) Destination += ".dol"; - - if (File.Exists(Destination)) - { - if (Overwrite == true) - File.Delete(Destination); - else - throw new Exception("The destination file already exists!"); - } - - using (FileStream fs = new FileStream(Destination, FileMode.Create)) - { - fs.Write(theForwarder, 0, theForwarder.Length); - } - } - - public byte[] ToByteArray() - { - MemoryStream ms = this.ToMemoryStream(); - return ms.ToArray(); - } - - public MemoryStream ToMemoryStream() - { - try - { - if (Directory.Exists(TempDir)) Directory.Delete(TempDir, true); - CopyResources(); - EditMainCpp(); - CopyImages(); - if (Compile() == false) throw new Exception("An error occured during compiling!"); - byte[] fileTemp = File.ReadAllBytes(TempDir + "boot.dol"); - - try { Directory.Delete(TempDir, true); } - catch { } - - return new MemoryStream(fileTemp); - } - catch (Exception ex) - { - if (Directory.Exists(TempDir)) Directory.Delete(TempDir, true); - throw new Exception(ex.Message); - } - } - - [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] - static extern uint GetShortPathName([MarshalAs(UnmanagedType.LPTStr)] string lpszLongPath, - [MarshalAs(UnmanagedType.LPTStr)] StringBuilder lpszShortPath, uint cchBuffer); - - public static string GetShortPathName(string longPath) - { - uint size = 256; - StringBuilder buffer = new StringBuilder((int)size); - uint result = GetShortPathName(longPath, buffer, size); - return buffer.ToString(); - } - - private bool Compile() - { - try - { - string tempDir = TempDir; - if (tempDir.Contains(" ")) { tempDir = GetShortPathName(tempDir); } - - ProcessStartInfo makeI = new ProcessStartInfo("make", "-C " + tempDir); - makeI.UseShellExecute = false; - makeI.CreateNoWindow = true; - - Process make = Process.Start(makeI); - make.WaitForExit(); - make.Close(); - - if (File.Exists(TempDir + "boot.dol") && File.Exists(TempDir + "boot.elf")) - { - return true; - } - else return false; - } - catch { return false; } - } - - private void CopyImages() - { - if (!string.IsNullOrEmpty(image43) && File.Exists(image43)) - { - try - { - Image img = Image.FromFile(image43); - if (img.Width != 640 || img.Height != 480) - img = ResizeImage(img, 640, 480); - img.Save(TempDir + "\\source\\images\\background.png", System.Drawing.Imaging.ImageFormat.Png); - } - catch - { - Bitmap img = new Bitmap(640, 480); - img.Save(TempDir + "\\source\\images\\background.png", System.Drawing.Imaging.ImageFormat.Png); - } - } - else - { - Bitmap img = new Bitmap(640, 480); - img.Save(TempDir + "\\source\\images\\background.png", System.Drawing.Imaging.ImageFormat.Png); - } - - if (!string.IsNullOrEmpty(image169) && File.Exists(image169)) - { - try - { - Image img = Image.FromFile(image169); - if (img.Width != 640 || img.Height != 480) - img = ResizeImage(img, 640, 480); - img.Save(TempDir + "\\source\\images\\background169.png", System.Drawing.Imaging.ImageFormat.Png); - } - catch - { - Bitmap img = new Bitmap(640, 480); - img.Save(TempDir + "\\source\\images\\background169.png", System.Drawing.Imaging.ImageFormat.Png); - } - } - else - { - Bitmap img = new Bitmap(640, 480); - img.Save(TempDir + "\\source\\images\\background169.png", System.Drawing.Imaging.ImageFormat.Png); - } - } - - private Image ResizeImage(Image img, int x, int y) - { - Image newimage = new Bitmap(x, y); - using (Graphics gfx = Graphics.FromImage(newimage)) - { - gfx.DrawImage(img, 0, 0, x, y); - } - return newimage; - } - - private void EditMainCpp() - { - Stream maincpp = GetReourceStream("main.cpp"); - StreamReader reader = new StreamReader(maincpp); - List tempLines = new List(); - string tempLine; - - while ((tempLine = reader.ReadLine()) != null) - { - tempLines.Add(tempLine); - } - - string[] lines = tempLines.ToArray(); - - for (int i = 0; i < lines.Length; i++) - { - if (lines[i].Contains("appfolder")) - lines[i] = lines[i].Replace("appfolder", thisAppFolder); - else if (lines[i].Contains("#define USB_FIRST")) - lines[i] = lines[i].Replace("false", usbFirst.ToString().ToLower()); - else if (lines[i].Contains("#define ELF_FIRST")) - lines[i] = lines[i].Replace("false", elfFirst.ToString().ToLower()); - } - - using (FileStream fs = new FileStream(TempDir + "source\\main.cpp", FileMode.Create)) - { - using (StreamWriter writer = new StreamWriter(fs)) - { - foreach (string thisLine in lines) - { - writer.WriteLine(thisLine); - } - } - } - } - - private void CopyResources() - { - if (Directory.Exists(TempDir)) Directory.Delete(TempDir, true); - Directory.CreateDirectory(TempDir + "source\\images"); - string[] Resources = new string[] { "dolloader.c", "dolloader.h", "elf_abi.h", "elfloader.c", - "elfloader.h", "fatmounter.c", "fatmounter.h", "filelist.h", "video.cpp", "video.h" }; - - foreach (string thisResource in Resources) - { - Stream tempStream = GetReourceStream(thisResource); - StreamToFile(tempStream, TempDir + "source\\" + thisResource); - } - - Stream makefile = GetReourceStream("Makefile"); - StreamToFile(makefile, TempDir + "Makefile"); - } - - private void StreamToFile(Stream theStream, string Destination) - { - using (FileStream fs = new FileStream(Destination, FileMode.Create)) - { - byte[] temp = new byte[theStream.Length]; - theStream.Read(temp, 0, temp.Length); - fs.Write(temp, 0, temp.Length); - - //int count = 0; - //int length = 4096; - //byte[] buffer = new byte[length]; - - //while ((count = theStream.Read(buffer, 0, length)) != 0) - // fs.Write(buffer, 0, length); - } - - } - - private MemoryStream GetReourceStream(string theResource) - { - Stream thisStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("ForwardMii.Resources.GX." + theResource); - byte[] thisArray = new byte[thisStream.Length]; - thisStream.Read(thisArray, 0, thisArray.Length); - return new MemoryStream(thisArray); - } - } -} diff --git a/ForwardMii-Plugin/ForwardMii_SDSDHC.cs b/ForwardMii-Plugin/ForwardMii_SDSDHC.cs deleted file mode 100644 index 90f3e2f..0000000 --- a/ForwardMii-Plugin/ForwardMii_SDSDHC.cs +++ /dev/null @@ -1,439 +0,0 @@ -/* This file is part of CustomizeMii - * Copyright (C) 2009 Leathl - * - * CustomizeMii is free software: you can redistribute it and/or - * modify it under the terms of the GNU General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CustomizeMii is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -using System; -using System.IO; -using System.Reflection; - -namespace ForwardMii -{ - public class SDSDHC_Forwarder - { - private string thisAppFolder; - private bool toElf = false; - public string AppFolder { get { return thisAppFolder; } set { thisAppFolder = value; } } - public bool ForwardToElf { get { return toElf; } set { toElf = value; } } - - public SDSDHC_Forwarder() - { - - } - - public SDSDHC_Forwarder(string AppFolder) - { - if (AppFolder.Length > 18 || AppFolder.Length < 3) throw new Exception("Application folder must be 3 - 18 chars!"); - thisAppFolder = AppFolder; - } - - public SDSDHC_Forwarder(string AppFolder, bool ForwardToElf) - { - if (AppFolder.Length > 18 || AppFolder.Length < 3) throw new Exception("Application folder must be 3 - 18 chars!"); - thisAppFolder = AppFolder; - toElf = ForwardToElf; - } - - public void Clear() - { - thisAppFolder = string.Empty; - toElf = false; - } - - public void Save(string Destionation) - { - Save(Destionation, false); - } - - public void Save(string Destination, bool Overwrite) - { - byte[] theForwarder = ToByteArray(); - - if (Path.HasExtension(Destination) == false) Destination += ".dol"; - - if (File.Exists(Destination)) - { - if (Overwrite == true) - File.Delete(Destination); - else - throw new Exception("The destination file already exists!"); - } - - using (FileStream fs = new FileStream(Destination, FileMode.Create)) - { - fs.Write(theForwarder, 0, theForwarder.Length); - } - } - - public byte[] ToByteArray() - { - MemoryStream ms = this.ToMemoryStream(); - return ms.ToArray(); - } - - public MemoryStream ToMemoryStream() - { - MemoryStream BaseStream = GetBase(); - MemoryStream TailStream = GetTail(); - - BaseStream = ConvertBase(BaseStream); - TailStream = EditTailFolder(TailStream); - - byte[] BaseArray = BaseStream.ToArray(); - byte[] TailArray = TailStream.ToArray(); - - MemoryStream Result = new MemoryStream(); - Result.Seek(0, SeekOrigin.End); - Result.Write(BaseArray, 0, BaseArray.Length); - Result.Write(TailArray, 0, TailArray.Length); - - return Result; - } - - private MemoryStream EditTailFolder(MemoryStream TailStream) - { - char[] FolderChars = thisAppFolder.ToCharArray(); - int[] Offsets = GetOffsets(FolderChars.Length); - - TailStream.Seek(1, SeekOrigin.Begin); - foreach (char thisChar in FolderChars) - TailStream.WriteByte((byte)thisChar); - - TailStream.Seek(Offsets[0], SeekOrigin.Begin); - foreach (char thisChar in FolderChars) - TailStream.WriteByte((byte)thisChar); - - TailStream.Seek(Offsets[1], SeekOrigin.Begin); - foreach (char thisChar in FolderChars) - TailStream.WriteByte((byte)thisChar); - - if (toElf == true) - TailStream = EditTailToElf(TailStream); - - return TailStream; - } - - private MemoryStream EditTailToElf(MemoryStream TailStream) - { - int[] Offsets = GetDolOffsets(thisAppFolder.Length); - byte[] Elf = new byte[] { 0x65, 0x6c, 0x66 }; - - foreach (int thisOffset in Offsets) - { - TailStream.Seek(thisOffset, SeekOrigin.Begin); - TailStream.Write(Elf, 0, Elf.Length); - } - - return TailStream; - } - - private int[] GetDolOffsets(int CharCount) - { - int[] Offsets = new int[5]; - - switch (CharCount) - { - case 3: - Offsets[0] = 10; - Offsets[1] = 25; - Offsets[2] = 87; - Offsets[3] = 336; - Offsets[4] = 344; - break; - case 4: - Offsets[0] = 11; - Offsets[1] = 25; - Offsets[2] = 87; - Offsets[3] = 336; - Offsets[4] = 344; - break; - case 5: - Offsets[0] = 12; - Offsets[1] = 25; - Offsets[2] = 91; - Offsets[3] = 340; - Offsets[4] = 348; - break; - case 6: - Offsets[0] = 13; - Offsets[1] = 29; - Offsets[2] = 95; - Offsets[3] = 348; - Offsets[4] = 356; - break; - case 7: - Offsets[0] = 14; - Offsets[1] = 29; - Offsets[2] = 95; - Offsets[3] = 348; - Offsets[4] = 356; - break; - case 8: - Offsets[0] = 15; - Offsets[1] = 29; - Offsets[2] = 95; - Offsets[3] = 348; - Offsets[4] = 356; - break; - case 9: - Offsets[0] = 16; - Offsets[1] = 29; - Offsets[2] = 99; - Offsets[3] = 352; - Offsets[4] = 360; - break; - case 10: - Offsets[0] = 17; - Offsets[1] = 33; - Offsets[2] = 103; - Offsets[3] = 360; - Offsets[4] = 368; - break; - case 11: - Offsets[0] = 18; - Offsets[1] = 33; - Offsets[2] = 103; - Offsets[3] = 360; - Offsets[4] = 368; - break; - case 12: - Offsets[0] = 19; - Offsets[1] = 33; - Offsets[2] = 103; - Offsets[3] = 360; - Offsets[4] = 368; - break; - case 13: - Offsets[0] = 20; - Offsets[1] = 33; - Offsets[2] = 107; - Offsets[3] = 364; - Offsets[4] = 372; - break; - case 14: - Offsets[0] = 21; - Offsets[1] = 37; - Offsets[2] = 111; - Offsets[3] = 372; - Offsets[4] = 380; - break; - case 15: - Offsets[0] = 22; - Offsets[1] = 37; - Offsets[2] = 11; - Offsets[3] = 372; - Offsets[4] = 380; - break; - case 16: - Offsets[0] = 23; - Offsets[1] = 37; - Offsets[2] = 111; - Offsets[3] = 372; - Offsets[4] = 380; - break; - case 17: - Offsets[0] = 24; - Offsets[1] = 37; - Offsets[2] = 115; - Offsets[3] = 376; - Offsets[4] = 384; - break; - case 18: - Offsets[0] = 25; - Offsets[1] = 41; - Offsets[2] = 119; - Offsets[3] = 384; - Offsets[4] = 392; - break; - default: - throw new Exception(); - } - - return Offsets; - } - - private int[] GetOffsets(int CharCount) - { - int First = 0; - int Second = 0; - - switch (CharCount) - { - case 3: - case 4: - First = 57; - Second = 100; - break; - case 5: - First = 57; - Second = 104; - break; - case 6: - case 7: - case 8: - First = 61; - Second = 108; - break; - case 9: - First = 61; - Second = 112; - break; - case 10: - case 11: - case 12: - case 13: - First = 65; - Second = 120; - break; - case 14: - case 15: - case 16: - First = 69; - Second = 124; - break; - case 17: - First = 69; - Second = 128; - break; - case 18: - First = 73; - Second = 132; - break; - default: - throw new Exception(); - } - - return new int[] { First, Second }; - } - - private MemoryStream GetBase() - { - switch (thisAppFolder.Length) - { - case 3: - case 4: - case 5: - return GetReourceStream("ForwardMii.Resources.SDSDHC.3CharsBase.bin"); - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - case 15: - case 16: - return GetReourceStream("ForwardMii.Resources.SDSDHC.6CharsBase.bin"); - case 17: - case 18: - return GetReourceStream("ForwardMii.Resources.SDSDHC.17CharsBase.bin"); - default: - throw new Exception(); - } - } - - private MemoryStream GetTail() - { - switch (thisAppFolder.Length) - { - case 3: - return GetReourceStream("ForwardMii.Resources.SDSDHC.3CharsTail.bin"); - case 4: - return GetReourceStream("ForwardMii.Resources.SDSDHC.4CharsTail.bin"); - case 5: - return GetReourceStream("ForwardMii.Resources.SDSDHC.5CharsTail.bin"); - case 6: - return GetReourceStream("ForwardMii.Resources.SDSDHC.6CharsTail.bin"); - case 7: - return GetReourceStream("ForwardMii.Resources.SDSDHC.7CharsTail.bin"); - case 8: - return GetReourceStream("ForwardMii.Resources.SDSDHC.8CharsTail.bin"); - case 9: - return GetReourceStream("ForwardMii.Resources.SDSDHC.9CharsTail.bin"); - case 10: - return GetReourceStream("ForwardMii.Resources.SDSDHC.10CharsTail.bin"); - case 11: - return GetReourceStream("ForwardMii.Resources.SDSDHC.11CharsTail.bin"); - case 12: - return GetReourceStream("ForwardMii.Resources.SDSDHC.12CharsTail.bin"); - case 13: - return GetReourceStream("ForwardMii.Resources.SDSDHC.13CharsTail.bin"); - case 14: - return GetReourceStream("ForwardMii.Resources.SDSDHC.14CharsTail.bin"); - case 15: - return GetReourceStream("ForwardMii.Resources.SDSDHC.15CharsTail.bin"); - case 16: - return GetReourceStream("ForwardMii.Resources.SDSDHC.16CharsTail.bin"); - case 17: - return GetReourceStream("ForwardMii.Resources.SDSDHC.17CharsTail.bin"); - case 18: - return GetReourceStream("ForwardMii.Resources.SDSDHC.18CharsTail.bin"); - default: - throw new Exception(); - } - } - - private MemoryStream ConvertBase(MemoryStream BaseStream) - { - switch (thisAppFolder.Length) - { - case 3: - return BaseStream; - case 4: - return BaseStream; - case 5: - return SDSDHC_ConvertBaseStream.ConvertTo5Chars(BaseStream); - case 6: - return BaseStream; - case 7: - return BaseStream; - case 8: - return BaseStream; - case 9: - return SDSDHC_ConvertBaseStream.ConvertTo9Chars(BaseStream); - case 10: - return SDSDHC_ConvertBaseStream.ConvertTo10Chars(BaseStream); - case 11: - return SDSDHC_ConvertBaseStream.ConvertTo10Chars(BaseStream); - case 12: - return SDSDHC_ConvertBaseStream.ConvertTo10Chars(BaseStream); - case 13: - return SDSDHC_ConvertBaseStream.ConvertTo13Chars(BaseStream); - case 14: - return SDSDHC_ConvertBaseStream.ConvertTo14Chars(BaseStream); - case 15: - return SDSDHC_ConvertBaseStream.ConvertTo14Chars(BaseStream); - case 16: - return SDSDHC_ConvertBaseStream.ConvertTo14Chars(BaseStream); - case 17: - return BaseStream; - case 18: - return SDSDHC_ConvertBaseStream.ConvertTo18Chars(BaseStream); - default: - throw new Exception(); - } - } - - private MemoryStream GetReourceStream(string theResource) - { - Stream thisStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(theResource); - byte[] thisArray = new byte[thisStream.Length]; - thisStream.Read(thisArray, 0, thisArray.Length); - return new MemoryStream(thisArray); - } - } -} diff --git a/ForwardMii-Plugin/License.txt b/ForwardMii-Plugin/License.txt deleted file mode 100644 index 94a9ed0..0000000 --- a/ForwardMii-Plugin/License.txt +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/ForwardMii-Plugin/Properties/AssemblyInfo.cs b/ForwardMii-Plugin/Properties/AssemblyInfo.cs deleted file mode 100644 index 933195f..0000000 --- a/ForwardMii-Plugin/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,53 +0,0 @@ -/* This file is part of CustomizeMii - * Copyright (C) 2009 Leathl - * - * CustomizeMii is free software: you can redistribute it and/or - * modify it under the terms of the GNU General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * CustomizeMii is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// Allgemeine Informationen über eine Assembly werden über die folgenden -// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, -// die mit einer Assembly verknüpft sind. -[assembly: AssemblyTitle("ForwardMii")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("ForwardMii")] -[assembly: AssemblyCopyright("Copyright © Leathl 2009")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar -// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von -// COM zugreifen müssen, legen Sie das ComVisible-Attribut für diesen Typ auf "true" fest. -[assembly: ComVisible(false)] - -// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird -[assembly: Guid("4a706a44-9612-4717-8da0-0ca789a9c632")] - -// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: -// -// Hauptversion -// Nebenversion -// Buildnummer -// Revision -// -// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern -// übernehmen, indem Sie "*" eingeben: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.2.0")] -[assembly: AssemblyFileVersion("1.0.2.0")] diff --git a/ForwardMii-Plugin/Readme_ForwardMii.txt b/ForwardMii-Plugin/Readme_ForwardMii.txt deleted file mode 100644 index 5266ccf..0000000 --- a/ForwardMii-Plugin/Readme_ForwardMii.txt +++ /dev/null @@ -1,64 +0,0 @@ -This is a plugin for CustomizeMii to create forwarders. Put it in CustomizeMii's directory. - -It can create simple SD / SDHC forwarders that will point to one ELF or DOL file. -It's also able to create complex forwarders based on the official USB Loader GX -forwarder (Needs devkitPPC + libOGC installed). It will look for the DOL or ELF -in the specified folder on USB and SD, you can change the order it searches. -It can also display an image while loading. -If it fails to compile, you may have the wrong libOGC, try the one downloadable on -the CustomizeMii project page. - ------------------------------------------------------------------------------------------ -Changelog: - -Version 1.02 - - Compiling now works, if a space is in your Windows Username - -Version 1.01 - - Fixed bug that caused an object error while creating forwarders - -Version 1.0 - - Initial Release ------------------------------------------------------------------------------------------ - ------------------------------------------------------------------------------------------ -Disclaimer: - -Editing WAD files can result in a brick of your Wii. -Only use this application if you have a bricksafe Wii, meaning either Preloader or -BootMii/boot2 is installed, and if you know what you're doing. - -This application comes without any express or implied warranty. -The author can't be held responsible for any damages arising from the use of it. ------------------------------------------------------------------------------------------ - ------------------------------------------------------------------------------------------ -Thanks: - -Xuzz for his idea and hard work -Xuzz, SquidMan, megazig, Matt_P, Omega and The Lemon Man for Wii.py -SquidMan for Zetsubou -Andre Perrot for gbalzss -comex and Waninkoko for both their NAND Loader -djdynamite123 for the forwarder base files -The USB Loader GX Team for their forwarder source ------------------------------------------------------------------------------------------ - ------------------------------------------------------------------------------------------ -License: - -Copyright (C) 2009 Leathl - -CustomizeMii is free software: you can redistribute it and/or -modify it under the terms of the GNU General Public License as published -by the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -CustomizeMii is distributed in the hope that it will be -useful, but WITHOUT ANY WARRANTY; without even the implied warranty -of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . ------------------------------------------------------------------------------------------ \ No newline at end of file diff --git a/ForwardMii-Plugin/Resources/GX/Makefile b/ForwardMii-Plugin/Resources/GX/Makefile deleted file mode 100644 index 795229b..0000000 --- a/ForwardMii-Plugin/Resources/GX/Makefile +++ /dev/null @@ -1,146 +0,0 @@ -#--------------------------------------------------------------------------------- -# Clear the implicit built in rules -#--------------------------------------------------------------------------------- -.SUFFIXES: -#--------------------------------------------------------------------------------- -ifeq ($(strip $(DEVKITPPC)),) -$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=devkitPPC") -endif - -include $(DEVKITPPC)/wii_rules - -#--------------------------------------------------------------------------------- -# TARGET is the name of the output -# BUILD is the directory where object files & intermediate files will be placed -# SOURCES is a list of directories containing source code -# INCLUDES is a list of directories containing extra header files -#--------------------------------------------------------------------------------- -TARGET := boot -BUILD := build -SOURCES := source source/images -DATA := data -INCLUDES := - -#--------------------------------------------------------------------------------- -# options for code generation -#--------------------------------------------------------------------------------- - -CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) -CXXFLAGS = $(CFLAGS) - -#--------------------------------------------------------------------------------- -# move loader to another location - THANKS CREDIAR - 0x81330000 for HBC -#--------------------------------------------------------------------------------- -LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map -Wl,--section-start,.init=0x81230000 -#LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map -#LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map -Wl,--section-start,.init=0x80003f00 - -#--------------------------------------------------------------------------------- -# any extra libraries we wish to link with the project -#--------------------------------------------------------------------------------- -LIBS := -lfat -lpngu -lpng -lz -lbte -logc -lm - -#--------------------------------------------------------------------------------- -# list of directories containing libraries, this must be the top level containing -# include and lib -#--------------------------------------------------------------------------------- -LIBDIRS := $(CURDIR) - -#--------------------------------------------------------------------------------- -# no real need to edit anything past this point unless you need to add additional -# rules for different file extensions -#--------------------------------------------------------------------------------- -ifneq ($(BUILD),$(notdir $(CURDIR))) -#--------------------------------------------------------------------------------- - -export OUTPUT := $(CURDIR)/$(TARGET) - -export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ - $(foreach dir,$(DATA),$(CURDIR)/$(dir)) - -export DEPSDIR := $(CURDIR)/$(BUILD) - -#--------------------------------------------------------------------------------- -# automatically build a list of object files for our project -#--------------------------------------------------------------------------------- -CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) -CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) -sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) -SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) -PNGFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.png))) - -#--------------------------------------------------------------------------------- -# use CXX for linking C++ projects, CC for standard C -#--------------------------------------------------------------------------------- -ifeq ($(strip $(CPPFILES)),) - export LD := $(CC) -else - export LD := $(CXX) -endif - -export OFILES := $(addsuffix .o,$(BINFILES)) \ - $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ - $(sFILES:.s=.o) $(SFILES:.S=.o) \ - $(PNGFILES:.png=.png.o) - -#--------------------------------------------------------------------------------- -# build a list of include paths -#--------------------------------------------------------------------------------- -export INCLUDE := $(foreach dir,$(INCLUDES), -iquote $(CURDIR)/$(dir)) \ - $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ - -I$(CURDIR)/$(BUILD) \ - -I$(LIBOGC_INC) - -#--------------------------------------------------------------------------------- -# build a list of library paths -#--------------------------------------------------------------------------------- -export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \ - -L$(LIBOGC_LIB) - -export OUTPUT := $(CURDIR)/$(TARGET) -.PHONY: $(BUILD) clean - -#--------------------------------------------------------------------------------- -$(BUILD): - @[ -d $@ ] || mkdir -p $@ - @make --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile - -#--------------------------------------------------------------------------------- -clean: - @echo clean ... - @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol - -#--------------------------------------------------------------------------------- -run: - wiiload $(TARGET).dol - - -#--------------------------------------------------------------------------------- -pack: - zip -9 loadMii.zip $(TARGET).dol ../icon.png ../meta.xml ../README - - -#--------------------------------------------------------------------------------- -else - -DEPENDS := $(OFILES:.o=.d) - -#--------------------------------------------------------------------------------- -# main targets -#--------------------------------------------------------------------------------- -$(OUTPUT).dol: $(OUTPUT).elf -$(OUTPUT).elf: $(OFILES) - -#--------------------------------------------------------------------------------- -# This rule links in binary data with the .jpg extension -#--------------------------------------------------------------------------------- -%.png.o : %.png - @echo $(notdir $<) - $(bin2o) - --include $(DEPENDS) - -#--------------------------------------------------------------------------------- -endif -#--------------------------------------------------------------------------------- diff --git a/ForwardMii-Plugin/Resources/GX/dolloader.c b/ForwardMii-Plugin/Resources/GX/dolloader.c deleted file mode 100644 index 7a6629d..0000000 --- a/ForwardMii-Plugin/Resources/GX/dolloader.c +++ /dev/null @@ -1,54 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -#include "dolloader.h" - -typedef struct _dolheader { - u32 text_pos[7]; - u32 data_pos[11]; - u32 text_start[7]; - u32 data_start[11]; - u32 text_size[7]; - u32 data_size[11]; - u32 bss_start; - u32 bss_size; - u32 entry_point; -} dolheader; - -u32 load_dol_image (void *dolstart, struct __argv *argv) { - u32 i; - dolheader *dolfile; - - if (dolstart) { - dolfile = (dolheader *) dolstart; - for (i = 0; i < 7; i++) { - if ((!dolfile->text_size[i]) || (dolfile->text_start[i] < 0x100)) continue; - VIDEO_WaitVSync(); - ICInvalidateRange ((void *) dolfile->text_start[i],dolfile->text_size[i]); - memmove ((void *) dolfile->text_start[i],dolstart+dolfile->text_pos[i],dolfile->text_size[i]); - } - - for(i = 0; i < 11; i++) { - if ((!dolfile->data_size[i]) || (dolfile->data_start[i] < 0x100)) continue; - VIDEO_WaitVSync(); - memmove ((void *) dolfile->data_start[i],dolstart+dolfile->data_pos[i],dolfile->data_size[i]); - DCFlushRangeNoSync ((void *) dolfile->data_start[i],dolfile->data_size[i]); - } - - memset ((void *) dolfile->bss_start, 0, dolfile->bss_size); - DCFlushRange((void *) dolfile->bss_start, dolfile->bss_size); - - if (argv && argv->argvMagic == ARGV_MAGIC) { - void *new_argv = (void *)(dolfile->entry_point + 8); - memmove(new_argv, argv, sizeof(*argv)); - DCFlushRange(new_argv, sizeof(*argv)); - } - return dolfile->entry_point; - } - return 0; -} diff --git a/ForwardMii-Plugin/Resources/GX/dolloader.h b/ForwardMii-Plugin/Resources/GX/dolloader.h deleted file mode 100644 index 7dcc292..0000000 --- a/ForwardMii-Plugin/Resources/GX/dolloader.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef _DOLLOADER_H_ -#define _DOLLOADER_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -// Apps goes here -#define EXECUTABLE_MEM_ADDR 0x92000000 -/* dol header */ - -extern void __exception_closeall(); -typedef void (*entrypoint) (void); - -u32 load_dol_image (void *dolstart, struct __argv *argv); - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ForwardMii-Plugin/Resources/GX/elf_abi.h b/ForwardMii-Plugin/Resources/GX/elf_abi.h deleted file mode 100644 index c9e705e..0000000 --- a/ForwardMii-Plugin/Resources/GX/elf_abi.h +++ /dev/null @@ -1,594 +0,0 @@ -/* - * Copyright (c) 1995, 1996, 2001, 2002 - * Erik Theisen. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/* - * This is the ELF ABI header file - * formerly known as "elf_abi.h". - */ - -#ifndef _ELF_ABI_H -#define _ELF_ABI_H - -#include - -/* - * This version doesn't work for 64-bit ABIs - Erik. - */ - -/* - * These typedefs need to be handled better. - */ -typedef u32 Elf32_Addr; /* Unsigned program address */ -typedef u32 Elf32_Off; /* Unsigned file offset */ -typedef s32 Elf32_Sword; /* Signed large integer */ -typedef u32 Elf32_Word; /* Unsigned large integer */ -typedef u16 Elf32_Half; /* Unsigned medium integer */ - -/* e_ident[] identification indexes */ -#define EI_MAG0 0 /* file ID */ -#define EI_MAG1 1 /* file ID */ -#define EI_MAG2 2 /* file ID */ -#define EI_MAG3 3 /* file ID */ -#define EI_CLASS 4 /* file class */ -#define EI_DATA 5 /* data encoding */ -#define EI_VERSION 6 /* ELF header version */ -#define EI_OSABI 7 /* OS/ABI specific ELF extensions */ -#define EI_ABIVERSION 8 /* ABI target version */ -#define EI_PAD 9 /* start of pad bytes */ -#define EI_NIDENT 16 /* Size of e_ident[] */ - -/* e_ident[] magic number */ -#define ELFMAG0 0x7f /* e_ident[EI_MAG0] */ -#define ELFMAG1 'E' /* e_ident[EI_MAG1] */ -#define ELFMAG2 'L' /* e_ident[EI_MAG2] */ -#define ELFMAG3 'F' /* e_ident[EI_MAG3] */ -#define ELFMAG "\177ELF" /* magic */ -#define SELFMAG 4 /* size of magic */ - -/* e_ident[] file class */ -#define ELFCLASSNONE 0 /* invalid */ -#define ELFCLASS32 1 /* 32-bit objs */ -#define ELFCLASS64 2 /* 64-bit objs */ -#define ELFCLASSNUM 3 /* number of classes */ - -/* e_ident[] data encoding */ -#define ELFDATANONE 0 /* invalid */ -#define ELFDATA2LSB 1 /* Little-Endian */ -#define ELFDATA2MSB 2 /* Big-Endian */ -#define ELFDATANUM 3 /* number of data encode defines */ - -/* e_ident[] OS/ABI specific ELF extensions */ -#define ELFOSABI_NONE 0 /* No extension specified */ -#define ELFOSABI_HPUX 1 /* Hewlett-Packard HP-UX */ -#define ELFOSABI_NETBSD 2 /* NetBSD */ -#define ELFOSABI_LINUX 3 /* Linux */ -#define ELFOSABI_SOLARIS 6 /* Sun Solaris */ -#define ELFOSABI_AIX 7 /* AIX */ -#define ELFOSABI_IRIX 8 /* IRIX */ -#define ELFOSABI_FREEBSD 9 /* FreeBSD */ -#define ELFOSABI_TRU64 10 /* Compaq TRU64 UNIX */ -#define ELFOSABI_MODESTO 11 /* Novell Modesto */ -#define ELFOSABI_OPENBSD 12 /* OpenBSD */ -/* 64-255 Architecture-specific value range */ - -/* e_ident[] ABI Version */ -#define ELFABIVERSION 0 - -/* e_ident */ -#define IS_ELF(ehdr) ((ehdr).e_ident[EI_MAG0] == ELFMAG0 && \ - (ehdr).e_ident[EI_MAG1] == ELFMAG1 && \ - (ehdr).e_ident[EI_MAG2] == ELFMAG2 && \ - (ehdr).e_ident[EI_MAG3] == ELFMAG3) - -/* ELF Header */ -typedef struct elfhdr{ - unsigned char e_ident[EI_NIDENT]; /* ELF Identification */ - Elf32_Half e_type; /* object file type */ - Elf32_Half e_machine; /* machine */ - Elf32_Word e_version; /* object file version */ - Elf32_Addr e_entry; /* virtual entry point */ - Elf32_Off e_phoff; /* program header table offset */ - Elf32_Off e_shoff; /* section header table offset */ - Elf32_Word e_flags; /* processor-specific flags */ - Elf32_Half e_ehsize; /* ELF header size */ - Elf32_Half e_phentsize; /* program header entry size */ - Elf32_Half e_phnum; /* number of program header entries */ - Elf32_Half e_shentsize; /* section header entry size */ - Elf32_Half e_shnum; /* number of section header entries */ - Elf32_Half e_shstrndx; /* section header table's "section - header string table" entry offset */ -} Elf32_Ehdr; - -/* e_type */ -#define ET_NONE 0 /* No file type */ -#define ET_REL 1 /* relocatable file */ -#define ET_EXEC 2 /* executable file */ -#define ET_DYN 3 /* shared object file */ -#define ET_CORE 4 /* core file */ -#define ET_NUM 5 /* number of types */ -#define ET_LOOS 0xfe00 /* reserved range for operating */ -#define ET_HIOS 0xfeff /* system specific e_type */ -#define ET_LOPROC 0xff00 /* reserved range for processor */ -#define ET_HIPROC 0xffff /* specific e_type */ - -/* e_machine */ -#define EM_NONE 0 /* No Machine */ -#define EM_M32 1 /* AT&T WE 32100 */ -#define EM_SPARC 2 /* SPARC */ -#define EM_386 3 /* Intel 80386 */ -#define EM_68K 4 /* Motorola 68000 */ -#define EM_88K 5 /* Motorola 88000 */ -#if 0 -#define EM_486 6 /* RESERVED - was Intel 80486 */ -#endif -#define EM_860 7 /* Intel 80860 */ -#define EM_MIPS 8 /* MIPS R3000 Big-Endian only */ -#define EM_S370 9 /* IBM System/370 Processor */ -#define EM_MIPS_RS4_BE 10 /* MIPS R4000 Big-Endian */ -#if 0 -#define EM_SPARC64 11 /* RESERVED - was SPARC v9 - 64-bit unoffical */ -#endif -/* RESERVED 11-14 for future use */ -#define EM_PARISC 15 /* HPPA */ -/* RESERVED 16 for future use */ -#define EM_VPP500 17 /* Fujitsu VPP500 */ -#define EM_SPARC32PLUS 18 /* Enhanced instruction set SPARC */ -#define EM_960 19 /* Intel 80960 */ -#define EM_PPC 20 /* PowerPC */ -#define EM_PPC64 21 /* 64-bit PowerPC */ -#define EM_S390 22 /* IBM System/390 Processor */ -/* RESERVED 23-35 for future use */ -#define EM_V800 36 /* NEC V800 */ -#define EM_FR20 37 /* Fujitsu FR20 */ -#define EM_RH32 38 /* TRW RH-32 */ -#define EM_RCE 39 /* Motorola RCE */ -#define EM_ARM 40 /* Advanced Risc Machines ARM */ -#define EM_ALPHA 41 /* Digital Alpha */ -#define EM_SH 42 /* Hitachi SH */ -#define EM_SPARCV9 43 /* SPARC Version 9 */ -#define EM_TRICORE 44 /* Siemens TriCore embedded processor */ -#define EM_ARC 45 /* Argonaut RISC Core */ -#define EM_H8_300 46 /* Hitachi H8/300 */ -#define EM_H8_300H 47 /* Hitachi H8/300H */ -#define EM_H8S 48 /* Hitachi H8S */ -#define EM_H8_500 49 /* Hitachi H8/500 */ -#define EM_IA_64 50 /* Intel Merced */ -#define EM_MIPS_X 51 /* Stanford MIPS-X */ -#define EM_COLDFIRE 52 /* Motorola Coldfire */ -#define EM_68HC12 53 /* Motorola M68HC12 */ -#define EM_MMA 54 /* Fujitsu MMA Multimedia Accelerator*/ -#define EM_PCP 55 /* Siemens PCP */ -#define EM_NCPU 56 /* Sony nCPU embeeded RISC */ -#define EM_NDR1 57 /* Denso NDR1 microprocessor */ -#define EM_STARCORE 58 /* Motorola Start*Core processor */ -#define EM_ME16 59 /* Toyota ME16 processor */ -#define EM_ST100 60 /* STMicroelectronic ST100 processor */ -#define EM_TINYJ 61 /* Advanced Logic Corp. Tinyj emb.fam*/ -#define EM_X86_64 62 /* AMD x86-64 */ -#define EM_PDSP 63 /* Sony DSP Processor */ -/* RESERVED 64,65 for future use */ -#define EM_FX66 66 /* Siemens FX66 microcontroller */ -#define EM_ST9PLUS 67 /* STMicroelectronics ST9+ 8/16 mc */ -#define EM_ST7 68 /* STmicroelectronics ST7 8 bit mc */ -#define EM_68HC16 69 /* Motorola MC68HC16 microcontroller */ -#define EM_68HC11 70 /* Motorola MC68HC11 microcontroller */ -#define EM_68HC08 71 /* Motorola MC68HC08 microcontroller */ -#define EM_68HC05 72 /* Motorola MC68HC05 microcontroller */ -#define EM_SVX 73 /* Silicon Graphics SVx */ -#define EM_ST19 74 /* STMicroelectronics ST19 8 bit mc */ -#define EM_VAX 75 /* Digital VAX */ -#define EM_CHRIS 76 /* Axis Communications embedded proc. */ -#define EM_JAVELIN 77 /* Infineon Technologies emb. proc. */ -#define EM_FIREPATH 78 /* Element 14 64-bit DSP Processor */ -#define EM_ZSP 79 /* LSI Logic 16-bit DSP Processor */ -#define EM_MMIX 80 /* Donald Knuth's edu 64-bit proc. */ -#define EM_HUANY 81 /* Harvard University mach-indep objs */ -#define EM_PRISM 82 /* SiTera Prism */ -#define EM_AVR 83 /* Atmel AVR 8-bit microcontroller */ -#define EM_FR30 84 /* Fujitsu FR30 */ -#define EM_D10V 85 /* Mitsubishi DV10V */ -#define EM_D30V 86 /* Mitsubishi DV30V */ -#define EM_V850 87 /* NEC v850 */ -#define EM_M32R 88 /* Mitsubishi M32R */ -#define EM_MN10300 89 /* Matsushita MN10200 */ -#define EM_MN10200 90 /* Matsushita MN10200 */ -#define EM_PJ 91 /* picoJava */ -#define EM_NUM 92 /* number of machine types */ - -/* Version */ -#define EV_NONE 0 /* Invalid */ -#define EV_CURRENT 1 /* Current */ -#define EV_NUM 2 /* number of versions */ - -/* Section Header */ -typedef struct { - Elf32_Word sh_name; /* name - index into section header - string table section */ - Elf32_Word sh_type; /* type */ - Elf32_Word sh_flags; /* flags */ - Elf32_Addr sh_addr; /* address */ - Elf32_Off sh_offset; /* file offset */ - Elf32_Word sh_size; /* section size */ - Elf32_Word sh_link; /* section header table index link */ - Elf32_Word sh_info; /* extra information */ - Elf32_Word sh_addralign; /* address alignment */ - Elf32_Word sh_entsize; /* section entry size */ -} Elf32_Shdr; - -/* Special Section Indexes */ -#define SHN_UNDEF 0 /* undefined */ -#define SHN_LORESERVE 0xff00 /* lower bounds of reserved indexes */ -#define SHN_LOPROC 0xff00 /* reserved range for processor */ -#define SHN_HIPROC 0xff1f /* specific section indexes */ -#define SHN_LOOS 0xff20 /* reserved range for operating */ -#define SHN_HIOS 0xff3f /* specific semantics */ -#define SHN_ABS 0xfff1 /* absolute value */ -#define SHN_COMMON 0xfff2 /* common symbol */ -#define SHN_XINDEX 0xffff /* Index is an extra table */ -#define SHN_HIRESERVE 0xffff /* upper bounds of reserved indexes */ - -/* sh_type */ -#define SHT_NULL 0 /* inactive */ -#define SHT_PROGBITS 1 /* program defined information */ -#define SHT_SYMTAB 2 /* symbol table section */ -#define SHT_STRTAB 3 /* string table section */ -#define SHT_RELA 4 /* relocation section with addends*/ -#define SHT_HASH 5 /* symbol hash table section */ -#define SHT_DYNAMIC 6 /* dynamic section */ -#define SHT_NOTE 7 /* note section */ -#define SHT_NOBITS 8 /* no space section */ -#define SHT_REL 9 /* relation section without addends */ -#define SHT_SHLIB 10 /* reserved - purpose unknown */ -#define SHT_DYNSYM 11 /* dynamic symbol table section */ -#define SHT_INIT_ARRAY 14 /* Array of constructors */ -#define SHT_FINI_ARRAY 15 /* Array of destructors */ -#define SHT_PREINIT_ARRAY 16 /* Array of pre-constructors */ -#define SHT_GROUP 17 /* Section group */ -#define SHT_SYMTAB_SHNDX 18 /* Extended section indeces */ -#define SHT_NUM 19 /* number of section types */ -#define SHT_LOOS 0x60000000 /* Start OS-specific */ -#define SHT_HIOS 0x6fffffff /* End OS-specific */ -#define SHT_LOPROC 0x70000000 /* reserved range for processor */ -#define SHT_HIPROC 0x7fffffff /* specific section header types */ -#define SHT_LOUSER 0x80000000 /* reserved range for application */ -#define SHT_HIUSER 0xffffffff /* specific indexes */ - -/* Section names */ -#define ELF_BSS ".bss" /* uninitialized data */ -#define ELF_COMMENT ".comment" /* version control information */ -#define ELF_DATA ".data" /* initialized data */ -#define ELF_DATA1 ".data1" /* initialized data */ -#define ELF_DEBUG ".debug" /* debug */ -#define ELF_DYNAMIC ".dynamic" /* dynamic linking information */ -#define ELF_DYNSTR ".dynstr" /* dynamic string table */ -#define ELF_DYNSYM ".dynsym" /* dynamic symbol table */ -#define ELF_FINI ".fini" /* termination code */ -#define ELF_FINI_ARRAY ".fini_array" /* Array of destructors */ -#define ELF_GOT ".got" /* global offset table */ -#define ELF_HASH ".hash" /* symbol hash table */ -#define ELF_INIT ".init" /* initialization code */ -#define ELF_INIT_ARRAY ".init_array" /* Array of constuctors */ -#define ELF_INTERP ".interp" /* Pathname of program interpreter */ -#define ELF_LINE ".line" /* Symbolic line numnber information */ -#define ELF_NOTE ".note" /* Contains note section */ -#define ELF_PLT ".plt" /* Procedure linkage table */ -#define ELF_PREINIT_ARRAY ".preinit_array" /* Array of pre-constructors */ -#define ELF_REL_DATA ".rel.data" /* relocation data */ -#define ELF_REL_FINI ".rel.fini" /* relocation termination code */ -#define ELF_REL_INIT ".rel.init" /* relocation initialization code */ -#define ELF_REL_DYN ".rel.dyn" /* relocaltion dynamic link info */ -#define ELF_REL_RODATA ".rel.rodata" /* relocation read-only data */ -#define ELF_REL_TEXT ".rel.text" /* relocation code */ -#define ELF_RODATA ".rodata" /* read-only data */ -#define ELF_RODATA1 ".rodata1" /* read-only data */ -#define ELF_SHSTRTAB ".shstrtab" /* section header string table */ -#define ELF_STRTAB ".strtab" /* string table */ -#define ELF_SYMTAB ".symtab" /* symbol table */ -#define ELF_SYMTAB_SHNDX ".symtab_shndx"/* symbol table section index */ -#define ELF_TBSS ".tbss" /* thread local uninit data */ -#define ELF_TDATA ".tdata" /* thread local init data */ -#define ELF_TDATA1 ".tdata1" /* thread local init data */ -#define ELF_TEXT ".text" /* code */ - -/* Section Attribute Flags - sh_flags */ -#define SHF_WRITE 0x1 /* Writable */ -#define SHF_ALLOC 0x2 /* occupies memory */ -#define SHF_EXECINSTR 0x4 /* executable */ -#define SHF_MERGE 0x10 /* Might be merged */ -#define SHF_STRINGS 0x20 /* Contains NULL terminated strings */ -#define SHF_INFO_LINK 0x40 /* sh_info contains SHT index */ -#define SHF_LINK_ORDER 0x80 /* Preserve order after combining*/ -#define SHF_OS_NONCONFORMING 0x100 /* Non-standard OS specific handling */ -#define SHF_GROUP 0x200 /* Member of section group */ -#define SHF_TLS 0x400 /* Thread local storage */ -#define SHF_MASKOS 0x0ff00000 /* OS specific */ -#define SHF_MASKPROC 0xf0000000 /* reserved bits for processor */ - /* specific section attributes */ - -/* Section Group Flags */ -#define GRP_COMDAT 0x1 /* COMDAT group */ -#define GRP_MASKOS 0x0ff00000 /* Mask OS specific flags */ -#define GRP_MASKPROC 0xf0000000 /* Mask processor specific flags */ - -/* Symbol Table Entry */ -typedef struct elf32_sym { - Elf32_Word st_name; /* name - index into string table */ - Elf32_Addr st_value; /* symbol value */ - Elf32_Word st_size; /* symbol size */ - unsigned char st_info; /* type and binding */ - unsigned char st_other; /* 0 - no defined meaning */ - Elf32_Half st_shndx; /* section header index */ -} Elf32_Sym; - -/* Symbol table index */ -#define STN_UNDEF 0 /* undefined */ - -/* Extract symbol info - st_info */ -#define ELF32_ST_BIND(x) ((x) >> 4) -#define ELF32_ST_TYPE(x) (((unsigned int) x) & 0xf) -#define ELF32_ST_INFO(b,t) (((b) << 4) + ((t) & 0xf)) -#define ELF32_ST_VISIBILITY(x) ((x) & 0x3) - -/* Symbol Binding - ELF32_ST_BIND - st_info */ -#define STB_LOCAL 0 /* Local symbol */ -#define STB_GLOBAL 1 /* Global symbol */ -#define STB_WEAK 2 /* like global - lower precedence */ -#define STB_NUM 3 /* number of symbol bindings */ -#define STB_LOOS 10 /* reserved range for operating */ -#define STB_HIOS 12 /* system specific symbol bindings */ -#define STB_LOPROC 13 /* reserved range for processor */ -#define STB_HIPROC 15 /* specific symbol bindings */ - -/* Symbol type - ELF32_ST_TYPE - st_info */ -#define STT_NOTYPE 0 /* not specified */ -#define STT_OBJECT 1 /* data object */ -#define STT_FUNC 2 /* function */ -#define STT_SECTION 3 /* section */ -#define STT_FILE 4 /* file */ -#define STT_NUM 5 /* number of symbol types */ -#define STT_TLS 6 /* Thread local storage symbol */ -#define STT_LOOS 10 /* reserved range for operating */ -#define STT_HIOS 12 /* system specific symbol types */ -#define STT_LOPROC 13 /* reserved range for processor */ -#define STT_HIPROC 15 /* specific symbol types */ - -/* Symbol visibility - ELF32_ST_VISIBILITY - st_other */ -#define STV_DEFAULT 0 /* Normal visibility rules */ -#define STV_INTERNAL 1 /* Processor specific hidden class */ -#define STV_HIDDEN 2 /* Symbol unavailable in other mods */ -#define STV_PROTECTED 3 /* Not preemptible, not exported */ - - -/* Relocation entry with implicit addend */ -typedef struct -{ - Elf32_Addr r_offset; /* offset of relocation */ - Elf32_Word r_info; /* symbol table index and type */ -} Elf32_Rel; - -/* Relocation entry with explicit addend */ -typedef struct -{ - Elf32_Addr r_offset; /* offset of relocation */ - Elf32_Word r_info; /* symbol table index and type */ - Elf32_Sword r_addend; -} Elf32_Rela; - -/* Extract relocation info - r_info */ -#define ELF32_R_SYM(i) ((i) >> 8) -#define ELF32_R_TYPE(i) ((unsigned char) (i)) -#define ELF32_R_INFO(s,t) (((s) << 8) + (unsigned char)(t)) - -/* Program Header */ -typedef struct { - Elf32_Word p_type; /* segment type */ - Elf32_Off p_offset; /* segment offset */ - Elf32_Addr p_vaddr; /* virtual address of segment */ - Elf32_Addr p_paddr; /* physical address - ignored? */ - Elf32_Word p_filesz; /* number of bytes in file for seg. */ - Elf32_Word p_memsz; /* number of bytes in mem. for seg. */ - Elf32_Word p_flags; /* flags */ - Elf32_Word p_align; /* memory alignment */ -} Elf32_Phdr; - -/* Segment types - p_type */ -#define PT_NULL 0 /* unused */ -#define PT_LOAD 1 /* loadable segment */ -#define PT_DYNAMIC 2 /* dynamic linking section */ -#define PT_INTERP 3 /* the RTLD */ -#define PT_NOTE 4 /* auxiliary information */ -#define PT_SHLIB 5 /* reserved - purpose undefined */ -#define PT_PHDR 6 /* program header */ -#define PT_TLS 7 /* Thread local storage template */ -#define PT_NUM 8 /* Number of segment types */ -#define PT_LOOS 0x60000000 /* reserved range for operating */ -#define PT_HIOS 0x6fffffff /* system specific segment types */ -#define PT_LOPROC 0x70000000 /* reserved range for processor */ -#define PT_HIPROC 0x7fffffff /* specific segment types */ - -/* Segment flags - p_flags */ -#define PF_X 0x1 /* Executable */ -#define PF_W 0x2 /* Writable */ -#define PF_R 0x4 /* Readable */ -#define PF_MASKOS 0x0ff00000 /* OS specific segment flags */ -#define PF_MASKPROC 0xf0000000 /* reserved bits for processor */ - /* specific segment flags */ -/* Dynamic structure */ -typedef struct -{ - Elf32_Sword d_tag; /* controls meaning of d_val */ - union - { - Elf32_Word d_val; /* Multiple meanings - see d_tag */ - Elf32_Addr d_ptr; /* program virtual address */ - } d_un; -} Elf32_Dyn; - -extern Elf32_Dyn _DYNAMIC[]; - -/* Dynamic Array Tags - d_tag */ -#define DT_NULL 0 /* marks end of _DYNAMIC array */ -#define DT_NEEDED 1 /* string table offset of needed lib */ -#define DT_PLTRELSZ 2 /* size of relocation entries in PLT */ -#define DT_PLTGOT 3 /* address PLT/GOT */ -#define DT_HASH 4 /* address of symbol hash table */ -#define DT_STRTAB 5 /* address of string table */ -#define DT_SYMTAB 6 /* address of symbol table */ -#define DT_RELA 7 /* address of relocation table */ -#define DT_RELASZ 8 /* size of relocation table */ -#define DT_RELAENT 9 /* size of relocation entry */ -#define DT_STRSZ 10 /* size of string table */ -#define DT_SYMENT 11 /* size of symbol table entry */ -#define DT_INIT 12 /* address of initialization func. */ -#define DT_FINI 13 /* address of termination function */ -#define DT_SONAME 14 /* string table offset of shared obj */ -#define DT_RPATH 15 /* string table offset of library - search path */ -#define DT_SYMBOLIC 16 /* start sym search in shared obj. */ -#define DT_REL 17 /* address of rel. tbl. w addends */ -#define DT_RELSZ 18 /* size of DT_REL relocation table */ -#define DT_RELENT 19 /* size of DT_REL relocation entry */ -#define DT_PLTREL 20 /* PLT referenced relocation entry */ -#define DT_DEBUG 21 /* bugger */ -#define DT_TEXTREL 22 /* Allow rel. mod. to unwritable seg */ -#define DT_JMPREL 23 /* add. of PLT's relocation entries */ -#define DT_BIND_NOW 24 /* Process relocations of object */ -#define DT_INIT_ARRAY 25 /* Array with addresses of init fct */ -#define DT_FINI_ARRAY 26 /* Array with addresses of fini fct */ -#define DT_INIT_ARRAYSZ 27 /* Size in bytes of DT_INIT_ARRAY */ -#define DT_FINI_ARRAYSZ 28 /* Size in bytes of DT_FINI_ARRAY */ -#define DT_RUNPATH 29 /* Library search path */ -#define DT_FLAGS 30 /* Flags for the object being loaded */ -#define DT_ENCODING 32 /* Start of encoded range */ -#define DT_PREINIT_ARRAY 32 /* Array with addresses of preinit fct*/ -#define DT_PREINIT_ARRAYSZ 33 /* size in bytes of DT_PREINIT_ARRAY */ -#define DT_NUM 34 /* Number used. */ -#define DT_LOOS 0x60000000 /* reserved range for OS */ -#define DT_HIOS 0x6fffffff /* specific dynamic array tags */ -#define DT_LOPROC 0x70000000 /* reserved range for processor */ -#define DT_HIPROC 0x7fffffff /* specific dynamic array tags */ - -/* Dynamic Tag Flags - d_un.d_val */ -#define DF_ORIGIN 0x01 /* Object may use DF_ORIGIN */ -#define DF_SYMBOLIC 0x02 /* Symbol resolutions starts here */ -#define DF_TEXTREL 0x04 /* Object contains text relocations */ -#define DF_BIND_NOW 0x08 /* No lazy binding for this object */ -#define DF_STATIC_TLS 0x10 /* Static thread local storage */ - -/* Standard ELF hashing function */ -unsigned long elf_hash(const unsigned char *name); - -#define ELF_TARG_VER 1 /* The ver for which this code is intended */ - -/* - * XXX - PowerPC defines really don't belong in here, - * but we'll put them in for simplicity. - */ - -/* Values for Elf32/64_Ehdr.e_flags. */ -#define EF_PPC_EMB 0x80000000 /* PowerPC embedded flag */ - -/* Cygnus local bits below */ -#define EF_PPC_RELOCATABLE 0x00010000 /* PowerPC -mrelocatable flag*/ -#define EF_PPC_RELOCATABLE_LIB 0x00008000 /* PowerPC -mrelocatable-lib - flag */ - -/* PowerPC relocations defined by the ABIs */ -#define R_PPC_NONE 0 -#define R_PPC_ADDR32 1 /* 32bit absolute address */ -#define R_PPC_ADDR24 2 /* 26bit address, 2 bits ignored. */ -#define R_PPC_ADDR16 3 /* 16bit absolute address */ -#define R_PPC_ADDR16_LO 4 /* lower 16bit of absolute address */ -#define R_PPC_ADDR16_HI 5 /* high 16bit of absolute address */ -#define R_PPC_ADDR16_HA 6 /* adjusted high 16bit */ -#define R_PPC_ADDR14 7 /* 16bit address, 2 bits ignored */ -#define R_PPC_ADDR14_BRTAKEN 8 -#define R_PPC_ADDR14_BRNTAKEN 9 -#define R_PPC_REL24 10 /* PC relative 26 bit */ -#define R_PPC_REL14 11 /* PC relative 16 bit */ -#define R_PPC_REL14_BRTAKEN 12 -#define R_PPC_REL14_BRNTAKEN 13 -#define R_PPC_GOT16 14 -#define R_PPC_GOT16_LO 15 -#define R_PPC_GOT16_HI 16 -#define R_PPC_GOT16_HA 17 -#define R_PPC_PLTREL24 18 -#define R_PPC_COPY 19 -#define R_PPC_GLOB_DAT 20 -#define R_PPC_JMP_SLOT 21 -#define R_PPC_RELATIVE 22 -#define R_PPC_LOCAL24PC 23 -#define R_PPC_UADDR32 24 -#define R_PPC_UADDR16 25 -#define R_PPC_REL32 26 -#define R_PPC_PLT32 27 -#define R_PPC_PLTREL32 28 -#define R_PPC_PLT16_LO 29 -#define R_PPC_PLT16_HI 30 -#define R_PPC_PLT16_HA 31 -#define R_PPC_SDAREL16 32 -#define R_PPC_SECTOFF 33 -#define R_PPC_SECTOFF_LO 34 -#define R_PPC_SECTOFF_HI 35 -#define R_PPC_SECTOFF_HA 36 -/* Keep this the last entry. */ -#define R_PPC_NUM 37 - -/* The remaining relocs are from the Embedded ELF ABI, and are not - in the SVR4 ELF ABI. */ -#define R_PPC_EMB_NADDR32 101 -#define R_PPC_EMB_NADDR16 102 -#define R_PPC_EMB_NADDR16_LO 103 -#define R_PPC_EMB_NADDR16_HI 104 -#define R_PPC_EMB_NADDR16_HA 105 -#define R_PPC_EMB_SDAI16 106 -#define R_PPC_EMB_SDA2I16 107 -#define R_PPC_EMB_SDA2REL 108 -#define R_PPC_EMB_SDA21 109 /* 16 bit offset in SDA */ -#define R_PPC_EMB_MRKREF 110 -#define R_PPC_EMB_RELSEC16 111 -#define R_PPC_EMB_RELST_LO 112 -#define R_PPC_EMB_RELST_HI 113 -#define R_PPC_EMB_RELST_HA 114 -#define R_PPC_EMB_BIT_FLD 115 -#define R_PPC_EMB_RELSDA 116 /* 16 bit relative offset in SDA */ - -/* Diab tool relocations. */ -#define R_PPC_DIAB_SDA21_LO 180 /* like EMB_SDA21, but lower 16 bit */ -#define R_PPC_DIAB_SDA21_HI 181 /* like EMB_SDA21, but high 16 bit */ -#define R_PPC_DIAB_SDA21_HA 182 /* like EMB_SDA21, adjusted high 16 */ -#define R_PPC_DIAB_RELSDA_LO 183 /* like EMB_RELSDA, but lower 16 bit */ -#define R_PPC_DIAB_RELSDA_HI 184 /* like EMB_RELSDA, but high 16 bit */ -#define R_PPC_DIAB_RELSDA_HA 185 /* like EMB_RELSDA, adjusted high 16 */ - -/* This is a phony reloc to handle any old fashioned TOC16 references - that may still be in object files. */ -#define R_PPC_TOC16 255 - -#endif /* _ELF_H */ - diff --git a/ForwardMii-Plugin/Resources/GX/elfloader.c b/ForwardMii-Plugin/Resources/GX/elfloader.c deleted file mode 100644 index 651a1ee..0000000 --- a/ForwardMii-Plugin/Resources/GX/elfloader.c +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (c) 2001 William L. Pitts - * Modifications (c) 2004 Felix Domke - * All rights reserved. - * - * Redistribution and use in source and binary forms are freely - * permitted provided that the above copyright notice and this - * paragraph and the following disclaimer are duplicated in all - * such forms. - * - * This software is provided "AS IS" and without any express or - * implied warranties, including, without limitation, the implied - * warranties of merchantability and fitness for a particular - * purpose. - */ - -#include -#include - -#include - -#include "elf_abi.h" - -/* ====================================================================== - * Determine if a valid ELF image exists at the given memory location. - * First looks at the ELF header magic field, the makes sure that it is - * executable and makes sure that it is for a PowerPC. - * ====================================================================== */ -s32 valid_elf_image (void *addr) -{ - Elf32_Ehdr *ehdr; /* Elf header structure pointer */ - - ehdr = (Elf32_Ehdr *) addr; - - if (!IS_ELF (*ehdr)) - return 0; - - if (ehdr->e_type != ET_EXEC) - return -1; - - if (ehdr->e_machine != EM_PPC) - return -1; - - return 1; -} - - -/* ====================================================================== - * A very simple elf loader, assumes the image is valid, returns the - * entry point address. - * ====================================================================== */ -u32 load_elf_image (void *addr) -{ - Elf32_Ehdr *ehdr; - Elf32_Shdr *shdr; - u8 *strtab = 0; - u8 *image; - int i; - - ehdr = (Elf32_Ehdr *) addr; - /* Find the section header string table for output info */ - shdr = (Elf32_Shdr *) (addr + ehdr->e_shoff + - (ehdr->e_shstrndx * sizeof (Elf32_Shdr))); - - if (shdr->sh_type == SHT_STRTAB) - strtab = (u8 *) (addr + shdr->sh_offset); - - /* Load each appropriate section */ - for (i = 0; i < ehdr->e_shnum; ++i) { - shdr = (Elf32_Shdr *) (addr + ehdr->e_shoff + - (i * sizeof (Elf32_Shdr))); - - if (!(shdr->sh_flags & SHF_ALLOC) - || shdr->sh_addr == 0 || shdr->sh_size == 0) { - continue; - } - - shdr->sh_addr &= 0x3FFFFFFF; - shdr->sh_addr |= 0x80000000; - - if (strtab) { - /*printf ("%sing section %s @ 0x%08x (0x%08x bytes)\n", - (shdr->sh_type == SHT_NOBITS) ? - "clear" : "load", - &strtab[shdr->sh_name], - (u32) shdr->sh_addr, - (u32) shdr->sh_size);*/ - } - - if (shdr->sh_type == SHT_NOBITS) { - memset ((void *) shdr->sh_addr, 0, shdr->sh_size); - } else { - image = (u8 *) addr + shdr->sh_offset; - memcpy ((void *) shdr->sh_addr, - (const void *) image, - shdr->sh_size); - } - DCFlushRangeNoSync ((void *) shdr->sh_addr, shdr->sh_size); - } - - return (ehdr->e_entry & 0x3FFFFFFF) | 0x80000000; -} - diff --git a/ForwardMii-Plugin/Resources/GX/elfloader.h b/ForwardMii-Plugin/Resources/GX/elfloader.h deleted file mode 100644 index d378fe4..0000000 --- a/ForwardMii-Plugin/Resources/GX/elfloader.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef _ELFLOADER_H_ -#define _ELFLOADER_H_ - -#include - -#ifdef __cplusplus -extern "C" -{ -#endif - -s32 valid_elf_image (void *addr); -u32 load_elf_image (void *addr); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ForwardMii-Plugin/Resources/GX/fatmounter.c b/ForwardMii-Plugin/Resources/GX/fatmounter.c deleted file mode 100644 index 0009cef..0000000 --- a/ForwardMii-Plugin/Resources/GX/fatmounter.c +++ /dev/null @@ -1,184 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include - -//these are the only stable and speed is good -#define CACHE 8 -#define SECTORS 64 - -enum BPB { - BPB_jmpBoot = 0x00, - BPB_OEMName = 0x03, - // BIOS Parameter Block - BPB_bytesPerSector = 0x0B, - BPB_sectorsPerCluster = 0x0D, - BPB_reservedSectors = 0x0E, - BPB_numFATs = 0x10, - BPB_rootEntries = 0x11, - BPB_numSectorsSmall = 0x13, - BPB_mediaDesc = 0x15, - BPB_sectorsPerFAT = 0x16, - BPB_sectorsPerTrk = 0x18, - BPB_numHeads = 0x1A, - BPB_numHiddenSectors = 0x1C, - BPB_numSectors = 0x20, - // Ext BIOS Parameter Block for FAT16 - BPB_FAT16_driveNumber = 0x24, - BPB_FAT16_reserved1 = 0x25, - BPB_FAT16_extBootSig = 0x26, - BPB_FAT16_volumeID = 0x27, - BPB_FAT16_volumeLabel = 0x2B, - BPB_FAT16_fileSysType = 0x36, - // Bootcode - BPB_FAT16_bootCode = 0x3E, - // FAT32 extended block - BPB_FAT32_sectorsPerFAT32 = 0x24, - BPB_FAT32_extFlags = 0x28, - BPB_FAT32_fsVer = 0x2A, - BPB_FAT32_rootClus = 0x2C, - BPB_FAT32_fsInfo = 0x30, - BPB_FAT32_bkBootSec = 0x32, - // Ext BIOS Parameter Block for FAT32 - BPB_FAT32_driveNumber = 0x40, - BPB_FAT32_reserved1 = 0x41, - BPB_FAT32_extBootSig = 0x42, - BPB_FAT32_volumeID = 0x43, - BPB_FAT32_volumeLabel = 0x47, - BPB_FAT32_fileSysType = 0x52, - // Bootcode - BPB_FAT32_bootCode = 0x5A, - BPB_bootSig_55 = 0x1FE, - BPB_bootSig_AA = 0x1FF -}; - -static const char FAT_SIG[3] = {'F', 'A', 'T'}; - -#define BYTES_PER_READ 512 - -static bool _FAT_partition_isFAT(const DISC_INTERFACE* disc, sec_t startSector) -{ - uint8_t sectorBuffer[BYTES_PER_READ] = {0}; - if (!disc->readSectors(startSector, 1, sectorBuffer)) { - return false; - } - // Make sure it is a valid BPB - if ( (sectorBuffer[BPB_bootSig_55] != 0x55) || (sectorBuffer[BPB_bootSig_AA] != 0xAA)) { - return false; - } - - // Now verify that this is indeed a FAT partition - if (memcmp(sectorBuffer + BPB_FAT16_fileSysType, FAT_SIG, sizeof(FAT_SIG)) && - memcmp(sectorBuffer + BPB_FAT32_fileSysType, FAT_SIG, sizeof(FAT_SIG))) - { - return false; - } - - // check again for the last two cases to make sure that we really have a FAT filesystem here - // and won't corrupt any data - if(memcmp(sectorBuffer + BPB_FAT16_fileSysType, "FAT", 3) != 0 && memcmp(sectorBuffer + BPB_FAT32_fileSysType, "FAT32", 5) != 0) - { - return false; - } - return true; -} -static inline uint32_t u8array_to_u32 (const uint8_t* item, int offset) { - return ( item[offset] | (item[offset + 1] << 8) | (item[offset + 2] << 16) | (item[offset + 3] << 24)); -} - -sec_t GetFATPartition(const DISC_INTERFACE* disc) -{ - int i; - uint8_t sectorBuffer[BYTES_PER_READ] = {0}; - sec_t startSector = 0; - - if(!disc->startup()) - return 0; - - // Read first sector of disc - if (!disc->readSectors(0, 1, sectorBuffer)) - startSector = 0; - - // Make sure it is a valid MBR or boot sector - if ( (sectorBuffer[BPB_bootSig_55] != 0x55) || (sectorBuffer[BPB_bootSig_AA] != 0xAA)) - startSector = 0; - - if (!memcmp(sectorBuffer + BPB_FAT16_fileSysType, FAT_SIG, sizeof(FAT_SIG))) - { - // Check if there is a FAT string, which indicates this is a boot sector - startSector = 0; - } - else if (!memcmp(sectorBuffer + BPB_FAT32_fileSysType, FAT_SIG, sizeof(FAT_SIG))) - { - // Check for FAT32 - startSector = 0; - } - else - { - // This is an MBR - // Find first valid partition from MBR - // First check for an active partition - for (i=0x1BE; (i < 0x1FE) && (sectorBuffer[i] != 0x80); i+= 0x10); - // If it find an active partition, check for FAT-Partition - if ( i != 0x1FE && !_FAT_partition_isFAT(disc, u8array_to_u32(sectorBuffer, 0x8 + i)) ) - i = 0x1FE; - - // If it didn't find an active partition, search for any valid partition - if (i == 0x1FE) - { - for (i=0x1BE; i < 0x1FE; i+= 0x10) - { - if ( sectorBuffer[i+0x04] != 0x00 && _FAT_partition_isFAT(disc, u8array_to_u32(sectorBuffer, 0x8 + i)) ) - break; - } - } - if (i != 0x1FE) - startSector = u8array_to_u32(sectorBuffer, 0x8 + i);; - } - disc->shutdown(); - return startSector; -} - -int USBDevice_Init() -{ - //closing all open Files write back the cache and then shutdown em! - fatUnmount("USB:/"); - //right now mounts first FAT-partition - if (fatMount("USB", &__io_usbstorage, GetFATPartition(&__io_usbstorage), CACHE, SECTORS)) { - //try first mount with libogc - return 1; - } - return -1; -} - -void USBDevice_deInit() -{ - //closing all open Files write back the cache and then shutdown em! - fatUnmount("USB:/"); -} - -int isSdInserted() -{ - return __io_wiisd.isInserted(); -} - -int SDCard_Init() -{ - //closing all open Files write back the cache and then shutdown em! - fatUnmount("SD:/"); - //right now mounts first FAT-partition - if (fatMount("SD", &__io_wiisd, GetFATPartition(&__io_wiisd), CACHE, SECTORS)) - return 1; - return -1; -} - -void SDCard_deInit() -{ - //closing all open Files write back the cache and then shutdown em! - fatUnmount("SD:/"); -} diff --git a/ForwardMii-Plugin/Resources/GX/fatmounter.h b/ForwardMii-Plugin/Resources/GX/fatmounter.h deleted file mode 100644 index e235702..0000000 --- a/ForwardMii-Plugin/Resources/GX/fatmounter.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef _FATMOUNTER_H_ -#define _FATMOUNTER_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -int USBDevice_Init(); -void USBDevice_deInit(); -int isSdInserted(); -int SDCard_Init(); -void SDCard_deInit(); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ForwardMii-Plugin/Resources/GX/filelist.h b/ForwardMii-Plugin/Resources/GX/filelist.h deleted file mode 100644 index e0af26c..0000000 --- a/ForwardMii-Plugin/Resources/GX/filelist.h +++ /dev/null @@ -1,20 +0,0 @@ -/**************************************************************************** - * libwiigui Template - * Tantric 2009 - * - * imagelist.h - * Contains a list of all of the files in the images, fonts, sounds folders - ***************************************************************************/ - -#ifndef _FILELIST_H_ -#define _FILELIST_H_ - -#include - -extern const u8 background_png[]; -extern const u32 background_png_size; - -extern const u8 background169_png[]; -extern const u32 background169_png_size; - -#endif diff --git a/ForwardMii-Plugin/Resources/GX/main.cpp b/ForwardMii-Plugin/Resources/GX/main.cpp deleted file mode 100644 index c1d79b3..0000000 --- a/ForwardMii-Plugin/Resources/GX/main.cpp +++ /dev/null @@ -1,244 +0,0 @@ -/* - * loadMii loader v0.3 - * main.c - * http://code.google.com/p/loadmii - * - * Copyright 2009 The Lemon Man - * Thanks to luccax, Wiipower, Aurelio and crediar - * GX added by dimok (thanks to Tantric) - * usbGecko powered by Nuke - * little modifications by Leathl - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. - */ - -#include -#include -#include -#include -#include -#include - -#include "pngu/pngu.h" -#include "video.h" -#include "filelist.h" -#include "dolloader.h" -#include "elfloader.h" -#include "fatmounter.h" - -/*edit these*/ -#define USB_FIRST false -#define ELF_FIRST false - -#define SD_DOL "SD:/apps/appfolder/boot.dol" -#define SD_ELF "SD:/apps/appfolder/boot.elf" -#define USB_DOL "USB:/apps/appfolder/boot.dol" -#define USB_ELF "USB:/apps/appfolder/boot.elf" - -static PNGUPROP imgProp; -static IMGCTX ctx; - - -u8 * GetImageData(void) { - - u8 * data = NULL; - - int ret; - - if (CONF_GetAspectRatio()) { - ctx = PNGU_SelectImageFromBuffer(background169_png); - if (!ctx) - return NULL; - } else { - ctx = PNGU_SelectImageFromBuffer(background_png); - if (!ctx) - return NULL; - } - - ret = PNGU_GetImageProperties(ctx, &imgProp); - if (ret != PNGU_OK) - return NULL; - - int len = imgProp.imgWidth * imgProp.imgHeight * 4; - - if(len%32) len += (32-len%32); - data = (u8 *)memalign (32, len); - ret = PNGU_DecodeTo4x4RGBA8 (ctx, imgProp.imgWidth, imgProp.imgHeight, data, 255); - DCFlushRange(data, len); - - PNGU_ReleaseImageContext(ctx); - - return data; -} - -void Background_Show(int x, int y, int z, u8 * data, int angle, int scaleX, int scaleY, int alpha) -{ - /* Draw image */ - Menu_DrawImg(x, y, z, imgProp.imgWidth, imgProp.imgHeight, data, angle, scaleX, scaleY, alpha); -} - - -int main(int argc, char **argv) -{ - u32 cookie; - FILE *exeFile = NULL; - void *exeBuffer = (void *)EXECUTABLE_MEM_ADDR; - int exeSize = 0; - u32 exeEntryPointAddress = 0; - entrypoint exeEntryPoint; - char cfgpath[256], first[256], second[256], third[256], fourth[256]; - - /* int videomod */ - InitVideo(); - /* get imagedata */ - u8 * imgdata = GetImageData(); - /* fadein of image */ - for(int i = 0; i < 255; i = i+10) - { - if(i>255) i = 255; - Background_Show(0, 0, 0, imgdata, 0, 1, 1, i); - Menu_Render(); - } - - /*set order*/ - if (USB_FIRST && ELF_FIRST) - { - sprintf(first, USB_ELF); - sprintf(second, USB_DOL); - sprintf(third, SD_ELF); - sprintf(fourth, SD_DOL); - } - else if (USB_FIRST) - { - sprintf(first, USB_DOL); - sprintf(second, USB_ELF); - sprintf(third, SD_DOL); - sprintf(fourth, SD_ELF); - } - else if (ELF_FIRST) - { - sprintf(first, SD_ELF); - sprintf(second, SD_DOL); - sprintf(third, USB_ELF); - sprintf(fourth, USB_DOL); - } - else - { - sprintf(first, SD_DOL); - sprintf(second, SD_ELF); - sprintf(third, USB_DOL); - sprintf(fourth, USB_ELF); - } - - /* check devices */ - SDCard_Init(); - USBDevice_Init(); - - /* Open dol File and check exist */ - sprintf(cfgpath, first); - exeFile = fopen (cfgpath ,"rb"); - if (exeFile==NULL) - { - sprintf(cfgpath, second); - exeFile = fopen (cfgpath ,"rb"); - } - if (exeFile==NULL) - { - sprintf(cfgpath, third); - exeFile = fopen (cfgpath ,"rb"); - } - if (exeFile==NULL) - { - sprintf(cfgpath, fourth); - exeFile = fopen (cfgpath ,"rb"); - } - // if nothing found exiting - if (exeFile==NULL) { - printf("\n\n\t\tCan't find DOL File...\n"); - Menu_Render(); - sleep(3); - fclose (exeFile); - SDCard_deInit(); - USBDevice_deInit(); - StopGX(); - SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); - } - - fseek (exeFile, 0, SEEK_END); - exeSize = ftell(exeFile); - fseek (exeFile, 0, SEEK_SET); - - if(fread (exeBuffer, 1, exeSize, exeFile) != (unsigned int) exeSize) - { - printf("\n\n\t\tCan't open DOL File...\n"); - Menu_Render(); - fclose (exeFile); - sleep(3); - SDCard_deInit(); - USBDevice_deInit(); - StopGX(); - SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); - } - fclose (exeFile); - - /* load entry point */ - struct __argv args; - bzero(&args, sizeof(args)); - args.argvMagic = ARGV_MAGIC; - args.length = strlen(cfgpath) + 2; - args.commandLine = (char*)malloc(args.length); - if (!args.commandLine) SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); - strcpy(args.commandLine, cfgpath); - args.commandLine[args.length - 1] = '\0'; - args.argc = 1; - args.argv = &args.commandLine; - args.endARGV = args.argv + 1; - - int ret = valid_elf_image(exeBuffer); - if (ret == 1) - exeEntryPointAddress = load_elf_image(exeBuffer); - else - exeEntryPointAddress = load_dol_image(exeBuffer, &args); - - /* fadeout of image */ - for(int i = 255; i > 1; i = i-7) - { - if(i < 0) i = 0; - Background_Show(0, 0, 0, imgdata, 0, 1, 1, i); - Menu_Render(); - } - SDCard_deInit(); - USBDevice_deInit(); - StopGX(); - if (exeEntryPointAddress == 0) { - printf("EntryPointAddress failed...\n"); - Menu_Render(); - sleep(3); - fclose (exeFile); - SDCard_deInit(); - USBDevice_deInit(); - StopGX(); - SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0);; - } - exeEntryPoint = (entrypoint) exeEntryPointAddress; - /* cleaning up and load dol */ - SYS_ResetSystem(SYS_SHUTDOWN, 0, 0); - _CPU_ISR_Disable (cookie); - __exception_closeall (); - exeEntryPoint (); - _CPU_ISR_Restore (cookie); - return 0; -} diff --git a/ForwardMii-Plugin/Resources/GX/video.cpp b/ForwardMii-Plugin/Resources/GX/video.cpp deleted file mode 100644 index 345bcf0..0000000 --- a/ForwardMii-Plugin/Resources/GX/video.cpp +++ /dev/null @@ -1,241 +0,0 @@ -/**************************************************************************** - * libwiigui Template - * Tantric 2009 - * - * video.cpp - * Video routines - ***************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include -#include - -#define DEFAULT_FIFO_SIZE 256 * 1024 -static unsigned int *xfb[2] = { NULL, NULL }; // Double buffered -static int whichfb = 0; // Switch -static GXRModeObj *vmode; // Menu video mode -static unsigned char gp_fifo[DEFAULT_FIFO_SIZE] ATTRIBUTE_ALIGN (32); -static Mtx GXmodelView2D; - -/**************************************************************************** - * StartGX - * - * Initialises GX and sets it up for use - ***************************************************************************/ -static void -StartGX () -{ - GXColor background = { 0, 0, 0, 0xff }; - - /*** Clear out FIFO area ***/ - memset (&gp_fifo, 0, DEFAULT_FIFO_SIZE); - - /*** Initialise GX ***/ - GX_Init (&gp_fifo, DEFAULT_FIFO_SIZE); - GX_SetCopyClear (background, 0x00ffffff); - - GX_SetDispCopyGamma (GX_GM_1_0); - GX_SetCullMode (GX_CULL_NONE); -} - -/**************************************************************************** - * ResetVideo_Menu - * - * Reset the video/rendering mode for the menu -****************************************************************************/ -void -ResetVideo_Menu() -{ - Mtx44 p; - f32 yscale; - u32 xfbHeight; - - VIDEO_Configure (vmode); - VIDEO_Flush(); - VIDEO_WaitVSync(); - if (vmode->viTVMode & VI_NON_INTERLACE) - VIDEO_WaitVSync(); - else - while (VIDEO_GetNextField()) - VIDEO_WaitVSync(); - - // clears the bg to color and clears the z buffer - GXColor background = {0, 0, 0, 255}; - GX_SetCopyClear (background, 0x00ffffff); - - yscale = GX_GetYScaleFactor(vmode->efbHeight,vmode->xfbHeight); - xfbHeight = GX_SetDispCopyYScale(yscale); - GX_SetScissor(0,0,vmode->fbWidth,vmode->efbHeight); - GX_SetDispCopySrc(0,0,vmode->fbWidth,vmode->efbHeight); - GX_SetDispCopyDst(vmode->fbWidth,xfbHeight); - GX_SetCopyFilter(vmode->aa,vmode->sample_pattern,GX_TRUE,vmode->vfilter); - GX_SetFieldMode(vmode->field_rendering,((vmode->viHeight==2*vmode->xfbHeight)?GX_ENABLE:GX_DISABLE)); - - if (vmode->aa) - GX_SetPixelFmt(GX_PF_RGB565_Z16, GX_ZC_LINEAR); - else - GX_SetPixelFmt(GX_PF_RGB8_Z24, GX_ZC_LINEAR); - - // setup the vertex descriptor - // tells the flipper to expect direct data - GX_ClearVtxDesc(); - GX_InvVtxCache (); - GX_InvalidateTexAll(); - - GX_SetVtxDesc(GX_VA_TEX0, GX_NONE); - GX_SetVtxDesc(GX_VA_POS, GX_DIRECT); - GX_SetVtxDesc (GX_VA_CLR0, GX_DIRECT); - - GX_SetVtxAttrFmt (GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); - GX_SetVtxAttrFmt (GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); - GX_SetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); - GX_SetZMode (GX_FALSE, GX_LEQUAL, GX_TRUE); - - GX_SetNumChans(1); - GX_SetNumTexGens(1); - GX_SetTevOp (GX_TEVSTAGE0, GX_PASSCLR); - GX_SetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); - GX_SetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY); - - guMtxIdentity(GXmodelView2D); - guMtxTransApply (GXmodelView2D, GXmodelView2D, 0.0F, 0.0F, -200.0F); - GX_LoadPosMtxImm(GXmodelView2D,GX_PNMTX0); - - guOrtho(p,0,479,0,639,0,300); - GX_LoadProjectionMtx(p, GX_ORTHOGRAPHIC); - - GX_SetViewport(0,0,vmode->fbWidth,vmode->efbHeight,0,1); - GX_SetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR); - GX_SetAlphaUpdate(GX_TRUE); -} - -/**************************************************************************** - * InitVideo - * - * This function MUST be called at startup. - * - also sets up menu video mode - ***************************************************************************/ - -void -InitVideo () -{ - VIDEO_Init(); - vmode = VIDEO_GetPreferredMode(NULL); // get default video mode - - VIDEO_Configure (vmode); - - // Allocate the video buffers - xfb[0] = (u32 *) MEM_K0_TO_K1 (SYS_AllocateFramebuffer (vmode)); - xfb[1] = (u32 *) MEM_K0_TO_K1 (SYS_AllocateFramebuffer (vmode)); - - // A console is always useful while debugging - console_init (xfb[0], 20, 64, vmode->fbWidth, vmode->xfbHeight, vmode->fbWidth * 2); - - // Clear framebuffers etc. - VIDEO_ClearFrameBuffer (vmode, xfb[0], COLOR_BLACK); - VIDEO_ClearFrameBuffer (vmode, xfb[1], COLOR_BLACK); - VIDEO_SetNextFramebuffer (xfb[0]); - - VIDEO_SetBlack (FALSE); - VIDEO_Flush (); - VIDEO_WaitVSync (); - if (vmode->viTVMode & VI_NON_INTERLACE) - VIDEO_WaitVSync (); - - StartGX(); - ResetVideo_Menu(); - // Finally, the video is up and ready for use :) -} - -/**************************************************************************** - * StopGX - * - * Stops GX (when exiting) - ***************************************************************************/ -void StopGX() -{ - GX_AbortFrame(); - GX_Flush(); - - VIDEO_SetBlack(TRUE); - VIDEO_Flush(); -} - -/**************************************************************************** - * Menu_Render - * - * Renders everything current sent to GX, and flushes video - ***************************************************************************/ -void Menu_Render() -{ - GX_DrawDone (); - - whichfb ^= 1; // flip framebuffer - GX_SetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE); - GX_SetColorUpdate(GX_TRUE); - GX_CopyDisp(xfb[whichfb],GX_TRUE); - VIDEO_SetNextFramebuffer(xfb[whichfb]); - VIDEO_Flush(); - VIDEO_WaitVSync(); -} - -/**************************************************************************** - * Menu_DrawImg - * - * Draws the specified image on screen using GX - ***************************************************************************/ -void Menu_DrawImg(f32 xpos, f32 ypos, f32 zpos, u16 width, u16 height, u8 data[], - f32 degrees, f32 scaleX, f32 scaleY, u8 alpha) -{ - if(data == NULL) - return; - - GXTexObj texObj; - - GX_InitTexObj(&texObj, data, width,height, GX_TF_RGBA8,GX_CLAMP, GX_CLAMP,GX_FALSE); - GX_LoadTexObj(&texObj, GX_TEXMAP0); - GX_InvalidateTexAll(); - - GX_SetTevOp (GX_TEVSTAGE0, GX_MODULATE); - GX_SetVtxDesc (GX_VA_TEX0, GX_DIRECT); - - Mtx m,m1,m2, mv; - width *=.5; - height*=.5; - guMtxIdentity (m1); - guMtxScaleApply(m1,m1,scaleX,scaleY,1.0); - Vector axis = (Vector) {0 , 0, 1 }; - guMtxRotAxisDeg (m2, &axis, degrees); - guMtxConcat(m1,m2,m); - - guMtxTransApply(m,m, xpos+width+0.5,ypos+height+0.5,zpos); - guMtxConcat (GXmodelView2D, m, mv); - GX_LoadPosMtxImm (mv, GX_PNMTX0); - - GX_Begin(GX_QUADS, GX_VTXFMT0,4); - GX_Position3f32(-width, -height, 0); - GX_Color4u8(0xFF,0xFF,0xFF,alpha); - GX_TexCoord2f32(0, 0); - - GX_Position3f32(width, -height, 0); - GX_Color4u8(0xFF,0xFF,0xFF,alpha); - GX_TexCoord2f32(1, 0); - - GX_Position3f32(width, height, 0); - GX_Color4u8(0xFF,0xFF,0xFF,alpha); - GX_TexCoord2f32(1, 1); - - GX_Position3f32(-width, height, 0); - GX_Color4u8(0xFF,0xFF,0xFF,alpha); - GX_TexCoord2f32(0, 1); - GX_End(); - GX_LoadPosMtxImm (GXmodelView2D, GX_PNMTX0); - - GX_SetTevOp (GX_TEVSTAGE0, GX_PASSCLR); - GX_SetVtxDesc (GX_VA_TEX0, GX_NONE); -} diff --git a/ForwardMii-Plugin/Resources/GX/video.h b/ForwardMii-Plugin/Resources/GX/video.h deleted file mode 100644 index fb45f0a..0000000 --- a/ForwardMii-Plugin/Resources/GX/video.h +++ /dev/null @@ -1,20 +0,0 @@ -/**************************************************************************** - * libwiigui Template - * Tantric 2009 - * - * video.h - * Video routines - ***************************************************************************/ - -#ifndef _VIDEO_H_ -#define _VIDEO_H_ - -#include - -void InitVideo (); -void StopGX(); -void ResetVideo_Menu(); -void Menu_Render(); -void Menu_DrawImg(f32 xpos, f32 ypos, f32 zpos, u16 width, u16 height, u8 data[], f32 degrees, f32 scaleX, f32 scaleY, u8 alphaF ); - -#endif diff --git a/ForwardMii-Plugin/Resources/SDSDHC/10CharsTail.bin b/ForwardMii-Plugin/Resources/SDSDHC/10CharsTail.bin deleted file mode 100644 index 266d5d3..0000000 Binary files a/ForwardMii-Plugin/Resources/SDSDHC/10CharsTail.bin and /dev/null differ diff --git a/ForwardMii-Plugin/Resources/SDSDHC/11CharsTail.bin b/ForwardMii-Plugin/Resources/SDSDHC/11CharsTail.bin deleted file mode 100644 index 22e9232..0000000 Binary files a/ForwardMii-Plugin/Resources/SDSDHC/11CharsTail.bin and /dev/null differ diff --git a/ForwardMii-Plugin/Resources/SDSDHC/12CharsTail.bin b/ForwardMii-Plugin/Resources/SDSDHC/12CharsTail.bin deleted file mode 100644 index fe084a8..0000000 Binary files a/ForwardMii-Plugin/Resources/SDSDHC/12CharsTail.bin and /dev/null differ diff --git a/ForwardMii-Plugin/Resources/SDSDHC/13CharsTail.bin b/ForwardMii-Plugin/Resources/SDSDHC/13CharsTail.bin deleted file mode 100644 index 47ee8b7..0000000 Binary files a/ForwardMii-Plugin/Resources/SDSDHC/13CharsTail.bin and /dev/null differ diff --git a/ForwardMii-Plugin/Resources/SDSDHC/14CharsTail.bin b/ForwardMii-Plugin/Resources/SDSDHC/14CharsTail.bin deleted file mode 100644 index 4036d7d..0000000 Binary files a/ForwardMii-Plugin/Resources/SDSDHC/14CharsTail.bin and /dev/null differ diff --git a/ForwardMii-Plugin/Resources/SDSDHC/15CharsTail.bin b/ForwardMii-Plugin/Resources/SDSDHC/15CharsTail.bin deleted file mode 100644 index d040888..0000000 Binary files a/ForwardMii-Plugin/Resources/SDSDHC/15CharsTail.bin and /dev/null differ diff --git a/ForwardMii-Plugin/Resources/SDSDHC/16CharsTail.bin b/ForwardMii-Plugin/Resources/SDSDHC/16CharsTail.bin deleted file mode 100644 index 0abcb09..0000000 Binary files a/ForwardMii-Plugin/Resources/SDSDHC/16CharsTail.bin and /dev/null differ diff --git a/ForwardMii-Plugin/Resources/SDSDHC/17CharsBase.bin b/ForwardMii-Plugin/Resources/SDSDHC/17CharsBase.bin deleted file mode 100644 index 5a50866..0000000 Binary files a/ForwardMii-Plugin/Resources/SDSDHC/17CharsBase.bin and /dev/null differ diff --git a/ForwardMii-Plugin/Resources/SDSDHC/17CharsTail.bin b/ForwardMii-Plugin/Resources/SDSDHC/17CharsTail.bin deleted file mode 100644 index 4762dae..0000000 Binary files a/ForwardMii-Plugin/Resources/SDSDHC/17CharsTail.bin and /dev/null differ diff --git a/ForwardMii-Plugin/Resources/SDSDHC/18CharsTail.bin b/ForwardMii-Plugin/Resources/SDSDHC/18CharsTail.bin deleted file mode 100644 index 2a8d124..0000000 Binary files a/ForwardMii-Plugin/Resources/SDSDHC/18CharsTail.bin and /dev/null differ diff --git a/ForwardMii-Plugin/Resources/SDSDHC/3CharsBase.bin b/ForwardMii-Plugin/Resources/SDSDHC/3CharsBase.bin deleted file mode 100644 index a63f9d1..0000000 Binary files a/ForwardMii-Plugin/Resources/SDSDHC/3CharsBase.bin and /dev/null differ diff --git a/ForwardMii-Plugin/Resources/SDSDHC/3CharsTail.bin b/ForwardMii-Plugin/Resources/SDSDHC/3CharsTail.bin deleted file mode 100644 index 273a244..0000000 Binary files a/ForwardMii-Plugin/Resources/SDSDHC/3CharsTail.bin and /dev/null differ diff --git a/ForwardMii-Plugin/Resources/SDSDHC/4CharsTail.bin b/ForwardMii-Plugin/Resources/SDSDHC/4CharsTail.bin deleted file mode 100644 index c2f12b9..0000000 Binary files a/ForwardMii-Plugin/Resources/SDSDHC/4CharsTail.bin and /dev/null differ diff --git a/ForwardMii-Plugin/Resources/SDSDHC/5CharsTail.bin b/ForwardMii-Plugin/Resources/SDSDHC/5CharsTail.bin deleted file mode 100644 index be5e492..0000000 Binary files a/ForwardMii-Plugin/Resources/SDSDHC/5CharsTail.bin and /dev/null differ diff --git a/ForwardMii-Plugin/Resources/SDSDHC/6CharsBase.bin b/ForwardMii-Plugin/Resources/SDSDHC/6CharsBase.bin deleted file mode 100644 index 0026f4d..0000000 Binary files a/ForwardMii-Plugin/Resources/SDSDHC/6CharsBase.bin and /dev/null differ diff --git a/ForwardMii-Plugin/Resources/SDSDHC/6CharsTail.bin b/ForwardMii-Plugin/Resources/SDSDHC/6CharsTail.bin deleted file mode 100644 index 5d08011..0000000 Binary files a/ForwardMii-Plugin/Resources/SDSDHC/6CharsTail.bin and /dev/null differ diff --git a/ForwardMii-Plugin/Resources/SDSDHC/7CharsTail.bin b/ForwardMii-Plugin/Resources/SDSDHC/7CharsTail.bin deleted file mode 100644 index 2aa8595..0000000 Binary files a/ForwardMii-Plugin/Resources/SDSDHC/7CharsTail.bin and /dev/null differ diff --git a/ForwardMii-Plugin/Resources/SDSDHC/8CharsTail.bin b/ForwardMii-Plugin/Resources/SDSDHC/8CharsTail.bin deleted file mode 100644 index 9b67ecf..0000000 Binary files a/ForwardMii-Plugin/Resources/SDSDHC/8CharsTail.bin and /dev/null differ diff --git a/ForwardMii-Plugin/Resources/SDSDHC/9CharsTail.bin b/ForwardMii-Plugin/Resources/SDSDHC/9CharsTail.bin deleted file mode 100644 index f04c671..0000000 Binary files a/ForwardMii-Plugin/Resources/SDSDHC/9CharsTail.bin and /dev/null differ diff --git a/MPlayer_CE_Long.wad b/MPlayer_CE_Long.wad new file mode 100644 index 0000000..22c1c01 Binary files /dev/null and b/MPlayer_CE_Long.wad differ diff --git a/MPlayer_CE_Short.wad b/MPlayer_CE_Short.wad new file mode 100644 index 0000000..561a60b Binary files /dev/null and b/MPlayer_CE_Short.wad differ diff --git a/Snes9xGX.wad b/Snes9xGX.wad new file mode 100644 index 0000000..fee49c3 Binary files /dev/null and b/Snes9xGX.wad differ diff --git a/StaticBase.wad b/StaticBase.wad new file mode 100644 index 0000000..060e4c5 Binary files /dev/null and b/StaticBase.wad differ diff --git a/UniiLoader.wad b/UniiLoader.wad new file mode 100644 index 0000000..b1979f8 Binary files /dev/null and b/UniiLoader.wad differ diff --git a/WADder_Base_1.wad b/WADder_Base_1.wad new file mode 100644 index 0000000..a28cc3b Binary files /dev/null and b/WADder_Base_1.wad differ diff --git a/WADder_Base_2.wad b/WADder_Base_2.wad new file mode 100644 index 0000000..833535e Binary files /dev/null and b/WADder_Base_2.wad differ diff --git a/WADder_Base_3.wad b/WADder_Base_3.wad new file mode 100644 index 0000000..ff28de5 Binary files /dev/null and b/WADder_Base_3.wad differ diff --git a/Wii64.wad b/Wii64.wad new file mode 100644 index 0000000..6a20c1a Binary files /dev/null and b/Wii64.wad differ diff --git a/WiiSX_Full.wad b/WiiSX_Full.wad new file mode 100644 index 0000000..2ad69b3 Binary files /dev/null and b/WiiSX_Full.wad differ diff --git a/WiiSX_Retro.wad b/WiiSX_Retro.wad new file mode 100644 index 0000000..c667605 Binary files /dev/null and b/WiiSX_Retro.wad differ