NDS and N64 Injection work, without Images yet tho.

TODO:
GBA; NES; SNES Injection
Image fix
Custom base [NUS & LOADIINE]
Config feature
AutoUpdater
This commit is contained in:
NicoAICP 2020-04-05 00:16:55 +02:00
parent bf4f792c44
commit e6793babfa
17 changed files with 265 additions and 60 deletions

View file

@ -22,7 +22,7 @@ namespace UWUVCI_AIO_WPF
public PNGTGA TGADrc { get; set; } = new PNGTGA();
public PNGTGA TGATv { get; set; } = new PNGTGA();
public PNGTGA TGALog { get; set; } = new PNGTGA();
public N64Conf N64Stuff { get; set; } = null;
public N64Conf N64Stuff { get; set; } = new N64Conf();
}
}

View file

@ -1,9 +1,11 @@
using GameBaseClassLibrary;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.IO.Compression;
using System.Text;
using System.Windows;
using System.Xml;
using UWUVCI_AIO_WPF.Classes;
using UWUVCI_AIO_WPF.Properties;
@ -33,7 +35,7 @@ namespace UWUVCI_AIO_WPF
* iniPath = Only used for N64. Path to the INI configuration. If "blank", a blank ini will be used.
* darkRemoval = Only used for N64. Indicates whether the dark filter should be removed.
*/
public static void Inject(GameConsoles console, string baseRom, string customBasePath, string injectRomPath, string[] bootImages, string gameName, string iniPath = null, bool darkRemoval = false)
/*public static void Inject(GameConsoles console, string baseRom, string customBasePath, string injectRomPath, string[] bootImages, string gameName, string iniPath = null, bool darkRemoval = false)
{
CopyBase(baseRom, customBasePath);
switch (console)
@ -61,6 +63,49 @@ namespace UWUVCI_AIO_WPF
EditXML(gameName);
Images(bootImages);
//MessageBox.Show(Resources.InjectionFinishedText, Resources.InjectionFinishedCaption, MessageBoxButtons.OK, MessageBoxIcon.Information);
}*/
public static void Inject(GameConfig Configuration, string RomPath)
{
if(Configuration.BaseRom.Name != "Custom")
{
//Normal Base functionality here
CopyBase($"{Configuration.BaseRom.Name.Replace(":", "")} [{Configuration.BaseRom.Region.ToString()}]", null);
}
else
{
//Custom Base Functionality here
CopyBase($"Custom", Configuration.CBasePath);
}
RunSpecificInjection(Configuration, RomPath);
EditXML(Configuration.GameName);
//Images(Configuration);
MessageBox.Show("Injection Finished, please choose how you want to export the Inject next", "Finished Injection Part", MessageBoxButton.OK, MessageBoxImage.Information);
}
private static void RunSpecificInjection(GameConfig console, string RomPath)
{
switch (console.Console)
{
case GameConsoles.NDS:
NDS(RomPath);
break;
case GameConsoles.N64:
N64(RomPath, console.N64Stuff);
break;
/*case GameConsoles.GBA:
GBA(RomPath);
break;
case GameConsoles.NES:
NESSNES(RomPath);
break;
case GameConsoles.SNES:
NESSNES(RemoveHeader(RomPath));
break;*/
}
}
public static void Clean()
@ -73,29 +118,31 @@ namespace UWUVCI_AIO_WPF
public static void Loadiine(string gameName)
{
if (gameName == null || gameName == string.Empty) gameName = "NoName";
//string outputPath = Path.Combine(Properties.Settings.Default.InjectionPath, gameName);
string outputPath = string.Empty;
string outputPath = Path.Combine(Properties.Settings.Default.OutPath, $"[LOADIINE]{gameName}");
int i = 0;
while (Directory.Exists(outputPath))
{
//outputPath = Path.Combine(Properties.Settings.Default.InjectionPath, $"{gameName}_{i}");
outputPath = Path.Combine(Properties.Settings.Default.OutPath, $"[LOADIINE]{gameName}_{i}");
i++;
}
//Directory.Move(baseRomPath,outputPath);
// MessageBox.Show(string.Format(Resources.InjectCreatedText, outputPath), Resources.InjectCreatedCaption, MessageBoxButtons.OK, MessageBoxIcon.Information);
DirectoryCopy(baseRomPath,outputPath, true);
MessageBox.Show($"Injection Complete! The Inject is stored here:\n{outputPath}", "Inject Complete", MessageBoxButton.OK, MessageBoxImage.Information);
Clean();
}
public static void Packing(string gameName)
{
if (gameName == null || gameName == string.Empty) gameName = "NoName";
//string outputPath = Path.Combine(Properties.Settings.Default.InjectionPath, gameName);
string outputPath = string.Empty;
string outputPath = Path.Combine(Properties.Settings.Default.OutPath, $"[WUP]{gameName}");
int i = 0;
while (Directory.Exists(outputPath))
{
//outputPath = Path.Combine(Properties.Settings.Default.InjectionPath, $"{gameName}_{i}");
outputPath = Path.Combine(Properties.Settings.Default.OutPath, $"[WUP]{gameName}_{i}");
i++;
}
@ -104,13 +151,13 @@ namespace UWUVCI_AIO_WPF
cnuspacker.StartInfo.UseShellExecute = false;
cnuspacker.StartInfo.CreateNoWindow = true;
cnuspacker.StartInfo.FileName = Path.Combine(toolsPath, "CNUSPACKER.exe");
//cnuspacker.StartInfo.Arguments = $"-in \"{baseRomPath}\" -out \"{outputPath}\" -encryptKeyWith {Properties.Settings.Default.CommonKey}";
cnuspacker.StartInfo.Arguments = $"-in \"{baseRomPath}\" -out \"{outputPath}\" -encryptKeyWith {Properties.Settings.Default.Ckey}";
cnuspacker.Start();
cnuspacker.WaitForExit();
}
//MessageBox.Show(string.Format(Resources.InjectCreatedText, outputPath), Resources.InjectCreatedCaption, MessageBoxButtons.OK, MessageBoxIcon.Information);
MessageBox.Show($"Injection Complete! The Inject is stored here:\n{outputPath}", "Inject Complete", MessageBoxButton.OK, MessageBoxImage.Information);
Clean();
}
@ -148,6 +195,7 @@ namespace UWUVCI_AIO_WPF
// This function changes TitleID, ProductCode and GameName in app.xml (ID) and meta.xml (ID, ProductCode, Name)
private static void EditXML(string gameName)
{
string metaXml = Path.Combine(baseRomPath, "meta", "meta.xml");
string appXml = Path.Combine(baseRomPath, "code", "app.xml");
Random random = new Random();
@ -157,35 +205,42 @@ namespace UWUVCI_AIO_WPF
try
{
doc.Load(metaXml);
doc.SelectSingleNode("menu/longname_ja").InnerText = gameName;
doc.SelectSingleNode("menu/longname_en").InnerText = gameName;
doc.SelectSingleNode("menu/longname_fr").InnerText = gameName;
doc.SelectSingleNode("menu/longname_de").InnerText = gameName;
doc.SelectSingleNode("menu/longname_it").InnerText = gameName;
doc.SelectSingleNode("menu/longname_es").InnerText = gameName;
doc.SelectSingleNode("menu/longname_zhs").InnerText = gameName;
doc.SelectSingleNode("menu/longname_ko").InnerText = gameName;
doc.SelectSingleNode("menu/longname_nl").InnerText = gameName;
doc.SelectSingleNode("menu/longname_pt").InnerText = gameName;
doc.SelectSingleNode("menu/longname_ru").InnerText = gameName;
doc.SelectSingleNode("menu/longname_zht").InnerText = gameName;
if(gameName != null && gameName != string.Empty)
{
doc.SelectSingleNode("menu/longname_ja").InnerText = gameName;
doc.SelectSingleNode("menu/longname_en").InnerText = gameName;
doc.SelectSingleNode("menu/longname_fr").InnerText = gameName;
doc.SelectSingleNode("menu/longname_de").InnerText = gameName;
doc.SelectSingleNode("menu/longname_it").InnerText = gameName;
doc.SelectSingleNode("menu/longname_es").InnerText = gameName;
doc.SelectSingleNode("menu/longname_zhs").InnerText = gameName;
doc.SelectSingleNode("menu/longname_ko").InnerText = gameName;
doc.SelectSingleNode("menu/longname_nl").InnerText = gameName;
doc.SelectSingleNode("menu/longname_pt").InnerText = gameName;
doc.SelectSingleNode("menu/longname_ru").InnerText = gameName;
doc.SelectSingleNode("menu/longname_zht").InnerText = gameName;
}
doc.SelectSingleNode("menu/product_code").InnerText = $"WUP-N-{ID}";
doc.SelectSingleNode("menu/title_id").InnerText = $"0005000010{ID}00";
doc.SelectSingleNode("menu/group_id").InnerText = $"0000{ID}";
doc.SelectSingleNode("menu/shortname_ja").InnerText = gameName;
doc.SelectSingleNode("menu/shortname_fr").InnerText = gameName;
doc.SelectSingleNode("menu/shortname_de").InnerText = gameName;
doc.SelectSingleNode("menu/shortname_en").InnerText = gameName;
doc.SelectSingleNode("menu/shortname_it").InnerText = gameName;
doc.SelectSingleNode("menu/shortname_es").InnerText = gameName;
doc.SelectSingleNode("menu/shortname_zhs").InnerText = gameName;
doc.SelectSingleNode("menu/shortname_ko").InnerText = gameName;
doc.SelectSingleNode("menu/shortname_nl").InnerText = gameName;
doc.SelectSingleNode("menu/shortname_pt").InnerText = gameName;
doc.SelectSingleNode("menu/shortname_ru").InnerText = gameName;
doc.SelectSingleNode("menu/shortname_zht").InnerText = gameName;
if(gameName != null && gameName != string.Empty)
{
doc.SelectSingleNode("menu/shortname_ja").InnerText = gameName;
doc.SelectSingleNode("menu/shortname_fr").InnerText = gameName;
doc.SelectSingleNode("menu/shortname_de").InnerText = gameName;
doc.SelectSingleNode("menu/shortname_en").InnerText = gameName;
doc.SelectSingleNode("menu/shortname_it").InnerText = gameName;
doc.SelectSingleNode("menu/shortname_es").InnerText = gameName;
doc.SelectSingleNode("menu/shortname_zhs").InnerText = gameName;
doc.SelectSingleNode("menu/shortname_ko").InnerText = gameName;
doc.SelectSingleNode("menu/shortname_nl").InnerText = gameName;
doc.SelectSingleNode("menu/shortname_pt").InnerText = gameName;
doc.SelectSingleNode("menu/shortname_ru").InnerText = gameName;
doc.SelectSingleNode("menu/shortname_zht").InnerText = gameName;
}
doc.Save(metaXml);
}
catch (NullReferenceException)
@ -219,7 +274,7 @@ namespace UWUVCI_AIO_WPF
}
else
{
///DirectoryCopy(Path.Combine(Properties.Settings.Default.BaseRomPath, baserom), baseRomPath, true);
DirectoryCopy(Path.Combine(Properties.Settings.Default.BasePath, baserom), baseRomPath, true);
}
}
@ -259,16 +314,44 @@ namespace UWUVCI_AIO_WPF
private static void NDS(string injectRomPath)
{
using (ZipArchive archive = ZipFile.Open(Path.Combine(baseRomPath, "content", "0010", "rom.zip"), ZipArchiveMode.Update))
{
string romname = archive.Entries[0].FullName;
archive.Entries[0].Delete();
archive.CreateEntryFromFile(injectRomPath, romname);
}
string RomName = string.Empty;
using (Process getRomName = new Process())
{
getRomName.StartInfo.UseShellExecute = false;
getRomName.StartInfo.CreateNoWindow = false;
getRomName.StartInfo.RedirectStandardOutput = true;
getRomName.StartInfo.FileName = "cmd.exe";
Console.WriteLine(Directory.GetCurrentDirectory());
//getRomName.StartInfo.Arguments = $"/c \"Tools\\7za.exe\" l \"temp\\baserom\\content\\0010\\rom.zip\" | findstr \"WUP\"";
getRomName.StartInfo.Arguments = "/c Tools\\7za.exe l temp\\baserom\\content\\0010\\rom.zip | findstr WUP";
getRomName.Start();
getRomName.WaitForExit();
var s = getRomName.StandardOutput.ReadToEnd();
var split = s.Split(' ');
RomName = split[split.Length - 1].Replace("\r\n", "");
}
using (Process RomEdit = new Process())
{
RomEdit.StartInfo.UseShellExecute = false;
RomEdit.StartInfo.CreateNoWindow = true;
RomEdit.StartInfo.RedirectStandardOutput = true;
RomEdit.StartInfo.FileName = Path.Combine(toolsPath, "7za.exe");
//d Path.Combine(baseRomPath, "content", "0010", "rom.zip")
RomEdit.StartInfo.Arguments = $"d temp\\baserom\\content\\0010\\rom.zip";
RomEdit.Start();
RomEdit.WaitForExit();
File.Copy(injectRomPath, $"{RomName}");
RomEdit.StartInfo.Arguments = $"u temp\\baserom\\content\\0010\\rom.zip {RomName}";
RomEdit.Start();
RomEdit.WaitForExit();
}
File.Delete(RomName);
}
private static void N64(string injectRomPath, string iniPath, bool darkRemoval)
private static void N64(string injectRomPath, N64Conf config)
{
string mainRomPath = Directory.GetFiles(Path.Combine(baseRomPath, "content", "rom"))[0];
string mainIni = Path.Combine(baseRomPath, "content", "config", $"{Path.GetFileName(mainRomPath)}.ini");
@ -283,13 +366,18 @@ namespace UWUVCI_AIO_WPF
n64convert.WaitForExit();
}
if (iniPath != null)
if (config.INIPath == null)
{
File.Delete(mainIni);
File.Copy((iniPath == "blank") ? Path.Combine(toolsPath, "blank.ini") : iniPath, mainIni);
File.Copy(Path.Combine(toolsPath, "blank.ini"), mainIni);
}
else
{
File.Delete(mainIni);
File.Copy(config.INIPath, mainIni);
}
if (darkRemoval)
if (config.DarkFilter)
{
string filePath = Path.Combine(baseRomPath, "content", "FrameLayout.arc");
using (BinaryWriter writer = new BinaryWriter(new FileStream(filePath, FileMode.Open)))

View file

@ -8,7 +8,7 @@ namespace UWUVCI_AIO_WPF.Classes
{
class N64Conf : BaseModel
{
private string iniPath;
private string iniPath = null;
public string INIPath
{

View file

@ -20,7 +20,8 @@ namespace UWUVCI_AIO_WPF.Classes
"RetroInject.exe",
"tga_verify.exe",
"WiiUDownloader.exe",
"wiiurpxtool.exe"
"wiiurpxtool.exe",
"INICreator.exe"
//"7za.exe" will re-add later
};

View file

@ -10,6 +10,7 @@ using System.Threading.Tasks;
using System.Windows.Forms;
using UWUVCI_AIO_WPF.Classes;
using UWUVCI_AIO_WPF.Properties;
using UWUVCI_AIO_WPF.UI;
using UWUVCI_AIO_WPF.UI.Windows;
namespace UWUVCI_AIO_WPF
@ -100,6 +101,16 @@ namespace UWUVCI_AIO_WPF
}
}
private bool injected = false;
public bool Injected
{
get { return injected; }
set { injected = value;
OnPropertyChanged();
}
}
public int OldIndex { get; set; }
public bool RomSet { get; set; }
@ -178,6 +189,7 @@ namespace UWUVCI_AIO_WPF
}
}
private MainWindow mw;
public MainViewModel()
{
@ -193,6 +205,34 @@ namespace UWUVCI_AIO_WPF
GetAllBases();
}
public void setMW(MainWindow mwi)
{
mw = mwi;
}
public void Pack(bool loadiine)
{
if (loadiine)
{
Injection.Loadiine(GameConfiguration.GameName);
}
else
{
Injection.Packing(GameConfiguration.GameName);
}
mw.load_frame.Content = new Done();
GameConfiguration = new GameConfig();
LGameBasesString.Clear();
CanInject = false;
BaseDownloaded = false;
RomSet = false;
RomPath = null;
Injected = false;
}
public void Inject()
{
Injection.Inject(GameConfiguration, RomPath);
}
private void BaseCheck()
{
if (Directory.Exists(@"bases"))
@ -664,7 +704,7 @@ namespace UWUVCI_AIO_WPF
bool cont = false;
foreach(GameBases b in lNDS)
{
if(b == gb)
if(b.Name == gb.Name && b.Region == gb.Region)
{
ret = GameConsoles.NDS;
cont = true;
@ -674,7 +714,7 @@ namespace UWUVCI_AIO_WPF
{
foreach (GameBases b in lN64)
{
if (b == gb)
if (b.Name == gb.Name && b.Region == gb.Region)
{
ret = GameConsoles.N64;
cont = true;
@ -685,7 +725,7 @@ namespace UWUVCI_AIO_WPF
{
foreach (GameBases b in lNES)
{
if (b == gb)
if (b.Name == gb.Name && b.Region == gb.Region)
{
ret = GameConsoles.NES;
cont = true;
@ -695,8 +735,7 @@ namespace UWUVCI_AIO_WPF
if (!cont)
{
foreach (GameBases b in lSNES)
{
if (b == gb)
{ if(b.Name == gb.Name && b.Region == gb.Region)
{
ret = GameConsoles.SNES;
cont = true;
@ -707,7 +746,7 @@ namespace UWUVCI_AIO_WPF
{
foreach (GameBases b in lGBA)
{
if (b == gb)
if (b.Name == gb.Name && b.Region == gb.Region)
{
ret = GameConsoles.GBA;
cont = true;

View file

@ -0,0 +1,16 @@
<Page x:Class="UWUVCI_AIO_WPF.UI.Done"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:UWUVCI_AIO_WPF.UI.Frames"
mc:Ignorable="d"
d:DesignHeight="480" d:DesignWidth="1130"
Title="SettingsFrame">
<Grid>
<Label Content="Have fun with your Injected Game" FontSize="20" Height="480" HorizontalAlignment="Center" VerticalAlignment="Center" VerticalContentAlignment="Center" Width="1130" HorizontalContentAlignment="Center" />
</Grid>
</Page>

View file

@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace UWUVCI_AIO_WPF.UI
{
/// <summary>
/// Interaktionslogik für Done.xaml
/// </summary>
public partial class Done : Page
{
public Done()
{
InitializeComponent();
}
}
}

View file

@ -14,8 +14,8 @@
<Grid>
<Frame Name="fBaseFrame" Width="403" Height="297" Margin="19,52,708,131"></Frame>
</Grid>
<Button Content="WUP Installable" HorizontalAlignment="Left" Margin="49,421,0,0" VerticalAlignment="Top" Width="137" IsEnabled="False"/>
<Button Content="Loadiine" HorizontalAlignment="Left" Margin="268,421,0,0" VerticalAlignment="Top" Width="99" IsEnabled="False"/>
<Button Content="WUP Installable" HorizontalAlignment="Left" Margin="49,421,0,0" VerticalAlignment="Top" Width="137" IsEnabled="{Binding Injected}" Click="Button_Click_3"/>
<Button Content="Loadiine" HorizontalAlignment="Left" Margin="268,421,0,0" VerticalAlignment="Top" Width="99" IsEnabled="{Binding Injected}" Click="Button_Click_2"/>
<Frame Name="fLoadConfig" Width="643" Height="408" Margin="458,45,28,14"/>

View file

@ -20,8 +20,10 @@ namespace UWUVCI_AIO_WPF.UI.Frames
/// </summary>
public partial class INJECTFRAME : Page, IDisposable
{
MainViewModel mvm;
public INJECTFRAME(GameConsoles console)
{
mvm = FindResource("mvm") as MainViewModel;
InitializeComponent();
if(console == GameConsoles.N64)
{
@ -48,5 +50,15 @@ namespace UWUVCI_AIO_WPF.UI.Frames
{
//Export config
}
private void Button_Click_2(object sender, RoutedEventArgs e)
{
mvm.Pack(true);
}
private void Button_Click_3(object sender, RoutedEventArgs e)
{
mvm.Pack(false);
}
}
}

View file

@ -53,6 +53,7 @@ namespace UWUVCI_AIO_WPF.UI.Frames.InjectFrames.Bases
private void checkStuff(List<bool> info)
{
mvm.CanInject = false;
mvm.Injected = false;
if (info[0])
{
tbDWNL.Text = "Base Downloaded";

View file

@ -25,7 +25,7 @@
<Button Content="Set Path" HorizontalAlignment="Left" Margin="506,21,0,0" VerticalAlignment="Top" Width="127" Click="Set_Rom_Path"/>
<RadioButton x:Name="rbRDF" Content="Remove DarkFilter" HorizontalAlignment="Left" Margin="11,369,0,0" VerticalAlignment="Top" GroupName="df" IsChecked="{Binding GameConfiguration.N64Stuff.DarkFilter}"/>
<RadioButton Content="Keep DarkFilter" HorizontalAlignment="Left" Margin="151,369,0,0" VerticalAlignment="Top" GroupName="df" IsChecked="True"/>
<TextBox materialDesign:HintAssist.Hint="INI PATH" Style="{StaticResource MaterialDesignFloatingHintTextBox}" Margin="10,58,157,305" Background="{x:Null}" Foreground="Black" SelectionBrush="#FF00C3D7" CaretBrush="#FF21C3F3" FontSize="18" IsReadOnly="True" Focusable="False" Text="{Binding GameConfiguration.N64Stuff.INIPath}"/>
<TextBox materialDesign:HintAssist.Hint="INI PATH (LEAVE EMPTY FOR BLANK INI)" Style="{StaticResource MaterialDesignFloatingHintTextBox}" Margin="10,58,157,305" Background="{x:Null}" Foreground="Black" SelectionBrush="#FF00C3D7" CaretBrush="#FF21C3F3" FontSize="18" IsReadOnly="True" Focusable="False" Text="{Binding GameConfiguration.N64Stuff.INIPath}"/>
<Button Content="Set Path" HorizontalAlignment="Left" Margin="506,72,0,0" VerticalAlignment="Top" Width="127" Click="Set_IniPath"/>
</Grid>
</Page>

View file

@ -47,7 +47,8 @@ namespace UWUVCI_AIO_WPF.UI.Frames.InjectFrames.Configurations
private void InjectGame(object sender, RoutedEventArgs e)
{
mvm.Inject();
mvm.Injected = true;
}
private void Set_TvTex(object sender, RoutedEventArgs e)

View file

@ -49,7 +49,8 @@ namespace UWUVCI_AIO_WPF.UI.Frames.InjectFrames.Configurations
private void InjectGame(object sender, RoutedEventArgs e)
{
mvm.Inject();
mvm.Injected = true;
}
private void Set_TvTex(object sender, RoutedEventArgs e)

View file

@ -18,7 +18,8 @@
<Button Content="Open CK Menu" HorizontalAlignment="Left" Margin="605,166,0,0" VerticalAlignment="Top" Width="145" RenderTransformOrigin="-0.099,0.116" Click="Button_Click_1"/>
<Button Content="Open Path Menu" HorizontalAlignment="Left" Margin="605,119,0,0" VerticalAlignment="Top" Width="145" RenderTransformOrigin="-0.099,0.116" Click="Button_Click_2"/>
<Button Content="Open TK Menu" HorizontalAlignment="Left" Margin="605,215,0,0" VerticalAlignment="Top" Width="145" RenderTransformOrigin="-0.099,0.116" Click="Button_Click"/>
<Button Content="Update Base Files" HorizontalAlignment="Left" Margin="605,312,0,0" VerticalAlignment="Top" Width="145" RenderTransformOrigin="-0.099,0.116" Click="Button_Click_3"/>
<Button Content="Update Base Files" HorizontalAlignment="Left" Margin="605,308,0,0" VerticalAlignment="Top" Width="145" RenderTransformOrigin="-0.099,0.116" Click="Button_Click_3"/>
<Button Content="Start N64 Virtual Console INI Creator" HorizontalAlignment="Left" Margin="325,351,0,0" VerticalAlignment="Top" Width="425" RenderTransformOrigin="-0.099,0.116" Click="Button_Click_4"/>
</Grid>
</Page>

View file

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@ -14,6 +15,7 @@ using System.Windows.Navigation;
using System.Windows.Shapes;
using UWUVCI_AIO_WPF.UI.Windows;
namespace UWUVCI_AIO_WPF.UI.Frames
{
/// <summary>
@ -54,5 +56,10 @@ namespace UWUVCI_AIO_WPF.UI.Frames
MainViewModel mvm = FindResource("mvm") as MainViewModel;
mvm.UpdateBases();
}
private void Button_Click_4(object sender, RoutedEventArgs e)
{
Process.Start(@"Tools\INICreator.exe");
}
}
}

View file

@ -28,6 +28,7 @@ namespace UWUVCI_AIO_WPF
{
InitializeComponent();
load_frame.Content = new StartFrame();
(FindResource("mvm") as MainViewModel).setMW(this);
}
private void ButtonCloseMenu_Click(object sender, RoutedEventArgs e)
{
@ -67,6 +68,7 @@ namespace UWUVCI_AIO_WPF
mvm.BaseDownloaded = false;
mvm.RomSet = false;
mvm.RomPath = null;
mvm.Injected = false;
switch ((sender as ListView).SelectedIndex)
{
case 0:
@ -83,6 +85,7 @@ namespace UWUVCI_AIO_WPF
DestroyFrame();
tbTitleBar.Text = "UWUVCI AIO - N64 VC INJECT";
load_frame.Content = new INJECTFRAME(GameConsoles.N64);
mvm.GameConfiguration.N64Stuff = new Classes.N64Conf();
break;
case 3:
DestroyFrame();

View file

@ -90,6 +90,9 @@
<Compile Include="Classes\KeyFile.cs" />
<Compile Include="Classes\TKeys.cs" />
<Compile Include="Classes\ToolCheck.cs" />
<Compile Include="UI\Done.xaml.cs">
<DependentUpon>Done.xaml</DependentUpon>
</Compile>
<Compile Include="UI\Frames\KeyFrame\TKFrame.xaml.cs">
<DependentUpon>TKFrame.xaml</DependentUpon>
</Compile>
@ -102,6 +105,10 @@
<Compile Include="UI\Windows\TitleKeys.xaml.cs">
<DependentUpon>TitleKeys.xaml</DependentUpon>
</Compile>
<Page Include="UI\Done.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="UI\Frames\InjectFrame.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>