diff --git a/CustomizeMii/BNS.cs b/CustomizeMii/BNS.cs
index 35bbd3a..f723c27 100644
--- a/CustomizeMii/BNS.cs
+++ b/CustomizeMii/BNS.cs
@@ -15,7 +15,7 @@
* along with this program. If not, see .
*/
-//These classes are based on bns.py of the Wii.py Framework with improvements by me (Leathl)
+//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;
diff --git a/CustomizeMii/CustomizeMii_BackgroundWorkers.cs b/CustomizeMii/CustomizeMii_BackgroundWorkers.cs
index da66df6..87430c3 100644
--- a/CustomizeMii/CustomizeMii_BackgroundWorkers.cs
+++ b/CustomizeMii/CustomizeMii_BackgroundWorkers.cs
@@ -493,9 +493,11 @@ namespace CustomizeMii
bwLoadChannel.ReportProgress(90, "Gathering Information...");
string[] ChannelTitles = Wii.WadInfo.GetChannelTitles(WadFile);
string TitleID = Wii.WadInfo.GetTitleID(WadFile, 1);
+ string IosFlag = Wii.WadInfo.GetIosFlag(WadFile).Replace("IOS", string.Empty);
bool allLangs = true;
SetText(tbTitleID, TitleID);
+ SetText(tbStartupIos, IosFlag);
if (ChannelTitles[0] != ChannelTitles[1]) SetText(tbJapanese, ChannelTitles[0]);
else allLangs = false;
@@ -509,6 +511,7 @@ namespace CustomizeMii
else allLangs = false;
if (ChannelTitles[6] != ChannelTitles[1]) SetText(tbDutch, ChannelTitles[6]);
else allLangs = false;
+ if (ChannelTitles[7] != ChannelTitles[1]) SetText(tbKorean, ChannelTitles[7]);
if (allLangs) SetText(tbEnglish, ChannelTitles[1]);
else SetText(tbAllLanguages, ChannelTitles[1]);
@@ -843,7 +846,7 @@ namespace CustomizeMii
Wii.Tools.SaveFileFromByteArray(bannerbin, TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin");
Directory.Delete(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT", true);
- if (!string.IsNullOrEmpty(SoundReplace) || !string.IsNullOrEmpty(tbSound.Text))
+ if (!string.IsNullOrEmpty(SoundReplace) || !string.IsNullOrEmpty(wadInfo.sound))
{
bwCreateWad.ReportProgress(50, "Packing sound.bin...");
@@ -852,20 +855,20 @@ namespace CustomizeMii
File.Delete(TempUnpackPath + "00000000.app_OUT\\meta\\sound.bin");
File.Copy(TempSoundPath, TempUnpackPath + "00000000.app_OUT\\meta\\sound.bin");
}
- else if (!string.IsNullOrEmpty(tbSound.Text))
+ else if (!string.IsNullOrEmpty(wadInfo.sound))
{
if (tbSound.Text.EndsWith(".bns"))
{
- Wii.Sound.BnsToSoundBin(tbSound.Text, TempUnpackPath + "00000000.app_OUT\\meta\\sound.bin", false);
+ Wii.Sound.BnsToSoundBin(wadInfo.sound, TempUnpackPath + "00000000.app_OUT\\meta\\sound.bin", false);
}
- else if (tbSound.Text.StartsWith("BNS:"))
+ else if (wadInfo.sound.StartsWith("BNS:"))
{
Wii.Sound.BnsToSoundBin(TempBnsPath, TempUnpackPath + "00000000.app_OUT\\meta\\sound.bin", false);
}
else
{
- string SoundFile = tbSound.Text;
- if (tbSound.Text.EndsWith(".mp3")) SoundFile = TempWavePath;
+ string SoundFile = wadInfo.sound;
+ if (wadInfo.sound.EndsWith(".mp3")) SoundFile = TempWavePath;
Wii.Sound.WaveToSoundBin(SoundFile, TempUnpackPath + "00000000.app_OUT\\meta\\sound.bin", false);
}
@@ -874,13 +877,13 @@ namespace CustomizeMii
bwCreateWad.ReportProgress(60, "Packing 00000000.app...");
int[] Sizes = new int[3];
- string[] Titles = new string[] { tbJapanese.Text, tbEnglish.Text, tbGerman.Text, tbFrench.Text, tbSpanish.Text, tbItalian.Text, tbDutch.Text };
+
- for (int i = 0; i < Titles.Length; i++)
- if (string.IsNullOrEmpty(Titles[i])) Titles[i] = tbAllLanguages.Text;
+ for (int i = 0; i < wadInfo.titles.Length; i++)
+ if (string.IsNullOrEmpty(wadInfo.titles[i])) wadInfo.titles[i] = wadInfo.allLangTitle;
- byte[] nullapp = Wii.U8.PackU8(TempUnpackPath + "00000000.app_OUT", out Sizes[0], out Sizes[1], out Sizes[2]);
- nullapp = Wii.U8.AddHeaderIMET(nullapp, Titles, Sizes);
+ byte[] nullapp = Wii.U8.PackU8(TempUnpackPath + "00000000.app_OUT", out Sizes[0], out Sizes[1], out Sizes[2]);
+ nullapp = Wii.U8.AddHeaderIMET(nullapp, wadInfo.titles, Sizes);
Wii.Tools.SaveFileFromByteArray(nullapp, TempUnpackPath + "00000000.app");
Directory.Delete(TempUnpackPath + "00000000.app_OUT", true);
@@ -888,7 +891,7 @@ namespace CustomizeMii
string[] tmdfile = Directory.GetFiles(TempUnpackPath, "*.tmd");
byte[] tmd = Wii.Tools.LoadFileToByteArray(tmdfile[0]);
- if (!string.IsNullOrEmpty(tbDol.Text))
+ if (!string.IsNullOrEmpty(wadInfo.dol))
{
bwCreateWad.ReportProgress(80, "Inserting new DOL...");
string[] AppFiles = Directory.GetFiles(TempUnpackPath, "*.app");
@@ -907,22 +910,22 @@ namespace CustomizeMii
}
}
- if (tbDol.Text.StartsWith("Simple Forwarder:"))
+ if (wadInfo.dol.StartsWith("Simple Forwarder:"))
{
CreateForwarderSimple(TempUnpackPath + "\\00000002.app");
}
- else if (tbDol.Text.StartsWith("Complex Forwarder"))
+ else if (wadInfo.dol.StartsWith("Complex Forwarder"))
{
bwCreateWad.ReportProgress(82, "Compiling Forwarder...");
CreateForwarderComplex(TempUnpackPath + "\\00000002.app");
}
- else if (tbDol.Text == "Internal" || tbDol.Text.EndsWith(".wad"))
+ else if (wadInfo.dol == "Internal" || wadInfo.dol.EndsWith(".wad"))
{
File.Copy(TempDolPath, TempUnpackPath + "\\00000002.app");
}
else
{
- File.Copy(tbDol.Text, TempUnpackPath + "\\00000002.app");
+ File.Copy(wadInfo.dol, TempUnpackPath + "\\00000002.app");
}
tmd = Wii.WadEdit.ChangeTmdBootIndex(tmd, 1);
@@ -938,16 +941,16 @@ namespace CustomizeMii
}
}
- if (tbDol.Text.StartsWith("Simple Forwarder:"))
+ if (wadInfo.dol.StartsWith("Simple Forwarder:"))
{
CreateForwarderSimple(TempUnpackPath + "\\00000001.app");
}
- else if (tbDol.Text.StartsWith("Complex Forwarder"))
+ else if (wadInfo.dol.StartsWith("Complex Forwarder"))
{
bwCreateWad.ReportProgress(82, "Compiling Forwarder...");
CreateForwarderComplex(TempUnpackPath + "\\00000001.app");
}
- else if (tbDol.Text == "Internal")
+ else if (wadInfo.dol == "Internal")
{
File.Copy(TempDolPath, TempUnpackPath + "\\00000001.app");
}
@@ -980,10 +983,14 @@ namespace CustomizeMii
}
bwCreateWad.ReportProgress(85, "Updating TMD...");
+ Wii.WadEdit.ChangeIosFlag(tmdfile[0], wadInfo.requiredIos);
Wii.WadEdit.UpdateTmdContents(tmdfile[0]);
- Wii.WadEdit.ChangeTitleID(tikfile[0], 0, tbTitleID.Text.ToUpper());
- Wii.WadEdit.ChangeTitleID(tmdfile[0], 1, tbTitleID.Text.ToUpper());
+ if (!string.IsNullOrEmpty(wadInfo.titleId))
+ {
+ Wii.WadEdit.ChangeTitleID(tikfile[0], 0, wadInfo.titleId);
+ Wii.WadEdit.ChangeTitleID(tmdfile[0], 1, wadInfo.titleId);
+ }
bwCreateWad.ReportProgress(90, "Trucha Signing...");
Wii.WadEdit.TruchaSign(tmdfile[0], 1);
diff --git a/CustomizeMii/CustomizeMii_BnsConvert.Designer.cs b/CustomizeMii/CustomizeMii_BnsConvert.Designer.cs
index 28d6e88..699c02c 100644
--- a/CustomizeMii/CustomizeMii_BnsConvert.Designer.cs
+++ b/CustomizeMii/CustomizeMii_BnsConvert.Designer.cs
@@ -197,7 +197,7 @@ namespace CustomizeMii
this.rbFromAudioFile.Name = "rbFromAudioFile";
this.rbFromAudioFile.Size = new System.Drawing.Size(281, 17);
this.rbFromAudioFile.TabIndex = 0;
- this.rbFromAudioFile.Text = "From Audio File (works only with pre-looped wave files)";
+ this.rbFromAudioFile.Text = "From Audio File (only works with pre-looped wave files)";
this.rbFromAudioFile.UseVisualStyleBackColor = true;
this.rbFromAudioFile.CheckedChanged += new System.EventHandler(this.rbSelectionChanged);
//
@@ -396,6 +396,7 @@ namespace CustomizeMii
this.AcceptButton = this.btnConvert;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.BackColor = System.Drawing.SystemColors.Control;
this.CancelButton = this.btnCancel;
this.ClientSize = new System.Drawing.Size(674, 230);
this.Controls.Add(this.gbPrelisten);
diff --git a/CustomizeMii/CustomizeMii_ComplexForwarder.Designer.cs b/CustomizeMii/CustomizeMii_ComplexForwarder.Designer.cs
index 660863e..6a3b39c 100644
--- a/CustomizeMii/CustomizeMii_ComplexForwarder.Designer.cs
+++ b/CustomizeMii/CustomizeMii_ComplexForwarder.Designer.cs
@@ -434,6 +434,7 @@ namespace CustomizeMii
this.AcceptButton = this.btnOK;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.BackColor = System.Drawing.SystemColors.Control;
this.CancelButton = this.btnCancel;
this.ClientSize = new System.Drawing.Size(358, 383);
this.Controls.Add(this.tabPaths);
diff --git a/CustomizeMii/CustomizeMii_InputBox.Designer.cs b/CustomizeMii/CustomizeMii_InputBox.Designer.cs
index a3ef099..a78a8b1 100644
--- a/CustomizeMii/CustomizeMii_InputBox.Designer.cs
+++ b/CustomizeMii/CustomizeMii_InputBox.Designer.cs
@@ -111,6 +111,7 @@ namespace CustomizeMii
this.AcceptButton = this.btnOK;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.BackColor = System.Drawing.SystemColors.Control;
this.CancelButton = this.btnExit;
this.ClientSize = new System.Drawing.Size(238, 92);
this.Controls.Add(this.cbElf);
diff --git a/CustomizeMii/CustomizeMii_Main.Designer.cs b/CustomizeMii/CustomizeMii_Main.Designer.cs
index 534e3e7..fbfc4ea 100644
--- a/CustomizeMii/CustomizeMii_Main.Designer.cs
+++ b/CustomizeMii/CustomizeMii_Main.Designer.cs
@@ -64,6 +64,7 @@ namespace CustomizeMii
this.lbSource = new System.Windows.Forms.Label();
this.tabTitle = new System.Windows.Forms.TabPage();
this.llbTranslateChannel = new System.Windows.Forms.LinkLabel();
+ this.tbKorean = new System.Windows.Forms.TextBox();
this.tbItalian = new System.Windows.Forms.TextBox();
this.tbFrench = new System.Windows.Forms.TextBox();
this.tbJapanese = new System.Windows.Forms.TextBox();
@@ -72,6 +73,7 @@ namespace CustomizeMii
this.tbGerman = new System.Windows.Forms.TextBox();
this.tbEnglish = new System.Windows.Forms.TextBox();
this.lbDutch = new System.Windows.Forms.Label();
+ this.lbKorean = new System.Windows.Forms.Label();
this.lbItalian = new System.Windows.Forms.Label();
this.lbSpanish = new System.Windows.Forms.Label();
this.lbFrench = new System.Windows.Forms.Label();
@@ -92,12 +94,15 @@ namespace CustomizeMii
this.cmbNandLoader = new System.Windows.Forms.ComboBox();
this.btnBrowseDol = new System.Windows.Forms.Button();
this.tbDol = new System.Windows.Forms.TextBox();
+ this.tbStartupIos = new System.Windows.Forms.TextBox();
this.tbTitleID = new System.Windows.Forms.TextBox();
this.lbNewSound = new System.Windows.Forms.Label();
this.lbNandLoader = new System.Windows.Forms.Label();
this.lbNewDol = new System.Windows.Forms.Label();
+ this.lbStartupIos = new System.Windows.Forms.Label();
this.lbTitleID = new System.Windows.Forms.Label();
this.tabBanner = new System.Windows.Forms.TabPage();
+ this.llbBannerMultiReplace = new System.Windows.Forms.LinkLabel();
this.cbBannerMakeTransparent = new System.Windows.Forms.CheckBox();
this.cmbFormatBanner = new System.Windows.Forms.ComboBox();
this.lbFormatBanner = new System.Windows.Forms.Label();
@@ -108,6 +113,7 @@ namespace CustomizeMii
this.btnReplaceBanner = new System.Windows.Forms.Button();
this.lbxBannerTpls = new System.Windows.Forms.ListBox();
this.tabIcon = new System.Windows.Forms.TabPage();
+ this.llbIconMultiReplace = new System.Windows.Forms.LinkLabel();
this.cbIconMakeTransparent = new System.Windows.Forms.CheckBox();
this.cmbFormatIcon = new System.Windows.Forms.ComboBox();
this.lbFormatIcon = new System.Windows.Forms.Label();
@@ -383,6 +389,7 @@ namespace CustomizeMii
// tabTitle
//
this.tabTitle.Controls.Add(this.llbTranslateChannel);
+ this.tabTitle.Controls.Add(this.tbKorean);
this.tabTitle.Controls.Add(this.tbItalian);
this.tabTitle.Controls.Add(this.tbFrench);
this.tabTitle.Controls.Add(this.tbJapanese);
@@ -391,6 +398,7 @@ namespace CustomizeMii
this.tabTitle.Controls.Add(this.tbGerman);
this.tabTitle.Controls.Add(this.tbEnglish);
this.tabTitle.Controls.Add(this.lbDutch);
+ this.tabTitle.Controls.Add(this.lbKorean);
this.tabTitle.Controls.Add(this.lbItalian);
this.tabTitle.Controls.Add(this.lbSpanish);
this.tabTitle.Controls.Add(this.lbFrench);
@@ -420,6 +428,14 @@ namespace CustomizeMii
this.llbTranslateChannel.Text = "Translate \"Channel\"";
this.llbTranslateChannel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llbTranslateChannel_LinkClicked);
//
+ // tbKorean
+ //
+ this.tbKorean.Location = new System.Drawing.Point(301, 171);
+ this.tbKorean.MaxLength = 20;
+ this.tbKorean.Name = "tbKorean";
+ this.tbKorean.Size = new System.Drawing.Size(124, 20);
+ this.tbKorean.TabIndex = 16;
+ //
// tbItalian
//
this.tbItalian.Location = new System.Drawing.Point(301, 143);
@@ -485,6 +501,15 @@ namespace CustomizeMii
this.lbDutch.TabIndex = 9;
this.lbDutch.Text = "Dutch:";
//
+ // lbKorean
+ //
+ this.lbKorean.AutoSize = true;
+ this.lbKorean.Location = new System.Drawing.Point(221, 174);
+ this.lbKorean.Name = "lbKorean";
+ this.lbKorean.Size = new System.Drawing.Size(44, 13);
+ this.lbKorean.TabIndex = 8;
+ this.lbKorean.Text = "Korean:";
+ //
// lbItalian
//
this.lbItalian.AutoSize = true;
@@ -578,10 +603,12 @@ namespace CustomizeMii
this.tabOptions.Controls.Add(this.cmbNandLoader);
this.tabOptions.Controls.Add(this.btnBrowseDol);
this.tabOptions.Controls.Add(this.tbDol);
+ this.tabOptions.Controls.Add(this.tbStartupIos);
this.tabOptions.Controls.Add(this.tbTitleID);
this.tabOptions.Controls.Add(this.lbNewSound);
this.tabOptions.Controls.Add(this.lbNandLoader);
this.tabOptions.Controls.Add(this.lbNewDol);
+ this.tabOptions.Controls.Add(this.lbStartupIos);
this.tabOptions.Controls.Add(this.lbTitleID);
this.tabOptions.Location = new System.Drawing.Point(4, 22);
this.tabOptions.Name = "tabOptions";
@@ -700,6 +727,16 @@ namespace CustomizeMii
this.tbDol.DragDrop += new System.Windows.Forms.DragEventHandler(this.tbDol_DragDrop);
this.tbDol.DragEnter += new System.Windows.Forms.DragEventHandler(this.tbDol_DragEnter);
//
+ // tbStartupIos
+ //
+ this.tbStartupIos.CharacterCasing = System.Windows.Forms.CharacterCasing.Upper;
+ this.tbStartupIos.Location = new System.Drawing.Point(299, 49);
+ this.tbStartupIos.MaxLength = 4;
+ this.tbStartupIos.Name = "tbStartupIos";
+ this.tbStartupIos.Size = new System.Drawing.Size(55, 20);
+ this.tbStartupIos.TabIndex = 4;
+ this.tbStartupIos.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.tbStartupIos_KeyPress);
+ //
// tbTitleID
//
this.tbTitleID.CharacterCasing = System.Windows.Forms.CharacterCasing.Upper;
@@ -736,6 +773,15 @@ namespace CustomizeMii
this.lbNewDol.TabIndex = 1;
this.lbNewDol.Text = "New DOL:";
//
+ // lbStartupIos
+ //
+ this.lbStartupIos.AutoSize = true;
+ this.lbStartupIos.Location = new System.Drawing.Point(192, 52);
+ this.lbStartupIos.Name = "lbStartupIos";
+ this.lbStartupIos.Size = new System.Drawing.Size(65, 13);
+ this.lbStartupIos.TabIndex = 0;
+ this.lbStartupIos.Text = "Startup IOS:";
+ //
// lbTitleID
//
this.lbTitleID.AutoSize = true;
@@ -747,6 +793,7 @@ namespace CustomizeMii
//
// tabBanner
//
+ this.tabBanner.Controls.Add(this.llbBannerMultiReplace);
this.tabBanner.Controls.Add(this.cbBannerMakeTransparent);
this.tabBanner.Controls.Add(this.cmbFormatBanner);
this.tabBanner.Controls.Add(this.lbFormatBanner);
@@ -764,6 +811,17 @@ namespace CustomizeMii
this.tabBanner.Text = "Banner";
this.tabBanner.UseVisualStyleBackColor = true;
//
+ // llbBannerMultiReplace
+ //
+ this.llbBannerMultiReplace.AutoSize = true;
+ this.llbBannerMultiReplace.Location = new System.Drawing.Point(282, 190);
+ this.llbBannerMultiReplace.Name = "llbBannerMultiReplace";
+ this.llbBannerMultiReplace.Size = new System.Drawing.Size(72, 13);
+ this.llbBannerMultiReplace.TabIndex = 7;
+ this.llbBannerMultiReplace.TabStop = true;
+ this.llbBannerMultiReplace.Text = "Multi Replace";
+ this.llbBannerMultiReplace.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llbMultiReplace_LinkClicked);
+ //
// cbBannerMakeTransparent
//
this.cbBannerMakeTransparent.AutoSize = true;
@@ -870,6 +928,7 @@ namespace CustomizeMii
//
// tabIcon
//
+ this.tabIcon.Controls.Add(this.llbIconMultiReplace);
this.tabIcon.Controls.Add(this.cbIconMakeTransparent);
this.tabIcon.Controls.Add(this.cmbFormatIcon);
this.tabIcon.Controls.Add(this.lbFormatIcon);
@@ -887,6 +946,17 @@ namespace CustomizeMii
this.tabIcon.Text = "Icon";
this.tabIcon.UseVisualStyleBackColor = true;
//
+ // llbIconMultiReplace
+ //
+ this.llbIconMultiReplace.AutoSize = true;
+ this.llbIconMultiReplace.Location = new System.Drawing.Point(282, 190);
+ this.llbIconMultiReplace.Name = "llbIconMultiReplace";
+ this.llbIconMultiReplace.Size = new System.Drawing.Size(72, 13);
+ this.llbIconMultiReplace.TabIndex = 13;
+ this.llbIconMultiReplace.TabStop = true;
+ this.llbIconMultiReplace.Text = "Multi Replace";
+ this.llbIconMultiReplace.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.llbMultiReplace_LinkClicked);
+ //
// cbIconMakeTransparent
//
this.cbIconMakeTransparent.AutoSize = true;
@@ -1710,6 +1780,12 @@ namespace CustomizeMii
private System.Windows.Forms.ToolStripMenuItem cmExtractBrlan;
private System.Windows.Forms.ToolStripMenuItem cmExtractBothBrl;
private System.Windows.Forms.LinkLabel llbTranslateChannel;
+ private System.Windows.Forms.TextBox tbStartupIos;
+ private System.Windows.Forms.Label lbStartupIos;
+ private System.Windows.Forms.TextBox tbKorean;
+ private System.Windows.Forms.Label lbKorean;
+ private System.Windows.Forms.LinkLabel llbBannerMultiReplace;
+ private System.Windows.Forms.LinkLabel llbIconMultiReplace;
}
}
diff --git a/CustomizeMii/CustomizeMii_Main.cs b/CustomizeMii/CustomizeMii_Main.cs
index c37d96b..f648b3d 100644
--- a/CustomizeMii/CustomizeMii_Main.cs
+++ b/CustomizeMii/CustomizeMii_Main.cs
@@ -33,7 +33,7 @@ namespace CustomizeMii
public partial class CustomizeMii_Main : Form
{
#region Constants
- const string version = "2.2"; //Hint for myself: Never use a char in the Version (UpdateCheck)!
+ const string version = "2.3"; //Hint for myself: Never use a char in the Version (UpdateCheck)!
const int SoundMaxLength = 30; //In seconds
const int SoundWarningLength = 20; //In seconds
const int BnsWarningLength = 45; //In seconds
@@ -92,26 +92,30 @@ namespace CustomizeMii
private void CustomizeMii_Main_Load(object sender, EventArgs e)
{
- MethodInvoker Update = new MethodInvoker(UpdateCheck);
-
- UpdatePaths();
- Update.BeginInvoke(null, null);
-
#if !Mono
- MethodInvoker FUpdate = new MethodInvoker(UpdateCheckForwardMii);
- FUpdate.BeginInvoke(null, null);
+ this.Text = this.Text.Replace("X", version);
+ this.lbCreditVersion.Text = this.lbCreditVersion.Text.Replace("X", version);
CommonKeyCheck();
#endif
-
- InitializeStartup();
-
#if Mono
+ this.Text = this.Text.Replace("X", version + " (Mono)");
+ this.lbCreditVersion.Text = this.lbCreditVersion.Text.Replace("X", version + " (Mono)");
Mono = true;
//TextBox.MaxLength is not implemented in Mono, so don't use it
for (int i = 0; i < tabControl.TabPages.Count; i++)
for(int j=0;j thisVersion)
- {
- if (MessageBox.Show("Version " + NewVersion +
- " of the ForwardMii-Plugin is available.\nDo you want the download page to be opened?",
- "ForwardMii Update available", MessageBoxButtons.YesNo, MessageBoxIcon.Information) ==
- DialogResult.Yes)
- {
- Process.Start("http://code.google.com/p/customizemii/downloads/list");
- }
- }
- }
- }
- catch { }
- }
- }
- }
#endif
private void llbSite_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
@@ -895,7 +861,7 @@ namespace CustomizeMii
cbBannerMakeTransparent.Enabled = true;
cbBannerMakeTransparent.Checked = lbxBannerTpls.SelectedItem.ToString().EndsWith("(Transparent)");
- string TplFile = BannerTplPath + lbxBannerTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty);
+ string TplFile = BannerTplPath + lbxBannerTpls.SelectedItem.ToString().Remove(lbxBannerTpls.SelectedItem.ToString().IndexOf('(', 0) - 1);
int TplFormat = Wii.TPL.GetTextureFormat(TplFile);
switch (TplFormat)
@@ -956,7 +922,7 @@ namespace CustomizeMii
cbIconMakeTransparent.Enabled = true;
cbIconMakeTransparent.Checked = lbxIconTpls.SelectedItem.ToString().EndsWith("(Transparent)");
- string TplFile = IconTplPath + lbxIconTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty);
+ string TplFile = IconTplPath + lbxIconTpls.SelectedItem.ToString().Remove(lbxIconTpls.SelectedItem.ToString().IndexOf('(', 0) - 1);
int TplFormat = Wii.TPL.GetTextureFormat(TplFile);
switch (TplFormat)
@@ -1024,7 +990,7 @@ namespace CustomizeMii
{
try
{
- string Tpl = BannerTplPath + lbxBannerTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty);
+ string Tpl = BannerTplPath + lbxBannerTpls.SelectedItem.ToString().Remove(lbxBannerTpls.SelectedItem.ToString().IndexOf('(', 0) - 1);
byte[] TplArray = Wii.Tools.LoadFileToByteArray(Tpl);
Image Img;
@@ -1085,7 +1051,7 @@ namespace CustomizeMii
{
if (lbxBannerTpls.SelectedIndex != -1)
{
- string Tpl = BannerTplPath + lbxBannerTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty);
+ string Tpl = BannerTplPath + lbxBannerTpls.SelectedItem.ToString().Remove(lbxBannerTpls.SelectedItem.ToString().IndexOf('(', 0) - 1);
int format = Wii.TPL.GetTextureFormat(Tpl);
if (format == 8 || format == 9 || format == 10) { ErrorBox("This format is not supported!"); return; }
@@ -1138,7 +1104,7 @@ namespace CustomizeMii
try
{
CustomizeMii_Preview pvw = new CustomizeMii_Preview();
- pvw.startTPL = lbxBannerTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty);
+ pvw.startTPL = lbxBannerTpls.SelectedItem.ToString().Remove(lbxBannerTpls.SelectedItem.ToString().IndexOf('(', 0) - 1);
pvw.ShowDialog();
pvw = null;
}
@@ -1167,7 +1133,7 @@ namespace CustomizeMii
{
try
{
- string Tpl = IconTplPath + lbxIconTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty);
+ string Tpl = IconTplPath + lbxIconTpls.SelectedItem.ToString().Remove(lbxIconTpls.SelectedItem.ToString().IndexOf('(', 0) - 1);
byte[] TplArray = Wii.Tools.LoadFileToByteArray(Tpl);
Image Img;
@@ -1228,7 +1194,7 @@ namespace CustomizeMii
{
if (lbxIconTpls.SelectedIndex != -1)
{
- string Tpl = BannerTplPath + lbxBannerTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty);
+ string Tpl = IconTplPath + lbxIconTpls.SelectedItem.ToString().Remove(lbxIconTpls.SelectedItem.ToString().IndexOf('(', 0) - 1);
int format = Wii.TPL.GetTextureFormat(Tpl);
if (format == 8 || format == 9 || format == 10) { ErrorBox("This format is not supported!"); return; }
@@ -1282,7 +1248,7 @@ namespace CustomizeMii
{
CustomizeMii_Preview pvw = new CustomizeMii_Preview();
pvw.startIcon = true;
- pvw.startTPL = lbxIconTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty);
+ pvw.startTPL = lbxIconTpls.SelectedItem.ToString().Remove(lbxIconTpls.SelectedItem.ToString().IndexOf('(', 0) - 1);
pvw.ShowDialog();
pvw = null;
}
@@ -1295,334 +1261,13 @@ namespace CustomizeMii
}
}
- private bool CheckUnpackFolder()
- {
- try
- {
- //Check Unpack Root
- string[] RootFiles = Directory.GetFiles(TempUnpackPath);
- string[] RootDirs = Directory.GetDirectories(TempUnpackPath);
-
- foreach (string thisFile in RootFiles)
- {
- if (!thisFile.ToLower().EndsWith(".app") &&
- !thisFile.ToLower().EndsWith(".cert") &&
- !thisFile.ToLower().EndsWith(".tik") &&
- !thisFile.ToLower().EndsWith(".tmd"))
- File.Delete(thisFile);
- }
-
- if (RootDirs.Length > 1)
- {
- foreach (string thisDir in RootDirs)
- {
- if (!thisDir.EndsWith("00000000.app_OUT"))
- Directory.Delete(thisDir, true);
- }
- }
-
- //Check 00000000.app_OUT
- string[] MetaFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT");
- string[] MetaDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT");
-
- foreach (string thisFile in MetaFiles)
- File.Delete(thisFile);
- foreach (string thisDir in MetaDirs)
- if (!thisDir.ToLower().EndsWith("meta"))
- Directory.Delete(thisDir, true);
-
- string[] AppFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta");
- string[] AppDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta");
-
- foreach (string thisFile in AppFiles)
- {
- if (!thisFile.ToLower().EndsWith("banner.bin") &&
- !thisFile.ToLower().EndsWith("icon.bin") &&
- !thisFile.ToLower().EndsWith("sound.bin"))
- File.Delete(thisFile);
- }
-
- if (AppDirs.Length > 2)
- {
- foreach (string thisDir in AppDirs)
- {
- if (!thisDir.EndsWith("banner.bin_OUT") &&
- !thisDir.EndsWith("icon.bin_OUT"))
- Directory.Delete(thisDir, true);
- }
- }
-
- //Check banner.bin_OUT / Banner Replace Path
- if (string.IsNullOrEmpty(BannerReplace))
- {
- string[] ArcFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT");
- string[] ArcDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT");
-
- foreach (string thisFile in ArcFiles)
- File.Delete(thisFile);
- foreach (string thisDir in ArcDirs)
- if (!thisDir.ToLower().EndsWith("arc"))
- Directory.Delete(thisDir, true);
-
- string[] BannerFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT\\arc");
- string[] BannerDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT\\arc");
-
- foreach (string thisFile in BannerFiles)
- File.Delete(thisFile);
-
- if (BannerDirs.Length > 3)
- {
- foreach (string thisDir in BannerDirs)
- {
- if (!thisDir.ToLower().EndsWith("anim") &&
- !thisDir.ToLower().EndsWith("blyt") &&
- !thisDir.ToLower().EndsWith("timg"))
- Directory.Delete(thisDir, true);
- }
- }
-
- string[] AnimFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT\\arc\\anim");
- string[] AnimDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT\\arc\\anim");
-
- foreach (string thisFile in AnimFiles)
- {
- if (!thisFile.ToLower().EndsWith(".brlan"))
- File.Delete(thisFile);
- }
-
- foreach (string thisDir in AnimDirs)
- Directory.Delete(thisDir, true);
-
- string[] BlytFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT\\arc\\blyt");
- string[] BlytDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT\\arc\\blyt");
-
- foreach (string thisFile in BlytFiles)
- {
- if (!thisFile.ToLower().EndsWith(".brlyt"))
- File.Delete(thisFile);
- }
-
- foreach (string thisDir in BlytDirs)
- Directory.Delete(thisDir, true);
-
- string[] TimgFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT\\arc\\timg");
- string[] TimgDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT\\arc\\timg");
-
- foreach (string thisFile in TimgFiles)
- {
- if (!thisFile.ToLower().EndsWith(".tpl"))
- File.Delete(thisFile);
- }
-
- foreach (string thisDir in TimgDirs)
- Directory.Delete(thisDir, true);
- }
- else
- {
- string[] ArcFiles = Directory.GetFiles(TempBannerPath);
- string[] ArcDirs = Directory.GetDirectories(TempBannerPath);
-
- foreach (string thisFile in ArcFiles)
- File.Delete(thisFile);
- foreach (string thisDir in ArcDirs)
- if (!thisDir.ToLower().EndsWith("arc"))
- Directory.Delete(thisDir, true);
-
- string[] BannerFiles = Directory.GetFiles(TempBannerPath + "arc");
- string[] BannerDirs = Directory.GetDirectories(TempBannerPath + "arc");
-
- foreach (string thisFile in BannerFiles)
- File.Delete(thisFile);
-
- if (BannerDirs.Length > 3)
- {
- foreach (string thisDir in BannerDirs)
- {
- if (!thisDir.ToLower().EndsWith("anim") &&
- !thisDir.ToLower().EndsWith("blyt") &&
- !thisDir.ToLower().EndsWith("timg"))
- Directory.Delete(thisDir, true);
- }
- }
-
- string[] AnimFiles = Directory.GetFiles(TempBannerPath + "arc\\anim");
- string[] AnimDirs = Directory.GetDirectories(TempBannerPath + "arc\\anim");
-
- foreach (string thisFile in AnimFiles)
- {
- if (!thisFile.ToLower().EndsWith(".brlan"))
- File.Delete(thisFile);
- }
-
- foreach (string thisDir in AnimDirs)
- Directory.Delete(thisDir, true);
-
- string[] BlytFiles = Directory.GetFiles(TempBannerPath + "arc\\blyt");
- string[] BlytDirs = Directory.GetDirectories(TempBannerPath + "arc\\blyt");
-
- foreach (string thisFile in BlytFiles)
- {
- if (!thisFile.ToLower().EndsWith(".brlyt"))
- File.Delete(thisFile);
- }
-
- foreach (string thisDir in BlytDirs)
- Directory.Delete(thisDir, true);
-
- string[] TimgFiles = Directory.GetFiles(TempBannerPath + "arc\\timg");
- string[] TimgDirs = Directory.GetDirectories(TempBannerPath + "arc\\timg");
-
- foreach (string thisFile in TimgFiles)
- {
- if (!thisFile.ToLower().EndsWith(".tpl"))
- File.Delete(thisFile);
- }
-
- foreach (string thisDir in TimgDirs)
- Directory.Delete(thisDir, true);
- }
-
- //Check icon.bin_OUT / Icon Replace Path
- if (string.IsNullOrEmpty(IconReplace))
- {
- string[] ArcFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT");
- string[] ArcDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT");
-
- foreach (string thisFile in ArcFiles)
- File.Delete(thisFile);
- foreach (string thisDir in ArcDirs)
- if (!thisDir.ToLower().EndsWith("arc"))
- Directory.Delete(thisDir, true);
-
- string[] IconFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT\\arc");
- string[] IconDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT\\arc");
-
- foreach (string thisFile in IconFiles)
- File.Delete(thisFile);
-
- if (IconDirs.Length > 3)
- {
- foreach (string thisDir in IconDirs)
- {
- if (!thisDir.ToLower().EndsWith("anim") &&
- !thisDir.ToLower().EndsWith("blyt") &&
- !thisDir.ToLower().EndsWith("timg"))
- Directory.Delete(thisDir, true);
- }
- }
-
- string[] AnimFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT\\arc\\anim");
- string[] AnimDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT\\arc\\anim");
-
- foreach (string thisFile in AnimFiles)
- {
- if (!thisFile.ToLower().EndsWith(".brlan"))
- File.Delete(thisFile);
- }
-
- foreach (string thisDir in AnimDirs)
- Directory.Delete(thisDir, true);
-
- string[] BlytFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT\\arc\\blyt");
- string[] BlytDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT\\arc\\blyt");
-
- foreach (string thisFile in BlytFiles)
- {
- if (!thisFile.ToLower().EndsWith(".brlyt"))
- File.Delete(thisFile);
- }
-
- foreach (string thisDir in BlytDirs)
- Directory.Delete(thisDir, true);
-
- string[] TimgFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT\\arc\\timg");
- string[] TimgDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT\\arc\\timg");
-
- foreach (string thisFile in TimgFiles)
- {
- if (!thisFile.ToLower().EndsWith(".tpl"))
- File.Delete(thisFile);
- }
-
- foreach (string thisDir in TimgDirs)
- Directory.Delete(thisDir, true);
- }
- else
- {
- string[] ArcFiles = Directory.GetFiles(TempIconPath);
- string[] ArcDirs = Directory.GetDirectories(TempIconPath);
-
- foreach (string thisFile in ArcFiles)
- File.Delete(thisFile);
- foreach (string thisDir in ArcDirs)
- if (!thisDir.ToLower().EndsWith("arc"))
- Directory.Delete(thisDir, true);
-
- string[] IconFiles = Directory.GetFiles(TempIconPath + "arc");
- string[] IconDirs = Directory.GetDirectories(TempIconPath + "arc");
-
- foreach (string thisFile in IconFiles)
- File.Delete(thisFile);
-
- if (IconDirs.Length > 3)
- {
- foreach (string thisDir in IconDirs)
- {
- if (!thisDir.ToLower().EndsWith("anim") &&
- !thisDir.ToLower().EndsWith("blyt") &&
- !thisDir.ToLower().EndsWith("timg"))
- Directory.Delete(thisDir, true);
- }
- }
-
- string[] AnimFiles = Directory.GetFiles(TempIconPath + "arc\\anim");
- string[] AnimDirs = Directory.GetDirectories(TempIconPath + "arc\\anim");
-
- foreach (string thisFile in AnimFiles)
- {
- if (!thisFile.ToLower().EndsWith(".brlan"))
- File.Delete(thisFile);
- }
-
- foreach (string thisDir in AnimDirs)
- Directory.Delete(thisDir, true);
-
- string[] BlytFiles = Directory.GetFiles(TempIconPath + "arc\\blyt");
- string[] BlytDirs = Directory.GetDirectories(TempIconPath + "arc\\blyt");
-
- foreach (string thisFile in BlytFiles)
- {
- if (!thisFile.ToLower().EndsWith(".brlyt"))
- File.Delete(thisFile);
- }
-
- foreach (string thisDir in BlytDirs)
- Directory.Delete(thisDir, true);
-
- string[] TimgFiles = Directory.GetFiles(TempIconPath + "arc\\timg");
- string[] TimgDirs = Directory.GetDirectories(TempIconPath + "arc\\timg");
-
- foreach (string thisFile in TimgFiles)
- {
- if (!thisFile.ToLower().EndsWith(".tpl"))
- File.Delete(thisFile);
- }
-
- foreach (string thisDir in TimgDirs)
- Directory.Delete(thisDir, true);
- }
-
- return true;
- }
- catch (Exception ex) { ErrorBox(ex.Message); return false; }
- }
-
private void btnCreateWad_Click(object sender, EventArgs e)
{
Point mousePos = MousePosition;
if (mousePos.X < (this.Location.X + btnCreateWad.Location.X + Math.Ceiling(separatorBtn) + 3))
{
+ //SEND WAD
if (pbProgress.Value == 100)
{
if (!string.IsNullOrEmpty(tbSourceWad.Text))
@@ -1668,6 +1313,7 @@ namespace CustomizeMii
}
else
{
+ //CREATE WAD
if (pbProgress.Value == 100)
{
if (!string.IsNullOrEmpty(tbSourceWad.Text))
@@ -1690,6 +1336,14 @@ namespace CustomizeMii
CreationTimer.Start();
WadCreationInfo wadInfo = new WadCreationInfo();
+
+ if (!int.TryParse(tbStartupIos.Text, out wadInfo.requiredIos)) { ErrorBox("Please enter a valid Required IOS! (0 - 255)"); return; }
+ wadInfo.titles = new string[] { tbJapanese.Text, tbEnglish.Text, tbGerman.Text, tbFrench.Text, tbSpanish.Text, tbItalian.Text, tbDutch.Text, tbKorean.Text };
+ wadInfo.allLangTitle = tbAllLanguages.Text;
+ wadInfo.titleId = tbTitleID.Text;
+ wadInfo.sound = tbSound.Text;
+ wadInfo.dol = tbDol.Text;
+
wadInfo.outFile = sfd.FileName;
wadInfo.nandLoader = (WadCreationInfo.NandLoader)cmbNandLoader.SelectedIndex;
@@ -1699,6 +1353,8 @@ namespace CustomizeMii
bwCreateWad.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bwCreateWad_RunWorkerCompleted);
bwCreateWad.WorkerReportsProgress = true;
bwCreateWad.RunWorkerAsync(wadInfo);
+
+ return;
}
catch (Exception ex)
{
@@ -1709,6 +1365,10 @@ namespace CustomizeMii
}
}
}
+
+ currentProgress.progressValue = 100;
+ currentProgress.progressState = " ";
+ this.Invoke(ProgressUpdate);
}
}
@@ -2052,7 +1712,7 @@ namespace CustomizeMii
try
{
- string TplName = lbxBannerTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty);
+ string TplName = lbxBannerTpls.SelectedItem.ToString().Remove(lbxBannerTpls.SelectedItem.ToString().IndexOf('(', 0) - 1);
string CurBannerPath = GetCurBannerPath();
string[] brlytTpls = Wii.Brlyt.GetBrlytTpls(CurBannerPath + "blyt\\banner.brlyt", (File.Exists(CurBannerPath + "anim\\banner.brlan")) ? CurBannerPath + "anim\\banner.brlan" : CurBannerPath + "anim\\banner_loop.brlan");
@@ -2090,7 +1750,7 @@ namespace CustomizeMii
try
{
- string TplName = lbxIconTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty);
+ string TplName = lbxIconTpls.SelectedItem.ToString().Remove(lbxIconTpls.SelectedItem.ToString().IndexOf('(', 0) - 1);
string CurIconPath = GetCurIconPath();
string[] brlytTpls = Wii.Brlyt.GetBrlytTpls(CurIconPath + "blyt\\icon.brlyt", CurIconPath + "anim\\icon.brlan");
@@ -2165,11 +1825,11 @@ namespace CustomizeMii
{
if (!lbxBannerTpls.SelectedItem.ToString().EndsWith("(Transparent)"))
{
- string thisItem = lbxBannerTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty);
+ string thisItem = lbxBannerTpls.SelectedItem.ToString();
lbxBannerTpls.Items.Remove(lbxBannerTpls.SelectedItem);
lbxBannerTpls.Items.Add(thisItem + " (Transparent)");
lbxBannerTpls.SelectedItem = thisItem + " (Transparent)";
- BannerTransparents.Add(thisItem);
+ BannerTransparents.Add(thisItem.Remove(thisItem.IndexOf('(', 0) - 1));
}
}
catch { }
@@ -2178,11 +1838,11 @@ namespace CustomizeMii
{
try
{
- string thisItem = lbxBannerTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty);
+ string thisItem = lbxBannerTpls.SelectedItem.ToString();
lbxBannerTpls.Items.Remove(lbxBannerTpls.SelectedItem);
lbxBannerTpls.Items.Add(thisItem.Replace(" (Transparent)", string.Empty));
lbxBannerTpls.SelectedItem = thisItem.Replace(" (Transparent)", string.Empty);
- BannerTransparents.Remove(thisItem.Replace(" (Transparent)", string.Empty));
+ BannerTransparents.Remove(thisItem.Remove(thisItem.IndexOf('(', 0) - 1));
}
catch { }
}
@@ -2201,11 +1861,11 @@ namespace CustomizeMii
{
if (!lbxIconTpls.SelectedItem.ToString().EndsWith("(Transparent)"))
{
- string thisItem = lbxIconTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty);
+ string thisItem = lbxIconTpls.SelectedItem.ToString();
lbxIconTpls.Items.Remove(lbxIconTpls.SelectedItem);
lbxIconTpls.Items.Add(thisItem + " (Transparent)");
lbxIconTpls.SelectedItem = thisItem + " (Transparent)";
- IconTransparents.Add(thisItem);
+ IconTransparents.Add(thisItem.Remove(thisItem.IndexOf('(', 0) - 1));
}
}
catch { }
@@ -2214,11 +1874,11 @@ namespace CustomizeMii
{
try
{
- string thisItem = lbxIconTpls.SelectedItem.ToString().Replace(" (Transparent)", string.Empty);
+ string thisItem = lbxIconTpls.SelectedItem.ToString();
lbxIconTpls.Items.Remove(lbxIconTpls.SelectedItem);
lbxIconTpls.Items.Add(thisItem.Replace(" (Transparent)", string.Empty));
lbxIconTpls.SelectedItem = thisItem.Replace(" (Transparent)", string.Empty);
- IconTransparents.Remove(thisItem.Replace(" (Transparent)", string.Empty));
+ IconTransparents.Remove(thisItem.Remove(thisItem.IndexOf('(', 0) - 1));
}
catch { }
}
@@ -2257,6 +1917,7 @@ namespace CustomizeMii
private void cmForwarderItem_Click(object sender, EventArgs e)
{
+#if !Mono
ToolStripMenuItem cmSender = sender as ToolStripMenuItem;
if (cmSender == cmSimpleForwarder)
@@ -2280,6 +1941,7 @@ namespace CustomizeMii
ErrorBox(ex.Message);
}
}
+#endif
}
private void btnOptionsExtract_Click(object sender, EventArgs e)
@@ -2687,6 +2349,7 @@ namespace CustomizeMii
tbJapanese.Text = tempText.Remove(startIndex, 7).Insert(startIndex, "チャンネル");
tbGerman.Text = tempText.Remove(startIndex, 7).Insert(startIndex, "Kanal");
tbDutch.Text = tempText.Remove(startIndex, 7).Insert(startIndex, "Kanaal");
+ tbKorean.Text = tempText.Remove(startIndex, 7).Insert(startIndex, "채널");
try
{
@@ -2720,6 +2383,7 @@ namespace CustomizeMii
tbSpanish.Text = string.Empty;
tbItalian.Text = string.Empty;
tbDutch.Text = string.Empty;
+ tbKorean.Text = string.Empty;
ErrorBox(ex.Message);
}
@@ -2729,5 +2393,15 @@ namespace CustomizeMii
{
llbTranslateChannel.Enabled = tbAllLanguages.Text.ToLower().Contains("channel");
}
+
+ private void tbStartupIos_KeyPress(object sender, KeyPressEventArgs e)
+ {
+ e.Handled = !char.IsDigit(e.KeyChar) && e.KeyChar != '\b';
+ }
+
+ private void llbMultiReplace_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+ {
+ MultiReplace(sender == llbBannerMultiReplace);
+ }
}
}
diff --git a/CustomizeMii/CustomizeMii_Main.resx b/CustomizeMii/CustomizeMii_Main.resx
index 4f291d3..2f855fe 100644
--- a/CustomizeMii/CustomizeMii_Main.resx
+++ b/CustomizeMii/CustomizeMii_Main.resx
@@ -122,6 +122,7 @@
Xuzz for his idea and hard work
WiiCrazy / I.R.on for CustomizeMii Installer
Xuzz, SquidMan, megazig, Matt_P, Omega and The Lemon Man for Wii.py
+megazig for his BNS conversion code
SquidMan for Zetsubou
Andre Perrot for gbalzss
comex and Waninkoko for both their NAND Loader
diff --git a/CustomizeMii/CustomizeMii_Preview.cs b/CustomizeMii/CustomizeMii_Preview.cs
index f5375ab..24d8422 100644
--- a/CustomizeMii/CustomizeMii_Preview.cs
+++ b/CustomizeMii/CustomizeMii_Preview.cs
@@ -150,6 +150,8 @@ namespace CustomizeMii
images[0, cbBanner.SelectedIndex].tplFormat.ToLower() == "ci14x2")
lbNoPreview.Visible = true;
else lbNoPreview.Visible = false;
+
+ cbIcon.SelectedIndex = -1;
}
}
@@ -195,6 +197,8 @@ namespace CustomizeMii
images[1, cbIcon.SelectedIndex].tplFormat.ToLower() == "ci14x2")
lbNoPreview.Visible = true;
else lbNoPreview.Visible = false;
+
+ cbBanner.SelectedIndex = -1;
}
}
diff --git a/CustomizeMii/CustomizeMii_PrivateFunctions.cs b/CustomizeMii/CustomizeMii_PrivateFunctions.cs
index f9992a3..eca3af7 100644
--- a/CustomizeMii/CustomizeMii_PrivateFunctions.cs
+++ b/CustomizeMii/CustomizeMii_PrivateFunctions.cs
@@ -34,6 +34,328 @@ namespace CustomizeMii
private delegate void SetLabelInvoker(string text, Label lb);
private delegate void SetButtonInvoker(string text, Button btn);
+ private bool CheckUnpackFolder()
+ {
+ try
+ {
+ //Check Unpack Root
+ string[] RootFiles = Directory.GetFiles(TempUnpackPath);
+ string[] RootDirs = Directory.GetDirectories(TempUnpackPath);
+
+ foreach (string thisFile in RootFiles)
+ {
+ if (!thisFile.ToLower().EndsWith(".app") &&
+ !thisFile.ToLower().EndsWith(".cert") &&
+ !thisFile.ToLower().EndsWith(".tik") &&
+ !thisFile.ToLower().EndsWith(".tmd"))
+ File.Delete(thisFile);
+ }
+
+ if (RootDirs.Length > 1)
+ {
+ foreach (string thisDir in RootDirs)
+ {
+ if (!thisDir.EndsWith("00000000.app_OUT"))
+ Directory.Delete(thisDir, true);
+ }
+ }
+
+ //Check 00000000.app_OUT
+ string[] MetaFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT");
+ string[] MetaDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT");
+
+ foreach (string thisFile in MetaFiles)
+ File.Delete(thisFile);
+ foreach (string thisDir in MetaDirs)
+ if (!thisDir.ToLower().EndsWith("meta"))
+ Directory.Delete(thisDir, true);
+
+ string[] AppFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta");
+ string[] AppDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta");
+
+ foreach (string thisFile in AppFiles)
+ {
+ if (!thisFile.ToLower().EndsWith("banner.bin") &&
+ !thisFile.ToLower().EndsWith("icon.bin") &&
+ !thisFile.ToLower().EndsWith("sound.bin"))
+ File.Delete(thisFile);
+ }
+
+ if (AppDirs.Length > 2)
+ {
+ foreach (string thisDir in AppDirs)
+ {
+ if (!thisDir.EndsWith("banner.bin_OUT") &&
+ !thisDir.EndsWith("icon.bin_OUT"))
+ Directory.Delete(thisDir, true);
+ }
+ }
+
+ //Check banner.bin_OUT / Banner Replace Path
+ if (string.IsNullOrEmpty(BannerReplace))
+ {
+ string[] ArcFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT");
+ string[] ArcDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT");
+
+ foreach (string thisFile in ArcFiles)
+ File.Delete(thisFile);
+ foreach (string thisDir in ArcDirs)
+ if (!thisDir.ToLower().EndsWith("arc"))
+ Directory.Delete(thisDir, true);
+
+ string[] BannerFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT\\arc");
+ string[] BannerDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT\\arc");
+
+ foreach (string thisFile in BannerFiles)
+ File.Delete(thisFile);
+
+ if (BannerDirs.Length > 3)
+ {
+ foreach (string thisDir in BannerDirs)
+ {
+ if (!thisDir.ToLower().EndsWith("anim") &&
+ !thisDir.ToLower().EndsWith("blyt") &&
+ !thisDir.ToLower().EndsWith("timg"))
+ Directory.Delete(thisDir, true);
+ }
+ }
+
+ string[] AnimFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT\\arc\\anim");
+ string[] AnimDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT\\arc\\anim");
+
+ foreach (string thisFile in AnimFiles)
+ {
+ if (!thisFile.ToLower().EndsWith(".brlan"))
+ File.Delete(thisFile);
+ }
+
+ foreach (string thisDir in AnimDirs)
+ Directory.Delete(thisDir, true);
+
+ string[] BlytFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT\\arc\\blyt");
+ string[] BlytDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT\\arc\\blyt");
+
+ foreach (string thisFile in BlytFiles)
+ {
+ if (!thisFile.ToLower().EndsWith(".brlyt"))
+ File.Delete(thisFile);
+ }
+
+ foreach (string thisDir in BlytDirs)
+ Directory.Delete(thisDir, true);
+
+ string[] TimgFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT\\arc\\timg");
+ string[] TimgDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\banner.bin_OUT\\arc\\timg");
+
+ foreach (string thisFile in TimgFiles)
+ {
+ if (!thisFile.ToLower().EndsWith(".tpl"))
+ File.Delete(thisFile);
+ }
+
+ foreach (string thisDir in TimgDirs)
+ Directory.Delete(thisDir, true);
+ }
+ else
+ {
+ string[] ArcFiles = Directory.GetFiles(TempBannerPath);
+ string[] ArcDirs = Directory.GetDirectories(TempBannerPath);
+
+ foreach (string thisFile in ArcFiles)
+ File.Delete(thisFile);
+ foreach (string thisDir in ArcDirs)
+ if (!thisDir.ToLower().EndsWith("arc"))
+ Directory.Delete(thisDir, true);
+
+ string[] BannerFiles = Directory.GetFiles(TempBannerPath + "arc");
+ string[] BannerDirs = Directory.GetDirectories(TempBannerPath + "arc");
+
+ foreach (string thisFile in BannerFiles)
+ File.Delete(thisFile);
+
+ if (BannerDirs.Length > 3)
+ {
+ foreach (string thisDir in BannerDirs)
+ {
+ if (!thisDir.ToLower().EndsWith("anim") &&
+ !thisDir.ToLower().EndsWith("blyt") &&
+ !thisDir.ToLower().EndsWith("timg"))
+ Directory.Delete(thisDir, true);
+ }
+ }
+
+ string[] AnimFiles = Directory.GetFiles(TempBannerPath + "arc\\anim");
+ string[] AnimDirs = Directory.GetDirectories(TempBannerPath + "arc\\anim");
+
+ foreach (string thisFile in AnimFiles)
+ {
+ if (!thisFile.ToLower().EndsWith(".brlan"))
+ File.Delete(thisFile);
+ }
+
+ foreach (string thisDir in AnimDirs)
+ Directory.Delete(thisDir, true);
+
+ string[] BlytFiles = Directory.GetFiles(TempBannerPath + "arc\\blyt");
+ string[] BlytDirs = Directory.GetDirectories(TempBannerPath + "arc\\blyt");
+
+ foreach (string thisFile in BlytFiles)
+ {
+ if (!thisFile.ToLower().EndsWith(".brlyt"))
+ File.Delete(thisFile);
+ }
+
+ foreach (string thisDir in BlytDirs)
+ Directory.Delete(thisDir, true);
+
+ string[] TimgFiles = Directory.GetFiles(TempBannerPath + "arc\\timg");
+ string[] TimgDirs = Directory.GetDirectories(TempBannerPath + "arc\\timg");
+
+ foreach (string thisFile in TimgFiles)
+ {
+ if (!thisFile.ToLower().EndsWith(".tpl"))
+ File.Delete(thisFile);
+ }
+
+ foreach (string thisDir in TimgDirs)
+ Directory.Delete(thisDir, true);
+ }
+
+ //Check icon.bin_OUT / Icon Replace Path
+ if (string.IsNullOrEmpty(IconReplace))
+ {
+ string[] ArcFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT");
+ string[] ArcDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT");
+
+ foreach (string thisFile in ArcFiles)
+ File.Delete(thisFile);
+ foreach (string thisDir in ArcDirs)
+ if (!thisDir.ToLower().EndsWith("arc"))
+ Directory.Delete(thisDir, true);
+
+ string[] IconFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT\\arc");
+ string[] IconDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT\\arc");
+
+ foreach (string thisFile in IconFiles)
+ File.Delete(thisFile);
+
+ if (IconDirs.Length > 3)
+ {
+ foreach (string thisDir in IconDirs)
+ {
+ if (!thisDir.ToLower().EndsWith("anim") &&
+ !thisDir.ToLower().EndsWith("blyt") &&
+ !thisDir.ToLower().EndsWith("timg"))
+ Directory.Delete(thisDir, true);
+ }
+ }
+
+ string[] AnimFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT\\arc\\anim");
+ string[] AnimDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT\\arc\\anim");
+
+ foreach (string thisFile in AnimFiles)
+ {
+ if (!thisFile.ToLower().EndsWith(".brlan"))
+ File.Delete(thisFile);
+ }
+
+ foreach (string thisDir in AnimDirs)
+ Directory.Delete(thisDir, true);
+
+ string[] BlytFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT\\arc\\blyt");
+ string[] BlytDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT\\arc\\blyt");
+
+ foreach (string thisFile in BlytFiles)
+ {
+ if (!thisFile.ToLower().EndsWith(".brlyt"))
+ File.Delete(thisFile);
+ }
+
+ foreach (string thisDir in BlytDirs)
+ Directory.Delete(thisDir, true);
+
+ string[] TimgFiles = Directory.GetFiles(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT\\arc\\timg");
+ string[] TimgDirs = Directory.GetDirectories(TempUnpackPath + "00000000.app_OUT\\meta\\icon.bin_OUT\\arc\\timg");
+
+ foreach (string thisFile in TimgFiles)
+ {
+ if (!thisFile.ToLower().EndsWith(".tpl"))
+ File.Delete(thisFile);
+ }
+
+ foreach (string thisDir in TimgDirs)
+ Directory.Delete(thisDir, true);
+ }
+ else
+ {
+ string[] ArcFiles = Directory.GetFiles(TempIconPath);
+ string[] ArcDirs = Directory.GetDirectories(TempIconPath);
+
+ foreach (string thisFile in ArcFiles)
+ File.Delete(thisFile);
+ foreach (string thisDir in ArcDirs)
+ if (!thisDir.ToLower().EndsWith("arc"))
+ Directory.Delete(thisDir, true);
+
+ string[] IconFiles = Directory.GetFiles(TempIconPath + "arc");
+ string[] IconDirs = Directory.GetDirectories(TempIconPath + "arc");
+
+ foreach (string thisFile in IconFiles)
+ File.Delete(thisFile);
+
+ if (IconDirs.Length > 3)
+ {
+ foreach (string thisDir in IconDirs)
+ {
+ if (!thisDir.ToLower().EndsWith("anim") &&
+ !thisDir.ToLower().EndsWith("blyt") &&
+ !thisDir.ToLower().EndsWith("timg"))
+ Directory.Delete(thisDir, true);
+ }
+ }
+
+ string[] AnimFiles = Directory.GetFiles(TempIconPath + "arc\\anim");
+ string[] AnimDirs = Directory.GetDirectories(TempIconPath + "arc\\anim");
+
+ foreach (string thisFile in AnimFiles)
+ {
+ if (!thisFile.ToLower().EndsWith(".brlan"))
+ File.Delete(thisFile);
+ }
+
+ foreach (string thisDir in AnimDirs)
+ Directory.Delete(thisDir, true);
+
+ string[] BlytFiles = Directory.GetFiles(TempIconPath + "arc\\blyt");
+ string[] BlytDirs = Directory.GetDirectories(TempIconPath + "arc\\blyt");
+
+ foreach (string thisFile in BlytFiles)
+ {
+ if (!thisFile.ToLower().EndsWith(".brlyt"))
+ File.Delete(thisFile);
+ }
+
+ foreach (string thisDir in BlytDirs)
+ Directory.Delete(thisDir, true);
+
+ string[] TimgFiles = Directory.GetFiles(TempIconPath + "arc\\timg");
+ string[] TimgDirs = Directory.GetDirectories(TempIconPath + "arc\\timg");
+
+ foreach (string thisFile in TimgFiles)
+ {
+ if (!thisFile.ToLower().EndsWith(".tpl"))
+ File.Delete(thisFile);
+ }
+
+ foreach (string thisDir in TimgDirs)
+ Directory.Delete(thisDir, true);
+ }
+
+ return true;
+ }
+ catch { return false; }
+ }
+
private bool FailureCheck()
{
try
@@ -86,6 +408,17 @@ namespace CustomizeMii
ErrorBox("Please enter a valid Title ID!"); return false;
}
+ //Check Required IOS Box
+ int tmp;
+ if (!int.TryParse(tbStartupIos.Text, out tmp))
+ {
+ ErrorBox("Please enter a valid Required IOS! (0 - 255)"); return false;
+ }
+ else if (tmp < 0 || tmp > 255)
+ {
+ ErrorBox("Please enter a valid Required IOS! (0 - 255)"); return false;
+ }
+
//Check brlan files
string[] ValidBrlans = new string[] { "banner.brlan", "icon.brlan", "banner_loop.brlan", "icon_loop.brlan", "banner_start.brlan", "icon_start.brlan" };
foreach (string thisBrlan in lbxBrlanBanner.Items)
@@ -108,8 +441,8 @@ namespace CustomizeMii
//Check TPLs
List BannerTpls = new List();
List IconTpls = new List();
- foreach (string thisTpl in lbxBannerTpls.Items) BannerTpls.Add(thisTpl.Replace(" (Transparent)", string.Empty));
- foreach (string thisTpl in lbxIconTpls.Items) IconTpls.Add(thisTpl.Replace(" (Transparent)", string.Empty));
+ foreach (string thisTpl in lbxBannerTpls.Items) BannerTpls.Add(thisTpl.Remove(thisTpl.IndexOf('(', 0) - 1));
+ foreach (string thisTpl in lbxIconTpls.Items) IconTpls.Add(thisTpl.Remove(thisTpl.IndexOf('(', 0) - 1));
string[] BannerBrlytPath;
string[] BannerBrlanPath;
@@ -477,9 +810,11 @@ namespace CustomizeMii
for (int i = 0; i < tpls.Length; i++)
{
if (BannerTransparents.Contains(tpls[i].Remove(0, tpls[i].LastIndexOf('\\') + 1)))
- lbxBannerTpls.Items.Add(tpls[i].Remove(0, tpls[i].LastIndexOf('\\') + 1) + " (Transparent)");
+ lbxBannerTpls.Items.Add(tpls[i].Remove(0, tpls[i].LastIndexOf('\\') + 1) +
+ string.Format(" ({0} x {1})", Wii.TPL.GetTextureWidth(File.ReadAllBytes(tpls[i])), Wii.TPL.GetTextureHeight(File.ReadAllBytes(tpls[i]))) + " (Transparent)");
else
- lbxBannerTpls.Items.Add(tpls[i].Remove(0, tpls[i].LastIndexOf('\\') + 1));
+ lbxBannerTpls.Items.Add(tpls[i].Remove(0, tpls[i].LastIndexOf('\\') + 1) +
+ string.Format(" ({0} x {1})", Wii.TPL.GetTextureWidth(File.ReadAllBytes(tpls[i])), Wii.TPL.GetTextureHeight(File.ReadAllBytes(tpls[i]))));
}
}
}
@@ -494,9 +829,11 @@ namespace CustomizeMii
for (int i = 0; i < tpls.Length; i++)
{
if (IconTransparents.Contains(tpls[i].Remove(0, tpls[i].LastIndexOf('\\') + 1)))
- lbxIconTpls.Items.Add(tpls[i].Remove(0, tpls[i].LastIndexOf('\\') + 1) + " (Transparent)");
+ lbxIconTpls.Items.Add(tpls[i].Remove(0, tpls[i].LastIndexOf('\\') + 1) +
+ string.Format(" ({0} x {1})", Wii.TPL.GetTextureWidth(File.ReadAllBytes(tpls[i])), Wii.TPL.GetTextureHeight(File.ReadAllBytes(tpls[i]))) + " (Transparent)");
else
- lbxIconTpls.Items.Add(tpls[i].Remove(0, tpls[i].LastIndexOf('\\') + 1));
+ lbxIconTpls.Items.Add(tpls[i].Remove(0, tpls[i].LastIndexOf('\\') + 1) +
+ string.Format(" ({0} x {1})", Wii.TPL.GetTextureWidth(File.ReadAllBytes(tpls[i])), Wii.TPL.GetTextureHeight(File.ReadAllBytes(tpls[i]))));
}
}
}
@@ -641,7 +978,7 @@ namespace CustomizeMii
{
if (thisTpl.EndsWith("(Transparent)"))
{
- string Tpl = GetCurBannerPath() + "timg\\" + thisTpl.Replace(" (Transparent)", string.Empty);
+ string Tpl = GetCurBannerPath() + "timg\\" + thisTpl.Remove(thisTpl.IndexOf('(', 0) - 1);
byte[] TplArray = Wii.Tools.LoadFileToByteArray(Tpl);
int Width = Wii.TPL.GetTextureWidth(TplArray);
int Height = Wii.TPL.GetTextureHeight(TplArray);
@@ -658,7 +995,7 @@ namespace CustomizeMii
{
if (thisTpl.EndsWith("(Transparent)"))
{
- string Tpl = GetCurIconPath() + "timg\\" + thisTpl.Replace(" (Transparent)", string.Empty);
+ string Tpl = GetCurIconPath() + "timg\\" + thisTpl.Remove(thisTpl.IndexOf('(', 0) - 1);
byte[] TplArray = Wii.Tools.LoadFileToByteArray(Tpl);
int Width = Wii.TPL.GetTextureWidth(TplArray);
int Height = Wii.TPL.GetTextureHeight(TplArray);
@@ -751,7 +1088,7 @@ namespace CustomizeMii
using (Image img = Image.FromFile(inputFile))
{
Wii.TPL.ConvertToTPL(img, CurPath + "timg\\" + TplName, TplFormat);
- lbx.Items.Add(TplName);
+ lbx.Items.Add(TplName + string.Format(" ({0} x {1})", img.Width, img.Height));
}
}
}
@@ -952,5 +1289,59 @@ namespace CustomizeMii
}
}
}
+
+ private void MultiReplace(bool banner)
+ {
+ FolderBrowserDialog fbd = new FolderBrowserDialog();
+ fbd.Description = "Please select the folder where the images are in.\nThe images must have the same filename as the TPLs!";
+
+ if (fbd.ShowDialog() == DialogResult.OK)
+ {
+ string imageDir = fbd.SelectedPath;
+ string tplDir = ((banner) ? GetCurBannerPath() : GetCurIconPath()) + "timg\\";
+ string[] tpls = Directory.GetFiles(tplDir, "*.tpl");
+
+ List replacedTpls = new List();
+ foreach (string thisTpl in tpls)
+ {
+ string image = string.Empty;
+
+ if (File.Exists(imageDir + "\\" + Path.GetFileNameWithoutExtension(thisTpl) + ".png"))
+ image = imageDir + "\\" + Path.GetFileNameWithoutExtension(thisTpl) + ".png";
+ else if (File.Exists(imageDir + "\\" + Path.GetFileNameWithoutExtension(thisTpl) + ".jpg"))
+ image = imageDir + "\\" + Path.GetFileNameWithoutExtension(thisTpl) + ".jpg";
+ else if (File.Exists(imageDir + "\\" + Path.GetFileNameWithoutExtension(thisTpl) + ".gif"))
+ image = imageDir + "\\" + Path.GetFileNameWithoutExtension(thisTpl) + ".gif";
+ else if (File.Exists(imageDir + "\\" + Path.GetFileNameWithoutExtension(thisTpl) + ".bmp"))
+ image = imageDir + "\\" + Path.GetFileNameWithoutExtension(thisTpl) + ".bmp";
+ else continue;
+
+ try
+ {
+ Image img = Image.FromFile(image);
+ byte[] temp = File.ReadAllBytes(thisTpl);
+ int width = Wii.TPL.GetTextureWidth(temp);
+ int height = Wii.TPL.GetTextureHeight(temp);
+ int format = Wii.TPL.GetTextureFormat(temp);
+
+ if (img.Width != width || img.Height != height)
+ img = ResizeImage(img, width, height);
+
+ File.Delete(thisTpl);
+ Wii.TPL.ConvertToTPL(img, thisTpl, format);
+
+ replacedTpls.Add(Path.GetFileName(thisTpl));
+ }
+ catch { }
+ }
+
+ if (replacedTpls.Count > 0)
+ {
+ string replaced = string.Join("\n", replacedTpls.ToArray());
+ InfoBox(string.Format("The following TPLs were successfully replaced:\n\n{0}", replaced));
+ }
+ else ErrorBox("No TPLs were replaced, did you name the images right?");
+ }
+ }
}
}
diff --git a/CustomizeMii/CustomizeMii_Structs.cs b/CustomizeMii/CustomizeMii_Structs.cs
index c817149..13b05cb 100644
--- a/CustomizeMii/CustomizeMii_Structs.cs
+++ b/CustomizeMii/CustomizeMii_Structs.cs
@@ -60,6 +60,12 @@ namespace CustomizeMii
Waninkoko = 1
}
+ public string titleId;
+ public string[] titles;
+ public string allLangTitle;
+ public int requiredIos;
+ public string sound;
+ public string dol;
public string outFile;
public NandLoader nandLoader;
public bool sendToWii;
diff --git a/CustomizeMii/CustomizeMii_Transmit.Designer.cs b/CustomizeMii/CustomizeMii_Transmit.Designer.cs
index 2ef0dde..00bb024 100644
--- a/CustomizeMii/CustomizeMii_Transmit.Designer.cs
+++ b/CustomizeMii/CustomizeMii_Transmit.Designer.cs
@@ -135,6 +135,7 @@ namespace CustomizeMii
this.AcceptButton = this.btnTransmit;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.BackColor = System.Drawing.SystemColors.Control;
this.CancelButton = this.btnCancel;
this.ClientSize = new System.Drawing.Size(273, 145);
this.Controls.Add(this.btnCancel);
diff --git a/CustomizeMii/Properties/AssemblyInfo.cs b/CustomizeMii/Properties/AssemblyInfo.cs
index 753fac6..e66282e 100644
--- a/CustomizeMii/Properties/AssemblyInfo.cs
+++ b/CustomizeMii/Properties/AssemblyInfo.cs
@@ -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.2.0.0")]
-[assembly: AssemblyFileVersion("2.2.0.0")]
+[assembly: AssemblyVersion("2.3.0.0")]
+[assembly: AssemblyFileVersion("2.3.0.0")]
[assembly: NeutralResourcesLanguageAttribute("en")]
diff --git a/CustomizeMii/Readme.txt b/CustomizeMii/Readme.txt
index 75e0965..c6f98a1 100644
--- a/CustomizeMii/Readme.txt
+++ b/CustomizeMii/Readme.txt
@@ -9,6 +9,13 @@ Thanks to icefire / Xuzz for the basic idea of this Application!
-----------------------------------------------------------------------------------------
Changelog:
+Version 2.3
+ - Fixed bug when extracting icon images
+ - Added ability to change the startup IOS (IOS used to launch the title)
+ - Added support for Korean channel title (reading and writing)
+ - Added TPL width and height to Banner and Icon list
+ - Added ability to replace multiple TPLs at once (images must have the same filename!)
+
Version 2.2
- Fixed some bugs with the preview window
- Fixed Complex Forwarder in combination with Waninkoko's NAND Loader
@@ -89,11 +96,12 @@ Thanks:
Xuzz for his idea and hard work
WiiCrazy / I.R.on for CustomizeMii Installer
Xuzz, SquidMan, megazig, Matt_P, Omega and The Lemon Man for Wii.py
+megazig for his BNS conversion code
SquidMan for Zetsubou
Andre Perrot for gbalzss
comex and Waninkoko for both their NAND Loader
-djdynamite123 for the forwarder base files (ForwardMii-Plugin)
-The USB Loader GX Team for their forwarder source (ForwardMii-Plugin)
+djdynamite123 for the forwarder base files
+The USB Loader GX Team for their forwarder source
-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
diff --git a/CustomizeMii/Wii.cs b/CustomizeMii/Wii.cs
index 01d9930..729454d 100644
--- a/CustomizeMii/Wii.cs
+++ b/CustomizeMii/Wii.cs
@@ -583,6 +583,14 @@ namespace Wii
string tikid = Convert.ToChar(wadtiktmd[tikpos + 0x1e0]).ToString() + Convert.ToChar(wadtiktmd[tikpos + 0x1e1]).ToString() + Convert.ToChar(wadtiktmd[tikpos + 0x1e2]).ToString() + Convert.ToChar(wadtiktmd[tikpos + 0x1e3]).ToString();
return tikid;
}
+ else if (channeltype.Contains("MIOS"))
+ {
+ return "MIOS";
+ }
+ else if (channeltype.Contains("BC"))
+ {
+ return "BC";
+ }
else if (channeltype.Contains("IOS"))
{
int tikid = Tools.HexStringToInt(wadtiktmd[tikpos + 0x1e0].ToString("x2") + wadtiktmd[tikpos + 0x1e1].ToString("x2") + wadtiktmd[tikpos + 0x1e2].ToString("x2") + wadtiktmd[tikpos + 0x1e3].ToString("x2"));
@@ -665,7 +673,7 @@ namespace Wii
{
if (!channeltype.Contains("Hidden"))
{
- string[] titles = new string[7];
+ string[] titles = new string[8];
string[,] conts = GetContentInfo(wadfile);
byte[] titlekey = GetTitleKey(wadfile);
@@ -713,6 +721,15 @@ namespace Wii
count++;
}
+ for (int i = jappos + (9 * 84); i < (jappos + (9 * 84)) + 40; i += 2)
+ {
+ if (contenthandle[i] != 0x00)
+ {
+ char temp = BitConverter.ToChar(new byte[] { contenthandle[i], contenthandle[i - 1] }, 0);
+ titles[count] += temp;
+ }
+ }
+
return titles;
}
else
@@ -727,17 +744,17 @@ namespace Wii
}
}
- for (int i = 1; i < 7; i++)
+ for (int i = 1; i < 8; i++)
titles[i] = titles[0];
return titles;
}
}
- else return new string[7];
+ else return new string[8];
}
- else return new string[7];
+ else return new string[8];
}
- else return new string[7];
+ else return new string[8];
}
///
@@ -760,7 +777,7 @@ namespace Wii
///
public static string[] GetChannelTitlesFromApp(byte[] app)
{
- string[] titles = new string[7];
+ string[] titles = new string[8];
int imetpos = 0;
int length = 400;
@@ -797,6 +814,15 @@ namespace Wii
count++;
}
+
+ for (int i = jappos + (9 * 84); i < (jappos + (9 * 84)) + 40; i += 2)
+ {
+ if (app[i] != 0x00)
+ {
+ char temp = BitConverter.ToChar(new byte[] { app[i], app[i - 1] }, 0);
+ titles[count] += temp;
+ }
+ }
}
return titles;
@@ -1418,12 +1444,13 @@ namespace Wii
///
public static byte[] ChangeChannelTitle(byte[] wadfile, string title)
{
- return ChangeChannelTitle(wadfile, title, title, title, title, title, title, title);
+ return ChangeChannelTitle(wadfile, title, title, title, title, title, title, title, title);
}
///
- /// Changes the Channel Title of the wad file
- /// Each language has a specific title
+ /// Changes the Channel Title of the wad file.
+ /// Each language has a specific title.
+ /// 0 = Japanese, 1 = English, 2 = German, 3 = French, 4 = Spanish, 5 = Italian, 6 = Dutch, 7 = Korean
///
///
///
@@ -1433,10 +1460,10 @@ namespace Wii
///
///
///
- public static void ChangeChannelTitle(string wadfile, string jap, string eng, string ger, string fra, string spa, string ita, string dut)
+ public static void ChangeChannelTitle(string wadfile, params string[] titles)
{
byte[] wadarray = Tools.LoadFileToByteArray(wadfile);
- wadarray = ChangeChannelTitle(wadarray, jap, eng, ger, fra, spa, ita, dut);
+ wadarray = ChangeChannelTitle(wadarray, titles[0], titles[1], titles[2], titles[3], titles[4], titles[5], titles[6], (titles.Length > 7) ? titles[8] : "");
using (FileStream fs = new FileStream(wadfile, FileMode.Open, FileAccess.Write))
{
@@ -1446,29 +1473,27 @@ namespace Wii
}
///
- /// Changes the Channel Title of the wad file
- /// Each language has a specific title
+ /// Changes the Channel Title of the wad file.
+ /// Each language has a specific title.
+ /// 0 = Japanese, 1 = English, 2 = German, 3 = French, 4 = Spanish, 5 = Italian, 6 = Dutch, 7 = Korean
///
///
- /// Japanese Title
- /// English Title
- /// German Title
- /// French Title
- /// Spanish Title
- /// Italian Title
- /// Dutch Title
///
- public static byte[] ChangeChannelTitle(byte[] wadfile, string jap, string eng, string ger, string fra, string spa, string ita, string dut)
+ public static byte[] ChangeChannelTitle(byte[] wadfile, params string[] titles)
{
+ if (titles.Length < 7) throw new Exception("A title must be given for each language!");
+
Tools.ChangeProgress(0);
- char[] japchars = jap.ToCharArray();
- char[] engchars = eng.ToCharArray();
- char[] gerchars = ger.ToCharArray();
- char[] frachars = fra.ToCharArray();
- char[] spachars = spa.ToCharArray();
- char[] itachars = ita.ToCharArray();
- char[] dutchars = dut.ToCharArray();
+ char[] japchars = titles[0].ToCharArray();
+ char[] engchars = titles[1].ToCharArray();
+ char[] gerchars = titles[2].ToCharArray();
+ char[] frachars = titles[3].ToCharArray();
+ char[] spachars = titles[4].ToCharArray();
+ char[] itachars = titles[5].ToCharArray();
+ char[] dutchars = titles[6].ToCharArray();
+ char[] korchars = new char[] { };
+ if (titles.Length > 7) korchars = titles[7].ToCharArray();
byte[] titlekey = WadInfo.GetTitleKey(wadfile);
string[,] conts = WadInfo.GetContentInfo(wadfile);
@@ -1557,6 +1582,12 @@ namespace Wii
contenthandle[x + 29 + 84 * 6 - 1] = BitConverter.GetBytes(dutchars[count])[1];
}
else { contenthandle[x + 29 + 84 * 6] = 0x00; contenthandle[x + 29 + 84 * 6 - 1] = 0x00; }
+ if (korchars.Length > count)
+ {
+ contenthandle[x + 29 + 84 * 9] = BitConverter.GetBytes(korchars[count])[0];
+ contenthandle[x + 29 + 84 * 9 - 1] = BitConverter.GetBytes(korchars[count])[1];
+ }
+ else { contenthandle[x + 29 + 84 * 9] = 0x00; contenthandle[x + 29 + 84 * 9 - 1] = 0x00; }
count++;
}
@@ -1576,6 +1607,7 @@ namespace Wii
wadfile[contentpos + y] = contenthandle[y];
}
+ Tools.ChangeProgress(80);
//SHA1 in TMD
byte[] tmd = Tools.GetPartOfByteArray(wadfile, tmdpos, tmdsize);
for (int i = 0; i < 20; i++)
@@ -1583,55 +1615,6 @@ namespace Wii
TruchaSign(tmd, 1);
wadfile = Tools.InsertByteArray(wadfile, tmd, tmdpos);
- int footer = WadInfo.GetFooterSize(wadfile);
-
- Tools.ChangeProgress(80);
-
- if (footer > 0)
- {
- int footerpos = wadfile.Length - footer;
- int imetposfoot = 0;
-
- for (int z = 0; z < 200; z++)
- {
- if (Convert.ToChar(wadfile[footerpos + z]) == 'I')
- if (Convert.ToChar(wadfile[footerpos + z + 1]) == 'M')
- if (Convert.ToChar(wadfile[footerpos + z + 2]) == 'E')
- if (Convert.ToChar(wadfile[footerpos + z + 3]) == 'T')
- {
- imetposfoot = footerpos + z;
- break;
- }
- }
-
- Tools.ChangeProgress(90);
-
- int count2 = 0;
-
- for (int x = imetposfoot; x < imetposfoot + 40; x += 2)
- {
- if (japchars.Length > count2) { wadfile[x + 29] = Convert.ToByte(japchars[count2]); }
- else { wadfile[x + 29] = 0x00; }
- if (engchars.Length > count2) { wadfile[x + 29 + 84] = Convert.ToByte(engchars[count2]); }
- else { wadfile[x + 29 + 84] = 0x00; }
- if (gerchars.Length > count2) { wadfile[x + 29 + 84 * 2] = Convert.ToByte(gerchars[count2]); }
- else { wadfile[x + 29 + 84 * 2] = 0x00; }
- if (frachars.Length > count2) { wadfile[x + 29 + 84 * 3] = Convert.ToByte(frachars[count2]); }
- else { wadfile[x + 29 + 84 * 3] = 0x00; }
- if (spachars.Length > count2) { wadfile[x + 29 + 84 * 4] = Convert.ToByte(spachars[count2]); }
- else { wadfile[x + 29 + 84 * 4] = 0x00; }
- if (itachars.Length > count2) { wadfile[x + 29 + 84 * 5] = Convert.ToByte(itachars[count2]); }
- else { wadfile[x + 29 + 84 * 5] = 0x00; }
- if (dutchars.Length > count2) { wadfile[x + 29 + 84 * 6] = Convert.ToByte(dutchars[count2]); }
- else { wadfile[x + 29 + 84 * 6] = 0x00; }
-
- count2++;
- }
-
- for (int i = 0; i < 16; i++)
- wadfile[imetposfoot + 1456 + i] = newmd5[i];
- }
-
Tools.ChangeProgress(100);
return wadfile;
}
@@ -1797,8 +1780,8 @@ namespace Wii
public static byte[] TruchaSign(byte[] wadtiktmd, int type)
{
SHA1Managed sha = new SHA1Managed();
- int[] position = new int[2] { 0x1f1, 0x1d4 }; //0x104 0x1c1
- int[] tosign = new int[2] { 0x140, 0x140 }; //0x104 0x140
+ int[] position = new int[2] { 0x1f2, 0x1d4 };
+ int[] tosign = new int[2] { 0x140, 0x140 };
int tiktmdpos = 0;
int tiktmdsize = wadtiktmd.Length;
@@ -2338,6 +2321,34 @@ namespace Wii
return decryptedkey;
}
+
+ ///
+ /// Changes the IOS flag (IOS used to launch the title)
+ ///
+ ///
+ ///
+ public static void ChangeIosFlag(string wadtmd, int newIos)
+ {
+ if (newIos < 0 || newIos > 255) throw new Exception("IOS must be between 0 and 255!");
+
+ Tools.SaveFileFromByteArray(ChangeIosFlag(Tools.LoadFileToByteArray(wadtmd), newIos), wadtmd);
+ }
+
+ ///
+ /// Changes the IOS flag (IOS used to launch the title)
+ ///
+ ///
+ ///
+ public static byte[] ChangeIosFlag(byte[] wadtmd, int newIos)
+ {
+ if (newIos < 0 || newIos > 255) throw new Exception("IOS must be between 0 and 255!");
+
+ int tmdpos = 0;
+ if (WadInfo.IsThisWad(wadtmd)) tmdpos = WadInfo.GetTmdPos(wadtmd);
+
+ wadtmd[tmdpos + 395] = (byte)newIos;
+ return wadtmd;
+ }
}
public class WadUnpack
@@ -2864,7 +2875,7 @@ namespace Wii
//Write Footer Timestamp
byte[] footer = Tools.GetTimestamp();
- Array.Resize(ref footer, Tools.AddPadding(footer.Length, 16));
+ Array.Resize(ref footer, Tools.AddPadding(footer.Length));
int footerLength = footer.Length;
wadstream.Seek(Tools.AddPadding(contpos), SeekOrigin.Begin);
@@ -3244,6 +3255,7 @@ namespace Wii
byte[] spatitle = new byte[84];
byte[] itatitle = new byte[84];
byte[] duttitle = new byte[84];
+ byte[] kortitle = new byte[84];
for (int i = 0; i < 20; i++)
{
@@ -3282,6 +3294,14 @@ namespace Wii
duttitle[i * 2] = BitConverter.GetBytes(channeltitles[6][i])[1];
duttitle[i * 2 + 1] = BitConverter.GetBytes(channeltitles[6][i])[0];
}
+ if (channeltitles.Length > 7)
+ {
+ if (channeltitles[7].Length > i)
+ {
+ kortitle[i * 2] = BitConverter.GetBytes(channeltitles[7][i])[1];
+ kortitle[i * 2 + 1] = BitConverter.GetBytes(channeltitles[7][i])[0];
+ }
+ }
}
byte[] crypto = new byte[16];
@@ -3302,7 +3322,10 @@ namespace Wii
ms.Write(itatitle, 0, itatitle.Length);
ms.Write(duttitle, 0, duttitle.Length);
- ms.Seek(0x348, SeekOrigin.Current);
+ ms.Seek(0x390, SeekOrigin.Begin);
+ ms.Write(kortitle, 0, kortitle.Length);
+
+ ms.Seek(0x630, SeekOrigin.Begin);
ms.Write(crypto, 0, crypto.Length);
byte[] tohash = ms.ToArray();