CustomizeMii 3.0
git-svn-id: svn://localhost/Users/andi/Downloads/code/trunk@34 eddbe33b-e435-4246-ac25-f5eb65f9a13c
This commit is contained in:
parent
c6c40b6e72
commit
153acfac45
@ -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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
//These classes are based on bns.py (by megazig) 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
|
||||
/// <summary>
|
||||
/// 0x00 (0) = No Loop, 0x01 (1) = Loop
|
||||
/// </summary>
|
||||
public byte HasLoop { get { return this.bnsInfo.HasLoop; } set { this.bnsInfo.HasLoop = value; } }
|
||||
/// <summary>
|
||||
/// The start sample of the Loop
|
||||
/// </summary>
|
||||
public UInt32 LoopStart { get { return this.bnsInfo.LoopStart; } set { this.bnsInfo.LoopStart = value; } }
|
||||
/// <summary>
|
||||
/// The total number of samples in this file
|
||||
/// </summary>
|
||||
public UInt32 TotalSampleCount { get { return this.bnsInfo.LoopEnd; } set { this.bnsInfo.LoopEnd = value; } }
|
||||
/// <summary>
|
||||
/// 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()!
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the progress of the conversion
|
||||
/// </summary>
|
||||
public event EventHandler<System.ComponentModel.ProgressChangedEventArgs> ProgressChanged;
|
||||
|
||||
/// <summary>
|
||||
/// Converts the Wave file to BNS
|
||||
/// </summary>
|
||||
public void Convert()
|
||||
{
|
||||
Convert(waveFile, loopFromWave);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the BNS file as a Byte Array. If not already converted, it will be done first.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public byte[] ToByteArray()
|
||||
{
|
||||
return ToMemoryStream().ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the BNS file as a Memory Stream. If not already converted, it will be done first.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Saves the BNS file to the given path. If not already converted, it will be done first.
|
||||
/// </summary>
|
||||
/// <param name="destionationFile"></param>
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the Loop to the given Start Sample. Be sure that you call Convert() first!
|
||||
/// </summary>
|
||||
/// <param name="loopStartSample"></param>
|
||||
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<int> soundDataLeft = new List<int>();
|
||||
List<int> soundDataRight = new List<int>();
|
||||
|
||||
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<System.ComponentModel.ProgressChangedEventArgs> progressChanged = ProgressChanged;
|
||||
if (progressChanged != null)
|
||||
{
|
||||
progressChanged(new object(), new System.ComponentModel.ProgressChangedEventArgs(progressPercentage, new object()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -55,6 +55,7 @@
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<UseVSHostingProcess>true</UseVSHostingProcess>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
|
||||
<OutputPath>bin\x86\Release\</OutputPath>
|
||||
@ -65,13 +66,9 @@
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="CustomizeMiiInstaller, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<Reference Include="libWiiSharp, Version=0.1.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\CustomizeMiiInstaller\bin\Release\CustomizeMiiInstaller.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ForwardMii, Version=1.2.0.0, Culture=neutral, processorArchitecture=x86">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\ForwardMii\bin\x86\Release\ForwardMii.dll</HintPath>
|
||||
<HintPath>.\libWiiSharp.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Data" />
|
||||
@ -79,7 +76,6 @@
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="BNS.cs" />
|
||||
<Compile Include="CustomizeMii_BackgroundWorkers.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
@ -153,8 +149,8 @@
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||
</None>
|
||||
<EmbeddedResource Include="Resources\comex.app" />
|
||||
<EmbeddedResource Include="Resources\Waninkoko.app" />
|
||||
<None Include="Resources\comex.app" />
|
||||
<None Include="Resources\Waninkoko.app" />
|
||||
<EmbeddedResource Include="CustomizeMii_Preview.resx">
|
||||
<DependentUpon>CustomizeMii_Preview.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
@ -170,8 +166,6 @@
|
||||
<Compile Include="CustomizeMii_Preview.designer.cs">
|
||||
<DependentUpon>CustomizeMii_Preview.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Wave.cs" />
|
||||
<Compile Include="Wii.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="License.txt" />
|
||||
@ -182,6 +176,7 @@
|
||||
<None Include="Resources\btnCreate.png" />
|
||||
<None Include="Resources\CustomizeMii.ico" />
|
||||
<None Include="Resources\Instructions.rtf" />
|
||||
<None Include="Resources\WaninkokoLeathl.app" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
|
||||
@ -210,6 +205,16 @@
|
||||
<Install>false</Install>
|
||||
</BootstrapperPackage>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\CustomizeMiiInstaller\CustomizeMiiInstaller.csproj">
|
||||
<Project>{475F3ADF-B529-449F-89DA-BA5E8BE15DD5}</Project>
|
||||
<Name>CustomizeMiiInstaller</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\ForwardMii\ForwardMii.csproj">
|
||||
<Project>{20CB2CA7-6767-4758-97FA-97395F47CD6B}</Project>
|
||||
<Name>ForwardMii</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
|
@ -14,4 +14,8 @@
|
||||
<FallbackCulture>de-DE</FallbackCulture>
|
||||
<VerifyUploadedFiles>false</VerifyUploadedFiles>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
|
||||
<StartArguments>
|
||||
</StartArguments>
|
||||
</PropertyGroup>
|
||||
</Project>
|
File diff suppressed because it is too large
Load Diff
@ -19,8 +19,8 @@ using System;
|
||||
using System.IO;
|
||||
using System.Windows.Forms;
|
||||
using System.ComponentModel;
|
||||
using WaveFile;
|
||||
using System.Media;
|
||||
using libWiiSharp;
|
||||
|
||||
namespace CustomizeMii
|
||||
{
|
||||
@ -40,6 +40,7 @@ namespace CustomizeMii
|
||||
private int sampleCount;
|
||||
private SoundPlayer sPlayer;
|
||||
private bool mp3LengthKnown = false;
|
||||
private byte[] sourceSound = new byte[0];
|
||||
|
||||
public string AudioFile { get { return tbAudioFile.Text; } }
|
||||
public bool LoopNone { get { return rbNone.Checked; } }
|
||||
@ -47,6 +48,7 @@ namespace CustomizeMii
|
||||
public bool LoopManually { get { return rbEnterManually.Checked; } }
|
||||
public int LoopStartSample { get { return loopStartSample; } }
|
||||
public int ChannelCount { get { return channelCount; } }
|
||||
public byte[] SourceSound { get { return sourceSound; } set { sourceSound = value; } }
|
||||
|
||||
public CustomizeMii_BnsConvert(bool lameExists)
|
||||
{
|
||||
@ -60,17 +62,15 @@ namespace CustomizeMii
|
||||
this.Size = new System.Drawing.Size(btnCancel.Location.X + btnCancel.Size.Width + 15, this.Size.Height);
|
||||
|
||||
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')
|
||||
if (sourceSound[0] == 'R' && sourceSound[1] == 'I' && sourceSound[2] == 'F' && sourceSound[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')
|
||||
else if (sourceSound[0] == 'L' && sourceSound[1] == 'Z' && sourceSound[2] == '7' && sourceSound[3] == '7')
|
||||
if (sourceSound[9] == 'R' && sourceSound[10] == 'I' && sourceSound[11] == 'F' && sourceSound[12] == 'F')
|
||||
{ cbSourceSound.Enabled = true; }
|
||||
}
|
||||
|
||||
@ -133,16 +133,8 @@ namespace CustomizeMii
|
||||
{
|
||||
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);
|
||||
if (Lz77.IsLz77Compressed(sourceSound))
|
||||
{ Lz77 l = new Lz77(); sourceSound = l.Decompress(sourceSound); }
|
||||
|
||||
foreach (Label thisLabel in gbWaveInfo.Controls)
|
||||
if (thisLabel.Name.ToLower().Contains("value"))
|
||||
@ -151,7 +143,7 @@ namespace CustomizeMii
|
||||
thisLabel.Text = "Gathering";
|
||||
}
|
||||
|
||||
bwGatherInfo.RunWorkerAsync(audio);
|
||||
bwGatherInfo.RunWorkerAsync(sourceSound);
|
||||
|
||||
//this.Size = new System.Drawing.Size(510, 220);
|
||||
this.Size = new System.Drawing.Size(gbWaveInfo.Location.X + gbWaveInfo.Size.Width + 15, this.Size.Height);
|
||||
@ -258,15 +250,6 @@ namespace CustomizeMii
|
||||
|
||||
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
|
||||
{
|
||||
@ -407,14 +390,7 @@ namespace CustomizeMii
|
||||
Wave wave;
|
||||
if (cbSourceSound.Checked)
|
||||
{
|
||||
using (FileStream fs = new FileStream(CustomizeMii_Main.TempUnpackPath + "00000000.app_OUT\\meta\\sound.bin", FileMode.Open))
|
||||
{
|
||||
byte[] audio = new byte[fs.Length - 32];
|
||||
fs.Seek(32, SeekOrigin.Begin);
|
||||
fs.Read(audio, 0, audio.Length);
|
||||
|
||||
wave = new Wave(audio);
|
||||
}
|
||||
wave = new Wave(sourceSound);
|
||||
}
|
||||
else wave = new Wave(tbAudioFile.Text);
|
||||
|
||||
|
@ -93,6 +93,7 @@ namespace CustomizeMii
|
||||
this.tb1.Size = new System.Drawing.Size(311, 20);
|
||||
this.tb1.TabIndex = 1;
|
||||
this.tb1.Text = "SD:/apps/example/boot.dol";
|
||||
this.tb1.TextChanged += new System.EventHandler(this.tb_TextChanged);
|
||||
//
|
||||
// cbImage43
|
||||
//
|
||||
@ -124,6 +125,7 @@ namespace CustomizeMii
|
||||
this.tbImage43.Enabled = false;
|
||||
this.tbImage43.Location = new System.Drawing.Point(94, 280);
|
||||
this.tbImage43.Name = "tbImage43";
|
||||
this.tbImage43.ReadOnly = true;
|
||||
this.tbImage43.Size = new System.Drawing.Size(171, 20);
|
||||
this.tbImage43.TabIndex = 4;
|
||||
//
|
||||
@ -133,6 +135,7 @@ namespace CustomizeMii
|
||||
this.tbImage169.Enabled = false;
|
||||
this.tbImage169.Location = new System.Drawing.Point(94, 309);
|
||||
this.tbImage169.Name = "tbImage169";
|
||||
this.tbImage169.ReadOnly = true;
|
||||
this.tbImage169.Size = new System.Drawing.Size(171, 20);
|
||||
this.tbImage169.TabIndex = 5;
|
||||
//
|
||||
@ -212,6 +215,7 @@ namespace CustomizeMii
|
||||
this.tb2.Size = new System.Drawing.Size(311, 20);
|
||||
this.tb2.TabIndex = 1;
|
||||
this.tb2.Text = "SD:/apps/example/boot.elf";
|
||||
this.tb2.TextChanged += new System.EventHandler(this.tb_TextChanged);
|
||||
//
|
||||
// tb3
|
||||
//
|
||||
@ -220,6 +224,7 @@ namespace CustomizeMii
|
||||
this.tb3.Size = new System.Drawing.Size(311, 20);
|
||||
this.tb3.TabIndex = 1;
|
||||
this.tb3.Text = "USB:/apps/example/boot.dol";
|
||||
this.tb3.TextChanged += new System.EventHandler(this.tb_TextChanged);
|
||||
//
|
||||
// tb4
|
||||
//
|
||||
@ -228,6 +233,7 @@ namespace CustomizeMii
|
||||
this.tb4.Size = new System.Drawing.Size(311, 20);
|
||||
this.tb4.TabIndex = 1;
|
||||
this.tb4.Text = "USB:/apps/example/boot.elf";
|
||||
this.tb4.TextChanged += new System.EventHandler(this.tb_TextChanged);
|
||||
//
|
||||
// tabPaths
|
||||
//
|
||||
@ -288,6 +294,7 @@ namespace CustomizeMii
|
||||
this.tb5.Name = "tb5";
|
||||
this.tb5.Size = new System.Drawing.Size(311, 20);
|
||||
this.tb5.TabIndex = 4;
|
||||
this.tb5.TextChanged += new System.EventHandler(this.tb_TextChanged);
|
||||
//
|
||||
// tb6
|
||||
//
|
||||
@ -296,6 +303,7 @@ namespace CustomizeMii
|
||||
this.tb6.Name = "tb6";
|
||||
this.tb6.Size = new System.Drawing.Size(311, 20);
|
||||
this.tb6.TabIndex = 5;
|
||||
this.tb6.TextChanged += new System.EventHandler(this.tb_TextChanged);
|
||||
//
|
||||
// tb7
|
||||
//
|
||||
@ -304,6 +312,7 @@ namespace CustomizeMii
|
||||
this.tb7.Name = "tb7";
|
||||
this.tb7.Size = new System.Drawing.Size(311, 20);
|
||||
this.tb7.TabIndex = 2;
|
||||
this.tb7.TextChanged += new System.EventHandler(this.tb_TextChanged);
|
||||
//
|
||||
// tb8
|
||||
//
|
||||
@ -312,6 +321,7 @@ namespace CustomizeMii
|
||||
this.tb8.Name = "tb8";
|
||||
this.tb8.Size = new System.Drawing.Size(311, 20);
|
||||
this.tb8.TabIndex = 3;
|
||||
this.tb8.TextChanged += new System.EventHandler(this.tb_TextChanged);
|
||||
//
|
||||
// tabOptional2
|
||||
//
|
||||
@ -346,6 +356,7 @@ namespace CustomizeMii
|
||||
this.tb9.Name = "tb9";
|
||||
this.tb9.Size = new System.Drawing.Size(311, 20);
|
||||
this.tb9.TabIndex = 9;
|
||||
this.tb9.TextChanged += new System.EventHandler(this.tb_TextChanged);
|
||||
//
|
||||
// tb10
|
||||
//
|
||||
@ -354,6 +365,7 @@ namespace CustomizeMii
|
||||
this.tb10.Name = "tb10";
|
||||
this.tb10.Size = new System.Drawing.Size(311, 20);
|
||||
this.tb10.TabIndex = 10;
|
||||
this.tb10.TextChanged += new System.EventHandler(this.tb_TextChanged);
|
||||
//
|
||||
// tb11
|
||||
//
|
||||
@ -362,6 +374,7 @@ namespace CustomizeMii
|
||||
this.tb11.Name = "tb11";
|
||||
this.tb11.Size = new System.Drawing.Size(311, 20);
|
||||
this.tb11.TabIndex = 7;
|
||||
this.tb11.TextChanged += new System.EventHandler(this.tb_TextChanged);
|
||||
//
|
||||
// tb12
|
||||
//
|
||||
@ -370,6 +383,7 @@ namespace CustomizeMii
|
||||
this.tb12.Name = "tb12";
|
||||
this.tb12.Size = new System.Drawing.Size(311, 20);
|
||||
this.tb12.TabIndex = 8;
|
||||
this.tb12.TextChanged += new System.EventHandler(this.tb_TextChanged);
|
||||
//
|
||||
// tabOptional3
|
||||
//
|
||||
@ -404,6 +418,7 @@ namespace CustomizeMii
|
||||
this.tb13.Name = "tb13";
|
||||
this.tb13.Size = new System.Drawing.Size(311, 20);
|
||||
this.tb13.TabIndex = 9;
|
||||
this.tb13.TextChanged += new System.EventHandler(this.tb_TextChanged);
|
||||
//
|
||||
// tb14
|
||||
//
|
||||
@ -412,6 +427,7 @@ namespace CustomizeMii
|
||||
this.tb14.Name = "tb14";
|
||||
this.tb14.Size = new System.Drawing.Size(311, 20);
|
||||
this.tb14.TabIndex = 10;
|
||||
this.tb14.TextChanged += new System.EventHandler(this.tb_TextChanged);
|
||||
//
|
||||
// tb15
|
||||
//
|
||||
@ -420,6 +436,7 @@ namespace CustomizeMii
|
||||
this.tb15.Name = "tb15";
|
||||
this.tb15.Size = new System.Drawing.Size(311, 20);
|
||||
this.tb15.TabIndex = 7;
|
||||
this.tb15.TextChanged += new System.EventHandler(this.tb_TextChanged);
|
||||
//
|
||||
// tb16
|
||||
//
|
||||
@ -428,6 +445,7 @@ namespace CustomizeMii
|
||||
this.tb16.Name = "tb16";
|
||||
this.tb16.Size = new System.Drawing.Size(311, 20);
|
||||
this.tb16.TabIndex = 8;
|
||||
this.tb16.TextChanged += new System.EventHandler(this.tb_TextChanged);
|
||||
//
|
||||
// CustomizeMii_ComplexForwarder
|
||||
//
|
||||
|
@ -152,5 +152,29 @@ namespace CustomizeMii
|
||||
if (!cbPack3.Checked) thisTb.Text = string.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
private void tb_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
TextBox tbSender = sender as TextBox;
|
||||
|
||||
int curPos = tbSender.SelectionStart;
|
||||
|
||||
if (tbSender.Text.Contains("\\"))
|
||||
tbSender.Text = tbSender.Text.Replace("\\", "/");
|
||||
|
||||
if (tbSender.Text.Contains("sd:"))
|
||||
tbSender.Text = tbSender.Text.Replace("sd:", "SD:");
|
||||
|
||||
if (tbSender.Text.Contains("usb:"))
|
||||
tbSender.Text = tbSender.Text.Replace("usb:", "USB:");
|
||||
|
||||
if (tbSender.Text.Contains(".DOL"))
|
||||
tbSender.Text = tbSender.Text.Replace(".DOL", ".dol");
|
||||
|
||||
if (tbSender.Text.Contains(".ELF"))
|
||||
tbSender.Text = tbSender.Text.Replace(".ELF", ".elf");
|
||||
|
||||
tbSender.SelectionStart = curPos;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -20,6 +20,7 @@ using System.ComponentModel;
|
||||
using System.IO;
|
||||
using System.Windows.Forms;
|
||||
using System.Collections.Generic;
|
||||
using libWiiSharp;
|
||||
|
||||
namespace CustomizeMii
|
||||
{
|
||||
@ -42,7 +43,7 @@ namespace CustomizeMii
|
||||
|
||||
if (data.Length == 1 && data[0].ToLower().EndsWith(".wad"))
|
||||
{
|
||||
LoadChannel(data[0]);
|
||||
loadChannel(data[0]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -78,7 +79,7 @@ namespace CustomizeMii
|
||||
data[0].ToLower().EndsWith("icon.bin") ||
|
||||
data[0].ToLower().EndsWith("banner.bin")))
|
||||
{
|
||||
ReplacePart(data[0]);
|
||||
replacePart(data[0]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -101,44 +102,35 @@ namespace CustomizeMii
|
||||
{
|
||||
try
|
||||
{
|
||||
byte[] wad = Wii.Tools.LoadFileToByteArray(data[0]);
|
||||
WAD tmpWad = WAD.Load(data[0]);
|
||||
|
||||
int numContents = Wii.WadInfo.GetContentNum(wad);
|
||||
|
||||
if (numContents == 3)
|
||||
if (tmpWad.NumOfContents == 3)
|
||||
{
|
||||
int bootIndex = Wii.WadInfo.GetBootIndex(wad);
|
||||
string appFile = string.Empty;
|
||||
int appIndex = 0;
|
||||
if (tmpWad.BootIndex == 1) appIndex = 2;
|
||||
else if (tmpWad.BootIndex == 2) appIndex = 1;
|
||||
|
||||
if (bootIndex == 1)
|
||||
{ appFile = "00000002.app"; }
|
||||
else if (bootIndex == 2)
|
||||
{ appFile = "00000001.app"; }
|
||||
|
||||
if (!string.IsNullOrEmpty(appFile))
|
||||
if (appIndex > 0)
|
||||
{
|
||||
if (Directory.Exists(TempTempPath + "TempWad")) Directory.Delete(TempTempPath + "TempWad", true);
|
||||
Wii.WadUnpack.UnpackWad(data[0], TempTempPath + "TempWad");
|
||||
|
||||
File.Copy(TempTempPath + "TempWad\\" + appFile, TempDolPath, true);
|
||||
SetText(tbDol, data[0]);
|
||||
newDol = tmpWad.Contents[appIndex];
|
||||
setControlText(tbDol, data[0]);
|
||||
btnBrowseDol.Text = "Clear";
|
||||
}
|
||||
else
|
||||
ErrorBox("The DOL file couldn't be found!");
|
||||
else errorBox("The DOL file couldn't be found!");
|
||||
}
|
||||
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);
|
||||
setControlText(tbDol, string.Empty);
|
||||
btnBrowseDol.Text = "Browse...";
|
||||
errorBox(ex.Message);
|
||||
}
|
||||
}
|
||||
else if (data[0].ToLower().EndsWith(".dol"))
|
||||
{
|
||||
SetText(tbDol, data[0]);
|
||||
newDol = File.ReadAllBytes(data[0]);
|
||||
setControlText(tbDol, data[0]);
|
||||
btnBrowseDol.Text = "Clear";
|
||||
}
|
||||
}
|
||||
@ -149,7 +141,7 @@ namespace CustomizeMii
|
||||
{
|
||||
string[] data = (string[])e.Data.GetData(DataFormats.FileDrop);
|
||||
|
||||
if (File.Exists(Application.StartupPath + "\\lame.exe"))
|
||||
if (File.Exists(Application.StartupPath + Path.DirectorySeparatorChar + "lame.exe"))
|
||||
{
|
||||
if (data.Length == 1 && (data[0].ToLower().EndsWith(".wav") ||
|
||||
data[0].ToLower().EndsWith(".bns") ||
|
||||
@ -171,20 +163,17 @@ namespace CustomizeMii
|
||||
|
||||
if (data[0].ToLower().EndsWith(".mp3"))
|
||||
{
|
||||
ConvertMp3ToWave(data[0]);
|
||||
convertMp3ToWave(data[0]);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetText(tbSound, data[0]);
|
||||
|
||||
replacedSound = data[0];
|
||||
setControlText(tbSound, data[0]);
|
||||
btnBrowseSound.Text = "Clear";
|
||||
|
||||
if (!string.IsNullOrEmpty(SoundReplace))
|
||||
{
|
||||
SoundReplace = string.Empty;
|
||||
if (cmbReplace.SelectedIndex == 2) SetText(tbReplace, SoundReplace);
|
||||
if (File.Exists(TempSoundPath)) File.Delete(TempSoundPath);
|
||||
}
|
||||
newSoundBin = Headers.IMD5.AddHeader(File.ReadAllBytes(data[0]));
|
||||
|
||||
if (cmbReplace.SelectedIndex == 2) setControlText(tbReplace, string.Empty);
|
||||
}
|
||||
}
|
||||
|
||||
@ -216,14 +205,14 @@ namespace CustomizeMii
|
||||
{
|
||||
try
|
||||
{
|
||||
AddTpl(lbxBannerTpls, thisFile);
|
||||
addTpl(lbxBannerTpls, thisFile);
|
||||
}
|
||||
catch { errors.Add(thisFile); }
|
||||
}
|
||||
|
||||
if (errors.Count > 0)
|
||||
{
|
||||
ErrorBox(string.Format("These files were not added, because either they already exist or an error occured during conversion:\n\n{0}", string.Join("\n", (errors.ToArray()))));
|
||||
errorBox(string.Format("These files were not added, because either they already exist or an error occured during conversion:\n\n{0}", string.Join("\n", (errors.ToArray()))));
|
||||
}
|
||||
}
|
||||
|
||||
@ -255,14 +244,14 @@ namespace CustomizeMii
|
||||
{
|
||||
try
|
||||
{
|
||||
AddTpl(lbxIconTpls, thisFile);
|
||||
addTpl(lbxIconTpls, thisFile);
|
||||
}
|
||||
catch { errors.Add(thisFile); }
|
||||
}
|
||||
|
||||
if (errors.Count > 0)
|
||||
{
|
||||
ErrorBox(string.Format("These files were not added, because either they already exist or an error occured during conversion:\n\n{0}", string.Join("\n", (errors.ToArray()))));
|
||||
errorBox(string.Format("These files were not added, because either they already exist or an error occured during conversion:\n\n{0}", string.Join("\n", (errors.ToArray()))));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -58,6 +58,12 @@ namespace CustomizeMii
|
||||
Forwarder.Save(Destination, true);
|
||||
}
|
||||
|
||||
public byte[] ToByteArray()
|
||||
{
|
||||
GXForwarder Forwarder = new GXForwarder(image43, image169, paths);
|
||||
return Forwarder.ToByteArray();
|
||||
}
|
||||
|
||||
public void Clear()
|
||||
{
|
||||
paths[0] = "SD:/apps/example/boot.dol";
|
||||
@ -84,10 +90,7 @@ namespace CustomizeMii
|
||||
public string AppFolder { get { return thisAppFolder; } set { thisAppFolder = value; } }
|
||||
public bool ForwardToElf { get { return toElf; } set { toElf = value; } }
|
||||
|
||||
public Simple()
|
||||
{
|
||||
|
||||
}
|
||||
public Simple() { }
|
||||
|
||||
public void Save(string Destination)
|
||||
{
|
||||
@ -95,6 +98,12 @@ namespace CustomizeMii
|
||||
Forwarder.Save(Destination, true);
|
||||
}
|
||||
|
||||
public byte[] ToByteArray()
|
||||
{
|
||||
SDSDHC_Forwarder Forwarder = new SDSDHC_Forwarder(thisAppFolder, toElf);
|
||||
return Forwarder.ToByteArray();
|
||||
}
|
||||
|
||||
public void Clear()
|
||||
{
|
||||
thisAppFolder = string.Empty;
|
||||
|
11
CustomizeMii/CustomizeMii_InputBox.Designer.cs
generated
11
CustomizeMii/CustomizeMii_InputBox.Designer.cs
generated
@ -50,6 +50,7 @@ namespace CustomizeMii
|
||||
this.btnOK = new System.Windows.Forms.Button();
|
||||
this.btnExit = new System.Windows.Forms.Button();
|
||||
this.cbElf = new System.Windows.Forms.CheckBox();
|
||||
this.tbInput2 = new System.Windows.Forms.TextBox();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// tbInput
|
||||
@ -106,6 +107,14 @@ namespace CustomizeMii
|
||||
this.cbElf.UseVisualStyleBackColor = true;
|
||||
this.cbElf.Visible = false;
|
||||
//
|
||||
// tbInput2
|
||||
//
|
||||
this.tbInput2.Location = new System.Drawing.Point(121, 34);
|
||||
this.tbInput2.Name = "tbInput2";
|
||||
this.tbInput2.Size = new System.Drawing.Size(108, 20);
|
||||
this.tbInput2.TabIndex = 1;
|
||||
this.tbInput2.Visible = false;
|
||||
//
|
||||
// CustomizeMii_InputBox
|
||||
//
|
||||
this.AcceptButton = this.btnOK;
|
||||
@ -114,6 +123,7 @@ namespace CustomizeMii
|
||||
this.BackColor = System.Drawing.SystemColors.Control;
|
||||
this.CancelButton = this.btnExit;
|
||||
this.ClientSize = new System.Drawing.Size(238, 92);
|
||||
this.Controls.Add(this.tbInput2);
|
||||
this.Controls.Add(this.cbElf);
|
||||
this.Controls.Add(this.btnExit);
|
||||
this.Controls.Add(this.btnOK);
|
||||
@ -136,5 +146,6 @@ namespace CustomizeMii
|
||||
public System.Windows.Forms.TextBox tbInput;
|
||||
public System.Windows.Forms.Button btnExit;
|
||||
public System.Windows.Forms.CheckBox cbElf;
|
||||
public System.Windows.Forms.TextBox tbInput2;
|
||||
}
|
||||
}
|
@ -16,22 +16,18 @@
|
||||
*/
|
||||
|
||||
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
|
||||
{
|
||||
//Wow, need to change this whole thing, but too lazy ~~
|
||||
|
||||
public bool CommonKeyMode = true;
|
||||
public string Input
|
||||
{
|
||||
get { return tbInput.Text; }
|
||||
}
|
||||
public string Input { get { return tbInput.Text; } set { tbInput.Text = value; } }
|
||||
public string Description { get { return lbInfo.Text; } set { lbInfo.Text = value; } }
|
||||
public string Input2 { get { return tbInput2.Text; } set { tbInput2.Text = value; } }
|
||||
|
||||
public CustomizeMii_InputBox()
|
||||
{
|
||||
@ -76,7 +72,7 @@ namespace CustomizeMii
|
||||
}
|
||||
else
|
||||
{
|
||||
if (tbInput.Text.Length > 2)
|
||||
if (tbInput.Text.Length > 0)
|
||||
{
|
||||
this.DialogResult = DialogResult.OK;
|
||||
this.Close();
|
||||
|
80
CustomizeMii/CustomizeMii_Main.Designer.cs
generated
80
CustomizeMii/CustomizeMii_Main.Designer.cs
generated
@ -86,7 +86,7 @@ namespace CustomizeMii
|
||||
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.cbSecurityChecksOff = 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();
|
||||
@ -147,13 +147,15 @@ namespace CustomizeMii
|
||||
this.tabInstructions = new System.Windows.Forms.TabPage();
|
||||
this.rtbInstructions = new System.Windows.Forms.RichTextBox();
|
||||
this.tabCredits = new System.Windows.Forms.TabPage();
|
||||
this.lbLicense = new System.Windows.Forms.Label();
|
||||
this.lbCreditInstaller = new System.Windows.Forms.Label();
|
||||
this.panCredits = new System.Windows.Forms.Panel();
|
||||
this.lbCreditThanks = new System.Windows.Forms.Label();
|
||||
this.llbUpdateAvailable = new System.Windows.Forms.LinkLabel();
|
||||
this.llbSite = new System.Windows.Forms.LinkLabel();
|
||||
this.lbCreditVersion = new System.Windows.Forms.Label();
|
||||
this.lbCreditInfo = new System.Windows.Forms.Label();
|
||||
this.cmTpls = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.cmRename = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.ssMain = new System.Windows.Forms.StatusStrip();
|
||||
this.lbStatus = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.lbStatusText = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
@ -181,6 +183,7 @@ namespace CustomizeMii
|
||||
this.cmDol = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.cmLoadDol = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.cmDolFromSource = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.cmResize = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.tabControl.SuspendLayout();
|
||||
this.tabSource.SuspendLayout();
|
||||
this.tabTitle.SuspendLayout();
|
||||
@ -192,6 +195,7 @@ namespace CustomizeMii
|
||||
this.tabInstructions.SuspendLayout();
|
||||
this.tabCredits.SuspendLayout();
|
||||
this.panCredits.SuspendLayout();
|
||||
this.cmTpls.SuspendLayout();
|
||||
this.ssMain.SuspendLayout();
|
||||
this.cmForwarder.SuspendLayout();
|
||||
this.cmOptionsExtract.SuspendLayout();
|
||||
@ -595,7 +599,7 @@ namespace CustomizeMii
|
||||
//
|
||||
this.tabOptions.Controls.Add(this.btnOptionsExtract);
|
||||
this.tabOptions.Controls.Add(this.btnForwarder);
|
||||
this.tabOptions.Controls.Add(this.cbFailureChecks);
|
||||
this.tabOptions.Controls.Add(this.cbSecurityChecksOff);
|
||||
this.tabOptions.Controls.Add(this.cbLz77);
|
||||
this.tabOptions.Controls.Add(this.lbOptionsOptional);
|
||||
this.tabOptions.Controls.Add(this.btnBrowseSound);
|
||||
@ -638,16 +642,16 @@ namespace CustomizeMii
|
||||
this.btnForwarder.UseVisualStyleBackColor = true;
|
||||
this.btnForwarder.Click += new System.EventHandler(this.btnForwarder_Click);
|
||||
//
|
||||
// cbFailureChecks
|
||||
// cbSecurityChecksOff
|
||||
//
|
||||
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;
|
||||
this.cbSecurityChecksOff.AutoSize = true;
|
||||
this.cbSecurityChecksOff.Location = new System.Drawing.Point(263, 180);
|
||||
this.cbSecurityChecksOff.Name = "cbSecurityChecksOff";
|
||||
this.cbSecurityChecksOff.Size = new System.Drawing.Size(172, 17);
|
||||
this.cbSecurityChecksOff.TabIndex = 12;
|
||||
this.cbSecurityChecksOff.Tag = "Independent";
|
||||
this.cbSecurityChecksOff.Text = "/!\\ Turn off security checks /!\\";
|
||||
this.cbSecurityChecksOff.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// cbLz77
|
||||
//
|
||||
@ -922,6 +926,7 @@ namespace CustomizeMii
|
||||
this.lbxBannerTpls.Size = new System.Drawing.Size(343, 173);
|
||||
this.lbxBannerTpls.Sorted = true;
|
||||
this.lbxBannerTpls.TabIndex = 0;
|
||||
this.lbxBannerTpls.MouseUp += new System.Windows.Forms.MouseEventHandler(this.lbxBannerTpls_MouseUp);
|
||||
this.lbxBannerTpls.SelectedIndexChanged += new System.EventHandler(this.lbxBannerTpls_SelectedIndexChanged);
|
||||
this.lbxBannerTpls.DragDrop += new System.Windows.Forms.DragEventHandler(this.lbxBannerTpls_DragDrop);
|
||||
this.lbxBannerTpls.DragEnter += new System.Windows.Forms.DragEventHandler(this.lbxBannerTpls_DragEnter);
|
||||
@ -1057,6 +1062,7 @@ namespace CustomizeMii
|
||||
this.lbxIconTpls.Size = new System.Drawing.Size(343, 173);
|
||||
this.lbxIconTpls.Sorted = true;
|
||||
this.lbxIconTpls.TabIndex = 6;
|
||||
this.lbxIconTpls.MouseUp += new System.Windows.Forms.MouseEventHandler(this.lbxIconTpls_MouseUp);
|
||||
this.lbxIconTpls.SelectedIndexChanged += new System.EventHandler(this.lbxIconTpls_SelectedIndexChanged);
|
||||
this.lbxIconTpls.DragDrop += new System.Windows.Forms.DragEventHandler(this.lbxIconTpls_DragDrop);
|
||||
this.lbxIconTpls.DragEnter += new System.Windows.Forms.DragEventHandler(this.lbxIconTpls_DragEnter);
|
||||
@ -1308,12 +1314,12 @@ namespace CustomizeMii
|
||||
//
|
||||
// tabCredits
|
||||
//
|
||||
this.tabCredits.Controls.Add(this.lbLicense);
|
||||
this.tabCredits.Controls.Add(this.lbCreditInstaller);
|
||||
this.tabCredits.Controls.Add(this.panCredits);
|
||||
this.tabCredits.Controls.Add(this.llbUpdateAvailable);
|
||||
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);
|
||||
@ -1322,6 +1328,16 @@ namespace CustomizeMii
|
||||
this.tabCredits.Text = "About";
|
||||
this.tabCredits.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// lbLicense
|
||||
//
|
||||
this.lbLicense.Location = new System.Drawing.Point(0, 92);
|
||||
this.lbLicense.Name = "lbLicense";
|
||||
this.lbLicense.Size = new System.Drawing.Size(443, 30);
|
||||
this.lbLicense.TabIndex = 8;
|
||||
this.lbLicense.Text = "CustomizeMii is licensed under the terms of the GNU General Public License v3,\r\ns" +
|
||||
"ee License.txt for more information!";
|
||||
this.lbLicense.TextAlign = System.Drawing.ContentAlignment.TopCenter;
|
||||
//
|
||||
// lbCreditInstaller
|
||||
//
|
||||
this.lbCreditInstaller.Location = new System.Drawing.Point(0, 28);
|
||||
@ -1335,7 +1351,7 @@ namespace CustomizeMii
|
||||
//
|
||||
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.Location = new System.Drawing.Point(0, 125);
|
||||
this.panCredits.Name = "panCredits";
|
||||
this.panCredits.Size = new System.Drawing.Size(443, 79);
|
||||
this.panCredits.TabIndex = 5;
|
||||
@ -1383,15 +1399,20 @@ namespace CustomizeMii
|
||||
this.lbCreditVersion.Text = "CustomizeMii Version X by Leathl";
|
||||
this.lbCreditVersion.TextAlign = System.Drawing.ContentAlignment.TopCenter;
|
||||
//
|
||||
// lbCreditInfo
|
||||
// cmTpls
|
||||
//
|
||||
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;
|
||||
this.cmTpls.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.cmRename,
|
||||
this.cmResize});
|
||||
this.cmTpls.Name = "cmTpls";
|
||||
this.cmTpls.Size = new System.Drawing.Size(153, 70);
|
||||
//
|
||||
// cmRename
|
||||
//
|
||||
this.cmRename.Name = "cmRename";
|
||||
this.cmRename.Size = new System.Drawing.Size(117, 22);
|
||||
this.cmRename.Text = "Rename";
|
||||
this.cmRename.Click += new System.EventHandler(this.cmRename_Click);
|
||||
//
|
||||
// ssMain
|
||||
//
|
||||
@ -1603,6 +1624,13 @@ namespace CustomizeMii
|
||||
this.cmDolFromSource.Text = "Take From Source WAD";
|
||||
this.cmDolFromSource.Click += new System.EventHandler(this.cmDolFromSource_Click);
|
||||
//
|
||||
// cmResize
|
||||
//
|
||||
this.cmResize.Name = "cmResize";
|
||||
this.cmResize.Size = new System.Drawing.Size(152, 22);
|
||||
this.cmResize.Text = "Resize";
|
||||
this.cmResize.Click += new System.EventHandler(this.cmResize_Click);
|
||||
//
|
||||
// CustomizeMii_Main
|
||||
//
|
||||
this.AllowDrop = true;
|
||||
@ -1639,6 +1667,7 @@ namespace CustomizeMii
|
||||
this.tabInstructions.ResumeLayout(false);
|
||||
this.tabCredits.ResumeLayout(false);
|
||||
this.panCredits.ResumeLayout(false);
|
||||
this.cmTpls.ResumeLayout(false);
|
||||
this.ssMain.ResumeLayout(false);
|
||||
this.ssMain.PerformLayout();
|
||||
this.cmForwarder.ResumeLayout(false);
|
||||
@ -1707,7 +1736,6 @@ namespace CustomizeMii
|
||||
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;
|
||||
@ -1749,7 +1777,7 @@ namespace CustomizeMii
|
||||
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.CheckBox cbSecurityChecksOff;
|
||||
private System.Windows.Forms.Button btnForwarder;
|
||||
private System.Windows.Forms.ContextMenuStrip cmForwarder;
|
||||
private System.Windows.Forms.ToolStripMenuItem cmSimpleForwarder;
|
||||
@ -1786,6 +1814,10 @@ namespace CustomizeMii
|
||||
private System.Windows.Forms.Label lbKorean;
|
||||
private System.Windows.Forms.LinkLabel llbBannerMultiReplace;
|
||||
private System.Windows.Forms.LinkLabel llbIconMultiReplace;
|
||||
private System.Windows.Forms.Label lbLicense;
|
||||
private System.Windows.Forms.ContextMenuStrip cmTpls;
|
||||
private System.Windows.Forms.ToolStripMenuItem cmRename;
|
||||
private System.Windows.Forms.ToolStripMenuItem cmResize;
|
||||
}
|
||||
}
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -127,8 +127,12 @@ SquidMan for Zetsubou
|
||||
Andre Perrot for gbalzss
|
||||
comex and Waninkoko for both their NAND Loader
|
||||
djdynamite123 for his forwarder base files
|
||||
The USB Loader GX Team for their forwarder source</value>
|
||||
The USB Loader GX Team for their forwarder source
|
||||
wilsoff for helping me debugging 3.0</value>
|
||||
</data>
|
||||
<metadata name="cmTpls.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>566, 7</value>
|
||||
</metadata>
|
||||
<metadata name="ssMain.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>16, 7</value>
|
||||
</metadata>
|
||||
|
123
CustomizeMii/CustomizeMii_Preview.Designer.cs
generated
123
CustomizeMii/CustomizeMii_Preview.Designer.cs
generated
@ -47,6 +47,7 @@ namespace CustomizeMii
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
this.Panel = new System.Windows.Forms.Panel();
|
||||
this.cbCheckerBoard = new System.Windows.Forms.CheckBox();
|
||||
this.btnReplace = new System.Windows.Forms.Button();
|
||||
this.btnClose = new System.Windows.Forms.Button();
|
||||
this.cbIcon = new System.Windows.Forms.ComboBox();
|
||||
@ -67,6 +68,15 @@ namespace CustomizeMii
|
||||
this.cmIA4 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.cmI8 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.cmI4 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.cmChangeFormat = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.cmToRGBA8 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.cmToRGB565 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.cmToRGB5A3 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.cmToIA8 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.cmToIA4 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.cmToI8 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.cmToI4 = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.lbNoPreview = new System.Windows.Forms.Label();
|
||||
this.Panel.SuspendLayout();
|
||||
this.panel1.SuspendLayout();
|
||||
@ -76,6 +86,7 @@ namespace CustomizeMii
|
||||
//
|
||||
// Panel
|
||||
//
|
||||
this.Panel.Controls.Add(this.cbCheckerBoard);
|
||||
this.Panel.Controls.Add(this.btnReplace);
|
||||
this.Panel.Controls.Add(this.btnClose);
|
||||
this.Panel.Controls.Add(this.cbIcon);
|
||||
@ -88,10 +99,24 @@ namespace CustomizeMii
|
||||
this.Panel.Size = new System.Drawing.Size(817, 28);
|
||||
this.Panel.TabIndex = 0;
|
||||
//
|
||||
// cbCheckerBoard
|
||||
//
|
||||
this.cbCheckerBoard.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
|
||||
this.cbCheckerBoard.AutoSize = true;
|
||||
this.cbCheckerBoard.Checked = true;
|
||||
this.cbCheckerBoard.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.cbCheckerBoard.Location = new System.Drawing.Point(390, 7);
|
||||
this.cbCheckerBoard.Name = "cbCheckerBoard";
|
||||
this.cbCheckerBoard.Size = new System.Drawing.Size(93, 17);
|
||||
this.cbCheckerBoard.TabIndex = 4;
|
||||
this.cbCheckerBoard.Text = "Checkerboard";
|
||||
this.cbCheckerBoard.UseVisualStyleBackColor = true;
|
||||
this.cbCheckerBoard.CheckedChanged += new System.EventHandler(this.cbCheckerBoard_CheckedChanged);
|
||||
//
|
||||
// btnReplace
|
||||
//
|
||||
this.btnReplace.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnReplace.Location = new System.Drawing.Point(512, 4);
|
||||
this.btnReplace.Location = new System.Drawing.Point(513, 4);
|
||||
this.btnReplace.Name = "btnReplace";
|
||||
this.btnReplace.Size = new System.Drawing.Size(137, 21);
|
||||
this.btnReplace.TabIndex = 3;
|
||||
@ -116,7 +141,7 @@ namespace CustomizeMii
|
||||
this.cbIcon.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.cbIcon.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||
this.cbIcon.FormattingEnabled = true;
|
||||
this.cbIcon.Location = new System.Drawing.Point(239, 4);
|
||||
this.cbIcon.Location = new System.Drawing.Point(234, 4);
|
||||
this.cbIcon.MaxDropDownItems = 20;
|
||||
this.cbIcon.Name = "cbIcon";
|
||||
this.cbIcon.Size = new System.Drawing.Size(121, 21);
|
||||
@ -127,7 +152,7 @@ namespace CustomizeMii
|
||||
//
|
||||
this.lbIcon.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.lbIcon.AutoSize = true;
|
||||
this.lbIcon.Location = new System.Drawing.Point(203, 7);
|
||||
this.lbIcon.Location = new System.Drawing.Point(198, 7);
|
||||
this.lbIcon.Name = "lbIcon";
|
||||
this.lbIcon.Size = new System.Drawing.Size(31, 13);
|
||||
this.lbIcon.TabIndex = 2;
|
||||
@ -208,6 +233,7 @@ namespace CustomizeMii
|
||||
//
|
||||
// pbPic
|
||||
//
|
||||
this.pbPic.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
|
||||
this.pbPic.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.pbPic.Location = new System.Drawing.Point(0, 22);
|
||||
this.pbPic.Name = "pbPic";
|
||||
@ -225,9 +251,11 @@ namespace CustomizeMii
|
||||
this.cmIA8,
|
||||
this.cmIA4,
|
||||
this.cmI8,
|
||||
this.cmI4});
|
||||
this.cmI4,
|
||||
this.toolStripSeparator1,
|
||||
this.cmChangeFormat});
|
||||
this.cmFormat.Name = "cmFormat";
|
||||
this.cmFormat.Size = new System.Drawing.Size(234, 158);
|
||||
this.cmFormat.Size = new System.Drawing.Size(234, 186);
|
||||
//
|
||||
// cmRGBA8
|
||||
//
|
||||
@ -285,6 +313,81 @@ namespace CustomizeMii
|
||||
this.cmI4.Text = "As I4 (B/W)";
|
||||
this.cmI4.Click += new System.EventHandler(this.cmFormat_Click);
|
||||
//
|
||||
// toolStripSeparator1
|
||||
//
|
||||
this.toolStripSeparator1.Name = "toolStripSeparator1";
|
||||
this.toolStripSeparator1.Size = new System.Drawing.Size(230, 6);
|
||||
//
|
||||
// cmChangeFormat
|
||||
//
|
||||
this.cmChangeFormat.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.cmToRGBA8,
|
||||
this.cmToRGB565,
|
||||
this.cmToRGB5A3,
|
||||
this.cmToIA8,
|
||||
this.cmToIA4,
|
||||
this.cmToI8,
|
||||
this.cmToI4});
|
||||
this.cmChangeFormat.Name = "cmChangeFormat";
|
||||
this.cmChangeFormat.Size = new System.Drawing.Size(233, 22);
|
||||
this.cmChangeFormat.Text = "Change Format";
|
||||
//
|
||||
// cmToRGBA8
|
||||
//
|
||||
this.cmToRGBA8.Name = "cmToRGBA8";
|
||||
this.cmToRGBA8.Size = new System.Drawing.Size(234, 22);
|
||||
this.cmToRGBA8.Tag = "rgba8";
|
||||
this.cmToRGBA8.Text = "To RGBA8 (High Quality)";
|
||||
this.cmToRGBA8.Click += new System.EventHandler(this.cmChangeFormat_Click);
|
||||
//
|
||||
// cmToRGB565
|
||||
//
|
||||
this.cmToRGB565.Name = "cmToRGB565";
|
||||
this.cmToRGB565.Size = new System.Drawing.Size(234, 22);
|
||||
this.cmToRGB565.Tag = "rgb565";
|
||||
this.cmToRGB565.Text = "To RGB565 (Moderate Quality)";
|
||||
this.cmToRGB565.Click += new System.EventHandler(this.cmChangeFormat_Click);
|
||||
//
|
||||
// cmToRGB5A3
|
||||
//
|
||||
this.cmToRGB5A3.Name = "cmToRGB5A3";
|
||||
this.cmToRGB5A3.Size = new System.Drawing.Size(234, 22);
|
||||
this.cmToRGB5A3.Tag = "rgb5a3";
|
||||
this.cmToRGB5A3.Text = "To RGB5A3 (Low Quality)";
|
||||
this.cmToRGB5A3.Click += new System.EventHandler(this.cmChangeFormat_Click);
|
||||
//
|
||||
// cmToIA8
|
||||
//
|
||||
this.cmToIA8.Name = "cmToIA8";
|
||||
this.cmToIA8.Size = new System.Drawing.Size(234, 22);
|
||||
this.cmToIA8.Tag = "ia8";
|
||||
this.cmToIA8.Text = "To IA8 (B/W with Alpha)";
|
||||
this.cmToIA8.Click += new System.EventHandler(this.cmChangeFormat_Click);
|
||||
//
|
||||
// cmToIA4
|
||||
//
|
||||
this.cmToIA4.Name = "cmToIA4";
|
||||
this.cmToIA4.Size = new System.Drawing.Size(234, 22);
|
||||
this.cmToIA4.Tag = "ia4";
|
||||
this.cmToIA4.Text = "To IA4 (B/W with Alpha)";
|
||||
this.cmToIA4.Click += new System.EventHandler(this.cmChangeFormat_Click);
|
||||
//
|
||||
// cmToI8
|
||||
//
|
||||
this.cmToI8.Name = "cmToI8";
|
||||
this.cmToI8.Size = new System.Drawing.Size(234, 22);
|
||||
this.cmToI8.Tag = "i8";
|
||||
this.cmToI8.Text = "To I8 (B/W)";
|
||||
this.cmToI8.Click += new System.EventHandler(this.cmChangeFormat_Click);
|
||||
//
|
||||
// cmToI4
|
||||
//
|
||||
this.cmToI4.Name = "cmToI4";
|
||||
this.cmToI4.Size = new System.Drawing.Size(234, 22);
|
||||
this.cmToI4.Tag = "i4";
|
||||
this.cmToI4.Text = "To I4 (B/W)";
|
||||
this.cmToI4.Click += new System.EventHandler(this.cmChangeFormat_Click);
|
||||
//
|
||||
// lbNoPreview
|
||||
//
|
||||
this.lbNoPreview.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
@ -347,5 +450,15 @@ namespace CustomizeMii
|
||||
private System.Windows.Forms.ToolStripMenuItem cmI8;
|
||||
private System.Windows.Forms.ToolStripMenuItem cmI4;
|
||||
private System.Windows.Forms.Label lbNoPreview;
|
||||
private System.Windows.Forms.ToolStripMenuItem cmChangeFormat;
|
||||
private System.Windows.Forms.ToolStripMenuItem cmToRGBA8;
|
||||
private System.Windows.Forms.ToolStripMenuItem cmToRGB565;
|
||||
private System.Windows.Forms.ToolStripMenuItem cmToRGB5A3;
|
||||
private System.Windows.Forms.ToolStripMenuItem cmToIA8;
|
||||
private System.Windows.Forms.ToolStripMenuItem cmToIA4;
|
||||
private System.Windows.Forms.ToolStripMenuItem cmToI8;
|
||||
private System.Windows.Forms.ToolStripMenuItem cmToI4;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
|
||||
private System.Windows.Forms.CheckBox cbCheckerBoard;
|
||||
}
|
||||
}
|
@ -16,17 +16,25 @@
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Windows.Forms;
|
||||
using libWiiSharp;
|
||||
|
||||
namespace CustomizeMii
|
||||
{
|
||||
public partial class CustomizeMii_Preview : Form
|
||||
{
|
||||
public string startTPL;
|
||||
public bool startIcon = false;
|
||||
private TplImage[,] images;
|
||||
private TplImage[][] images = new TplImage[2][];
|
||||
private U8 bannerBin;
|
||||
private U8 iconBin;
|
||||
private string startTPL;
|
||||
private bool startIcon = false;
|
||||
|
||||
public U8 BannerBin { get { return bannerBin; } set { bannerBin = value; } }
|
||||
public U8 IconBin { get { return iconBin; } set { iconBin = value; } }
|
||||
public string StartTPL { get { return startTPL; } set { startTPL = value; } }
|
||||
public bool StartIcon { get { return startIcon; } set { startIcon = value; } }
|
||||
|
||||
public CustomizeMii_Preview()
|
||||
{
|
||||
@ -49,51 +57,67 @@ namespace CustomizeMii
|
||||
private void Preview_Load(object sender, EventArgs e)
|
||||
{
|
||||
this.CenterToParent();
|
||||
|
||||
string[] bannerpics;
|
||||
string[] iconpics;
|
||||
|
||||
if (string.IsNullOrEmpty(CustomizeMii_Main.BannerReplace))
|
||||
bannerpics = Directory.GetFiles(CustomizeMii_Main.TempUnpackBannerTplPath, "*.tpl");
|
||||
else bannerpics = Directory.GetFiles(CustomizeMii_Main.BannerTplPath, "*.tpl");
|
||||
|
||||
if (string.IsNullOrEmpty(CustomizeMii_Main.IconReplace))
|
||||
iconpics = Directory.GetFiles(CustomizeMii_Main.TempUnpackIconTplPath, "*.tpl");
|
||||
else iconpics = Directory.GetFiles(CustomizeMii_Main.IconTplPath, "*.tpl");
|
||||
cbBanner.Items.Clear();
|
||||
cbIcon.Items.Clear();
|
||||
|
||||
int startIndex = -1;
|
||||
if (!startIcon)
|
||||
|
||||
List<TplImage> bannerImages = new List<TplImage>();
|
||||
List<TplImage> iconImages = new List<TplImage>();
|
||||
|
||||
for (int i = 0; i < bannerBin.NumOfNodes; i++)
|
||||
{
|
||||
for (int i = 0; i < bannerpics.Length; i++)
|
||||
if (Path.GetFileName(bannerpics[i]) == startTPL)
|
||||
startIndex = i;
|
||||
if (bannerBin.StringTable[i].ToLower().EndsWith(".tpl"))
|
||||
{
|
||||
TplImage tmpImage = new TplImage();
|
||||
TPL tmpTpl = TPL.Load(bannerBin.Data[i]);
|
||||
|
||||
if (i == 10) { }
|
||||
|
||||
tmpImage.fileName = bannerBin.StringTable[i];
|
||||
tmpImage.tplFormat = tmpTpl.GetTextureFormat(0).ToString();
|
||||
tmpImage.tplImage = tmpTpl.ExtractTexture();
|
||||
tmpImage.checkerBoard = createCheckerBoard(tmpImage.tplImage.Width, tmpImage.tplImage.Height);
|
||||
|
||||
bannerImages.Add(tmpImage);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
for (int i = 0; i < iconBin.NumOfNodes; i++)
|
||||
{
|
||||
for (int i = 0; i < iconpics.Length; i++)
|
||||
if (Path.GetFileName(iconpics[i]) == startTPL)
|
||||
if (iconBin.StringTable[i].ToLower().EndsWith(".tpl"))
|
||||
{
|
||||
TplImage tmpImage = new TplImage();
|
||||
TPL tmpTpl = TPL.Load(iconBin.Data[i]);
|
||||
|
||||
tmpImage.fileName = iconBin.StringTable[i];
|
||||
tmpImage.tplFormat = tmpTpl.GetTextureFormat(0).ToString();
|
||||
tmpImage.tplImage = tmpTpl.ExtractTexture();
|
||||
tmpImage.checkerBoard = createCheckerBoard(tmpImage.tplImage.Width, tmpImage.tplImage.Height);
|
||||
|
||||
iconImages.Add(tmpImage);
|
||||
}
|
||||
}
|
||||
|
||||
images[0] = bannerImages.ToArray();
|
||||
images[1] = iconImages.ToArray();
|
||||
|
||||
for (int i = 0; i < images[0].Length; i++)
|
||||
{
|
||||
cbBanner.Items.Add(images[0][i].fileName);
|
||||
if (!startIcon)
|
||||
if (images[0][i].fileName.ToLower() == startTPL.ToLower())
|
||||
startIndex = i;
|
||||
}
|
||||
|
||||
foreach (string thispic in bannerpics)
|
||||
for (int i = 0; i < images[1].Length; i++)
|
||||
{
|
||||
string picname = thispic.Remove(0, thispic.LastIndexOf('\\') + 1);
|
||||
picname = picname.Remove(picname.LastIndexOf('.'));
|
||||
cbBanner.Items.Add((object)picname);
|
||||
cbIcon.Items.Add(images[1][i].fileName);
|
||||
if (startIcon)
|
||||
if (images[1][i].fileName.ToLower() == startTPL.ToLower())
|
||||
startIndex = i;
|
||||
}
|
||||
|
||||
foreach (string thispic in iconpics)
|
||||
{
|
||||
string picname = thispic.Remove(0, thispic.LastIndexOf('\\') + 1);
|
||||
picname = picname.Remove(picname.LastIndexOf('.'));
|
||||
cbIcon.Items.Add((object)picname);
|
||||
}
|
||||
|
||||
if (bannerpics.Length > iconpics.Length)
|
||||
images = new TplImage[2, bannerpics.Length];
|
||||
else
|
||||
images = new TplImage[2, iconpics.Length];
|
||||
|
||||
try
|
||||
{
|
||||
if (startIndex != -1)
|
||||
@ -112,44 +136,11 @@ namespace CustomizeMii
|
||||
{
|
||||
if (cbBanner.SelectedIndex != -1)
|
||||
{
|
||||
if (images[0, cbBanner.SelectedIndex].tplImage == null)
|
||||
{
|
||||
byte[] tpl;
|
||||
pbPic.Image = images[0][cbBanner.SelectedIndex].tplImage;
|
||||
lbFormat.Text = images[0][cbBanner.SelectedIndex].tplFormat;
|
||||
lbSize.Text = string.Format("{0} x {1}", images[0][cbBanner.SelectedIndex].tplImage.Width, images[0][cbBanner.SelectedIndex].tplImage.Height);
|
||||
|
||||
if (string.IsNullOrEmpty(CustomizeMii_Main.BannerReplace))
|
||||
tpl = Wii.Tools.LoadFileToByteArray(CustomizeMii_Main.TempUnpackBannerTplPath + cbBanner.SelectedItem.ToString() + ".tpl");
|
||||
else tpl = Wii.Tools.LoadFileToByteArray(CustomizeMii_Main.BannerTplPath + cbBanner.SelectedItem.ToString() + ".tpl");
|
||||
|
||||
lbSize.Text = Wii.TPL.GetTextureWidth(tpl).ToString() + " x " + Wii.TPL.GetTextureHeight(tpl).ToString();
|
||||
images[0, cbBanner.SelectedIndex].tplFormat = Wii.TPL.GetTextureFormatName(tpl);
|
||||
lbFormat.Text = images[0, cbBanner.SelectedIndex].tplFormat;
|
||||
|
||||
if (images[0, cbBanner.SelectedIndex].tplFormat.ToLower() == "ci4" ||
|
||||
images[0, cbBanner.SelectedIndex].tplFormat.ToLower() == "ci8" ||
|
||||
images[0, cbBanner.SelectedIndex].tplFormat.ToLower() == "ci14x2")
|
||||
{
|
||||
int tempW = Wii.TPL.GetTextureWidth(tpl);
|
||||
int tempH = Wii.TPL.GetTextureHeight(tpl);
|
||||
|
||||
images[0, cbBanner.SelectedIndex].tplImage = new Bitmap(tempW, tempH);
|
||||
}
|
||||
else
|
||||
{
|
||||
images[0, cbBanner.SelectedIndex].tplImage = Wii.TPL.ConvertFromTPL(tpl);
|
||||
}
|
||||
|
||||
tpl = null;
|
||||
}
|
||||
|
||||
pbPic.Image = images[0, cbBanner.SelectedIndex].tplImage;
|
||||
lbFormat.Text = images[0, cbBanner.SelectedIndex].tplFormat;
|
||||
lbSize.Text = string.Format("{0} x {1}", images[0, cbBanner.SelectedIndex].tplImage.Width, images[0, cbBanner.SelectedIndex].tplImage.Height);
|
||||
|
||||
if (images[0, cbBanner.SelectedIndex].tplFormat.ToLower() == "ci4" ||
|
||||
images[0, cbBanner.SelectedIndex].tplFormat.ToLower() == "ci8" ||
|
||||
images[0, cbBanner.SelectedIndex].tplFormat.ToLower() == "ci14x2")
|
||||
lbNoPreview.Visible = true;
|
||||
else lbNoPreview.Visible = false;
|
||||
if (cbCheckerBoard.Checked) pbPic.BackgroundImage = images[0][cbBanner.SelectedIndex].checkerBoard;
|
||||
|
||||
cbIcon.SelectedIndex = -1;
|
||||
}
|
||||
@ -159,68 +150,61 @@ namespace CustomizeMii
|
||||
{
|
||||
if (cbIcon.SelectedIndex != -1)
|
||||
{
|
||||
if (images[1, cbIcon.SelectedIndex].tplImage == null)
|
||||
{
|
||||
byte[] tpl;
|
||||
pbPic.Image = images[1][cbIcon.SelectedIndex].tplImage;
|
||||
lbFormat.Text = images[1][cbIcon.SelectedIndex].tplFormat;
|
||||
lbSize.Text = string.Format("{0} x {1}", images[1][cbIcon.SelectedIndex].tplImage.Width, images[1][cbIcon.SelectedIndex].tplImage.Height);
|
||||
|
||||
if (string.IsNullOrEmpty(CustomizeMii_Main.IconReplace))
|
||||
tpl = Wii.Tools.LoadFileToByteArray(CustomizeMii_Main.TempUnpackIconTplPath + cbIcon.SelectedItem.ToString() + ".tpl");
|
||||
else tpl = Wii.Tools.LoadFileToByteArray(CustomizeMii_Main.IconTplPath + cbIcon.SelectedItem.ToString() + ".tpl");
|
||||
|
||||
lbSize.Text = Wii.TPL.GetTextureWidth(tpl).ToString() + " x " + Wii.TPL.GetTextureHeight(tpl).ToString();
|
||||
images[1, cbIcon.SelectedIndex].tplFormat = Wii.TPL.GetTextureFormatName(tpl);
|
||||
lbFormat.Text = images[1, cbIcon.SelectedIndex].tplFormat;
|
||||
|
||||
if (images[1, cbIcon.SelectedIndex].tplFormat.ToLower() == "ci4" ||
|
||||
images[1, cbIcon.SelectedIndex].tplFormat.ToLower() == "ci8" ||
|
||||
images[1, cbIcon.SelectedIndex].tplFormat.ToLower() == "ci14x2")
|
||||
{
|
||||
int tempW = Wii.TPL.GetTextureWidth(tpl);
|
||||
int tempH = Wii.TPL.GetTextureHeight(tpl);
|
||||
|
||||
images[1, cbIcon.SelectedIndex].tplImage = new Bitmap(tempW, tempH);
|
||||
}
|
||||
else
|
||||
{
|
||||
images[1, cbIcon.SelectedIndex].tplImage = Wii.TPL.ConvertFromTPL(tpl);
|
||||
}
|
||||
|
||||
tpl = null;
|
||||
}
|
||||
|
||||
pbPic.Image = images[1, cbIcon.SelectedIndex].tplImage;
|
||||
lbFormat.Text = images[1, cbIcon.SelectedIndex].tplFormat;
|
||||
lbSize.Text = string.Format("{0} x {1}", images[1, cbIcon.SelectedIndex].tplImage.Width, images[1, cbIcon.SelectedIndex].tplImage.Height);
|
||||
|
||||
if (images[1, cbIcon.SelectedIndex].tplFormat.ToLower() == "ci4" ||
|
||||
images[1, cbIcon.SelectedIndex].tplFormat.ToLower() == "ci8" ||
|
||||
images[1, cbIcon.SelectedIndex].tplFormat.ToLower() == "ci14x2")
|
||||
lbNoPreview.Visible = true;
|
||||
else lbNoPreview.Visible = false;
|
||||
if (cbCheckerBoard.Checked) pbPic.BackgroundImage = images[1][cbIcon.SelectedIndex].checkerBoard;
|
||||
|
||||
cbBanner.SelectedIndex = -1;
|
||||
}
|
||||
}
|
||||
|
||||
private void cmSave_Click(object sender, EventArgs e)
|
||||
{
|
||||
SaveFileDialog sfd = new SaveFileDialog();
|
||||
sfd.FileName = pbPic.ImageLocation.Remove(0, pbPic.ImageLocation.LastIndexOf('\\') + 1);
|
||||
sfd.Filter = "PNG|*.png";
|
||||
if (sfd.ShowDialog() == DialogResult.OK)
|
||||
File.Copy(pbPic.ImageLocation, sfd.FileName);
|
||||
}
|
||||
|
||||
private Image ResizeImage(Image img, int x, int y)
|
||||
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 Image createCheckerBoard(int w, int h)
|
||||
{
|
||||
Color darkColor = Color.DarkGray;
|
||||
Color lightColor = Color.White;
|
||||
int tileSize = 10;
|
||||
|
||||
Bitmap img = new Bitmap(w, h);
|
||||
|
||||
using (Graphics g = Graphics.FromImage(img))
|
||||
{
|
||||
g.Clear(lightColor);
|
||||
|
||||
for (int col = 0; col < w; col += tileSize)
|
||||
{
|
||||
for (int row = 0; row < h; row += tileSize)
|
||||
{
|
||||
Color curColor;
|
||||
|
||||
if ((col / tileSize) % 2 == 0)
|
||||
curColor = (row / tileSize) % 2 == 0 ? darkColor : lightColor;
|
||||
else
|
||||
curColor = (row / tileSize) % 2 == 0 ? lightColor : darkColor;
|
||||
|
||||
|
||||
if (curColor == lightColor) continue;
|
||||
|
||||
Rectangle rect = new Rectangle(col, row, tileSize, tileSize);
|
||||
g.FillRectangle(new SolidBrush(darkColor), rect);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return (Image)img;
|
||||
}
|
||||
|
||||
private void btnReplace_Click(object sender, EventArgs e)
|
||||
{
|
||||
cmFormat.Show(MousePosition);
|
||||
@ -236,79 +220,83 @@ namespace CustomizeMii
|
||||
{
|
||||
try
|
||||
{
|
||||
string Tpl;
|
||||
string tplName;
|
||||
TPL tmpTpl = new TPL();
|
||||
Image newImg;
|
||||
|
||||
if (cbBanner.SelectedIndex != -1) { Tpl = CustomizeMii_Main.BannerTplPath + cbBanner.SelectedItem + ".tpl"; }
|
||||
else { Tpl = CustomizeMii_Main.IconTplPath + cbIcon.SelectedItem + ".tpl"; }
|
||||
|
||||
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)
|
||||
if (cbIcon.SelectedIndex == -1)
|
||||
{
|
||||
Img = ResizeImage(Img, X, Y);
|
||||
tplName = cbBanner.SelectedItem.ToString().ToLower();
|
||||
tmpTpl.LoadFile(bannerBin.Data[bannerBin.GetNodeIndex(tplName)]);
|
||||
}
|
||||
else
|
||||
{
|
||||
tplName = cbIcon.SelectedItem.ToString().ToLower();
|
||||
tmpTpl.LoadFile(iconBin.Data[iconBin.GetNodeIndex(tplName)]);
|
||||
}
|
||||
|
||||
if (!ofd.FileName.ToLower().EndsWith(".tpl")) newImg = Image.FromFile(ofd.FileName);
|
||||
else
|
||||
{
|
||||
TPL newTpl = TPL.Load(ofd.FileName);
|
||||
newImg = newTpl.ExtractTexture();
|
||||
}
|
||||
|
||||
Size tplSize = tmpTpl.GetTextureSize(0);
|
||||
TPL_Format tplFormat;
|
||||
|
||||
if (newImg.Width != tplSize.Width ||
|
||||
newImg.Height != tplSize.Height)
|
||||
newImg = resizeImage(newImg, tplSize.Width, tplSize.Height);
|
||||
|
||||
ToolStripMenuItem cmSender = sender as ToolStripMenuItem;
|
||||
switch (cmSender.Tag.ToString().ToLower())
|
||||
{
|
||||
case "i4":
|
||||
TplFormat = 0;
|
||||
lbFormat.Text = "I4";
|
||||
tplFormat = TPL_Format.I4;
|
||||
break;
|
||||
case "i8":
|
||||
TplFormat = 1;
|
||||
lbFormat.Text = "I8";
|
||||
tplFormat = TPL_Format.I8;
|
||||
break;
|
||||
case "ia4":
|
||||
TplFormat = 2;
|
||||
lbFormat.Text = "IA4";
|
||||
tplFormat = TPL_Format.IA4;
|
||||
break;
|
||||
case "ia8":
|
||||
TplFormat = 3;
|
||||
lbFormat.Text = "IA8";
|
||||
tplFormat = TPL_Format.IA8;
|
||||
break;
|
||||
case "rgb565":
|
||||
TplFormat = 4;
|
||||
lbFormat.Text = "RGB565";
|
||||
tplFormat = TPL_Format.RGB565;
|
||||
break;
|
||||
case "rgb5a3":
|
||||
TplFormat = 5;
|
||||
lbFormat.Text = "RGB5A3";
|
||||
tplFormat = TPL_Format.RGB5A3;
|
||||
break;
|
||||
default:
|
||||
TplFormat = 6;
|
||||
lbFormat.Text = "RGBA8";
|
||||
tplFormat = TPL_Format.RGBA8;
|
||||
break;
|
||||
}
|
||||
|
||||
Wii.TPL.ConvertToTPL(Img, Tpl, TplFormat);
|
||||
tmpTpl.RemoveTexture(0);
|
||||
tmpTpl.AddTexture(newImg, tplFormat);
|
||||
|
||||
if (cbBanner.SelectedIndex != -1)
|
||||
{
|
||||
images[0, cbBanner.SelectedIndex].tplImage = Wii.TPL.ConvertFromTPL(Tpl);
|
||||
images[0, cbBanner.SelectedIndex].tplFormat = Wii.TPL.GetTextureFormatName(File.ReadAllBytes(Tpl));
|
||||
bannerBin.ReplaceFile(bannerBin.GetNodeIndex(tplName), tmpTpl.ToByteArray());
|
||||
images[0][cbBanner.SelectedIndex].tplImage = tmpTpl.ExtractTexture();
|
||||
images[0][cbBanner.SelectedIndex].tplFormat = tmpTpl.GetTextureFormat(0).ToString();
|
||||
|
||||
pbPic.Image = images[0, cbBanner.SelectedIndex].tplImage;
|
||||
lbFormat.Text = images[0, cbBanner.SelectedIndex].tplFormat;
|
||||
lbSize.Text = string.Format("{0} x {1}", images[0, cbBanner.SelectedIndex].tplImage.Width, images[0, cbBanner.SelectedIndex].tplImage.Height);
|
||||
pbPic.Image = images[0][cbBanner.SelectedIndex].tplImage;
|
||||
lbFormat.Text = images[0][cbBanner.SelectedIndex].tplFormat;
|
||||
lbSize.Text = string.Format("{0} x {1}", images[0][cbBanner.SelectedIndex].tplImage.Width, images[0][cbBanner.SelectedIndex].tplImage.Height);
|
||||
}
|
||||
else
|
||||
{
|
||||
images[1, cbIcon.SelectedIndex].tplImage = Wii.TPL.ConvertFromTPL(Tpl);
|
||||
images[1, cbIcon.SelectedIndex].tplFormat = Wii.TPL.GetTextureFormatName(File.ReadAllBytes(Tpl));
|
||||
iconBin.ReplaceFile(iconBin.GetNodeIndex(tplName), tmpTpl.ToByteArray());
|
||||
images[1][cbIcon.SelectedIndex].tplImage = tmpTpl.ExtractTexture();
|
||||
images[1][cbIcon.SelectedIndex].tplFormat = tmpTpl.GetTextureFormat(0).ToString();
|
||||
|
||||
pbPic.Image = images[1, cbIcon.SelectedIndex].tplImage;
|
||||
lbFormat.Text = images[1, cbIcon.SelectedIndex].tplFormat;
|
||||
lbSize.Text = string.Format("{0} x {1}", images[1, cbIcon.SelectedIndex].tplImage.Width, images[1, cbIcon.SelectedIndex].tplImage.Height);
|
||||
pbPic.Image = images[1][cbIcon.SelectedIndex].tplImage;
|
||||
lbFormat.Text = images[1][cbIcon.SelectedIndex].tplFormat;
|
||||
lbSize.Text = string.Format("{0} x {1}", images[1][cbIcon.SelectedIndex].tplImage.Width, images[1][cbIcon.SelectedIndex].tplImage.Height);
|
||||
}
|
||||
|
||||
if (cbBanner.SelectedIndex != -1) cbBanner.Select();
|
||||
@ -318,5 +306,104 @@ namespace CustomizeMii
|
||||
{ MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); }
|
||||
}
|
||||
}
|
||||
|
||||
private void cmChangeFormat_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
string tplName;
|
||||
TPL tmpTpl = new TPL();
|
||||
Image newImg;
|
||||
|
||||
if (cbIcon.SelectedIndex == -1)
|
||||
{
|
||||
tplName = cbBanner.SelectedItem.ToString().ToLower();
|
||||
tmpTpl.LoadFile(bannerBin.Data[bannerBin.GetNodeIndex(tplName)]);
|
||||
}
|
||||
else
|
||||
{
|
||||
tplName = cbIcon.SelectedItem.ToString().ToLower();
|
||||
tmpTpl.LoadFile(iconBin.Data[iconBin.GetNodeIndex(tplName)]);
|
||||
}
|
||||
|
||||
newImg = tmpTpl.ExtractTexture();
|
||||
TPL_Format tplFormat;
|
||||
|
||||
ToolStripMenuItem cmSender = sender as ToolStripMenuItem;
|
||||
switch (cmSender.Tag.ToString().ToLower())
|
||||
{
|
||||
case "i4":
|
||||
tplFormat = TPL_Format.I4;
|
||||
break;
|
||||
case "i8":
|
||||
tplFormat = TPL_Format.I8;
|
||||
break;
|
||||
case "ia4":
|
||||
tplFormat = TPL_Format.IA4;
|
||||
break;
|
||||
case "ia8":
|
||||
tplFormat = TPL_Format.IA8;
|
||||
break;
|
||||
case "rgb565":
|
||||
tplFormat = TPL_Format.RGB565;
|
||||
break;
|
||||
case "rgb5a3":
|
||||
tplFormat = TPL_Format.RGB5A3;
|
||||
break;
|
||||
default:
|
||||
tplFormat = TPL_Format.RGBA8;
|
||||
break;
|
||||
}
|
||||
|
||||
if (tmpTpl.GetTextureFormat(0) == tplFormat) return;
|
||||
|
||||
tmpTpl.RemoveTexture(0);
|
||||
tmpTpl.AddTexture(newImg, tplFormat);
|
||||
|
||||
if (cbBanner.SelectedIndex != -1)
|
||||
{
|
||||
bannerBin.ReplaceFile(bannerBin.GetNodeIndex(tplName), tmpTpl.ToByteArray());
|
||||
images[0][cbBanner.SelectedIndex].tplImage = tmpTpl.ExtractTexture();
|
||||
images[0][cbBanner.SelectedIndex].tplFormat = tmpTpl.GetTextureFormat(0).ToString();
|
||||
|
||||
|
||||
pbPic.Image = images[0][cbBanner.SelectedIndex].tplImage;
|
||||
lbFormat.Text = images[0][cbBanner.SelectedIndex].tplFormat;
|
||||
lbSize.Text = string.Format("{0} x {1}", images[0][cbBanner.SelectedIndex].tplImage.Width, images[0][cbBanner.SelectedIndex].tplImage.Height);
|
||||
}
|
||||
else
|
||||
{
|
||||
iconBin.ReplaceFile(iconBin.GetNodeIndex(tplName), tmpTpl.ToByteArray());
|
||||
images[1][cbIcon.SelectedIndex].tplImage = tmpTpl.ExtractTexture();
|
||||
images[1][cbIcon.SelectedIndex].tplFormat = tmpTpl.GetTextureFormat(0).ToString();
|
||||
|
||||
pbPic.Image = images[1][cbIcon.SelectedIndex].tplImage;
|
||||
lbFormat.Text = images[1][cbIcon.SelectedIndex].tplFormat;
|
||||
lbSize.Text = string.Format("{0} x {1}", images[1][cbIcon.SelectedIndex].tplImage.Width, images[1][cbIcon.SelectedIndex].tplImage.Height);
|
||||
}
|
||||
|
||||
if (cbBanner.SelectedIndex != -1) cbBanner.Select();
|
||||
else if (cbIcon.SelectedIndex != -1) cbIcon.Select();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{ MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); }
|
||||
}
|
||||
|
||||
private void cbCheckerBoard_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (cbCheckerBoard.Checked)
|
||||
{
|
||||
if (cbBanner.SelectedIndex != -1)
|
||||
pbPic.BackgroundImage = images[0][cbBanner.SelectedIndex].checkerBoard;
|
||||
else
|
||||
pbPic.BackgroundImage = images[1][cbIcon.SelectedIndex].checkerBoard;
|
||||
}
|
||||
else pbPic.BackgroundImage = null;
|
||||
|
||||
if (cbBanner.SelectedIndex != -1)
|
||||
cbBanner.Focus();
|
||||
else
|
||||
cbIcon.Focus();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -20,23 +20,18 @@ namespace CustomizeMii
|
||||
public struct TplImage
|
||||
{
|
||||
public System.Drawing.Image tplImage;
|
||||
public System.Drawing.Image checkerBoard;
|
||||
public string tplFormat;
|
||||
public string fileName;
|
||||
}
|
||||
|
||||
public struct TransmitInfo
|
||||
{
|
||||
public bool usedCompression;
|
||||
public double compressionRatio;
|
||||
public double transmittedLength;
|
||||
public int timeElapsed;
|
||||
}
|
||||
|
||||
public enum TransmitProtocol : int
|
||||
{
|
||||
JODI = 0,
|
||||
HAXX = 1
|
||||
}
|
||||
|
||||
public struct BnsConversionInfo
|
||||
{
|
||||
public enum LoopType
|
||||
@ -46,10 +41,10 @@ namespace CustomizeMii
|
||||
Manual
|
||||
}
|
||||
|
||||
public LoopType Loop;
|
||||
public int LoopStartSample;
|
||||
public string AudioFile;
|
||||
public bool StereoToMono;
|
||||
public LoopType loopType;
|
||||
public int loopStartSample;
|
||||
public string audioFile;
|
||||
public bool stereoToMono;
|
||||
}
|
||||
|
||||
public struct WadCreationInfo
|
||||
@ -57,23 +52,26 @@ namespace CustomizeMii
|
||||
public enum NandLoader : int
|
||||
{
|
||||
comex = 0,
|
||||
Waninkoko = 1
|
||||
Waninkoko = 1,
|
||||
}
|
||||
|
||||
public string titleId;
|
||||
public string[] titles;
|
||||
public string allLangTitle;
|
||||
public int requiredIos;
|
||||
public int startupIos;
|
||||
public string sound;
|
||||
public string dol;
|
||||
public string outFile;
|
||||
public NandLoader nandLoader;
|
||||
public bool sendToWii;
|
||||
public TransmitProtocol transmitProtocol;
|
||||
public libWiiSharp.Protocol transmitProtocol;
|
||||
public string transmitIp;
|
||||
public int transmitIos;
|
||||
public bool saveAfterTransmit;
|
||||
public bool success;
|
||||
public bool sendWadReady;
|
||||
public byte[] wadFile;
|
||||
public bool lz77;
|
||||
}
|
||||
|
||||
public struct Progress
|
||||
|
@ -24,33 +24,21 @@ namespace CustomizeMii
|
||||
{
|
||||
static class Program
|
||||
{
|
||||
static Mutex mtx;
|
||||
|
||||
/// <summary>
|
||||
/// Der Haupteinstiegspunkt für die Anwendung.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
static void Main()
|
||||
static void Main(string[] args)
|
||||
{
|
||||
CleanupRemains();
|
||||
if (!File.Exists(Application.StartupPath + Path.DirectorySeparatorChar + "libWiiSharp.dll"))
|
||||
{
|
||||
MessageBox.Show("libWiiSharp.dll wasn't found!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
Environment.Exit(-1);
|
||||
}
|
||||
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
Application.Run(new CustomizeMii_Main());
|
||||
}
|
||||
|
||||
static void CleanupRemains()
|
||||
{
|
||||
bool firstInstance = false;
|
||||
mtx = new System.Threading.Mutex(false, "CustomizeMii", out firstInstance);
|
||||
|
||||
if (firstInstance)
|
||||
{
|
||||
if (Directory.Exists(Path.GetTempPath() + "CustomizeMii_Temp"))
|
||||
Directory.Delete(Path.GetTempPath() + "CustomizeMii_Temp", true);
|
||||
if (Directory.Exists(Path.GetTempPath() + "ForwardMii_Temp"))
|
||||
Directory.Delete(Path.GetTempPath() + "ForwardMii_Temp", true);
|
||||
}
|
||||
Application.Run(new CustomizeMii_Main(args));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -50,6 +50,6 @@ using System.Resources;
|
||||
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
|
||||
// übernehmen, indem Sie "*" eingeben:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("2.3.1.0")]
|
||||
[assembly: AssemblyFileVersion("2.3.1.0")]
|
||||
[assembly: AssemblyVersion("3.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("3.0.0.0")]
|
||||
[assembly: NeutralResourcesLanguageAttribute("en")]
|
||||
|
33
CustomizeMii/Properties/Resources.Designer.cs
generated
33
CustomizeMii/Properties/Resources.Designer.cs
generated
@ -1,21 +1,4 @@
|
||||
/* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// Dieser Code wurde von einem Tool generiert.
|
||||
// Laufzeitversion:2.0.50727.4927
|
||||
@ -91,6 +74,13 @@ namespace CustomizeMii.Properties {
|
||||
}
|
||||
}
|
||||
|
||||
internal static byte[] comex {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("comex", resourceCulture);
|
||||
return ((byte[])(obj));
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Icon CustomizeMii {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("CustomizeMii", resourceCulture);
|
||||
@ -113,5 +103,12 @@ namespace CustomizeMii.Properties {
|
||||
return ResourceManager.GetString("Instructions", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
internal static byte[] Waninkoko {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("Waninkoko", resourceCulture);
|
||||
return ((byte[])(obj));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -118,16 +118,22 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="CustomizeMii" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\CustomizeMii.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Instructions" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\resources\instructions.rtf;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
|
||||
</data>
|
||||
<data name="btnCreate" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\btnCreate.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="btnSend" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\btnSend.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="comex" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\resources\comex.app;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name="CustomizeMii" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\CustomizeMii.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="Instructions" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\resources\instructions.rtf;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
|
||||
</data>
|
||||
<data name="Waninkoko" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\resources\waninkoko.app;System.Byte[], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
</root>
|
@ -2,13 +2,24 @@ 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.
|
||||
Please use the issue tracker there to report any occuring bugs.
|
||||
|
||||
Thanks to icefire / Xuzz for the basic idea of this Application!
|
||||
Thanks to icefire / Xuzz for the basic idea of this application!
|
||||
|
||||
-----------------------------------------------------------------------------------------
|
||||
Changelog:
|
||||
|
||||
Version 3.0
|
||||
- Switched backend to libWiiSharp (http://libwiisharp.googlecode.com)
|
||||
- Speed improvements through using RAM instead of temp files on HDD
|
||||
- No separate Mono version anymore, the normal version works with Mono (even compiling forwarders!)
|
||||
- Fixed complex forwarder loading screen to be fullscreen (thanks wilsoff / tantric!)
|
||||
- Fixed bug where startup IOS was set to 0 when sending channel to Wii
|
||||
- Doesn't require common-key.bin anymore
|
||||
- Added checkerboard for transparent areas in images (preview window)
|
||||
- Added ability to change a TPLs format (preview window)
|
||||
- Added ability to rename and resize TPLs (right click on listbox)
|
||||
|
||||
Version 2.31
|
||||
- Fixed sending to Wii
|
||||
|
||||
@ -105,6 +116,7 @@ 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
|
||||
wilsoff for helping me debugging 3.0
|
||||
-----------------------------------------------------------------------------------------
|
||||
|
||||
-----------------------------------------------------------------------------------------
|
||||
|
@ -1,372 +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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace WaveFile
|
||||
{
|
||||
/// <summary>
|
||||
/// A class for RIFF Wave files
|
||||
/// </summary>
|
||||
public class Wave
|
||||
{
|
||||
//Private Variables
|
||||
private int fmtOffset;
|
||||
private int dataOffset;
|
||||
private int smplOffset;
|
||||
private byte[] waveFile;
|
||||
|
||||
|
||||
|
||||
//Public Variables
|
||||
/// <summary>
|
||||
/// The Samplerate of the Wave file
|
||||
/// </summary>
|
||||
public int SampleRate { get { return GetSampleRate(); } }
|
||||
/// <summary>
|
||||
/// The Bitdepth of the Wave file
|
||||
/// </summary>
|
||||
public int BitDepth { get { return GetBitDepth(); } }
|
||||
/// <summary>
|
||||
/// The number of channels of the Wave file
|
||||
/// </summary>
|
||||
public int ChannelCount { get { return GetChannelCount(); } }
|
||||
/// <summary>
|
||||
/// The format of the Wave file's data. 1 = PCM
|
||||
/// </summary>
|
||||
public int DataFormat { get { return GetDataFormat(); } }
|
||||
/// <summary>
|
||||
/// The number of Loops in the Wave file
|
||||
/// </summary>
|
||||
public int LoopCount { get { return GetLoopCount(); } }
|
||||
/// <summary>
|
||||
/// The start sample of the first Loop (if exist)
|
||||
/// </summary>
|
||||
public int LoopStart { get { return GetLoopStart(); } }
|
||||
/// <summary>
|
||||
/// The total number of Frames
|
||||
/// </summary>
|
||||
public int SampleCount { get { return GetFrameCount(); } }
|
||||
|
||||
|
||||
|
||||
//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();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the Wave file as a Byte Array
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public byte[] ToByteArray()
|
||||
{
|
||||
return waveFile;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the Wave file as a Memory Stream
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public MemoryStream ToMemoryStream()
|
||||
{
|
||||
return new MemoryStream(waveFile);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns only the audio data of the Wave file (No header or anything else)
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public byte[] GetAllFrames()
|
||||
{
|
||||
int dataLength = GetDataLength();
|
||||
|
||||
MemoryStream ms = new MemoryStream();
|
||||
ms.Write(waveFile, dataOffset, dataLength);
|
||||
|
||||
return ms.ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Trims the start of the wave to the given sample
|
||||
/// </summary>
|
||||
/// <param name="newStartSample"></param>
|
||||
/// <returns></returns>
|
||||
public MemoryStream TrimStart(int newStartSample)
|
||||
{
|
||||
if (newStartSample > this.SampleCount) throw new Exception(string.Format("The loop start sample ({0}) is higher than the total number of samples ({1}) in this file!", newStartSample, this.SampleCount));
|
||||
|
||||
MemoryStream msOut = new MemoryStream();
|
||||
msOut.Seek(0, SeekOrigin.Begin);
|
||||
|
||||
if (newStartSample == 0)
|
||||
{
|
||||
msOut.Write(waveFile, 0, waveFile.Length);
|
||||
msOut.Seek(0, SeekOrigin.Begin);
|
||||
return msOut;
|
||||
}
|
||||
|
||||
msOut.Write(waveFile, 0, this.dataOffset + 8);
|
||||
msOut.Write(waveFile, this.ChannelCount * 2 * newStartSample, waveFile.Length - (this.dataOffset + 8 + (this.ChannelCount * 2 * newStartSample)));
|
||||
|
||||
int cutted = (this.ChannelCount * 2 * newStartSample) - (this.dataOffset + 8);
|
||||
|
||||
byte[] newLength = BitConverter.GetBytes((UInt32)msOut.Position);
|
||||
byte[] dataLength = BitConverter.GetBytes(BitConverter.ToInt32(waveFile, this.dataOffset + 4) - cutted);
|
||||
|
||||
msOut.Seek(4, SeekOrigin.Begin);
|
||||
msOut.Write(newLength, 0, newLength.Length);
|
||||
msOut.Seek(this.dataOffset + 4, SeekOrigin.Begin);
|
||||
msOut.Write(dataLength, 0, dataLength.Length);
|
||||
|
||||
msOut.Seek(0, SeekOrigin.Begin);
|
||||
return msOut;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Closes the Wave file
|
||||
/// </summary>
|
||||
public void Close()
|
||||
{
|
||||
waveFile = null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//Private Functions
|
||||
|
||||
private int GetFrameCount()
|
||||
{
|
||||
int dataLength = GetDataLength();
|
||||
|
||||
return (dataLength / (this.ChannelCount * 2));
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
6391
CustomizeMii/Wii.cs
6391
CustomizeMii/Wii.cs
File diff suppressed because it is too large
Load Diff
BIN
CustomizeMii/libWiiSharp.dll
Normal file
BIN
CustomizeMii/libWiiSharp.dll
Normal file
Binary file not shown.
@ -35,17 +35,21 @@ namespace CustomizeMiiInstaller
|
||||
public class InstallerHelper
|
||||
{
|
||||
public static MemoryStream CreateInstaller(string wadFile, byte iosToUse)
|
||||
{
|
||||
return CreateInstaller(File.ReadAllBytes(wadFile), iosToUse);
|
||||
}
|
||||
|
||||
public static MemoryStream CreateInstaller(byte[] wadFileBytes, byte iosToUse)
|
||||
{
|
||||
const int injectionPosition = 0x5A74C;
|
||||
const int maxAllowedSizeForWads = 4 * 1024 * 1024 - 32; //(Max 4MB-32bytes )
|
||||
|
||||
//0. Read length of the wad to ensure it has an allowed size
|
||||
byte[] wadFileBytes = File.ReadAllBytes(wadFile);
|
||||
uint wadLength = (uint)wadFileBytes.Length;
|
||||
|
||||
if (wadLength > maxAllowedSizeForWads)
|
||||
{
|
||||
throw new ArgumentException(String.Format("The file {0} is sized above the max allowed limit of {1} for network installation.", wadFile, maxAllowedSizeForWads));
|
||||
throw new ArgumentException(String.Format("The file is sized above the max allowed limit of {1} for network installation.", maxAllowedSizeForWads));
|
||||
}
|
||||
|
||||
//1. Open the stub installer from resources
|
||||
|
@ -33,7 +33,10 @@ namespace ForwardMii
|
||||
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;
|
||||
if (Environment.OSVersion.VersionString.ToLower().Contains("windows"))
|
||||
{ if (!System.IO.Directory.Exists(Environment.GetEnvironmentVariable("DEVKITPRO").Remove(0, 1).Insert(1, ":") + "/libogc")) return false; }
|
||||
else
|
||||
{ if (!System.IO.Directory.Exists(Environment.GetEnvironmentVariable("DEVKITPRO") + "/libogc")) return false; }
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -28,7 +28,7 @@ namespace ForwardMii
|
||||
{
|
||||
public class GXForwarder
|
||||
{
|
||||
private readonly string TempDir = Path.GetTempPath() + "ForwardMii_Temp\\" + Guid.NewGuid() + "\\";
|
||||
private readonly string TempDir = Path.GetTempPath() + "ForwardMii_Temp" + Path.DirectorySeparatorChar + Guid.NewGuid() + Path.DirectorySeparatorChar;
|
||||
private bool[] packs = new bool[] { false, false, false };
|
||||
private string[] paths = new string[16]; //Maximum 16 Paths
|
||||
private string image43;
|
||||
@ -180,18 +180,18 @@ namespace ForwardMii
|
||||
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);
|
||||
img.Save(TempDir + Path.DirectorySeparatorChar + "source" + Path.DirectorySeparatorChar + "images" + Path.DirectorySeparatorChar + "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);
|
||||
img.Save(TempDir + Path.DirectorySeparatorChar + "source" + Path.DirectorySeparatorChar + "images" + Path.DirectorySeparatorChar + "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);
|
||||
img.Save(TempDir + Path.DirectorySeparatorChar + "source" + Path.DirectorySeparatorChar + "images" + Path.DirectorySeparatorChar + "background.png", System.Drawing.Imaging.ImageFormat.Png);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(image169) && File.Exists(image169))
|
||||
@ -201,18 +201,18 @@ namespace ForwardMii
|
||||
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);
|
||||
img.Save(TempDir + Path.DirectorySeparatorChar + "source" + Path.DirectorySeparatorChar + "images" + Path.DirectorySeparatorChar + "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);
|
||||
img.Save(TempDir + Path.DirectorySeparatorChar + "source" + Path.DirectorySeparatorChar + "images" + Path.DirectorySeparatorChar + "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);
|
||||
img.Save(TempDir + Path.DirectorySeparatorChar + "source" + Path.DirectorySeparatorChar + "images" + Path.DirectorySeparatorChar + "background169.png", System.Drawing.Imaging.ImageFormat.Png);
|
||||
}
|
||||
}
|
||||
|
||||
@ -304,7 +304,7 @@ namespace ForwardMii
|
||||
}
|
||||
}
|
||||
|
||||
using (FileStream fs = new FileStream(TempDir + "source\\main.cpp", FileMode.Create))
|
||||
using (FileStream fs = new FileStream(TempDir + "source" + Path.DirectorySeparatorChar + "main.cpp", FileMode.Create))
|
||||
{
|
||||
using (StreamWriter writer = new StreamWriter(fs))
|
||||
{
|
||||
@ -319,14 +319,14 @@ namespace ForwardMii
|
||||
private void CopyResources()
|
||||
{
|
||||
if (Directory.Exists(TempDir)) Directory.Delete(TempDir, true);
|
||||
Directory.CreateDirectory(TempDir + "source\\images");
|
||||
Directory.CreateDirectory(TempDir + "source" + Path.DirectorySeparatorChar + "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);
|
||||
StreamToFile(tempStream, TempDir + "source" + Path.DirectorySeparatorChar + thisResource);
|
||||
}
|
||||
|
||||
Stream makefile = GetReourceStream("Makefile");
|
||||
|
@ -127,6 +127,10 @@ InitVideo ()
|
||||
VIDEO_Init();
|
||||
vmode = VIDEO_GetPreferredMode(NULL); // get default video mode
|
||||
|
||||
//Widescreen loading image fix...
|
||||
vmode->viWidth = 678;
|
||||
vmode->viXOrigin = (VI_MAX_WIDTH_NTSC - 678) / 2;
|
||||
|
||||
VIDEO_Configure (vmode);
|
||||
|
||||
// Allocate the video buffers
|
||||
|
Loading…
Reference in New Issue
Block a user